MySQL进阶知识4——约束

基本介绍

在项目开发中,我们要对表的数据进行管理(比如从业务逻辑层面,保证数据的正确性)。

假设有一个字段叫email,要求是唯一的。

为了达到这个效果,mysql提供了一种机制保证这些数据的正确性,这就是表的约束。


分类

  • 主键约束(Primary key)

  • 非空约束(not null)

  • 唯一约束(unique)

  • 外键约束(foreign key)

  • check约束【在mysql中,支持该语法,但本身并不生效】



主键约束(Primary key)

用于唯一的标示表行的数据;
当定义主键约束后,该列不能重复;
一般来说,mysql中的每张表都会有一个主键。

基本语法

// 定义字段的时候
字段名  字段类型  primary key   

// 在表定义的最后
primary key (字段名)


细节说明

1)主键不但不能重复,还不能为null;

2)使用desc表名,或 show create table都可以查看主键;

3)一张表最多只能有一个主键,但可以是复合主键;

复合主键怎么定义:

    在表的定义最后primary key (字段名1,字段名2)

    如果插入的字段1的值和字段2的值都与另一条记录相同的话,插入不成功。

    如果只是字段1或字段2其中一个的值相同,则一样可以插入成功。



非空约束(not null)


基本语法

字段名  字段类型  not null

如果在字段定义为not null,插入数据时,必须为列提供数据。



唯一约束(unique)

当字段定义为unique,该列值是不能重复的。


基本语法

字段名  字段类型  unique


细节说明

1)如果unique字段没有指定not null,它是可以为null的;

2)在上面的基础上,在该列插入多个null,是可以的;

3)一张表可以有多个unique



外键约束(foreign key)

用于定义主表和从表的关系。

外键约束定义在从表上,主表须有主键约束 或 unique约束;

当定义外键约束后,要求外键列数据必须在主表的主键列存在,或者为null。

基本语法

FOREIGN KEY (字段名) REFERENCES 主表(列)


例子:

MySQL进阶知识4——约束_第1张图片

1)先创建主表my_class,id定义为主键;

2)再创建从表stus,class_在表的定义后面

foreign  key(class_id)  references  my_class(id)


细节说明

1)外键指向主表的字段,要求是primary keyunique

2)表的存储引擎是innodb,才支持外键;

3)外键字段的类型要与主键字段的类型一致长度可以不同

4)一旦建立主外键的关系,主表数据就不能随意删除了;

5)不指定外键,同样可以有不同表的字段关联的关系。
但这种关系的维护,要由程序员自己维护,mysql不会去检查。

你可能感兴趣的:(Mysql)