新聞中心
主鍵(PRIMARY KEY)的完整稱呼是“主鍵約束”,是 MySQL 中使用最為頻繁的約束。一般情況下,為了便于 DBMS 更快的查找到表中的記錄,都會在表中設(shè)置一個主鍵。

羅源ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
主鍵分為單字段主鍵和多字段聯(lián)合主鍵,本節(jié)將分別講解這兩種主鍵約束的創(chuàng)建、修改和刪除。
使用主鍵應注意以下幾點:
- 每個表只能定義一個主鍵。
- 主鍵值必須唯一標識表中的每一行,且不能為 NULL,即表中不可能存在有相同主鍵值的兩行數(shù)據(jù)。這是唯一性原則。
- 一個字段名只能在聯(lián)合主鍵字段表中出現(xiàn)一次。
- 聯(lián)合主鍵不能包含不必要的多余字段。當把聯(lián)合主鍵的某一字段刪除后,如果剩下的字段構(gòu)成的主鍵仍然滿足唯一性原則,那么這個聯(lián)合主鍵是不正確的。這是最小化原則。
在創(chuàng)建表時設(shè)置主鍵約束
在創(chuàng)建數(shù)據(jù)表時設(shè)置主鍵約束,既可以為表中的一個字段設(shè)置主鍵,也可以為表中多個字段設(shè)置聯(lián)合主鍵。但是不論使用哪種方法,在一個表中主鍵只能有一個。下面分別講解設(shè)置單字段主鍵和多字段聯(lián)合主鍵的方法。
1)設(shè)置單字段主鍵
在 CREATE TABLE 語句中,通過
PRIMARY KEY 關(guān)鍵字來指定主鍵。
在定義字段的同時指定主鍵,語法格式如下:
<字段名> <數(shù)據(jù)類型> PRIMARY KEY [默認值]
例 1
在 test_db 數(shù)據(jù)庫中創(chuàng)建 tb_emp3 數(shù)據(jù)表,其主鍵為 id,SQL 語句和運行結(jié)果如下。
mysql> CREATE TABLE tb_emp3
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT
-> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp3;
+--------+-------------+------+-----+---------+-------+
| 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
在 test_db 數(shù)據(jù)庫中創(chuàng)建 tb_emp4 數(shù)據(jù)表,其主鍵為 id,SQL 語句和運行結(jié)果如下。
mysql> CREATE TABLE tb_emp4
-> (
-> id INT(11),
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp4;
+--------+-------------+------+-----+---------+-------+
| 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)2)在創(chuàng)建表時設(shè)置聯(lián)合主鍵
所謂的聯(lián)合主鍵,就是這個主鍵是由一張表中多個字段組成的。
比如,設(shè)置學生選課數(shù)據(jù)表時,使用學生編號做主鍵還是用課程編號做主鍵呢?如果用學生編號做主鍵,那么一個學生就只能選擇一門課程。如果用課程編號做主鍵,那么一門課程只能有一個學生來選。顯然,這兩種情況都是不符合實際情況的。
實際上設(shè)計學生選課表,要限定的是一個學生只能選擇同一課程一次。因此,學生編號和課程編號可以放在一起共同作為主鍵,這也就是聯(lián)合主鍵了。
主鍵由多個字段聯(lián)合組成,語法格式如下:
PRIMARY KEY [字段1,字段2,…,字段n]
注意:當主鍵是由多個字段組成時,不能直接在字段名后面聲明主鍵約束。
例 3
創(chuàng)建數(shù)據(jù)表 tb_emp5,假設(shè)表中沒有主鍵 id,為了唯一確定一個員工,可以把 name、deptId 聯(lián)合起來作為主鍵,SQL 語句和運行結(jié)果如下。
mysql> CREATE TABLE tb_emp5
-> (
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> PRIMARY KEY(name,deptId)
-> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp5;
+--------+-------------+------+-----+---------+-------+
| 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)在修改表時添加主鍵約束
主鍵約束不僅可以在創(chuàng)建表的同時創(chuàng)建,也可以在修改表時添加。但是需要注意的是,設(shè)置成主鍵約束的字段中不允許有空值。
在修改數(shù)據(jù)表時添加主鍵約束的語法格式如下:
ALTER TABLE <數(shù)據(jù)表名> ADD PRIMARY KEY(<字段名>);
查看 tb_emp2 數(shù)據(jù)表的表結(jié)構(gòu),SQL 語句和運行結(jié)果如下所示。
mysql> DESC tb_emp2; +--------+-------------+------+-----+---------+-------+ | 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
修改數(shù)據(jù)表 tb_emp2,將字段 id 設(shè)置為主鍵,SQL 語句和運行結(jié)果如下。
mysql> ALTER TABLE tb_emp2
-> ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.94 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_emp2;
+--------+-------------+------+-----+---------+-------+
| 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)通常情況下,當在修改表時要設(shè)置表中某個字段的主鍵約束時,要確保設(shè)置成主鍵約束的字段中值不能夠有重復的,并且要保證是非空的。否則,無法設(shè)置主鍵約束。
刪除主鍵約束
當一個表中不需要主鍵約束時,就需要從表中將其刪除。刪除主鍵約束的方法要比創(chuàng)建主鍵約束容易的多。
刪除主鍵約束的語法格式如下所示:
ALTER TABLE <數(shù)據(jù)表名> DROP PRIMARY KEY;
例 5
刪除 tb_emp2 表中的主鍵約束,SQL 語句和運行結(jié)果如下。
mysql> ALTER TABLE tb_emp2
-> DROP PRIMARY KEY;
Query OK, 0 rows affected (0.94 sec)
Records: 0 Duplicates: 0 Warnings: 0由于主鍵約束在一個表中只能有一個,因此不需要指定主鍵名就可以刪除一個表中的主鍵約束。
分享文章:創(chuàng)新互聯(lián)數(shù)據(jù)庫教程:MySQL主鍵(PRIMARY KEY)
文章分享:http://www.dlmjj.cn/article/coggsdo.html


咨詢
建站咨詢
