SQLite “INSERT OR REPLACE INTO” vs. “UPDATE … WHERE”

后端 未结 4 1926
暖寄归人
暖寄归人 2020-11-29 22:24

I\'ve never seen the syntax INSERT OR REPLACE INTO names (id, name) VALUES (1, \"John\") used in SQL before, and I was wondering why it\'s better than UPD

相关标签:
4条回答
  • 2020-11-29 22:33
    REPLACE INTO table(column_list) VALUES(value_list);
    

    is a shorter form of

    INSERT OR REPLACE INTO table(column_list) VALUES(value_list);
    

    For REPLACE to execute correctly your table structure must have unique rows, whether a simple primary key or a unique index.

    REPLACE deletes, then INSERTs the record and will cause an INSERT Trigger to execute if you have them setup. If you have a trigger on INSERT, you may encounter issues.


    This is a work around.. not checked the speed..

    INSERT OR IGNORE INTO table (column_list) VALUES(value_list);
    

    followed by

    UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'
    

    This method allows a replace to occur without causing a trigger.

    0 讨论(0)
  • 2020-11-29 22:39

    UPDATE will not do anything if the row does not exist.

    Where as the INSERT OR REPLACE would insert if the row does not exist, or replace the values if it does.

    0 讨论(0)
  • 2020-11-29 22:52

    I'm currently working on such a statement and figured out another fact to notice: INSERT OR REPLACE will replace any values not supplied in the statement. For instance if your table contains a column "lastname" which you didn't supply a value for, INSERT OR REPLACE will nullify the "lastname" if possible (constraints allow it) or fail.

    0 讨论(0)
  • 2020-11-29 22:52

    The insert or replace query would insert a new record if id=1 does not already exist.

    The update query would only oudate id=1 if it aready exist, it would not create a new record if it didn't exist.

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