UPDATE syntax in SQLite

前端 未结 6 808
时光取名叫无心
时光取名叫无心 2020-12-31 02:47

I need to know if I can do this in an UPDATE statement:

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


        
相关标签:
6条回答
  • 2020-12-31 03:22

    If you want to update a record, it should look like this. You should very rarely want to update without a WHERE condition.

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

    SQL Fiddle

    0 讨论(0)
  • 2020-12-31 03:27

    There is a (standard SQL) syntax that is similar to what you propose but as far as I know, only Postgres has implemented it:

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

    Tested (for the infidels) in: SQL-Fiddle


    This also works in Postgres:

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

    This works in Postgres and SQL-Server:

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

    and as @JackDouglas commented, this works in Oracle:

    UPDATE users
    SET  (field1, field2, field3)
       = ( SELECT 'value1', 'value2', 'value3' FROM dual ) 
    WHERE condition ;
    
    0 讨论(0)
  • 2020-12-31 03:29

    No, there is no such syntax in sqlite (postgress seems to have such thing implemented) - but better use:

    UPDATE users SET firstname = 'Joe', lastname = 'value2', age = 50 WHERE id=12;
    
    0 讨论(0)
  • 2020-12-31 03:36

    What you posted is not the correct syntax for UPDATE. To UPDATE your syntax is:

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

    You will want to add a WHERE clause or this will UPDATE all records.

    0 讨论(0)
  • 2020-12-31 03:37

    Try

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

    etc...

    You can find the official docs here.

    W3Schools also has a useful page:

    SQL UPDATE Statement

    The UPDATE statement is used to update records in a table.

    SQL UPDATE Syntax

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

    Note: Notice the WHERE clause in the UPDATE syntax. The WHERE clause specifies which record or records that should be updated. If you omit the WHERE clause, all records will be updated!

    EDIT: since you seem to need to create a string, the normal method to do so safely is to use prepared statements.

    Assuming Java, we already have this example on StackOverflow:

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

    In your case,

    SQLiteDatabase db = dbHelper.getWritableDatabase();
    SQLiteStatement stmt = db.compileStatement("UPDATE users SET field1=?, field2=?...");
    stmt.bindString(1, "value1");
    stmt.bindString(2, "value2");
    stmt.execute();
    
    0 讨论(0)
  • 2020-12-31 03:42

    This feature is supported starting from version 3.15.0:

    UPDATE

    An assignment in the SET clause can be a parenthesized list of column names on the left and a row value of the same size on the right.

    Syntax is as follows:

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

    db<>fiddle demo

    0 讨论(0)
提交回复
热议问题