两个查询之间的mysql变量

时间:2012-05-15 18:13:25

标签: mysql

我需要执行此查询:

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。我需要增加这个而不插入新记录,我需要一个线程安全的查询。

1 个答案:

答案 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