一、数据完整性的概念 1、目的
为了防止非标准数据进入数据库,当用户插入、修改、删除数据时,DBMS按照一定的约束自动对数据进行监控,使非标准数据无法进入数据库,以保证存储的数据正确、有效且兼容。
2. 概念
约束用于确保数据的准确性和一致性。 数据完整性是数据准确性和一致性的保证。
数据完整性(Data)是指数据的准确性()和可靠性()。
3. 分类
1.数据实体完整性(唯一约束、主键约束、标识列)
2.字段完整性(受限数据类型、检查约束、外键约束、默认值、非空约束)
3.参照完整性(外键约束)
4. 自定义完整性(规则、存储过程、触发器)
2. 自动增长 1. 自动增长
在数据库中,我们经常使用唯一的数字来表示记录,而在mysql中,可以通过数据列的属性来自动增加。
例子:
Create table 表名(Id int not null auto_increment,Name varchar(20),Primary key(id))engine=innodb default charset=utf8;
2、修改自动增长列的自动增长值起始值
alter table表名=值(从什么值开始增加);
alter table student auto_increment=10
三、主键约束 1、主键(key):
主键是实现表中记录唯一性(唯一性、非空)的字段。 一张表中只能有一个主键。 如果创建表时没有明确定义not null,mysql会隐式定义这些列为not null。
2、语法:table表名(列名数据类型,.....,key(主键名(列名)));
alter table表名add key(主键名(列名));
alter table 表名 添加主键名称 key(主键);
alter table students add primary key (s_id) -- 会报错 s_id主键不允许为null insert into students(s_id,s_name,age,height) values(null,'gmcc',18,170) -- 不会报错, s_id主键可以插入一个空字符串 insert into students(s_id,s_name,age,height) values('','gmcc',18,170)
四、外键约束 1、外键:
两个表可以关联起来,保证数据的一致性,并实现一些级联操作。 外键是子表中引用父表中主键的字段,定义为外键的字段用于引用另一个表。 在主键中。
注意:外键是主表中的字段,外键名称不会出现在主表和副表中。
2、语法:alter table key name from 表名KEY(从表的列名-外键)主表名(主表中外键对应的字段); 外键名称规范:FK_主表名
ALTER TABLE students ADD ConSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class (class_id) on delete CASCADE ;
3、要求:
A:两个表都必须是表。
B:外键列必须建立索引。
C:外键关系中两个表的列必须具有相似的数据类型,并且可以相互转换,例如(int and)可以,但int和char则不行。
4、关键词:
键(列名)指的是表中的列。
父表表名(父表的列名)
指定约束的名称。 在数据库中应该是唯一的。 如果不指定,系统默认为您生成一个约束名称。
5.级联删除
添加外键时添加,删除主表外键时会进行级联删除。
on /on 级联更新删除数据。
实际工作中很少建立主外键关系。 主外键关系的约束会影响执行性能,级联删除可能会导致大量数据被误删除。
6. 注意:
1.外键的作用:保证数据的一致性。
2、从表中的外键值必须存在于主表中,建立主外键关系时主表必须存在。 先创建主表,再创建从表。
3.如果插入的从表数据的外键字段的值在主表中不存在,则会报如下错误
添加或子行:某个键失败(.,KEY()类())
4、删除主外键关系的表时,先删除从表,再删除主表数据。
五、唯一约束
1、唯一性约束要求表中某个字段的值在每条记录中都是唯一的。
2、语法:alter table 表名 add 唯一约束名(列名);
例子:
alter table students add constraint un_name unique(s_name);
3、创建表时添加唯一约束的方式:直接添加在需要唯一约束的字段后面。
例子:
create table test(t_id int not null primary key,t_name varchar(10) not null unqiue);
六、非空约束NOT NULL
如果字段定义了NOT NULL,那么该字段不允许出现NULL值。 也可以说每个字段都必须有一个值。 如果不指定,则默认为NULL。
七、检查约束CHECK
1、语法:alter table 表名 add 约束名 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表名自增列自增列数据类型;
例如:
更改表颜色 int(20);
– 删除主键
alter table 表名 drop KEY;
例如:
ALTER table color DROP PRIMARY KEY;
– 消除限制
ALTER table 表名 DROP 约束名;
– 删除外键:
ALTER table 表名 drop KEY 外键名;
alter table students drop foreign key fk_class;