mysql - 在MySQL中编写关于BEFORE UPDATE的触发器

标签 mysql sql triggers mysql-error-1235

我对触发器非常陌生,所以这是一个非常初学者的问题。我只是尝试在行更新之前将其 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 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

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

最佳答案

我看你的代码没有任何问题。

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

编辑:

你的INSERT语法是非正统的,但对mysql有效。通常情况下会是:

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

关于mysql - 在MySQL中编写关于BEFORE UPDATE的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407283/

相关文章:

mysql - 如何解决困境 : export orders from old magento system import into new magento, 重叠 ID

sql - Postgres 函数 upper 不适用于西里尔字母(版本 9.4)

azure - 如何在 Azure DevOps 中定义 Blob 存储触发器来创建新版本?

mysql - 触发器上的语法错误

php - 如何在 MySQL 数据库中插入具有多个值的输入?

python - 在查询 PyMySQL 中使用 WHERE

MySQL 将行转为动态数量的列

Sql Oracle 12c 触发器

MySQL - 返回 10 天内注册的用户

c++ - mysql_num_rows 总是返回 0