约束
- 概述:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
约束分类
约束关键字 | 约束意思 |
---|---|
primary key | 主键约束 |
not null | 非空约束 |
unique | 唯一约束 |
foreign key | 外键约束 |
例子:sname varchar(40) not null, – 代表 sname 这个字段不能为 NULL
非空约束
-
概述:NOT NULL ,某一列的值不能为 NULL
-
语法
- 创建表的时候添加 非空约束
CREATE TABLE stu( id INT, name VARCHAR(40) NOT NULL -- name 字段非空 );
- 创建完表后,添加 非空约束
ALTER TABLE stu MODIFY name VARCHAR(40) NOT NULL;
- 删除 name 的 非空约束
ALTER TABLE stu MODIFY name VARCHAR(40);
-
示例代码
-- 创建数据库,并指定字符集 CREATE DATABASE test CHARACTER SET utf8; -- 使用此数据库 USE test; -- 创建表 a 时候,id 字段添加非空约束 CREATE TABLE a( id INT NOT NULL, NAME VARCHAR(40) ); -- 复制表 a ,新的表名是 b CREATE TABLE b LIKE a; -- 查询表结构 DESC a; -- 可以看到在 Null一列显示 NO(不可为空) DESC b; -- 可以看到在 Null一列显示 NO -- 删除 b 表中非空约束 ALTER TABLE b MODIFY id INT; DESC b; -- 执行完删除后,才执行查询,显示为 YES -- b 表中 name 添加非空约束 ALTER TABLE b MODIFY NAME VARCHAR(40) NOT NULL; DESC b; -- 执行完删除后,执行查询,name 显示为 NO -- 使用完删除 数据库即可 DROP DATABASE test;
唯一约束
-
概述:UNIQUE ,某一列值唯一,不能重复
- 唯一约束可以有 NULL 值,但是只能有一条记录为 NULL
-
语法
- 创建表时,添加 唯一约束
CREATE TABLE stu( id INT, phone_number VARCHAR(11) UNIQUE -- 手机号唯一 );
- 创建完表后,添加 唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE;
- 删除 唯一约束
ALTER TABLE stu DROP INDEX phone_number;
-
示例代码
-- 创建数据库,并指定字符集 CREATE DATABASE test CHARACTER SET utf8; -- 使用此数据库 USE test; -- 创建表 a ,并添加唯一约束 CREATE TABLE a( id INT, phone_number VARCHAR(11) UNIQUE ); -- 查看 a 表结构 DESC a; -- phone_number key一列为 UNI -- 删除 a 表中的唯一约束 ALTER TABLE a DROP INDEX phone_number; DESC a; -- phone_number key一列为 空白 -- 给 a 表 id 添加唯一约束 ALTER TABLE a MODIFY id INT UNIQUE; DESC a; -- id key一列为 UNI -- 删除数据库 DROP DATABASE test;
主键约束
-
概述:PRIMARY KEY ,某一列设置为主键(非空且唯一)
- 一张表只能有一个字段为主键
- 主键是表中记录的唯一标识(例如:身份证号)
-
语法
- 创建表时,添加 主键约束
CREATE TABLE stu( id int primary key, -- 给 id 添加主键约束 name VARCHAR(40) );
- 创建完表后,添加 主键约束
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
- 删除 主键约束
ALTER TABLE stu DROP PRIMARY KEY;
-
示例代码
-- 创建数据库,并指定字符集 CREATE DATABASE test CHARACTER SET utf8; -- 使用此数据库 USE test; -- 创建表 a 时候,id 字段添加主键约束 CREATE TABLE a( id INT PRIMARY KEY, NAME VARCHAR(40) ); -- 复制表a ,新表名为 b CREATE TABLE b LIKE a; -- 查询表的结构 DESC a; -- 可以看到id,key这一列显示 PRI,NULL 为 NO DESC b; -- 可以看到id,key这一列显示 PRI,NULL 为 NO -- 删除 b 表中的主键约束 ALTER TABLE b DROP PRIMARY KEY; DESC b; -- 添加 b 表中的主键约束 ALTER TABLE b MODIFY id INT PRIMARY KEY; DESC b; -- 使用完,删除数据库 DROP DATABASE test;
自动增长
-
概述:如果某一列是数值类型,使用 AUTO_INCREMENT 完成值的自动增长
-
语法
- 创建表时,添加主键约束,并且完成主键自增长。
CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自增长 name VARCHAR(40) );
- 创建完后,添加自动增长
ALTER TABLE stu MODIFY id AUTO_INCREMENT;
- 删除自动增长
ALTER TABLE stu MODIFY id INT;
-
示例代码
-- 创建数据库,并指定字符集 CREATE DATABASE test CHARACTER SET utf8; -- 使用此数据库 USE test; -- 创建表 a ,并添加主键约束和自增长 CREATE TABLE a( id INT PRIMARY KEY AUTO_INCREMENT, phone_number VARCHAR(11) ); -- 查看 a 表结构 DESC a; -- id Extra一列为 auto_increment -- 删除 a 表中的自动增长 ALTER TABLE a MODIFY id INT; DESC a; -- id Extra一列为 空白 -- 给 a 表 id 添加 自动增长 ALTER TABLE a MODIFY id INT AUTO_INCREMENT; DESC a; -- id Extra一列为 auto_increment -- 删除数据库 DROP DATABASE test;
外键约束
-
概述:FOREIGN KEY ,让表和表之间产生关系,从而保证数据的正确性
-
语法
- 创建表时,添加外键约束
CREATE TABLE stu( ... 外键列, CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称) );
- 创建完表后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称 (主表列名称);
- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-
示例代码
-- 创建数据库,并指定字符集 CREATE DATABASE test CHARACTER SET utf8; -- 使用此数据库 USE test; -- 创建 部门 表 CREATE TABLE dept( deptId INT PRIMARY KEY, -- 部门表号 NAME VARCHAR(40) -- 部门名字 ); -- 创建员工表 CREATE TABLE employ( id INT PRIMARY KEY, -- 员工编号 ename VARCHAR(40), -- 员工名字 dept_id INT, -- 员工部门编号 CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId) ); -- 看下述步骤查看是否有外键 -- 删除 员工表外键 ALTER TABLE employ DROP FOREIGN KEY emp_dept; -- 查看 -- 添加 员工表外键 ALTER TABLE employ ADD CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId); -- 查看 -- 删除数据库 DROP DATABASE test;
查看外键
- 删除外键后
- 添加外键后