2013-02-22 115 views
0

我試圖寫的MySQL程序來刪除數據庫中的所有數據:MySQL的程序來刪除數據庫中的所有數據

MySQL服務器版本5.5.20

它看起來像:

DELIMITER $$ 
CREATE PROCEDURE drop_data_like(pattern VARCHAR(255), db VARCHAR(255)) 
begin 
    DECLARE truncate_table VARCHAR(255) DEFAULT ''; 
    DECLARE done INT DEFAULT 0; 
    DECLARE cur1 CURSOR FOR SELECT CONCAT(db, '.', info.table_name) 
     FROM information_schema.tables AS info 
     WHERE info.table_schema=db AND info.table_name LIKE pattern; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    OPEN cur1; 

    read_loop: LOOP 
     FETCH cur1 INTO truncate_table; 
     IF done THEN LEAVE read_loop; END IF; 

     PREPARE stmt FROM truncate_table; 

     EXECUTE stmt; 
     DROP PREPARE stmt; 
    END LOOP; 
    CLOSE cur1; 
END$$ 
DELIMITER ; 

CALL drop_data_like('%%', DATABASE()); 

DROP PROCEDURE drop_data_like; 

而作爲結果,它顯示錯誤:

ERROR 1064 (42000) at line 16: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@truncate_table; 
    IF done THEN LEAVE read_loop; END IF; 

    PREPARE ' at line 13 

我做了什麼錯?

+0

我不明白爲什麼你不能用'TRUNCATE' – Kermit 2013-02-22 16:53:17

+0

可能重複:http://stackoverflow.com/questions/12403662/drop-all-表格 – Niels 2013-02-22 16:53:41

+0

爲什麼你需要一個程序「*刪除數據庫中的所有數據*」? – Lion 2013-02-22 16:55:25

回答

1

如果你需要保持結構,但只是擺脫數據,那麼只用結構做一個mysqldump(-d選項)會更容易,然後刪除數據庫並用mysqldump輸出重新創建它。

mysqldump -d -h localhost -u user -ppassword databasename > dumpfile.sql 

mysqlimport -u root -ppassword databasename dumpfile.sql 
+0

您的'mysqldump'命令是有道理的,但是您的導入命令是錯誤的。你應該這樣做來導入模式:'mysql -u root -ppassword databasename 2013-02-22 18:29:37

+0

@Ike。感謝您指出了這一點。正在思考「導入」並迷惑自己。 – mike 2013-02-22 23:50:05

相關問題