MySQL常见约束详解
程序员文章站
2022-05-01 20:01:07
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性六大约束NOT NULL :非空,用于保证该字段的值不能为空DEFAULT:默认,用于保证该字段有默认值PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空UNIQUE:唯一,用于保证该字段的值唯一,可以为空,比如座位号CHECK:检查约束,MySQL不支持,比如年龄和性别,不满足要求则不能插入FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值;再从表添加外键约...
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
六大约束
- NOT NULL :非空,用于保证该字段的值不能为空
- DEFAULT:默认,用于保证该字段有默认值
- PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
- UNIQUE:唯一,用于保证该字段的值唯一,可以为空,比如座位号
- CHECK:检查约束,MySQL不支持,比如年龄和性别,不满足要求则不能插入
- FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值;再从表添加外键约束,引用主表中 关联列的值
注意:unique约束虽然可以为空,由于它本身要求唯一,所以表中只允许有一个null
约束分为
- 列级约束
六大约束语法上都支持,但是外键和检查约束没有效果 - 表级约束、
除了非空和默认约束,其他的约束都支持
添加约束的时机:创建表时和修改表时
CREATE TABLE 表名(
字段名 类型名 列级约束,
字段名 类型名 列级约束,
表级约束
);
一、创建表时添加约束
添加列级约束案例:
CREATE TABLE stuinfo(
id INT PRIMARY KEY, #主键约束
stuName VARCHAR(20) NOT NULL DEFAULT ‘John’, #非空和默认约束
gender CHAR(1) CHECK(gender IN ('男','女')), #检查约束,MySQL不支持
seat INT UNIQUE, #唯一约束
age INT DEFAULT 18, #默认约束
majorId INT REFERENCES major(id) #外键约束,无效
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARIANCE(20)
);
添加表级约束案例:
CREATE TABLE stuinfo(
id INT,
stuName VARCHAR(20),
gender CHAR(1) ,
seat INT,
age INT,
majorId INT,
CONSTRAINT pk PRIMARY KEY(id), #主键约束
CONSTRAINT uq UNIQUE(seat), #唯一约束
CONSTRAINT ck CHECK(gender IN ('男','女')), #检查约束
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id) #外键约束
);
#如果需要组合主键:PRIMARY KEY(id,其他字段名,...)
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARIANCE(20)
);
创建表及其约束的通用写法:
CREATE TABLE stuinfo(
id INT PRIMARY KEY, #主键约束
stuName VARCHAR(20) NOT NULL, #非空约束
gender CHAR(1) CHECK(gender IN ('男','女')), #检查约束,MySQL不支持
seat INT UNIQUE, #唯一约束
age INT DEFAULT 18, #默认约束
majorId INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id) #外键约束
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARIANCE(20)
);
查看表中所有的索引,包括主键,外键,唯一
SHOW INDEX FROM stuinfo;
主键和唯一的大对比(经典面试题):
保证唯一性 | 是否允许为空 | 一个表中可以有多个 | 是否允许组合 | |
---|---|---|---|---|
主键 | √ | × | 最多1个 | √,但不推荐 |
唯一 | √ | √ | 可以有多个 | √,但不推荐 |
外键的注意事项:
1.外键引用的主表关联列必须是一个key(主键或唯一都可以)
2.插入数据是应该先插入主表的数据,在插入从表的数据
3.删除表数据时,应该先删除从表的数据,再删除主表的数据
二、修改表时添加约束
#添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20) NOT NULL;
#添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#添加主键列级约束
ALTER TABLE stuinfo MODIFY COLUMN ID INT PRIMARY KEY;
#表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);
#添加唯一列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
#表级约束
ALTER TABLE stuinfo ADD UNIQUE(seat);
#添加级联删除外键
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id) ON DELETE CASCADE;
#添加级联置空外键
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id) ON DELETE SET NULL;
三、修改表时删除约束
#删除非空约束
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 FOREIGN KEY fk_stuinfo_major;
标识列
标识列又称为自增长列,关键词AUTO_INCREMENT
- 一个表至多一个标识列,而且必须和key(主键、外键、唯一)搭配
- 标识列只能是数值型(整形,浮点型)
- 标识列可以通过SET auto_increment_increment=3;设置步长;可以通过手动插入值,设置起始值。
在创建表和修改表时都可以使用标识列。
本文地址:https://blog.csdn.net/weixin_44237240/article/details/108980101