常见约束
文章目录
含义:一种限制,用于限制表中的数据,保证表中的数据的准确和可靠性
分类:六大约束
NOT NULL : 非空,用于保证该字段的值不能为空,比如姓名,学号
DEFAULT:默认,用于保证该字段有默认值,比如性别
PRIMARY KEY : 主键 用于保证该字段的值具有唯一性,并且非空,比如学号,员工编号等
UNION : 唯一,用于保证该字段的值具有唯一性,可以为空,比如座位号
CHECK: 检查约束[ msyql 中不支持 ],比如年龄,性别
FOREIGN KEY : 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值
比如学生表的专业编号,员工表的部门编号,员工表的工种编号
添加约束的时机:
1.创建表时
2.修改表时
约束的添加分类
列级约束:六大约束语法上都支持,但外键约束没有效果
表级约束: 除了非空,默认,其他的都支持
语法
CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
注意: mysql中只支持默认,非空,主键,唯一
一.列级约束
CREATE TABLE stuinfo(
id INT PRIMARY key, #主键
stuName VARCHAR(20) not NULL, #非空
gender CHAR(1) CHECK(gender=‘男’ OR gender=‘女’), #检查
seat INT UNIQUE, #唯一
age INT DEFAULT 18, #默认约束
majorId INT REFERENCES major(id) #外键
);CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
查看表结构
desc stuinfo;
查看索引,包括主键,外键,唯一等
show index from stuinfo;
二.表级约束
create table stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1)
seat INT,
age INT,
majorid INT,
PRIMARY KEY(id), #主键
UNIQUE(seat), #唯一键
CHECK(gender=“男” OR gender=“女”), #检查
FOREIGN KEY(majorid) REFERENCES major(id) #外键
)
主键和唯一的大对比:
保证唯一性 | 是否允许为空 | 一个表可有多个 | 是否允许组合 | |
---|---|---|---|---|
主键 | √ | × | 至多有一个 | √,不推荐 |
唯一 | √ | √ | 可以有多个 | √,不推荐 |
外键的特点
1.要求在从表设置外键关系
2.从表的外键列的类型和主表的关联列的类型要求一致,或兼容,名称无要求
3.主表的关联列必须是一个key(一般是主键或唯一)
4.插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
三.修改表时添加约束
1.添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL
2.添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 16;
3.添加主键
①列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
②表级约束
ALTER TABEL stuinfo ADD PRIMARY KEY(id)
4.添加唯一
①列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
②表级约束
ALTER TABLE stuinfo ADD UNIQUE(seatt);
5.添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id)
语法总结:
1.添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
2.添加表级约束
alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键引用]
三,修改表时删除约束
删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
删除唯一
ALTER TABLE stuinfo DROP INDEX seat;
删除外键
ALTER TABLE stuinfo DROP FOREIFN KEY majorid