两个查询之间的mysql变量

Adm*_*ian 1 mysql

我需要执行这个查询:

SELECT MAX(col1) FROM table1;
INSERT INTO table1 (col1) VALUES (@someting);
Run Code Online (Sandbox Code Playgroud)

@something在哪里MAX(col1) + 1.你能帮我写一下查询吗?我需要查询也使用NULL值......我想我需要一个CAST.

这是一个像桌子一样的drupal.col0是AUTO_INCREMENT,但col1不能出于很多原因.

col0是主键,auto_increment处于活动状态.但我使用vid作为版本ID.我需要增加这个而不插入新记录,我需要一个线程安全的查询.

Mic*_*ski 6

你不需要变量.你可以使用一个INSERT INTO ... SELECT声明:

INSERT INTO table1 (col1)
  SELECT MAX(col1) + 1 FROM table1
Run Code Online (Sandbox Code Playgroud)

如果你需要通过返回1来工作,如果MAX(col1)NULL,使用a COALESCE():

INSERT INTO table1 (col1)
  SELECT COLAESCE(MAX(col1) + 1, 1) FROM table1
Run Code Online (Sandbox Code Playgroud)

注意:如评论中所述,如果您尝试创建递增列,请不要这样做.使用适当的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
Run Code Online (Sandbox Code Playgroud)

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

vid INT NOT NULL PRIMARY KEY AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)

使用上述内容,没有必要这样做 MAX(vid) + 1