阅读指南
基本概念
主键(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
