MySQL---‘PRIMARY KEY’的使用
一、定義:
主鍵(PRIMARY KEY),又稱主碼,是表中一列或多列的組合。
MySQL主鍵約束是一個列或者列的組合,其值能唯一地標識表中的每一行
這樣的一列或多列稱為表的主鍵,通過它可以強制表的實體完整性。
二、選取設置主鍵約束的字段:
主鍵約束即在表中定義一個主鍵來唯一確定表中每一行數據的標識符;
主鍵可以是表中的某一列或者多列的組合,其中由多列組合的主鍵稱為復合主鍵
規則:
1.每個表只能定義一個主鍵
2.唯一性原則(主鍵值必須唯一標識表中的每一行,且不能為NULL,即表中不可能存在兩行數據有相同的主鍵值)
3.一個列名只能在復合主鍵列表中出現一次
4.最小化原則(復合主鍵不能包含不必要的多余列;當把復合主鍵的某一列刪除后,如果剩下的列構成的主鍵仍然滿足唯 一性原則,那么這個復合主鍵是不正確的)
三、主鍵的類型:單字段主鍵和多字段聯合主鍵.
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),
-> name varchar(25),
-> deptid int(11),
-> salary float,
-> primary key(id)
-> );
Query OK, 0 rows affected (0.01 sec)
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
-> (
-> name varchar(25),
-> deptid int(11),
-> salary float,
-> primary key(name,deptid)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> show create table tb_emp3\G;
*************************** 1. row ***************************
Table: tb_emp3
Create Table: CREATE TABLE `tb_emp3` (
`name` varchar(25) NOT NULL DEFAULT '',
`deptid` int(11) NOT NULL DEFAULT '0',
`salary` float DEFAULT NULL,
PRIMARY KEY (`name`,`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
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
mysql> desc tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | 0 | |
| name | varchar(25) | YES | | NULL | |
| deptid | int(11) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
4.刪除主鍵約束
ALTER TABLE <數據表名> DROP PRIMARY KEY;
因為每個表的主鍵約束只有一個,所以並不用指定名稱。
實例5:刪除tb_emp2表的主鍵約束
mysql> alter table tb_emp2 drop primary key;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
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)