Mysql约束

约束

查看约束: SHOW CREATE TABLE table_name

一、主约束(primary key)

当创建或更改表时可通过定义 primary key约束来创建主键。

一个表只能有一个主键,不能有重复,不接受NULL值

1.创建表时添加主键
CREATE TABLE table_name ( id int PRIMARY KEY,-- 设置主键 name varchar(20) );
                         
CREATE TABLE table_name ( id int NOT NULL, name varchar(20) , PRIMARY KEY (`id`));
                         
CREATE TABLE table_name ( id int NOT NULL, name varchar(20) , constraint pk primary key(id));
2.创建表后添加主键
ALTER TABLE 表名称 ADD PRIMARY KEY(id); 
​
ALTER TABLE emp MODIFY empno INT PRIMARY KEY; -- 修改列的属性来添加主键约束 
​
ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno); 
3.删除主键
ALTER TABLE 表名称 DROP PRIMARY KEY; -- 【推荐】 

二、自增长列(auto_increment)

并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自增长列是 int 类型的,其值是 int 类型的,其值是由数据库自动维护的,是永远都不会重复的,因此自增长是最适合作为主键列的。通常与主键约束一起连用。

特点:

1.标识列必须和一个Key搭配(Key指主键、唯一、外键....)

2.一个表最多有一个标识列

3. 标识列的类型只能是数值型

4. 标识列可以通过SET auto_increment_increment = 3;设置步长(全局),可以通过插入

行时手动插入标识列值设置起始值。(思考:什么情况下此设置会失效)

1.创建自增长列
CREATE TABLE temp( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(2));
​
CREATE TABLE temp( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(2)) AUTO_INCREMENT=10; 
-- 设置自增长列的初始值 
2.设置自增长列的初始值
ALTER TABLE emp AUTO_INCREMENT = 10; 
​
ALTER TABLE 表名称 modify column id int auto_increment; 
3.删除自增长列
ALTER TABLE 表名称 MODIFY COLUMN id INT;

三、唯一约束(uinque)

对于非主键列中的值也要求唯一性时,就需要唯一约束

特点:

1.唯一约束要求值不能重复

2.可以存在多个空值( NULL )的数据

3.一张可以有多个唯一约束列

4.约束默认的名称为其列名

5.唯一约束创建后会自动创建一个唯一索引(索引后边会讲)

1.创建唯一约束(创建表时)
CREATE TABLE table_name ( id int NOT NULL, name varchar(20) UNIQUE, # 唯一约束 );
​
CREATE TABLE table_name ( id int NOT NULL, name varchar(20), constraint uq_name unique(name) );
2.创建唯一约束(创建表后)
alter table 表名称 ADD unique(列名称); 
​
ALTER TABLE dept ADD CONSTRAINT uq_name UNIQUE(deptname); 
3.删除唯一约束
ALTER TABLE tb_name DROP CONSTRAINT constraint_name; 

ALTER TABLE 表名称 drop index 设置唯一时的名称; -- 删除索引 

四、默认约束(default)

为列中的值设置默认值,default ....,如果已经定了值,默认值就无效了

特点:

1.创建表时,不写默认值都默认 NULL (在无非空约束的情况下)

2.默认约束和主键约束可以同时存在

3.默认约束不能和 AUTO_INCREMENT 同时使用

1.创建表时
CREATE TABLE table_name ( id int DEFAULT NULL,# 默认约束 name varchar(20) unique);

alter table 表名称 modify column 列名 列类型 default 默认值; 
2.删除默认约束
ALTER TABLE 表名称 modify column 列名 列类型; -- 将默认值改为 NULL 

ALTER TABLE tb_name ALTER col_name DROP DEFAULT; -- 删除了默认值,新增时必须有值

五、非空约束(not null)

NOT NULL :非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等

1.创建表时
CREATE TABLE table_name ( id int NOT NULL, # 非空约束  name varchar(20));
2.创建表后
alter table 表名称 modify column 列名 列类型 not null; 
3.删除非空约束
alter table 表名称 modify column 列名 列类型 [null]; 

六、外键约束(FOREIGN KEY)

主表的主键就是从表的外键

1.创建表时
CREATE TABLE `dept`( dept_no INT PRIMARY KEY, dept_name VARCHAR(20),)

CREATE TABLE `emp` ( `id` int NOT NULL, `name` varchar(20), `deptno` int, 

CONSTRAINT fk_dept_no FOREIGN KEY(deptno) REFERENCES dept(dept_no) );
2.创建表后
alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES  dept(deptno); 
3.删除
ALTER TABLE tb_name DROP CONSTRAINT constraint_name; 

ALTER TABLE 表名称 drop foreign key 设置外键时的名称; 

dept 是主表, userinfo 是从表

在 userinfo 表中添加或修改时, dept_no 列的值必须是 dept 表中 deptno 字段中的存在值或者 NULL

删除从表数据可以直接删除

删除主表数据时,会先检查被删除数据在从表中有没有对此数据的关联(引用),如果有不能直接删除。

如果想要解除此限制需要先禁用外键约束【不推荐】

我们可以在创建约束时,设置级联操作

1.on delete CASCADE/ on update CASCADE 级联删除 / 级联更新

2.ON DELETE SET NULL / ON UPDATE SET NULL

七、检查约束(CHECK)

check 检查约束,在数据添加或修改时保证数据的有效性。符合表达式的才会正确执行。
MySQL 8.0.16 之前的版本中没有 CHECK 约束。 CHECK Constraints

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值