1. 程式人生 > 其它 >MySQL-建表約束

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 (外來鍵名稱); # 刪除外來鍵