2012-10-28 20 views
5

我有一個MySQL數據庫中的一堆表,其中一些開始phpbb_ *我想刪除它們。是否有人知道一種方式來做到這一點,而不是做降表 - MySQL的

drop table <tablename>; 
每一次

?像一個正則表達式?

drop table phpbb* 

或類似的東西?

+1

也許檢查這個職位:http://stackoverflow.com/questions/1589278/sql-deleting-tables-with-prefix –

回答

7

您可以使用此MySQL的過程:

DELIMITER $$ 
CREATE PROCEDURE drop_tables_like(pattern VARCHAR(255), db VARCHAR(255)) 
BEGIN 
    SELECT @str_sql:=CONCAT('drop table ', GROUP_CONCAT(table_name)) 
    FROM information_schema.tables 
    WHERE table_schema=db AND table_name LIKE pattern; 

    PREPARE stmt from @str_sql; 
    EXECUTE stmt; 
    DROP prepare stmt; 
END$$ 

DELIMITER ; 

對於下降開始以 '' 在 'test1的' 數據庫,您可以運行所有表:

CALL drop_tables_like('a%', 'test1'); 

參考:http://dev.mysql.com/doc/refman/5.5/en/drop-table.html

0

只需添加上面的答案,如果在開始該過程之前沒有選擇數據庫,MYSQL將返回一個錯誤ERROR 1046 (3D000): No database selected。所以在這個陳述use <<db_name>>;前面加上上面的答案。修改後的解決辦法是:

use <<db_name>>;  
DELIMITER $$ 
CREATE PROCEDURE drop_tables_like(pattern VARCHAR(255), db VARCHAR(255)) 
BEGIN 
    SELECT @str_sql:=CONCAT('drop table ', GROUP_CONCAT(table_name)) 
    FROM information_schema.tables 
    WHERE table_schema=db AND table_name LIKE pattern; 

    PREPARE stmt from @str_sql; 
    EXECUTE stmt; 
    DROP prepare stmt; 
END$$  
DELIMITER ; 
CALL drop_tables_like('a%', '<<db_name>>'); 

確保您更換<>與數據庫的實際名稱。乾杯!