在查询中检索和使用自动增量值

时间:2013-05-08 12:43:08

标签: mysql last-insert-id

我的问题涉及在查询中检索和使用自动增量值

我有三个表,tab1,tab2和tab3。

tab1与tab3 有一对一的关系(非TNF我知道,但由于时间问题需要)

tab2与tab3有多对一的关系。

过去,当tab1和tab2之间存在一对一的关系时,tab3 DID没有条目。我想在tab3中创建缺少的记录。 tab1和tab2包含外键字段tab3_id。

基于tab1和tab2中col2的公共值,(实际上并不是那么简单但是会针对这个问题)我可以使用

在tab3中轻松创建记录
INSERT INTO tab3 (tab1_id, tab1_value, tab2_id, tab2_value) 
   SELECT
     tab1.col1 AS tab1_id, 
     tab1.col2 AS tab1_value,
     tab2.col1 AS tab2_id, 
     tab2.col2 AS tab2_value
     FROM  `tab2` 
     INNER JOIN tab1 
     ON tab1.col2 = tab2.col2

(为简单起见,我省略了检查以确保tab3中还没有链接记录)

但我不知道如何捕获tab3的主键(id)的自动递增值以更新tab1和tab2。我已经搜索了MYSQL文档,Stack Overflow和更广泛的google搜索,但一无所获。

实际上是否可以在上面的某处插入更新语句并捕获LAST_INSERT_ID()并在更新中使用它。

1 个答案:

答案 0 :(得分:0)

我认为唯一的方法是在开头插入一个占位符行,然后将该行与其他更新一起更新

insert into tab3 set tab3_id = null;
set @tab3id = (select last_insert_id();)

update tab3,
    tab2 
    inner join tab1 on tab1.col2 = tab2.col2 
    set tab3.tab1_id = tab1.col1, tab3.tab1_value=...
    , tab1.tab3_id = @tab3id
    where 
   tab3.id = @tab3id
;