是否可以只使用一个查询向表中插入一个条目,其中一个列需要使用条目的ID
示例表模式:
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
答案 0 :(得分: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表上是原子的,因此它要么成功要么完全失败。你对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.');
答案 1 :(得分:0)