ON CONFLICT子句

转载 2012年03月26日 18:43:31
 
 
 
 
 
 

ON CONFLICT子句

conflict-clause ::= ON CONFLICT conflict-algorithm
conflict-algorithm ::= ROLLBACK | ABORT | FAIL | IGNORE | REPLACE

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算法将在没有定义任何算法时缺省使用。

相关文章推荐

SQLite on conflict子句

conflict-clause ::= ON CONFLICT conflict-algorithm conflict-algorithm ::= ROLLBACK | ABORT | FAIL | ...

在安卓中使用ON CONFLICT REPLACE同步数据到SQLITE

最近我开发的一个功能需要从服务端获取json同步到本地的sqlite数据库,然后通知UI更新(Sqlbrite ftw)。这块的数据有一个字段叫isRead,当它为true的时候表示用户在UI上删除了...
  • daditao
  • daditao
  • 2016年06月15日 10:29
  • 624

Why "INSERT ... ON CONFLICT DO NOTHING/UPDATE" Good for performance

PostgreSQL 9.5 新增了存在则更新或啥也不干的原子操作。 这个特性有什么好处呢? 如果你的应用程序不做保护,直接插入,可能会导致大量的违反唯一约束的错误,这种错误除了会写数据库日志,还会带...

SQLite语法 ON CONFLICT

ON CONFLICT子句 conflict-clause ::= ON CONFLICT conflict-algorithm conflict-algorithm ::=...
  • qjbagu
  • qjbagu
  • 2011年12月02日 09:51
  • 1549

当心外部连接中的ON子句

在SQL tuning中,不良写法导致SQL执行效率比比皆是。最近的SQL tuning中一个外部连接写法不当导致过SQL执行时间超过15分钟左右此即 为一例。通过修正该SQL的写法之后,过高的逻辑...

OCP-1Z0-051 第123题 JOIN中的USING子句,ON子句

一、原题 View the Exhibits and examine the structures of the PRODUCTS, SALES, and CUSTOMERS tables. Yo...

hdu 4115 Eliminate the Conflict

题意:两个人玩石头剪刀布,其中一个人知道另一个人会出什么,因此这个人给另一个人提出了一些限制:A、B、K,如果K==0,表示第A局和第B局这两局这个人出的东西必须一样,K==1,表示不一样。给出第一个...
  • qian99
  • qian99
  • 2013年08月27日 18:02
  • 559

conflict miss 和 capacity miss

在Hennessy和Patterson的经典教材《软硬件接口》《量化研究方法》中,介绍了3C模型。但对冲突缺失的定义,却含混不清;从网上搜到的答案也是各执一词。 终于在1990年DEC公司实验室的一篇...

HDU 4115 Eliminate the Conflict 2-sat

#include #include #include #include #include #include #include #include using namespace std; const i...

Aborting commit: 'XXXXXXXX'remains in conflict错误(转)

今天在提交项目文件到本地SVN时提示错误如下: 过期:”global.php“在事务”21-1“, You have to update your working copy first. 运行...
  • xiunai78
  • xiunai78
  • 2011年02月23日 14:56
  • 31396
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ON CONFLICT子句
举报原因:
原因补充:

(最多只允许输入30个字)