MySQL外鍵約束怎樣選擇

小樊
82
2024-11-01 06:34:46
欄目: 云計(jì)算

MySQL中的外鍵約束用于確保數(shù)據(jù)在兩個(gè)表之間的引用完整性。當(dāng)你在創(chuàng)建外鍵約束時(shí),可以選擇以下幾種不同的約束選項(xiàng):

  1. ON DELETE CASCADE: 當(dāng)被引用的表(子表)中的記錄被刪除時(shí),同時(shí)刪除引用該記錄的表(父表)中的相關(guān)記錄。
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(255),
    FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
);
  1. ON DELETE SET NULL: 當(dāng)被引用的表(子表)中的記錄被刪除時(shí),將引用該記錄的表(父表)中的相關(guān)外鍵列設(shè)置為NULL。
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(255),
    FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL
);
  1. ON DELETE NO ACTION: 當(dāng)被引用的表(子表)中的記錄被刪除時(shí),不允許刪除引用該記錄的表(父表)中的相關(guān)記錄。這將引發(fā)一個(gè)錯(cuò)誤,除非你使用了ON DELETE SET NULLON DELETE CASCADE。
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(255),
    FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE NO ACTION
);
  1. ON UPDATE CASCADE: 當(dāng)引用表(父表)中的記錄被更新時(shí),同時(shí)更新被引用表(子表)中的相關(guān)記錄。
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(255),
    FOREIGN KEY (parent_id) REFERENCES parent(id) ON UPDATE CASCADE
);
  1. ON UPDATE SET NULL: 當(dāng)引用表(父表)中的記錄被更新時(shí),將引用該記錄的表(子表)中的相關(guān)外鍵列設(shè)置為NULL。
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(255),
    FOREIGN KEY (parent_id) REFERENCES parent(id) ON UPDATE SET NULL
);
  1. ON UPDATE NO ACTION: 當(dāng)引用表(父表)中的記錄被更新時(shí),不允許更新被引用表(子表)中的相關(guān)記錄。這將引發(fā)一個(gè)錯(cuò)誤,除非你使用了ON UPDATE CASCADEON UPDATE SET NULL。
CREATE TABLE parent (
    id INT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE child (
    id INT PRIMARY KEY,
    parent_id INT,
    name VARCHAR(255),
    FOREIGN KEY (parent_id) REFERENCES parent(id) ON UPDATE NO ACTION
);

在選擇外鍵約束時(shí),需要根據(jù)你的業(yè)務(wù)需求和數(shù)據(jù)完整性要求來(lái)決定使用哪種約束。例如,如果你希望在刪除父表記錄時(shí)同時(shí)刪除子表中的相關(guān)記錄,可以使用ON DELETE CASCADE。如果你希望在更新父表記錄時(shí)將子表中的相關(guān)外鍵列設(shè)置為NULL,可以使用ON UPDATE SET NULL。

0