截断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中的表的主要内容,如果未能解决你的问题,请参考以下文章