想象一下,一個表是這樣的:插入或更新條目,但未能對違反唯一約束
+-----+-------+
| id | value |
+-----+-------+
| id1 | val1 |
| id2 | val2 |
+-----+-------+
而id
是PRIMARY KEY
和value
有UNIQUE
約束。
我想要做的是使用查詢插入或更新基於其主鍵,但失敗,如果違反唯一約束條目。
作爲一個例子,如果我嘗試插入id1, val2
,我希望查詢失敗,而插入id1, val3
應更新第一行。
然而,我在sqlite3中觀察到的是,如果我使用INSERT OR REPLACE
來插入id1, val2
它將取代兩個現有的條目。我也看了一下sqlite的ON CONFLICT
子句,但似乎沒有辦法區分UNIQUE
或PRIMARY KEY
約束違規。
有沒有辦法用sqlite做這樣的事情,或者有另一種方式來處理這種情況?
這似乎是可能的內置行爲。訣竅是用相應的衝突解決類似於'value VARCHAR(32)UNIQUE ON CONFLICT FAIL,PRIMARY KEY(Id)ON CONFLICT REPLACE'這樣的_create_表,然後使用'INSERT'命令。 –