约束类型:
约束名称 | 描述 | 关键字 |
非空约束 | 保证所有数据中不能有null值 | NOT NULL |
唯一约束 | 保证数据中所有数据个不相同 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
检查约束 | 保证列中的值满足唯一条件 | CHECK |
默认约束 | 保存数据时,未指定值则采用默认值 | DEFAULT |
外键约束 | 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 | FOREIGN KEY |
tips: MySQL 不支持检查约束
约束关键字位置:
- create table student (
- id int primary key auto_increment, # 学生id,主键且自增长
- ename varchar(50) not null unique, # 学生姓名,非空且唯一,多个约束并列写就可以
- joindate date not null, # 学生入学日期,非空
- score double(5,2) default 0, # 学生成绩,如果没有填写,默认成绩为0
- aca_id int not null unique, # 学院id,非空且唯一
- constraint fk_stu_aca foreign key(aca_id) references academy(id) # —添加外键 aca_id 关联 academy 表的id主键
- # fk_stu_aca为自己命名的外键名称; aca_id 为从表外键; academy(id):为主表academy的主键id
- );
tips:
- auto_increment : 当列是数字类型,并且唯一约束时,可用
创建表后添加或改变约束条件:
-
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL; # 非空约束 ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE; # 唯一约束 ALTER TABLE 表名 ADD PRIMARY KEY(字段名); # 主键约束 ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值; # 默认约束 ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主表列名称); # 外键
删除约束:
ALTER TABLE 表名 MODIFY 字段名 数据类型;# 非空约束 ALTER TABLE 表名 DROP INDEX 字段名;# 唯一约束 ALTER TABLE 表名 DROP PRIMARY KEY;# 主键约束 ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;# 默认约束 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; # 外键