ON CONFLICT子句

ON CONFLICT子句,第1张

概述转至:http://www.sqlite.com.cn/MySqlite/5/72.htmlSQLite的SQL语法 ON CONFLICT子句 conflict-clause ::= ON CONFLICT conflict-algorithm conflict-algorithm ::= ROLLBACK | ABORT | FAIL | IGNORE | REPLACE ON CONFLIC

转至:http://www.sqlite.com.cn/MySqlite/5/72.htmlsqlite的sql语法

ONCONFliCT子句
conflict-clause::= ONCONFliCTconflict-algorithm
conflict-algorithm::= RolLBACK|ABORT|FAIL|IGnorE|REPLACE

ONCONFliCT子句不是独立的sql命令。这是一条可以出现在许多其他sql命令中的非标准的子句。由于它并不是标准的sql语言,这里单独介绍它。

ONCONFliCT子句的语法在如上的CREATEtable命令中示出。对于INSERT和UPDATE,关键词"ONCONFliCT"由"OR"替代,这样语法显得自然。例如,不用写"INSERTONCONFliCTIGnorE"而是"INSERTORIGnorE".二者表示相同的意思。

ONCONFliCT子句定义了解决约束冲突的算法。有五个选择: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约束冲突,先存在的,导致冲突的行在更改或插入发生冲突的行之前被删除。这样,更改和插入总是被执行。命令照常执行且不返回错误信息。当发生NOTNulL约束冲突,导致冲突的NulL值会被字段缺省值取代。若字段无缺省值,执行ABORT算法。

当冲突应对策略为满足约束而删除行时,它不会调用删除触发器。但在新版中这一特性可能被改变。

INSERT或UPDATE的OR子句定义的算法会覆盖CREATEtable所定义的。ABORT算法将在没有定义任何算法时缺省使用。

总结

以上是内存溢出为你收集整理的ON CONFLICT子句全部内容,希望文章能够帮你解决ON CONFLICT子句所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存