2016-04-05 109 views
2

我有一個包含100多個表的數據庫。其中約20人有專門的專欄,說column1從所有表中刪除行

我可以刪除所有表,where column1="abc"中的行,但不指定每個表嗎?

所以我需要的東西是這樣的:

DELETE FROM [all tables] WHERE column1 = 'abc'; 
+0

您需要創建一個動態查詢。使用'information_schema'通過'column1'獲取表格 –

+0

只需查詢信息模式,獲取有問題的行的表名並構造查詢。除非需要多次運行此查詢,否則無需爲此跳過這些箍。 –

回答

4

最簡單的方法可能是以下幾點:

SELECT 
CONCAT('DELETE FROM ',TABLE_NAME," WHERE column1 = 'abc';") comd 
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME' 
AND COLUMN_NAME ='column1'; 

該查詢會給你輸出象下面這樣:

DELETE FROM TABLE_1 WHERE column1 = 'abc'; 
DELETE FROM TABLE_2 WHERE column1 = 'abc'; 
DELETE FROM TABLE_3 WHERE column1 = 'abc'; 
DELETE FROM TABLE_4 WHERE column1 = 'abc'; 
. 
. 
. 

現在複製這些DELETE命令並執行所有。


注: 在其他的方式,你可以寫一個存儲的程序,你可以通過prepare statement把這些generated command strings成可執行的命令/查詢。

但是你可以選擇上面提到的最簡單的方法來繞過複雜性。

+0

不,你不會得到一個錯誤。如果特定條目不存在,則不需要刪除。它會靜靜地運行。 – 1000111