一、概述
1、概念
對錶裏的數據進行限定,保證數據的正確性、有效性和完整性;
2、分類
①主鍵約束:primary key
②非空約束:not null
③唯一約束:unique
④外鍵約束:foreign key
二、非空約束
1、創建表時添加約束:
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- 名字不允許爲空,否則創建失敗
);
注意:
""與NULL是不同的兩個概念;
說明鏈接:https://blog.csdn.net/u014743697/article/details/54136092
2、刪除name的非空約束,本質上就是更改表的字段:
-- 刪除name的非空約束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
3、創建表完成之後添加約束,本質上也是更改表的字段:
-- 創建表之後,添加name的非空約束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
三、唯一約束
1、創建表時添加唯一約束:
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) UNIQUE -- 唯一約束
);
注意:
兩個NULL值,不算重複;
2、刪除唯一約束,本質是修改對應字段
-- 刪除唯一約束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
3、創建表之後,添加唯一約束,本質是修改對應字段
-- 創建表之後,添加name的非空約束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
四、主鍵約束
1、注意
①含義:非空且唯一;
②一張表只能有一個主鍵;
2、創建表時添加主鍵約束
CREATE TABLE stu(
id INT PRIMARY KEY, -- 主鍵約束
NAME VARCHAR(20)
);
3、刪除主鍵約束和創建表之後添加主鍵約束與非空約束和唯一約束一樣
五、主鍵約束——自動增長
1、概念
如果某一列是數值類型的,使用auto_increment可以來完成值的自動增長;
2、創建表時添加
CREATE TABLE stu(
id INTPRIMARY KEY AUTO_INCREMENT, -- 主鍵自動增長
NAME VARCHAR(20)
);
注意:添加語句時主鍵的內容填入NULL即可,會根據上一個主鍵的值進行自動增加
3、刪除自動增長和創建表後自動增長,同非空約束和唯一約束;
六、外鍵約束
1、描述
個人理解:加入一個部門的員工表,對於每一個員工在某些字段上存在大量相同的數據,比如有幾百名來自同一部門的員工同時都是男性,都是大學生這些相同屬性,那麼這個時候重複地將一些相同的數據賦值給不同的員工,這樣來說浪費了很多內存,那麼這樣的話就可以建立一個從表,將這些表具有相同值的字段添加進去,主表進行調取即可,這就像是寫代碼中的定義變量,不需要一次次賦予一樣的值。
2、在創建表時添加外鍵
語法格式:
create table 表名(
...
外鍵列名稱 數據類型,
constraint 外鍵名稱 foreign key (外鍵列名稱) references 從表名稱(關聯的從表列(一般是主鍵)名稱)
);
注意:從表要在主表創建之前 創建並添加數據記錄,主表才能使用;
完整案例代碼:
-- 創建從表,記錄學生的性別和年齡,id自增長
CREATE TABLE stu_p(
id INT PRIMARY KEY AUTO_INCREMENT,
sex VARCHAR(20),
age INT
)
-- 爲從表添加記錄
INSERT INTO stu_p(id,sex,age) VALUES(1,"男",20);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"男",21);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"男",22);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"女",20);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"女",21);
INSERT INTO stu_p(id,sex,age) VALUES(NULL,"女",22);
-- 創建主表,記錄學生的信息,關聯從表裏面學生的屬性
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
ranking INT,
dep_id INT, -- 外鍵對應的從表的主鍵(一般都是對應主鍵)
CONSTRAINT stu_p_id_fk FOREIGN KEY (dep_id) REFERENCES stu_p(id)
)
-- 爲主表添加記錄
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(1,"大哥",1,1);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"二哥",3,2);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"三哥",2,3);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"四哥",5,2);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"大姐",8,1);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"二姐",44,2);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"三姐",31,3);
INSERT INTO stu(id,NAME,ranking,dep_id) VALUES(NULL,"四姐",51,3);
-- 查詢從表數據
SELECT * FROM stu_p;
-- 查詢主表數據
SELECT * FROM stu;
3、刪除外鍵
ALTER TABLE 主表名 DROP FOREIGN KEY 外鍵名稱;
4、創建表後添加外鍵
ALTER TABLE 主表名 ADD constraint 外鍵名稱 foreign key (外鍵列名稱) references 從表名稱(關聯的從表列(一般是主鍵)
外鍵備註:外鍵可以爲null,但是不能爲不存在的外鍵值;
七、外鍵約束——級聯操作
1、添加外鍵,設置級聯更新和級聯刪除
ALTER TABLE 主表名
ADD constraint 外鍵名稱
foreign key (外鍵列名稱)
references 從表名稱(關聯的從表列(一般是主鍵)
ON UPDATE CASCADE ON DELETE CASCADE;
當刪除從表裏面的記錄時,主表裏面關聯所刪除的記錄主鍵的記錄也會被一起刪除;
2、分類
級聯更新:ON UPDATE CASCAD
級聯刪除:ON DELETE CASCADE
3、備註
級聯操作用的時候一定要非常謹慎,因爲很容易誤刪數據;