SQLIte文法命令

來源:互聯網
上載者:User

標籤:使用   strong   ar   代碼   演算法   sql   on   table   

[DecID] INTEGER(16) NOT NULL PRIMARY KEY ON CONFLICT FAIL, 

ON CONFLICT子句不是獨立的SQL命令。這是一條可以出現在許多其他SQL命令中的非標準的子句。由於它並不是標準的SQL語言,這裡單獨介紹它。

ON CONFLICT子句的文法在如上的CREATE TABLE命令中示出。對於INSERT和UPDATE,關鍵詞"ON CONFLICT"由"OR"替代,這樣文法顯得自然。例如,不用寫"INSERT ON CONFLICT IGNORE"而是"INSERT OR IGNORE".二者表示相同的意思。

ON CONFLICT子句定義瞭解決約束衝突的演算法。有五個選擇:ROLLBACK, ABORT, FAIL, IGNORE, 和REPLACE.預設方案是ABORT.選項含義如下:

ROLLBACK

當發生約束衝突,立即ROLLBACK,即結束當前交易處理,命令中止並返回SQLITE_CONSTRAINT代碼。若當前無活動事務(除了每一條命令建立的預設事務以外),則該演算法與ABORT相同。

ABORT

當發生約束衝突,命令收回已經引起的改變並中止返回SQLITE_CONSTRAINT。但由於不執行ROLLBACK,所以前面的命令產生的改變將予以保留。預設採用這一行為。

FAIL

當發生約束衝突,命令中止返回SQLITE_CONSTRAINT。但遇到衝突之前的所有改變將被保留。例如,若一條UPDATE語句在100行遇到衝突100th,前99行的改變將被保留,而對100行或以後的改變將不會發生。

IGNORE

當發生約束衝突,發生衝突的行將不會被插入或改變。但命令將照常執行。在衝突行之前或之後的行將被正常的插入和改變,且不返回錯誤資訊。

REPLACE

當發生UNIQUE約束衝突,先存在的,導致衝突的行在更改或插入發生衝突的行之前被刪除。這樣,更改和插入總是被執行。命令照常執行且不返回錯誤資訊。當發生NOT NULL約束衝突,導致衝突的NULL值會被欄位預設值取代。若欄位無預設值,執行ABORT演算法。

當衝突應對策略為滿足約束而刪除行時,它不會調用刪除觸發器。但在新版中這一特性可能被改變。

INSERT或UPDATE的OR子句定義的演算法會覆蓋CREATE TABLE所定義的。ABORT演算法將在沒有定義任何演算法時預設使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.