MySQL進階13--常見六大約束: 非空/默認/主鍵/唯一約束/檢查約束/外鍵約束--表級約束 / 列級約束


/* 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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM