MySQL數據庫----常見約束詳解

#常見約束

/*

含義:一種限制,用於限制表中的數據,爲了保證表中數據的可靠性和準確性

分類:六大約束

	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;






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章