一、含义

  约束是一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性。

二、分类

1、约束的作用

  ① not null:非空,用于保证该字段的值不能为空。
  ② default:默认值,为指定字段设置默认值。
  ③ primary key:主键,用于保证该字段的值具有唯一性,并且非空。
  ④ unique:唯一,用于保证该字段的值具有唯一性。
  ⑤ auto_increment:自增,可以不用手动的插入值,系统提供默认的序列值。
  ⑥ foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表中添加外键约束,用于引用主表中某列的值。
  ⑦ check:检查约束,在 MySQL 8.0.16 版本之前的 check 约束能被解析,但是被忽略掉了,就是写了也没用。

2、添加约束的时机:

  ①创建表时。
  ②修改表时。

3、约束的添加:

  ①列级约束:上面的约束语法上都支持,但外键约束没有实际效果。
  ②表级约束:除了非空、默认,自动增长,其他的都支持。

三、实例

1、查看表的结构,包含约束名

show create table 表名;  

2、添加列级约束

1)创建表时添加约束

  语法:直接在字段的类型后面追加约束类型即可。

create table 表名( 
	列名 数据类型 [约束], 
	 ... 
	列名 数据类型 [约束] 
);

  例子:

create table zyx(
	id int primary key auto_increment,-- 主键且自增长
	student_id varchar(10) unique,-- 唯一
	name varchar(5) not null,-- 非空
	gender char(1) check(gender='男' or gender='女'), -- 检查
	age int default(18) -- 默认值
);
2)修改表时添加约束

  语法:

alter table 表名 modify column 字段名 字段类型 新约束;

  例子

alter table zyx modify column age int not null;

3、添加表级约束

1)创建表时添加约束

  语法:在各个字段的最下面。

create table 表名( 
	列名 数据类型 [约束], 
	 ... 
	列名 数据类型 [约束],
	-- 表级约束
	[constraint 约束名] 约束类型(字段名),
	...
	[constraint 约束名] 约束类型(字段名)
);

  例子:

create table zyx( 
	id int  auto_increment,-- 自增长
	student_id varchar(10),
	name varchar(5) not null,-- 非空
	gender char(1),
	age int default (18), -- 默认值
	-- 表级约束
	constraint aa  primary key(id),-- 主键
	unique(student_id),-- 唯一
	check(gender='男' or gender='女'), -- 检查
	foreign key(id) references zyx4(id) -- 外键
);
2)修改表时添加约束

  语法:

alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用];

  例子:

alter table zyx1 add foreign key(id) references zyx2(id);-- 添加外键

4、删除约束

1)删除非空约束、默认约束、自增长约束
alter table 表名 modify column 字段名 字段类型;
2)删除主键
alter table 表名 drop primary key;
3)删除唯一约束
alter table 表名 drop index 唯一约束名;
4)删除外键
alter table 表名 drop foreign key 外键约束名;
5)删除约束
alter table 表名 drop check 字段的检查约束名;

四、补充

1、多表之间的建表原则:

1)一对一:公民和身份证

  建表原则:让两个表里的主键建立关系,主要用于拆表。

2)一对多:商品和分类

  建表原则:在商品中添加外键指向分类的主键。

3)多对多:学生和老师,学生和课程表

  建表原则:建立一张中间表,将多对多的关系拆分成一对多的关系,中间表至少要有俩外键,分别指向其他两个表。

2、主键和唯一约束的区别:

  ①都具有唯一性。
  ②主键不允许为 null,唯一允许。
  ③主键一个表只能设一个,唯一约束可以设置多个。
  ④都允许多字段结合,但不推荐使用。

3、外键:

  ①要从从表设置外键关系。
  ②从表的外键列的类型和主表的关联列的类型要求一致或者兼容。
  ③主表的关联列必须是一个key(一般是主键或唯一)。
  ④插入数据时,先插入主表,再插入从表。删除数据时,先删除从表,在删除主表。

4、自增长约束:

  ①自增长约束又叫标识列,标识列必须是一个key。
  ②一个表最多有一个标识列。
  ③标识列的类型只能是数值型。


标题:MySQL中的约束
作者:Yi-Xing
地址:http://47.94.239.232:10014/articles/2019/10/11/1570765410925.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!