在插入新数据之前截断表

时间:2016-12-03 11:58:30

标签: mysql triggers truncate

在插入一组新数据之前,我正在尝试清除/清空/截断MySQL中的表。我认为这只能使用触发器来完成。

我创建了以下触发器:

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

但是当我尝试用我的查询添加几百条记录时,我收到了这个错误:

  

HY000不能更新存储的函数/触发器中的表'top_destinations',因为它已被调用此存储的语句使用   功能/触发。

如果触发器不存在,insert into table top_destinations查询本身可以正常工作。但我每次都需要一个新的开始......

我该怎么办?也许在没有触发器的MySQL中有更好的方法:像顺序类型的查询。首先截断,稍等一下,然后插入,如果可能的话。

1 个答案:

答案 0 :(得分:2)

您可以使用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删除并重新创建表,并且不能在TRANSACTION中使用,但速度非常快。