【1】主鍵 spa
主鍵(PRIMARY KEY),也稱「主鍵約束」。code
MySQL主鍵約束是一個列或者多個列的組合,其值能惟一地標識表中的每一行。blog
這樣的一列或多列稱爲表的主鍵,經過它能夠強制表的實體完整性。索引
【2】選取設置主鍵約束的字段 ip
主鍵約束即在表中定義一個主鍵來惟一肯定表中每一行數據的標識符。 class
主鍵能夠是表中的某一列或者多列的組合,其中由多列組合的主鍵稱爲複合主鍵。循環
【3】主鍵規則 im
(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.
順序 選擇 循環 總結