【问题标题】:Writing Triggers in MySQL in regards to BEFORE UPDATE在 MySQL 中编写关于 BEFORE UPDATE 的触发器
【发布时间】:2012-02-23 04:41:33
【问题描述】:

我对触发器很陌生,所以这是一个非常初学者的问题。我只是想在行更新之前将其 id、旧值和新值以及当前日期存储到新表中。我尝试了以下方法:

DELIMITER //
    DROP TRIGGER IF EXISTS stockTrig//
    CREATE TRIGGER stockTrig BEFORE UPDATE ON products
        FOR EACH ROW
        BEGIN
            IF NEW.quantity != OLD.quantity THEN
                INSERT INTO stock_log SET p_id = OLD.id, old_stock = OLD.quantity, new_stock = NEW.quantity, date = CURDATE();
            END IF;
        END//
DELIMITER;

我得到以下信息:

1235 - 此版本的 MySQL 尚不支持“一个表具有相同操作时间和事件的多个触发器”

...我不太明白。我正在使用 MySQL 5.1.53,它不应该过时。这里到底出了什么问题?

【问题讨论】:

  • 您是否已经在 products 上设置了 BEFORE UPDATE 触发器?您的触发器中还有其他问题,但首先要做的是。
  • 是的,我做到了,但我用SHOW TRIGGERS; 摆脱了它,因此修复了该错误,但现在我在第 1 行的“DELIMITER”附近遇到了一些语法错误。
  • 对其进行了更多更新。当我将它粘贴到 phpmyadmin 时,它说我有一些语法错误,但触发器仍然按预期运行并运行。有什么想法吗?
  • 据我所知,phpmyadmin 实例(旧版本)不处理 DELIMITER 命令。尝试执行不带分隔符的 CREATE TRIGGER 语句。

标签: mysql sql triggers mysql-error-1235


【解决方案1】:

您的代码没有任何问题。

你可以只使用mysql命令行吗? (就像我所知道的用于架构更改的所有其他开发人员/DBA 一样?)

编辑:

您的INSERT 语法是非正统的,但对mysql 有效。通常是:

...
INSERT INTO stock_log (p_id, old_stock, new_stock, date)
    VALUES (OLD.id, OLD.quantity, NEW.quantity, CURDATE());
...

【讨论】:

  • @Devart 好的。 “你每天都会学到一些东西”。我不知道用 mysql 插入的语法。酷。
  • 是的,这是执行此操作的不同方式。同意“你每天都学到一些东西”;-)
猜你喜欢
  • 2013-01-24
  • 1970-01-01
  • 2011-01-21
  • 2021-11-03
  • 1970-01-01
  • 2018-05-16
  • 2022-01-12
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多