數據庫約束的種類
約束名 | 約束關鍵字 |
---|---|
主鍵 | primary key |
唯一 | unique |
非空 | not null |
外鍵 | foreign key |
檢查約束 | check 注:mysql 不支持,sql支持 |
主鍵約束
創建主鍵方式
-
在創建表的時候給字段添加主鍵
字段名 字段類型 PRIMARY KEY
例1:
CREATE TABLE tb_info ( id INT PRIMARY KEY, name VARCHAR(30), age INT );
例2:
CREATE TABLE tb_info ( id INT, name VARCHAR(30), age INT, PRIMARY KEY(id) );
-
在已有表中添加主鍵
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
例:
ALTER TABLE tb_info ADD PRIMARY KEY(id);
刪除主鍵的方式
刪除單表主鍵約束
ALTER TABLE 表名 DROP PRIMARY KEY;
刪除有外鍵連接的表的主鍵
第一步:解除外鍵約束
ALTER TABLE 外鍵表 DROP FOREIGN KEY 外鍵名稱
第二步:刪除主鍵
ALTER TABLE 主鍵表 DROP PRIMARY KEY;
如:刪除tb1的主鍵
這里有兩個表,tb2的外鍵連接tb1的主鍵
第一步:解除與tb2的外鍵約束
ALTER TABLE tb2 DROP FOREIGN KEY id2;
第二步:刪除tb1的主鍵約束
ALTER TABLE tb1 DROP PRIMARY KEY;
主鍵自增
-- 表示自動增長(字段類型必須是整數類型)
AUTO_INCREMENT
如:
CREATE TABLE tb (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT
);
默認地 AUTO_INCREMENT 的開始值是 1
創建表時指定起始值
CREATE TABLE 表名 (
列名 INT PRIMARY KEY AUTO_INCREMENT
) AUTO_INCREMENT=起始值;
如:指定起始值為5
CREATE TABLE tb (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30),
age INT
) AUTO_INCREMENT=5;
創建好以后修改起始值
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
備注:DELETE 和 TRUNCATE 對自增長的影響
DELETE:刪除所有的記錄之后,自增長沒有影響。
TRUNCATE:刪除以后,自增長又重新開始。
唯一約束
唯一約束: 表中某一列不能出現重復的值
基本格式
字段名 字段類型 UNIQUE
如:tb表中的 name 字段中的記錄不能出現重復的
CREATE TABLE tb (
id INT,
name VARCHAR(30) UNIQUE,
age INT
);
非空約束
非空約束:某一列不能為null
基本語法格式
字段名 字段類型 NOT NULL
如:tb表中的 id 字段不能出現null
CREATE TABLE tb (
id INT NOT NULL,
name VARCHAR(30),
age INT
);
默認值
基本語法格式
字段名 字段類型 DEFAULT 默認值
如:tb表中的 age 字段的默認值為18
CREATE TABLE tb (
id INT,
name VARCHAR(30),
age INT DEFAULT 18
);
外鍵約束
創建外鍵約束
新建表時增加外鍵
CONSTRAINT 外鍵約束名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主鍵字段名)
如:
主表
CREATE TABLE tb1 (
id INT,
name VARCHAR(30),
age INT,
PRIMARY KEY(id)
);
從表
CREATE TABLE tb2 (
card INT,
name VARCHAR(30),
age INT,
CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
);
從表的外鍵card,與主表的主鍵id關聯,從表中外鍵約束的名為tb2_card。
已有表增加外鍵
ALTER TABLE 從表 ADD CONSTRAINT 外鍵約束名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表(主鍵字段名);
如:
表1
CREATE TABLE tb1 (
id INT,
name VARCHAR(30),
age INT,
PRIMARY KEY(id)
);
表2
CREATE TABLE tb2 (
card INT,
name VARCHAR(30),
age INT,
);
在tb2表中添加外鍵約束,外鍵字段為card。連接tb1表中的主鍵,主鍵字段為id:
ALTER TABLE tb2 ADD CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id);
刪除外鍵約束
ALTER TABLE 從表 DROP FOREIGN KEY 外鍵名稱;
外鍵的級聯
級聯操作:在修改和刪除主表的主鍵時,同時更新或刪除副表的外鍵值,稱為級聯操作。
級聯操作語法 | 描述 |
---|---|
ON UPDATE CASCADE | 級聯更新,只能是創建表的時候創建級聯關系。更新主表中的主鍵,從表中的外鍵列也自動同步更新 |
ON DELETE CASCADE | 級聯刪除 |
舉例:
創建tb1表
CREATE TABLE tb1 (
id INT,
name VARCHAR(30),
age INT,
PRIMARY KEY(id)
);
創建tb2表
-- 創建 tb2 表,添加級聯更新和級聯刪除
CREATE TABLE tb2 (
card INT,
name VARCHAR(30),
age INT,
CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);
這個時候,如果我們向tb1表中插入數據:
INSERT INTO tb1 (id, name, age) VALUES (1001, 'LeeHua', 22)
那么,tb2中的card字段也會更新。
這個時候,如果主表執行刪除,則會自動刪除從表中的相應記錄。