13.2.5 数据库约束 3.primary key约束
13.2.5 数据库约束 3.PRIMARY KEY约束
主键约束相当于非空约束和唯一约束,即主键约束的列既不允许出现重复值,也不允许出现null值;如果对多列组合建立主键约束,则多列里包含的每一列都不能为空
,但只要求这些列组合不能重复
。主键列的值可用于唯一地标识表中的一条记录。
每一个表中最多允许有一个主键,但这个主键约束可由多个数据列组合而成,主键是表中能唯一确定一行记录的字段或字段组合。
建立主键约束时既可使用列级约束语法,也可使用表级约束语法。如果需要对多个字段建立组合主键约束,则只能使用表级约束语法。
使用表级约束语法来建立约束时,可以为该约束指定约束名。但不管用户是否为该主键约束指定约束名,MySQL
总是将所有的主键约束命名为PRIMARY
。
提示:MySQL
允许在建立主键约束时为该约束命名,但这个名字没有任何作用,这是为了保持与标准SQL
的兼容性。大部分数据库都允许自行指定主键约束的名字,而且一旦指定了主键约束名,则该约束名就是用户指定的名字。
当创建主键约束时,MySQL
在主键约束所在列或列组合上建立对应的唯一索引。
创建主键约束的语法和创建唯一约束的语法非常像,一样允许使用列级约束语法为单独的数据列创建主键,如果需要为多列组合建立主键约束或者需要为主键约束命名,则应该使用表级约束语法来建立主键约束。与建立唯一约束不同的是,建立主键约束使用primary key
。
列级别约束创建主键约束
建表时创建主键约束,使用列级约束语法:
1 | create table primary_test |
表级别约束创建主键约束
建表时创建主键约束,使用表级约束语法:
1 | create table primary_test2 |
组合主键
建表时创建主键约束,以多列建立组合主键,只能使用表级约束语法:
1 | create table primary_test3 |
删除主键约束
如果需要删除指定表的主键约束,则在alter table
语句后使用drop primary key
子句即可。SQL
语句如下:
1 | alter table primary_test3 |
增加主键约束
如果需要为指定表增加主键约束,既可通过modify
修改列定义来增加主键约束,这将采用列级约束语法来增加主键约束;也可通过add
来增加主键约束,这将采用表级约束语法来增加主键约束。SQL
语句如下:
通过add添加主键约束
1 | alter table primary_test3 |
通过modify添加主键约束
如果只是为单独的数据列增加主键约束,则可使用modify
修改列定义来实现,如下SQL
语句所示:
1 | alter table primary_test3 |
注意
不要连续执行上面两条SQL
语句,因为上面两条SQL
语句都是为primary_test3
增加主键约束,而同一个表里最多只能有一个主键约束,所以连续执行上面两条SQL
语句肯定出现错误。为了避免这个问题,可以在成功执行了第一条增加主键约束的SQL
语句之后,先将primary_test3
里的主键约束删除后再执行第二条增加主键约束的SQL
语句。
自动增长列
很多数据库对主键列都支持一种自增长的特性——如果某个数据列的类型是整型,而且该列作为主键列,则可指定该列具有自增长功能。指定自增长功能通常用于设置逻辑主键列——该列的值没有任何物理意义,仅仅用于标识每行记录。MySQL
使用auto_increment
来设置自增长,SQL
语句如下:
1 | create table primary_test4 |
一旦指定了某列具有自增长特性,则向该表插入记录时可不为该列指定值,该列的值由数据库系统自动生成。