一、主键约束:
1.1主键约束(PRIMARY KEY):一个表中只能有一个主键
1)建表时添加主键约束:
方法一:
create table students(id int auto_increment primary key,name varchar(20),age int );
方法二:
create table students(id int ,name varchar(20),age int,primary key);
2)见表后修改为主键约束(add、modify、change都可):
如alter from 表名 add 字段名 类型primary key;
3)删除主键:
alter table 表名称 drop primary key;
1.2自增长列(标识列):AUTO_INCREMENT必须跟和一个Key搭配(如主键约束、唯一约束、外键约束等)
1)标识列可以设置步长
SET auto_increment_increment = 3; #设置步长(全局,退出数据库重新进入会恢复默认值)
2)建表时跟主键约束一样,在字段后直接加auto_increment
3)建表后修改(modfiy、change均可)④删除自增长:
alter table 表名 modify 字段名 类型 [auto_increment];
1.3联合主键:是指在数据库表中,由多个列共同组成的主键, 用来唯一标识表中的每一行数据。它的作用类似于单一列的主键,但不是由单个列组 成,而是由多个列组合而成。联合主键可以确保表中的每一行都具有唯一性,并且每 个列组合的值都不会重复。
联合主键在以下情况非常有用:
1)当单个列无法唯一标识表中的每一行,但多个列组合在一起可以唯一标识每一 行数据时。
2)提高查询性能:联合主键可以更有效地支持涉及多个列的查询,避免创建额外 的索引。
3)在具有多个外键的关联表中,可以使用联合主键来确保外键引用的准确性。
二、唯一约束:(UNIQUE)
1)建表时的用法与主键约束相同:
create table 表名(字段名,类型,... ,constraint 约束名 unique(字段名);
2)建表后修改(add、modify、change均可):
alter table 表名称 add UNIQUE(字段名);
3)删除时:
alter table 表名称 drop index 设置唯一时的名称;
三、默认约束:(DEFAULT)
1)建表时与主键约束建表时用法相同。
2)建表后更改(modify、change均可)。
3)删除默认约束:
alter table 表名 modify [column] 列名 列类型;
alter table 表名 alter column 列名 drop default;
四、非空约束:(NOT NULL)
1)增加修改为非空约束与主键约束一样。
2)删除非空约束:
alter table 表名 modify 字段名 类型 [null];
五、检查约束:(CHECK)是MySQL8.0.19版本开始的。
1)建表时添加检查约束
create table employees (
id int AUTO_INCREMENT PRIMARY KEY,
name varchar(50),
age int,
email varchar(100),
check (age >= 18));
2)修改时添加检查约束
alter table 表名 change 列名 列名 列类型 CHECK(condition);
alter table 表名 modify 列名 列类型 CHECK(condition);
alter table 表名 add constraint 列名 CHECK(condition);
3)删除检查约束
alter table 表名 drop contraint 约束名;
六、外键约束
1)建表时添加外键约束
create table 表名(
id int auto_increment primar key,
`name` varchar(20) not null,
gender varchar(20) default '男',
age int,
check (age >= 18),
constraint 索引名 foreign key(从表字段) references 主表名(主表字段)
);
2)修改时添加外键约束
alter table 从表表名 add [CONSTRAINT] 约束名称 foreign key (从表字段) reference 主表表名(主表字段);
3)删除外键约束
alter table 表名称 drop foreign key 索引名;
4)外键约束需注意:
①外键列类型需要与引用列类型一致
②外键列的值必须是主表中引用列的值或者 NULL
③一个表可以有多个外键列
④从表列可以随便删除
⑤删除主表数据时,会先检查从表中有没有对此数据的关联,如果有就不能直接删除
⑥在 设 置 外 键 的 时 候 后 面 添 加 on delete cascade / on update cascade
⑦在删除/更新主表时,级联删除/更新外键列的数据 在设置外键的时候后面添加 on delete set null / on update set null 在删除/更新主表时,外键列的值会变成null