尚硅谷之MySQL基础
6、约束:CONSTRAINTS
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据的完整性要从以下四个方面考虑:
- 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录
- 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女”
- 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门
- 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。
根据约束的特点,分为几种:
- 键约束:主键约束、外键约束、唯一键约束
- Not NULL约束:非空约束
- Check约束:检查约束
- Default约束:缺省约束
(1)查看某个表的约束和索引
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称'; |
SHOW INDEX FROM 表名称; |
SHOW CREATE TABLE 表名; |
(2)主键约束PRIMARY KEY
主键:Primary key,简称PK,数据库主键作用保证实体的完整性,可以是一个列或多列的组合。
- 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值,如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
- 每个表有且最多只允许一个主键约束。
- MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。
- 当创建主键约束时,MySQL默认在对应的列上建立主键索引。删除主键时,也会直接删除主键索引。
如何建立主键?
在主键列后面直接加主键约束,复合主键不能使用这种方式 |
单独声明主键约束 |
声明复合主键,复合主键只能使用这种方式 |
|
CREATE TABLE t_stu( sid INT PRIMARY KEY, sname VARCHAR(100), gender CHAR ); |
CREATE TABLE t_course( cid INT , cname VARCHAR(100), decription VARCHAR(200), PRIMARY KEY(cid) ); |
CREATE TABLE t_stu_course( sid INT, cid INT, score DOUBLE(4,1), PRIMARY KEY(sid,cid) ); |
|
建表后添加主键约束 |
alter table 表名称 add 【constraint 约束名】 primary key (字段名); |
||
alter table 表名称 add 【constraint 约束名】 primary key (字段名1,字段名2); |
|||
ALTER TABLE t_stu ADD PRIMARY KEY(sid); |
ALTER TABLE t_course ADD PRIMARY KEY(cid); |
ALTER TABLE t_stu_course ADD PRIMARY KEY(sid,cid); |
如何删除主键?
删除主键约束,不需要指定主键名,一个表只有一个主键 alter table表名称drop primary key; |