PRIMARY KEY联合主键
基本概念
主键(PRIMARY KEY)的完整称呼是“主键约束”;
作用
:为了便于 DBMS 更快的查找到表中的记录;
分类
:①单字段主键;②多字段联合主键;
注意
:
①每个表只能定义一个主键
②唯一性原则
即主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据
③一个字段名只能在联合主键字段表中出现一次
④联合主键的最小化原则
即联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。
创建表时定义主键约束
一)单字段主键
#基本语法
#一、在定义字段的同时指定主键
<字段名> <数据类型> PRIMARY KEY [默认值]
#二、或在定义完所有字段之后指定主键
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
- 1
- 2
- 3
- 4
- 5
示例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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
示例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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
二) 多字段主键——又称联合主键
#基本语法
PRIMARY KEY [字段1,字段2,…,字段n]
- 1
- 2
注意:
当主键是由多个字段组成时,
只能在定义完所有字段之后指定主键
,
不能直接在字段名后面声明主键约束。
示例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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
修改表时定义主键约束
#基本语法
ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);
- 1
- 2
当在修改表时要设置表中某个字段的主键约束时,
要确保设置成主键约束的字段中值不能够有重复
的,
并且要保证是非空
的。否则,无法设置主键约束。
(见文末示例4)
删除主键约束
#基本语法
ALTER TABLE <数据表名> DROP PRIMARY KEY;
- 1
- 2
由于主键约束在一个表中只能有一个,
因此不需要指定主键名就可以删除一个表中的主键约束。
示例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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
注意:
未指定not null 的字段设置为PK后,
再删除PK约束(无其他操作),则该字段不允许为null
文章来源: blog.csdn.net,作者:诡途,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_35866846/article/details/105971713
- 点赞
- 收藏
- 关注作者
评论(0)