MySQL约束(一)- 主键约束

青林
青林
青林
4
文章
0
评论
2020-08-2813:09:00 评论 1,179 1354字
摘要

在MySQL里,约束是指对表中数据的一种约束,能够确保数据库中数据的准确性和有效性。例如,有的数据是必填项,就有非空约束,有的数据比如用户唯一id,就需要使用唯一约束等等。

在MySQL中主要有6种约束:主键约束、外键约束、唯一约束、检查约束、非空约束和默认值约束。

1. 主键约束(PRIMARY KEY)

主键约束是使用最频繁的约束。在设计数据表时,一般情况下,为了方便更快地查找表中的记录,都会要求在表中设置一个主键。主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。

主键分为单字段主键和多字段联合主键,并且在使用主键时需要注意以下几点:

  • 一个table只能定义一个主键;

  • 主键值必须唯一标识表中的每一行,且不能出现null的情况,即表中不能存在有相同主键的两行或两行以上数据,严格遵守唯一性原则;

  • 一个字段名只能在联合主键字段表中出现一次;

  • 联合主键不能包含不必要的多余字段,以满足最小化原则。

1.1 在建表时设置主键约束:

1.1.1 设置单字段主键:

1)在定义字段的同时设置主键约束,语法格式:

MySQL约束(一)- 主键约束

在数据库中创建学生信息数据表st_info,主键为st_id, SQL语句以及运行结果如下:

MySQL约束(一)- 主键约束 

2)在定义完所有字段之后指定部件,语法格式:

MySQL约束(一)- 主键约束 

在数据库中创建学生信息数据表st_info2,主键为st_id, SQL语句以及运行结果如下:

MySQL约束(一)- 主键约束 
1.1.2 设置联合主键:

联合主键,即一张表的主键由多个字段组成。

比如在学生信息表中,可以设置st_id跟name来作为联合主键,语法格式以及SQL语句实现为:

MySQL约束(一)- 主键约束 

【注】在设置联合主键时不能直接在每个字段名后面声明主键约束。

1.2 在修改表时添加主键约束:

假如在创建表是没有设置主键约束,还可以在修改表时进行添加,但是设置成主键约束的字段不允许有空值。语法格式:

 MySQL约束(一)- 主键约束

将st_id与name设置成主键:

MySQL约束(一)- 主键约束 

1.3 删除主键约束:

当一个表中不需要主键约束时,就需要从表中将其删除。

删除st_info4数据表中的主键约束:

MySQL约束(一)- 主键约束 

【补充】 MySQL主键自增长 :

在MySQL里,当主键定义为自增长后,主键的值就不需要自己再输入数据了,而是由数据库系统根据定义自动赋值,每增加一条记录,主键就会自动以相同的步长进行增长。

自增长的关键字是AUTO_INCREMENT,语法格式为:

MySQL约束(一)- 主键约束

【注】

  • 在默认的情况下,AUTO_INCREMENT的初始值为1,每新增一条记录,字段值就会自动加1;

  • AUTO_INCREMENT约束的字段必须是非空的,即具有not null属性;

  • 一个表中只能有一个字段使用AUTO_INCREMENT约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分);

  • AUTO_INCREMENT约束的字段只能是整数类型;

  • AUTO_INCREMENT约束字段的最大值收该字段的数据类型约束,如果达到上限,AUTO_INCREMENT就会失效。

创建学生信息表st_info5,指定st_id字段自增,

MySQL约束(一)- 主键约束 

此时可以不用再手动插入st_id的数据:

MySQL约束(一)- 主键约束 

但是在设置学号的时候不一定是从1开始的,比如从2000150001开始,则需要在建表之后设置自增的起始数据:

MySQL约束(一)- 主键约束 

【注】如果在插入某一行数据产生了报错,则最终自增字段可能会出现不连续的情况。

参考资料:https://dev.mysql.com/doc/refman/8.0/en/where-optimization.html

End.

作者:爱数据助教

本文由爱数据助教整理发布,未经允许禁止转载,需要转载请微信联系授权(微信号:ishujiang)

  • 我的微信公众号
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: