MySQL8--约束管理

MySQL8–约束管理

约束:限制,限制我们表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败
约束的分类:

①not null :非空约束,保证字段的值不能为空,比如学生信息表中的“学号”“姓名”等等这些是不能为空的!

②default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!

③primary key :主建约束,同时保证唯一性和非空

④unique:唯一,保证唯一性但是可以为空,比如座位号

⑤check:检查性约束【MySQL不支持,语法不报错,但无效】

⑥foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值必须来自于主表相关联的字段的值,不能无中生有!

什么时候添加约束:
①创建表的时候
②修改表的时候

约束的添加分类:
①列级约束
6种约束都可以写,语法都支持,不报错,但外键约束写了等于白写

②表级约束
非空、默认不支持,其他都可以!

创建表时添加约束:

①列级约束

案例:

CREATE TABLE student(
id INT PRIMARY KEY, #主建约束(唯一性,非空)
s_name VARCHAR(10) NOT NULL, #非空
s_sex CHAR(1) CHECK(s_sex='男' OR s_sex='女'), #检查约束(Mysql无效)
s_seat INT UNIQUE,#唯一约束
age INT DEFAULT 18, #默认约束
major_id INT REFERENCES majors(id) #这是外键,写在列级,Mysql无效
);
CREATE TABLE majors(
id INT PRIMARY KEY,
m_name VARCHAR(20) NOT NULL
);

②表级约束

DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT ,
s_name VARCHAR(10),
s_sex CHAR(1),
s_seat INT,
age INT ,
major_id INT , #这里下面有表级约束,要隔开,有逗号
CONSTRAINT pk PRIMARY KEY(id), #为id添加主建约束,pk是起的名,后面一样
CONSTRAINT uq UNIQUE(s_seat), #唯一性约束
CONSTRAINT ck CHECK(s_sex='男' OR s_sex='女'), #查询约束
CONSTRAINT fk_students_majors FOREIGN KEY(major_id) REFERENCES majors(id) #外键约束
);

总结一下表级约束的语法:
【constraint 约束名字】 约束类型(字段名称) 【额外的东西,如外键】

一般情况下MySQL的约束:
主建,非空,唯一性,默认等这些写在列级
外键约束写在表级

主键和唯一性的区别:
①主键约束: 同时保证唯一和非空
在同一个表中主键只能有一个
在同一个表中可以将多个字段组合成一个主键(不推荐)
如:CONSTRAINT pk PRIMARY KEY(id,s_name),id和s_name组合起来成表的一个主键

②唯一约束: 保证唯一但可以为空
在同一个表中唯一约束可有很多个
在同一个表中可以将多个字段组合成一个唯一约束(不推荐)

外键的特点:
①要求在从表上设置外键约束
②从表上的列和主表上的对应的关联列的数据类型必须一致,含义意义一致
③主表上的关联列必须是一个key(一般是主键,很少时候也可以是唯一键)
④插入数据时,先插入主表,在插入从表;删除的时候,要先删除从表记录,在删除主表的记录

修改表时添加和删除约束:

①非空约束

alter table student modify column s_name varchar(20) not null; #添加
alter table student modify column s_name varchar(20) ; #删除

②添加默认约束

alter table student modify column age int default 18; #添加
alter table student modify column age int; #删除

③添加主键

alter table student modify column id int primary key; #添加
alter table student modify column id int; #删除不掉的
alter table student drop primary key; #删除

④添加唯一键

alter table student modify column s_seat int unique; #添加
show index from student;#查看唯一约束
alter table student drop index uq; 删除

⑤外键

alter table student add CONSTRAINT fk foreign key (major_id) references majors(id); #添加
alter table student drop foreign key fk_students_majors;#删除

show create table student;


SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where table_name='student';


select COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME
from information_schema.KEY_COLUMN_USAGE
where TABLE_NAME = 'student';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值