我需要执行此查询:
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。我需要增加这个而不插入新记录,我需要一个线程安全的查询。
答案 0 :(得分:6)
您不需要变量。您只需使用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