截断mysql中的表

Posted

技术标签:

【中文标题】截断mysql中的表【英文标题】:Truncate table in 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 - 存储函数或触发器中不允许显式或隐式提交。

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

【问题讨论】:

【参考方案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 设置自动增量。

享受:)

【讨论】:

我不知道。非常有用的信息。谢谢

以上是关于截断mysql中的表的主要内容,如果未能解决你的问题,请参考以下文章

无法删除或截断 oracle 中的表

截断GBQ中的表

使用 DB2 语法截断 H2Database 中的表

MySql 数据在第 1 行截断列“值”

截断数据块上的表

截断日期时间超过 n 天的表