gpt4 book ai didi

MySQL 检索 SELECT 检索的 INSERT 参数

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:07 25 4
gpt4 key购买 nike

如果我有这样的表结构:

CREATE TABLE a (
aid INT AUTO_INCREMENT,
acol1 INT,
acol2 INT,
PRIMARY KEY(aid);
)

CREATE TABLE b (
bid INT AUTO_INCREMENT,
bcol INT,
PRIMARY KEY(bid);
)

并运行语句:

`INSERT INTO a SET acol1 = (SELECT MAX(acol1) + 1 as newMax FROM a WHERE id = ?)

执行查询后,我是否可以检索 newMax 的值?我在 PHP 中寻找类似于 last_insert_id() 的东西,但用于查询中的临时值。

显然,如果可能的话,我正在尝试不再查询数据库。

编辑:

实际情况:

CREATE TABLE group (
group_id INT AUTO_INCREMENT,
PRIMARY KEY(group_id)
) ENGINE = MyISAM;

CREATE TABLE item (
group_refid INT, --references group.group_id
group_pos INT, --represents this item's position in its group
text VARCHAR(4096), --data
PRIMARY KEY(group_refid, group_pos)
) ENGINE = MyISAM;

所以问题是,当我向组中添加新项目时,我需要制作它

group_pos = MAX(group_pos) WHERE group_refid = ?

这需要一个类似这样的查询:

INSERT INTO item (group_refid, group_pos) SET group_refid = 1, group_pos = (SELECT MAX(group_pos) + 1 FROM item WHERE group_refid = 1);

如您所知,此查询不起作用。可能还没有针对特定 group_id 的项目条目会增加复杂性。

我正在尝试将所有这些都放入一个原子语句中以防止竞争条件。

最佳答案

INSERT INTO item (group_refid,group_pos) 
SELECT 1, (
SELECT IFNULL(MAX(group_pos),0) + 1
FROM item
WHERE group_refid=1
);

但是,如果我们显式地讨论 MyISAM 表,而不是另一个引擎,这会起作用:

mysql> CREATE TABLE items (group_refid INT, group_pos INT AUTO_INCREMENT, PRIMARY KEY(group_refid,group_pos)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.12 sec)

mysql> INSERT INTO items (group_refid) VALUES (1),(2),(1),(1),(2),(4),(2),(1);
Query OK, 8 rows affected (0.02 sec)
Records: 8 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM items ORDER BY group_refid, group_pos;
+-------------+-----------+
| group_refid | group_pos |
+-------------+-----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 4 | 1 |
+-------------+-----------+

但是,PK 中第二列的 AUTO_INCREMENT 不可移植到另一个数据库引擎

关于MySQL 检索 SELECT 检索的 INSERT 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com