数据完整性的概念
目的
为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时, DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确 保数据库中存储的数据正确、有效、相容。
概念
约束是用来确保数据的准确性和一致性。数据的完整性就是对数据的准确性和一致性的一种保证。
数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)
分类
1、数据实体完整性(唯一约束、主键约束、标识列)
2、字段完整性(限制数据类型、检查约束、外键约束、默认值、非空约束)
3、引用完整性(外键约束)
4、自定义完整性(规则、存储过程、触发器)
主键约束(PRIMARY KEY)
主键
主键是表中实现记录唯一性的字段
一个表中只能有一 个主键,如果建表的时候没有明确定义NOT NULL,
mysql会隐含的定义这些列 为NOT NULL。
特性:
1、唯一性
2、不能为NULL
语法:
CREATE TABLE 表名(列名 数据类型,…..,PRIMARY KEY(主键名(列名)));
ALTER TABLE 表名 ADD PRIMARY KEY(主键名(列名));
ALTER TABLE 表名 ADD CONSTRAINT 主键名称 PRIMARY KEY(主键);
自动增长型(AUTO_INCREMENT)
在数据库中,我们常用到唯一编号以表示记录,在mysql中 可以通过数据列的auto_increment属性来自动增长
应用于数值型
注意 添加自动增长的列,必须给主键约束
示例:
CREATE TABLE 表名(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR (20),
PRIMARY KEY (id)
)
修改自动增长列
ALTER TABLE 表名 AUTO_INCREMENT=值(从什么数值开始增长);
外键约束(FOREIGN KEY)
外键:
可以使得两张表关联,保证数据的一致性和实现一些级联操作
外键是子表里的一个字段,引用父表里的主键,一个被定义为外键的字段用于引用另一张表里的主键
语法:
ALTER TABLE 子表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键) REFERENCES 主表名(主表中的主键);
例如:
ALTER TABLE students ADD CONSTRAINT FK_class FOREIGN KEY (class_id) REFERENCES class(class_id);
注意:
1、外键名取名规范:FK_主表名,能够保证数据的一致性
2、从表中的外键值必须在主表中存在,建立主外表关系时,必须存在主表。先建立主表,再是从表
3、删除带有主外键关系的表时,先删从表再删主表数据
4、再添加外键时,添加 on delete cascade 进行级联删除
5、工作时很少建立主外键关系,主外键关系的约束会影响到执行性能
要求:
A:两个表必须是innodb表。
B:外键列必须建立索引.
C:外键关系的两个表的列必须是数据类型相似,可以相互转换的, 比如(int 跟 tinyint)可以,而int跟char则是不可以的。
关键字:
foreign key(列名) 引用父表那列
references `父表表名`(`父表的列名`)
constraint 指定约束的名称。在数据库中应是唯一的。如果没有指定, 那么系统为默认给你生成一个约束名。
on delete /on update cascade 级联更新删除数据
唯一约束(UNIQUE)
唯一约束
唯一性要求表里某个字段的值在每条记录里都是唯一的。
语法
ALTER TABLE 表名 ADD CONSTRAINT 唯一约束名 UNIQUE (列名);(直接给原有列添加唯一约束)
CREATE TABLE 表名(列名1 数据类型1,...,列名n 数据类型n UNIQUE);(建表的时候添加唯一约束)
非空约束(NOT NULL)
NOT NULL
字段定义了NOT NULL那么该字段就不允许NULL值出现,也可以说是每个字 段都必须有值,没有指定的话就默认是NULL。
检查约束(CHECK)
(这个好像在MySQL5.5版本无效,仅作了解)
自定义约束
CHECK
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(表达式);
例如
ALTER TABLE students ADD CONSTRAINT CHK_age CHECK (s_age>18);
ALTER TABLE students ADD CONSTRAINT CHK_sex CHECK (s_sex in ('男',' 女'));
删除约束
删除主键时必须先删除自增长。
删除自增长
ALTER TABLE 表名 CHANGE 自增列 自增列 数据类型;
例如: ALTER TABLE color CHANGE color_id color_id int(20);
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
例如: ALTER TABLE color DROP PRIMARY KEY;
删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名;
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
提醒:
实际工作中大部分的约束会在程序中解决,数据库中一般只用到 主键,自增,唯一,非空等约束。外键,检查用的很少。