MySQL-约束

约束

一种限制,用于限制表中的数据,为了保证表中的数据的精准和可靠性

六大约束

类型作用
NOT NULL非空,该字段值不能为空
DEFAULT默认,保证该字段有默认值
PRIMARY KEY主键,保证唯一性并且非空
UNIQUE保证唯一性,可以为空
CHECK检查约束(MySQL不支持)
FOREIGN KEY用于限制两个表的关系,保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值

添加约束的时机

创建表时

添加列级约束
create table student(
	id int primary key,
	name 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)
);

查看student中的所有索引,包括主键、外键、唯一

show index from student;
添加表级约束
drop table if exists student;
create table student(
	id int,
	name varchar(20),
	gender char(1),
	seat int,
	age int,
	majorId int,
	constraint pk primary key(id),
	constraint uq unique(seat),
	constraint ch check(gender='男' or gender='女'),
	constraint fk_student_major foreign key (majorId) references major(id)
);
通用写法
create table if not exists student(
	id int primary key,
	name varchar(20) not null,
	sex char(1),
	age int default 18,
	seat int unique,
	majorId int,
	constraint fk_student_major foreign key(majorId) references major(id)
);

修改表时

添加非空约束
alter table 表名 modify column 列名 类型 not null;
添加默认约束
alter table 表名 modify column 列名 类型 default 值;
添加主键

列级约束

alter table 表名 modify column 列名 类型 primary key;

表级约束

alter table 表名 add primary key(列名);
添加唯一

列级约束

alter table 表名 modify column 列名 类型 unique;

表级约束

alter table 表名 add unique(列名);
添加外键
alter table 表名 add constraint 外键名 foreign key(列名) references 主表名(关联列名);
删除非空约束
alter table 表名 modify column 列名 类型 null;
删除默认约束
alter table 表名 modify column 列名 类型;
删除主键
alter table 表名 drop primary key;
删除唯一
alter table 表名 drop index 索引名

查看索引

show index from 表名;
删除外键约束
alter table 表名 drop foreign key 外键名;

约束的添加分类

类型支持
列级约束六大约束上都支持,但
表级约束除了非空、默认,其它都支持
create table 表名(
	字段名 字段类型 列级约束,
	字段名 字段类型,
	表级约束
);

主键和唯一约束对比

唯一性是否允许为空一个表中允许有多少个是否允许组合
主键至多有一个
唯一可以有多个

外键

  • 要求在从表中设置外键关系
  • 从表的外键列类型和主表的关联列类型要求一致或兼容,名称无要求
  • 主表的关联列必须是一个key(一般是主键或唯一)
  • 插入数据时,先插入主表,再插入从表
  • 删除数据时,先删除从表,再删除主表

级联删除

alter table 表名 add constraint 外键名 foreign key(列名) references 主表名(关联列) on delete cascade;

级联置空

alter table 表名 add constraint 外键名 foreign key(列名) references 主表名(关联列) on delete set null;

标识列(自增键)

自增长列,不用手动插入值,系统提供默认序列值

  • 标识列必须和主键搭配吗?不一定,但要求是一个key
  • 一个表可以有至多一个标识列
  • 标识列的类型必须是数值型
  • 标识列可以通过set auto_increment_increment=n;设置步长
  • 可以通过手动插入值,设置起始值

创建表时设置标识列

drop table if exists 表名;
create table 表名(
	id int primary key auto_increment,
)

查看自增属性

show variables like '%auto_increment%';

设置自增步长

set auto_increment_increment=n;

修改表时设置标识列

alter table 表名 modify column 列名 int primary key auto_increment;

修改表时删除标识列

alter table 表名 modify column 列名 int;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值