MySQL常见约束详解

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
六大约束

  • 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;设置步长;可以通过手动插入值,设置起始值。

在创建表和修改表时都可以使用标识列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值