0. 前言

1. 实体完整性

  • 1.1 主键约束(primary key)
  • 1.2 唯一约束(unique)
  • 1.3 自动增长列(auto_increment)

2. 域完整性

  • 数据类型
  • 非空约束
  • 默认值约束

3. 引用完整性

4. 表间的映射关系

0. 前言

什么是数据完整性:保证用户输入的数据能正确地保存到数据库中。

如何确保数据完整性:在创建表时给表中添加约束

完整性的分类:

  1. 实体完整性
  2. 完整性
  3. 引用完整性

1. 实体完整性

什么是实体:表中的一行(一条记录)代表一个实体(entity)。

实体完整性的作用:标识每一行数据不重复。

约束类型:

  1. 主键约束(primary key)
  2. 唯一约束(unique)
  3. 自动增长列(auto_increment)

每个表可以有多个 UNIQUE 约束,但只能有一个 PRIMARY KEY 约束

1.1 主键约束(primary key)

特点:数据唯一,且不能为 null。

-- 第一种添加方式
CREATE TABLE student_1(
     id int primary key,
     name varchar(50)
); -- 第二种添加方式:此种方式优势在于可以创建联合主键
CREATE TABLE student_2_1(
     id int,
     name varchar(50),
     primary key(id)
); CREATE TABLE student_2_2(
     classid int,
     stuid int,
     name varchar(50),
     primary key(classid,stuid)
); -- 第三种添加方式
CREATE TABLE student_3(
     id int,
     name varchar(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);

1.2 唯一约束(unique)

特点:数据不能重复。

CREATE TABLE student(
     id int primary key,
     name varchar(50) unique
);

1.3 自动增长列(auto_increment)

-- 给主键添加自动增长的数值,列只能是整数类型,且必须配合主键使用
CREATE TABLE student(
     Id int primary key auto_increment,
     Name varchar(50)
); INSERT INTO student(name) values('tom');

2. 域完整性

域代表当前单元格。

域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较。

域完整性的约束分类:

  1. 数据类型
  2. 非空约束(not null)
  3. 默认值约束(default)
  4. check 约束(mysql 不支持):check(sex='男' or sex='女')

数据类型

《MySQL 基础、安装、配置》

非空约束(not null)

CREATE TABLE student(
     Id int pirmary key,
     Name varchar(50) not null,
     Sex varchar(10)
); INSERT INTO student values(1, 'tom', null);

默认值约束(default)

CREATE TABLE student(
     Id int pirmary key,
     Name varchar(50) not null,
     Sex varchar(10) default '男'
); insert into student1 values(1, 'tom', '女');
insert into student1 values(2, 'jerry', default);
insert into student1 values(3, 'peter');

3. 引用完整性(外键约束)

在设置外键(FOREIGN KEY)约束的情况下,插入表 2 的外键字段值必需要求在表 1 的主键字段值中能找到。

同时,假设要删除表 1 的某个主键字段值,那么必须保证表 2 中的外键字段没有该主键字段的值,否则就没法删除。

-- 创建表1
CREATE TABLE student(
     sid int pirmary key,
     name varchar(50) not null,
     sex varchar(10) default '男'
); -- 创建表2
-- 第一种添加外键方式
create table score(
  id int,
  score int,
  sid int , -- 外键列的数据类型一定要与主表主键的类型一致
  CONSTRAINT fk_score_sid foreign key (sid) references student(id)
); -- 第二种添加外键方式
ALTER TABLE score ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);

4. 表间的映射关系

示例:

一对一

例如 t_person 表和 t_card 表,即人和身份证。这种情况需要找出主从关系,即谁是主表,谁是从表。人可以没有身份证,但身份证必须要有人才行,所以 t_person 是主表,而 t_card 是从表。

设计从表可以有两种方案:

  • 在 t_card 表中添加外键列(相对 t_person 表),并且给外键添加唯一约束;
  • 给 t_card 表的主键添加外键约束(相对 t_person 表),即 t_card 表的主键也是外键。

一对多(多对一)

最为常见的就是一对多。一对多和多对一,取决于哪个角度去看的,一般都是在多方的那张表创建外键。

多对多

例如 t_stu 和 t_teacher 表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系,例如可以再创建一张表 t_stu_tea 表,给出两个外键,一个是相对 t_stu 表的外键,另一个是相对 t_teacher 表的外键。

最新文章

  1. java获取注册ip
  2. Maven项目WEB-INF/views无法引入js,css静态文件解决方法
  3. [java]删除数组中的某一个元素
  4. 前端 时间个性化 插件 jquery.timeago.js
  5. bootstrap常用的定义风格
  6. Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example: Given the below binary tree andsum =
  7. Spring反射机制
  8. 获取客户端的IP地址
  9. excel导入 导出 兼容各个版本服务器不装EXCEL也可以
  10. iOS 网络与多线程--6.下载并保存网络图片
  11. JavaScript中定义变量和存储值的类型判断
  12. ASP.NET Core开发期间部署到IIS自定义主机域名并附加进程调试
  13. css3弹性盒模型flex快速入门与上手(align-content与align-items)
  14. DSAPI 生成桌面图标(带数字)
  15. Java文件File类学习总结
  16. Android开发最强模拟器Genymotion的安装及使用教程。附注释图详解
  17. RxSwift学习笔记9:amb/tabkeWhile/tabkeUntil/skipWhile/skipUntil
  18. chrome 搜索 jsonView
  19. python-组合模式
  20. 企业级NFS网络文件共享服务_【all】

热门文章

  1. 软件篇-01-为Jetson TX2扫清科研的障碍
  2. 【工具类】Stream流构建指定长度的时间集合
  3. windows CMD实现的信息收集工具
  4. Android so库文件的区节section修复代码分析
  5. C#-自动获取IP
  6. 发现Webpack中泄露的api
  7. (Py练习)查询子串出现次数
  8. 学生免费使用JetBrains全家桶
  9. Day006 方法的定义和调用
  10. restful 与 webapi 详解