#常见约束
/*
六大约束
1 not null:非空约束 用于保证该字段不为空
2 default :默认 用于保证该字段有默认值
3 primary key 主键 用于保证该字段的唯一性,并且非空
4 UNIQUE :唯一 保证该字段的唯一性 可以为空
5 cheak :检查约束(mysql不支持)
6 FOREIGN key: 限制两个表之间的关系
添加约束的时机
1 创建表时
2 修改表时
约束的添加分类
列级约束:
六大约束语法上都支持
表级约束
除了非空 默认 其他都支持
*/
use students
CREATE table stuinfo (
id int PRIMARY key ,
studentName VARCHAR(20) not null,
gender char(1) CHECK(gender=‘男’ or gender=‘女’),
seat int UNIQUE,
age int DEFAULT 18,
majorId int REFERENCES major(id) #外键
)
desc stuinfo
#查看表中的索引
show index from stuinfo
CREATE table major(
id int PRIMARY key,
majorName VARCHAR(20)
)
drop table if EXISTS stuinfo
CREATE table stuinfo (
id int,
stuname VARCHAR(20),
gender enum(‘man’,‘woman’),
seat int,
age int ,
majorid int,
#表级约束
CONSTRAINT pk PRIMARY key(id) ,#主键
CONSTRAINT uk UNIQUE(seat), #唯一键
CONSTRAINT ck CHECK(gender in ('man','woman')),
CONSTRAINT fk FOREIGN key (majorid) REFERENCES major(id)
)
CREATE table stuinfo (
id int,
stuname VARCHAR(20),
gender VARCHAR(5),
seat int,
age int ,
majorid int,
#表级约束
CONSTRAINT pk PRIMARY key(id) ,#主键
CONSTRAINT uk UNIQUE(seat), #唯一键
CONSTRAINT ck CHECK(gender in ('man','woman')),
CONSTRAINT fk FOREIGN key (majorid) REFERENCES major(id)
)
desc stuinfo
INSERT into stuinfo values(1,‘ljj’,‘man’,12,21,164)
INSERT into major VALUES(164,‘飞逸’)
INSERT into stuinfo values(2,‘ljj’,‘m’,13,21,164)
#通用写法
drop table if EXISTS stuinfo
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)
)
CREATE table if not EXISTS stuinfo(
id int ,
stuname VARCHAR(20),
sex char(1),
age int,
seat int,
majorid int
)
#添加约束
#1 添加非空约束
alter table stuinfo MODIFY COLUMN stuname VARCHAR(20) not null
#添加默认值
alter table stuinfo MODIFY COLUMN age int DEFAULT 18
#添加主键
##表级约束
alter table stuinfo add primary key(id)
##列级约束
alter table stuinfo MODIFY COLUMN id int PRIMARY key
#唯一约束
##列级约束
alter table stuinfo MODIFY COLUMN seat int UNIQUE
##表级约束
alter table stuinfo add UNIQUE(seat)
##5 添加外键
alter table stuinfo add CONSTRAINT fk_stuinfo_major /可以省略/ FOREIGN key(majorid) REFERENCES major(id)
#修改表删除约束
desc stuinfo
#1 删除非空约束
alter table stuinfo MODIFY COLUMN stuname VARCHAR(20) null
#2删除默认约束
alter table stuinfo MODIFY COLUMN age int
#3 删除主键
alter table stuinfo MODIFY COLUMN id int ##好像不行 mysql 8.0
alter table stuinfo drop PRIMARY key
#4删除唯一键
alter table stuinfo drop index seat
show INDEX from stuinfo
#5 删除外键约束
alter table stuinfo drop FOREIGN key fk_stuinfo_major
desc stuinfo
show index from stuinfo