今日内容:03 Mysql之数据完整性约束使用
1- 数据完整性约束
作用
数据的准确性和可靠性
分类
实体完整性、域完整性、引用完整性
2- 实体完整性
实体:记录(表中每一行的内容就是一个记录)
实体完整性约束保证数据记录之间是准确的(能够唯一标识一个实体)
实体完整性包括主键约束、唯一约束、主键自增三种
2.1 主键约束
特点:唯一的,不能为空 ,一个表中只允许有一个主键约束
关键字:`primary key`
1-创建表的时候直接添加主键
CREATE TABLE student(
sid int PRIMARY key, -- id 是student的唯一主键
sname VARCHAR(20),
adress VARCHAR(30)
)
2-表已经创建好,再去添加主键(表中设置主键约束的字段不能有重复的数据,为空的数据)
添加约束语法:alter table 表名 add constraint 约束名 primary key(字段名);
约束名:PK_字段
删除约束语法:alter table 表名 drop primary key;
2.2 唯一约束
特点:不能重复,可以为空,一个表中可以添加多个唯一约束
关键字:unique
1-创建表的时候直接添加唯一约束
2-表已经创建好,再去添加唯一约束(表中设置唯一约束的字段不能有重复的数据)
添加约束语法:alter table 表名 add constraint 约束名 unique(字段名);
约束名:UQ_字段
删除约束语法:alter table 表名 drop key 约束名;
2.3 主键自增
特点:从1开始,每次自身加1(在oracle中不能使用)
关键字: auto_increment
只能在创建表的时候添加主键自增的约束,而且必须是主键才可以添加,必须是int类型
3- 域完整性
域:字段
域完整性约束保证字段的数据准确的
域完整性包括类型约束(int,varchar,date)、非空约束、默认值
3.1 非空约束
特点:字段不允许为空
关键字:not null
3.2 默认值
特点:设置默认的值
关键字: default
CREATE TABLE student(
sid int PRIMARY key auto_increment, -- id 是student的唯一主键
sname VARCHAR(20) UNIQUE,
adress VARCHAR(30) not null,
qq VARCHAR(15) UNIQUE,
`status` int DEFAULT 1 -- 1代表优秀,2,良好 3,一般
)
编码问题:右键点击设计表,选择字段,
字符集选择utf8,
排序规则utf8_general_ci
4- 引用完整性
4.1 外键
一张表中通用列的取值必须参考另外一张表的主键
特点:设置外键的字段的取值只能参考另一张表中同一个字段的值
关键字: foreign key
添加外键约束的语法:alter table 表名1 add constraint 约束名 foreign key(字段名) references 表名2(字段名)
删除外键的语法:alter table 表名 drop froeign key 约束名;
注意:
学生表的classid 添加外键约束 班级表(父表) 班级id
父表不能删除(学生表可以直接删除)
添加外键约束的俩个字段的类型必须一样
添加外键约束(父表的字段)一定要是主键或是唯一约束