【问题标题】:Truncate table in mysql截断mysql中的表
【发布时间】:2015-12-22 10:52:21
【问题描述】:

我想触发,这是代码

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 - 存储函数或触发器中不允许显式或隐式提交。

有什么建议为什么它不起作用?

【问题讨论】:

    标签: mysql triggers truncate


    【解决方案1】:

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

    来自source

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

    所以你可以试试

    DELETE FROM family_income;
    DELETE FROM student_income;
    

    而不是

    TRUNCATE family_income;
    TRUNCATE student_income;
    

    【讨论】:

    • 谢谢。有用。在第一个版本中,我想到了 DELETE FROM。
    【解决方案2】:

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

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

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

    享受:)

    【讨论】:

    • 我不知道。非常有用的信息。谢谢
    猜你喜欢
    • 2012-06-02
    • 2011-12-02
    • 1970-01-01
    • 2011-08-23
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    相关资源
    最近更新 更多