在一個查詢中從幾個表中刪除行的正確方法是什麼?在一個查詢中從多個表中刪除行
我問的原因是因爲我正在用PHP做這個。如果我使用多個查詢從每個表中刪除一個表,PHP必須多次訪問數據庫。如果我使用這種方法,會對性能產生影響嗎?
我知道ON DELETE CASCADE
選項,但這不適用於每個存儲引擎。另外,當我刪除父記錄時,可能會出現不想從子表中刪除所有記錄的情況。
在一個查詢中從幾個表中刪除行的正確方法是什麼?在一個查詢中從多個表中刪除行
我問的原因是因爲我正在用PHP做這個。如果我使用多個查詢從每個表中刪除一個表,PHP必須多次訪問數據庫。如果我使用這種方法,會對性能產生影響嗎?
我知道ON DELETE CASCADE
選項,但這不適用於每個存儲引擎。另外,當我刪除父記錄時,可能會出現不想從子表中刪除所有記錄的情況。
DELETE
t1, t2
FROM
table1 AS t1 INNER JOIN table2 AS t2
ON
joinCondition
WHERE
whereCondition
像往常一樣用DELETE查詢:要非常小心
如果你不知道這個問題的答案,那麼你不應該試圖支持衆多的RDMS適合您的應用。直言不諱。像每個關係數據庫一樣,CASCADE選項可用。另外,您應該考慮如何存儲分層數據以刪除子記錄。
例如,如果你想刪除所有「文件」在「文件夾」使用嵌套集模型的時候,它僅僅是
DELETE from files where id > :lft and id < :rgt
問題,但在任何情況下,您仍然可以使用JOIN刪除從多個表中刪除。但是,此不支持大量的RDMS,因此如果您擔心使用級聯,那麼即使使用DBAL,也無法在每個數據庫上使用連接刪除。
答案
我也曾經遇到類似的問題。我的解決方案是寫我自己的最小recruive查詢。只有一個查詢,它爲你做了剩下的事情。這是怎麼一回事呢:
//主要功能
功能工廠($ DB){$表=陣列( '表1', '表2', '表3' ...); //我一直到表12
for($ i = 0; $ i <''sizeof($ table); $ i ++){
delete($ db,$ table [$ i]);
}}
//刪除功能..可能還有塞提特了withn工廠的功能,但4 undestanging緣故
刪除($分貝,$表){
$ SQL ='刪除'。$ table;如果($ db-> query($ sql)){echo ucfirst($ table)。'刪除完成100%';
}
}
這就是所有...使非預定義的插件組,克里特島varible保存從您的數據錄入頁面數組的大小,改變刪除到「工作插入表'準備聲明並執行。 希望它可以幫助你以某種方式
我聽說,在一次從多個表中刪除不理想。這是因爲語法不允許使用'LIMIT'? – recount88
一般更容易犯了一個錯誤,將刪除比你預期的多。測試你的問題,你應該不會受到傷害。 – Mchl
是否有速度,如果我使用了多個查詢刪除,而不是一個有什麼區別? – recount88