参考url:https://www.bilibili.com/video/BV12b411K7Zu
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:六大约束
NOT NULL:非空约束,用于保证该字段的值不能为空
DEFAULT:默认,用于保证该字段有默认值
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
CHECK:检查约束【mysql中不支持】
FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值(在从表添加外键约束,用于引用主表中某列的值)
添加约束的时机:
1、创建表时
2、修改表时
约束的添加分类;
1、列级约束:六大约束语法上都支持,但外键约束没有效果
2、表级约束:除了非空、默认,其他都支持
通用语法:
Create table if not exists stuinfo(
Id int primary key,
Stuname varchar(20) not null,
Sex char(1),
Age int default 18,
Seat int unique,
Majorid int,
Constraint fk_stuinfo_major foreign key(majorid) references major(id)
)
主键和唯一的对比:
|
保证唯一性 |
是否允许为空 |
一个表中可以有多少 |
是否允许组合 |
主键 |
是 |
否 |
至多有1个 |
允许,但不推荐 |
唯一 |
是 |
是 |
可以有多个 |
允许,但不推荐 |
外键:
1) 要求在从表设置外键关系
2) 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求。
3) 主表中的关联列必须是一个key(一般是主键或唯一键)
4) 插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
语法:
直接在字段名和类型名后面追加 约束类型即可
只支持:默认、非空、主键、唯一
USE students;
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;
#查看stuinfo表中所有的索引,包括主键、外键、唯一
SHOW INDEX FROM stuinfo;
语法:
在各个字段的最下面
【Constraint 约束名】 约束类型(字段名)
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=’男’ or gender=’女’),#检查
Constraint fk_stuinfo_major foreign key(majorid) references major(id) #外键
)
Alter table 表名 modify column 字段名 字段类型 新约束;
Alter table 表名 add 【constraint 约束名】约束类型(字段名)【外键的引用】;
Drop table if exists stuinfo;
Create table stuinfo(
Id int,
Stuname varchar(20),
Gender char(1),
Seat int,
Age int,
Majorid int
)
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 primary key;
#添加表级约束
Alter table stuinfo add primary key(seat);
Alter table stuinfo add constraint fk_stuinfo_major foreign key (majorid) references major(id)
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;
原文:https://www.cnblogs.com/nuochengze/p/12584032.html