一,六大約束
- NOT NULL 非空
- PRIMARY KEY 主鍵
- UNIQUE 唯一
- CHECK 檢查約束,MySQL 不支持,語法不報錯但無效果
- FOREIGN KEY 外鍵.限制兩表關系,通常在從表引入外鍵約束,引入主表中某列的值,保證從表該字段的值必須來源於主表關聯列的值
- DEFAULT 默認值/系統設定值
二,表級約束和列級約束的定義:
-
表級約束:對多個數據列建立的約束,稱為表級約束表級約束只能在列定義后聲明
-
列級約束:對一個數據列建立的約束,稱為列級約束列級約束既可以在列定義時聲明,也可以在列定義后聲明
ps:簡單來理解的話就是列級約束針對的是單列,表級約束針對的是整個表,如此引伸出來
六大約束都可在列級約束使用,但外鍵無效果(外鍵是約束兩個表之間的關系)
顯而易見,非空和默認不可在表級約束中使用
三,添加約束的時機:
- 創建表時:
#創建主表,實驗外鍵
CREAT TABLE IF NOT EXISTS major(
id INT,
major_name varchar(20)
);
#創建從表,實驗表級/列級約束
CREAT TABLE IF NOT EXISTS students(
#添加表級約束,直接在類型后添加即可
id INT PRIMARY KEY,
student_name VARCHAR(20),
sex CHAR(1),
age INT DEFAULT 18,
majorid INT,
#添加表級約束,直接添加在列創建結束后
CONSTRAINT pk PRIMARY KEY(id).#主鍵,constraint用來命名,不加也可以
CONSTRAINT fk_student_majory FOREIGN KEY(majorid) REFERENCES major(id)#外鍵
);
- 修改表時:
#添加非空,其他列級約束可仿照此方法
ALTER TABLE students MODIFY COLUMN student_name VARCHAR(20) NOT NULL;
#添加外鍵,其他表級約束也可使用同樣方法添加
ALTER TABLE students ADD FOREIGN KEY(majorid) REFERENCES major(id) ;