数据的完整性指存储在数据库中的数据应该保持准确性和可靠性。比如出现学号相同的数据就是不准确的。
(1)实体完整性是对关系中的记录唯一性。
(2)定义表中的所有行能唯一的标识
(3)表中主属性(字段)不能为Null且不能有相同值
(4)一般用主键、唯一索引、 unique关键字来实现
主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录
简单总结主键约束的特征:唯一,不重复,不能为空,只能有一个主键约束
添加主键约束
(1)在创建表时,直接添加主键约束
第一种格式最常用。
(2)在创建表以后添加主键约束,需要使用alter语句
(3)删除主键约束
alter table 表名 drop primary key;
①唯一约束是指定table的列或列组合不能重复,保证数据的唯一性;
②唯一约束不允许出现重复的值,但是可以为多个null;
③同一个表可以有多个唯一约束,多个列组合的约束;
④如果不给唯一约束名称,就默认和列名相同;
⑤MySQL会给唯一约束的列上默认创建一个唯一索引;
(1)在创建表时,直接添加唯一约束
例如
(2)在已经创建好表的情况下,添加唯一约束
alter table 表名 add unique(列名);
(3)删除唯一约束
alter table drop index 表名 唯一约束的名字;
如果不给唯一约束名称,就默认和列名相同,那么删除唯一约束的时候就用原来的列名
一个表中可以有多个默认约束
①域完整性是对数据表中字段属性的约束
②它是由确定表结构时所定义的字段的属性决定的
③限制数据类型,缺省值(默认),规则,约束,是否可以为空
④域完整性可以确保不会输入无效的值
(1)在创建表的同时,添加默认约束
注意:默认值是字符串的话需要加单引号,只有默认值是数字的情况下不需要加单引号的。
(2)创建好表的情况下,添加默认约束
alter table 表名 modify 列名 数据类型 default '默认值';
(3)删除默认约束
alter table 表名 modify 列名 数据类型;
注意:默认约束的删除没有用到drop
(1)创建表的时候,直接添加非空约束
create table 表名(
列名1 数据类型,
列名2 数据类型 not null
);
(2)已经创建好表以后,添加非空约束
alter table 表名 modify 列名 数据类型 not null;
(3)删除非空约束(其实,默认情况下,每个列都可以为空的)
alter table 表名 modify 列名 数据类型;
3,额外补充,在其他数据库(oracle和SQL server)里面,域完整性中还包含了检查约束(check)的,但在MySQL里面是不支持的。
描述:限制某个列的取值范围 比如 年龄 18-25 性别 男或者女
①创建表的同时,直接添加检查约束
在MySQL里面这么写,运行以后也不会报错的,但是结果不受条件限制的影响,在其他数据库会对结果起到影响作用。
② 在已经创建好表的情况下,添加检查约束
alter table 表名 add constraint 检查约束的名字 check(条件);
③删除检查约束
alter table 表名 drop constraint 检查约束的名字;
指表与表之间的数据参照引用,使用外键约束foreign key
①外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系;
②表的外键值必须在主表中能找到;
③当主表的记录被从表参照时,主表的记录将不允许删除;
④如果要删除数据,需要先删除从表中依赖该记录的数据。
注意:
主表:被引用的表(被参照的表)
从表:引用的表 外键约束建立在从表里面
被引用的列,要么是主键约束,要么是唯一约束
1,在创建表的同时,直接添加外键约束
注意:引用的时候,主表和从表的列名可以不一样,但是数据类型必须保持一致(表达内容也要保持一致)。
2,在已经创建好表的情况下,添加外键约束
alter table 从表名 add constraint 外键约束名字 foreign key(从表列名) references 主表名(主表列名);
注意:在一个表中,可以存着多个外键约束。
3,删除外键约束
alter table 表名 drop foreign key 外键约束名字;