02-011 MySQL_基础_约束

一种限制,限制表中数据,保证数据一致性。

分类:六大约束

1.非空约束 not null 保证字段不为空;
2.默认约束 default 保证字段有默认值;
3.主键约束 primary key 保证字段具有唯一性并且非空;
4.唯一约束 unique 保证字段唯一可以为空;
5.检查约束 check 【MySQL不支持】用来加判断条件;
6.外键约束 foreign key 用于限制两个表的关系,用于保证该字段的值必须来自于主表关联列的值;(在从表添加外键约束,用于引用主表中某列的值)
添加约束的时机:
1.创建表时;2.修改表时;
约束的添加分类:
列级约束:语法都支持,但外键约束没有效果;
标记约束;除了非空、默认,其他都支持;

创建表时添加约束

可以同时添加多个约束
1.添加列级约束(支持主键、非空、unique、default)

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 foreign key references major(id)#外键没用
);

create table major(
	id int primary key,
	majorName varchar(20)
);

显示索引,主键,外键,唯一自动生成索引
show index from stuinfo;
2.添加表级约束

drop table if exists stuinfo ;
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 ,
	constraint pk primary key(id),
	constraint uq unique(seat),
	constraint ck check(),
	constraint fk_stuinfo_major foreign key(majorid) references major(id)
);

主键索引默认primary(MySQL中不会改变)
【constraint 约束名】可以省略,省略后默认索引为字段名
约束名不可以重复

通用写法:

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 ,
	constraint fk_stuinfo_major foreign key(majorid) references major(id)
);

主键和唯一的对比

保证唯一性 是否允许为空 一个表中有几个 是否允许组合
主键 一个
唯一 是(但只有一个) 多个

组合主键:比如id,name都是表的主键(不推荐,不稳定)

外键

1.要求从表设置主键;
2.从表的外键列的类型和主表的关联列的类型一致或者兼容,名称无要求;
3.主表的关联列必须是一个key(一般主键或唯一);
4.插入数据时,先插主表,再插从表,删除数据时,先删除从表,再删除主表;
删除
方式一:级联删除
alter table stuinfo add constraint fk_stuinfo_major foreign key(majorid) references major(id) on delete cascade;
delete from major where id = 3;#从表外键为3的数据也删除
方式二:级联置空
alter table stuinfo add constraint fk_stuinfo_major foreign key(majorid) references major(id) on delete set null;
delete from major where id = 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 modify 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);(表级)
1.添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
2.添加表级约束
alter table 表名 add【constraint 约束名】 约束名(字段名) 【外键的引用】;

修改表时删除约束

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;
②alter table stuinfo drop primary key;
4.删除唯一
alter table stuinfo drop index seat;
5.删除外键约束
alter table stuinfo drop foreign key fk_stuinfo_major;

位置 支持约束类型 是否可以起约束名
列级约束 跟在列的后面 语法都支持,外键没有效果
表级约束 所有列的下面 默认和非空不支持,其他支持 是(主键没有效果)

学习整理于MySQL 基础+高级篇.

发布了53 篇原创文章 · 获赞 0 · 访问量 395

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/103600481
今日推荐