MySQL-建表約束
約束--約束是強行執行的資料校驗規則,用來保證資料庫的完整性,當表中的資料有相互依賴時,可以保護相關資料不被刪除。
一、約束型別
-- NOT NULL 非空
-- UNIQUE KEY 唯一鍵
-- PRIMARY KEY 主鍵
-- FOREIGN KEY 外來鍵,資料冗餘,用於關聯其他表,外來鍵參照只能是主表主鍵或者是唯一鍵
-- CHECK 檢查
二、約束的方法
1、在定義列的同時定義約束
語法:
create table tb_emp(
id int primary key auto_increment,# 自增主鍵,主鍵預設唯一標識確認一行資料,主鍵可以是多列聯合主鍵
emp_name varchar(20) not null, # 姓名 非空約束
sex varchar(2), # 性別
age int check(age>18 and age<65)
address varchar(200), # 地址
email varchar(100) unique, # 郵箱,唯一約束
dept_id int references tb_dept(dept_id) # 外來鍵,引用部門表主鍵作為外來鍵(MySQL直接寫貌似無效)
);
2、表級約束:在定義了所有列基本屬性之後統一定義的約束
語法:constraint...... (constraint 可以省略)
create table tb_emp(
id int auto_increment,
emp_name varchar(20), # 姓名
sex varchar(2), # 性別
age int,
address varchar(200), # 地址
email varchar(100) , # 郵箱
dept_id int #
# constraint foreign key 外來鍵名[表名+約束名] (外來鍵) references 主表(欄位)
,primary key(id) # 主鍵
,constraint foreign key tb_emp_fk (dept_id) references tb_dept(id)
,check(age>18 and age<65)
,unique key (email)
);
約束名的規則:建議為 表名_列名_約束型別簡寫
3、在建立表後在新增約束
語法:ALTER TABLE tb_name
ADD CONSTRAINT 約束名 約束型別(被約束列名)
# 建表後建立約束
ALTER TABLE tb_emp
add primary key auto_increment(id), # 自動增長這樣無效
add constraint foreign key tb_emp_fk (dept_id) references tb_dept(id) , # 設定外來鍵
add constraint check(age>18 and age<65),
add constraint unique key (email);
ALTER TABLE tb_emp MODIFY id INT AUTO_INCREMENT ; # 更改自動增長
4、刪除約束
ALTER TABLE tb_emp MODIFY id; # 刪除自動增長(重新定義欄位屬性),AUTO_INCREMENT為MySQL特有
ALTER TABLE tb_emp DROP INDEX email; # 刪除唯一約束
ALTER TABLE tb_emp DROP PRIMARY KEY; # 刪除主鍵
ALTER TABLE tb_emp DROP FOREIGN KEY tb_emp_fk (外來鍵名稱); # 刪除外來鍵