在 MySQL 中,表與表之間可以通過外鍵來建立關(guān)系。在進行數(shù)據(jù)操作時,我們可能需要刪除一個表中某個數(shù)據(jù)條目及其在其他表中的相關(guān)數(shù)據(jù)。這時候就需要用到兩個表關(guān)聯(lián)刪除。
下面我們以兩個表之間的一對多關(guān)系為例子進行說明。我們有兩個表:學(xué)生表(students)和成績表(scores),其中學(xué)生表中的每一條記錄對應(yīng)成績表中的多條記錄。
CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE scores ( id INT PRIMARY KEY, student_id INT, score INT, FOREIGN KEY (student_id) REFERENCES students(id) );
假設(shè)我們要刪除學(xué)生表中一條記錄以及該學(xué)生在成績表中的所有記錄。我們可以通過以下 SQL 語句實現(xiàn):
DELETE FROM students WHERE id=1; DELETE FROM scores WHERE student_id=1;
以上兩條語句需要分別執(zhí)行,如果我們要避免手動執(zhí)行兩次操作,可以使用 ON DELETE CASCADE 屬性。
ON DELETE CASCADE 表示在刪除主表中一條記錄時,同時刪除該主表記錄在從表中的所有相關(guān)記錄。我們可以在創(chuàng)建外鍵時加上該屬性:
CREATE TABLE scores ( id INT PRIMARY KEY, student_id INT, score INT, FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE );
這樣我們只需要執(zhí)行以下一條語句即可實現(xiàn)一次性刪除兩個表中所有相關(guān)記錄:
DELETE FROM students WHERE id=1;
在實際業(yè)務(wù)應(yīng)用中,我們需要謹慎使用 ON DELETE CASCADE 屬性,避免誤刪數(shù)據(jù)。需要注意的是,只有在兩個表之間建立了外鍵約束才能使用 ON DELETE CASCADE 屬性。