上次插入的行信息没有自动递增PK

时间:2011-06-02 17:03:47

标签: mysql triggers

我有很多表“共享”一个自动递增的主键 - 这是通过插入触发器实现的,如下所示:

FOR EACH ROW 
    BEGIN
        INSERT INTO master (time) VALUES (NOW());
        SET NEW.id = LAST_INSERT_ID();
    END

这会为刚刚插入的行生成PK。但是,这确实会产生一个我似乎无法弄清楚ID是什么的问题。 last_insert_id显然没有返回任何内容,因为上面的语句没有在被认为是“当前连接”的地方执行。

有没有办法在没有自动递增主键的情况下访问连接上最近插入的行?

更新:作为临时(?)措施,我删除了触发器,现在通过在模型中插入master来生成ID。看起来如果我能以某种方式返回触发器设置的值会更好。

1 个答案:

答案 0 :(得分:1)

文档确实说,“对于更改[LAST_INSERT_ID]值的存储函数和触发器,当函数或触发器结束时,将恢复该值,因此后续语句不会看到更改的值。”

尝试一个存储过程,它可以执行两个INSERTS并返回分配的ID。

或者,放弃“Oracle方式”,喝MySql Kool-Aid,只需在表格中使用自动递增ID。