使用自动递增的 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.');
是否可以仅使用一个查询向 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.');