主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。
选取设置主键约束的字段
主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:
1、每个表只能定义一个主键。
2、主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
3、一个列名只能在复合主键列表中出现一次。
4、复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。
在创建表时设置主键约束
在 CREATE TABLE 语句中,主键是通过 PRIMARY KEY 关键字来指定的。
在定义列的同时指定主键,语法规则如下:
<字段名> <数据类型> PRIMARY KEY [默认值]
实例 1】在 ceshi 数据库中创建 ceshi_01 数据表,其主键为 id,输入的 SQL 语句和运行结果如下所示。
mysql> CREATE TABLE ceshi_01(id INT(11) PRIMARY KEY,name VARCHAR(25),deptId INT(11),salary FLOAT);
Query OK, 0 rows affected (0.37 sec)
mysql> DESC ceshi_01;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)
在定义完所有列之后,指定主键的语法格式为:
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
【实例 2】在 ceshi 数据库中创建 ceshi_02 数据表,其主键为 id,输入的 SQL 语句和运行结果如下所示。
mysql> CREATE TABLE ceshi_02(id INT(11),name VARCHAR(25),deptId INT(11),salary FLOAT,PRIMARY KEY(id));
Query OK, 0 rows affected (0.37 sec)
mysql> DESC ceshi_02;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)
在创建表时设置复合主键
主键由多个字段联合组成,语法规则如下:
PRIMARY KEY [字段1,字段2,…,字段n]
【实例 3】创建数据表 ceshi_03,假设表中没有主键 id,为了唯一确定一个员工,可以把 name、deptId 联合起来作为主键,输入的 SQL 语句和运行结果如下所示。
mysql> CREATE TABLE ceshi_03(name VARCHAR(25),deptId INT(11),salary FLOAT,PRIMARY KEY(id,deptId));
Query OK, 0 rows affected (0.37 sec)
mysql> DESC ceshi_03;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(25) | NO | PRI | NULL | |
| deptId | int(11) | NO | PRI | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.14 sec)
在修改表时添加主键约束
在修改数据表时添加主键约束的语法规则为:
ALTER TABLE <数据表名> ADD PRIMARY KEY(<列名>);
查看 ceshi_04 数据表的表结构,如下所示。
mysql> DESC ceshi_04;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(30) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)
【实例 4】修改数据表 ceshi_04,将字段 id 设置为主键,输入的 SQL 语句和运行结果如下所示。
mysql> ALTER TABLE ceshi_04
-> ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.94 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC ceshi_04;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| deptId | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.12 sec)
个人建议:关于主键这个问题的话,如果说能在图形工具上面操作的话就在图形工具上面直接更换一下就行。图形工具操作的话最主要一个就是能可视化、方便。
本文分享自微信公众号 - 易语言mysql新手,如有侵权,请联系 service001@enmotech.com 删除。




