PRIMARY KEY联合主键

PRIMARY KEY联合主键MySQL 主键 PRIMARYKEY 单字段主键 多字段联合主键主键的指定和删除

基本概念

主键(PRIMARY KEY)的完整称呼是“主键约束”;

作用:为了便于 DBMS 更快的查找到表中的记录;

分类:①单字段主键;②多字段联合主键;

注意

①每个表只能定义一个主键

唯一性原则
即主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据

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

联合主键的最小化原则
即联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。

创建表时定义主键约束

一)单字段主键

#基本语法 #一、在定义字段的同时指定主键 <字段名> <数据类型> PRIMARY KEY [默认值] #二、或在定义完所有字段之后指定主键 [CONSTRAINT <约束名>] PRIMARY KEY [字段名] 

示例1:在定义字段的同时指定主键

mysql> CREATE TABLE test001( -> zd0 INT(10) PRIMARY KEY, -> zd1 VARCHAR(25), -> zd2 CHAR(10), -> zd3 FLOAT); Query OK, 0 rows affected, 1 warning (0.10 sec) mysql> desc test001; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | zd0 | int(10) | NO | PRI | NULL | | | zd1 | varchar(25) | YES | | NULL | | | zd2 | char(10) | YES | | NULL | | | zd3 | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec) 

示例2:在定义完所有字段之后指定主键

mysql> CREATE TABLE test002( -> zd0 INT(10), -> zd1 VARCHAR(25), -> zd2 CHAR(10), -> zd3 FLOAT, -> PRIMARY KEY(zd0)); Query OK, 0 rows affected, 1 warning (0.06 sec) mysql> desc test002; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | zd0 | int(10) | NO | PRI | NULL | | | zd1 | varchar(25) | YES | | NULL | | | zd2 | char(10) | YES | | NULL | | | zd3 | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) 

二) 多字段主键——又称联合主键

#基本语法 PRIMARY KEY [字段1,字段2,…,字段n] 

注意:
当主键是由多个字段组成时,
只能在定义完所有字段之后指定主键
不能直接在字段名后面声明主键约束。






示例3:联合主键的指定

mysql> CREATE TABLE test003( -> zd0 INT(10), -> zd1 VARCHAR(25), -> zd2 CHAR(10), -> zd3 FLOAT, -> PRIMARY KEY(zd0,zd1,zd2)); Query OK, 0 rows affected, 1 warning (0.06 sec) mysql> desc test003 -> ; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | zd0 | int(10) | NO | PRI | NULL | | | zd1 | varchar(25) | NO | PRI | NULL | | | zd2 | char(10) | NO | PRI | NULL | | | zd3 | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) 

修改表时定义主键约束

#基本语法 ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>); 

(见文末示例4)

删除主键约束

#基本语法 ALTER TABLE <数据表名> DROP PRIMARY KEY; 

示例4:指定已存在表的主键和删除主键约束

#创建无主键的表 mysql> CREATE TABLE test004( -> zd0 INT(10), -> zd1 VARCHAR(25), -> zd2 CHAR(10), -> zd3 FLOAT); Query OK, 0 rows affected, 1 warning (0.06 sec) #查看指定主键前的表结构 mysql> desc test004; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | zd0 | int(10) | YES | | NULL | | | zd1 | varchar(25) | YES | | NULL | | | zd2 | char(10) | YES | | NULL | | | zd3 | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) #指定单主键 mysql> ALTER TABLE test004 ADD PRIMARY KEY(zd0); Query OK, 0 rows affected (0.23 sec) Records: 0 Duplicates: 0 Warnings: 0 #查看指定主键后的表结构 mysql> desc test004; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | zd0 | int(10) | NO | PRI | NULL | | | zd1 | varchar(25) | YES | | NULL | | | zd2 | char(10) | YES | | NULL | | | zd3 | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec) #删除主键 mysql> ALTER TABLE test004 DROP PRIMARY KEY; Query OK, 0 rows affected (0.18 sec) Records: 0 Duplicates: 0 Warnings: 0 #查看删除主键后的表结构 mysql> desc test004; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | zd0 | int(10) | NO | | NULL | | | zd1 | varchar(25) | YES | | NULL | | | zd2 | char(10) | YES | | NULL | | | zd3 | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) #指定多字段主键 mysql> ALTER TABLE test004 ADD PRIMARY KEY(zd0,zd1,zd2); Query OK, 0 rows affected (0.11 sec) Records: 0 Duplicates: 0 Warnings: 0 #查看指定多段主键后的表结构 mysql> desc test004; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | zd0 | int(10) | NO | PRI | NULL | | | zd1 | varchar(25) | NO | PRI | NULL | | | zd2 | char(10) | NO | PRI | NULL | | | zd3 | float | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202712.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:29
下一篇 2026年3月19日 下午11:29


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号