MySQL基础--约束
-
约束的分类:
not null:非空,用于保证该字段的值不
能为空,比如姓名,学号
default:默认,用于保证该字段的默
认值 ,如性别
primary key:主键,用于保证该字段具
有唯一性,非空,如学号
unique:唯一,用于该字段具有唯一性,
可以为空
check:检查约束(mysql不支持)
foreign key:外键约束,用于限制两个表的关系,用于保证
-
添加约束的时机
1.创建表时添加约束
create table stuinfo(
id int(5) primary key,
stu_name varchar(5) not null,
gender char(1)check(gender='男' or gender='女'),
seat int(2) unique,
gae int(2) default 18,
major_id int(2),
constraint fk_stuinfo_major foreign key(major_id) references major(id));2.修改表时添加约束
alter table 表名 modify 列名 类型 约束类型
-
约束添加的分类
1.列级约束
六大约束都支持,但是外键约束无效果
2.表级约束
除了非空和默认,其他都支持
-
主键和唯一
1、区别:
①、一个表至多有- -个主键,但可以有多个唯一
②、主键不允许为空,唯一-可以为空
2、相同点
都具有唯一-性
都支持组合键,但不推荐 -
外键:
1 要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一 致或兼容,名称无要求
3、主表的关联列必须是一个key (一般是主键或唯-一 )
4、插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表 -
修改表时添加约束
1、添加列级约束
alter
table 表名 modify column 字段名 字段类型 新约束;
2、添加表级约束
alter
table 表名 add [ constraint 约束名] 约束类型 (字段名) [外键的引用] ; -
列级约束
create table stuinfo(
id int(5) primary key,#主键约束
stu_name varchar(5) not null,#非空约束
gender char(1) check(gender='男' or gender='女'),#检查约束
seat int(2) unique,#唯一约束
age int(2) default 18,#默认约束
major_id int(2) #外键约束major_id int(2) foreign key references major(id) #外键约束(不支持)
-
表级约束:
create table stuinfo(
id int(5),
stu_name varchar(5),
gender char(1) ,
seat int(2),
age int(2),
major_id int(2),#外键约束
primary key(id),#主键
check(gender='男' or gender='女'),#检查
unique(seat),#唯一constraint fk_stinfo_major
foreign key(major_id)
references major(id)#外键);
-
对于有外键的表:
插入时我们先插入主表数据在差从表的数据
删除时先删从表的数据在删主表的数据
若有业务需求:我们需要直接删除主表的数据时,我们可以这样实现
1. 级联删除:(使用关键字on delete cascade)
alter table 从表名 add constraint 外键名 froeign key(添加外键的字段) refenences 主表名(字段名)
on delete cascade;
2.级联置空(使用关键字on delete set null):
alter table 从表名 add constraint 外键名 froeign key(添加外键的字段) refenences 主表名(字段名)
on delete set null;
- 常用命令
-
通用写法:
create table stuinfo(
id int(5) primary key,
stu_name varchar(5) not null,
gender char(1) check(gender='男' or gender='女'),
seat int(2) unique,
gae int(2) default 18,
major_id int(2),
constraint fk_stuinfo_major foreign key(major_id) references major(id)); -
外键约束写入表级约束,其他约束写入列级约束
-
查看表结构:desc 表名;
-
查看索引:show index from 表名;
-
索引包括;主键,外键,唯一
-
添加表的非空约束:alter table stuinfo modify stu_name varchar(5) not null;
-
添加表的默认约束:alter table stuinfo modify age default 18;
-
添加主键约束:alter table stuinfo modify id int(5) primary key;
alter table stuinfo add constraint pk_stuinfo_major primary key(id);
-
添加唯一约束:alter table stuinfo modify id int(5) unique;
alter table stuinfo add unique(id);
-
添加外键:alter table stuinfo add foreign key(major_id) references major(id);
-
删除非空约束和默认约束:alter table stuinfo
modify 字段名 字段类型;
-
删除主键约束:alter table stuinfo
drop primary key;
alter table stuinfo modify id int(2);
-
删除唯一约束:
alter table stuinfo drop index 唯一键名;
-
删除外键约束:alter table stuinfo
drop foreign key 外键名;
-