MySQL常見約束


#常見約束

/*

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


分類:六大約束
  NOT NULL:非空,用於保證該字段的值不能為空
  比如姓名、學號等
  DEFAULT:默認,用於保證該字段有默認值
  比如性別
  PRIMARY KEY:主鍵,用於保證該字段的值具有唯一性,並且非空
  比如學號、員工編號等
  UNIQUE:唯一,用於保證該字段的值具有唯一性,可以為空
  比如座位號
  CHECK:檢查約束【mysql中不支持】
  比如年齡、性別
  FOREIGN KEY:外鍵,用於限制兩個表的關系,用於保證該字段的值必須來自於主表的關聯列的值
  在從表添加外鍵約束,用於引用主表中某列的值
  比如學生表的專業編號,員工表的部門編號,員工表的工種編號

添加約束的時機:
  1.創建表時
  2.修改表時

約束的添加分類:
    列級約束:
      六大約束語法上都支持,但外鍵約束沒有效果

    表級約束:
      除了非空、默認,其他的都支持

主鍵和唯一的大對比:

    保證唯一性    是否允許為空  一個表中可以有多少個   是否允許組合
  主鍵   √        ×        至多有1個          √,但不推薦
  唯一   √        √        可以有多個        √,但不推薦
外鍵:
  1、要求在從表設置外鍵關系
  2、從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容,名稱無要求
  3、主表的關聯列必須是一個key(一般是主鍵或唯一)
  4、插入數據時,先插入主表,再插入從表
  刪除數據時,先刪除從表,再刪除主表


*/

CREATE TABLE 表名(
  字段名 字段類型 列級約束,
  字段名 字段類型,
  表級約束

)
CREATE DATABASE students;
#一、創建表時添加約束

#1.添加列級約束
/*
語法:

直接在字段名和類型后面追加 約束類型即可。

只支持:默認、非空、主鍵、唯一

*/

USE students;
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
  id INT PRIMARY KEY,#主鍵
  stuName VARCHAR(20) NOT NULL UNIQUE,#非空
  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)
);

#查看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,

  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;

 

#通用的寫法:★

CREATE TABLE IF NOT EXISTS stuinfo(
  id INT PRIMARY KEY,
  stuname VARCHAR(20),
  sex CHAR(1),
  age INT DEFAULT 18,
  seat INT UNIQUE,
  majorid INT,
  CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)

);

 

#二、修改表時添加約束

/*
1、添加列級約束
alter table 表名 modify 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);

#4.添加唯一

#①列級約束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
#②表級約束
ALTER TABLE stuinfo ADD UNIQUE(seat);


#5.添加外鍵
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;

SHOW INDEX FROM stuinfo;

 


免責聲明!

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



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