SQLite中的UPDATE语法

时间:2012-11-20 21:03:39

标签: sql sqlite sql-update

我需要知道我是否可以在UPDATE语句中执行此操作:

UPDATE users SET ('field1', 'field2', 'field3') 
VALUES ('value1', 'value2', 'value3');

或类似的语法。我正在使用SQLite。

注意:

  

没有人理解我,我只是想知道是否可以设置单独的字段来分隔值。就是这样。

6 个答案:

答案 0 :(得分:30)

有一个(标准SQL)语法与你提出的类似,但据我所知,只有Postgres实现了它:

UPDATE users
SET  (field1, field2, field3)
   = ('value1', 'value2', 'value3') 
WHERE some_condition ;

在( SQL-Fiddle

中测试(针对异教徒)

这也适用于Postgres:

UPDATE users AS u
SET 
   (field1, field2, field3)
 = (f1, f2, f3)
FROM
  ( VALUES ('value1', 'value2', 'value3')
  ) AS  x (f1, f2, f3)
WHERE condition ;

这适用于Postgres和SQL-Server:

UPDATE users 
SET 
   field1 = f1, field2 = f2, field3 = f3
FROM
  ( VALUES ('value1', 'value2', 'value3')
  ) AS  x (f1, f2, f3)
WHERE condition ;

并且@JackDouglas评论说,这适用于Oracle:

UPDATE users
SET  (field1, field2, field3)
   = ( SELECT 'value1', 'value2', 'value3' FROM dual ) 
WHERE condition ;

答案 1 :(得分:24)

您发布的内容不是UPDATE的正确语法。要UPDATE您的语法是:

UPDATE users 
SET field1 = 'value1',
    field2 = 'value2',
    field3 =  'value3';

您需要添加WHERE条款或UPDATE所有记录。

答案 2 :(得分:10)

如果要更新记录,它应该如下所示。如果没有WHERE条件,您很少需要更新。

UPDATE users
SET field1='value1',
    field2='value2',
    field3='value3'
WHERE field1=1

SQL Fiddle

答案 3 :(得分:9)

尝试

UPDATE users SET field1='value1', field2='value2'

等...

您可以找到官方文档here

W3Schools还有一个有用的page

  

SQL UPDATE语句

     

UPDATE语句用于更新表中的记录。

     

SQL UPDATE语法

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
  

注意:请注意UPDATE语法中的WHERE子句。 WHERE子句指定应更新的记录或记录。如果省略WHERE子句,则所有记录都将更新!

编辑:因为您似乎需要创建一个字符串,所以安全地执行此操作的常用方法是使用预准备语句。

假设Java,我们已经在StackOverflow上有this example

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("SELECT * FROM Country WHERE code = ?");
stmt.bindString(1, "US");
stmt.execute();

在你的情况下,

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("UPDATE users SET field1=?, field2=?...");
stmt.bindString(1, "value1");
stmt.bindString(2, "value2");
stmt.execute();

答案 4 :(得分:1)

否,sqlite中没有这样的语法(postpost似乎实现了这种东西)-但更好的用法:

# If the value has a length and is false, then it
# must be 0 or 0.0.
if (length($aoa[$i][$j]) and ! $aoa[$i][$j]) {
    next;
}

答案 5 :(得分:0)

从版本3.15.0开始支持此功能:

UPDATE

SET子句中的赋值可以是左侧带有括号的列名称列表,右侧是具有相同大小的行值。

语法如下:

UPDATE users 
SET ("field1", "field2", "field3") = ('value1', 'value2', 'value3')
-- WHERE ...;

db<>fiddle demo