当前位置:网站首页>MySQL约束关系,你必须要知道的知识点!

MySQL约束关系,你必须要知道的知识点!

2022-08-09 09:29:00 农场主er


创建表的时候往往给字段加一些约束,以保证数据的 合法性、有效性、完整性。

1、非空约束:not null

  非空约束针对某个字段设置其值不能为NULL。创建表时如果有字段声明如下:字段名 数据类型 not null,表明插入数据时必须要给这个字段赋值,如果没有就会报错。

2、唯一约束:unique

  唯一性约束可令某个字段不可重复。创建表时如果有字段声明如下:字段名 数据类型 unique,表明插入时这个字段的值不可与已经存在的数据重复,但是均可以为NULL,称为列级约束
  如果想令几个字段合起来不可重复,可以这样声明:unique(字段名,...),称为表级约束,非空约束没有表级写法。

3、主键约束:primary key

3.1 pk的作用

  具有pk的字段既不能重复,也不能为NULL。创建表时的pk声明如下:字段名 数据类型 primary key,称为单一主键,如果采用表级约束:primary key(字段名,...)称为复合(联合)主键
  字段加上pk后称为主键字段,主键字段中的每一个值都是主键值,主键值是记录在表中的唯一标识,任何一张表中都应该有主键,且pk只能有一个。

3.2 主键的分类

  根据主键的性质可划分为自然主键业务主键。前者的主键字段独立,与具体的业务没有关联;后者主键值和业务挂钩,比如银行卡号。
  业务主键不推荐使用,因为业务后续发生改变的话,主键值随之变化,可能导致主键值相同,但是这是不允许的,反之业务也无法改变。

3.3 主键值自增

  实际业务中主键值往往由服务端给出,主键值从0开始,每次插入一条数据主键值自动增1。创建表时的声明如下:字段名 数据类型 primary key auto_increment,如果插入数据时手动给主键值赋值,下一次自增在已赋值的基础上进行。

4、外键约束:foreign key

  外键可以维护表之间的关系,如果表中的某个字段为外键字段,那么外键值必须来自所选参照表对应的字段值,外键值可以为NULL
  例如有两张表student:id(pk)、sname、classnoclass:id(pk)、cno(unique)、cname,其中student表中的classno字段值必须来自class表中的cno,外键约束为foreign key(classno) references class(cno),建表语句如下:

create table class(
	id int primary key,
	cname varchar(255),
	cno int unique
	);
create table student(
	id int primary key,
	sname varchar(255),
	classno int,
	foreign key(classno) references class(cno)
	);

注释

  1. 存在外键的表是子表(从表),参照的表是父表(主表),即两张表存在主从关系;
  2. 父表中作为参照的字段可以不是主键,但至少要有unique约束。因为一旦作为参照的字段值有重复,子表中的外键值无法确认依赖父表的哪一条记录;
  3. 创建表和添加数据的顺序:先父表后子表;
  4. 删除表和删除数据的顺序:先子表后父表。

欢迎评论区交流~

原网站

版权声明
本文为[农场主er]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_42403042/article/details/105943502