使用自动递增的 ID 作为值的一部分向其 table 插入一个条目

Inserting an entry to its table using the auto incremented ID as part of the value

是否可以仅使用一个查询向 table 插入一个条目,其中一列需要使用条目的 ID

示例table 架构:

tbl_post:
 col_id: (auto-increment)
 title: string
 body: string
 guid: string

示例查询:

INSERT INTO tbl_post(title, body, guid)
VALUES("sample title", "sample body", CONCAT("http://site/?id=", col_id))

查询结果:

col_id | title        | body        | guid
-------+--------------+-------------+--------------
1      | sample title | sample body | http://site/?id=1

您可以使用 Max Id + 1 来做到这一点。

也许这个话题能帮到你。

php mysql insert (max(id)+1)

很遗憾,这是不可能的;您不能使用自动增量值来填充单个 INSERT.

中的其他列

通常最好的选择是 运行 执行 INSERT 后跟 UPDATE:

的单个事务
START TRANSACTION;

INSERT INTO tbl_post(title, body)
VALUES("sample title", "sample body");

UPDATE tbl_post SET guid=CONCAT("http://site/?id=", col_id) 
 WHERE col_id=LAST_INSERT_ID();

COMMIT;

这保证在 InnoDB 上是原子的 table 所以它要么成功要么完全失败。你对 MyISAM 不走运,因为它不支持事务。

正如@Drew 在评论中指出的那样,您可以将其滚动到 stored procedure:

CREATE PROCEDURE insupd (ttitle VARCHAR(32), tbody VARCHAR(16))
BEGIN
 START TRANSACTION;
 INSERT INTO tbl_post(title, body)
  VALUES(ttitle, tbody);

 UPDATE tbl_post SET guid=CONCAT("http://site/?id=", col_id) 
  WHERE col_id=LAST_INSERT_ID();
 COMMIT;
END;

完成后,您只需使用以下命令插入数据:

CALL insupd('yourfancytitle','blah.');