(八)MySQL基礎——主鍵、外來鍵、修改表時新增刪除約束、標識列
阿新 • • 發佈:2018-11-11
一、主鍵和唯一的區別:
保證唯一性 | 是否允許為空 | 一個表可以有多少個 | 是否允許組合 | |
主鍵 | √ | × | 至多有1個 | √,但不推薦 |
唯一 | √ | √ | 可以有多個 | √,但不推薦 |
唯一的性質表現在,相同列中有兩個null值都是錯誤的。
二、外來鍵:
1、要求在從表設定外來鍵關係
2、從表的外來鍵列的型別和主表的關聯列(對應列)的型別要求一致或相容,名稱無要求
3、主表中的關聯列必須是一個key(一般是主鍵或者是唯一)
4、要求插入資料時,先插入主表的資料,再插入從表資料;而刪除資料時,先刪除從表資料,再刪除主表資料
三、修改表時新增約束
1、新增列級約束的時候,語法:
ALTER TABLE 表名 MODIFY COLUMN 欄位名 欄位型別 新約束;
2、新增表級約束,語法:
ALTER TABLE 表名 ADD 【CONSTRAINT 約束名】 約束型別(欄位名) 【外來鍵的引用】;
-- 建立一個表 DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo( id INT, stuname VARCHAR(20), gender CHAR(1), seat INT, age INT, majorid INT ) -- 新增非空約束 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL; -- 新增預設約束 ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18; - 新增主鍵 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY; ALTER TABLE stuinfo ADD PRIMARY KEY(id); -- 新增唯一鍵 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE; ALTER TABLE stuinfo ADD UNIQUE(seat); -- 新增外來鍵 ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
四、修改表時刪除約束
-- 刪除非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
-- 刪除預設約束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
- 刪除主鍵
ALTER TABLE stuinfo DROP PRIMARY KEY;
-- 刪除唯一鍵
ALTER TABLE stuinfo DROP INDEX seat;
-- 刪除外來鍵
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
五、列級約束和表級約束的區別
位置 | 支援的約束型別 | 是否可以起約束名 | |
列級約束 | 列的後面 | 語法都支援,但外來鍵沒有效果 | 不可以 |
表級約束 | 所有列的下面 | 預設和非空不支援,其他支援 | 可以 |
六、標識列
1、含義:又稱為自增長列,可以不用手動的插入值,系統提供預設的序列值
-- 建立表時設定標識列
CREATE TABLE tab_identity(
id INT PRIMARY KEY AUTO_INCREMENT;
NAME VARCHAR(20)
)
INSERT INTO tab_identity(id,NAME) VALUES(NULL,'john');
INSERT INTO tab_identity(NAME) VALUES('lucy');
2、可以設定步長,但MySQL不支援設定偏移量
SET auto_increment_increment=3
3、特點:
(1)問:標識列必須和主鍵搭配嗎?
答:不一定,但要求是一個key(包括主鍵、唯一、外來鍵或者自定義一個key)。
(2)問:一個表可以有幾個標識列?
答:至多一個。
(3)問:標識列的型別有哪些?
答:只能是數值型(int\float\double...都可以,一般是int)。
(4)可以通過手動插入值,設定起始值
-- 可以使用這樣的操作,設定起始值
INSERT INTO tab_identity(id,NAME) VALUES(10,'john');
(5)修改表時設定標識列
-- 修改表時設定標識列
ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
(6)修改表時刪除標識列
-- 修改表時刪除標識列
ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY;