【1】主鍵
主鍵(PRIMARY KEY),也稱“主鍵約束”。
MySQL主鍵約束是一個列或者多個列的組合,其值能唯一地標識表中的每一行。
這樣的一列或多列稱為表的主鍵,通過它可以強制表的實體完整性。
【2】選取設置主鍵約束的字段
主鍵約束即在表中定義一個主鍵來唯一確定表中每一行數據的標識符。
主鍵可以是表中的某一列或者多列的組合,其中由多列組合的主鍵稱為復合主鍵。
【3】主鍵規則
(1)每個表有且僅有一個主鍵。
如下示例:
(a)創建表
# 創建表 DROP TABLE IF EXISTS students; CREATE TABLE `students` ( `sId` INT(20) UNSIGNED NOT NULL, `sName` VARCHAR(100) NOT NULL, `sAge` INT(10) NOT NULL, `sAddr` VARCHAR(200) DEFAULT NULL, `sGrade` INT(10) DEFAULT NULL, `sStuId` VARCHAR(20) DEFAULT NULL, `sSex` INT(10) UNSIGNED DEFAULT NULL ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4
執行,創建表成功。
(b)創建主鍵1
# 創建主鍵1 ALTER TABLE students ADD PRIMARY KEY (sId, sStuId);
執行,創建主鍵1成功。
(c)創建主鍵2
# 創建主鍵2 ALTER TABLE students ADD PRIMARY KEY (sId, sName);
執行,創建主鍵2失敗,錯誤提示:
查詢:ALTER TABLE students ADD PRIMARY KEY (sId, sName)錯誤代碼: 1068
Multiple primary key defined
(2)唯一性原則。主鍵值必須唯一地標識表中的每一行,且不能為NULL,即表中不可能存在兩行數據有相同的主鍵值。
上一步,我們已經為表建立了主鍵,查詢主鍵建立結果:
# 查詢索引 SHOW INDEX FROM students;
查詢主鍵結果:

現在,我們向表中添加數據1:
# 添加數據1 INSERT INTO students(sId, sNAME, sAge, sAddr, sGrade, sStuId, sSex) VALUES (1, 'wangjun', 22, 'weinan', NULL, 6, 1)
如上,數據1添加成功。再添加數據2:
# 添加數據2 INSERT INTO students(sId, sNAME, sAge, sAddr, sGrade, sStuId, sSex) VALUES (2, 'liujie', 20, 'xian', 8, NULL, 0)
執行失敗,提示如下:
Column 'sStuId' cannot be null
說明:即使是復合主鍵,主鍵的所有列值均不能為NULL。
(3)一個列名只能在復合主鍵列表中出現一次。
刪除上表的主鍵,重新創建主鍵,執行SQL如下:
# 刪除主鍵 ALTER TABLE students DROP PRIMARY KEY; # 創建主鍵sStuId ALTER TABLE students ADD PRIMARY KEY (sId, sStuId, sStuId);
執行錯誤,錯誤提示:
查詢:ALTER TABLE students ADD PRIMARY KEY (sId, sStuId, sStuId)錯誤代碼: 1060 DUPLICATE COLUMN NAME 'sStuId'
如下,說明復合主鍵的列只能出現一次。
(4)最小化原則。復合主鍵不能包含不必要的多余列。即當把復合主鍵的某一列刪除后,如果剩下的列構成的主鍵仍然滿足唯一性原則,那么這個復合主鍵是不正確的。
Good Good Study, Day Day Up.
順序 選擇 循環 總結
