MySQL LAST_INSERT_ID() 与 INSERT INTO tablea SELECT FROM tableb

Posted

技术标签:

【中文标题】MySQL LAST_INSERT_ID() 与 INSERT INTO tablea SELECT FROM tableb【英文标题】:MySQL LAST_INSERT_ID() with INSERT INTO tablea SELECT FROM tableb 【发布时间】:2014-04-10 17:38:02 【问题描述】:

是否可以使用 target 表中的 LAST_INSERT_ID 更新 source 表?

INSERT INTO `target` SELECT `a`, `b` FROM `source`

target 表有一个自动递增键 id,我想将其存储在 source 表中以供进一步使用。

如果可以这样的话,我会节省很多计算能力:)

【问题讨论】:

【参考方案1】:

执行后立即:

INSERT INTO `target` SELECT `a`, `b` FROM `source`

调用source 表的更新如下:

UPDATE `source` 
SET field_name = LAST_INSERT_ID() 
WHERE col_name_x = some_value_or_expression

更改列名和where条件,然后执行。

【讨论】:

这仅适用于一个条目,UPDATE 将第一个生成的 id 写入所有条目,但我需要为每个条目提供正确的 id。 Insert 总是生成一个 id。因此,对于每个唯一插入,您必须使用该特定 ID 来仅更新其相关数据。 LAST_INSERT_ID() 仅给出最新插入的 id。如果我认为正确的话,要更新多条记录,您还应该有多个插入和触发器。

以上是关于MySQL LAST_INSERT_ID() 与 INSERT INTO tablea SELECT FROM tableb的主要内容,如果未能解决你的问题,请参考以下文章

MySQL :LAST_INSERT_ID()函数总结

LAST_INSERT_ID() MySQL

LAST_INSERT_ID() MySQL

转 mysql中的LAST_INSERT_ID()分析

Mysql 存储过程返回 LAST_INSERT_ID 为零

MySQL 从存储过程中检索 last_insert_id