/* MySQL進階13 常見六大約束: 1.not null 非空 2.default :默認值,用於保證該字段的默認值 ; 比如年齡:1900-10-10 3.primary key : 主鍵,用於保證該字段的值具有唯一性,並且非空 4.unique : 唯一約束,保證該字段的值可以為空,具有唯一性 5.check : 檢查約束[mysql不支持,不報錯,沒有實際效果] 6.foreign key : 外鍵約束; 用於限制兩個表的關系, 用於保證該字段的值必須來自於主表的關聯列的值; 在從表中添加外鍵約束,用於引用主表中的某列的值; 比如: 學生表的專業編號,員工表的部門編號,員工表的工種編號; 添加約束的時機: 1.創建表時 2.修改表時 ---------- 約束的添加分類: 列級約束 : 六大約束語法上都支持,但外鍵沒有效果!! 表級約束 : 除了非空,默認, 其他的都支持! 語法 : constraint 約束名 約束類型(字段名) 主鍵和唯一: 都可以組合! #二. 修改表的時候 添加列級約束 alter table 表名 modify column 字段名 字段類型 新類型; 添加表級約束 alter table 表名 add [constraint 約束名] 約束類型(字段名) [外鍵的引用]; #********添加表名 # alter table 表名 add column 字段名 字段類型; */ CREATE TABLE 表名( 字段名 字段類型 列級約束, 字段名 字段類型, 表級約束 ); #一: 創建表時添加約束 CREATE DATABASE students; #1.添加列級約束 USE students; CREATE TABLE stuinfo( id INT PRIMARY KEY, #主鍵 stuName VARCHAR(20) NOT NULL, #非空 gender CHAR(1) CHECK(gender IN ('男','女')), #檢查約束 seat INT UNIQUE, #唯一 age INT DEFAULT 18 , #默認約束 majorId INT REFERENCES major(id) #設置為外鍵 ); DESC stuinfo; CREATE TABLE major( id INT PRIMARY KEY, majorName VARCHAR(20) ); #2 添加表級約束 DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo( id INT , #主鍵 stuName VARCHAR(20), #非空 gender CHAR(1), #檢查約束 seat INT, #唯一 age INT , #默認約束 majorid INT, CONSTRAINT pk PRIMARY KEY(id), #設置主鍵 CONSTRAINT uq UNIQUE(seat), #唯一鍵 CONSTRAINT ck CHECK(gender ='男' OR gender ='女'), #檢查 CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外鍵 ); SHOW INDEX FROM stuinfo; #組合寫法,更常用! 主鍵和唯一:都可以組合! 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,stuName), #設置主鍵 UNIQUE(seat), #唯一鍵 CHECK(gender ='男' OR gender ='女'), #檢查 CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外鍵 ); #二. 修改表的時候添加約束 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添加主鍵: 1)列級約束 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY; #2) 表級約束 ALTER TABLE stuinfo ADD PRIMARY KEY(id); #4.添加唯一 #1.列級約束 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE; #2) 表級約束 ALTER TABLE stuinfo ADD UNIQUE(id); #5.添加外鍵 ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id); ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); #三 .刪除約束 #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; DESC stuinfo;
