MySQL约束
概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
- 非空约束:not null
- 唯一约束:unique
- 主键约束:primary key
- 外键约束:foreign key
- 默认约束:Default
- 检查约束:Check
非空约束:not null
某一列的值不能为空
-
创建表时添加约束
CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 );
-
创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
3. 删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
唯一约束:unique
某一列的值不能重复
注意:
- 唯一约束可以有NULL值,但是只能有一条记录为null
-
在创建表时,添加唯一约束
CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE -- 手机号 );
-
在表创建完后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
-
删除唯一约束(与非空约束不同)
ALTER TABLE stu DROP INDEX phone_number;
主键约束:primary key
非空且唯一
注意:
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识
-
在创建表时,添加主键约束
create table stu( id int primary key,-- 给id添加主键约束 name varchar(20) );
-
创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
-
删除主键
ALTER TABLE stu DROP PRIMARY KEY;
-
自动增长:
**注意:**自动增长是根据上一个数据的值增长。设置自动增长的数据还可以主动赋值。
-
概念:如果某一列是数值类型的,使用
auto_increment
可以来完成值得自动增长(一般和主键一起用) -
在创建表时,添加主键约束,并且完成主键自增长
create table stu( id int primary key auto_increment,-- 给id添加主键约束 name varchar(20) );
-
添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
-
删除自动增长
ALTER TABLE stu MODIFY id INT;
外键约束:foreign key
让表于表产生关系,从而保证数据的正确性。
- 在创建表时,可以添加外键
create table 表名(
....
外键列
constraint 约束(外键)名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
- 创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 约束(外键)名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
- 级联操作
- 添加级联操作
ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)
ON UPDATE CASCADE ON DELETE CASCADE ;
- 分类:
1. 级联更新:ON UPDATE CASCADE
2. 级联删除:ON DELETE CASCADE
(慎用)
默认约束:Default
设置属性的默认值,没有定义的时候,默认值为空null
-
在创建表时,可以添加默认约束
CREATE TABLE Persons ( Id int NOT NULL, Name varchar(255) DEFAULT '张三' );
-
创建表后,添加默认约束
ALTER TABLE Persons ALTER Name SET DEFAULT '张三';
-
删除默认约束
ALTER TABLE Persons ALTER Name DROP DEFAULT
检查约束:Check
用于限制列中的值的范围
-
创建表时,添加检查约束
设置约束名
CREATE TABLE Persons ( Id int NOT NULL, Name varchar(255) NOT NULL, Address varchar(255), City varchar(255), CONSTRAINT chk_Person CHECK (Id>0 AND City='北京') );
不设置约束名
CREATE TABLE Persons ( Id int NOT NULL, Name varchar(255) NOT NULL, Address varchar(255), City varchar(255), CHECK (Id>0) );
-
创建表之后,添加检查约束
设置约束名
ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id>0 AND City='北京');
不设置约束名
ALTER TABLE Persons ADD CHECK (Id>0);
-
删除检查约束
ALTER TABLE Persons DROP CHECK chk_Person;