約束
約束介紹和分類
約束的概念:
約束是作用于表中列上的規(guī)則,用于限制加入表的數(shù)據(jù)
約束的存在保證了數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和完整性
約束的分類如下:
約束名稱 | 描述 | 關鍵字 |
---|---|---|
非空約束 | 保證列中所有數(shù)據(jù)不能有null值 | NOT NULL |
唯一約束 | 保證列中所有數(shù)據(jù)各不相同 | UNIQUE |
主鍵約束 | 主鍵是一行數(shù)據(jù)的唯一標識, 要求非空且唯一 | PRIMARY KEY |
檢查約束 | 保證列中的值滿足某一條件 | CHECK |
默認約束 | 保存數(shù)據(jù)時, 未指定值則采用默認值 | DEFAULT |
外檢約束 | 外鍵用來讓兩個表的數(shù)據(jù)之間建立連接, 保證數(shù)據(jù)的一致性和完整性 | FOREING KEY |
注意: MySQL不支持檢查約束
非空約束
概念: 非空約束用于保證列中所有數(shù)據(jù)不能有NULL值
語法:
添加約束:
-- 創(chuàng)建表時添加非空約束
CREATE TABLE 表名(
列名 數(shù)據(jù)類型 NOT NULL,
…
);
-- 建完表后添加非空約束
ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 NOT NULL;
刪除約束:
ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型;
唯一約束
概念: 唯一約束用于保證列中所有數(shù)據(jù)各不相同
語法:
添加約束:
-- 創(chuàng)建表時添加唯一約束
CREATE TABLE 表名(
列名 數(shù)據(jù)類型 UNIQUE [AUTO_INCREMENT],
-- AUTO_INCREMENT: 當不指定值時自動增長
…
);
CREATE TABLE 表名(
列名 數(shù)據(jù)類型,
…
[CONSTRAINT] [約束名稱] UNIQUE(列名)
);
-- 建完表后添加唯一約束
ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 UNIQUE;
刪除約束
ALTER TABLE 表名 DROP INDEX 字段名;
主鍵約束
概念:
主鍵是一行數(shù)據(jù)的唯一標識,要求非空且唯一
一張表只能有一個主鍵
語法:
添加約束: AUTO_INCREMENT表示主鍵自增
-- 創(chuàng)建表時添加主鍵約束
CREATE TABLE 表名(
列名 數(shù)據(jù)類型 PRIMARY KEY [AUTO_INCREMENT],
…
);
CREATE TABLE 表名(
列名 數(shù)據(jù)類型,
[CONSTRAINT] [約束名稱] PRIMARY KEY(列名)
);
-- 建完表后添加主鍵約束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
刪除約束:
ALTER TABLE 表名 DROP PRIMARY KEY;
默認約束
概念: 保存數(shù)據(jù)時,未指定值則采用默認值
語法:
添加約束:
-- 創(chuàng)建表時添加默認約束
CREATE TABLE 表名(
列名 數(shù)據(jù)類型 DEFAULT 默認值,
…
);
-- 建完表后添加默認約束
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默認值;
刪除約束:
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
案例練習
按照下面圖片中的要求, 為表添加合適的約束:
語句演示:
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50) NOT NULL UNIQUE,
joindate DATE NOT NULL,
salary DOUBLE(7,2) NOT NULL,
bonus DOUBLE(7,2) DEFAULT 0
);
外鍵約束
概念: 外鍵用來讓兩個表的數(shù)據(jù)之間建立鏈接,保證數(shù)據(jù)的一致性和完整性
語法:
添加約束:
-- 創(chuàng)建表時添加外鍵約束
CREATE TABLE 表名(
列名 數(shù)據(jù)類型,
…
[CONSTRAINT] [外鍵名稱] FOREIGN KEY(外鍵列名) REFERENCES 主表(主表列名)
);
-- 建完表后添加外鍵約束
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱);
刪除約束:
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
案例練習
例如我們有如下兩張表, 員工表和部門表, 在沒有添加外鍵約束的時候, 是可以直接刪除部門表的研發(fā)部的;但是我們知道這是不合理的, 因為員工表中, 前三個員工是屬于研發(fā)部的, 在有員工屬于研發(fā)部的情況下應該不能刪除才合理;
我們可以通過外鍵約束解決這個問題, 將兩張表建立連接: 添加外鍵, emp表的dep_id關聯(lián)dept表的id主鍵;
創(chuàng)建部門表(注意要先創(chuàng)建部門表), 將id設置為主鍵, 并添加兩個部門
-- 部門表
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
dep_name varchar(20),
addr varchar(20)
);
-- 添加兩個部門
INSERT INTO dept(dep_name, addr) VALUES('研發(fā)部','廣州'),('銷售部', '深圳');
創(chuàng)建員工表添加員工, 并為員工表emp添加外鍵約束
-- 員工表
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
age INT,
dep_id INT,
-- 添加外鍵 dep_id,關聯(lián) dept 表的id主鍵
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);
-- 添加員工,dep_id 表示員工所在的部門
INSERT INTO emp (NAME, age, dep_id) VALUES
('張三', 20, 1),
('李四', 20, 1),
('王五', 20, 1),
('趙六', 20, 2),
('孫七', 22, 2),
('周八', 18, 2);
不需要可以刪除外鍵文章來源:http://www.zghlxwxcb.cn/news/detail-792149.html
-- 刪除外鍵
ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;
建表后, 也是可以繼續(xù)添加外鍵的文章來源地址http://www.zghlxwxcb.cn/news/detail-792149.html
-- 添加外鍵
ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id);
到了這里,關于SQL語句 -非空約束 - 唯一約束 - 主鍵約束 - 默認約束 -外鍵約束的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!