2016-12-03 34 views
0

我想在插入一組新數據之前清除/清空/截斷MySQL中的一個表。我認爲這隻能使用觸發器來完成。在插入新數據之前截斷表

我創建了以下觸發:

create trigger top_destinations_truncate BEFORE INSERT 
on top_destinations FOR EACH ROW 
delete from top_destinations 

但是,當我嘗試使用我的查詢增加幾百記錄我得到這個錯誤:

HY000Can't update table 'top_destinations' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

insert into table top_destinations查詢本身工作正常,如果觸發器不存在。但我需要每次重新開始...

我該怎麼辦?也許在沒有觸發器的情況下,MySQL有更好的方式:像一個順序類型的查詢。首先截斷,稍等一會,然後插入,如果可能的話。

回答

0

您可以使用TRANSACTION,因此您的表對於其他查詢而言不會爲空,但這不是最快的方法。

START TRANSACTION; 
DELETE FROM your_table; 
INSERT into your_table ... 
... 
INSERT into your_table .... 
COMMIT; 

或更快的方式:

TRUNCATE yout_table; 
INSERT into your_table ... 
... 
INSERT into your_table .... 
這樣的TRUNCATE刪除並重新創建表並不能在交易中使用,但實在是快