一、定義:
主鍵(PRIMARY KEY),又稱主碼,是表中一列或多列的組合。
MySQL主鍵限制是一個列或者列的組合,其值能唯一地辨別表中的每一行
這樣的一列或多列稱為表的主鍵,通過它可以強制表的實體完整性。
二、選取設定主鍵限制的字段:
主鍵限制即在表中定義一個主鍵來唯一确定表中每一行資料的辨別符;主鍵可以 是表中的某一列或者多列的組合,其中由多列組合的主鍵稱為複合主鍵
規則:
Ø 每個表隻能定義一個主鍵。
Ø 唯一性原則(主鍵值必須唯一辨別表中的每一行,且不能為NULL,即表中不可能存在兩行資料有相同的主鍵值).
Ø 一個列名隻能在複合主鍵清單中出現一次。
Ø 最小化原則(複合主鍵不能包含不必要的多餘列;當把複合主鍵的某一列删除後,如果剩下的列構成的主鍵仍然滿足唯一性原則,那麼這個複合主鍵是不正确的)
三、主鍵的類型:單字段主鍵和多字段聯合主鍵。
1.單字段主鍵
(1)在建立表時設定主鍵限制,文法規則:
字段名 資料類型 PRIMARY KEY [預設值];
執行個體1:在test_db資料庫中建立tb_emp1資料表,其主鍵為id,SQL語句如下
mysql> create table tb_emp1
-> (
-> id int(11) primary key,
-> name varchar(25),
-> deptid int(11),
-> salary float
-> );
Query OK, 0 rows affected (0.01 sec)
(2) 在定義完所有列之後指定主鍵,文法規則:
[CONSTRAINT <限制名>] PRIMARY KEY [字段名];
執行個體2:建立tb_emp2資料表,其主鍵為id,SQL語句如下
mysql> create table tb_emp2
-> id int(11),
-> salary float,
-> primary key(id)
mysql> show create table tb_emp2\G;
*************************** 1. row ***************************
Table: tb_emp2
Create Table: CREATE TABLE `tb_emp2` (
`id` int(11) NOT NULL DEFAULT '0',
`name` varchar(25) DEFAULT NULL,
`deptid` int(11) DEFAULT NULL,
`salary` float DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
2.多字段聯合主鍵:
文法規則:
PRIMARY KEY [字段1,字段2,……,字段n];
執行個體3:建立資料表tb_emp3,假設表中沒有主鍵id,為了唯一确定一個員工,可以把name、deptid聯合起來作為主鍵,SQL語句如下
mysql> create table tb_emp3
-> primary key(name,deptid)
mysql> show create table tb_emp3\G;
Table: tb_emp3
Create Table: CREATE TABLE `tb_emp3` (
`name` varchar(25) NOT NULL DEFAULT '',
`deptid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`name`,`deptid`)
3.在修改表時添加主鍵限制
ALTER TABLE <資料表名> ADD PRIMARY KEY(<列名>);
執行個體4:檢視tb_emp2資料表的表結構
mysql> desc tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | NO | | 0 | |
| name | varchar(25) | YES | | NULL | |
| deptid | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
4 rows in set (0.00 sec)
修改資料表tb_emp2,将字段id設定為主鍵,SQL語句如下:
mysql> alter table tb_emp2 add primary key(id);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
| id | int(11) | NO | PRI | 0 | |
| salary | float | YES | | NULL | |
4.删除主鍵限制
ALTER TABLE <資料表名> DROP PRIMARY KEY;
(因為每個表的主鍵限制隻有一個,是以并不用指定名稱。)
執行個體5:删除tb_emp2表的主鍵限制
mysql> alter table tb_emp2 drop primary key;
| name | varchar(25) | YES | | NULL | |