【问题标题】:On mysql inserting statement, how can I insert current generated id as foreign key?在 mysql 插入语句中,如何插入当前生成的 id 作为外键?
【发布时间】:2016-10-09 09:36:53
【问题描述】:

表 A [idPK,name,idFK]

insert into A (name,idFK) values ("name",<this row generated id>)

已经尝试过 但错误仍然存​​在:“#1093 - You can't specify target table 'A' for update in FROM 子句”。

在插入过程中,需要知道对应的id是什么,作为外键插入。在插入查询中插入的“LAST_INSERT_ID()”也总是返回零。没用。

这行得通,但我需要做同样的事情,但在此格式的一个查询中: [插入A(name,idFK)值("name",)]

这可行,但我需要以前的格式。 SELECT @id := coalesce((max(id)+1),1) FROM a; 插入 进入 a(name, idFK) 值('AAA',@id)

就像有人说的那样,先插入然后再换 FK。我做不到。 插入(名称)值(“nameStr”); 错误:#1452 - 无法添加或更新子行:外键约束失败(test.a,CONSTRAINT idid 外键(idFK)参考aid)删除级联更新级联)

【问题讨论】:

标签: php mysql foreign-keys


【解决方案1】:

您可以使用LAST_INSERT_ID() 函数获取在最近的INSERT 中生成的ID。所以分两步完成:

INSERT INTO A(name)
VALUES ("name");

UPDATE A
SET idFK = id
WHERE id = LAST_INSERT_ID();

但如果你想一步到位,你可以这样做:

INSERT INTO A(name, idFK)
SELECT "name", MAX(id) + 1
FROM A

但是,这假设自动增量总是以 1 为单位。有时它会跳过数字。

【讨论】:

  • 我找到了这种函数方式,但是有一种方法可以做到这一点,只需一个查询? SELECT @id := coalesce((max(id)+1),1) FROM a;插入a(name, idFK) 值('AAA',@id)
  • 如果您只是在同一个 MySQL 会话中插入该行,我的答案应该有效。
  • 也许我不明白你在问什么。为什么要在 MAX(id) 上加 1?这将使外键指向一个不存在的 ID,但外键必须指向一个已经存在的 ID。
  • 在插入新行时,会生成一个新的 id,我只想插入这个具体的 id 作为同一行的外键。结果会像 id=idFK。
  • 为什么不先插入新行,然后将idFK更新为给定的ID?
猜你喜欢
  • 2017-10-05
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
相关资源
最近更新 更多