2011-05-24 76 views

回答

6

的MySQL:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] 
    [INTO] tbl_name [(col_name,...)] 
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),... 
    [ ON DUPLICATE KEY UPDATE 
     col_name=expr 
     [, col_name=expr] ... ] 

SQLite的,你可以使用ON CONFLICT替換

onconflict - 見http://www.sqlite.org/lang_conflict.html

REPLACE當一個UNIQUE限制 衝突發生時,更換 算法刪除預先存在的行 導致約束插入之前違規或更新當前行的 ,並且 命令繼續正常執行。 如果違反NOT NULL約束 發生時,他與該列, 默認值或者如果該列沒有缺省值,則使用 中止算法REPLACE衝突 決議替代NULL值 。如果發生了一個 CHECK約束衝突, 替換衝突解決算法 總是像ABORT一樣工作。

當REPLACE衝突解決 策略刪除行,以滿足 約束,當且僅當遞歸觸發器 啓用刪除觸發器 火災。

更新掛鉤不被 行調用,該行由REPLACE 衝突解決策略刪除。 REPLACE也不會增加更改計數器。 此段落中定義的例外行爲可能會在未來的版本中發生變化 。

+0

你能舉個例子嗎?也許我不明白。當它發現衝突時,它總是進行刪除 - >插入或考慮進行更新?它將在什麼時候發佈(如果是)只有更新? – StErMi 2012-01-06 17:45:41