在mysql中截断表

时间:2015-12-22 10:52:22

标签: mysql triggers truncate

我想制作触发器,这是代码

DELIMITER $$
CREATE TRIGGER tax_year_update AFTER UPDATE ON const_data
FOR EACH ROW 
BEGIN
    IF NEW.tax_year <> OLD.tax_year THEN
    TRUNCATE family_income;
    TRUNCATE student_income;
    END IF;
END$$
DELIMITER;

导致此错误

1422 - 存储函数或触发器中不允许显式或隐式提交。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

Truncate隐式提交触发器内不允许的事务。 TRUNCATE TABLE也是DDL statament。您需要更好地使用DELETE而不是TRUNCATE。

来自source

  

根据版本和存储引擎,TRUNCATE可能会导致表格   被删除和重新创建。这提供了一种更有效的方式   删除表中的所有行,但它确实执行隐式   承诺。 您可能希望使用DELETE而不是TRUNCATE。

所以你可以试试

DELETE FROM family_income;
DELETE FROM student_income;

而不是

TRUNCATE family_income;
TRUNCATE student_income;

答案 1 :(得分:2)

截断表时,如果记录与其他表有关。它不会被截断。

首先,您要删除要截断的表中的所有记录。

然后转到选项并使用1设置自动增量。

享受:)