【问题标题】:How to write MySQL INSERT trigger for field value based on autoincrement field?如何为基于自动增量字段的字段值编写 MySQL INSERT 触发器?
【发布时间】:2016-10-01 18:01:59
【问题描述】:

MySQL。我有带有自动增量主键字段的表:

CREATE TABLE myTable (
 id INT AUTO_INCREMENT PRIMARY KEY,
 field VARCHAR(45)
);

我想根据主键值自动编写一些字段。 这不起作用:

CREATE TRIGGER `myTable_AFTER_INSERT` AFTER INSERT ON `myTable` FOR EACH ROW
BEGIN
 UPDATE myTable SET field=CONCAT(NEW.id,"T") WHERE id=NEW.id;
END;

在这种情况下,我收到来自 MySQL 的错误:

无法更新存储函数/触发器中的表“myTable”,因为它是 已被调用此存储函数/触发器的语句使用。

这也不起作用:

CREATE TRIGGER `myTable_BEFORE_INSERT` BEFORE INSERT ON `myTable` FOR EACH ROW
BEGIN
 SET NEW.field=CONCAT(NEW.id,"T");
END;

在这种情况下,NEW.did 是未定义的。

如何根据自动增量 ID 将一些值存储到 field?谢谢!

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    它将与下一个触发器一起使用:

    CREATE TRIGGER `myTable_BEFORE_INSERT` BEFORE INSERT ON `myTable` FOR EACH ROW
    BEGIN
        SET @new_field = "";
        SELECT AUTO_INCREMENT INTO @new_field
            FROM information_schema.tables
            WHERE table_name = 'myTable'
            AND table_schema = DATABASE();
        SET NEW.field=CONCAT("A",@new_field);
    END;
    

    【讨论】:

    • 小心并发问题。
    猜你喜欢
    • 2013-05-21
    • 2010-12-31
    • 1970-01-01
    • 2011-02-24
    • 2011-09-11
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多