我需要执行这个查询:
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.我需要增加这个而不插入新记录,我需要一个线程安全的查询.
你不需要变量.你可以使用一个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
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |