gpt4 book ai didi

两个查询之间的mysql变量

转载 作者:行者123 更新时间:2023-11-29 04:11:13 25 4
gpt4 key购买 nike

我需要执行这个查询:

SELECT MAX(col1) FROM table1;
INSERT INTO table1 (col1) VALUES (@someting);

@something 是 MAX(col1) + 1。你能帮我写查询吗?我需要查询也可以使用 NULL 值...我想我需要一个 CAST。

这是一个类似于 drupal 的表。 col0 是 AUTO_INCREMENT,但 col1 不能,原因有很多。

col0 是主键,auto_increment 是活跃的。但我使用 vid 作为版本控制 ID。我需要在不插入新记录的情况下增加它,我需要一个线程安全的查询。

最佳答案

为此您不需要变量。您可以只使用 INSERT INTO ... SELECT 语句:

INSERT INTO table1 (col1)
SELECT MAX(col1) + 1 FROM table1

如果您需要通过在 MAX(col1)NULL 时返回 1 来工作,请使用 COALESCE():

INSERT INTO table1 (col1)
SELECT COLAESCE(MAX(col1) + 1, 1) FROM table1

注意:如评论中所述,如果您尝试制作递增列,请不要这样做。使用适当的 AUTO_INCREMENT 代替,这样可以避免竞争条件。

评论后更新:

您在评论中的内容与您的问题有很大不同。您的语法无效,不应包含 VALUES() 关键字和括号组。相反,这样做:

INSERT INTO node (vid, type, uid, title, created, changed, status, promote, sticky)
SELECT
COALESCE(MAX(vid) + 1, 1),
'node',
1,
'title',
1,1,1,1,1
FROM node

vid 的正确自动递增列定义如下所示,假设它是主键:

vid INT NOT NULL PRIMARY KEY AUTO_INCREMENT

使用上面的,就不需要做 MAX(vid) + 1

关于两个查询之间的mysql变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606493/

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