作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性 = 在创建表时给表中添加约束
完整性的分类:
-
实体完整性:
-
域完整性:
-
引用完整性: 学生表(学号 ,姓名) 成绩表( 学号,科目,成绩)
1.实体完整性约束
实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行数据不重复。
约束类型:
(1)主键约束 primary key
注意:每个表只有一个主键,主键数据唯一,并且不能为null
第一种添加方式:
第二种添加方式:这种方式可以添加联合主键
使用联合主键时,只要保证两条记录的sid和sname其中不一样就可插入。
第三种添加方式:在定义好的表上添加主键,这样只能在没有数据时添加,如果表中已经有数据,如果为主键的该列元素有重复值,就不能添加成功。
(2)唯一约束 unique
特点:数据不能重复。可以为null
如果插入的两行数据的cardId相同,则第二条记录不能插入。但是可以让cardid为空值,并且可以重复插入空值
(3)自动增长列 anto_increment
设置了开始值就从设定值开始自增,如果中间插入数据时你给了Id,并且没有Id值大于该自增到的值,下次插入无Id的记录时,会从你上次给定的Id(大值)继续自增。
2.域完整性
数据类型:(重点掌握)
数值类型:如果想得到较精确的小数,应该用DECIMAL(M,D),DOUBLE(M,D)得到是近似值
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
DOUBLE(M,D) | 8个字节,M表示长度,D表示小数位数 | 同上,受M和D的约束 DUBLE(5,2) -999.99-999.99 | 同上,受M和D的约束 | 双精度浮点数值 |
DECIMAL(M,D) | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值,M最大值为65 | 依赖于M和D的值,M最大值为65 | 小数值 |
日期类型:
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
字符创类型:
CHAR | 0-255字符 | 定长字符串 char(10) 10个字符 |
VARCHAR | 0-65535 字节 | 变长字符串 varchar(10) 10个字符 |
BLOB(binary large object) | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
char 定长,最大可以写255,而varchar为变长,最大为64k,但是不能写64k,要小于这个数。
非空约束,not null
默认值约束
直接写default就是默认。
3.引用完整性约束
外键约束 foreign key
也可以给该外键加个名字:constraint fk_socre_student foreign key(sid) references student(id);
创建时就添加外键,如果建好表之后再添加外键,可能会出现问题
注意:为了软件的性能,可能不会给这些表格加上约束,主键,外键等,因为这些会降低软件的性能。