我有很多表“共享”一个自动递增的主键 - 这是通过插入触发器实现的,如下所示:
FOR EACH ROW
BEGIN
INSERT INTO master (time) VALUES (NOW());
SET NEW.id = LAST_INSERT_ID();
END
这会为刚刚插入的行生成PK。但是,这确实会产生一个我似乎无法弄清楚ID是什么的问题。 last_insert_id显然没有返回任何内容,因为上面的语句没有在被认为是“当前连接”的地方执行。
有没有办法在没有自动递增主键的情况下访问连接上最近插入的行?
更新:作为临时(?)措施,我删除了触发器,现在通过在模型中插入master
来生成ID。看起来如果我能以某种方式返回触发器设置的值会更好。
答案 0 :(得分:1)
文档确实说,“对于更改[LAST_INSERT_ID]值的存储函数和触发器,当函数或触发器结束时,将恢复该值,因此后续语句不会看到更改的值。”
尝试一个存储过程,它可以执行两个INSERTS并返回分配的ID。
或者,放弃“Oracle方式”,喝MySql Kool-Aid,只需在表格中使用自动递增ID。