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

« back to all changes in this revision

Viewing changes to lang_delete.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: DELETE</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>DELETE</h2><h4><a href="syntaxdiagrams.html#delete-stmt">delete-stmt:</a></h4><blockquote> <img alt="syntax diagram delete-stmt" src="images/syntax/delete-stmt.gif"></img> </blockquote>
 
121
<h4><a href="syntaxdiagrams.html#qualified-table-name">qualified-table-name:</a></h4><blockquote> <img alt="syntax diagram qualified-table-name" src="images/syntax/qualified-table-name.gif"></img> </blockquote>
 
122
 
 
123
 
 
124
<p>The DELETE command removes records from the table identified by the
 
125
   <i>qualified-table-name</i>. 
 
126
 
 
127
<p>If the WHERE clause is not present, all records in the table are deleted.
 
128
   If a WHERE clause is supplied, then only those rows for which the
 
129
   result of evaluating the WHERE clause as a <a href="lang_expr.html#booleanexpr">boolean expression is true</a> are deleted.
 
130
 
 
131
<h3>Restrictions on DELETE Statements Within CREATE TRIGGER</h3>
 
132
 
 
133
<p>The following restrictions apply to DELETE statements that occur within the
 
134
   body of a <a href="lang_createtrigger.html">CREATE TRIGGER</a> statement:
 
135
 
 
136
<ul>
 
137
  <li><p>The <i>table-name</i> specified as part of a DELETE statement within
 
138
    a trigger body must be unqualified.  In other words, the
 
139
    <i>database-name</i><b>.</b> prefix on the table name is not allowed 
 
140
    within triggers. If the table to which the trigger is attached is
 
141
    not in the temp database, then DELETE statements within the trigger
 
142
    body must operate on tables within the same database as it. If the table
 
143
    to which the trigger is attached is in the TEMP database, then the
 
144
    unqualified name of the table being deleted is resolved in the same way as
 
145
    it is for a top-level statement (by searching first the TEMP database, then
 
146
    the main database, then any other databases in the order they were
 
147
    attached).
 
148
    
 
149
  <li><p>The INDEXED BY and NOT INDEXED clauses are not allowed on DELETE
 
150
    statements within triggers.</p>
 
151
 
 
152
  <li><p>The LIMIT and ORDER BY clauses (described below) are unsupported for
 
153
    DELETE statements within triggers.</p>
 
154
</ul>
 
155
 
 
156
<h3>Optional LIMIT and ORDER BY clauses</h3>
 
157
 
 
158
<p>If SQLite is compiled with the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>
 
159
compile-time option, then the syntax of the DELETE statement is
 
160
extended by the addition of optional ORDER BY and LIMIT clauses:</p>
 
161
 
 
162
<h4><a href="syntaxdiagrams.html#delete-stmt-limited">delete-stmt-limited:</a></h4><blockquote> <img alt="syntax diagram delete-stmt-limited" src="images/syntax/delete-stmt-limited.gif"></img> </blockquote>
 
163
 
 
164
 
 
165
<p>If a DELETE statement has a LIMIT clause, the maximum number of rows that
 
166
will be deleted is found by evaluating the accompanying expression and casting
 
167
it to an integer value. If the result of the evaluating the LIMIT clause
 
168
cannot be losslessly converted to an integer value, it is an error. A 
 
169
negative LIMIT value is interpreted as "no limit". If the DELETE statement 
 
170
also has an OFFSET clause, then it is similarly evaluated and cast to an
 
171
integer value. Again, it is an error if the value cannot be losslessly
 
172
converted to an integer. If there is no OFFSET clause, or the calculated
 
173
integer value is negative, the effective OFFSET value is zero.
 
174
 
 
175
<p>If the DELETE statement has an ORDER BY clause, then all rows that would 
 
176
be deleted in the absence of the LIMIT clause are sorted according to the 
 
177
ORDER BY. The first <i>M</i> rows, where <i>M</i> is the value found by
 
178
evaluating the OFFSET clause expression, are skipped, and the following 
 
179
<i>N</i>, where <i>N</i> is the value of the LIMIT expression, are deleted.
 
180
If there are less than <i>N</i> rows remaining after taking the OFFSET clause
 
181
into account, or if the LIMIT clause evaluated to a negative value, then all
 
182
remaining rows are deleted.
 
183
 
 
184
<p>If the DELETE statement has no ORDER BY clause, then all rows that
 
185
would be deleted in the absence of the LIMIT clause are assembled in an
 
186
arbitrary order before applying the LIMIT and OFFSET clauses to determine 
 
187
the subset that are actually deleted.
 
188
 
 
189
<p>The ORDER BY clause on a DELETE statement is used only to determine which
 
190
rows fall within the LIMIT. The order in which rows are deleted is arbitrary
 
191
and is not influenced by the ORDER BY clause.
 
192
 
 
193
<a name="truncateopt"></a>
 
194
 
 
195
<h3>The Truncate Optimization</h3>
 
196
 
 
197
<p>When the WHERE is omitted from a DELETE statement and the table
 
198
being deleted has no triggers,
 
199
SQLite uses an optimization to erase the entire table content
 
200
without having to visit each row of the table individually.
 
201
This "truncate" optimization makes the delete run much faster.
 
202
Prior to SQLite <a href="releaselog/3_6_5.html">version 3.6.5</a>, the truncate optimization
 
203
also meant that the <a href="c3ref/changes.html">sqlite3_changes()</a> and
 
204
<a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces
 
205
and the <a href="pragma.html#pragma_count_changes">count_changes pragma</a>
 
206
will not actually return the number of deleted rows.  
 
207
That problem has been fixed as of <a href="releaselog/3_6_5.html">version 3.6.5</a>.
 
208
 
 
209
<p>The truncate optimization can be permanently disabled for all queries
 
210
by recompiling
 
211
SQLite with the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time switch.</p>
 
212
 
 
213
<p>The truncate optimization can also be disabled at runtime using
 
214
the <a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> interface.  If an authorizer callback
 
215
returns <a href="c3ref/c_deny.html">SQLITE_IGNORE</a> for an <a href="c3ref/c_alter_table.html">SQLITE_DELETE</a> action code, then
 
216
the DELETE operation will proceed but the truncate optimization will
 
217
be bypassed and rows will be deleted one by one.</p>
 
218
 
 
219