#常見約束
/*
含義:一種限制,用於限制表中的數據,爲了保證表中數據的可靠性和準確性
分類:六大約束
not null:非空,用於保證字段的值不能爲空
比如姓名,學號等
default:默認,用於保證該字段有默認值
比如性別
PRIMARY KEY:主鍵,用於保證該字段的值具有唯一性,並且非空
比如學號,員工編號等
UNIQUE:唯一:,用於保證該字段的值具有唯一性,可以爲空
比如座位號
CHECK:檢查約束【mysql不支持】
比如年齡、性別
FOREIGN KEY:外鍵:用於限制兩個表的關係,用於保證該字段的值必須來自於主表的關聯列的值
在從表添加外鍵約束,用於引用主表中某列的值
比如學生表的專業編號,員工表的部門編號
添加約束的時機:
1.創建表時
2.修改表時
約束的分類:
列級約束:
六大約束語法上都支持,但外鍵約束沒有效果
表級約束:
除了非空、默認,其他都支持
主鍵和唯一的大對比:
保證唯一性 是否允許爲空 一個表中可以有多少個 是否允許組合
主鍵 √ × 至多有一個 允許,但不銳減
唯一 √ √ 可以有多個 允許,但不推薦
外鍵:
1.要求在從表設置外鍵關係
2.從表的外鍵值得類型和主表的關聯列的類型要求一致或者兼容,名稱無要求
3.主表的關聯列必須是一個key(一般是主鍵或者唯一)
4.插入數據時,應該先插入主表,在插入從表
刪除數據時,先刪除從表,再刪除主表
*/
CREATE DATABASE stedents;
#一、創建表時添加約束
#1、添加列級約束
/*
語法:
直接在字段名後面追加 約束類型即可
只支持:默認、非空、主鍵、唯一
*/
CREATE TABLE stuinfo (
id INT PRIMARY KEY,#主鍵
stuname VARCHAR(20) NOT NULL ,#非空
gender CHAR(1) CHECK(gender='男' OR gender ='女'),#檢查
seat INT UNIQUE ,#唯一
age INT DEFAULT 18,#默認約束
majorid INT REFERENCES major(id) #外鍵
);
CREATE TABLE major (
id INT PRIMARY KEY,
majorname VARCHAR(20)
);
DESC stuinfo;
#查看stuinfo的約束
SHOW INDEX FROM stuinfo;
#2、添加表級約束
/*
語法:
【constraint 約束名】 約束類型(字段名)
*/
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,
PRIMARY KEY(id),#主鍵
UNIQUE(seat),#唯一值
CHECK(gender ='男' OR gender = '女'),#檢查
FOREIGN KEY(majorid) REFERENCES major(id)#外鍵
);
SHOW INDEX FROM stuinfo;
#通用的寫法
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuname VARCHAR(20) NOT NULL ,
sex CHAR(1) ,
age INT DEFAULT 18,
seat INT UNIQUE ,
majorid INT,
CONSTRAINT fl_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外鍵
);
#二、修改表時添加約束
/*
1、添加列級約束
alter table 表名 modfiy 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
);
DESC stuinfo;
#1、添加非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#2、添加默認約束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#3、添加主鍵
#①列級約束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#②表級約束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);
#四、添加主鍵
#①列級約束
ALTER TABLE stuinfo MODIFY COLUMN SET INT UNIQUE;
#②表級約束
ALTER TABLE stuinfo ADD UNIQUE(seat);
#五、添加外鍵
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
#三、修改表時刪除約束
DESC stuinfo;
#1、刪除非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
#2、刪除默認約束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
#3、刪除主鍵
ALTER TABLE stuinfo DROP PRIMARY KEY;
#4、刪除唯一鍵
ALTER TABLE stuinfo DROP INDEX seat;
#5、刪除外鍵
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
SHOW INDEX FROM stuinfo;
MySQL數據庫----常見約束詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.