我在數據庫中有100個表格,我只想保留一個表格。在MySql中刪除除了一個之外的所有表格
我試過類似下面的查詢:
DROP ALL TABLES EXCEPT my_table
但這似乎並不存在。任何想法?
我在數據庫中有100個表格,我只想保留一個表格。在MySql中刪除除了一個之外的所有表格
我試過類似下面的查詢:
DROP ALL TABLES EXCEPT my_table
但這似乎並不存在。任何想法?
使用文件你可以建立多個列出的表DROP TABLE語句,並使用MySQL準備語句運行查詢 -
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables FROM information_schema.tables
WHERE table_schema = 'Database1' AND table_name <> 'my_table';
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt1 FROM @tables;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
您不能在MySQL中刪除多個表。
你的情況最簡單的就是導出你想保留的表(使用像mysqldump
這樣的工具),然後刪除並重新創建數據庫。
我的表是如此之大,我不希望它導出。然後單獨放置每個表格會更容易。 – ARMAGEDDON 2013-04-27 10:55:53
然後你應該看看這個問題:http://stackoverflow.com/questions/1454328/is-there-a-mysql-command-to-implement-something-like-drop-tables-except-t1-b2 – 2013-04-27 10:56:28
您可訂做下降報表輸出他們的信息文件,之後
SELECT CONCAT('DROP TABLE ', table_name , ';') AS statement FROM information_schema.tables WHERE table_name not like 'table_to_keep' and table_schema like 'your_schema' into outfile 'path_to_file;
source path_to_file;
我不知道爲什麼沒有人建議去目錄:
C:\Program Files (x86)\Parallels\Plesk\Databases\MySQL\data\user_db\...
和刪除他們很容易在那裏?這是我做的,它似乎工作
如果所有的表都是MyISAM表,它將會工作。如果數據庫有InnoDB表,那麼它不會那麼容易...... – GregD 2013-04-27 12:48:35
你可以使用mysqldump
,試試吧!
mysqldump -u[USERNAME] -p[PASSWORD]--add-drop-table --no-data [DATABASE] |
grep ^DROP |
grep -v 'my_table' |
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
如果您有許多表,請注意GROUP_CONCAT函數的截斷。它有返回的字符串的最大長度的設置:group_concat_max_len
參見:GROUP_CONCAT reference manual entry
這個答案引導我到解決方案: MYSQL: How to define or get LONG string variables
這一個似乎工作。謝謝Devart! – ARMAGEDDON 2013-05-01 12:13:50
超級代碼 - 並結合IN()你也可以保留多個表 – Antony 2017-03-24 15:37:00
@Devart如何檢查變量表的空值 – 2017-08-01 10:13:23