2011-06-02 28 views
0

我有许多表格是“共享”一个自动递增的主键 - 这是通过插入时的触发器,它看起来像这样完成的:没有自动递增上次插入行信息PK

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

那么如果你没有标识符(PK),你将如何识别哪一行被插入? – 2011-06-02 18:32:52

回答

1

doc会说:“对于更改[LAST_INSERT_ID]值的存储函数和触发器,函数或触发器结束时会恢复该值,因此以下语句看不到更改的值。”

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

或者,放弃处理“Oracle方式”,喝MySql Kool-Aid,并在表上使用自动递增的id。

+0

如果您阅读原始问题,您会看到为什么我不使用自动递增ID - 自动递增ID在主表上,并由其他3个表共享。不需要插入到PHP代码中的“id generator”表中,但它的可行性与我的编辑一样。我可以尝试存储过程路由,但我的经验是有限的。 – Will 2011-06-03 01:32:39

+0

我读了你原来的问题,看到你在分享主表,甲骨文。我不相信(尽管我现在不能证实你已经编辑了它),但你没有,但是,解释你为什么做这样的事情。巨大差距。 – 2011-06-08 21:32:10