~ubuntu-branches/ubuntu/wily/sqlite3/wily

« back to all changes in this revision

Viewing changes to lang_conflict.html

  • Committer: Package Import Robot
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2012-06-13 21:43:48 UTC
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: package-import@ubuntu.com-20120613214348-uy14uupdeq0hh04k
Tags: upstream-3.7.13/www
Import upstream version 3.7.13, component www

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 
2
<html><head>
 
3
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 
4
<title>SQLite Query Language: ON CONFLICT clause</title>
 
5
<style type="text/css">
 
6
body {
 
7
    margin: auto;
 
8
    font-family: Verdana, sans-serif;
 
9
    padding: 8px 1%;
 
10
}
 
11
 
 
12
a { color: #044a64 }
 
13
a:visited { color: #734559 }
 
14
 
 
15
.logo { position:absolute; margin:3px; }
 
16
.tagline {
 
17
  float:right;
 
18
  text-align:right;
 
19
  font-style:italic;
 
20
  width:300px;
 
21
  margin:12px;
 
22
  margin-top:58px;
 
23
}
 
24
 
 
25
.toolbar {
 
26
  text-align: center;
 
27
  line-height: 1.6em;
 
28
  margin: 0;
 
29
  padding: 0px 8px;
 
30
}
 
31
.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
 
32
.toolbar a:visited { color: white; }
 
33
.toolbar a:hover { color: #044a64; background: white; }
 
34
 
 
35
.content    { margin: 5%; }
 
36
.content dt { font-weight:bold; }
 
37
.content dd { margin-bottom: 25px; margin-left:20%; }
 
38
.content ul { padding:0px; padding-left: 15px; margin:0px; }
 
39
 
 
40
/* rounded corners */
 
41
.se  { background: url(images/se.gif) 100% 100% no-repeat #044a64}
 
42
.sw  { background: url(images/sw.gif) 0% 100% no-repeat }
 
43
.ne  { background: url(images/ne.gif) 100% 0% no-repeat }
 
44
.nw  { background: url(images/nw.gif) 0% 0% no-repeat }
 
45
 
 
46
/* Things for "fancyformat" documents start here. */
 
47
.fancy img+p {font-style:italic}
 
48
.fancy .codeblock i { color: darkblue; }
 
49
.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
 
50
.fancy h2 { margin-left: 10px }
 
51
.fancy h3 { margin-left: 20px }
 
52
.fancy h4 { margin-left: 30px }
 
53
.fancy th {white-space:nowrap;text-align:left;border-bottom:solid 1px #444}
 
54
.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
 
55
.fancy #toc a        { color: darkblue ; text-decoration: none }
 
56
.fancy .todo         { color: #AA3333 ; font-style : italic }
 
57
.fancy .todo:before  { content: 'TODO:' }
 
58
.fancy p.todo        { border: solid #AA3333 1px; padding: 1ex }
 
59
.fancy img { display:block; }
 
60
.fancy :link:hover, .fancy :visited:hover { background: wheat }
 
61
.fancy p,.fancy ul,.fancy ol { margin: 1em 5ex }
 
62
.fancy li p { margin: 1em 0 }
 
63
/* End of "fancyformat" specific rules. */
 
64
 
 
65
</style>
 
66
  
 
67
</head>
 
68
<body>
 
69
<div><!-- container div to satisfy validator -->
 
70
 
 
71
<a href="index.html">
 
72
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite Logo"
 
73
 border="0"></a>
 
74
<div><!-- IE hack to prevent disappearing logo--></div>
 
75
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>
 
76
 
 
77
<table width=100% style="clear:both"><tr><td>
 
78
  <div class="se"><div class="sw"><div class="ne"><div class="nw">
 
79
  <table width=100% style="padding:0;margin:0;cell-spacing:0"><tr>
 
80
  <td width=100%>
 
81
  <div class="toolbar">
 
82
    <a href="about.html">About</a>
 
83
    <a href="sitemap.html">Sitemap</a>
 
84
    <a href="docs.html">Documentation</a>
 
85
    <a href="download.html">Download</a>
 
86
    <a href="copyright.html">License</a>
 
87
    <a href="news.html">News</a>
 
88
    <a href="support.html">Support</a>
 
89
  </div>
 
90
<script>
 
91
  gMsg = "Search SQLite Docs..."
 
92
  function entersearch() {
 
93
    var q = document.getElementById("q");
 
94
    if( q.value == gMsg ) { q.value = "" }
 
95
    q.style.color = "black"
 
96
    q.style.fontStyle = "normal"
 
97
  }
 
98
  function leavesearch() {
 
99
    var q = document.getElementById("q");
 
100
    if( q.value == "" ) { 
 
101
      q.value = gMsg
 
102
      q.style.color = "#044a64"
 
103
      q.style.fontStyle = "italic"
 
104
    }
 
105
  }
 
106
</script>
 
107
<td>
 
108
    <div style="padding:0 1em 0px 0;white-space:nowrap">
 
109
    <form name=f method="GET" action="http://www.sqlite.org/search">
 
110
      <input id=q name=q type=text
 
111
       onfocus="entersearch()" onblur="leavesearch()" style="width:24ex;padding:1px 1ex; border:solid white 1px; font-size:0.9em ; font-style:italic;color:#044a64;" value="Search SQLite Docs...">
 
112
      <input type=submit value="Go" style="border:solid white 1px;background-color:#044a64;color:white;font-size:0.9em;padding:0 1ex">
 
113
    </form>
 
114
    </div>
 
115
  </table>
 
116
</div></div></div></div>
 
117
</td></tr></table>
 
118
<div class=startsearch></div>
 
119
  
 
120
<h1 align="center">SQL As Understood By SQLite</h1><p><a href="lang.html">[Top]</a></p><h2>ON CONFLICT clause</h2><h4><a href="syntaxdiagrams.html#conflict-clause">conflict-clause:</a></h4><blockquote> <img alt="syntax diagram conflict-clause" src="images/syntax/conflict-clause.gif"></img> </blockquote>
 
121
 
 
122
 
 
123
<p>The ON CONFLICT clause is not a separate SQL command.  It is a
 
124
non-standard clause that can appear in many other SQL commands.
 
125
It is given its own section in this document because it is not
 
126
part of standard SQL and therefore might not be familiar.</p>
 
127
 
 
128
<p>The syntax for the ON CONFLICT clause is as shown above for
 
129
the CREATE TABLE command.  For the INSERT and
 
130
UPDATE commands, the keywords "ON CONFLICT" are replaced by "OR" so that
 
131
the syntax reads more naturally.  For example, instead of
 
132
"INSERT ON CONFLICT IGNORE" we have "INSERT OR IGNORE".
 
133
The keywords change but the meaning of the clause is the same
 
134
either way.</p>
 
135
 
 
136
<p>The ON CONFLICT clause applies to UNIQUE and NOT NULL
 
137
constraints (and to PRIMARY KEY constraints which for the purposes 
 
138
of this section are the same thing as UNIQUE constraints).
 
139
The ON CONFLICT algorithm does not
 
140
apply to <a href="foreignkeys.html">FOREIGN KEY constraints</a>.
 
141
There are five conflict resolution algorithm choices:
 
142
ROLLBACK, ABORT, FAIL, IGNORE, and REPLACE.
 
143
The default conflict resolution algorithm is ABORT.  This
 
144
is what they mean:</p>
 
145
 
 
146
<dl>
 
147
<dt><b>ROLLBACK</b></dt>
 
148
<dd><p> When an applicable constraint violation occurs, the ROLLBACK
 
149
resolution algorithm aborts the current SQL statement with
 
150
an SQLITE_CONSTRAINT error and rolls back the current transaction.
 
151
If no transaction is
 
152
active (other than the implied transaction that is created on every
 
153
command) then the ROLLBACK resolution algorithm works the same as the
 
154
ABORT algorithm.</p></dd>
 
155
 
 
156
<dt><b>ABORT</b></dt>
 
157
<dd><p> When an applicable constraint violation occurs, the ABORT
 
158
resolution algorithm aborts the current SQL statement
 
159
with an SQLITE_CONSTRAIT error and backs out any changes
 
160
made by the current SQL statement; but changes caused
 
161
by prior SQL statements within the same transaction are preserved and the
 
162
transaction remains active.
 
163
This is the default behavior and the behavior proscribed the SQL
 
164
standard.</p></dd>
 
165
 
 
166
<dt><b>FAIL</b></dt>
 
167
<dd><p> When an applicable constraint violation occurs, the FAIL
 
168
resolution algorithm aborts the current SQL statement with an
 
169
SQLITE_CONSTRAINT error.  But the FAIL resolution does not
 
170
back out prior changes of the SQL statement that failed nor does
 
171
it end the transaction.
 
172
For example, if an UPDATE
 
173
statement encountered a constraint violation on the 100th row that
 
174
it attempts to update, then the first 99 row changes are preserved
 
175
but changes to rows 100 and beyond never occur.</p></dd>
 
176
 
 
177
<dt><b>IGNORE</b></dt>
 
178
<dd><p> When an applicable constraint violation occurs, 
 
179
the IGNORE resolution algorithm skips the one row that contains
 
180
the constraint violation and continues processing subsequent rows
 
181
of the SQL statement as if nothing went wrong.
 
182
Other rows before and after the row that
 
183
contained the constraint violation are inserted or updated
 
184
normally. No error is returned when the IGNORE conflict resolution
 
185
algorithm is used.</p></dd>
 
186
 
 
187
<dt><b>REPLACE</b></dt>
 
188
<dd><p> When a UNIQUE constraint violation occurs, the REPLACE algorithm
 
189
deletes pre-existing rows that are causing the constraint violation
 
190
prior to inserting or updating the current row and the command continues 
 
191
executing normally.
 
192
If a NOT NULL constraint violation occurs, the REPLACE conflict
 
193
resolution replaces the NULL value with
 
194
he default value for that column, or if the column has no default
 
195
value, then the ABORT algorithm is used.
 
196
If a CHECK constraint violation occurs, the REPLACE conflict resolution
 
197
algorithm always works like ABORT.</p>
 
198
 
 
199
<p>When the REPLACE conflict resolution strategy deletes rows in order to
 
200
satisfy a constraint, <a href="lang_createtrigger.html">delete triggers</a> fire if and only if
 
201
<a href="pragma.html#pragma_recursive_triggers">recursive triggers</a> are enabled.</p>
 
202
 
 
203
<p>The <a href="c3ref/update_hook.html">update hook</a> is not invoked for rows that
 
204
are deleted by the REPLACE conflict resolution strategy.  Nor does
 
205
REPLACE increment the <a href="c3ref/changes.html">change counter</a>.
 
206
The exceptional behaviors defined in this paragraph might change 
 
207
in a future release.</p>
 
208
</dl>
 
209
 
 
210
<p>The algorithm specified in the OR clause of an INSERT or UPDATE
 
211
overrides any algorithm specified in a CREATE TABLE.
 
212
If no algorithm is specified anywhere, the ABORT algorithm is used.</p>
 
213
 
 
214