暑期自學 Day 11 | 資料庫 (四)- 約束

Borris發表於2020-05-23

約束

  • 對錶的資料進行限定,保證資料的正確性,有效性,完整性。
  • 類別:新增在資料名的後面

主鍵約束

  • primary key,非空且唯一,資料的唯一標識
  • 刪除:ALTER table t_name DROP PRIMARY KEY;
  • 注意,主鍵刪除與非空刪除不一樣。非空刪除用 MODIFY。
  • 自增長 AUTO INCREMENT: 自動增長的值只和上一條記錄有關係

非空約束

  • not null,值不能為空

唯一約束

  • unique,值不能重複
  • 刪除:ALTER table t_name DROP INDEX id;

外來鍵約束

  • 一個主從表關係中,如果從表資料被刪除,主表某一列的資料由於關聯關係也會受影響。透過新增外來鍵約束,使資料無法輕易在從表中刪除。讓表與表之間存在關係,保證資料正確性。
  • 格式:外來鍵列, CONSTRAINT 外來鍵名 FOREIGN KEY (外來鍵列名) REFERENCE 主表名(主表列名);
  • 一個例子:
-- 一方主表,部門表
CREATE TABLE department (
    id INT PRIMARY KEY AUTO INCREMENT,
    dep_name VARCHAR(20),
    dep_location VARCHAR(20)
);
-- 多方從表,員工表
CREATE TABLE employ (
    id INT PRIMARY KEY AUTO INCREMENT,
    name VARCHAR(20),
    age INT,
    dep_id INT, -- 外來鍵對應主表中的主鍵,部門編號
    CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCE department(id) -- 將外來鍵關聯,emp_dep_fk 是外來鍵名稱
);

-- 刪除外來鍵
ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;

-- 建表後新增外來鍵
ALTER TABLE employ ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCE department(id);
-- 
級聯
  • 更改外來鍵id時使用級聯,可以使主從表關聯的外來鍵值聯動更新。
  • 新增級聯:ON UPDATE CASCADE
    • ALTER TABLE employ ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCE department(id) ON UPDATE CASCADE;
  • 刪除級聯:ON DELETE CASCADE
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章