/ Hex Artifact Content
Login

Artifact cf204b6da4cf4ce2d47868092091a4cb7a9f8530:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 54 63 6c  #.# Run this Tcl
0010: 20 73 63 72 69 70 74 20 74 6f 20 67 65 6e 65 72   script to gener
0020: 61 74 65 20 74 68 65 20 6c 61 6e 67 2d 2a 2e 68  ate the lang-*.h
0030: 74 6d 6c 20 66 69 6c 65 73 2e 0a 23 0a 73 65 74  tml files..#.set
0040: 20 72 63 73 69 64 20 7b 24 49 64 3a 20 6c 61 6e   rcsid {$Id: lan
0050: 67 2e 74 63 6c 2c 76 20 31 2e 31 32 35 20 32 30  g.tcl,v 1.125 20
0060: 30 37 2f 30 33 2f 30 39 20 31 34 3a 34 33 3a 32  07/03/09 14:43:2
0070: 35 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78  5 danielk1977 Ex
0080: 70 20 24 7d 0a 73 6f 75 72 63 65 20 63 6f 6d 6d  p $}.source comm
0090: 6f 6e 2e 74 63 6c 0a 0a 69 66 20 7b 5b 6c 6c 65  on.tcl..if {[lle
00a0: 6e 67 74 68 20 24 61 72 67 76 5d 3e 30 7d 20 7b  ngth $argv]>0} {
00b0: 0a 20 20 73 65 74 20 6f 75 74 70 75 74 64 69 72  .  set outputdir
00c0: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 30   [lindex $argv 0
00d0: 5d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 73 65 74  ].} else {.  set
00e0: 20 6f 75 74 70 75 74 64 69 72 20 22 22 0a 7d 0a   outputdir "".}.
00f0: 0a 68 65 61 64 65 72 20 7b 51 75 65 72 79 20 4c  .header {Query L
0100: 61 6e 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f  anguage Understo
0110: 6f 64 20 62 79 20 53 51 4c 69 74 65 7d 0a 70 75  od by SQLite}.pu
0120: 74 73 20 7b 0a 3c 68 31 20 63 6c 61 73 73 3d 22  ts {.<h1 class="
0130: 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 53 51 4c  pdf_section">SQL
0140: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0150: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 0a 0a 3c  y SQLite</h1>..<
0160: 70 3e 54 68 65 20 53 51 4c 69 74 65 20 6c 69 62  p>The SQLite lib
0170: 72 61 72 79 20 75 6e 64 65 72 73 74 61 6e 64 73  rary understands
0180: 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 73 74 61   most of the sta
0190: 6e 64 61 72 64 20 53 51 4c 0a 6c 61 6e 67 75 61  ndard SQL.langua
01a0: 67 65 2e 20 20 42 75 74 20 69 74 20 64 6f 65 73  ge.  But it does
01b0: 20 3c 61 20 68 72 65 66 3d 22 6f 6d 69 74 74 65   <a href="omitte
01c0: 64 2e 68 74 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d  d.html">omit som
01d0: 65 20 66 65 61 74 75 72 65 73 3c 2f 61 3e 0a 77  e features</a>.w
01e0: 68 69 6c 65 20 61 74 20 74 68 65 20 73 61 6d 65  hile at the same
01f0: 20 74 69 6d 65 0a 61 64 64 69 6e 67 20 61 20 66   time.adding a f
0200: 65 77 20 66 65 61 74 75 72 65 73 20 6f 66 20 69  ew features of i
0210: 74 73 20 6f 77 6e 2e 20 20 54 68 69 73 20 64 6f  ts own.  This do
0220: 63 75 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  cument attempts 
0230: 74 6f 0a 64 65 73 63 72 69 62 65 20 70 72 65 63  to.describe prec
0240: 69 73 65 6c 79 20 77 68 61 74 20 70 61 72 74 73  isely what parts
0250: 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   of the SQL lang
0260: 75 61 67 65 20 53 51 4c 69 74 65 20 64 6f 65 73  uage SQLite does
0270: 0a 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 73 75  .and does not su
0280: 70 70 6f 72 74 2e 20 20 41 20 6c 69 73 74 20 6f  pport.  A list o
0290: 66 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  f <a href="lang_
02a0: 6b 65 79 77 6f 72 64 73 2e 68 74 6d 6c 22 3e 6b  keywords.html">k
02b0: 65 79 77 6f 72 64 73 3c 2f 61 3e 20 69 73 20 0a  eywords</a> is .
02c0: 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 3c 2f  also provided.</
02d0: 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6c 6c 20 6f 66  p>..<p>In all of
02e0: 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
02f0: 72 61 6d 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  rams that follow
0300: 2c 20 6c 69 74 65 72 61 6c 20 74 65 78 74 20 69  , literal text i
0310: 73 20 73 68 6f 77 6e 20 69 6e 0a 62 6f 6c 64 20  s shown in.bold 
0320: 62 6c 75 65 2e 20 20 4e 6f 6e 2d 74 65 72 6d 69  blue.  Non-termi
0330: 6e 61 6c 20 73 79 6d 62 6f 6c 73 20 61 72 65 20  nal symbols are 
0340: 73 68 6f 77 6e 20 69 6e 20 69 74 61 6c 69 63 20  shown in italic 
0350: 72 65 64 2e 20 20 4f 70 65 72 61 74 6f 72 73 0a  red.  Operators.
0360: 74 68 61 74 20 61 72 65 20 70 61 72 74 20 6f 66  that are part of
0370: 20 74 68 65 20 73 79 6e 74 61 63 74 69 63 20 6d   the syntactic m
0380: 61 72 6b 75 70 20 69 74 73 65 6c 66 20 61 72 65  arkup itself are
0390: 20 73 68 6f 77 6e 20 69 6e 20 62 6c 61 63 6b 20   shown in black 
03a0: 72 6f 6d 61 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  roman.</p>..<p>T
03b0: 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20  his document is 
03c0: 6a 75 73 74 20 61 6e 20 6f 76 65 72 76 69 65 77  just an overview
03d0: 20 6f 66 20 74 68 65 20 53 51 4c 20 73 79 6e 74   of the SQL synt
03e0: 61 78 20 69 6d 70 6c 65 6d 65 6e 74 65 64 0a 62  ax implemented.b
03f0: 79 20 53 51 4c 69 74 65 2e 20 20 4d 61 6e 79 20  y SQLite.  Many 
0400: 6c 6f 77 2d 6c 65 76 65 6c 20 70 72 6f 64 75 63  low-level produc
0410: 74 69 6f 6e 73 20 61 72 65 20 6f 6d 69 74 74 65  tions are omitte
0420: 64 2e 20 20 46 6f 72 20 64 65 74 61 69 6c 65 64  d.  For detailed
0430: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 6f 6e 20   information.on 
0440: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 74 68 61  the language tha
0450: 74 20 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74  t SQLite underst
0460: 61 6e 64 73 2c 20 72 65 66 65 72 20 74 6f 20 74  ands, refer to t
0470: 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 61  he source code a
0480: 6e 64 0a 74 68 65 20 67 72 61 6d 6d 61 72 20 66  nd.the grammar f
0490: 69 6c 65 20 22 70 61 72 73 65 2e 79 22 2e 3c 2f  ile "parse.y".</
04a0: 70 3e 0a 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22  p>..<div class="
04b0: 70 64 66 5f 69 67 6e 6f 72 65 22 3e 0a 3c 70 3e  pdf_ignore">.<p>
04c0: 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74  SQLite implement
04d0: 73 20 74 68 65 20 66 6f 6c 6c 6f 77 20 73 79 6e  s the follow syn
04e0: 74 61 78 3a 3c 2f 70 3e 0a 3c 70 3e 3c 75 6c 3e  tax:</p>.<p><ul>
04f0: 0a 7d 0a 0a 70 72 6f 63 20 73 6c 69 6e 6b 20 7b  .}..proc slink {
0500: 6c 61 62 65 6c 7d 20 7b 0a 20 20 69 66 20 7b 5b  label} {.  if {[
0510: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2a 2e 68  string match *.h
0520: 74 6d 6c 20 24 6c 61 62 65 6c 5d 7d 20 7b 0a 20  tml $label]} {. 
0530: 20 20 20 72 65 74 75 72 6e 20 24 6c 61 62 65 6c     return $label
0540: 0a 20 20 7d 0a 20 20 69 66 20 7b 5b 73 74 72 69  .  }.  if {[stri
0550: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 6f 75 74  ng length $::out
0560: 70 75 74 64 69 72 5d 3d 3d 30 7d 20 7b 0a 20 20  putdir]==0} {.  
0570: 20 20 72 65 74 75 72 6e 20 23 24 6c 61 62 65 6c    return #$label
0580: 0a 20 20 7d 20 65 6c 73 65 20 7b 20 0a 20 20 20  .  } else { .   
0590: 20 72 65 74 75 72 6e 20 6c 61 6e 67 5f 24 6c 61   return lang_$la
05a0: 62 65 6c 2e 68 74 6d 6c 0a 20 20 7d 0a 7d 0a 0a  bel.html.  }.}..
05b0: 66 6f 72 65 61 63 68 20 7b 73 65 63 74 69 6f 6e  foreach {section
05c0: 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20  } [lsort -index 
05d0: 30 20 2d 64 69 63 74 69 6f 6e 61 72 79 20 7b 0a  0 -dictionary {.
05e0: 20 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45    {{CREATE TABLE
05f0: 7d 20 63 72 65 61 74 65 74 61 62 6c 65 7d 0a 20  } createtable}. 
0600: 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55 41   {{CREATE VIRTUA
0610: 4c 20 54 41 42 4c 45 7d 20 63 72 65 61 74 65 76  L TABLE} createv
0620: 74 61 62 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20  tab}.  {{CREATE 
0630: 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64  INDEX} createind
0640: 65 78 7d 0a 20 20 7b 56 41 43 55 55 4d 20 76 61  ex}.  {VACUUM va
0650: 63 75 75 6d 7d 0a 20 20 7b 7b 44 52 4f 50 20 54  cuum}.  {{DROP T
0660: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d  ABLE} droptable}
0670: 0a 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d  .  {{DROP INDEX}
0680: 20 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 7b 49   dropindex}.  {I
0690: 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20 20  NSERT insert}.  
06a0: 7b 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65  {REPLACE replace
06b0: 7d 0a 20 20 7b 44 45 4c 45 54 45 20 64 65 6c 65  }.  {DELETE dele
06c0: 74 65 7d 0a 20 20 7b 55 50 44 41 54 45 20 75 70  te}.  {UPDATE up
06d0: 64 61 74 65 7d 0a 20 20 7b 53 45 4c 45 43 54 20  date}.  {SELECT 
06e0: 73 65 6c 65 63 74 7d 0a 20 20 7b 63 6f 6d 6d 65  select}.  {comme
06f0: 6e 74 20 63 6f 6d 6d 65 6e 74 7d 0a 20 20 7b 43  nt comment}.  {C
0700: 4f 50 59 20 63 6f 70 79 7d 0a 20 20 7b 45 58 50  OPY copy}.  {EXP
0710: 4c 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20  LAIN explain}.  
0720: 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72  {expression expr
0730: 7d 0a 20 20 7b 7b 42 45 47 49 4e 20 54 52 41 4e  }.  {{BEGIN TRAN
0740: 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63  SACTION} transac
0750: 74 69 6f 6e 7d 0a 20 20 7b 7b 43 4f 4d 4d 49 54  tion}.  {{COMMIT
0760: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0770: 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 45  ansaction}.  {{E
0780: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20  ND TRANSACTION} 
0790: 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b  transaction}.  {
07a0: 7b 52 4f 4c 4c 42 41 43 4b 20 54 52 41 4e 53 41  {ROLLBACK TRANSA
07b0: 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69  CTION} transacti
07c0: 6f 6e 7d 0a 20 20 7b 50 52 41 47 4d 41 20 70 72  on}.  {PRAGMA pr
07d0: 61 67 6d 61 2e 68 74 6d 6c 7d 0a 20 20 7b 7b 4f  agma.html}.  {{O
07e0: 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
07f0: 65 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 7b  e} conflict}.  {
0800: 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 63 72  {CREATE VIEW} cr
0810: 65 61 74 65 76 69 65 77 7d 0a 20 20 7b 7b 44 52  eateview}.  {{DR
0820: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0830: 77 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20 54 52  w}.  {{CREATE TR
0840: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
0850: 67 67 65 72 7d 0a 20 20 7b 7b 44 52 4f 50 20 54  gger}.  {{DROP T
0860: 52 49 47 47 45 52 7d 20 64 72 6f 70 74 72 69 67  RIGGER} droptrig
0870: 67 65 72 7d 0a 20 20 7b 7b 41 54 54 41 43 48 20  ger}.  {{ATTACH 
0880: 44 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68  DATABASE} attach
0890: 7d 0a 20 20 7b 7b 44 45 54 41 43 48 20 44 41 54  }.  {{DETACH DAT
08a0: 41 42 41 53 45 7d 20 64 65 74 61 63 68 7d 0a 20  ABASE} detach}. 
08b0: 20 7b 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65   {REINDEX reinde
08c0: 78 7d 0a 20 20 7b 7b 41 4c 54 45 52 20 54 41 42  x}.  {{ALTER TAB
08d0: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a  LE} altertable}.
08e0: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
08f0: 6c 79 7a 65 7d 0a 7d 5d 20 7b 0a 20 20 66 6f 72  lyze}.}] {.  for
0900: 65 61 63 68 20 7b 73 5f 74 69 74 6c 65 20 73 5f  each {s_title s_
0910: 74 61 67 7d 20 24 73 65 63 74 69 6f 6e 20 7b 7d  tag} $section {}
0920: 0a 20 20 70 75 74 73 20 22 3c 6c 69 3e 3c 61 20  .  puts "<li><a 
0930: 68 72 65 66 3d 5c 22 5b 73 6c 69 6e 6b 20 24 73  href=\"[slink $s
0940: 5f 74 61 67 5d 5c 22 3e 24 73 5f 74 69 74 6c 65  _tag]\">$s_title
0950: 3c 2f 61 3e 3c 2f 6c 69 3e 22 0a 7d 0a 70 75 74  </a></li>".}.put
0960: 73 20 7b 3c 2f 75 6c 3e 3c 2f 70 3e 0a 3c 2f 64  s {</ul></p>.</d
0970: 69 76 3e 0a 0a 3c 70 3e 44 65 74 61 69 6c 73 20  iv>..<p>Details 
0980: 6f 6e 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  on the implement
0990: 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 63 6f  ation of each co
09a0: 6d 6d 61 6e 64 20 61 72 65 20 70 72 6f 76 69 64  mmand are provid
09b0: 65 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c  ed in.the sequel
09c0: 2e 3c 2f 70 3e 0a 7d 0a 0a 70 72 6f 63 20 4f 70  .</p>.}..proc Op
09d0: 65 72 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a  erator {name} {.
09e0: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
09f0: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0a00: 22 3e 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69  "><big>$name</bi
0a10: 67 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f  g></font>".}.pro
0a20: 63 20 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e  c Nonterminal {n
0a30: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
0a40: 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  "<i><font color=
0a50: 5c 22 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d  \"#ff3434\">$nam
0a60: 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a  e</font></i>".}.
0a70: 70 72 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61  proc Keyword {na
0a80: 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22  me} {.  return "
0a90: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32  <font color=\"#2
0aa0: 63 32 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66  c2cf0\">$name</f
0ab0: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61  ont>".}.proc Exa
0ac0: 6d 70 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20  mple {text} {.  
0ad0: 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74  puts "<blockquot
0ae0: 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72  e><pre>$text</pr
0af0: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22  e></blockquote>"
0b00: 0a 7d 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e  .}..proc Section
0b10: 20 7b 6e 61 6d 65 20 6c 61 62 65 6c 7d 20 7b 0a   {name label} {.
0b20: 20 20 67 6c 6f 62 61 6c 20 6f 75 74 70 75 74 64    global outputd
0b30: 69 72 0a 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e  ir..  if {[strin
0b40: 67 20 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74  g length $output
0b50: 64 69 72 5d 21 3d 30 7d 20 7b 0a 20 20 20 20 69  dir]!=0} {.    i
0b60: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66  f {[llength [inf
0b70: 6f 20 63 6f 6d 6d 61 6e 64 73 20 70 75 74 73 5f  o commands puts_
0b80: 73 74 61 6e 64 61 72 64 5d 5d 3e 30 7d 20 7b 0a  standard]]>0} {.
0b90: 20 20 20 20 20 20 66 6f 6f 74 65 72 20 24 3a 3a        footer $::
0ba0: 72 63 73 69 64 0a 20 20 20 20 7d 0a 0a 20 20 20  rcsid.    }..   
0bb0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
0bc0: 67 74 68 20 24 6c 61 62 65 6c 5d 3e 30 7d 20 7b  gth $label]>0} {
0bd0: 0a 20 20 20 20 20 20 72 65 6e 61 6d 65 20 70 75  .      rename pu
0be0: 74 73 20 70 75 74 73 5f 73 74 61 6e 64 61 72 64  ts puts_standard
0bf0: 0a 20 20 20 20 20 20 70 72 6f 63 20 70 75 74 73  .      proc puts
0c00: 20 7b 73 74 72 7d 20 7b 0a 20 20 20 20 20 20 20   {str} {.       
0c10: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 68 72   regsub -all {hr
0c20: 65 66 3d 22 23 28 5b 61 2d 7a 5d 2b 29 22 7d 20  ef="#([a-z]+)"} 
0c30: 24 73 74 72 20 7b 68 72 65 66 3d 22 6c 61 6e 67  $str {href="lang
0c40: 5f 5c 31 2e 68 74 6d 6c 22 7d 20 73 74 72 0a 20  _\1.html"} str. 
0c50: 20 20 20 20 20 20 20 70 75 74 73 5f 73 74 61 6e         puts_stan
0c60: 64 61 72 64 20 24 3a 3a 73 65 63 74 69 6f 6e 5f  dard $::section_
0c70: 66 69 6c 65 20 24 73 74 72 0a 20 20 20 20 20 20  file $str.      
0c80: 7d 0a 20 20 20 20 20 20 72 65 6e 61 6d 65 20 66  }.      rename f
0c90: 6f 6f 74 65 72 20 66 6f 6f 74 65 72 5f 73 74 61  ooter footer_sta
0ca0: 6e 64 61 72 64 0a 20 20 20 20 20 20 70 72 6f 63  ndard.      proc
0cb0: 20 66 6f 6f 74 65 72 20 7b 69 64 7d 20 7b 0a 20   footer {id} {. 
0cc0: 20 20 20 20 20 20 20 66 6f 6f 74 65 72 5f 73 74         footer_st
0cd0: 61 6e 64 61 72 64 20 24 69 64 0a 20 20 20 20 20  andard $id.     
0ce0: 20 20 20 72 65 6e 61 6d 65 20 66 6f 6f 74 65 72     rename footer
0cf0: 20 22 22 0a 20 20 20 20 20 20 20 20 72 65 6e 61   "".        rena
0d00: 6d 65 20 70 75 74 73 20 22 22 0a 20 20 20 20 20  me puts "".     
0d10: 20 20 20 72 65 6e 61 6d 65 20 70 75 74 73 5f 73     rename puts_s
0d20: 74 61 6e 64 61 72 64 20 70 75 74 73 0a 20 20 20  tandard puts.   
0d30: 20 20 20 20 20 72 65 6e 61 6d 65 20 66 6f 6f 74       rename foot
0d40: 65 72 5f 73 74 61 6e 64 61 72 64 20 66 6f 6f 74  er_standard foot
0d50: 65 72 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20  er.      } .    
0d60: 20 20 73 65 74 20 3a 3a 73 65 63 74 69 6f 6e 5f    set ::section_
0d70: 66 69 6c 65 20 5b 6f 70 65 6e 20 5b 66 69 6c 65  file [open [file
0d80: 20 6a 6f 69 6e 20 24 6f 75 74 70 75 74 64 69 72   join $outputdir
0d90: 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d   lang_$label.htm
0da0: 6c 5d 20 77 5d 0a 20 20 20 20 20 20 68 65 61 64  l] w].      head
0db0: 65 72 20 22 51 75 65 72 79 20 4c 61 6e 67 75 61  er "Query Langua
0dc0: 67 65 20 55 6e 64 65 72 73 74 6f 6f 64 20 62 79  ge Understood by
0dd0: 20 53 51 4c 69 74 65 3a 20 24 6e 61 6d 65 22 0a   SQLite: $name".
0de0: 20 20 20 20 20 20 70 75 74 73 20 22 3c 68 31 3e        puts "<h1>
0df0: 53 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f  SQL As Understoo
0e00: 64 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e  d By SQLite</h1>
0e10: 22 0a 20 20 20 20 20 20 70 75 74 73 20 22 3c 61  ".      puts "<a
0e20: 20 68 72 65 66 3d 5c 22 6c 61 6e 67 2e 68 74 6d   href=\"lang.htm
0e30: 6c 5c 22 3e 5c 5b 43 6f 6e 74 65 6e 74 73 5c 5d  l\">\[Contents\]
0e40: 3c 2f 61 3e 22 0a 20 20 20 20 20 20 70 75 74 73  </a>".      puts
0e50: 20 22 3c 68 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e   "<h2>$name</h2>
0e60: 22 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 0a  ".      return .
0e70: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 75 74 73      }.  }.  puts
0e80: 20 22 5c 6e 3c 68 72 20 2f 3e 22 0a 20 20 69 66   "\n<hr />".  if
0e90: 20 7b 24 6c 61 62 65 6c 21 3d 22 22 7d 20 7b 0a   {$label!=""} {.
0ea0: 20 20 20 20 70 75 74 73 20 22 3c 61 20 6e 61 6d      puts "<a nam
0eb0: 65 3d 5c 22 24 6c 61 62 65 6c 5c 22 3e 3c 2f 61  e=\"$label\"></a
0ec0: 3e 22 0a 20 20 7d 0a 20 20 70 75 74 73 20 22 3c  >".  }.  puts "<
0ed0: 68 31 3e 24 6e 61 6d 65 3c 2f 68 31 3e 5c 6e 22  h1>$name</h1>\n"
0ee0: 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54  .}..Section {ALT
0ef0: 45 52 20 54 41 42 4c 45 7d 20 61 6c 74 65 72 74  ER TABLE} altert
0f00: 61 62 6c 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71  able..Syntax {sq
0f10: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 41  l-statement} {.A
0f20: 4c 54 45 52 20 54 41 42 4c 45 20 5b 3c 64 61 74  LTER TABLE [<dat
0f30: 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c  abase-name> .] <
0f40: 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 3c 61 6c 74  table-name> <alt
0f50: 65 72 61 74 69 6f 6e 3e 0a 7d 20 7b 61 6c 74 65  eration>.} {alte
0f60: 72 61 74 69 6f 6e 7d 20 7b 0a 52 45 4e 41 4d 45  ration} {.RENAME
0f70: 20 54 4f 20 3c 6e 65 77 2d 74 61 62 6c 65 2d 6e   TO <new-table-n
0f80: 61 6d 65 3e 0a 7d 20 7b 61 6c 74 65 72 61 74 69  ame>.} {alterati
0f90: 6f 6e 7d 20 7b 0a 41 44 44 20 5b 43 4f 4c 55 4d  on} {.ADD [COLUM
0fa0: 4e 5d 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66 3e 0a  N] <column-def>.
0fb0: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 53 51 4c  }..puts {.<p>SQL
0fc0: 69 74 65 27 73 20 76 65 72 73 69 6f 6e 20 6f 66  ite's version of
0fd0: 20 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45   the ALTER TABLE
0fe0: 20 63 6f 6d 6d 61 6e 64 20 61 6c 6c 6f 77 73 20   command allows 
0ff0: 74 68 65 20 75 73 65 72 20 74 6f 20 0a 72 65 6e  the user to .ren
1000: 61 6d 65 20 6f 72 20 61 64 64 20 61 20 6e 65 77  ame or add a new
1010: 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78   column to an ex
1020: 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 49 74  isting table. It
1030: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1040: 0a 74 6f 20 72 65 6d 6f 76 65 20 61 20 63 6f 6c  .to remove a col
1050: 75 6d 6e 20 66 72 6f 6d 20 61 20 74 61 62 6c 65  umn from a table
1060: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 52  ..</p>..<p>The R
1070: 45 4e 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20  ENAME TO syntax 
1080: 69 73 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d  is used to renam
1090: 65 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e  e the table iden
10a0: 74 69 66 69 65 64 20 62 79 20 0a 3c 69 3e 5b 64  tified by .<i>[d
10b0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 5d 74 61  atabase-name.]ta
10c0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f 20  ble-name</i> to 
10d0: 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d  <i>new-table-nam
10e0: 65 3c 2f 69 3e 2e 20 54 68 69 73 20 63 6f 6d 6d  e</i>. This comm
10f0: 61 6e 64 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75  and .cannot be u
1100: 73 65 64 20 74 6f 20 6d 6f 76 65 20 61 20 74 61  sed to move a ta
1110: 62 6c 65 20 62 65 74 77 65 65 6e 20 61 74 74 61  ble between atta
1120: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
1130: 6f 6e 6c 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a  only to rename .
1140: 61 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74  a table within t
1150: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
1160: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65  .</p>..<p>If the
1170: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e   table being ren
1180: 61 6d 65 64 20 68 61 73 20 74 72 69 67 67 65 72  amed has trigger
1190: 73 20 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68  s or indices, th
11a0: 65 6e 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a  en these remain.
11b0: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
11c0: 74 61 62 6c 65 20 61 66 74 65 72 20 69 74 20 68  table after it h
11d0: 61 73 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e  as been renamed.
11e0: 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65   However, if the
11f0: 72 65 20 61 72 65 0a 61 6e 79 20 76 69 65 77 20  re are.any view 
1200: 64 65 66 69 6e 69 74 69 6f 6e 73 2c 20 6f 72 20  definitions, or 
1210: 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63 75  statements execu
1220: 74 65 64 20 62 79 20 74 72 69 67 67 65 72 73 20  ted by triggers 
1230: 74 68 61 74 20 72 65 66 65 72 20 74 6f 0a 74 68  that refer to.th
1240: 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65  e table being re
1250: 6e 61 6d 65 64 2c 20 74 68 65 73 65 20 61 72 65  named, these are
1260: 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c   not automatical
1270: 6c 79 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 75  ly modified to u
1280: 73 65 20 74 68 65 20 6e 65 77 0a 74 61 62 6c 65  se the new.table
1290: 20 6e 61 6d 65 2e 20 49 66 20 74 68 69 73 20 69   name. If this i
12a0: 73 20 72 65 71 75 69 72 65 64 2c 20 74 68 65 20  s required, the 
12b0: 74 72 69 67 67 65 72 73 20 6f 72 20 76 69 65 77  triggers or view
12c0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 6d 75 73   definitions mus
12d0: 74 20 62 65 0a 64 72 6f 70 70 65 64 20 61 6e 64  t be.dropped and
12e0: 20 72 65 63 72 65 61 74 65 64 20 74 6f 20 75 73   recreated to us
12f0: 65 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  e the new table 
1300: 6e 61 6d 65 20 62 79 20 68 61 6e 64 2e 0a 3c 2f  name by hand..</
1310: 70 3e 0a 0a 3c 70 3e 54 68 65 20 41 44 44 20 5b  p>..<p>The ADD [
1320: 43 4f 4c 55 4d 4e 5d 20 73 79 6e 74 61 78 20 69  COLUMN] syntax i
1330: 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61 20  s used to add a 
1340: 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e  new column to an
1350: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e   existing table.
1360: 0a 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  .The new column 
1370: 69 73 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64  is always append
1380: 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1390: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 69   the list of exi
13a0: 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 3c  sting columns..<
13b0: 69 3e 43 6f 6c 75 6d 6e 2d 64 65 66 3c 2f 69 3e  i>Column-def</i>
13c0: 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66   may take any of
13d0: 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69   the forms permi
13e0: 73 73 61 62 6c 65 20 69 6e 20 61 20 43 52 45 41  ssable in a CREA
13f0: 54 45 20 54 41 42 4c 45 20 0a 73 74 61 74 65 6d  TE TABLE .statem
1400: 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f  ent, with the fo
1410: 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74  llowing restrict
1420: 69 6f 6e 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54  ions:.<ul>.<li>T
1430: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1440: 74 20 68 61 76 65 20 61 20 50 52 49 4d 41 52 59  t have a PRIMARY
1450: 20 4b 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63   KEY or UNIQUE c
1460: 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a  onstraint.</li>.
1470: 3c 6c 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  <li>The column m
1480: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65  ay not have a de
1490: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43  fault value of C
14a0: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
14b0: 52 45 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f  RENT_DATE .    o
14c0: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
14d0: 41 4d 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 49 66  AMP.</li>.<li>If
14e0: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
14f0: 74 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66  traint is specif
1500: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ied, then the co
1510: 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61  lumn must have a
1520: 0a 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c  .    default val
1530: 75 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55  ue other than NU
1540: 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68  LL..</ul>..<p>Th
1550: 65 20 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65  e execution time
1560: 20 6f 66 20 74 68 65 20 41 4c 54 45 52 20 54 41   of the ALTER TA
1570: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  BLE command is i
1580: 6e 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68  ndependent of.th
1590: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61  e amount of data
15a0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
15b0: 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  The ALTER TABLE 
15c0: 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61 73 20  command runs as 
15d0: 71 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62  quickly.on a tab
15e0: 6c 65 20 77 69 74 68 20 31 30 20 6d 69 6c 6c 69  le with 10 milli
15f0: 6f 6e 20 72 6f 77 73 20 61 73 20 69 74 20 64 6f  on rows as it do
1600: 65 73 20 6f 6e 20 61 20 74 61 62 6c 65 20 77 69  es on a table wi
1610: 74 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a  th 1 row..</p>..
1620: 3c 70 3e 41 66 74 65 72 20 41 44 44 20 43 4f 4c  <p>After ADD COL
1630: 55 4d 4e 20 68 61 73 20 62 65 65 6e 20 72 75 6e  UMN has been run
1640: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2c 20   on a database, 
1650: 74 68 61 74 20 64 61 74 61 62 61 73 65 20 77 69  that database wi
1660: 6c 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64 61 62  ll not.be readab
1670: 6c 65 20 62 79 20 53 51 4c 69 74 65 20 76 65 72  le by SQLite ver
1680: 73 69 6f 6e 20 33 2e 31 2e 33 20 61 6e 64 20 65  sion 3.1.3 and e
1690: 61 72 6c 69 65 72 20 75 6e 74 69 6c 20 74 68 65  arlier until the
16a0: 20 64 61 74 61 62 61 73 65 0a 69 73 20 3c 61 20   database.is <a 
16b0: 68 72 65 66 3d 22 6c 61 6e 67 5f 76 61 63 75 75  href="lang_vacuu
16c0: 6d 2e 68 74 6d 6c 22 3e 56 41 43 55 55 4d 3c 2f  m.html">VACUUM</
16d0: 61 3e 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65 63  a>ed.</p>.}..Sec
16e0: 74 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61  tion {ANALYZE} a
16f0: 6e 61 6c 79 7a 65 0a 0a 53 79 6e 74 61 78 20 7b  nalyze..Syntax {
1700: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
1710: 0a 20 20 41 4e 41 4c 59 5a 45 0a 7d 0a 53 79 6e  .  ANALYZE.}.Syn
1720: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
1730: 6e 74 7d 20 7b 0a 20 20 41 4e 41 4c 59 5a 45 20  nt} {.  ANALYZE 
1740: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 0a  <database-name>.
1750: 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  }.Syntax {sql-st
1760: 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20 41 4e 41  atement} {.  ANA
1770: 4c 59 5a 45 20 5b 3c 64 61 74 61 62 61 73 65 2d  LYZE [<database-
1780: 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d  name> .] <table-
1790: 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  name>.}..puts {.
17a0: 3c 70 3e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63  <p>The ANALYZE c
17b0: 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73  ommand gathers s
17c0: 74 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20  tatistics about 
17d0: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
17e0: 65 73 20 74 68 65 6d 0a 69 6e 20 61 20 73 70 65  es them.in a spe
17f0: 63 69 61 6c 20 74 61 62 6c 65 73 20 69 6e 20 74  cial tables in t
1800: 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72  he database wher
1810: 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  e the query opti
1820: 6d 69 7a 65 72 20 63 61 6e 20 75 73 65 0a 74 68  mizer can use.th
1830: 65 6d 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20  em to help make 
1840: 62 65 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f  better index cho
1850: 69 63 65 73 2e 0a 49 66 20 6e 6f 20 61 72 67 75  ices..If no argu
1860: 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c  ments are given,
1870: 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20   all indices in 
1880: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1890: 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79  abases are.analy
18a0: 7a 65 64 2e 20 20 49 66 20 61 20 64 61 74 61 62  zed.  If a datab
18b0: 61 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65  ase name is give
18c0: 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  n as the argumen
18d0: 74 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 69  t, all indices.i
18e0: 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62  n that one datab
18f0: 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ase are analyzed
1900: 2e 20 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  .  If the argume
1910: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
1920: 6d 65 2c 0a 74 68 65 6e 20 6f 6e 6c 79 20 69 6e  me,.then only in
1930: 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64  dices associated
1940: 20 77 69 74 68 20 74 68 61 74 20 6f 6e 65 20 74   with that one t
1950: 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  able are analyze
1960: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69  d.</p>..<p>The i
1970: 6e 69 74 69 61 6c 20 69 6d 70 6c 65 6d 65 6e 74  nitial implement
1980: 61 74 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c  ation stores all
1990: 20 73 74 61 74 69 73 74 69 63 73 20 69 6e 20 61   statistics in a
19a0: 20 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61   single.table na
19b0: 6d 65 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74  med <b>sqlite_st
19c0: 61 74 31 3c 2f 62 3e 2e 20 20 46 75 74 75 72 65  at1</b>.  Future
19d0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61   enhancements ma
19e0: 79 20 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f  y create.additio
19f0: 6e 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20  nal tables with 
1a00: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61  the same name pa
1a10: 74 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74  ttern except wit
1a20: 68 20 74 68 65 20 22 31 22 0a 63 68 61 6e 67 65  h the "1".change
1a30: 64 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  d to a different
1a40: 20 64 69 67 69 74 2e 20 20 54 68 65 20 3c 62 3e   digit.  The <b>
1a50: 73 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e  sqlite_stat1</b>
1a60: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 0a 62 65   table cannot.be
1a70: 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74   <a href="#dropt
1a80: 61 62 6c 65 22 3e 44 52 4f 50 3c 2f 61 3e 70 65  able">DROP</a>pe
1a90: 64 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63  d,.but all the c
1aa0: 6f 6e 74 65 6e 74 20 63 61 6e 20 62 65 20 3c 61  ontent can be <a
1ab0: 20 68 72 65 66 3d 22 23 64 65 6c 65 74 65 22 3e   href="#delete">
1ac0: 44 45 4c 45 54 45 3c 2f 61 3e 64 20 77 68 69 63  DELETE</a>d whic
1ad0: 68 20 68 61 73 20 74 68 65 0a 73 61 6d 65 20 65  h has the.same e
1ae0: 66 66 65 63 74 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65  ffect.</p>.}..Se
1af0: 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44 41  ction {ATTACH DA
1b00: 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 0a 0a  TABASE} attach..
1b10: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
1b20: 65 6d 65 6e 74 7d 20 7b 0a 41 54 54 41 43 48 20  ement} {.ATTACH 
1b30: 5b 44 41 54 41 42 41 53 45 5d 20 3c 64 61 74 61  [DATABASE] <data
1b40: 62 61 73 65 2d 66 69 6c 65 6e 61 6d 65 3e 20 41  base-filename> A
1b50: 53 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  S <database-name
1b60: 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  >.}..puts {.<p>T
1b70: 68 65 20 41 54 54 41 43 48 20 44 41 54 41 42 41  he ATTACH DATABA
1b80: 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64  SE statement add
1b90: 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61  s another databa
1ba0: 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20  se .file to the 
1bb0: 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
1bc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66   connection.  If
1bd0: 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 63 6f   the filename co
1be0: 6e 74 61 69 6e 73 20 0a 70 75 6e 63 74 75 61 74  ntains .punctuat
1bf0: 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 20 69  ion characters i
1c00: 74 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64  t must be quoted
1c10: 2e 20 20 54 68 65 20 6e 61 6d 65 73 20 27 6d 61  .  The names 'ma
1c20: 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20  in' and .'temp' 
1c30: 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69  refer to the mai
1c40: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  n database and t
1c50: 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
1c60: 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20   for .temporary 
1c70: 74 61 62 6c 65 73 2e 20 20 54 68 65 73 65 20 63  tables.  These c
1c80: 61 6e 6e 6f 74 20 62 65 20 64 65 74 61 63 68 65  annot be detache
1c90: 64 2e 20 20 41 74 74 61 63 68 65 64 20 64 61 74  d.  Attached dat
1ca0: 61 62 61 73 65 73 20 0a 61 72 65 20 72 65 6d 6f  abases .are remo
1cb0: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 3c 61  ved using the <a
1cc0: 20 68 72 65 66 3d 22 23 64 65 74 61 63 68 22 3e   href="#detach">
1cd0: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 3c  DETACH DATABASE<
1ce0: 2f 61 3e 20 0a 73 74 61 74 65 6d 65 6e 74 2e 3c  /a> .statement.<
1cf0: 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 20  /p>..<p>You can 
1d00: 72 65 61 64 20 66 72 6f 6d 20 61 6e 64 20 77 72  read from and wr
1d10: 69 74 65 20 74 6f 20 61 6e 20 61 74 74 61 63 68  ite to an attach
1d20: 65 64 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  ed database and 
1d30: 79 6f 75 0a 63 61 6e 20 6d 6f 64 69 66 79 20 74  you.can modify t
1d40: 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
1d50: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1d60: 73 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 6e  se.  This is a n
1d70: 65 77 0a 66 65 61 74 75 72 65 20 6f 66 20 53 51  ew.feature of SQ
1d80: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 30  Lite version 3.0
1d90: 2e 20 20 49 6e 20 53 51 4c 69 74 65 20 32 2e 38  .  In SQLite 2.8
1da0: 2c 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  , schema changes
1db0: 0a 74 6f 20 61 74 74 61 63 68 65 64 20 64 61 74  .to attached dat
1dc0: 61 62 61 73 65 73 20 77 65 72 65 20 6e 6f 74 20  abases were not 
1dd0: 61 6c 6c 6f 77 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  allowed.</p>..<p
1de0: 3e 59 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61  >You cannot crea
1df0: 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 77  te a new table w
1e00: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
1e10: 65 20 61 73 20 61 20 74 61 62 6c 65 20 69 6e 20  e as a table in 
1e20: 0a 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  .an attached dat
1e30: 61 62 61 73 65 2c 20 62 75 74 20 79 6f 75 20 63  abase, but you c
1e40: 61 6e 20 61 74 74 61 63 68 20 61 20 64 61 74 61  an attach a data
1e50: 62 61 73 65 20 77 68 69 63 68 20 63 6f 6e 74 61  base which conta
1e60: 69 6e 73 0a 74 61 62 6c 65 73 20 77 68 6f 73 65  ins.tables whose
1e70: 20 6e 61 6d 65 73 20 61 72 65 20 64 75 70 6c 69   names are dupli
1e80: 63 61 74 65 73 20 6f 66 20 74 61 62 6c 65 73 20  cates of tables 
1e90: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
1ea0: 62 61 73 65 2e 20 20 49 74 20 69 73 20 0a 61 6c  base.  It is .al
1eb0: 73 6f 20 70 65 72 6d 69 73 73 69 62 6c 65 20 74  so permissible t
1ec0: 6f 20 61 74 74 61 63 68 20 74 68 65 20 73 61 6d  o attach the sam
1ed0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1ee0: 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 3c  multiple times.<
1ef0: 2f 70 3e 0a 0a 3c 70 3e 54 61 62 6c 65 73 20 69  /p>..<p>Tables i
1f00: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
1f10: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65  tabase can be re
1f20: 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20  ferred to using 
1f30: 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64  the syntax .<i>d
1f40: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62  atabase-name.tab
1f50: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 20 49 66  le-name</i>.  If
1f60: 20 61 6e 20 61 74 74 61 63 68 65 64 20 74 61 62   an attached tab
1f70: 6c 65 20 64 6f 65 73 6e 27 74 20 68 61 76 65 20  le doesn't have 
1f80: 0a 61 20 64 75 70 6c 69 63 61 74 65 20 74 61 62  .a duplicate tab
1f90: 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 6d  le name in the m
1fa0: 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 69 74  ain database, it
1fb0: 20 64 6f 65 73 6e 27 74 20 72 65 71 75 69 72 65   doesn't require
1fc0: 20 61 20 0a 64 61 74 61 62 61 73 65 20 6e 61 6d   a .database nam
1fd0: 65 20 70 72 65 66 69 78 2e 20 20 57 68 65 6e 20  e prefix.  When 
1fe0: 61 20 64 61 74 61 62 61 73 65 20 69 73 20 61 74  a database is at
1ff0: 74 61 63 68 65 64 2c 20 61 6c 6c 20 6f 66 20 69  tached, all of i
2000: 74 73 20 0a 74 61 62 6c 65 73 20 77 68 69 63 68  ts .tables which
2010: 20 64 6f 6e 27 74 20 68 61 76 65 20 64 75 70 6c   don't have dupl
2020: 69 63 61 74 65 20 6e 61 6d 65 73 20 62 65 63 6f  icate names beco
2030: 6d 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74  me the default t
2040: 61 62 6c 65 0a 6f 66 20 74 68 61 74 20 6e 61 6d  able.of that nam
2050: 65 2e 20 20 41 6e 79 20 74 61 62 6c 65 73 20 6f  e.  Any tables o
2060: 66 20 74 68 61 74 20 6e 61 6d 65 20 61 74 74 61  f that name atta
2070: 63 68 65 64 20 61 66 74 65 72 77 61 72 64 73 20  ched afterwards 
2080: 72 65 71 75 69 72 65 20 74 68 65 20 74 61 62 6c  require the tabl
2090: 65 20 0a 70 72 65 66 69 78 2e 20 49 66 20 74 68  e .prefix. If th
20a0: 65 20 64 65 66 61 75 6c 74 20 74 61 62 6c 65 20  e default table 
20b0: 6f 66 20 61 20 67 69 76 65 6e 20 6e 61 6d 65 20  of a given name 
20c0: 69 73 20 64 65 74 61 63 68 65 64 2c 20 74 68 65  is detached, the
20d0: 6e 20 0a 74 68 65 20 6c 61 73 74 20 74 61 62 6c  n .the last tabl
20e0: 65 20 6f 66 20 74 68 61 74 20 6e 61 6d 65 20 61  e of that name a
20f0: 74 74 61 63 68 65 64 20 62 65 63 6f 6d 65 73 20  ttached becomes 
2100: 74 68 65 20 6e 65 77 20 64 65 66 61 75 6c 74 2e  the new default.
2110: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e 73 61  </p>..<p>.Transa
2120: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
2130: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
2140: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
2150: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
2160: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
2170: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
2180: 22 3a 6d 65 6d 6f 72 79 3a 22 2e 20 20 49 66 20  ":memory:".  If 
2190: 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73  the main.databas
21a0: 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20  e is ":memory:" 
21b0: 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f  then .transactio
21c0: 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ns continue to b
21d0: 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20  e atomic within 
21e0: 65 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a  each individual.
21f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42  database file. B
2200: 75 74 20 69 66 20 74 68 65 20 68 6f 73 74 20 63  ut if the host c
2210: 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20  omputer crashes 
2220: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66  in the middle.of
2230: 20 61 20 43 4f 4d 4d 49 54 20 77 68 65 72 65 20   a COMMIT where 
2240: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61  two or more data
2250: 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75  base files are u
2260: 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20  pdated,.some of 
2270: 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68  those files migh
2280: 74 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65  t get the change
2290: 73 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d  s where others.m
22a0: 69 67 68 74 20 6e 6f 74 2e 0a 41 74 6f 6d 69 63  ight not..Atomic
22b0: 20 63 6f 6d 6d 69 74 20 6f 66 20 61 74 74 61 63   commit of attac
22c0: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 69 73  hed databases is
22d0: 20 61 20 6e 65 77 20 66 65 61 74 75 72 65 20 6f   a new feature o
22e0: 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  f SQLite version
22f0: 20 33 2e 30 2e 0a 49 6e 20 53 51 4c 69 74 65 20   3.0..In SQLite 
2300: 76 65 72 73 69 6f 6e 20 32 2e 38 2c 20 61 6c 6c  version 2.8, all
2310: 20 63 6f 6d 6d 69 74 73 20 74 6f 20 61 74 74 61   commits to atta
2320: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 62  ched databases b
2330: 65 68 61 76 65 64 20 61 73 20 69 66 0a 74 68 65  ehaved as if.the
2340: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 77   main database w
2350: 65 72 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 2e 0a  ere ":memory:"..
2360: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 69  </p>..<p>There i
2370: 73 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  s a compile-time
2380: 20 6c 69 6d 69 74 20 6f 66 20 31 30 20 61 74 74   limit of 10 att
2390: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 66  ached database f
23a0: 69 6c 65 73 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65  iles.</p>.}...Se
23b0: 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41  ction {BEGIN TRA
23c0: 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61  NSACTION} transa
23d0: 63 74 69 6f 6e 0a 0a 53 79 6e 74 61 78 20 7b 73  ction..Syntax {s
23e0: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
23f0: 42 45 47 49 4e 20 5b 20 44 45 46 45 52 52 45 44  BEGIN [ DEFERRED
2400: 20 7c 20 49 4d 4d 45 44 49 41 54 45 20 7c 20 45   | IMMEDIATE | E
2410: 58 43 4c 55 53 49 56 45 20 5d 20 5b 54 52 41 4e  XCLUSIVE ] [TRAN
2420: 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d  SACTION [<name>]
2430: 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  ].}.Syntax {sql-
2440: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 45 4e 44  statement} {.END
2450: 20 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c   [TRANSACTION [<
2460: 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78  name>]].}.Syntax
2470: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
2480: 20 7b 0a 43 4f 4d 4d 49 54 20 5b 54 52 41 4e 53   {.COMMIT [TRANS
2490: 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d  ACTION [<name>]]
24a0: 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  .}.Syntax {sql-s
24b0: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 52 4f 4c 4c  tatement} {.ROLL
24c0: 42 41 43 4b 20 5b 54 52 41 4e 53 41 43 54 49 4f  BACK [TRANSACTIO
24d0: 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 0a 70  N [<name>]].}..p
24e0: 75 74 73 20 7b 0a 3c 70 3e 42 65 67 69 6e 6e 69  uts {.<p>Beginni
24f0: 6e 67 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e  ng in version 2.
2500: 30 2c 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  0, SQLite suppor
2510: 74 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ts transactions 
2520: 77 69 74 68 0a 72 6f 6c 6c 62 61 63 6b 20 61 6e  with.rollback an
2530: 64 20 61 74 6f 6d 69 63 20 63 6f 6d 6d 69 74 2e  d atomic commit.
2540: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  </p>..<p>The opt
2550: 69 6f 6e 61 6c 20 74 72 61 6e 73 61 63 74 69 6f  ional transactio
2560: 6e 20 6e 61 6d 65 20 69 73 20 69 67 6e 6f 72 65  n name is ignore
2570: 64 2e 20 53 51 4c 69 74 65 20 63 75 72 72 65 6e  d. SQLite curren
2580: 74 6c 79 20 0a 64 6f 65 73 20 6e 6f 74 20 61 6c  tly .does not al
2590: 6c 6f 77 20 6e 65 73 74 65 64 20 74 72 61 6e 73  low nested trans
25a0: 61 63 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70  actions.</p>..<p
25b0: 3e 0a 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e  >.No changes can
25c0: 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20   be made to the 
25d0: 64 61 74 61 62 61 73 65 20 65 78 63 65 70 74 20  database except 
25e0: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
25f0: 74 69 6f 6e 2e 0a 41 6e 79 20 63 6f 6d 6d 61 6e  tion..Any comman
2600: 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20 74  d that changes t
2610: 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61 73  he database (bas
2620: 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c 20  ically, any SQL 
2630: 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74 68  command.other th
2640: 61 6e 20 53 45 4c 45 43 54 29 20 77 69 6c 6c 20  an SELECT) will 
2650: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74  automatically st
2660: 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
2670: 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20  n if.one is not 
2680: 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66 65 63  already in effec
2690: 74 2e 20 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c  t.  Automaticall
26a0: 79 20 73 74 61 72 74 65 64 20 74 72 61 6e 73 61  y started transa
26b0: 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69  ctions.are commi
26c0: 74 74 65 64 20 61 74 20 74 68 65 20 63 6f 6e 63  tted at the conc
26d0: 6c 75 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  lusion of the co
26e0: 6d 6d 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  mmand..</p>..<p>
26f0: 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61  .Transactions ca
2700: 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e  n be started man
2710: 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20  ually using the 
2720: 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20  BEGIN.command.  
2730: 53 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  Such transaction
2740: 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69 73  s usually persis
2750: 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  t until the next
2760: 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42  .COMMIT or ROLLB
2770: 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42 75  ACK command.  Bu
2780: 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
2790: 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42  will also .ROLLB
27a0: 41 43 4b 20 69 66 20 74 68 65 20 64 61 74 61 62  ACK if the datab
27b0: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f 72  ase is closed or
27c0: 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
27d0: 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c 4c  urs.and the ROLL
27e0: 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72 65  BACK conflict re
27f0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
2800: 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  hm is specified.
2810: 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e  .See the documen
2820: 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 3c 61  tation on the <a
2830: 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74   href="#conflict
2840: 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61  ">ON CONFLICT</a
2850: 3e 0a 63 6c 61 75 73 65 20 66 6f 72 20 61 64 64  >.clause for add
2860: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2870: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 52 4f  ion about the RO
2880: 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20  LLBACK.conflict 
2890: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
28a0: 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ithm..</p>..<p>.
28b0: 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  In SQLite versio
28c0: 6e 20 33 2e 30 2e 38 20 61 6e 64 20 6c 61 74 65  n 3.0.8 and late
28d0: 72 2c 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  r, transactions 
28e0: 63 61 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c  can be deferred,
28f0: 0a 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65  .immediate, or e
2900: 78 63 6c 75 73 69 76 65 2e 20 20 44 65 66 65 72  xclusive.  Defer
2910: 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20 6e  red means that n
2920: 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71 75  o locks are acqu
2930: 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74 61  ired.on the data
2940: 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 64  base until the d
2950: 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74  atabase is first
2960: 20 61 63 63 65 73 73 65 64 2e 20 20 54 68 75 73   accessed.  Thus
2970: 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65 64   with a.deferred
2980: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
2990: 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65 6e  e BEGIN statemen
29a0: 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e 6f  t itself does no
29b0: 74 68 69 6e 67 2e 20 20 4c 6f 63 6b 73 0a 61 72  thing.  Locks.ar
29c0: 65 20 6e 6f 74 20 61 63 71 75 69 72 65 64 20 75  e not acquired u
29d0: 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20 72  ntil the first r
29e0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 6f 70 65  ead or write ope
29f0: 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 66 69 72  ration.  The fir
2a00: 73 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f  st read.operatio
2a10: 6e 20 61 67 61 69 6e 73 74 20 61 20 64 61 74 61  n against a data
2a20: 62 61 73 65 20 63 72 65 61 74 65 73 20 61 20 53  base creates a S
2a30: 48 41 52 45 44 20 6c 6f 63 6b 20 61 6e 64 20 74  HARED lock and t
2a40: 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f  he first.write o
2a50: 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73  peration creates
2a60: 20 61 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b   a RESERVED lock
2a70: 2e 20 20 20 42 65 63 61 75 73 65 20 74 68 65 20  .   Because the 
2a80: 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c  acquisition of.l
2a90: 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65 64  ocks is deferred
2aa0: 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20   until they are 
2ab0: 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f  needed, it is po
2ac0: 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
2ad0: 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72  her.thread or pr
2ae0: 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61  ocess could crea
2af0: 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74 72  te a separate tr
2b00: 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72  ansaction and wr
2b10: 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62  ite to.the datab
2b20: 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42 45  ase after the BE
2b30: 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65  GIN on the curre
2b40: 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65 78  nt thread has ex
2b50: 65 63 75 74 65 64 2e 0a 49 66 20 74 68 65 20 74  ecuted..If the t
2b60: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d  ransaction is im
2b70: 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 52 45  mediate, then RE
2b80: 53 45 52 56 45 44 20 6c 6f 63 6b 73 0a 61 72 65  SERVED locks.are
2b90: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
2ba0: 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f   databases as so
2bb0: 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20  on as the BEGIN 
2bc0: 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75  command is.execu
2bd0: 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69  ted, without wai
2be0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74  ting for the.dat
2bf0: 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64  abase to be used
2c00: 2e 20 20 41 66 74 65 72 20 61 20 42 45 47 49 4e  .  After a BEGIN
2c10: 20 49 4d 4d 45 44 49 41 54 45 2c 20 79 6f 75 20   IMMEDIATE, you 
2c20: 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74  are guaranteed t
2c30: 68 61 74 0a 6e 6f 20 6f 74 68 65 72 20 74 68 72  hat.no other thr
2c40: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 77  ead or process w
2c50: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77  ill be able to w
2c60: 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61  rite to the data
2c70: 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47  base or.do a BEG
2c80: 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20  IN IMMEDIATE or 
2c90: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e  BEGIN EXCLUSIVE.
2ca0: 20 20 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65    Other processe
2cb0: 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74  s can continue.t
2cc0: 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20  o read from the 
2cd0: 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65  database, howeve
2ce0: 72 2e 20 20 41 6e 20 65 78 63 6c 75 73 69 76 65  r.  An exclusive
2cf0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
2d00: 73 65 73 0a 45 58 43 4c 55 53 49 56 45 20 6c 6f  ses.EXCLUSIVE lo
2d10: 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69 72  cks to be acquir
2d20: 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61  ed on all databa
2d30: 73 65 73 2e 20 20 41 66 74 65 72 20 61 20 42 45  ses.  After a BE
2d40: 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20 79  GIN.EXCLUSIVE, y
2d50: 6f 75 20 61 72 65 20 67 75 61 72 61 6e 74 65 65  ou are guarantee
2d60: 64 20 74 68 61 74 20 6e 6f 20 6f 74 68 65 72 20  d that no other 
2d70: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
2d80: 73 20 77 69 6c 6c 0a 62 65 20 61 62 6c 65 20 74  s will.be able t
2d90: 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  o read or write 
2da0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74  the database unt
2db0: 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  il the transacti
2dc0: 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a  on is.complete..
2dd0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 20 64 65 73 63  </p>..<p>.A desc
2de0: 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ription of the m
2df0: 65 61 6e 69 6e 67 20 6f 66 20 53 48 41 52 45 44  eaning of SHARED
2e00: 2c 20 52 45 53 45 52 56 45 44 2c 20 61 6e 64 20  , RESERVED, and 
2e10: 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 73 0a  EXCLUSIVE locks.
2e20: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 3c 61 20  is available <a 
2e30: 68 72 65 66 3d 22 6c 6f 63 6b 69 6e 67 76 33 2e  href="lockingv3.
2e40: 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79  html">separately
2e50: 3c 2f 61 3e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  </a>..</p>..<p>.
2e60: 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  The default beha
2e70: 76 69 6f 72 20 66 6f 72 20 53 51 4c 69 74 65 20  vior for SQLite 
2e80: 76 65 72 73 69 6f 6e 20 33 2e 30 2e 38 20 69 73  version 3.0.8 is
2e90: 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e   a.deferred tran
2ea0: 73 61 63 74 69 6f 6e 2e 20 20 46 6f 72 20 53 51  saction.  For SQ
2eb0: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 30  Lite version 3.0
2ec0: 2e 30 20 74 68 72 6f 75 67 68 20 33 2e 30 2e 37  .0 through 3.0.7
2ed0: 2c 0a 64 65 66 65 72 72 65 64 20 69 73 20 74 68  ,.deferred is th
2ee0: 65 20 6f 6e 6c 79 20 6b 69 6e 64 20 6f 66 20 74  e only kind of t
2ef0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 76 61 69 6c  ransaction avail
2f00: 61 62 6c 65 2e 20 20 46 6f 72 20 53 51 4c 69 74  able.  For SQLit
2f10: 65 0a 76 65 72 73 69 6f 6e 20 32 2e 38 20 61 6e  e.version 2.8 an
2f20: 64 20 65 61 72 6c 69 65 72 2c 20 61 6c 6c 20 74  d earlier, all t
2f30: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20  ransactions are 
2f40: 65 78 63 6c 75 73 69 76 65 2e 0a 3c 2f 70 3e 0a  exclusive..</p>.
2f50: 0a 3c 70 3e 0a 54 68 65 20 43 4f 4d 4d 49 54 20  .<p>.The COMMIT 
2f60: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
2f70: 20 61 63 74 75 61 6c 6c 79 20 70 65 72 66 6f 72   actually perfor
2f80: 6d 20 61 20 63 6f 6d 6d 69 74 20 75 6e 74 69 6c  m a commit until
2f90: 20 61 6c 6c 0a 70 65 6e 64 69 6e 67 20 53 51 4c   all.pending SQL
2fa0: 20 63 6f 6d 6d 61 6e 64 73 20 66 69 6e 69 73 68   commands finish
2fb0: 2e 20 20 54 68 75 73 20 69 66 20 74 77 6f 20 6f  .  Thus if two o
2fc0: 72 20 6d 6f 72 65 20 53 45 4c 45 43 54 20 73 74  r more SELECT st
2fd0: 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 69 6e 20  atements.are in 
2fe0: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 70 72  the middle of pr
2ff0: 6f 63 65 73 73 69 6e 67 20 61 6e 64 20 61 20 43  ocessing and a C
3000: 4f 4d 4d 49 54 20 69 73 20 65 78 65 63 75 74 65  OMMIT is execute
3010: 64 2c 20 74 68 65 20 63 6f 6d 6d 69 74 0a 77 69  d, the commit.wi
3020: 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  ll not actually 
3030: 6f 63 63 75 72 20 75 6e 74 69 6c 20 61 6c 6c 20  occur until all 
3040: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
3050: 73 20 66 69 6e 69 73 68 2e 0a 3c 2f 70 3e 0a 0a  s finish..</p>..
3060: 3c 70 3e 0a 41 6e 20 61 74 74 65 6d 70 74 20 74  <p>.An attempt t
3070: 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49 54  o execute COMMIT
3080: 20 6d 69 67 68 74 20 72 65 73 75 6c 74 20 69 6e   might result in
3090: 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 20   an SQLITE_BUSY 
30a0: 72 65 74 75 72 6e 20 63 6f 64 65 2e 0a 54 68 69  return code..Thi
30b0: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
30c0: 20 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64 20   another thread 
30d0: 6f 72 20 70 72 6f 63 65 73 73 20 68 61 64 20 61  or process had a
30e0: 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68   read lock on th
30f0: 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20  e database.that 
3100: 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61  prevented the da
3110: 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e  tabase from bein
3120: 67 20 75 70 64 61 74 65 64 2e 20 20 57 68 65 6e  g updated.  When
3130: 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e   COMMIT fails in
3140: 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74   this.way, the t
3150: 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
3160: 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68  ns active and th
3170: 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20  e COMMIT can be 
3180: 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66  retried later.af
3190: 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68  ter the reader h
31a0: 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20  as had a chance 
31b0: 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 7d  to clear..</p>.}
31c0: 0a 0a 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65  ...Section comme
31d0: 6e 74 20 63 6f 6d 6d 65 6e 74 0a 0a 53 79 6e 74  nt comment..Synt
31e0: 61 78 20 7b 63 6f 6d 6d 65 6e 74 7d 20 7b 3c 53  ax {comment} {<S
31f0: 51 4c 2d 63 6f 6d 6d 65 6e 74 3e 20 7c 20 3c 43  QL-comment> | <C
3200: 2d 63 6f 6d 6d 65 6e 74 3e 0a 7d 20 7b 53 51 4c  -comment>.} {SQL
3210: 2d 63 6f 6d 6d 65 6e 74 7d 20 7b 2d 2d 20 3c 73  -comment} {-- <s
3220: 69 6e 67 6c 65 2d 6c 69 6e 65 3e 0a 7d 20 7b 43  ingle-line>.} {C
3230: 2d 63 6f 6d 6d 65 6e 74 7d 20 7b 2f 53 54 41 52  -comment} {/STAR
3240: 20 3c 6d 75 6c 74 69 70 6c 65 2d 6c 69 6e 65 73   <multiple-lines
3250: 3e 20 5b 53 54 41 52 2f 5d 0a 7d 0a 0a 70 75 74  > [STAR/].}..put
3260: 73 20 7b 0a 3c 70 3e 20 43 6f 6d 6d 65 6e 74 73  s {.<p> Comments
3270: 20 61 72 65 6e 27 74 20 53 51 4c 20 63 6f 6d 6d   aren't SQL comm
3280: 61 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63  ands, but can oc
3290: 63 75 72 20 69 6e 20 53 51 4c 20 71 75 65 72 69  cur in SQL queri
32a0: 65 73 2e 20 54 68 65 79 20 61 72 65 20 0a 74 72  es. They are .tr
32b0: 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73 70  eated as whitesp
32c0: 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73 65  ace by the parse
32d0: 72 2e 20 20 54 68 65 79 20 63 61 6e 20 62 65 67  r.  They can beg
32e0: 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  in anywhere whit
32f0: 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66  espace .can be f
3300: 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ound, including 
3310: 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f  inside expressio
3320: 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c  ns that span mul
3330: 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70  tiple lines..</p
3340: 3e 0a 0a 3c 70 3e 20 53 51 4c 20 63 6f 6d 6d 65  >..<p> SQL comme
3350: 6e 74 73 20 6f 6e 6c 79 20 65 78 74 65 6e 64 20  nts only extend 
3360: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
3370: 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 2e 3c  e current line.<
3380: 2f 70 3e 0a 0a 3c 70 3e 20 43 20 63 6f 6d 6d 65  /p>..<p> C comme
3390: 6e 74 73 20 63 61 6e 20 73 70 61 6e 20 61 6e 79  nts can span any
33a0: 20 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 73   number of lines
33b0: 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
33c0: 6f 20 74 65 72 6d 69 6e 61 74 69 6e 67 0a 64 65  o terminating.de
33d0: 6c 69 6d 69 74 65 72 2c 20 74 68 65 79 20 65 78  limiter, they ex
33e0: 74 65 6e 64 20 74 6f 20 74 68 65 20 65 6e 64 20  tend to the end 
33f0: 6f 66 20 74 68 65 20 69 6e 70 75 74 2e 20 20 54  of the input.  T
3400: 68 69 73 20 69 73 20 6e 6f 74 20 74 72 65 61 74  his is not treat
3410: 65 64 20 61 73 0a 61 6e 20 65 72 72 6f 72 2e 20  ed as.an error. 
3420: 20 41 20 6e 65 77 20 53 51 4c 20 73 74 61 74 65   A new SQL state
3430: 6d 65 6e 74 20 63 61 6e 20 62 65 67 69 6e 20 6f  ment can begin o
3440: 6e 20 61 20 6c 69 6e 65 20 61 66 74 65 72 20 61  n a line after a
3450: 20 6d 75 6c 74 69 6c 69 6e 65 0a 63 6f 6d 6d 65   multiline.comme
3460: 6e 74 20 65 6e 64 73 2e 20 20 43 20 63 6f 6d 6d  nt ends.  C comm
3470: 65 6e 74 73 20 63 61 6e 20 62 65 20 65 6d 62 65  ents can be embe
3480: 64 64 65 64 20 61 6e 79 77 68 65 72 65 20 77 68  dded anywhere wh
3490: 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63  itespace can occ
34a0: 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e  ur,.including in
34b0: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
34c0: 2c 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64  , and in the mid
34d0: 64 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c  dle of other SQL
34e0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 43 20 63   statements..C c
34f0: 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e  omments do not n
3500: 65 73 74 2e 20 20 53 51 4c 20 63 6f 6d 6d 65 6e  est.  SQL commen
3510: 74 73 20 69 6e 73 69 64 65 20 61 20 43 20 63 6f  ts inside a C co
3520: 6d 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20 69 67  mment will be ig
3530: 6e 6f 72 65 64 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 0a  nored..</p>.}...
3540: 53 65 63 74 69 6f 6e 20 43 4f 50 59 20 63 6f 70  Section COPY cop
3550: 79 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  y..Syntax {sql-s
3560: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 4f 50 59  tatement} {.COPY
3570: 20 5b 20 4f 52 20 3c 63 6f 6e 66 6c 69 63 74 2d   [ OR <conflict-
3580: 61 6c 67 6f 72 69 74 68 6d 3e 20 5d 20 5b 3c 64  algorithm> ] [<d
3590: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d  atabase-name> .]
35a0: 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 46 52   <table-name> FR
35b0: 4f 4d 20 3c 66 69 6c 65 6e 61 6d 65 3e 0a 5b 20  OM <filename>.[ 
35c0: 55 53 49 4e 47 20 44 45 4c 49 4d 49 54 45 52 53  USING DELIMITERS
35d0: 20 3c 64 65 6c 69 6d 3e 20 5d 0a 7d 0a 0a 70 75   <delim> ].}..pu
35e0: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 43 4f 50 59  ts {.<p>The COPY
35f0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61 69   command is avai
3600: 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20  lable in SQLite 
3610: 76 65 72 73 69 6f 6e 20 32 2e 38 20 61 6e 64 20  version 2.8 and 
3620: 65 61 72 6c 69 65 72 2e 0a 54 68 65 20 43 4f 50  earlier..The COP
3630: 59 20 63 6f 6d 6d 61 6e 64 20 68 61 73 20 62 65  Y command has be
3640: 65 6e 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  en removed from 
3650: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
3660: 2e 30 20 64 75 65 20 74 6f 0a 63 6f 6d 70 6c 69  .0 due to.compli
3670: 63 61 74 69 6f 6e 73 20 69 6e 20 74 72 79 69 6e  cations in tryin
3680: 67 20 74 6f 20 73 75 70 70 6f 72 74 20 69 74 20  g to support it 
3690: 69 6e 20 61 20 6d 69 78 65 64 20 55 54 46 2d 38  in a mixed UTF-8
36a0: 2f 31 36 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e  /16 environment.
36b0: 0a 49 6e 20 76 65 72 73 69 6f 6e 20 33 2e 30 2c  .In version 3.0,
36c0: 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 73 71   the <a href="sq
36d0: 6c 69 74 65 2e 68 74 6d 6c 22 3e 63 6f 6d 6d 61  lite.html">comma
36e0: 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 3c 2f 61  nd-line shell</a
36f0: 3e 0a 63 6f 6e 74 61 69 6e 73 20 61 20 6e 65 77  >.contains a new
3700: 20 63 6f 6d 6d 61 6e 64 20 3c 62 3e 2e 69 6d 70   command <b>.imp
3710: 6f 72 74 3c 2f 62 3e 20 74 68 61 74 20 63 61 6e  ort</b> that can
3720: 20 62 65 20 75 73 65 64 20 61 73 20 61 20 73 75   be used as a su
3730: 62 73 74 69 74 75 74 65 0a 66 6f 72 20 43 4f 50  bstitute.for COP
3740: 59 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  Y..</p>..<p>The 
3750: 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 20 69 73 20  COPY command is 
3760: 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 75 73 65  an extension use
3770: 64 20 74 6f 20 6c 6f 61 64 20 6c 61 72 67 65 20  d to load large 
3780: 61 6d 6f 75 6e 74 73 20 6f 66 0a 64 61 74 61 20  amounts of.data 
3790: 69 6e 74 6f 20 61 20 74 61 62 6c 65 2e 20 20 49  into a table.  I
37a0: 74 20 69 73 20 6d 6f 64 65 6c 65 64 20 61 66 74  t is modeled aft
37b0: 65 72 20 61 20 73 69 6d 69 6c 61 72 20 63 6f 6d  er a similar com
37c0: 6d 61 6e 64 20 66 6f 75 6e 64 0a 69 6e 20 50 6f  mand found.in Po
37d0: 73 74 67 72 65 53 51 4c 2e 20 20 49 6e 20 66 61  stgreSQL.  In fa
37e0: 63 74 2c 20 74 68 65 20 53 51 4c 69 74 65 20 43  ct, the SQLite C
37f0: 4f 50 59 20 63 6f 6d 6d 61 6e 64 20 69 73 20 73  OPY command is s
3800: 70 65 63 69 66 69 63 61 6c 6c 79 0a 64 65 73 69  pecifically.desi
3810: 67 6e 65 64 20 74 6f 20 62 65 20 61 62 6c 65 20  gned to be able 
3820: 74 6f 20 72 65 61 64 20 74 68 65 20 6f 75 74 70  to read the outp
3830: 75 74 20 6f 66 20 74 68 65 20 50 6f 73 74 67 72  ut of the Postgr
3840: 65 53 51 4c 20 64 75 6d 70 0a 75 74 69 6c 69 74  eSQL dump.utilit
3850: 79 20 3c 62 3e 70 67 5f 64 75 6d 70 3c 2f 62 3e  y <b>pg_dump</b>
3860: 20 73 6f 20 74 68 61 74 20 64 61 74 61 20 63 61   so that data ca
3870: 6e 20 62 65 20 65 61 73 69 6c 79 20 74 72 61 6e  n be easily tran
3880: 73 66 65 72 72 65 64 20 66 72 6f 6d 0a 50 6f 73  sferred from.Pos
3890: 74 67 72 65 53 51 4c 20 69 6e 74 6f 20 53 51 4c  tgreSQL into SQL
38a0: 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ite.</p>..<p>The
38b0: 20 74 61 62 6c 65 2d 6e 61 6d 65 20 69 73 20 74   table-name is t
38c0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 65 78  he name of an ex
38d0: 69 73 74 69 6e 67 20 74 61 62 6c 65 20 77 68 69  isting table whi
38e0: 63 68 20 69 73 20 74 6f 0a 62 65 20 66 69 6c 6c  ch is to.be fill
38f0: 65 64 20 77 69 74 68 20 64 61 74 61 2e 20 20 54  ed with data.  T
3900: 68 65 20 66 69 6c 65 6e 61 6d 65 20 69 73 20 61  he filename is a
3910: 20 73 74 72 69 6e 67 20 6f 72 20 69 64 65 6e 74   string or ident
3920: 69 66 69 65 72 20 74 68 61 74 0a 6e 61 6d 65 73  ifier that.names
3930: 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 77 68 69   a file from whi
3940: 63 68 20 64 61 74 61 20 77 69 6c 6c 20 62 65 20  ch data will be 
3950: 72 65 61 64 2e 20 20 54 68 65 20 66 69 6c 65 6e  read.  The filen
3960: 61 6d 65 20 63 61 6e 20 62 65 0a 74 68 65 20 3c  ame can be.the <
3970: 62 3e 53 54 44 49 4e 3c 2f 62 3e 20 74 6f 20 72  b>STDIN</b> to r
3980: 65 61 64 20 64 61 74 61 20 66 72 6f 6d 20 73 74  ead data from st
3990: 61 6e 64 61 72 64 20 69 6e 70 75 74 2e 3c 2f 70  andard input.</p
39a0: 3e 0a 0a 3c 70 3e 45 61 63 68 20 6c 69 6e 65 20  >..<p>Each line 
39b0: 6f 66 20 74 68 65 20 69 6e 70 75 74 20 66 69 6c  of the input fil
39c0: 65 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  e is converted i
39d0: 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 65 63  nto a single rec
39e0: 6f 72 64 0a 69 6e 20 74 68 65 20 74 61 62 6c 65  ord.in the table
39f0: 2e 20 20 43 6f 6c 75 6d 6e 73 20 61 72 65 20 73  .  Columns are s
3a00: 65 70 61 72 61 74 65 64 20 62 79 20 74 61 62 73  eparated by tabs
3a10: 2e 20 20 49 66 20 61 20 74 61 62 20 6f 63 63 75  .  If a tab occu
3a20: 72 73 20 61 73 0a 64 61 74 61 20 77 69 74 68 69  rs as.data withi
3a30: 6e 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e  n a column, then
3a40: 20 74 68 61 74 20 74 61 62 20 69 73 20 70 72 65   that tab is pre
3a50: 63 65 64 65 64 20 62 79 20 61 20 62 61 73 6b 73  ceded by a basks
3a60: 6c 61 73 68 20 22 5c 22 0a 63 68 61 72 61 63 74  lash "\".charact
3a70: 65 72 2e 20 20 41 20 62 61 73 6b 73 6c 61 73 68  er.  A baskslash
3a80: 20 69 6e 20 74 68 65 20 64 61 74 61 20 61 70 70   in the data app
3a90: 65 61 72 73 20 61 73 20 74 77 6f 20 62 61 63 6b  ears as two back
3aa0: 73 6c 61 73 68 65 73 20 69 6e 0a 61 20 72 6f 77  slashes in.a row
3ab0: 2e 20 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  .  The optional 
3ac0: 55 53 49 4e 47 20 44 45 4c 49 4d 49 54 45 52 53  USING DELIMITERS
3ad0: 20 63 6c 61 75 73 65 20 63 61 6e 20 73 70 65 63   clause can spec
3ae0: 69 66 79 20 61 20 64 65 6c 69 6d 69 74 65 72 0a  ify a delimiter.
3af0: 6f 74 68 65 72 20 74 68 61 6e 20 74 61 62 2e 3c  other than tab.<
3b00: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 63 6f 6c  /p>..<p>If a col
3b10: 75 6d 6e 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  umn consists of 
3b20: 74 68 65 20 63 68 61 72 61 63 74 65 72 20 22 5c  the character "\
3b30: 4e 22 2c 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  N", that column 
3b40: 69 73 20 66 69 6c 6c 65 64 0a 77 69 74 68 20 74  is filled.with t
3b50: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 2e 3c 2f  he value NULL.</
3b60: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f  p>..<p>The optio
3b70: 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
3b80: 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
3b90: 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
3ba0: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
3bb0: 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
3bc0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
3bd0: 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 66  gorithm to use f
3be0: 6f 72 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d  or this one comm
3bf0: 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63  and..See the sec
3c00: 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68  tion titled.<a h
3c10: 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e  ref="#conflict">
3c20: 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20  ON CONFLICT</a> 
3c30: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
3c40: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  nformation.</p>.
3c50: 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 69 6e 70  .<p>When the inp
3c60: 75 74 20 64 61 74 61 20 73 6f 75 72 63 65 20 69  ut data source i
3c70: 73 20 53 54 44 49 4e 2c 20 74 68 65 20 69 6e 70  s STDIN, the inp
3c80: 75 74 20 63 61 6e 20 62 65 20 74 65 72 6d 69 6e  ut can be termin
3c90: 61 74 65 64 0a 62 79 20 61 20 6c 69 6e 65 20 74  ated.by a line t
3ca0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c  hat contains onl
3cb0: 79 20 61 20 62 61 73 6b 73 6c 61 73 68 20 61 6e  y a baskslash an
3cc0: 64 20 61 20 64 6f 74 3a 7d 0a 70 75 74 73 20 22  d a dot:}.puts "
3cd0: 5c 22 5b 4f 70 65 72 61 74 6f 72 20 5c 5c 2e 5d  \"[Operator \\.]
3ce0: 5c 22 2e 3c 2f 70 3e 22 0a 0a 0a 53 65 63 74 69  \".</p>"...Secti
3cf0: 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58  on {CREATE INDEX
3d00: 7d 20 63 72 65 61 74 65 69 6e 64 65 78 0a 0a 53  } createindex..S
3d10: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
3d20: 6d 65 6e 74 7d 20 7b 0a 43 52 45 41 54 45 20 5b  ment} {.CREATE [
3d30: 55 4e 49 51 55 45 5d 20 49 4e 44 45 58 20 5b 49  UNIQUE] INDEX [I
3d40: 46 20 4e 4f 54 20 45 58 49 53 54 53 5d 20 5b 3c  F NOT EXISTS] [<
3d50: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
3d60: 5d 20 3c 69 6e 64 65 78 2d 6e 61 6d 65 3e 20 0a  ] <index-name> .
3d70: 4f 4e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20  ON <table-name> 
3d80: 28 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e 20  ( <column-name> 
3d90: 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e  [, <column-name>
3da0: 5d 2a 20 29 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 6e  ]* ).} {column-n
3db0: 61 6d 65 7d 20 7b 0a 3c 6e 61 6d 65 3e 20 5b 20  ame} {.<name> [ 
3dc0: 43 4f 4c 4c 41 54 45 20 3c 63 6f 6c 6c 61 74 69  COLLATE <collati
3dd0: 6f 6e 2d 6e 61 6d 65 3e 5d 20 5b 20 41 53 43 20  on-name>] [ ASC 
3de0: 7c 20 44 45 53 43 20 5d 0a 7d 0a 0a 70 75 74 73  | DESC ].}..puts
3df0: 20 7b 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45   {.<p>The CREATE
3e00: 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63   INDEX command c
3e10: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b  onsists of the k
3e20: 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20  eywords "CREATE 
3e30: 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a  INDEX" followed.
3e40: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
3e50: 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68  he new index, th
3e60: 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20  e keyword "ON", 
3e70: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72  the name of a pr
3e80: 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64  eviously.created
3e90: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 74   table that is t
3ea0: 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e  o be indexed, an
3eb0: 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  d a parenthesize
3ec0: 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73 20  d list of names 
3ed0: 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of.columns in th
3ee0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
3ef0: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e   used for the in
3f00: 64 65 78 20 6b 65 79 2e 0a 45 61 63 68 20 63 6f  dex key..Each co
3f10: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65  lumn name can be
3f20: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65   followed by one
3f30: 20 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f 72   of the "ASC" or
3f40: 20 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73   "DESC" keywords
3f50: 0a 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72  .to indicate sor
3f60: 74 20 6f 72 64 65 72 2c 20 62 75 74 20 74 68 65  t order, but the
3f70: 20 73 6f 72 74 20 6f 72 64 65 72 20 69 73 20 69   sort order is i
3f80: 67 6e 6f 72 65 64 20 69 6e 20 74 68 65 20 63 75  gnored in the cu
3f90: 72 72 65 6e 74 0a 69 6d 70 6c 65 6d 65 6e 74 61  rrent.implementa
3fa0: 74 69 6f 6e 2e 20 20 53 6f 72 74 69 6e 67 20 69  tion.  Sorting i
3fb0: 73 20 61 6c 77 61 79 73 20 64 6f 6e 65 20 69 6e  s always done in
3fc0: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
3fd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 43 4f  .</p>..<p>The CO
3fe0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 66 6f 6c  LLATE clause fol
3ff0: 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6c 75  lowing each colu
4000: 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e 65 73 20  mn name defines 
4010: 61 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75  a collating.sequ
4020: 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20 74 65  ence used for te
4030: 78 74 20 65 6e 74 69 72 65 73 20 69 6e 20 74 68  xt entires in th
4040: 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 20  at column.  The 
4050: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
4060: 67 0a 73 65 71 75 65 6e 63 65 20 69 73 20 74 68  g.sequence is th
4070: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
4080: 65 6e 63 65 20 64 65 66 69 6e 65 64 20 66 6f 72  ence defined for
4090: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20   that column in 
40a0: 74 68 65 0a 43 52 45 41 54 45 20 54 41 42 4c 45  the.CREATE TABLE
40b0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 20   statement.  Or 
40c0: 69 66 20 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20  if no collating 
40d0: 73 65 71 75 65 6e 63 65 20 69 73 20 6f 74 68 65  sequence is othe
40e0: 72 77 69 73 65 20 64 65 66 69 6e 65 64 2c 0a 74  rwise defined,.t
40f0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41  he built-in BINA
4100: 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  RY collating seq
4110: 75 65 6e 63 65 20 69 73 20 75 73 65 64 2e 3c 2f  uence is used.</
4120: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  p>..<p>There are
4130: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69   no arbitrary li
4140: 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62  mits on the numb
4150: 65 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68  er of indices th
4160: 61 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68  at can be.attach
4170: 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74  ed to a single t
4180: 61 62 6c 65 2c 20 6e 6f 72 20 6f 6e 20 74 68 65  able, nor on the
4190: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
41a0: 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 3c  ns in an index.<
41b0: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 55  /p>..<p>If the U
41c0: 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70  NIQUE keyword ap
41d0: 70 65 61 72 73 20 62 65 74 77 65 65 6e 20 43 52  pears between CR
41e0: 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74  EATE and INDEX t
41f0: 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e  hen duplicate.in
4200: 64 65 78 20 65 6e 74 72 69 65 73 20 61 72 65 20  dex entries are 
4210: 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20 41 6e  not allowed.  An
4220: 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73  y attempt to ins
4230: 65 72 74 20 61 20 64 75 70 6c 69 63 61 74 65 20  ert a duplicate 
4240: 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75 6c  entry.will resul
4250: 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 3c 2f  t in an error.</
4260: 70 3e 0a 0a 3c 70 3e 54 68 65 20 65 78 61 63 74  p>..<p>The exact
4270: 20 74 65 78 74 0a 6f 66 20 65 61 63 68 20 43 52   text.of each CR
4280: 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
4290: 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69  ment is stored i
42a0: 6e 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f  n the <b>sqlite_
42b0: 6d 61 73 74 65 72 3c 2f 62 3e 0a 6f 72 20 3c 62  master</b>.or <b
42c0: 3e 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  >sqlite_temp_mas
42d0: 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 2c 20 64  ter</b> table, d
42e0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
42f0: 68 65 72 20 74 68 65 20 74 61 62 6c 65 0a 62 65  her the table.be
4300: 69 6e 67 20 69 6e 64 65 78 65 64 20 69 73 20 74  ing indexed is t
4310: 65 6d 70 6f 72 61 72 79 2e 20 20 45 76 65 72 79  emporary.  Every
4320: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
4330: 73 65 20 69 73 20 6f 70 65 6e 65 64 2c 0a 61 6c  se is opened,.al
4340: 6c 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  l CREATE INDEX s
4350: 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 72 65  tatements.are re
4360: 61 64 20 66 72 6f 6d 20 74 68 65 20 3c 62 3e 73  ad from the <b>s
4370: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e  qlite_master</b>
4380: 20 74 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20   table and used 
4390: 74 6f 20 72 65 67 65 6e 65 72 61 74 65 0a 53 51  to regenerate.SQ
43a0: 4c 69 74 65 27 73 20 69 6e 74 65 72 6e 61 6c 20  Lite's internal 
43b0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
43c0: 66 20 74 68 65 20 69 6e 64 65 78 20 6c 61 79 6f  f the index layo
43d0: 75 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74  ut.</p>..<p>If t
43e0: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e  he optional IF N
43f0: 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  OT EXISTS clause
4400: 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20   is present and 
4410: 61 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69  another index.wi
4420: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
4430: 20 61 6c 65 61 64 79 20 65 78 69 73 74 73 2c 20   aleady exists, 
4440: 74 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e  then this comman
4450: 64 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  d becomes a no-o
4460: 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 64 65 78  p.</p>..<p>Index
4470: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77  es are removed w
4480: 69 74 68 20 74 68 65 20 3c 61 20 68 72 65 66 3d  ith the <a href=
4490: 22 23 64 72 6f 70 69 6e 64 65 78 22 3e 44 52 4f  "#dropindex">DRO
44a0: 50 20 49 4e 44 45 58 3c 2f 61 3e 20 0a 63 6f 6d  P INDEX</a> .com
44b0: 6d 61 6e 64 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65  mand.</p>.}...Se
44c0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 41  ction {CREATE TA
44d0: 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62 6c  BLE} {createtabl
44e0: 65 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  e}..Syntax {sql-
44f0: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43 52 45 41 54  command} {.CREAT
4500: 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f 52  E [TEMP | TEMPOR
4510: 41 52 59 5d 20 54 41 42 4c 45 20 5b 49 46 20 4e  ARY] TABLE [IF N
4520: 4f 54 20 45 58 49 53 54 53 5d 20 5b 3c 64 61 74  OT EXISTS] [<dat
4530: 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c  abase-name> .] <
4540: 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 28 0a 20 20  table-name> (.  
4550: 3c 63 6f 6c 75 6d 6e 2d 64 65 66 3e 20 5b 2c 20  <column-def> [, 
4560: 3c 63 6f 6c 75 6d 6e 2d 64 65 66 3e 5d 2a 0a 20  <column-def>]*. 
4570: 20 5b 2c 20 3c 63 6f 6e 73 74 72 61 69 6e 74 3e   [, <constraint>
4580: 5d 2a 0a 29 0a 7d 20 7b 73 71 6c 2d 63 6f 6d 6d  ]*.).} {sql-comm
4590: 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54  and} {.CREATE [T
45a0: 45 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d  EMP | TEMPORARY]
45b0: 20 54 41 42 4c 45 20 5b 3c 64 61 74 61 62 61 73   TABLE [<databas
45c0: 65 2d 6e 61 6d 65 3e 2e 5d 20 3c 74 61 62 6c 65  e-name>.] <table
45d0: 2d 6e 61 6d 65 3e 20 41 53 20 3c 73 65 6c 65 63  -name> AS <selec
45e0: 74 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 20 7b  t-statement>.} {
45f0: 63 6f 6c 75 6d 6e 2d 64 65 66 7d 20 7b 0a 3c 6e  column-def} {.<n
4600: 61 6d 65 3e 20 5b 3c 74 79 70 65 3e 5d 20 5b 5b  ame> [<type>] [[
4610: 43 4f 4e 53 54 52 41 49 4e 54 20 3c 6e 61 6d 65  CONSTRAINT <name
4620: 3e 5d 20 3c 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74  >] <column-const
4630: 72 61 69 6e 74 3e 5d 2a 0a 7d 20 7b 74 79 70 65  raint>]*.} {type
4640: 7d 20 7b 0a 3c 74 79 70 65 6e 61 6d 65 3e 20 7c  } {.<typename> |
4650: 0a 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20 3c 6e  .<typename> ( <n
4660: 75 6d 62 65 72 3e 20 29 20 7c 0a 3c 74 79 70 65  umber> ) |.<type
4670: 6e 61 6d 65 3e 20 28 20 3c 6e 75 6d 62 65 72 3e  name> ( <number>
4680: 20 2c 20 3c 6e 75 6d 62 65 72 3e 20 29 0a 7d 20   , <number> ).} 
4690: 7b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  {column-constrai
46a0: 6e 74 7d 20 7b 0a 4e 4f 54 20 4e 55 4c 4c 20 5b  nt} {.NOT NULL [
46b0: 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   <conflict-claus
46c0: 65 3e 20 5d 20 7c 0a 50 52 49 4d 41 52 59 20 4b  e> ] |.PRIMARY K
46d0: 45 59 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e  EY [<sort-order>
46e0: 5d 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c  ] [ <conflict-cl
46f0: 61 75 73 65 3e 20 5d 20 5b 41 55 54 4f 49 4e 43  ause> ] [AUTOINC
4700: 52 45 4d 45 4e 54 5d 20 7c 0a 55 4e 49 51 55 45  REMENT] |.UNIQUE
4710: 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   [ <conflict-cla
4720: 75 73 65 3e 20 5d 20 7c 0a 43 48 45 43 4b 20 28  use> ] |.CHECK (
4730: 20 3c 65 78 70 72 3e 20 29 20 7c 0a 44 45 46 41   <expr> ) |.DEFA
4740: 55 4c 54 20 3c 76 61 6c 75 65 3e 20 7c 0a 43 4f  ULT <value> |.CO
4750: 4c 4c 41 54 45 20 3c 63 6f 6c 6c 61 74 69 6f 6e  LLATE <collation
4760: 2d 6e 61 6d 65 3e 0a 7d 20 7b 63 6f 6e 73 74 72  -name>.} {constr
4770: 61 69 6e 74 7d 20 7b 0a 50 52 49 4d 41 52 59 20  aint} {.PRIMARY 
4780: 4b 45 59 20 28 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  KEY ( <column-li
4790: 73 74 3e 20 29 20 5b 20 3c 63 6f 6e 66 6c 69 63  st> ) [ <conflic
47a0: 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 55 4e  t-clause> ] |.UN
47b0: 49 51 55 45 20 28 20 3c 63 6f 6c 75 6d 6e 2d 6c  IQUE ( <column-l
47c0: 69 73 74 3e 20 29 20 5b 20 3c 63 6f 6e 66 6c 69  ist> ) [ <confli
47d0: 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 43  ct-clause> ] |.C
47e0: 48 45 43 4b 20 28 20 3c 65 78 70 72 3e 20 29 0a  HECK ( <expr> ).
47f0: 7d 20 7b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  } {conflict-clau
4800: 73 65 7d 20 7b 0a 4f 4e 20 43 4f 4e 46 4c 49 43  se} {.ON CONFLIC
4810: 54 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f  T <conflict-algo
4820: 72 69 74 68 6d 3e 0a 7d 0a 0a 70 75 74 73 20 7b  rithm>.}..puts {
4830: 0a 3c 70 3e 41 20 43 52 45 41 54 45 20 54 41 42  .<p>A CREATE TAB
4840: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
4850: 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20 6b 65  basically the ke
4860: 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 54  ywords "CREATE T
4870: 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64 20 62  ABLE".followed b
4880: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  y the name of a 
4890: 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20 61 20  new table and a 
48a0: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
48b0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65 66  st of column.def
48c0: 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6e  initions and con
48d0: 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65 20 74  straints.  The t
48e0: 61 62 6c 65 20 6e 61 6d 65 20 63 61 6e 20 62 65  able name can be
48f0: 20 65 69 74 68 65 72 20 61 6e 20 69 64 65 6e 74   either an ident
4900: 69 66 69 65 72 0a 6f 72 20 61 20 73 74 72 69 6e  ifier.or a strin
4910: 67 2e 20 20 54 61 62 6c 65 73 20 6e 61 6d 65 73  g.  Tables names
4920: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
4930: 20 22 3c 62 3e 73 71 6c 69 74 65 5f 3c 2f 62 3e   "<b>sqlite_</b>
4940: 22 20 61 72 65 20 72 65 73 65 72 76 65 64 0a 66  " are reserved.f
4950: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 65 6e  or use by the en
4960: 67 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  gine.</p>..<p>Ea
4970: 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  ch column defini
4980: 74 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65  tion is the name
4990: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66   of the column f
49a0: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 64  ollowed by the.d
49b0: 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 61 74  atatype for that
49c0: 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 6f 6e   column, then on
49d0: 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e  e or more option
49e0: 61 6c 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  al column constr
49f0: 61 69 6e 74 73 2e 0a 54 68 65 20 64 61 74 61 74  aints..The datat
4a00: 79 70 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ype for the colu
4a10: 6d 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74  mn does not rest
4a20: 72 69 63 74 20 77 68 61 74 20 64 61 74 61 20 6d  rict what data m
4a30: 61 79 20 62 65 20 70 75 74 0a 69 6e 20 74 68 61  ay be put.in tha
4a40: 74 20 63 6f 6c 75 6d 6e 2e 0a 53 65 65 20 3c 61  t column..See <a
4a50: 20 68 72 65 66 3d 22 64 61 74 61 74 79 70 65 33   href="datatype3
4a60: 2e 68 74 6d 6c 22 3e 44 61 74 61 74 79 70 65 73  .html">Datatypes
4a70: 20 49 6e 20 53 51 4c 69 74 65 20 56 65 72 73 69   In SQLite Versi
4a80: 6f 6e 20 33 3c 2f 61 3e 20 66 6f 72 0a 61 64 64  on 3</a> for.add
4a90: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
4aa0: 69 6f 6e 2e 0a 54 68 65 20 55 4e 49 51 55 45 20  ion..The UNIQUE 
4ab0: 63 6f 6e 73 74 72 61 69 6e 74 20 63 61 75 73 65  constraint cause
4ac0: 73 20 61 6e 20 69 6e 64 65 78 20 74 6f 20 62 65  s an index to be
4ad0: 20 63 72 65 61 74 65 64 20 6f 6e 20 74 68 65 20   created on the 
4ae0: 73 70 65 63 69 66 69 65 64 0a 63 6f 6c 75 6d 6e  specified.column
4af0: 73 2e 20 20 54 68 69 73 20 69 6e 64 65 78 20 6d  s.  This index m
4b00: 75 73 74 20 63 6f 6e 74 61 69 6e 20 75 6e 69 71  ust contain uniq
4b10: 75 65 20 6b 65 79 73 2e 0a 54 68 65 20 43 4f 4c  ue keys..The COL
4b20: 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70 65 63  LATE clause spec
4b30: 69 66 69 65 73 20 77 68 61 74 20 74 65 78 74 20  ifies what text 
4b40: 3c 61 20 68 72 65 66 3d 22 64 61 74 61 74 79 70  <a href="datatyp
4b50: 65 33 2e 68 74 6d 6c 23 63 6f 6c 6c 61 74 69 6f  e3.html#collatio
4b60: 6e 22 3e 0a 63 6f 6c 6c 61 74 69 6e 67 20 66 75  n">.collating fu
4b70: 6e 63 74 69 6f 6e 3c 2f 61 3e 20 74 6f 20 75 73  nction</a> to us
4b80: 65 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  e when comparing
4b90: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 66 6f   text entries fo
4ba0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 0a  r the column.  .
4bb0: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e  The built-in BIN
4bc0: 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
4bd0: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 62  nction is used b
4be0: 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a 54  y default..<p>.T
4bf0: 68 65 20 44 45 46 41 55 4c 54 20 63 6f 6e 73 74  he DEFAULT const
4c00: 72 61 69 6e 74 20 73 70 65 63 69 66 69 65 73 20  raint specifies 
4c10: 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  a default value 
4c20: 74 6f 20 75 73 65 20 77 68 65 6e 20 64 6f 69 6e  to use when doin
4c30: 67 20 61 6e 20 49 4e 53 45 52 54 2e 0a 54 68 65  g an INSERT..The
4c40: 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 4e 55   value may be NU
4c50: 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  LL, a string con
4c60: 73 74 61 6e 74 20 6f 72 20 61 20 6e 75 6d 62 65  stant or a numbe
4c70: 72 2e 20 53 74 61 72 74 69 6e 67 20 77 69 74 68  r. Starting with
4c80: 20 76 65 72 73 69 6f 6e 0a 33 2e 31 2e 30 2c 20   version.3.1.0, 
4c90: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
4ca0: 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e  e may also be on
4cb0: 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c  e of the special
4cc0: 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 61 6e   case-independan
4cd0: 74 0a 6b 65 79 77 6f 72 64 73 20 43 55 52 52 45  t.keywords CURRE
4ce0: 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54  NT_TIME, CURRENT
4cf0: 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54  _DATE or CURRENT
4d00: 5f 54 49 4d 45 53 54 41 4d 50 2e 20 49 66 20 74  _TIMESTAMP. If t
4d10: 68 65 20 76 61 6c 75 65 20 69 73 0a 4e 55 4c 4c  he value is.NULL
4d20: 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74  , a string const
4d30: 61 6e 74 20 6f 72 20 6e 75 6d 62 65 72 2c 20 69  ant or number, i
4d40: 74 20 69 73 20 6c 69 74 65 72 61 6c 6c 79 20 69  t is literally i
4d50: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
4d60: 20 63 6f 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72   column.whenever
4d70: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
4d80: 6d 65 6e 74 20 74 68 61 74 20 64 6f 65 73 20 6e  ment that does n
4d90: 6f 74 20 73 70 65 63 69 66 79 20 61 20 76 61 6c  ot specify a val
4da0: 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ue for the colum
4db0: 6e 20 69 73 0a 65 78 65 63 75 74 65 64 2e 20 49  n is.executed. I
4dc0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 43  f the value is C
4dd0: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
4de0: 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52  RENT_DATE or CUR
4df0: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20  RENT_TIMESTAMP, 
4e00: 74 68 65 6e 0a 74 68 65 20 63 75 72 72 65 6e 74  then.the current
4e10: 20 55 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72   UTC date and/or
4e20: 20 74 69 6d 65 20 69 73 20 69 6e 73 65 72 74 65   time is inserte
4e30: 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d  d into the colum
4e40: 6e 73 2e 20 46 6f 72 0a 43 55 52 52 45 4e 54 5f  ns. For.CURRENT_
4e50: 54 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74  TIME, the format
4e60: 20 69 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 46 6f   is HH:MM:SS. Fo
4e70: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
4e80: 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 54 68 65 20  YYYY-MM-DD. The 
4e90: 66 6f 72 6d 61 74 0a 66 6f 72 20 43 55 52 52 45  format.for CURRE
4ea0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20  NT_TIMESTAMP is 
4eb0: 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  "YYYY-MM-DD HH:M
4ec0: 4d 3a 53 53 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  M:SS"..</p>..<p>
4ed0: 53 70 65 63 69 66 79 69 6e 67 20 61 20 50 52 49  Specifying a PRI
4ee0: 4d 41 52 59 20 4b 45 59 20 6e 6f 72 6d 61 6c 6c  MARY KEY normall
4ef0: 79 20 6a 75 73 74 20 63 72 65 61 74 65 73 20 61  y just creates a
4f00: 20 55 4e 49 51 55 45 20 69 6e 64 65 78 0a 6f 6e   UNIQUE index.on
4f10: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
4f20: 6e 67 20 63 6f 6c 75 6d 6e 73 2e 20 20 48 6f 77  ng columns.  How
4f30: 65 76 65 72 2c 20 69 66 20 70 72 69 6d 61 72 79  ever, if primary
4f40: 20 6b 65 79 20 69 73 20 6f 6e 20 61 20 73 69 6e   key is on a sin
4f50: 67 6c 65 20 63 6f 6c 75 6d 6e 0a 74 68 61 74 20  gle column.that 
4f60: 68 61 73 20 64 61 74 61 74 79 70 65 20 49 4e 54  has datatype INT
4f70: 45 47 45 52 2c 20 74 68 65 6e 20 74 68 61 74 20  EGER, then that 
4f80: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 69  column is used i
4f90: 6e 74 65 72 6e 61 6c 6c 79 0a 61 73 20 74 68 65  nternally.as the
4fa0: 20 61 63 74 75 61 6c 20 6b 65 79 20 6f 66 20 74   actual key of t
4fb0: 68 65 20 42 2d 54 72 65 65 20 66 6f 72 20 74 68  he B-Tree for th
4fc0: 65 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6d  e table.  This m
4fd0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f  eans that the co
4fe0: 6c 75 6d 6e 0a 6d 61 79 20 6f 6e 6c 79 20 68 6f  lumn.may only ho
4ff0: 6c 64 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ld unique intege
5000: 72 20 76 61 6c 75 65 73 2e 20 20 28 45 78 63 65  r values.  (Exce
5010: 70 74 20 66 6f 72 20 74 68 69 73 20 6f 6e 65 20  pt for this one 
5020: 63 61 73 65 2c 0a 53 51 4c 69 74 65 20 69 67 6e  case,.SQLite ign
5030: 6f 72 65 73 20 74 68 65 20 64 61 74 61 74 79 70  ores the datatyp
5040: 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
5050: 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 61  of columns and a
5060: 6c 6c 6f 77 73 0a 61 6e 79 20 6b 69 6e 64 20 6f  llows.any kind o
5070: 66 20 64 61 74 61 20 74 6f 20 62 65 20 70 75 74  f data to be put
5080: 20 69 6e 20 61 20 63 6f 6c 75 6d 6e 20 72 65 67   in a column reg
5090: 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 64  ardless of its d
50a0: 65 63 6c 61 72 65 64 0a 64 61 74 61 74 79 70 65  eclared.datatype
50b0: 2e 29 20 20 49 66 20 61 20 74 61 62 6c 65 20 64  .)  If a table d
50c0: 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 20  oes not have an 
50d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
50e0: 4b 45 59 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e  KEY column,.then
50f0: 20 74 68 65 20 42 2d 54 72 65 65 20 6b 65 79 20   the B-Tree key 
5100: 77 69 6c 6c 20 62 65 20 61 20 61 75 74 6f 6d 61  will be a automa
5110: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
5120: 64 20 69 6e 74 65 67 65 72 2e 20 20 54 68 65 0a  d integer.  The.
5130: 42 2d 54 72 65 65 20 6b 65 79 20 66 6f 72 20 61  B-Tree key for a
5140: 20 72 6f 77 20 63 61 6e 20 61 6c 77 61 79 73 20   row can always 
5150: 62 65 20 61 63 63 65 73 73 65 64 20 75 73 69 6e  be accessed usin
5160: 67 20 6f 6e 65 20 6f 66 20 74 68 65 0a 73 70 65  g one of the.spe
5170: 63 69 61 6c 20 6e 61 6d 65 73 20 22 3c 62 3e 52  cial names "<b>R
5180: 4f 57 49 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f  OWID</b>", "<b>O
5190: 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e  ID</b>", or "<b>
51a0: 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 54 68  _ROWID_</b>"..Th
51b0: 69 73 20 69 73 20 74 72 75 65 20 72 65 67 61 72  is is true regar
51c0: 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
51d0: 20 6f 72 20 6e 6f 74 20 74 68 65 72 65 20 69 73   or not there is
51e0: 20 61 6e 20 49 4e 54 45 47 45 52 0a 50 52 49 4d   an INTEGER.PRIM
51f0: 41 52 59 20 4b 45 59 2e 20 20 41 6e 20 49 4e 54  ARY KEY.  An INT
5200: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
5210: 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 61 6c 73 6f   column can also
5220: 20 69 6e 63 6c 75 64 65 20 74 68 65 0a 6b 65 79   include the.key
5230: 77 6f 72 64 20 41 55 54 4f 49 4e 43 52 45 4d 45  word AUTOINCREME
5240: 4e 54 2e 20 20 54 68 65 20 41 55 54 4f 49 4e 43  NT.  The AUTOINC
5250: 52 45 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20 6d  REMENT keyword m
5260: 6f 64 69 66 69 65 64 20 74 68 65 20 77 61 79 0a  odified the way.
5270: 74 68 61 74 20 42 2d 54 72 65 65 20 6b 65 79 73  that B-Tree keys
5280: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
5290: 6c 79 20 67 65 6e 65 72 61 74 65 64 2e 20 20 41  ly generated.  A
52a0: 64 64 69 74 69 6f 6e 61 6c 20 64 65 74 61 69 6c  dditional detail
52b0: 0a 6f 6e 20 61 75 74 6f 6d 61 74 69 63 20 42 2d  .on automatic B-
52c0: 54 72 65 65 20 6b 65 79 20 67 65 6e 65 72 61 74  Tree key generat
52d0: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
52e0: 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e  .<a href="autoin
52f0: 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65  c.html">separate
5300: 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ly</a>.</p>..<p>
5310: 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  According to the
5320: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50   SQL standard, P
5330: 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c  RIMARY KEY shoul
5340: 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  d imply NOT NULL
5350: 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c  ..Unfortunately,
5360: 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73   due to a long-s
5370: 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f  tanding coding o
5380: 76 65 72 73 69 67 68 74 2c 20 74 68 69 73 20 69  versight, this i
5390: 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73 65 20  s not .the case 
53a0: 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69  in SQLite.  SQLi
53b0: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
53c0: 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49 4d 41  alues.in a PRIMA
53d0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20  RY KEY column.  
53e0: 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67 65 20  We could change 
53f0: 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66 6f 72  SQLite to confor
5400: 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64 61 72  m to the.standar
5410: 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68 74 20  d (and we might 
5420: 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66 75 74  do so in the fut
5430: 75 72 65 29 2c 20 62 75 74 20 62 79 20 74 68 65  ure), but by the
5440: 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72 73 69   time the.oversi
5450: 67 68 74 20 77 61 73 20 64 69 73 63 6f 76 65 72  ght was discover
5460: 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69  ed, SQLite was i
5470: 6e 20 73 75 63 68 20 77 69 64 65 20 75 73 65 20  n such wide use 
5480: 74 68 61 74 20 77 65 20 66 65 61 72 65 64 0a 62  that we feared.b
5490: 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63  reaking legacy c
54a0: 6f 64 65 20 69 66 20 77 65 20 66 69 78 65 64 20  ode if we fixed 
54b0: 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f  the problem.  So
54c0: 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65   for now we have
54d0: 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e 74 61  .chosen to conta
54e0: 69 6e 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c  in allowing NULL
54f0: 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b 45 59  s in PRIMARY KEY
5500: 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76 65 6c 6f   columns..Develo
5510: 70 65 72 73 20 73 68 6f 75 6c 64 20 62 65 20 61  pers should be a
5520: 77 61 72 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  ware, however, t
5530: 68 61 74 20 77 65 20 6d 61 79 20 63 68 61 6e 67  hat we may chang
5540: 65 20 53 51 4c 69 74 65 20 74 6f 0a 63 6f 6e 66  e SQLite to.conf
5550: 6f 72 6d 20 74 6f 20 74 68 65 20 53 51 4c 20 73  orm to the SQL s
5560: 74 61 6e 64 61 72 64 20 69 6e 20 66 75 74 75 72  tandard in futur
5570: 65 20 61 6e 64 20 73 68 6f 75 6c 64 20 64 65 73  e and should des
5580: 69 67 6e 20 6e 65 77 20 70 72 6f 67 72 61 6d 73  ign new programs
5590: 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e 3c 2f 70  .accordingly.</p
55a0: 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 22 54 45  >..<p>If the "TE
55b0: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
55c0: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
55d0: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
55e0: 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42 4c 45  EATE".and "TABLE
55f0: 22 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  " then the table
5600: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
5610: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
5620: 0a 77 69 74 68 69 6e 20 74 68 61 74 20 73 61 6d  .within that sam
5630: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
5640: 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20 61 75 74  ction.and is aut
5650: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
5660: 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61  ed when.the data
5670: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
5680: 69 73 20 63 6c 6f 73 65 64 2e 20 20 41 6e 79 20  is closed.  Any 
5690: 69 6e 64 69 63 65 73 20 63 72 65 61 74 65 64 20  indices created 
56a0: 6f 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  on a temporary t
56b0: 61 62 6c 65 0a 61 72 65 20 61 6c 73 6f 20 74 65  able.are also te
56c0: 6d 70 6f 72 61 72 79 2e 20 20 54 65 6d 70 6f 72  mporary.  Tempor
56d0: 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ary tables and i
56e0: 6e 64 69 63 65 73 20 61 72 65 20 73 74 6f 72 65  ndices are store
56f0: 64 20 69 6e 20 61 0a 73 65 70 61 72 61 74 65 20  d in a.separate 
5700: 66 69 6c 65 20 64 69 73 74 69 6e 63 74 20 66 72  file distinct fr
5710: 6f 6d 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  om the main data
5720: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
5730: 3c 70 3e 20 49 66 20 61 20 26 6c 74 3b 64 61 74  <p> If a &lt;dat
5740: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
5750: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
5760: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  n the table is c
5770: 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e  reated in .the n
5780: 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 49  amed database. I
5790: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f  t is an error to
57a0: 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20   specify both a 
57b0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
57c0: 65 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54 45  e&gt;.and the TE
57d0: 4d 50 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65  MP keyword, unle
57e0: 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74 61 62  ss the &lt;datab
57f0: 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ase-name&gt; is 
5800: 22 74 65 6d 70 22 2e 20 49 66 20 6e 6f 0a 64 61  "temp". If no.da
5810: 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73  tabase name is s
5820: 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68  pecified, and th
5830: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69  e TEMP keyword i
5840: 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74  s not present,.t
5850: 68 65 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  he table is crea
5860: 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ted in the main 
5870: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
5880: 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63  p>The optional c
5890: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 66  onflict-clause f
58a0: 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63 6f  ollowing each co
58b0: 6e 73 74 72 61 69 6e 74 0a 61 6c 6c 6f 77 73 20  nstraint.allows 
58c0: 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
58d0: 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
58e0: 69 76 65 20 64 65 66 61 75 6c 74 0a 63 6f 6e 73  ive default.cons
58f0: 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
5900: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
5910: 69 74 68 6d 20 66 6f 72 20 74 68 61 74 20 63 6f  ithm for that co
5920: 6e 73 74 72 61 69 6e 74 2e 0a 54 68 65 20 64 65  nstraint..The de
5930: 66 61 75 6c 74 20 69 73 20 61 62 6f 72 74 20 41  fault is abort A
5940: 42 4f 52 54 2e 20 20 44 69 66 66 65 72 65 6e 74  BORT.  Different
5950: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74   constraints wit
5960: 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 74 61 62  hin the same.tab
5970: 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66 66  le may have diff
5980: 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63 6f  erent default co
5990: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
59a0: 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 49 66  n algorithms..If
59b0: 20 61 6e 20 43 4f 50 59 2c 20 49 4e 53 45 52 54   an COPY, INSERT
59c0: 2c 20 6f 72 20 55 50 44 41 54 45 20 63 6f 6d 6d  , or UPDATE comm
59d0: 61 6e 64 20 73 70 65 63 69 66 69 65 73 20 61 20  and specifies a 
59e0: 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69  different confli
59f0: 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct.resolution al
5a00: 67 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20 74 68  gorithm, then th
5a10: 61 74 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  at algorithm is 
5a20: 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
5a30: 20 74 68 65 0a 64 65 66 61 75 6c 74 20 61 6c 67   the.default alg
5a40: 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
5a50: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
5a60: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ABLE statement..
5a70: 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
5a80: 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22  titled.<a href="
5a90: 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f  #conflict">ON CO
5aa0: 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61  NFLICT</a> for a
5ab0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
5ac0: 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43  ation.</p>..<p>C
5ad0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
5ae0: 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 61   are supported a
5af0: 73 20 6f 66 20 76 65 72 73 69 6f 6e 20 33 2e 33  s of version 3.3
5b00: 2e 30 2e 20 20 50 72 69 6f 72 0a 74 6f 20 76 65  .0.  Prior.to ve
5b10: 72 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45  rsion 3.3.0, CHE
5b20: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  CK constraints w
5b30: 65 72 65 20 70 61 72 73 65 64 20 62 75 74 20 6e  ere parsed but n
5b40: 6f 74 20 65 6e 66 6f 72 63 65 64 2e 3c 2f 70 3e  ot enforced.</p>
5b50: 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e  ..<p>There are n
5b60: 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69  o arbitrary limi
5b70: 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  ts on the number
5b80: 0a 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 6f  .of columns or o
5b90: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
5ba0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 61  constraints in a
5bb0: 20 74 61 62 6c 65 2e 0a 54 68 65 20 74 6f 74 61   table..The tota
5bc0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61  l amount of data
5bd0: 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77   in a single row
5be0: 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 61   is limited to a
5bf0: 62 6f 75 74 0a 31 20 6d 65 67 61 62 79 74 65 73  bout.1 megabytes
5c00: 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e 38 2e   in version 2.8.
5c10: 20 20 49 6e 20 76 65 72 73 69 6f 6e 20 33 2e 30    In version 3.0
5c20: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 61 72 62   there is no arb
5c30: 69 74 72 61 72 79 0a 6c 69 6d 69 74 20 6f 6e 20  itrary.limit on 
5c40: 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61  the amount of da
5c50: 74 61 20 69 6e 20 61 20 72 6f 77 2e 3c 2f 70 3e  ta in a row.</p>
5c60: 0a 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45  ...<p>The CREATE
5c70: 20 54 41 42 4c 45 20 41 53 20 66 6f 72 6d 20 64   TABLE AS form d
5c80: 65 66 69 6e 65 73 20 74 68 65 20 74 61 62 6c 65  efines the table
5c90: 20 74 6f 20 62 65 0a 74 68 65 20 72 65 73 75 6c   to be.the resul
5ca0: 74 20 73 65 74 20 6f 66 20 61 20 71 75 65 72 79  t set of a query
5cb0: 2e 20 20 54 68 65 20 6e 61 6d 65 73 20 6f 66 20  .  The names of 
5cc0: 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  the table column
5cd0: 73 20 61 72 65 0a 74 68 65 20 6e 61 6d 65 73 20  s are.the names 
5ce0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  of the columns i
5cf0: 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70  n the result.</p
5d00: 3e 0a 0a 3c 70 3e 54 68 65 20 65 78 61 63 74 20  >..<p>The exact 
5d10: 74 65 78 74 0a 6f 66 20 65 61 63 68 20 43 52 45  text.of each CRE
5d20: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
5d30: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ent is stored in
5d40: 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d   the <b>sqlite_m
5d50: 61 73 74 65 72 3c 2f 62 3e 0a 74 61 62 6c 65 2e  aster</b>.table.
5d60: 20 20 45 76 65 72 79 20 74 69 6d 65 20 74 68 65    Every time the
5d70: 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   database is ope
5d80: 6e 65 64 2c 20 61 6c 6c 20 43 52 45 41 54 45 20  ned, all CREATE 
5d90: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73  TABLE statements
5da0: 0a 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74  .are read from t
5db0: 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73  he <b>sqlite_mas
5dc0: 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e  ter</b> table an
5dd0: 64 20 75 73 65 64 20 74 6f 20 72 65 67 65 6e 65  d used to regene
5de0: 72 61 74 65 0a 53 51 4c 69 74 65 27 73 20 69 6e  rate.SQLite's in
5df0: 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
5e00: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 62  ation of the tab
5e10: 6c 65 20 6c 61 79 6f 75 74 2e 0a 49 66 20 74 68  le layout..If th
5e20: 65 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61  e original comma
5e30: 6e 64 20 77 61 73 20 61 20 43 52 45 41 54 45 20  nd was a CREATE 
5e40: 54 41 42 4c 45 20 41 53 20 74 68 65 6e 20 74 68  TABLE AS then th
5e50: 65 6e 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74  en an equivalent
5e60: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74  .CREATE TABLE st
5e70: 61 74 65 6d 65 6e 74 20 69 73 20 73 79 6e 74 68  atement is synth
5e80: 65 73 69 7a 65 64 20 61 6e 64 20 73 74 6f 72 65  esized and store
5e90: 20 69 6e 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61   in <b>sqlite_ma
5ea0: 73 74 65 72 3c 2f 62 3e 0a 69 6e 20 70 6c 61 63  ster</b>.in plac
5eb0: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
5ec0: 6c 20 63 6f 6d 6d 61 6e 64 2e 0a 54 68 65 20 74  l command..The t
5ed0: 65 78 74 20 6f 66 20 43 52 45 41 54 45 20 54 45  ext of CREATE TE
5ee0: 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 73 74  MPORARY TABLE st
5ef0: 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73 74 6f  atements are sto
5f00: 72 65 64 20 69 6e 20 74 68 65 0a 3c 62 3e 73 71  red in the.<b>sq
5f10: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
5f20: 3c 2f 62 3e 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e  </b> table..</p>
5f30: 0a 0a 3c 70 3e 49 66 20 74 68 65 20 6f 70 74 69  ..<p>If the opti
5f40: 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53  onal IF NOT EXIS
5f50: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
5f60: 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72  sent and another
5f70: 20 74 61 62 6c 65 0a 77 69 74 68 20 74 68 65 20   table.with the 
5f80: 73 61 6d 65 20 6e 61 6d 65 20 61 6c 65 61 64 79  same name aleady
5f90: 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74 68   exists, then th
5fa0: 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d  is command becom
5fb0: 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a  es a no-op.</p>.
5fc0: 0a 3c 70 3e 54 61 62 6c 65 73 20 61 72 65 20 72  .<p>Tables are r
5fd0: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
5fe0: 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74   <a href="#dropt
5ff0: 61 62 6c 65 22 3e 44 52 4f 50 20 54 41 42 4c 45  able">DROP TABLE
6000: 3c 2f 61 3e 20 0a 73 74 61 74 65 6d 65 6e 74 2e  </a> .statement.
6010: 20 20 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69    </p>.}...Secti
6020: 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47 47  on {CREATE TRIGG
6030: 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65  ER} createtrigge
6040: 72 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  r..Syntax {sql-s
6050: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 52 45 41  tatement} {.CREA
6060: 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f  TE [TEMP | TEMPO
6070: 52 41 52 59 5d 20 54 52 49 47 47 45 52 20 5b 49  RARY] TRIGGER [I
6080: 46 20 4e 4f 54 20 45 58 49 53 54 53 5d 20 3c 74  F NOT EXISTS] <t
6090: 72 69 67 67 65 72 2d 6e 61 6d 65 3e 20 5b 20 42  rigger-name> [ B
60a0: 45 46 4f 52 45 20 7c 20 41 46 54 45 52 20 5d 0a  EFORE | AFTER ].
60b0: 3c 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74 3e  <database-event>
60c0: 20 4f 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e   ON [<database-n
60d0: 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
60e0: 61 6d 65 3e 0a 3c 74 72 69 67 67 65 72 2d 61 63  ame>.<trigger-ac
60f0: 74 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20  tion>.}..Syntax 
6100: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
6110: 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50 20 7c  {.CREATE [TEMP |
6120: 20 54 45 4d 50 4f 52 41 52 59 5d 20 54 52 49 47   TEMPORARY] TRIG
6130: 47 45 52 20 5b 49 46 20 4e 4f 54 20 45 58 49 53  GER [IF NOT EXIS
6140: 54 53 5d 20 3c 74 72 69 67 67 65 72 2d 6e 61 6d  TS] <trigger-nam
6150: 65 3e 20 49 4e 53 54 45 41 44 20 4f 46 0a 3c 64  e> INSTEAD OF.<d
6160: 61 74 61 62 61 73 65 2d 65 76 65 6e 74 3e 20 4f  atabase-event> O
6170: 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  N [<database-nam
6180: 65 3e 20 2e 5d 20 3c 76 69 65 77 2d 6e 61 6d 65  e> .] <view-name
6190: 3e 0a 3c 74 72 69 67 67 65 72 2d 61 63 74 69 6f  >.<trigger-actio
61a0: 6e 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 64 61  n>.}..Syntax {da
61b0: 74 61 62 61 73 65 2d 65 76 65 6e 74 7d 20 7b 0a  tabase-event} {.
61c0: 44 45 4c 45 54 45 20 7c 20 0a 49 4e 53 45 52 54  DELETE | .INSERT
61d0: 20 7c 20 0a 55 50 44 41 54 45 20 7c 20 0a 55 50   | .UPDATE | .UP
61e0: 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
61f0: 6c 69 73 74 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20  list>.}..Syntax 
6200: 7b 74 72 69 67 67 65 72 2d 61 63 74 69 6f 6e 7d  {trigger-action}
6210: 20 7b 0a 5b 20 46 4f 52 20 45 41 43 48 20 52 4f   {.[ FOR EACH RO
6220: 57 20 7c 20 46 4f 52 20 45 41 43 48 20 53 54 41  W | FOR EACH STA
6230: 54 45 4d 45 4e 54 20 5d 20 5b 20 57 48 45 4e 20  TEMENT ] [ WHEN 
6240: 3c 65 78 70 72 65 73 73 69 6f 6e 3e 20 5d 20 0a  <expression> ] .
6250: 42 45 47 49 4e 20 0a 20 20 3c 74 72 69 67 67 65  BEGIN .  <trigge
6260: 72 2d 73 74 65 70 3e 20 3b 20 5b 20 3c 74 72 69  r-step> ; [ <tri
6270: 67 67 65 72 2d 73 74 65 70 3e 20 3b 20 5d 2a 0a  gger-step> ; ]*.
6280: 45 4e 44 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 74  END.}..Syntax {t
6290: 72 69 67 67 65 72 2d 73 74 65 70 7d 20 7b 0a 3c  rigger-step} {.<
62a0: 75 70 64 61 74 65 2d 73 74 61 74 65 6d 65 6e 74  update-statement
62b0: 3e 20 7c 20 3c 69 6e 73 65 72 74 2d 73 74 61 74  > | <insert-stat
62c0: 65 6d 65 6e 74 3e 20 7c 20 0a 3c 64 65 6c 65 74  ement> | .<delet
62d0: 65 2d 73 74 61 74 65 6d 65 6e 74 3e 20 7c 20 3c  e-statement> | <
62e0: 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74  select-statement
62f0: 3e 20 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  > .}..puts {.<p>
6300: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
6310: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
6320: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
6330: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
6340: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 54 72  abase schema. Tr
6350: 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62  iggers are datab
6360: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 28  ase operations (
6370: 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 61  the <i>trigger-a
6380: 63 74 69 6f 6e 3c 2f 69 3e 29 20 0a 74 68 61 74  ction</i>) .that
6390: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
63a0: 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65  ly performed whe
63b0: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64 61  n a specified da
63c0: 74 61 62 61 73 65 20 65 76 65 6e 74 20 28 74 68  tabase event (th
63d0: 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 65 76  e.<i>database-ev
63e0: 65 6e 74 3c 2f 69 3e 29 20 6f 63 63 75 72 73 2e  ent</i>) occurs.
63f0: 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 74 72 69    </p>..<p>A tri
6400: 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65 63  gger may be spec
6410: 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77 68  ified to fire wh
6420: 65 6e 65 76 65 72 20 61 20 44 45 4c 45 54 45 2c  enever a DELETE,
6430: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
6440: 45 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61  E of a.particula
6450: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
6460: 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e   occurs, or when
6470: 65 76 65 72 20 61 6e 20 55 50 44 41 54 45 20 6f  ever an UPDATE o
6480: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 73 70  f one or more.sp
6490: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20  ecified columns 
64a0: 6f 66 20 61 20 74 61 62 6c 65 20 61 72 65 20 75  of a table are u
64b0: 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  pdated.</p>..<p>
64c0: 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c  At this time SQL
64d0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c  ite supports onl
64e0: 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74  y FOR EACH ROW t
64f0: 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52  riggers, not FOR
6500: 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20   EACH.STATEMENT 
6510: 74 72 69 67 67 65 72 73 2e 20 48 65 6e 63 65 20  triggers. Hence 
6520: 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69  explicitly speci
6530: 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52  fying FOR EACH R
6540: 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20  OW is optional. 
6550: 20 46 4f 52 0a 45 41 43 48 20 52 4f 57 20 69 6d   FOR.EACH ROW im
6560: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53  plies that the S
6570: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
6580: 65 63 69 66 69 65 64 20 61 73 20 3c 69 3e 74 72  ecified as <i>tr
6590: 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e 20  igger-steps</i> 
65a0: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
65b0: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
65c0: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
65d0: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
65e0: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
65f0: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
6600: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
6610: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
6620: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
6630: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42   fire.</p>..<p>B
6640: 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61  oth the WHEN cla
6650: 75 73 65 20 61 6e 64 20 74 68 65 20 3c 69 3e 74  use and the <i>t
6660: 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e  rigger-steps</i>
6670: 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d   may access elem
6680: 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77  ents of .the row
6690: 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c   being inserted,
66a0: 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61   deleted or upda
66b0: 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65  ted using refere
66c0: 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  nces of the form
66d0: 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e   ."NEW.<i>column
66e0: 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22  -name</i>" and "
66f0: 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  OLD.<i>column-na
6700: 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c  me</i>", where.<
6710: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
6720: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
6730: 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74   a column from t
6740: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
6750: 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73  e trigger.is ass
6760: 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 4f 4c  ociated with. OL
6770: 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65  D and NEW refere
6780: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  nces may only be
6790: 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72   used in trigger
67a0: 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67 65 72 2d  s on.<i>trigger-
67b0: 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f 72 20 77  event</i>s for w
67c0: 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65  hich they are re
67d0: 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f  levant, as follo
67e0: 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  ws:</p>..<table 
67f0: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
6800: 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74  ding=10>.<tr>.<t
6810: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
6820: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
6830: 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54  th=120><i>INSERT
6840: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
6850: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72  lign="top">NEW r
6860: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
6870: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
6880: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
6890: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
68a0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
68b0: 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  UPDATE</i></td>.
68c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
68d0: 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66  >NEW and OLD ref
68e0: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
68f0: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  d</td>.</tr>.<tr
6900: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
6910: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
6920: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45   width=120><i>DE
6930: 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  LETE</i></td>.<t
6940: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f  d valign="top">O
6950: 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  LD references ar
6960: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
6970: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e  r>.</table>.</p>
6980: 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45 4e 20 63  ..<p>If a WHEN c
6990: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
69a0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
69b0: 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
69c0: 61 73 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74  as <i>trigger-st
69d0: 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f 6e 6c 79  eps</i> are only
69e0: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f   executed for ro
69f0: 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
6a00: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
6a10: 74 72 75 65 2e 20 49 66 20 6e 6f 20 57 48 45 4e  true. If no WHEN
6a20: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
6a30: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
6a40: 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78 65 63  tements are exec
6a50: 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77  uted for all row
6a60: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  s.</p>..<p>The s
6a70: 70 65 63 69 66 69 65 64 20 3c 69 3e 74 72 69 67  pecified <i>trig
6a80: 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20 64 65 74  ger-time</i> det
6a90: 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65  ermines when the
6aa0: 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70   <i>trigger-step
6ab0: 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65 20 65 78  s</i>.will be ex
6ac0: 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65 20  ecuted relative 
6ad0: 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e  to the insertion
6ae0: 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f  , modification o
6af0: 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65  r removal of the
6b00: 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77 2e  .associated row.
6b10: 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 4f 4e 20 43  </p>..<p>An ON C
6b20: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6d  ONFLICT clause m
6b30: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
6b40: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50  as part of an UP
6b50: 44 41 54 45 20 6f 72 20 49 4e 53 45 52 54 0a 3c  DATE or INSERT.<
6b60: 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70 3c 2f  i>trigger-step</
6b70: 69 3e 2e 20 48 6f 77 65 76 65 72 20 69 66 20 61  i>. However if a
6b80: 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  n ON CONFLICT cl
6b90: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
6ba0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68  d as part of .th
6bb0: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
6bc0: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
6bd0: 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 74 68  to fire, then th
6be0: 69 73 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  is conflict hand
6bf0: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 69 73 20 75  ling.policy is u
6c00: 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e  sed instead.</p>
6c10: 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73 20 61 72  ..<p>Triggers ar
6c20: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
6c30: 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65  dropped when the
6c40: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 79   table that they
6c50: 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64   are .associated
6c60: 20 77 69 74 68 20 69 73 20 64 72 6f 70 70 65 64   with is dropped
6c70: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65  .</p>..<p>Trigge
6c80: 72 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  rs may be create
6c90: 64 20 6f 6e 20 76 69 65 77 73 2c 20 61 73 20 77  d on views, as w
6ca0: 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20  ell as ordinary 
6cb0: 74 61 62 6c 65 73 2c 20 62 79 20 73 70 65 63 69  tables, by speci
6cc0: 66 79 69 6e 67 0a 49 4e 53 54 45 41 44 20 4f 46  fying.INSTEAD OF
6cd0: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
6ce0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
6cf0: 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  . If one or more
6d00: 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44   ON INSERT, ON D
6d10: 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41  ELETE.or ON UPDA
6d20: 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20  TE triggers are 
6d30: 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65  defined on a vie
6d40: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  w, then it is no
6d50: 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 65 78  t an error to ex
6d60: 65 63 75 74 65 0a 61 6e 20 49 4e 53 45 52 54 2c  ecute.an INSERT,
6d70: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
6d80: 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74  E statement on t
6d90: 68 65 20 76 69 65 77 2c 20 72 65 73 70 65 63 74  he view, respect
6da0: 69 76 65 6c 79 2e 20 54 68 65 72 65 61 66 74 65  ively. Thereafte
6db0: 72 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20  r,.executing an 
6dc0: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
6dd0: 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20  r UPDATE on the 
6de0: 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20  view causes the 
6df0: 61 73 73 6f 63 69 61 74 65 64 0a 20 20 74 72 69  associated.  tri
6e00: 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 54  ggers to fire. T
6e10: 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75  he real tables u
6e20: 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69  nderlying the vi
6e30: 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66  ew are not modif
6e40: 69 65 64 0a 20 20 28 65 78 63 65 70 74 20 70 6f  ied.  (except po
6e50: 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c  ssibly explicitl
6e60: 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20  y, by a trigger 
6e70: 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c  program).</p>..<
6e80: 70 3e 3c 62 3e 45 78 61 6d 70 6c 65 3a 3c 2f 62  p><b>Example:</b
6e90: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 73 75 6d 69  ></p>..<p>Assumi
6ea0: 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72  ng that customer
6eb0: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
6ec0: 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74  red in the "cust
6ed0: 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e  omers" table, an
6ee0: 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63  d.that order rec
6ef0: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
6f00: 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20  in the "orders" 
6f10: 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  table, the follo
6f20: 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73  wing trigger.ens
6f30: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
6f40: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
6f50: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
6f60: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
6f70: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
6f80: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 7d  r address:</p>.}
6f90: 0a 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54  .Example {.CREAT
6fa0: 45 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65  E TRIGGER update
6fb0: 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73  _customer_addres
6fc0: 73 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72  s UPDATE OF addr
6fd0: 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73  ess ON customers
6fe0: 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50   .  BEGIN.    UP
6ff0: 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20  DATE orders SET 
7000: 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64  address = new.ad
7010: 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74  dress WHERE cust
7020: 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e  omer_name = old.
7030: 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 0a 70  name;.  END;.}.p
7040: 75 74 73 20 7b 0a 3c 70 3e 57 69 74 68 20 74 68  uts {.<p>With th
7050: 69 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61  is trigger insta
7060: 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20  lled, executing 
7070: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f  the statement:</
7080: 70 3e 0a 7d 0a 0a 45 78 61 6d 70 6c 65 20 7b 0a  p>.}..Example {.
7090: 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73  UPDATE customers
70a0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
70b0: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
70c0: 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a  E name = 'Jack J
70d0: 6f 6e 65 73 27 3b 0a 7d 0a 70 75 74 73 20 7b 0a  ones';.}.puts {.
70e0: 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f  <p>causes the fo
70f0: 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75  llowing to be au
7100: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63  tomatically exec
7110: 75 74 65 64 3a 3c 2f 70 3e 0a 7d 0a 45 78 61 6d  uted:</p>.}.Exam
7120: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64  ple {.UPDATE ord
7130: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
7140: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
7150: 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61  HERE customer_na
7160: 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73  me = 'Jack Jones
7170: 27 3b 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  ';.}..puts {.<p>
7180: 4e 6f 74 65 20 74 68 61 74 20 63 75 72 72 65 6e  Note that curren
7190: 74 6c 79 2c 20 74 72 69 67 67 65 72 73 20 6d 61  tly, triggers ma
71a0: 79 20 62 65 68 61 76 65 20 6f 64 64 6c 79 20 77  y behave oddly w
71b0: 68 65 6e 20 63 72 65 61 74 65 64 20 6f 6e 20 74  hen created on t
71c0: 61 62 6c 65 73 0a 20 20 77 69 74 68 20 49 4e 54  ables.  with INT
71d0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
71e0: 20 66 69 65 6c 64 73 2e 20 49 66 20 61 20 42 45   fields. If a BE
71f0: 46 4f 52 45 20 74 72 69 67 67 65 72 20 70 72 6f  FORE trigger pro
7200: 67 72 61 6d 20 6d 6f 64 69 66 69 65 73 20 74 68  gram modifies th
7210: 65 20 0a 20 20 49 4e 54 45 47 45 52 20 50 52 49  e .  INTEGER PRI
7220: 4d 41 52 59 20 4b 45 59 20 66 69 65 6c 64 20 6f  MARY KEY field o
7230: 66 20 61 20 72 6f 77 20 74 68 61 74 20 77 69 6c  f a row that wil
7240: 6c 20 62 65 20 73 75 62 73 65 71 75 65 6e 74 6c  l be subsequentl
7250: 79 20 75 70 64 61 74 65 64 20 62 79 20 74 68 65  y updated by the
7260: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  .  statement tha
7270: 74 20 63 61 75 73 65 73 20 74 68 65 20 74 72 69  t causes the tri
7280: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
7290: 65 6e 20 74 68 65 20 75 70 64 61 74 65 20 6d 61  en the update ma
72a0: 79 20 6e 6f 74 20 6f 63 63 75 72 2e 20 0a 20 20  y not occur. .  
72b0: 54 68 65 20 77 6f 72 6b 61 72 6f 75 6e 64 20 69  The workaround i
72c0: 73 20 74 6f 20 64 65 63 6c 61 72 65 20 74 68 65  s to declare the
72d0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 50 52   table with a PR
72e0: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
72f0: 20 69 6e 73 74 65 61 64 0a 20 20 6f 66 20 61 6e   instead.  of an
7300: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
7310: 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e   KEY column.</p>
7320: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 41 20  .}..puts {.<p>A 
7330: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
7340: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
7350: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
7360: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
7370: 6d 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  m, with the foll
7380: 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e  owing syntax</p>
7390: 20 0a 7d 0a 53 79 6e 74 61 78 20 7b 72 61 69 73   .}.Syntax {rais
73a0: 65 2d 66 75 6e 63 74 69 6f 6e 7d 20 7b 0a 52 41  e-function} {.RA
73b0: 49 53 45 20 28 20 41 42 4f 52 54 2c 20 3c 65 72  ISE ( ABORT, <er
73c0: 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20 29 20 7c  ror-message> ) |
73d0: 20 0a 52 41 49 53 45 20 28 20 46 41 49 4c 2c 20   .RAISE ( FAIL, 
73e0: 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20  <error-message> 
73f0: 29 20 7c 20 0a 52 41 49 53 45 20 28 20 52 4f 4c  ) | .RAISE ( ROL
7400: 4c 42 41 43 4b 2c 20 3c 65 72 72 6f 72 2d 6d 65  LBACK, <error-me
7410: 73 73 61 67 65 3e 20 29 20 7c 20 0a 52 41 49 53  ssage> ) | .RAIS
7420: 45 20 28 20 49 47 4e 4f 52 45 20 29 0a 7d 0a 70  E ( IGNORE ).}.p
7430: 75 74 73 20 7b 0a 3c 70 3e 57 68 65 6e 20 6f 6e  uts {.<p>When on
7440: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 74  e of the first t
7450: 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61  hree forms is ca
7460: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67  lled during trig
7470: 67 65 72 2d 70 72 6f 67 72 61 6d 20 65 78 65 63  ger-program exec
7480: 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69  ution, the speci
7490: 66 69 65 64 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  fied ON CONFLICT
74a0: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70   processing is p
74b0: 65 72 66 6f 72 6d 65 64 20 28 65 69 74 68 65 72  erformed (either
74c0: 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f 72 20   ABORT, FAIL or 
74d0: 0a 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20  . ROLLBACK) and 
74e0: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
74f0: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 20 41 6e  y terminates. An
7500: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
7510: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
7520: 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
7530: 74 68 65 20 75 73 65 72 2c 20 61 6c 6f 6e 67 20  the user, along 
7540: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
7550: 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
7560: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 52  .</p>..<p>When R
7570: 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20  AISE(IGNORE) is 
7580: 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61  called, the rema
7590: 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72  inder of the cur
75a0: 72 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f  rent trigger pro
75b0: 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d  gram,.the statem
75c0: 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20  ent that caused 
75d0: 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
75e0: 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61  ram to execute a
75f0: 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  nd any subsequen
7600: 74 0a 20 20 20 20 74 72 69 67 67 65 72 20 70 72  t.    trigger pr
7610: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c  ograms that woul
7620: 64 20 6f 66 20 62 65 65 6e 20 65 78 65 63 75 74  d of been execut
7630: 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64  ed are abandoned
7640: 2e 20 4e 6f 20 64 61 74 61 62 61 73 65 0a 20 20  . No database.  
7650: 20 20 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f    changes are ro
7660: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 49 66 20 74  lled back.  If t
7670: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
7680: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
7690: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 20 20 20  gger program.   
76a0: 20 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69   to execute is i
76b0: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
76c0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
76d0: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
76e0: 65 72 20 70 72 6f 67 72 61 6d 0a 20 20 20 20 72  er program.    r
76f0: 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e  esumes execution
7700: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
7710: 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74  g of the next st
7720: 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69  ep..</p>..<p>Tri
7730: 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65  ggers are remove
7740: 64 20 75 73 69 6e 67 20 74 68 65 20 3c 61 20 68  d using the <a h
7750: 72 65 66 3d 22 23 64 72 6f 70 74 72 69 67 67 65  ref="#droptrigge
7760: 72 22 3e 44 52 4f 50 20 54 52 49 47 47 45 52 3c  r">DROP TRIGGER<
7770: 2f 61 3e 0a 73 74 61 74 65 6d 65 6e 74 2e 3c 2f  /a>.statement.</
7780: 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b  p>.}...Section {
7790: 43 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72  CREATE VIEW} {cr
77a0: 65 61 74 65 76 69 65 77 7d 0a 0a 53 79 6e 74 61  eateview}..Synta
77b0: 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20  x {sql-command} 
77c0: 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50 20 7c  {.CREATE [TEMP |
77d0: 20 54 45 4d 50 4f 52 41 52 59 5d 20 56 49 45 57   TEMPORARY] VIEW
77e0: 20 5b 49 46 20 4e 4f 54 20 45 58 49 53 54 53 5d   [IF NOT EXISTS]
77f0: 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65   [<database-name
7800: 3e 2e 5d 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 20  >.] <view-name> 
7810: 41 53 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65  AS <select-state
7820: 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  ment>.}..puts {.
7830: 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 56 49  <p>The CREATE VI
7840: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
7850: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
7860: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 3c 61 20  re-packaged .<a 
7870: 68 72 65 66 3d 22 23 73 65 6c 65 63 74 22 3e 53  href="#select">S
7880: 45 4c 45 43 54 3c 2f 61 3e 0a 73 74 61 74 65 6d  ELECT</a>.statem
7890: 65 6e 74 2e 20 20 4f 6e 63 65 20 74 68 65 20 76  ent.  Once the v
78a0: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 2c 20  iew is created, 
78b0: 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  it can be used i
78c0: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
78d0: 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 53 45 4c  e.of another SEL
78e0: 45 43 54 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ECT in place of 
78f0: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
7900: 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 22 54  p>..<p>If the "T
7910: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
7920: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
7930: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
7940: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
7950: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
7960: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
7970: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
7980: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
7990: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
79a0: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
79b0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
79c0: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
79d0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
79e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20 61 20  .</p>..<p> If a 
79f0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
7a00: 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69  e&gt; is specifi
7a10: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69 65  ed, then the vie
7a20: 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  w is created in 
7a30: 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62  .the named datab
7a40: 61 73 65 2e 20 49 74 20 69 73 20 61 6e 20 65 72  ase. It is an er
7a50: 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62  ror to specify b
7a60: 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61  oth a &lt;databa
7a70: 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20  se-name&gt;.and 
7a80: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
7a90: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74  , unless the &lt
7aa0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
7ab0: 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 49 66  t; is "temp". If
7ac0: 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d   no.database nam
7ad0: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
7ae0: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79  and the TEMP key
7af0: 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73  word is not pres
7b00: 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65 20 69  ent,.the table i
7b10: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
7b20: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
7b30: 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e  /p>..<p>You cann
7b40: 6f 74 20 43 4f 50 59 2c 20 44 45 4c 45 54 45 2c  ot COPY, DELETE,
7b50: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
7b60: 45 20 61 20 76 69 65 77 2e 20 20 56 69 65 77 73  E a view.  Views
7b70: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a   are read-only .
7b80: 69 6e 20 53 51 4c 69 74 65 2e 20 20 48 6f 77 65  in SQLite.  Howe
7b90: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
7ba0: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
7bb0: 20 3c 61 20 68 72 65 66 3d 22 23 63 72 65 61 74   <a href="#creat
7bc0: 65 74 72 69 67 67 65 72 22 3e 0a 54 52 49 47 47  etrigger">.TRIGG
7bd0: 45 52 3c 2f 61 3e 20 6f 6e 20 74 68 65 20 76 69  ER</a> on the vi
7be0: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
7bf0: 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e   the same thing.
7c00: 20 20 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f    Views are remo
7c10: 76 65 64 20 0a 77 69 74 68 20 74 68 65 20 3c 61  ved .with the <a
7c20: 20 68 72 65 66 3d 22 23 64 72 6f 70 76 69 65 77   href="#dropview
7c30: 22 3e 44 52 4f 50 20 56 49 45 57 3c 2f 61 3e 20  ">DROP VIEW</a> 
7c40: 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 7d 0a  .command.</p>.}.
7c50: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
7c60: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
7c70: 7b 63 72 65 61 74 65 76 74 61 62 7d 0a 0a 53 79  {createvtab}..Sy
7c80: 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e  ntax {sql-comman
7c90: 64 7d 20 7b 0a 43 52 45 41 54 45 20 56 49 52 54  d} {.CREATE VIRT
7ca0: 55 41 4c 20 54 41 42 4c 45 20 5b 3c 64 61 74 61  UAL TABLE [<data
7cb0: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
7cc0: 61 62 6c 65 2d 6e 61 6d 65 3e 20 55 53 49 4e 47  able-name> USING
7cd0: 20 3c 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3e 20 5b   <module-name> [
7ce0: 28 20 3c 61 72 67 75 6d 65 6e 74 73 3e 20 29 5d  ( <arguments> )]
7cf0: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 41 20  .}..puts {.<p>A 
7d00: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73  virtual table is
7d10: 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f   an interface to
7d20: 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f   an external sto
7d30: 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74  rage or computat
7d40: 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20  ion.engine that 
7d50: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20  appears to be a 
7d60: 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e  table but does n
7d70: 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72  ot actually stor
7d80: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e  e information.in
7d90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7da0: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67  le.</p>..<p>In g
7db0: 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20  eneral, you can 
7dc0: 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68  do anything with
7dd0: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
7de0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 64 6f 6e   that can be don
7df0: 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69 6e 61  e.with an ordina
7e00: 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  ry table, except
7e10: 20 74 68 61 74 20 79 6f 75 20 63 61 6e 6e 6f 74   that you cannot
7e20: 20 63 72 65 61 74 65 20 74 72 69 67 67 65 72 73   create triggers
7e30: 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61   on a.virtual ta
7e40: 62 6c 65 2e 20 20 53 6f 6d 65 20 76 69 72 74 75  ble.  Some virtu
7e50: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
7e60: 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 69  ntations might i
7e70: 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61 6c  mpose additional
7e80: 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20 20  .restrictions.  
7e90: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e  For example, man
7ea0: 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  y virtual tables
7eb0: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c   are read-only.<
7ec0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26 6c 74 3b  /p>..<p>The &lt;
7ed0: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20  module-name&gt; 
7ee0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
7ef0: 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d  n object that im
7f00: 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72  plements.the vir
7f10: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
7f20: 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65   &lt;module-name
7f30: 26 67 74 3b 20 6d 75 73 74 20 62 65 20 72 65 67  &gt; must be reg
7f40: 69 73 74 65 72 65 64 20 77 69 74 68 0a 74 68 65  istered with.the
7f50: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
7f60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e   connection usin
7f70: 67 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33  g.<a href="capi3
7f80: 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33  ref.html#sqlite3
7f90: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 22 3e  _create_module">
7fa0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
7fb0: 6f 64 75 6c 65 3c 2f 61 3e 0a 70 72 69 6f 72 20  odule</a>.prior 
7fc0: 74 6f 20 69 73 73 75 69 6e 67 20 74 68 65 20 43  to issuing the C
7fd0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
7fe0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54  BLE statement..T
7ff0: 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20  he module takes 
8000: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d  zero or more com
8010: 6d 61 2d 73 65 70 61 72 61 74 65 64 20 61 72 67  ma-separated arg
8020: 75 6d 65 6e 74 73 2e 0a 54 68 65 20 61 72 67 75  uments..The argu
8030: 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73  ments can be jus
8040: 74 20 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74  t about any text
8050: 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68   as long as it h
8060: 61 73 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65  as balanced.pare
8070: 6e 74 68 65 73 65 73 2e 20 20 54 68 65 20 61 72  ntheses.  The ar
8080: 67 75 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73  gument syntax is
8090: 20 73 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65   sufficiently ge
80a0: 6e 65 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61  neral that the.a
80b0: 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20  rguments can be 
80c0: 6d 61 64 65 20 74 6f 20 61 70 70 65 61 72 20 61  made to appear a
80d0: 73 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  s column definit
80e0: 69 6f 6e 73 20 69 6e 20 61 20 74 72 61 64 69 74  ions in a tradit
80f0: 69 6f 6e 61 6c 0a 3c 61 20 68 72 65 66 3d 22 23  ional.<a href="#
8100: 63 72 65 61 74 65 74 61 62 6c 65 22 3e 43 52 45  createtable">CRE
8110: 41 54 45 20 54 41 42 4c 45 3c 2f 61 3e 20 73 74  ATE TABLE</a> st
8120: 61 74 65 6d 65 6e 74 2e 20 20 0a 53 51 4c 69 74  atement.  .SQLit
8130: 65 20 70 61 73 73 65 73 20 74 68 65 20 6d 6f 64  e passes the mod
8140: 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20 64 69  ule arguments di
8150: 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20 6d 6f  rectly.to the mo
8160: 64 75 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79  dule without any
8170: 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e   interpretation.
8180: 20 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70    It is the resp
8190: 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68  onsibility.of th
81a0: 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
81b0: 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65  ntation to parse
81c0: 20 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69   and interpret i
81d0: 74 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73  ts own arguments
81e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 76 69 72 74  .</p>..<p>A virt
81f0: 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73  ual table is des
8200: 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65  troyed using the
8210: 20 6f 72 64 69 6e 61 72 79 0a 3c 61 20 68 72 65   ordinary.<a hre
8220: 66 3d 22 23 64 72 6f 70 74 61 62 6c 65 22 3e 44  f="#droptable">D
8230: 52 4f 50 20 54 41 42 4c 45 3c 2f 61 3e 20 73 74  ROP TABLE</a> st
8240: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72 65 20  atement.  There 
8250: 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52 54 55  is no.DROP VIRTU
8260: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
8270: 6e 74 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74 69  nt.</p>.}..Secti
8280: 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65  on DELETE delete
8290: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  ..Syntax {sql-st
82a0: 61 74 65 6d 65 6e 74 7d 20 7b 0a 44 45 4c 45 54  atement} {.DELET
82b0: 45 20 46 52 4f 4d 20 5b 3c 64 61 74 61 62 61 73  E FROM [<databas
82c0: 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
82d0: 65 2d 6e 61 6d 65 3e 20 5b 57 48 45 52 45 20 3c  e-name> [WHERE <
82e0: 65 78 70 72 3e 5d 0a 7d 0a 0a 70 75 74 73 20 7b  expr>].}..puts {
82f0: 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63  .<p>The DELETE c
8300: 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
8310: 6f 20 72 65 6d 6f 76 65 20 72 65 63 6f 72 64 73  o remove records
8320: 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e 0a 54   from a table..T
8330: 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69  he command consi
8340: 73 74 73 20 6f 66 20 74 68 65 20 22 44 45 4c 45  sts of the "DELE
8350: 54 45 20 46 52 4f 4d 22 20 6b 65 79 77 6f 72 64  TE FROM" keyword
8360: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 74 68  s followed by.th
8370: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
8380: 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20 72  ble from which r
8390: 65 63 6f 72 64 73 20 61 72 65 20 74 6f 20 62 65  ecords are to be
83a0: 20 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70 3e 0a 0a   removed..</p>..
83b0: 3c 70 3e 57 69 74 68 6f 75 74 20 61 20 57 48 45  <p>Without a WHE
83c0: 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72  RE clause, all r
83d0: 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ows of the table
83e0: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 49 66   are removed..If
83f0: 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
8400: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
8410: 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77  n only those row
8420: 73 20 74 68 61 74 20 6d 61 74 63 68 0a 74 68 65  s that match.the
8430: 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20   expression are 
8440: 72 65 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a  removed.</p>.}..
8450: 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48  .Section {DETACH
8460: 20 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63   DATABASE} detac
8470: 68 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63  h..Syntax {sql-c
8480: 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 45 54 41 43 48  ommand} {.DETACH
8490: 20 5b 44 41 54 41 42 41 53 45 5d 20 3c 64 61 74   [DATABASE] <dat
84a0: 61 62 61 73 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70  abase-name>.}..p
84b0: 75 74 73 20 7b 0a 3c 70 3e 54 68 69 73 20 73 74  uts {.<p>This st
84c0: 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73  atement detaches
84d0: 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64   an additional d
84e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
84f0: 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61  on previously .a
8500: 74 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68  ttached using th
8510: 65 20 3c 61 20 68 72 65 66 3d 22 23 61 74 74 61  e <a href="#atta
8520: 63 68 22 3e 41 54 54 41 43 48 20 44 41 54 41 42  ch">ATTACH DATAB
8530: 41 53 45 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e  ASE</a> statemen
8540: 74 2e 20 20 49 74 0a 69 73 20 70 6f 73 73 69 62  t.  It.is possib
8550: 6c 65 20 74 6f 20 68 61 76 65 20 74 68 65 20 73  le to have the s
8560: 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
8570: 65 20 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69  e attached multi
8580: 70 6c 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20  ple times using 
8590: 0a 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73  .different names
85a0: 2c 20 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20  , and detaching 
85b0: 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  one connection t
85c0: 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65  o a file will le
85d0: 61 76 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20  ave the .others 
85e0: 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  intact.</p>..<p>
85f0: 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77  This statement w
8600: 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69  ill fail if SQLi
8610: 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64  te is in the mid
8620: 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  dle of a transac
8630: 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65  tion.</p>.}...Se
8640: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45  ction {DROP INDE
8650: 58 7d 20 64 72 6f 70 69 6e 64 65 78 0a 0a 53 79  X} dropindex..Sy
8660: 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e  ntax {sql-comman
8670: 64 7d 20 7b 0a 44 52 4f 50 20 49 4e 44 45 58 20  d} {.DROP INDEX 
8680: 5b 49 46 20 45 58 49 53 54 53 5d 20 5b 3c 64 61  [IF EXISTS] [<da
8690: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
86a0: 3c 69 6e 64 65 78 2d 6e 61 6d 65 3e 0a 7d 0a 0a  <index-name>.}..
86b0: 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44 52  puts {.<p>The DR
86c0: 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  OP INDEX stateme
86d0: 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69 6e  nt removes an in
86e0: 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20 74  dex added.with t
86f0: 68 65 20 3c 61 20 68 72 65 66 3d 22 23 63 72 65  he <a href="#cre
8700: 61 74 65 69 6e 64 65 78 22 3e 0a 43 52 45 41 54  ateindex">.CREAT
8710: 45 20 49 4e 44 45 58 3c 2f 61 3e 20 73 74 61 74  E INDEX</a> stat
8720: 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65  ement.  The inde
8730: 78 20 6e 61 6d 65 64 20 69 73 20 63 6f 6d 70 6c  x named is compl
8740: 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
8750: 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68  om.the disk.  Th
8760: 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65  e only way to re
8770: 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20  cover the index 
8780: 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68  is to reenter th
8790: 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 43 52  e.appropriate CR
87a0: 45 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61  EATE INDEX comma
87b0: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  nd.</p>..<p>The 
87c0: 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65  DROP INDEX state
87d0: 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72 65  ment does not re
87e0: 64 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66  duce the size of
87f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66   the database .f
8800: 69 6c 65 20 69 6e 20 74 68 65 20 64 65 66 61 75  ile in the defau
8810: 6c 74 20 6d 6f 64 65 2e 0a 45 6d 70 74 79 20 73  lt mode..Empty s
8820: 70 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61  pace in the data
8830: 62 61 73 65 20 69 73 20 72 65 74 61 69 6e 65 64  base is retained
8840: 20 66 6f 72 20 6c 61 74 65 72 20 49 4e 53 45 52   for later INSER
8850: 54 73 2e 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20  Ts.  To .remove 
8860: 66 72 65 65 20 73 70 61 63 65 20 69 6e 20 74 68  free space in th
8870: 65 20 64 61 74 61 62 61 73 65 2c 20 75 73 65 20  e database, use 
8880: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 76 61  the <a href="#va
8890: 63 75 75 6d 22 3e 56 41 43 55 55 4d 3c 2f 61 3e  cuum">VACUUM</a>
88a0: 20 0a 63 6f 6d 6d 61 6e 64 2e 20 20 49 66 20 41   .command.  If A
88b0: 55 54 4f 56 41 43 55 55 4d 20 6d 6f 64 65 20 69  UTOVACUUM mode i
88c0: 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
88d0: 64 61 74 61 62 61 73 65 20 74 68 65 6e 20 73 70  database then sp
88e0: 61 63 65 0a 77 69 6c 6c 20 62 65 20 66 72 65 65  ace.will be free
88f0: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
8900: 62 79 20 44 52 4f 50 20 49 4e 44 45 58 2e 3c 2f  by DROP INDEX.</
8910: 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b  p>.}...Section {
8920: 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70  DROP TABLE} drop
8930: 74 61 62 6c 65 0a 0a 53 79 6e 74 61 78 20 7b 73  table..Syntax {s
8940: 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52  ql-command} {.DR
8950: 4f 50 20 54 41 42 4c 45 20 5b 49 46 20 45 58 49  OP TABLE [IF EXI
8960: 53 54 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d  STS] [<database-
8970: 6e 61 6d 65 3e 2e 5d 20 3c 74 61 62 6c 65 2d 6e  name>.] <table-n
8980: 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ame>.}..puts {.<
8990: 70 3e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45  p>The DROP TABLE
89a0: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
89b0: 65 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64  es a table added
89c0: 20 77 69 74 68 20 74 68 65 20 3c 61 20 68 72 65   with the <a hre
89d0: 66 3d 0a 22 23 63 72 65 61 74 65 74 61 62 6c 65  f=."#createtable
89e0: 22 3e 43 52 45 41 54 45 20 54 41 42 4c 45 3c 2f  ">CREATE TABLE</
89f0: 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  a> statement.  T
8a00: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
8a10: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
8a20: 61 6d 65 2e 20 20 49 74 20 69 73 20 63 6f 6d 70  ame.  It is comp
8a30: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
8a40: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
8a50: 20 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20   schema and the 
8a60: 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65  .disk file.  The
8a70: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
8a80: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 41 6c  e recovered.  Al
8a90: 6c 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  l indices associ
8aa0: 61 74 65 64 20 0a 77 69 74 68 20 74 68 65 20 74  ated .with the t
8ab0: 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65  able are also de
8ac0: 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  leted.</p>..<p>T
8ad0: 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74  he DROP TABLE st
8ae0: 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
8af0: 20 72 65 64 75 63 65 20 74 68 65 20 73 69 7a 65   reduce the size
8b00: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
8b10: 20 0a 66 69 6c 65 20 69 6e 20 74 68 65 20 64 65   .file in the de
8b20: 66 61 75 6c 74 20 6d 6f 64 65 2e 20 20 45 6d 70  fault mode.  Emp
8b30: 74 79 20 73 70 61 63 65 20 69 6e 20 74 68 65 20  ty space in the 
8b40: 64 61 74 61 62 61 73 65 20 69 73 20 72 65 74 61  database is reta
8b50: 69 6e 65 64 20 66 6f 72 0a 6c 61 74 65 72 20 49  ined for.later I
8b60: 4e 53 45 52 54 73 2e 20 20 54 6f 20 0a 72 65 6d  NSERTs.  To .rem
8b70: 6f 76 65 20 66 72 65 65 20 73 70 61 63 65 20 69  ove free space i
8b80: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  n the database, 
8b90: 75 73 65 20 74 68 65 20 3c 61 20 68 72 65 66 3d  use the <a href=
8ba0: 22 23 76 61 63 75 75 6d 22 3e 56 41 43 55 55 4d  "#vacuum">VACUUM
8bb0: 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 20 20  </a> .command.  
8bc0: 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 6d 6f  If AUTOVACUUM mo
8bd0: 64 65 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f  de is enabled fo
8be0: 72 20 61 20 64 61 74 61 62 61 73 65 20 74 68 65  r a database the
8bf0: 6e 20 73 70 61 63 65 0a 77 69 6c 6c 20 62 65 20  n space.will be 
8c00: 66 72 65 65 64 20 61 75 74 6f 6d 61 74 69 63 61  freed automatica
8c10: 6c 6c 79 20 62 79 20 44 52 4f 50 20 54 41 42 4c  lly by DROP TABL
8c20: 45 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f  E.</p>..<p>The o
8c30: 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49 53 54  ptional IF EXIST
8c40: 53 20 63 6c 61 75 73 65 20 73 75 70 70 72 65 73  S clause suppres
8c50: 73 65 73 20 74 68 65 20 65 72 72 6f 72 20 74 68  ses the error th
8c60: 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  at would normall
8c70: 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68 65 20  y.result if the 
8c80: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65  table does not e
8c90: 78 69 73 74 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65  xist.</p>.}...Se
8ca0: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47  ction {DROP TRIG
8cb0: 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
8cc0: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61  .Syntax {sql-sta
8cd0: 74 65 6d 65 6e 74 7d 20 7b 0a 44 52 4f 50 20 54  tement} {.DROP T
8ce0: 52 49 47 47 45 52 20 5b 49 46 20 45 58 49 53 54  RIGGER [IF EXIST
8cf0: 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  S] [<database-na
8d00: 6d 65 3e 20 2e 5d 20 3c 74 72 69 67 67 65 72 2d  me> .] <trigger-
8d10: 6e 61 6d 65 3e 0a 7d 0a 70 75 74 73 20 7b 20 0a  name>.}.puts { .
8d20: 3c 70 3e 54 68 65 20 44 52 4f 50 20 54 52 49 47  <p>The DROP TRIG
8d30: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65  GER statement re
8d40: 6d 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20  moves a trigger 
8d50: 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a  created by the .
8d60: 3c 61 20 68 72 65 66 3d 22 23 63 72 65 61 74 65  <a href="#create
8d70: 74 72 69 67 67 65 72 22 3e 43 52 45 41 54 45 20  trigger">CREATE 
8d80: 54 52 49 47 47 45 52 3c 2f 61 3e 20 73 74 61 74  TRIGGER</a> stat
8d90: 65 6d 65 6e 74 2e 20 20 54 68 65 20 74 72 69 67  ement.  The trig
8da0: 67 65 72 20 69 73 20 0a 64 65 6c 65 74 65 64 20  ger is .deleted 
8db0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
8dc0: 65 20 73 63 68 65 6d 61 2e 20 4e 6f 74 65 20 74  e schema. Note t
8dd0: 68 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65  hat triggers are
8de0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 0a   automatically .
8df0: 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65  dropped when the
8e00: 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c   associated tabl
8e10: 65 20 69 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70  e is dropped.</p
8e20: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44  >.}...Section {D
8e30: 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69  ROP VIEW} dropvi
8e40: 65 77 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  ew..Syntax {sql-
8e50: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20  command} {.DROP 
8e60: 56 49 45 57 20 5b 49 46 20 45 58 49 53 54 53 5d  VIEW [IF EXISTS]
8e70: 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 0a 7d 0a 0a   <view-name>.}..
8e80: 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44 52  puts {.<p>The DR
8e90: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
8ea0: 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77  t removes a view
8eb0: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
8ec0: 3c 61 20 68 72 65 66 3d 0a 22 23 63 72 65 61 74  <a href=."#creat
8ed0: 65 76 69 65 77 22 3e 43 52 45 41 54 45 20 56 49  eview">CREATE VI
8ee0: 45 57 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e 74  EW</a> statement
8ef0: 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
8f00: 69 66 69 65 64 20 69 73 20 74 68 65 20 0a 76 69  ified is the .vi
8f10: 65 77 20 6e 61 6d 65 2e 20 20 49 74 20 69 73 20  ew name.  It is 
8f20: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
8f30: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
8f40: 2c 20 62 75 74 20 6e 6f 20 61 63 74 75 61 6c 20  , but no actual 
8f50: 64 61 74 61 20 0a 69 6e 20 74 68 65 20 75 6e 64  data .in the und
8f60: 65 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61 62  erlying base tab
8f70: 6c 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64 2e  les is modified.
8f80: 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e  </p>.}...Section
8f90: 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e   EXPLAIN explain
8fa0: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  ..Syntax {sql-st
8fb0: 61 74 65 6d 65 6e 74 7d 20 7b 0a 45 58 50 4c 41  atement} {.EXPLA
8fc0: 49 4e 20 3c 73 71 6c 2d 73 74 61 74 65 6d 65 6e  IN <sql-statemen
8fd0: 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  t>.}..puts {.<p>
8fe0: 54 68 65 20 45 58 50 4c 41 49 4e 20 63 6f 6d 6d  The EXPLAIN comm
8ff0: 61 6e 64 20 6d 6f 64 69 66 69 65 72 20 69 73 20  and modifier is 
9000: 61 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65  a non-standard e
9010: 78 74 65 6e 73 69 6f 6e 2e 20 20 54 68 65 0a 69  xtension.  The.i
9020: 64 65 61 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  dea comes from a
9030: 20 73 69 6d 69 6c 61 72 20 63 6f 6d 6d 61 6e 64   similar command
9040: 20 66 6f 75 6e 64 20 69 6e 20 50 6f 73 74 67 72   found in Postgr
9050: 65 53 51 4c 2c 20 62 75 74 20 74 68 65 20 6f 70  eSQL, but the op
9060: 65 72 61 74 69 6f 6e 0a 69 73 20 63 6f 6d 70 6c  eration.is compl
9070: 65 74 65 6c 79 20 64 69 66 66 65 72 65 6e 74 2e  etely different.
9080: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
9090: 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20  EXPLAIN keyword 
90a0: 61 70 70 65 61 72 73 20 62 65 66 6f 72 65 20 61  appears before a
90b0: 6e 79 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  ny other SQLite 
90c0: 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 74 68 65 6e  SQL command.then
90d0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 74 75   instead of actu
90e0: 61 6c 6c 79 20 65 78 65 63 75 74 69 6e 67 20 74  ally executing t
90f0: 68 65 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 20  he command, the 
9100: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 77  SQLite library w
9110: 69 6c 6c 0a 72 65 70 6f 72 74 20 62 61 63 6b 20  ill.report back 
9120: 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
9130: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
9140: 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 69 74 20  instructions it 
9150: 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65 64 20  would have.used 
9160: 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 63  to execute the c
9170: 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65 20 45  ommand had the E
9180: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e  XPLAIN keyword n
9190: 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74 2e  ot been present.
91a0: 0a 46 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20  .For additional 
91b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
91c0: 74 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  t virtual machin
91d0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
91e0: 65 65 0a 74 68 65 20 3c 61 20 68 72 65 66 3d 22  ee.the <a href="
91f0: 61 72 63 68 2e 68 74 6d 6c 22 3e 61 72 63 68 69  arch.html">archi
9200: 74 65 63 74 75 72 65 20 64 65 73 63 72 69 70 74  tecture descript
9210: 69 6f 6e 3c 2f 61 3e 20 6f 72 20 74 68 65 20 64  ion</a> or the d
9220: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 6f 6e 20  ocumentation.on 
9230: 3c 61 20 68 72 65 66 3d 22 6f 70 63 6f 64 65 2e  <a href="opcode.
9240: 68 74 6d 6c 22 3e 61 76 61 69 6c 61 62 6c 65 20  html">available 
9250: 6f 70 63 6f 64 65 73 3c 2f 61 3e 20 66 6f 72 20  opcodes</a> for 
9260: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
9270: 69 6e 65 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63  ine.</p>.}...Sec
9280: 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  tion expression 
9290: 65 78 70 72 0a 0a 53 79 6e 74 61 78 20 7b 65 78  expr..Syntax {ex
92a0: 70 72 7d 20 7b 0a 3c 65 78 70 72 3e 20 3c 62 69  pr} {.<expr> <bi
92b0: 6e 61 72 79 2d 6f 70 3e 20 3c 65 78 70 72 3e 20  nary-op> <expr> 
92c0: 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20 3c  |.<expr> [NOT] <
92d0: 6c 69 6b 65 2d 6f 70 3e 20 3c 65 78 70 72 3e 20  like-op> <expr> 
92e0: 5b 45 53 43 41 50 45 20 3c 65 78 70 72 3e 5d 20  [ESCAPE <expr>] 
92f0: 7c 0a 3c 75 6e 61 72 79 2d 6f 70 3e 20 3c 65 78  |.<unary-op> <ex
9300: 70 72 3e 20 7c 0a 28 20 3c 65 78 70 72 3e 20 29  pr> |.( <expr> )
9310: 20 7c 0a 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e   |.<column-name>
9320: 20 7c 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20   |.<table-name> 
9330: 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e 20  . <column-name> 
9340: 7c 0a 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  |.<database-name
9350: 3e 20 2e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  > . <table-name>
9360: 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e   . <column-name>
9370: 20 7c 0a 3c 6c 69 74 65 72 61 6c 2d 76 61 6c 75   |.<literal-valu
9380: 65 3e 20 7c 0a 3c 70 61 72 61 6d 65 74 65 72 3e  e> |.<parameter>
9390: 20 7c 0a 3c 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d   |.<function-nam
93a0: 65 3e 20 28 20 3c 65 78 70 72 2d 6c 69 73 74 3e  e> ( <expr-list>
93b0: 20 7c 20 53 54 41 52 20 29 20 7c 0a 3c 65 78 70   | STAR ) |.<exp
93c0: 72 3e 20 49 53 4e 55 4c 4c 20 7c 0a 3c 65 78 70  r> ISNULL |.<exp
93d0: 72 3e 20 4e 4f 54 4e 55 4c 4c 20 7c 0a 3c 65 78  r> NOTNULL |.<ex
93e0: 70 72 3e 20 5b 4e 4f 54 5d 20 42 45 54 57 45 45  pr> [NOT] BETWEE
93f0: 4e 20 3c 65 78 70 72 3e 20 41 4e 44 20 3c 65 78  N <expr> AND <ex
9400: 70 72 3e 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f  pr> |.<expr> [NO
9410: 54 5d 20 49 4e 20 28 20 3c 76 61 6c 75 65 2d 6c  T] IN ( <value-l
9420: 69 73 74 3e 20 29 20 7c 0a 3c 65 78 70 72 3e 20  ist> ) |.<expr> 
9430: 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 73 65 6c 65  [NOT] IN ( <sele
9440: 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e 20 29 20  ct-statement> ) 
9450: 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20 49  |.<expr> [NOT] I
9460: 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  N [<database-nam
9470: 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d  e> .] <table-nam
9480: 65 3e 20 7c 0a 5b 45 58 49 53 54 53 5d 20 28 20  e> |.[EXISTS] ( 
9490: 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e  <select-statemen
94a0: 74 3e 20 29 20 7c 0a 43 41 53 45 20 5b 3c 65 78  t> ) |.CASE [<ex
94b0: 70 72 3e 5d 20 4c 50 20 57 48 45 4e 20 3c 65 78  pr>] LP WHEN <ex
94c0: 70 72 3e 20 54 48 45 4e 20 3c 65 78 70 72 3e 20  pr> THEN <expr> 
94d0: 52 50 50 4c 55 53 20 5b 45 4c 53 45 20 3c 65 78  RPPLUS [ELSE <ex
94e0: 70 72 3e 5d 20 45 4e 44 20 7c 0a 43 41 53 54 20  pr>] END |.CAST 
94f0: 28 20 3c 65 78 70 72 3e 20 41 53 20 3c 74 79 70  ( <expr> AS <typ
9500: 65 3e 20 29 20 7c 0a 3c 65 78 70 72 3e 20 43 4f  e> ) |.<expr> CO
9510: 4c 4c 41 54 45 20 3c 63 6f 6c 6c 61 74 69 6f 6e  LLATE <collation
9520: 2d 6e 61 6d 65 3e 0a 7d 20 7b 6c 69 6b 65 2d 6f  -name>.} {like-o
9530: 70 7d 20 7b 0a 4c 49 4b 45 20 7c 20 47 4c 4f 42  p} {.LIKE | GLOB
9540: 20 7c 20 52 45 47 45 58 50 20 7c 20 4d 41 54 43   | REGEXP | MATC
9550: 48 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  H.}..puts {.<p>T
9560: 68 69 73 20 73 65 63 74 69 6f 6e 20 69 73 20 64  his section is d
9570: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
9580: 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74 20  e others.  Most 
9590: 6f 74 68 65 72 20 73 65 63 74 69 6f 6e 73 20 6f  other sections o
95a0: 66 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  f.this document 
95b0: 74 61 6c 6b 73 20 61 62 6f 75 74 20 61 20 70 61  talks about a pa
95c0: 72 74 69 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d  rticular SQL com
95d0: 6d 61 6e 64 2e 20 20 54 68 69 73 20 73 65 63 74  mand.  This sect
95e0: 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c  ion does.not tal
95f0: 6b 20 61 62 6f 75 74 20 61 20 73 74 61 6e 64 61  k about a standa
9600: 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74  lone command but
9610: 20 61 62 6f 75 74 20 22 65 78 70 72 65 73 73 69   about "expressi
9620: 6f 6e 73 22 20 77 68 69 63 68 20 61 72 65 20 0a  ons" which are .
9630: 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66  subcomponents of
9640: 20 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d   most other comm
9650: 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51  ands.</p>..<p>SQ
9660: 4c 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73  Lite understands
9670: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62   the following b
9680: 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c  inary operators,
9690: 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68   in order from.h
96a0: 69 67 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74  ighest to lowest
96b0: 20 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e   precedence:</p>
96c0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
96d0: 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  re>.<font color=
96e0: 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c  "#2c2cf0"><big>|
96f0: 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20  |.*    /    %.+ 
9700: 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20     -.&lt;&lt;   
9710: 26 67 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b  &gt;&gt;   &amp;
9720: 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c      |.&lt;    &l
9730: 74 3b 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67  t;=   &gt;    &g
9740: 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d  t;=.=    ==   !=
9750: 20 20 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f     &lt;&gt;   </
9760: 62 69 67 3e 49 4e 0a 41 4e 44 20 20 20 0a 4f 52  big>IN.AND   .OR
9770: 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
9780: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
9790: 53 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20  Supported unary 
97a0: 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73  prefix operators
97b0: 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a   are these:</p>.
97c0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
97d0: 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
97e0: 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20  #2c2cf0"><big>- 
97f0: 20 20 20 2b 20 20 20 20 21 20 20 20 20 7e 20 20     +    !    ~  
9800: 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e    NOT</big></fon
9810: 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
9820: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 43  quote>..<p>The C
9830: 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
9840: 63 61 6e 20 62 65 20 74 68 6f 75 67 68 74 20 6f  can be thought o
9850: 66 20 61 73 20 61 20 75 6e 61 72 79 20 70 6f 73  f as a unary pos
9860: 74 66 69 78 0a 6f 70 65 72 61 74 6f 72 2e 20 20  tfix.operator.  
9870: 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  The COLLATE oper
9880: 61 74 6f 72 20 68 61 73 20 74 68 65 20 68 69 67  ator has the hig
9890: 68 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 2e  hest precedence.
98a0: 0a 49 74 20 61 6c 77 61 79 73 20 62 69 6e 64 73  .It always binds
98b0: 20 6d 6f 72 65 20 74 69 67 68 74 6c 79 20 74 68   more tightly th
98c0: 61 6e 20 61 6e 79 20 70 72 65 66 69 78 20 75 6e  an any prefix un
98d0: 61 72 79 20 6f 70 65 72 61 74 6f 72 20 6f 72 0a  ary operator or.
98e0: 61 6e 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61  any binary opera
98f0: 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  tor.</p>..<p>The
9900: 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
9910: 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69 73 20  [Operator +] is 
9920: 61 20 6e 6f 2d 6f 70 2e 20 20 49 74 20 63 61 6e  a no-op.  It can
9930: 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f 20 73   be applied.to s
9940: 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c  trings, numbers,
9950: 20 6f 72 20 62 6c 6f 62 73 20 61 6e 64 20 69 74   or blobs and it
9960: 20 61 6c 77 61 79 73 20 67 69 76 65 73 20 61 73   always gives as
9970: 20 69 74 73 20 72 65 73 75 6c 74 20 74 68 65 0a   its result the.
9980: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 65  value of the ope
9990: 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f  rand.</p>..<p>No
99a0: 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72  te that there ar
99b0: 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73  e two variations
99c0: 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61   of the equals a
99d0: 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70  nd not equals.op
99e0: 65 72 61 74 6f 72 73 2e 20 20 45 71 75 61 6c 73  erators.  Equals
99f0: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 7d 0a   can be either}.
9a00: 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20  puts "[Operator 
9a10: 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
9a20: 3d 3d 5d 2e 0a 54 68 65 20 6e 6f 6e 2d 65 71 75  ==]..The non-equ
9a30: 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e  als operator can
9a40: 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72   be either.[Oper
9a50: 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65  ator !=] or [Ope
9a60: 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d  rator {&lt;&gt;}
9a70: 5d 2e 0a 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ]..The [Operator
9a80: 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
9a90: 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
9aa0: 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
9ab0: 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
9ac0: 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
9ad0: 61 6e 64 73 2e 0a 54 68 65 20 6f 70 65 72 61 74  ands..The operat
9ae0: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
9af0: 6f 75 74 70 75 74 73 20 74 68 65 20 72 65 6d 61  outputs the rema
9b00: 69 6e 64 65 72 20 6f 66 20 69 74 73 20 6c 65 66  inder of its lef
9b10: 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
9b20: 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
9b30: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  and.</p>..<p>The
9b40: 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79 20 62   result of any b
9b50: 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 69  inary operator i
9b60: 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
9b70: 65 2c 20 65 78 63 65 70 74 0a 66 6f 72 20 74 68  e, except.for th
9b80: 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
9b90: 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70  concatenation op
9ba0: 65 72 61 74 6f 72 20 77 68 69 63 68 20 67 69 76  erator which giv
9bb0: 65 73 20 61 20 73 74 72 69 6e 67 0a 72 65 73 75  es a string.resu
9bc0: 6c 74 2e 3c 2f 70 3e 22 0a 0a 70 75 74 73 20 7b  lt.</p>"..puts {
9bd0: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69 74 65 72  ..<a name="liter
9be0: 61 6c 5f 76 61 6c 75 65 22 3e 3c 2f 61 3e 0a 3c  al_value"></a>.<
9bf0: 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  p>.A literal val
9c00: 75 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ue is an integer
9c10: 20 6e 75 6d 62 65 72 20 6f 72 20 61 20 66 6c 6f   number or a flo
9c20: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
9c30: 65 72 2e 0a 53 63 69 65 6e 74 69 66 69 63 20 6e  er..Scientific n
9c40: 6f 74 61 74 69 6f 6e 20 69 73 20 73 75 70 70 6f  otation is suppo
9c50: 72 74 65 64 2e 20 20 54 68 65 20 22 2e 22 20 63  rted.  The "." c
9c60: 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
9c70: 79 73 20 75 73 65 64 0a 61 73 20 74 68 65 20 64  ys used.as the d
9c80: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65  ecimal point eve
9c90: 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20  n if the locale 
9ca0: 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65  setting specifie
9cb0: 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72  s "," for.this r
9cc0: 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66  ole - the use of
9cd0: 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63   "," for the dec
9ce0: 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64  imal point would
9cf0: 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61   result in.synta
9d00: 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 20  ctic ambiguity. 
9d10: 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   A string consta
9d20: 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62 79 20  nt is formed by 
9d30: 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74  enclosing the.st
9d40: 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20 71  ring in single q
9d50: 75 6f 74 65 73 20 28 27 29 2e 20 20 41 20 73 69  uotes (').  A si
9d60: 6e 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69  ngle quote withi
9d70: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e  n the string can
9d80: 0a 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70  .be encoded by p
9d90: 75 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c  utting two singl
9da0: 65 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f  e quotes in a ro
9db0: 77 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c  w - as in Pascal
9dc0: 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65  ..C-style escape
9dd0: 73 20 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b  s using the back
9de0: 73 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 20  slash character 
9df0: 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
9e00: 64 20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61  d because.they a
9e10: 72 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  re not standard 
9e20: 53 51 4c 2e 0a 42 4c 4f 42 20 6c 69 74 65 72 61  SQL..BLOB litera
9e30: 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69  ls are string li
9e40: 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e  terals containin
9e50: 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61  g hexadecimal da
9e60: 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20  ta and.preceded 
9e70: 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20  by a single "x" 
9e80: 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72  or "X" character
9e90: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c  .  For example:<
9ea0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
9eb0: 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 36 39  ><pre>.X'5351469
9ec0: 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  7465'.</pre></bl
9ed0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 41  ockquote>..<p>.A
9ee0: 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 63   literal value c
9ef0: 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20 74  an also be the t
9f00: 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70  oken "NULL"..</p
9f10: 3e 0a 0a 3c 70 3e 0a 41 20 70 61 72 61 6d 65 74  >..<p>.A paramet
9f20: 65 72 20 73 70 65 63 69 66 69 65 73 20 61 20 70  er specifies a p
9f30: 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74 68  laceholder in th
9f40: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72  e expression for
9f50: 20 61 20 6c 69 74 65 72 61 6c 0a 76 61 6c 75 65   a literal.value
9f60: 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20   that is filled 
9f70: 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  in at runtime us
9f80: 69 6e 67 20 74 68 65 0a 3c 61 20 68 72 65 66 3d  ing the.<a href=
9f90: 22 63 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73  "capi3ref.html#s
9fa0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22  qlite3_bind_int"
9fb0: 3e 73 71 6c 69 74 65 33 5f 62 69 6e 64 3c 2f 61  >sqlite3_bind</a
9fc0: 3e 20 41 50 49 2e 0a 50 61 72 61 6d 65 74 65 72  > API..Parameter
9fd0: 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72  s can take sever
9fe0: 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 0a 0a 3c  al forms:.</p..<
9ff0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
a000: 6c 65 20 63 6c 61 73 73 3d 22 70 64 66 5f 66 75  le class="pdf_fu
a010: 6e 63 74 69 6f 6e 73 22 3e 0a 3c 74 72 3e 0a 3c  nctions">.<tr>.<
a020: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
a030: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
a040: 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e  >?</b><i>NNN</i>
a050: 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
a060: 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20  20"></td>.<td>A 
a070: 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f  question mark fo
a080: 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
a090: 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f  er <i>NNN</i> ho
a0a0: 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74  lds a spot for t
a0b0: 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65  he.NNN-th parame
a0c0: 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62  ter.  NNN must b
a0d0: 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
a0e0: 39 39 39 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  999.</td>.</tr>.
a0f0: 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
a100: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
a110: 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64  op"><b>?</b></td
a120: 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
a130: 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 71 75 65 73  </td>.<td>A ques
a140: 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69  tion mark that i
a150: 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62  s not followed b
a160: 79 20 61 20 6e 75 6d 62 65 72 20 68 6f 6c 64 73  y a number holds
a170: 20 61 20 73 70 6f 74 20 66 6f 72 0a 74 68 65 20   a spot for.the 
a180: 6e 65 78 74 20 75 6e 75 73 65 64 20 70 61 72 61  next unused para
a190: 6d 65 74 65 72 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  meter.</td>.</tr
a1a0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
a1b0: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
a1c0: 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69  "top"><b>:</b><i
a1d0: 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
a1e0: 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
a1f0: 64 3e 0a 3c 74 64 3e 41 20 63 6f 6c 6f 6e 20 66  d>.<td>A colon f
a200: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
a210: 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f  entifier name ho
a220: 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61  lds a spot for a
a230: 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72   named.parameter
a240: 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 41   with the name A
a250: 41 41 41 2e 20 20 4e 61 6d 65 64 20 70 61 72 61  AAA.  Named para
a260: 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f 20  meters are also 
a270: 6e 75 6d 62 65 72 65 64 2e 0a 54 68 65 20 6e 75  numbered..The nu
a280: 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 69 73  mber assigned is
a290: 20 74 68 65 20 6e 65 78 74 20 75 6e 75 73 65 64   the next unused
a2a0: 20 6e 75 6d 62 65 72 2e 20 20 54 6f 20 61 76 6f   number.  To avo
a2b0: 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 0a 69 74  id confusion,.it
a2c0: 20 69 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69   is best to avoi
a2d0: 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61  d mixing named a
a2e0: 6e 64 20 6e 75 6d 62 65 72 65 64 20 70 61 72 61  nd numbered para
a2f0: 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74  meters.</td>.</t
a300: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
a310: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
a320: 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c  ="top"><b>@</b><
a330: 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
a340: 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
a350: 74 64 3e 0a 3c 74 64 3e 41 6e 20 22 61 74 22 20  td>.<td>An "at" 
a360: 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74  sign works exact
a370: 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2e  ly like a colon.
a380: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
a390: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
a3a0: 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
a3b0: 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c  <b>$</b><i>AAAA<
a3c0: 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
a3d0: 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
a3e0: 3e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66  >A dollar-sign f
a3f0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64  ollowed by an id
a400: 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c  entifier name al
a410: 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  so holds a spot 
a420: 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61  for a named.para
a430: 6d 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e  meter with the n
a440: 61 6d 65 20 41 41 41 41 2e 20 20 54 68 65 20 69  ame AAAA.  The i
a450: 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69  dentifier name i
a460: 6e 20 74 68 69 73 20 63 61 73 65 20 63 61 6e 20  n this case can 
a470: 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d  include.one or m
a480: 6f 72 65 20 6f 63 63 75 72 61 6e 63 65 73 20 6f  ore occurances o
a490: 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66  f "::" and a suf
a4a0: 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  fix enclosed in 
a4b0: 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69  "(...)" containi
a4c0: 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61  ng.any text at a
a4d0: 6c 6c 2e 20 20 54 68 69 73 20 73 79 6e 74 61 78  ll.  This syntax
a4e0: 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20   is the form of 
a4f0: 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20  a variable name 
a500: 69 6e 20 74 68 65 20 54 63 6c 0a 70 72 6f 67 72  in the Tcl.progr
a510: 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 2e  amming language.
a520: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
a530: 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
a540: 65 3e 0a 0a 3c 70 3e 50 61 72 61 6d 65 74 65 72  e>..<p>Parameter
a550: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61  s that are not a
a560: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73 20 75  ssigned values u
a570: 73 69 6e 67 0a 3c 61 20 68 72 65 66 3d 22 63 61  sing.<a href="ca
a580: 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69  pi3ref.html#sqli
a590: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22 3e 73 71  te3_bind_int">sq
a5a0: 6c 69 74 65 33 5f 62 69 6e 64 3c 2f 61 3e 20 61  lite3_bind</a> a
a5b0: 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55  re treated.as NU
a5c0: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65  LL.</p>..<a name
a5d0: 3d 22 6c 69 6b 65 22 3e 3c 2f 61 3e 0a 3c 70 3e  ="like"></a>.<p>
a5e0: 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
a5f0: 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e  r does a pattern
a600: 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72   matching compar
a610: 69 73 6f 6e 2e 20 54 68 65 20 6f 70 65 72 61 6e  ison. The operan
a620: 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20 63  d.to the right c
a630: 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74  ontains the patt
a640: 65 72 6e 2c 20 74 68 65 20 6c 65 66 74 20 68 61  ern, the left ha
a650: 6e 64 20 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61  nd operand conta
a660: 69 6e 73 20 74 68 65 0a 73 74 72 69 6e 67 20 74  ins the.string t
a670: 6f 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20  o match against 
a680: 74 68 65 20 70 61 74 74 65 72 6e 2e 20 0a 7d 0a  the pattern. .}.
a690: 70 75 74 73 20 22 41 20 70 65 72 63 65 6e 74 20  puts "A percent 
a6a0: 73 79 6d 62 6f 6c 20 5b 4f 70 65 72 61 74 6f 72  symbol [Operator
a6b0: 20 25 5d 20 69 6e 20 74 68 65 20 70 61 74 74 65   %] in the patte
a6c0: 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73  rn matches any.s
a6d0: 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
a6e0: 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
a6f0: 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
a700: 2e 20 20 41 6e 20 75 6e 64 65 72 73 63 6f 72 65  .  An underscore
a710: 0a 5b 4f 70 65 72 61 74 6f 72 20 5f 5d 20 69 6e  .[Operator _] in
a720: 20 74 68 65 20 70 61 74 74 65 72 6e 20 6d 61 74   the pattern mat
a730: 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20  ches any single 
a740: 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65  character in the
a750: 0a 73 74 72 69 6e 67 2e 20 20 41 6e 79 20 6f 74  .string.  Any ot
a760: 68 65 72 20 63 68 61 72 61 63 74 65 72 20 6d 61  her character ma
a770: 74 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20  tches itself or 
a780: 69 74 27 73 20 6c 6f 77 65 72 2f 75 70 70 65 72  it's lower/upper
a790: 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74   case.equivalent
a7a0: 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65   (i.e. case-inse
a7b0: 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67  nsitive matching
a7c0: 29 2e 20 20 28 41 20 62 75 67 3a 20 53 51 4c 69  ).  (A bug: SQLi
a7d0: 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
a7e0: 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
a7f0: 63 61 73 65 20 66 6f 72 20 37 2d 62 69 74 20 4c  case for 7-bit L
a800: 61 74 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e  atin characters.
a810: 20 20 48 65 6e 63 65 20 74 68 65 0a 4c 49 4b 45    Hence the.LIKE
a820: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
a830: 65 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72 20  e sensitive for 
a840: 38 2d 62 69 74 20 69 73 6f 38 38 35 39 20 63 68  8-bit iso8859 ch
a850: 61 72 61 63 74 65 72 73 20 6f 72 20 55 54 46 2d  aracters or UTF-
a860: 38 0a 63 68 61 72 61 63 74 65 72 73 2e 20 20 46  8.characters.  F
a870: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
a880: 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61  expression <b>'a
a890: 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
a8a0: 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45  ;'A'</b>.is TRUE
a8b0: 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b   but <b>'&aelig;
a8c0: 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70  '&nbsp;LIKE&nbsp
a8d0: 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69  ;'&AElig;'</b> i
a8e0: 73 20 46 41 4c 53 45 2e 29 2e 3c 2f 70 3e 22 0a  s FALSE.).</p>".
a8f0: 0a 70 75 74 73 20 7b 0a 3c 70 3e 49 66 20 74 68  .puts {.<p>If th
a900: 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
a910: 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
a920: 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78  ent, then the ex
a930: 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69  pression.followi
a940: 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65  ng the ESCAPE ke
a950: 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75  yword must evalu
a960: 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ate to a string 
a970: 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20  consisting of.a 
a980: 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
a990: 2e 20 54 68 69 73 20 63 68 61 72 61 63 74 65 72  . This character
a9a0: 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
a9b0: 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e  the LIKE pattern
a9c0: 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65  .to include lite
a9d0: 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75  ral percent or u
a9e0: 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61 63  nderscore charac
a9f0: 74 65 72 73 2e 20 54 68 65 20 65 73 63 61 70 65  ters. The escape
aa00: 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f  .character follo
aa10: 77 65 64 20 62 79 20 61 20 70 65 72 63 65 6e 74  wed by a percent
aa20: 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63   symbol, undersc
aa30: 6f 72 65 20 6f 72 20 69 74 73 65 6c 66 20 6d 61  ore or itself ma
aa40: 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20  tches a.literal 
aa50: 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20  percent symbol, 
aa60: 75 6e 64 65 72 73 63 6f 72 65 20 6f 72 20 65 73  underscore or es
aa70: 63 61 70 65 20 63 68 61 72 61 63 74 65 72 20 69  cape character i
aa80: 6e 20 74 68 65 20 73 74 72 69 6e 67 2c 0a 72 65  n the string,.re
aa90: 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 20  spectively. The 
aaa0: 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72 61  infix LIKE opera
aab0: 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
aac0: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
aad0: 65 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e.user function 
aae0: 3c 61 20 68 72 65 66 3d 22 23 6c 69 6b 65 46 75  <a href="#likeFu
aaf0: 6e 63 22 3e 20 6c 69 6b 65 28 3c 69 3e 58 3c 2f  nc"> like(<i>X</
ab00: 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e  i>,<i>Y</i>)</a>
ab10: 2e 3c 2f 70 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  .</p>.}..puts {.
ab20: 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
ab30: 72 20 69 73 20 6e 6f 74 20 63 61 73 65 20 73 65  r is not case se
ab40: 6e 73 69 74 69 76 65 20 61 6e 64 20 77 69 6c 6c  nsitive and will
ab50: 20 6d 61 74 63 68 20 75 70 70 65 72 20 63 61 73   match upper cas
ab60: 65 0a 63 68 61 72 61 63 74 65 72 73 20 6f 6e 20  e.characters on 
ab70: 6f 6e 65 20 73 69 64 65 20 61 67 61 69 6e 73 74  one side against
ab80: 20 6c 6f 77 65 72 20 63 61 73 65 20 63 68 61 72   lower case char
ab90: 61 63 74 65 72 73 20 6f 6e 20 74 68 65 20 6f 74  acters on the ot
aba0: 68 65 72 2e 20 20 0a 28 41 20 62 75 67 3a 20 53  her.  .(A bug: S
abb0: 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65 72  QLite only under
abc0: 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77  stands upper/low
abd0: 65 72 20 63 61 73 65 20 66 6f 72 20 37 2d 62 69  er case for 7-bi
abe0: 74 20 4c 61 74 69 6e 0a 63 68 61 72 61 63 74 65  t Latin.characte
abf0: 72 73 2e 20 20 48 65 6e 63 65 20 74 68 65 20 4c  rs.  Hence the L
ac00: 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  IKE operator is 
ac10: 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 66  case sensitive f
ac20: 6f 72 20 38 2d 62 69 74 0a 69 73 6f 38 38 35 39  or 8-bit.iso8859
ac30: 20 63 68 61 72 61 63 74 65 72 73 20 6f 72 20 55   characters or U
ac40: 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e  TF-8 characters.
ac50: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
ac60: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 3c 62  he expression.<b
ac70: 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e  >'a'&nbsp;LIKE&n
ac80: 62 73 70 3b 27 41 27 3c 2f 62 3e 20 69 73 20 54  bsp;'A'</b> is T
ac90: 52 55 45 20 62 75 74 0a 3c 62 3e 27 26 61 65 6c  RUE but.<b>'&ael
aca0: 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e  ig;'&nbsp;LIKE&n
acb0: 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62  bsp;'&AElig;'</b
acc0: 3e 20 69 73 20 46 41 4c 53 45 2e 29 2e 3c 2f 70  > is FALSE.).</p
acd0: 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66 69 78 20  >..<p>The infix 
ace0: 4c 49 4b 45 0a 6f 70 65 72 61 74 6f 72 20 69 73  LIKE.operator is
acf0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
ad00: 63 61 6c 6c 69 6e 67 20 74 68 65 20 75 73 65 72  calling the user
ad10: 20 66 75 6e 63 74 69 6f 6e 20 3c 61 20 68 72 65   function <a hre
ad20: 66 3d 22 23 6c 69 6b 65 46 75 6e 63 22 3e 0a 6c  f="#likeFunc">.l
ad30: 69 6b 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  ike(<i>X</i>,<i>
ad40: 59 3c 2f 69 3e 29 3c 2f 61 3e 2e 20 20 49 66 20  Y</i>)</a>.  If 
ad50: 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  an ESCAPE clause
ad60: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20   is present, it 
ad70: 61 64 64 73 0a 61 20 74 68 69 72 64 20 70 61 72  adds.a third par
ad80: 61 6d 65 74 65 72 20 74 6f 20 74 68 65 20 66 75  ameter to the fu
ad90: 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 49 66 20  nction call. If 
ada0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  the functionalit
adb0: 79 20 6f 66 20 4c 49 4b 45 20 63 61 6e 20 62 65  y of LIKE can be
adc0: 0a 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 64  .overridden by d
add0: 65 66 69 6e 69 6e 67 20 61 6e 20 61 6c 74 65 72  efining an alter
ade0: 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74  native implement
adf0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 6c 69 6b  ation of the.lik
ae00: 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
ae10: 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a 3c 61 20 6e  .</p>.</p>..<a n
ae20: 61 6d 65 3d 22 67 6c 6f 62 22 3e 3c 2f 61 3e 0a  ame="glob"></a>.
ae30: 3c 70 3e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72  <p>The GLOB oper
ae40: 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20  ator is similar 
ae50: 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73  to LIKE but uses
ae60: 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67   the Unix.file g
ae70: 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66  lobbing syntax f
ae80: 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73  or its wildcards
ae90: 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73  .  Also, GLOB is
aea0: 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c   case.sensitive,
aeb0: 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 42   unlike LIKE.  B
aec0: 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b  oth GLOB and LIK
aed0: 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64 65  E may be precede
aee0: 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79  d by.the NOT key
aef0: 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20 74  word to invert t
af00: 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65 20  he sense of the 
af10: 74 65 73 74 2e 20 20 54 68 65 20 69 6e 66 69 78  test.  The infix
af20: 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20   GLOB .operator 
af30: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
af40: 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 75 73  y calling the us
af50: 65 72 20 66 75 6e 63 74 69 6f 6e 20 3c 61 20 68  er function <a h
af60: 72 65 66 3d 22 23 67 6c 6f 62 46 75 6e 63 22 3e  ref="#globFunc">
af70: 0a 67 6c 6f 62 28 3c 69 3e 58 3c 2f 69 3e 2c 3c  .glob(<i>X</i>,<
af80: 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e 20 61 6e 64  i>Y</i>)</a> and
af90: 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64   can be modified
afa0: 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74   by overriding.t
afb0: 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  hat function.</p
afc0: 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22 72 65 67 65  >..<a name="rege
afd0: 78 70 22 3e 3c 2f 61 3e 0a 3c 70 3e 54 68 65 20  xp"></a>.<p>The 
afe0: 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
aff0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
b000: 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65  tax for the rege
b010: 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69  xp().user functi
b020: 6f 6e 2e 20 20 4e 6f 20 72 65 67 65 78 70 28 29  on.  No regexp()
b030: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69   user function i
b040: 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65 66  s defined by def
b050: 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20  ault.and so use 
b060: 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f 70  of the REGEXP op
b070: 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d  erator will norm
b080: 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61  ally result in a
b090: 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  n.error message.
b0a0: 20 20 49 66 20 61 20 75 73 65 72 2d 64 65 66 69    If a user-defi
b0b0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  ned function nam
b0c0: 65 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61  ed "regexp".is a
b0d0: 64 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  dded at run-time
b0e0: 2c 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20  , that function 
b0f0: 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69  will be called i
b100: 6e 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65  n order.to imple
b110: 6d 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20  ment the REGEXP 
b120: 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c  operator.</p>..<
b130: 61 20 6e 61 6d 65 3d 22 6d 61 74 63 68 22 3e 3c  a name="match"><
b140: 2f 61 3e 0a 3c 70 3e 54 68 65 20 4d 41 54 43 48  /a>.<p>The MATCH
b150: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
b160: 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f  pecial syntax fo
b170: 72 20 74 68 65 20 6d 61 74 63 68 28 29 0a 75 73  r the match().us
b180: 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  er function.  Th
b190: 65 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28  e default match(
b1a0: 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  ) function imple
b1b0: 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73  mentation.raises
b1c0: 20 61 6e 64 20 65 78 63 65 70 74 69 6f 6e 20 61   and exception a
b1d0: 6e 64 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79  nd is not really
b1e0: 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74   useful for anyt
b1f0: 68 69 6e 67 2e 0a 42 75 74 20 65 78 74 65 6e 73  hing..But extens
b200: 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64  ions can overrid
b210: 65 20 74 68 65 20 6d 61 74 63 68 28 29 20 66 75  e the match() fu
b220: 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65  nction with more
b230: 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c  .helpful logic.<
b240: 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6c 75 6d 6e  /p>..<p>A column
b250: 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79   name can be any
b260: 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65   of the names de
b270: 66 69 6e 65 64 20 69 6e 20 74 68 65 20 43 52 45  fined in the CRE
b280: 41 54 45 20 54 41 42 4c 45 0a 73 74 61 74 65 6d  ATE TABLE.statem
b290: 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68  ent or one of th
b2a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63  e following spec
b2b0: 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a  ial identifiers:
b2c0: 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c   "<b>ROWID</b>",
b2d0: 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f  ."<b>OID</b>", o
b2e0: 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62  r "<b>_ROWID_</b
b2f0: 3e 22 2e 0a 54 68 65 73 65 20 73 70 65 63 69 61  >"..These specia
b300: 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 61 6c  l identifiers al
b310: 6c 20 64 65 73 63 72 69 62 65 20 74 68 65 0a 75  l describe the.u
b320: 6e 69 71 75 65 20 72 61 6e 64 6f 6d 20 69 6e 74  nique random int
b330: 65 67 65 72 20 6b 65 79 20 28 74 68 65 20 22 72  eger key (the "r
b340: 6f 77 20 6b 65 79 22 29 20 61 73 73 6f 63 69 61  ow key") associa
b350: 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20 0a  ted with every .
b360: 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61 62  row of every tab
b370: 6c 65 2e 0a 54 68 65 20 73 70 65 63 69 61 6c 20  le..The special 
b380: 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79  identifiers only
b390: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f   refer to the ro
b3a0: 77 20 6b 65 79 20 69 66 20 74 68 65 20 43 52 45  w key if the CRE
b3b0: 41 54 45 20 54 41 42 4c 45 0a 73 74 61 74 65 6d  ATE TABLE.statem
b3c0: 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  ent does not def
b3d0: 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d  ine a real colum
b3e0: 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  n with the same 
b3f0: 6e 61 6d 65 2e 20 20 52 6f 77 20 6b 65 79 73 0a  name.  Row keys.
b400: 61 63 74 20 6c 69 6b 65 20 72 65 61 64 2d 6f 6e  act like read-on
b410: 6c 79 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 72  ly columns.  A r
b420: 6f 77 20 6b 65 79 20 63 61 6e 20 62 65 20 75 73  ow key can be us
b430: 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65  ed anywhere a re
b440: 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e  gular.column can
b450: 20 62 65 20 75 73 65 64 2c 20 65 78 63 65 70 74   be used, except
b460: 20 74 68 61 74 20 79 6f 75 20 63 61 6e 6e 6f 74   that you cannot
b470: 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
b480: 65 0a 6f 66 20 61 20 72 6f 77 20 6b 65 79 20 69  e.of a row key i
b490: 6e 20 61 6e 20 55 50 44 41 54 45 20 6f 72 20 49  n an UPDATE or I
b4a0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
b4b0: 0a 22 53 45 4c 45 43 54 20 2a 20 2e 2e 2e 22 20  ."SELECT * ..." 
b4c0: 64 6f 65 73 20 6e 6f 74 20 72 65 74 75 72 6e 20  does not return 
b4d0: 74 68 65 20 72 6f 77 20 6b 65 79 2e 3c 2f 70 3e  the row key.</p>
b4e0: 0a 0a 3c 70 3e 53 45 4c 45 43 54 20 73 74 61 74  ..<p>SELECT stat
b4f0: 65 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61  ements can appea
b500: 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  r in expressions
b510: 20 61 73 20 65 69 74 68 65 72 20 74 68 65 0a 72   as either the.r
b520: 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
b530: 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72  d of the IN oper
b540: 61 74 6f 72 2c 20 61 73 20 61 20 73 63 61 6c 61  ator, as a scala
b550: 72 20 71 75 61 6e 74 69 74 79 2c 20 6f 72 0a 61  r quantity, or.a
b560: 73 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66  s the operand of
b570: 20 61 6e 20 45 58 49 53 54 53 20 6f 70 65 72 61   an EXISTS opera
b580: 74 6f 72 2e 0a 41 73 20 61 20 73 63 61 6c 61 72  tor..As a scalar
b590: 20 71 75 61 6e 74 69 74 79 20 6f 72 20 74 68 65   quantity or the
b5a0: 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49   operand of an I
b5b0: 4e 20 6f 70 65 72 61 74 6f 72 2c 0a 74 68 65 20  N operator,.the 
b5c0: 53 45 4c 45 43 54 20 73 68 6f 75 6c 64 20 68 61  SELECT should ha
b5d0: 76 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  ve only a single
b5e0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 69 74 73 0a 72   column in its.r
b5f0: 65 73 75 6c 74 2e 20 20 43 6f 6d 70 6f 75 6e 64  esult.  Compound
b600: 20 53 45 4c 45 43 54 73 20 28 63 6f 6e 6e 65 63   SELECTs (connec
b610: 74 65 64 20 77 69 74 68 20 6b 65 79 77 6f 72 64  ted with keyword
b620: 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 0a  s like UNION or.
b630: 45 58 43 45 50 54 29 20 61 72 65 20 61 6c 6c 6f  EXCEPT) are allo
b640: 77 65 64 2e 0a 57 69 74 68 20 74 68 65 20 45 58  wed..With the EX
b650: 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2c 20 74  ISTS operator, t
b660: 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  he columns in th
b670: 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
b680: 74 68 65 20 53 45 4c 45 43 54 20 61 72 65 0a 69  the SELECT are.i
b690: 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 65  gnored and the e
b6a0: 78 70 72 65 73 73 69 6f 6e 20 72 65 74 75 72 6e  xpression return
b6b0: 73 20 54 52 55 45 20 69 66 20 6f 6e 65 20 6f 72  s TRUE if one or
b6c0: 20 6d 6f 72 65 20 72 6f 77 73 20 65 78 69 73 74   more rows exist
b6d0: 0a 61 6e 64 20 46 41 4c 53 45 20 69 66 20 74 68  .and FALSE if th
b6e0: 65 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  e result set is 
b6f0: 65 6d 70 74 79 2e 0a 49 66 20 6e 6f 20 74 65 72  empty..If no ter
b700: 6d 73 20 69 6e 20 74 68 65 20 53 45 4c 45 43 54  ms in the SELECT
b710: 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66 65   expression refe
b720: 72 20 74 6f 20 76 61 6c 75 65 20 69 6e 20 74 68  r to value in th
b730: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 71 75 65  e containing.que
b740: 72 79 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  ry, then the exp
b750: 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
b760: 61 74 65 64 20 6f 6e 63 65 20 70 72 69 6f 72 20  ated once prior 
b770: 74 6f 20 61 6e 79 20 6f 74 68 65 72 0a 70 72 6f  to any other.pro
b780: 63 65 73 73 69 6e 67 20 61 6e 64 20 74 68 65 20  cessing and the 
b790: 72 65 73 75 6c 74 20 69 73 20 72 65 75 73 65 64  result is reused
b7a0: 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e 20 20   as necessary.  
b7b0: 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 65 78  If the SELECT ex
b7c0: 70 72 65 73 73 69 6f 6e 0a 64 6f 65 73 20 63 6f  pression.does co
b7d0: 6e 74 61 69 6e 20 76 61 72 69 61 62 6c 65 73 20  ntain variables 
b7e0: 66 72 6f 6d 20 74 68 65 20 6f 75 74 65 72 20 71  from the outer q
b7f0: 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20 53  uery, then the S
b800: 45 4c 45 43 54 20 69 73 20 72 65 65 76 61 6c 75  ELECT is reevalu
b810: 61 74 65 64 0a 65 76 65 72 79 20 74 69 6d 65 20  ated.every time 
b820: 69 74 20 69 73 20 6e 65 65 64 65 64 2e 3c 2f 70  it is needed.</p
b830: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45 4c  >..<p>When a SEL
b840: 45 43 54 20 69 73 20 74 68 65 20 72 69 67 68 74  ECT is the right
b850: 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20   operand of the 
b860: 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65  IN operator, the
b870: 20 49 4e 0a 6f 70 65 72 61 74 6f 72 20 72 65 74   IN.operator ret
b880: 75 72 6e 73 20 54 52 55 45 20 69 66 20 74 68 65  urns TRUE if the
b890: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6c   result of the l
b8a0: 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 61  eft operand is a
b8b0: 6e 79 20 6f 66 0a 74 68 65 20 76 61 6c 75 65 73  ny of.the values
b8c0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
b8d0: 65 20 73 65 6c 65 63 74 2e 20 20 54 68 65 20 49  e select.  The I
b8e0: 4e 20 6f 70 65 72 61 74 6f 72 20 6d 61 79 20 62  N operator may b
b8f0: 65 20 70 72 65 63 65 64 65 64 0a 62 79 20 74 68  e preceded.by th
b900: 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f  e NOT keyword to
b910: 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73   invert the sens
b920: 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 3c 2f  e of the test.</
b930: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45  p>..<p>When a SE
b940: 4c 45 43 54 20 61 70 70 65 61 72 73 20 77 69 74  LECT appears wit
b950: 68 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f  hin an expressio
b960: 6e 20 62 75 74 20 69 73 20 6e 6f 74 20 74 68 65  n but is not the
b970: 20 72 69 67 68 74 0a 6f 70 65 72 61 6e 64 20 6f   right.operand o
b980: 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72  f an IN operator
b990: 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
b9a0: 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73 75   row of the resu
b9b0: 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  lt of the.SELECT
b9c0: 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c   becomes the val
b9d0: 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 65  ue used in the e
b9e0: 78 70 72 65 73 73 69 6f 6e 2e 20 20 49 66 20 74  xpression.  If t
b9f0: 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73  he SELECT yields
ba00: 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72  .more than one r
ba10: 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72  esult row, all r
ba20: 6f 77 73 20 61 66 74 65 72 20 74 68 65 20 66 69  ows after the fi
ba30: 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e  rst are ignored.
ba40: 20 20 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20    If.the SELECT 
ba50: 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20  yields no rows, 
ba60: 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
ba70: 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20  f the SELECT is 
ba80: 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  NULL.</p>..<p>A 
ba90: 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20  CAST expression 
baa0: 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61  changes the data
bab0: 74 79 70 65 20 6f 66 20 74 68 65 20 3c 65 78 70  type of the <exp
bac0: 72 3e 20 69 6e 74 6f 20 74 68 65 0a 74 79 70 65  r> into the.type
bad0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 26 6c   specified by &l
bae0: 74 3b 74 79 70 65 26 67 74 3b 2e 20 0a 26 6c 74  t;type&gt;. .&lt
baf0: 3b 74 79 70 65 26 67 74 3b 20 63 61 6e 20 62 65  ;type&gt; can be
bb00: 20 61 6e 79 20 6e 6f 6e 2d 65 6d 70 74 79 20 74   any non-empty t
bb10: 79 70 65 20 6e 61 6d 65 20 74 68 61 74 20 69 73  ype name that is
bb20: 20 76 61 6c 69 64 0a 66 6f 72 20 74 68 65 20 74   valid.for the t
bb30: 79 70 65 20 69 6e 20 61 20 63 6f 6c 75 6d 6e 20  ype in a column 
bb40: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
bb50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
bb60: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tement.</p>..<p>
bb70: 42 6f 74 68 20 73 69 6d 70 6c 65 20 61 6e 64 20  Both simple and 
bb80: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
bb90: 6f 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  ons are supporte
bba0: 64 2e 20 20 41 20 73 69 6d 70 6c 65 0a 66 75 6e  d.  A simple.fun
bbb0: 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ction can be use
bbc0: 64 20 69 6e 20 61 6e 79 20 65 78 70 72 65 73 73  d in any express
bbd0: 69 6f 6e 2e 20 20 53 69 6d 70 6c 65 20 66 75 6e  ion.  Simple fun
bbe0: 63 74 69 6f 6e 73 20 72 65 74 75 72 6e 0a 61 20  ctions return.a 
bbf0: 72 65 73 75 6c 74 20 69 6d 6d 65 64 69 61 74 65  result immediate
bc00: 6c 79 20 62 61 73 65 64 20 6f 6e 20 74 68 65 69  ly based on thei
bc10: 72 20 69 6e 70 75 74 73 2e 20 20 41 67 67 72 65  r inputs.  Aggre
bc20: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d  gate functions.m
bc30: 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
bc40: 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  in a SELECT stat
bc50: 65 6d 65 6e 74 2e 20 20 41 67 67 72 65 67 61 74  ement.  Aggregat
bc60: 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70  e functions comp
bc70: 75 74 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74  ute.their result
bc80: 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73   across all rows
bc90: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   of the result s
bca0: 65 74 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65  et.</p>..<a name
bcb0: 3d 22 63 6f 72 65 66 75 6e 63 74 69 6f 6e 73 22  ="corefunctions"
bcc0: 3e 3c 2f 61 3e 0a 3c 62 3e 43 6f 72 65 20 46 75  ></a>.<b>Core Fu
bcd0: 6e 63 74 69 6f 6e 73 3c 2f 62 3e 0a 0a 3c 70 3e  nctions</b>..<p>
bce0: 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f  The core functio
bcf0: 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
bd00: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
bd10: 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69  default.  Additi
bd20: 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 6d  onal.functions m
bd30: 61 79 20 62 65 20 77 72 69 74 74 65 6e 20 69 6e  ay be written in
bd40: 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20   C and added to 
bd50: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  the database eng
bd60: 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 3c 61  ine using.the <a
bd70: 20 68 72 65 66 3d 22 63 61 70 69 33 72 65 66 2e   href="capi3ref.
bd80: 68 74 6d 6c 23 63 66 75 6e 63 22 3e 73 71 6c 69  html#cfunc">sqli
bd90: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
bda0: 69 6f 6e 28 29 3c 2f 61 3e 0a 41 50 49 2e 3c 2f  ion()</a>.API.</
bdb0: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
bdc0: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
bdd0: 31 30 20 63 6c 61 73 73 3d 22 70 64 66 5f 66 75  10 class="pdf_fu
bde0: 6e 63 74 69 6f 6e 73 22 3e 0a 3c 74 72 3e 0a 3c  nctions">.<tr>.<
bdf0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
be00: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
be10: 64 74 68 3d 31 32 30 3e 61 62 73 28 3c 69 3e 58  dth=120>abs(<i>X
be20: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
be30: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75  align="top">Retu
be40: 72 6e 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  rn the absolute 
be50: 76 61 6c 75 65 20 6f 66 20 61 72 67 75 6d 65 6e  value of argumen
be60: 74 20 3c 69 3e 58 3c 2f 69 3e 2e 3c 2f 74 64 3e  t <i>X</i>.</td>
be70: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
be80: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
be90: 69 67 6e 3d 22 72 69 67 68 74 22 3e 63 6f 61 6c  ign="right">coal
bea0: 65 73 63 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69  esce(<i>X</i>,<i
beb0: 3e 59 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e  >Y</i>,...)</td>
bec0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
bed0: 22 3e 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20  ">Return a copy 
bee0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e  of the first non
bef0: 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 20  -NULL argument. 
bf00: 20 49 66 0a 61 6c 6c 20 61 72 67 75 6d 65 6e 74   If.all argument
bf10: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
bf20: 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64  NULL is returned
bf30: 2e 20 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  .  There must be
bf40: 20 61 74 20 6c 65 61 73 74 20 0a 32 20 61 72 67   at least .2 arg
bf50: 75 6d 65 6e 74 73 2e 3c 2f 74 64 3e 0a 3c 2f 74  uments.</td>.</t
bf60: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
bf70: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
bf80: 22 72 69 67 68 74 22 3e 0a 3c 61 20 6e 61 6d 65  "right">.<a name
bf90: 3d 22 67 6c 6f 62 46 75 6e 63 22 3e 3c 2f 61 3e  ="globFunc"></a>
bfa0: 0a 67 6c 6f 62 28 3c 69 3e 58 3c 2f 69 3e 2c 3c  .glob(<i>X</i>,<
bfb0: 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>Y</i>)</td>.<t
bfc0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 54  d valign="top">T
bfd0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
bfe0: 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
bff0: 74 20 74 68 65 0a 22 3c 62 3e 58 20 47 4c 4f 42  t the."<b>X GLOB
c000: 20 59 3c 2f 62 3e 22 20 73 79 6e 74 61 78 20 6f   Y</b>" syntax o
c010: 66 20 53 51 4c 69 74 65 2e 20 20 54 68 65 0a 3c  f SQLite.  The.<
c020: 61 20 68 72 65 66 3d 22 63 61 70 69 33 72 65 66  a href="capi3ref
c030: 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33 5f 63 72  .html#sqlite3_cr
c040: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 3e 73  eate_function">s
c050: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
c060: 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e 20 0a 69 6e  nction()</a> .in
c070: 74 65 72 66 61 63 65 20 63 61 6e 0a 62 65 20 75  terface can.be u
c080: 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20  sed to override 
c090: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6e  this function an
c0a0: 64 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65  d thereby change
c0b0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 6f   the operation.o
c0c0: 66 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  f the <a href="#
c0d0: 67 6c 6f 62 46 75 6e 63 22 3e 47 4c 4f 42 3c 2f  globFunc">GLOB</
c0e0: 61 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 74 64  a> operator.</td
c0f0: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
c100: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
c110: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 69 66 6e  lign="right">ifn
c120: 75 6c 6c 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  ull(<i>X</i>,<i>
c130: 59 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20  Y</i>)</td>.<td 
c140: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
c150: 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68  urn a copy of th
c160: 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  e first non-NULL
c170: 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a 62   argument.  If.b
c180: 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72  oth arguments ar
c190: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c  e NULL then NULL
c1a0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 54 68   is returned. Th
c1b0: 69 73 20 62 65 68 61 76 65 73 20 74 68 65 20 73  is behaves the s
c1c0: 61 6d 65 20 61 73 20 0a 3c 62 3e 63 6f 61 6c 65  ame as .<b>coale
c1d0: 73 63 65 28 29 3c 2f 62 3e 20 61 62 6f 76 65 2e  sce()</b> above.
c1e0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
c1f0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
c200: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
c210: 3e 0a 3c 61 20 6e 61 6d 65 3d 22 68 65 78 46 75  >.<a name="hexFu
c220: 6e 63 22 3e 0a 68 65 78 28 3c 69 3e 58 3c 2f 69  nc">.hex(<i>X</i
c230: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
c240: 67 6e 3d 22 74 6f 70 22 3e 54 68 65 20 61 72 67  gn="top">The arg
c250: 75 6d 65 6e 74 20 69 73 20 69 6e 74 65 72 70 72  ument is interpr
c260: 65 74 65 64 20 61 73 20 61 20 42 4c 4f 42 2e 20  eted as a BLOB. 
c270: 20 54 68 65 20 72 65 73 75 6c 74 0a 69 73 20 61   The result.is a
c280: 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65 6e   hexadecimal ren
c290: 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63 6f  dering of the co
c2a0: 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 62 6c  ntent of that bl
c2b0: 6f 62 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  ob.</td>.</tr>..
c2c0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
c2d0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
c2e0: 68 74 22 3e 6c 61 73 74 5f 69 6e 73 65 72 74 5f  ht">last_insert_
c2f0: 72 6f 77 69 64 28 29 3c 2f 74 64 3e 0a 3c 74 64  rowid()</td>.<td
c300: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
c310: 74 75 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f  turn the ROWID o
c320: 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69  f the last row i
c330: 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 69 73 0a  nsert from this.
c340: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68  connection to th
c350: 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  e database.  Thi
c360: 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 76 61  s is the same va
c370: 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
c380: 65 20 72 65 74 75 72 6e 65 64 0a 66 72 6f 6d 20  e returned.from 
c390: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6c 61  the <b>sqlite_la
c3a0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
c3b0: 29 3c 2f 62 3e 20 41 50 49 20 66 75 6e 63 74 69  )</b> API functi
c3c0: 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  on.</td>.</tr>..
c3d0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
c3e0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
c3f0: 68 74 22 3e 6c 65 6e 67 74 68 28 3c 69 3e 58 3c  ht">length(<i>X<
c400: 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  /i>)</td>.<td va
c410: 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72  lign="top">Retur
c420: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 6c 65 6e  n the string len
c430: 67 74 68 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 20  gth of <i>X</i> 
c440: 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e 0a 49  in characters..I
c450: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6e 66  f SQLite is conf
c460: 69 67 75 72 65 64 20 74 6f 20 73 75 70 70 6f 72  igured to suppor
c470: 74 20 55 54 46 2d 38 2c 20 74 68 65 6e 20 74 68  t UTF-8, then th
c480: 65 20 6e 75 6d 62 65 72 20 6f 66 20 55 54 46 2d  e number of UTF-
c490: 38 0a 63 68 61 72 61 63 74 65 72 73 20 69 73 20  8.characters is 
c4a0: 72 65 74 75 72 6e 65 64 2c 20 6e 6f 74 20 74 68  returned, not th
c4b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
c4c0: 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c  s.</td>.</tr>..<
c4d0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
c4e0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
c4f0: 74 22 3e 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69 6b  t">.<a name="lik
c500: 65 46 75 6e 63 22 3e 3c 2f 61 3e 0a 6c 69 6b 65  eFunc"></a>.like
c510: 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f  (<i>X</i>,<i>Y</
c520: 69 3e 20 5b 2c 3c 69 3e 5a 3c 2f 69 3e 5d 29 3c  i> [,<i>Z</i>])<
c530: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
c540: 22 74 6f 70 22 3e 0a 54 68 69 73 20 66 75 6e 63  "top">.This func
c550: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
c560: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 22 3c  implement the "<
c570: 62 3e 58 20 4c 49 4b 45 20 59 20 5b 45 53 43 41  b>X LIKE Y [ESCA
c580: 50 45 20 5a 5d 3c 2f 62 3e 22 0a 73 79 6e 74 61  PE Z]</b>".synta
c590: 78 20 6f 66 20 53 51 4c 2e 20 49 66 20 74 68 65  x of SQL. If the
c5a0: 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45   optional ESCAPE
c5b0: 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
c5c0: 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 75 73 65  nt, then the.use
c5d0: 72 2d 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  r-function is in
c5e0: 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65  voked with three
c5f0: 20 61 72 67 75 6d 65 6e 74 73 2e 20 4f 74 68 65   arguments. Othe
c600: 72 77 69 73 65 2c 20 69 74 20 69 73 0a 69 6e 76  rwise, it is.inv
c610: 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72  oked with two ar
c620: 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 54 68  guments only. Th
c630: 65 20 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69  e .<a href="capi
c640: 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65  3ref.html#sqlite
c650: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
c660: 6e 22 3e 0a 73 71 6c 69 74 65 5f 63 72 65 61 74  n">.sqlite_creat
c670: 65 5f 66 75 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e  e_function()</a>
c680: 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62   interface can b
c690: 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69  e used to overri
c6a0: 64 65 20 74 68 69 73 0a 66 75 6e 63 74 69 6f 6e  de this.function
c6b0: 20 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61   and thereby cha
c6c0: 6e 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  nge the operatio
c6d0: 6e 20 6f 66 20 74 68 65 20 3c 61 0a 68 72 65 66  n of the <a.href
c6e0: 3d 20 22 23 6c 69 6b 65 22 3e 4c 49 4b 45 3c 2f  = "#like">LIKE</
c6f0: 61 3e 20 6f 70 65 72 61 74 6f 72 2e 20 57 68 65  a> operator. Whe
c700: 6e 20 64 6f 69 6e 67 20 74 68 69 73 2c 20 69 74  n doing this, it
c710: 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e   may be importan
c720: 74 0a 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f  t.to override bo
c730: 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
c740: 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
c750: 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
c760: 6b 65 28 29 20 0a 66 75 6e 63 74 69 6f 6e 2e 20  ke() .function. 
c770: 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65  Otherwise, diffe
c780: 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65  rent code may be
c790: 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65   called to imple
c7a0: 6d 65 6e 74 20 74 68 65 0a 4c 49 4b 45 20 6f 70  ment the.LIKE op
c7b0: 65 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67  erator depending
c7c0: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
c7d0: 6f 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61  ot an ESCAPE cla
c7e0: 75 73 65 20 77 61 73 20 0a 73 70 65 63 69 66 69  use was .specifi
c7f0: 65 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  ed.</td>.</tr>..
c800: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
c810: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
c820: 68 74 22 3e 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ht">load_extensi
c830: 6f 6e 28 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 3e  on(<i>X</i>)<br>
c840: 0a 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  .load_extension(
c850: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
c860: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
c870: 67 6e 3d 22 74 6f 70 22 3e 4c 6f 61 64 20 53 51  gn="top">Load SQ
c880: 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20  Lite extensions 
c890: 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65  out of the share
c8a0: 64 20 6c 69 62 72 61 72 79 0a 66 69 6c 65 20 6e  d library.file n
c8b0: 61 6d 65 64 20 3c 69 3e 58 3c 2f 69 3e 20 75 73  amed <i>X</i> us
c8c0: 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f  ing the entry po
c8d0: 69 6e 74 20 3c 69 3e 59 3c 2f 69 3e 2e 20 20 54  int <i>Y</i>.  T
c8e0: 68 65 20 72 65 73 75 6c 74 0a 69 73 20 61 20 4e  he result.is a N
c8f0: 55 4c 4c 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69  ULL.  If <i>Y</i
c900: 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65  > is omitted the
c910: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 65 6e  n the default en
c920: 74 72 79 20 70 6f 69 6e 74 0a 6f 66 20 3c 62 3e  try point.of <b>
c930: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f  sqlite3_extensio
c940: 6e 5f 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73  n_init</b> is us
c950: 65 64 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69  ed.  This functi
c960: 6f 6e 20 72 61 69 73 65 73 0a 61 6e 20 65 78 63  on raises.an exc
c970: 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
c980: 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
c990: 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
c9a0: 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 3c  ize correctly..<
c9b0: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
c9c0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
c9d0: 6e 3d 22 72 69 67 68 74 22 3e 6c 6f 77 65 72 28  n="right">lower(
c9e0: 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>X</i>)</td>.<
c9f0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
ca00: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
ca10: 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e   string <i>X</i>
ca20: 20 77 69 6c 6c 20 61 6c 6c 20 63 68 61 72 61 63   will all charac
ca30: 74 65 72 73 0a 63 6f 6e 76 65 72 74 65 64 20 74  ters.converted t
ca40: 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 54  o lower case.  T
ca50: 68 65 20 43 20 6c 69 62 72 61 72 79 20 3c 62 3e  he C library <b>
ca60: 74 6f 6c 6f 77 65 72 28 29 3c 2f 62 3e 20 72 6f  tolower()</b> ro
ca70: 75 74 69 6e 65 20 69 73 20 75 73 65 64 0a 66 6f  utine is used.fo
ca80: 72 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  r the conversion
ca90: 2c 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68  , which means th
caa0: 61 74 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  at this function
cab0: 20 6d 69 67 68 74 20 6e 6f 74 0a 77 6f 72 6b 20   might not.work 
cac0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 55 54 46  correctly on UTF
cad0: 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e 3c 2f  -8 characters.</
cae0: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
caf0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
cb00: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6d   align="right">m
cb10: 61 78 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  ax(<i>X</i>,<i>Y
cb20: 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c  </i>,...)</td>.<
cb30: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
cb40: 52 65 74 75 72 6e 20 74 68 65 20 61 72 67 75 6d  Return the argum
cb50: 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d 61 78  ent with the max
cb60: 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20 41 72 67  imum value.  Arg
cb70: 75 6d 65 6e 74 73 0a 6d 61 79 20 62 65 20 73 74  uments.may be st
cb80: 72 69 6e 67 73 20 69 6e 20 61 64 64 69 74 69 6f  rings in additio
cb90: 6e 20 74 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54  n to numbers.  T
cba0: 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
cbb0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
cbc0: 79 20 74 68 65 20 75 73 75 61 6c 20 73 6f 72 74  y the usual sort
cbd0: 20 6f 72 64 65 72 2e 20 20 4e 6f 74 65 20 74 68   order.  Note th
cbe0: 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20  at <b>max()</b> 
cbf0: 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
cc00: 74 69 6f 6e 20 77 68 65 6e 0a 69 74 20 68 61 73  tion when.it has
cc10: 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
cc20: 65 6e 74 73 20 62 75 74 20 63 6f 6e 76 65 72 74  ents but convert
cc30: 73 20 74 6f 20 61 6e 20 61 67 67 72 65 67 61 74  s to an aggregat
cc40: 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 67 69  e function if gi
cc50: 76 65 6e 0a 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  ven.only a singl
cc60: 65 20 61 72 67 75 6d 65 6e 74 2e 3c 2f 74 64 3e  e argument.</td>
cc70: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
cc80: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
cc90: 69 67 6e 3d 22 72 69 67 68 74 22 3e 6d 69 6e 28  ign="right">min(
cca0: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
ccb0: 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20  >,...)</td>.<td 
ccc0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
ccd0: 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  urn the argument
cce0: 20 77 69 74 68 20 74 68 65 20 6d 69 6e 69 6d 75   with the minimu
ccf0: 6d 20 76 61 6c 75 65 2e 20 20 41 72 67 75 6d 65  m value.  Argume
cd00: 6e 74 73 0a 6d 61 79 20 62 65 20 73 74 72 69 6e  nts.may be strin
cd10: 67 73 20 69 6e 20 61 64 64 69 74 69 6f 6e 20 74  gs in addition t
cd20: 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54 68 65 20  o numbers.  The 
cd30: 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  minimum value is
cd40: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
cd50: 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72  he usual sort or
cd60: 64 65 72 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  der.  Note that 
cd70: 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20  <b>min()</b> is 
cd80: 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
cd90: 6e 20 77 68 65 6e 0a 69 74 20 68 61 73 20 32 20  n when.it has 2 
cda0: 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
cdb0: 73 20 62 75 74 20 63 6f 6e 76 65 72 74 73 20 74  s but converts t
cdc0: 6f 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  o an aggregate f
cdd0: 75 6e 63 74 69 6f 6e 20 69 66 20 67 69 76 65 6e  unction if given
cde0: 0a 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61  .only a single a
cdf0: 72 67 75 6d 65 6e 74 2e 3c 2f 74 64 3e 0a 3c 2f  rgument.</td>.</
ce00: 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  tr>..<tr>.<td va
ce10: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
ce20: 3d 22 72 69 67 68 74 22 3e 6e 75 6c 6c 69 66 28  ="right">nullif(
ce30: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
ce40: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
ce50: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
ce60: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
ce70: 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  nt if the argume
ce80: 6e 74 73 20 61 72 65 20 64 69 66 66 65 72 65 6e  nts are differen
ce90: 74 2c 20 0a 6f 74 68 65 72 77 69 73 65 20 72 65  t, .otherwise re
cea0: 74 75 72 6e 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a  turn NULL.</td>.
ceb0: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
cec0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
ced0: 67 6e 3d 22 72 69 67 68 74 22 3e 71 75 6f 74 65  gn="right">quote
cee0: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
cef0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
cf00: 3e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65  >This routine re
cf10: 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 77  turns a string w
cf20: 68 69 63 68 20 69 73 20 74 68 65 20 76 61 6c 75  hich is the valu
cf30: 65 20 6f 66 0a 69 74 73 20 61 72 67 75 6d 65 6e  e of.its argumen
cf40: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
cf50: 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
cf60: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
cf70: 65 6e 74 2e 0a 53 74 72 69 6e 67 73 20 61 72 65  ent..Strings are
cf80: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73   surrounded by s
cf90: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74  ingle-quotes wit
cfa0: 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74  h escapes on int
cfb0: 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 61 73 20  erior quotes.as 
cfc0: 6e 65 65 64 65 64 2e 20 20 42 4c 4f 42 73 20 61  needed.  BLOBs a
cfd0: 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65  re encoded as he
cfe0: 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61  xadecimal litera
cff0: 6c 73 2e 0a 54 68 65 20 63 75 72 72 65 6e 74 20  ls..The current 
d000: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
d010: 66 20 56 41 43 55 55 4d 20 75 73 65 73 20 74 68  f VACUUM uses th
d020: 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
d030: 65 20 66 75 6e 63 74 69 6f 6e 0a 69 73 20 61 6c  e function.is al
d040: 73 6f 20 75 73 65 66 75 6c 20 77 68 65 6e 20 77  so useful when w
d050: 72 69 74 69 6e 67 20 74 72 69 67 67 65 72 73 20  riting triggers 
d060: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 75 6e 64  to implement und
d070: 6f 2f 72 65 64 6f 20 66 75 6e 63 74 69 6f 6e 61  o/redo functiona
d080: 6c 69 74 79 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72  lity..</td>.</tr
d090: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
d0a0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
d0b0: 72 69 67 68 74 22 3e 72 61 6e 64 6f 6d 28 2a 29  right">random(*)
d0c0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d0d0: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20  ="top">Return a 
d0e0: 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e  pseudo-random in
d0f0: 74 65 67 65 72 0a 62 65 74 77 65 65 6e 20 2d 39  teger.between -9
d100: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
d110: 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30  08 and +92233720
d120: 33 36 38 35 34 37 37 35 38 30 37 2e 3c 2f 74 64  36854775807.</td
d130: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
d140: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
d150: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 0a 3c 61  lign="right">.<a
d160: 20 6e 61 6d 65 3d 22 72 61 6e 64 6f 6d 62 6c 6f   name="randomblo
d170: 62 46 75 6e 63 22 3e 0a 72 61 6e 64 6f 6d 62 6c  bFunc">.randombl
d180: 6f 62 28 3c 69 3e 4e 3c 2f 69 3e 29 3c 2f 74 64  ob(<i>N</i>)</td
d190: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
d1a0: 70 22 3e 52 65 74 75 72 6e 20 61 20 3c 69 3e 4e  p">Return a <i>N
d1b0: 3c 2f 69 3e 2d 62 79 74 65 20 62 6c 6f 62 20 63  </i>-byte blob c
d1c0: 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64 6f  ontaining pseudo
d1d0: 2d 72 61 6e 64 6f 6d 20 62 79 74 65 73 2e 0a 3c  -random bytes..<
d1e0: 69 3e 4e 3c 2f 69 3e 20 73 68 6f 75 6c 64 20 62  i>N</i> should b
d1f0: 65 20 61 20 70 6f 73 74 69 76 65 20 69 6e 74 65  e a postive inte
d200: 67 65 72 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ger.</td>.</tr>.
d210: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
d220: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
d230: 67 68 74 22 3e 72 6f 75 6e 64 28 3c 69 3e 58 3c  ght">round(<i>X<
d240: 2f 69 3e 29 3c 62 72 3e 72 6f 75 6e 64 28 3c 69  /i>)<br>round(<i
d250: 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29  >X</i>,<i>Y</i>)
d260: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d270: 3d 22 74 6f 70 22 3e 52 6f 75 6e 64 20 6f 66 66  ="top">Round off
d280: 20 74 68 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58   the number <i>X
d290: 3c 2f 69 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e  </i> to <i>Y</i>
d2a0: 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 0a 72   digits to the.r
d2b0: 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69  ight of the deci
d2c0: 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66 20 74  mal point.  If t
d2d0: 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75  he <i>Y</i> argu
d2e0: 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
d2f0: 20 30 20 69 73 20 0a 61 73 73 75 6d 65 64 2e 3c   0 is .assumed.<
d300: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
d310: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
d320: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
d330: 73 6f 75 6e 64 65 78 28 3c 69 3e 58 3c 2f 69 3e  soundex(<i>X</i>
d340: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
d350: 6e 3d 22 74 6f 70 22 3e 43 6f 6d 70 75 74 65 20  n="top">Compute 
d360: 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f  the soundex enco
d370: 64 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72 69  ding of the stri
d380: 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 54 68 65  ng <i>X</i>..The
d390: 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69   string "?000" i
d3a0: 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  s returned if th
d3b0: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55  e argument is NU
d3c0: 4c 4c 2e 0a 54 68 69 73 20 66 75 6e 63 74 69 6f  LL..This functio
d3d0: 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  n is omitted fro
d3e0: 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61  m SQLite by defa
d3f0: 75 6c 74 2e 0a 49 74 20 69 73 20 6f 6e 6c 79 20  ult..It is only 
d400: 61 76 61 69 6c 61 62 6c 65 20 74 68 65 20 2d 44  available the -D
d410: 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 3d 31  SQLITE_SOUNDEX=1
d420: 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e   compiler option
d430: 0a 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51  .is used when SQ
d440: 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 3c 2f  Lite is built.</
d450: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
d460: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
d470: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73   align="right">s
d480: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 2a 29  qlite_version(*)
d490: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d4a0: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68  ="top">Return th
d4b0: 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
d4c0: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
d4d0: 6c 69 62 72 61 72 79 0a 74 68 61 74 20 69 73 20  library.that is 
d4e0: 72 75 6e 6e 69 6e 67 2e 20 20 45 78 61 6d 70 6c  running.  Exampl
d4f0: 65 3a 20 20 22 32 2e 38 2e 30 22 3c 2f 74 64 3e  e:  "2.8.0"</td>
d500: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
d510: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
d520: 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 75 62 73  ign="right">subs
d530: 74 72 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  tr(<i>X</i>,<i>Y
d540: 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 3c 2f  </i>,<i>Z</i>)</
d550: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
d560: 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 73 75  top">Return a su
d570: 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74  bstring of input
d580: 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e   string <i>X</i>
d590: 20 74 68 61 74 20 62 65 67 69 6e 73 0a 77 69 74   that begins.wit
d5a0: 68 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74  h the <i>Y</i>-t
d5b0: 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 20  h character and 
d5c0: 77 68 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f 69  which is <i>Z</i
d5d0: 3e 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  > characters lon
d5e0: 67 2e 0a 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74  g..The left-most
d5f0: 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 3c 69   character of <i
d600: 3e 58 3c 2f 69 3e 20 69 73 20 6e 75 6d 62 65 72  >X</i> is number
d610: 20 31 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e   1.  If <i>Y</i>
d620: 20 69 73 20 6e 65 67 61 74 69 76 65 0a 74 68 65   is negative.the
d630: 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
d640: 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
d650: 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
d660: 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
d670: 74 68 65 0a 72 69 67 68 74 20 72 61 74 68 65 72  the.right rather
d680: 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20   than the left. 
d690: 20 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   If SQLite is co
d6a0: 6e 66 69 67 75 72 65 64 20 74 6f 20 73 75 70 70  nfigured to supp
d6b0: 6f 72 74 20 55 54 46 2d 38 2c 0a 74 68 65 6e 20  ort UTF-8,.then 
d6c0: 63 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63  characters indic
d6d0: 65 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75  es refer to actu
d6e0: 61 6c 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  al UTF-8 charact
d6f0: 65 72 73 2c 20 6e 6f 74 20 62 79 74 65 73 2e 3c  ers, not bytes.<
d700: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
d710: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
d720: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
d730: 74 79 70 65 6f 66 28 3c 69 3e 58 3c 2f 69 3e 29  typeof(<i>X</i>)
d740: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d750: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68  ="top">Return th
d760: 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 65 78  e type of the ex
d770: 70 72 65 73 73 69 6f 6e 20 3c 69 3e 58 3c 2f 69  pression <i>X</i
d780: 3e 2e 20 20 54 68 65 20 6f 6e 6c 79 20 0a 72 65  >.  The only .re
d790: 74 75 72 6e 20 76 61 6c 75 65 73 20 61 72 65 20  turn values are 
d7a0: 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72  "null", "integer
d7b0: 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78 74  ", "real", "text
d7c0: 22 2c 20 61 6e 64 20 22 62 6c 6f 62 22 2e 0a 53  ", and "blob"..S
d7d0: 51 4c 69 74 65 27 73 20 74 79 70 65 20 68 61 6e  QLite's type han
d7e0: 64 6c 69 6e 67 20 69 73 20 0a 65 78 70 6c 61 69  dling is .explai
d7f0: 6e 65 64 20 69 6e 20 3c 61 20 68 72 65 66 3d 22  ned in <a href="
d800: 64 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22 3e  datatype3.html">
d810: 44 61 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c  Datatypes in SQL
d820: 69 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f 61  ite Version 3</a
d830: 3e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c  >.</td>.</tr>..<
d840: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
d850: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
d860: 74 22 3e 75 70 70 65 72 28 3c 69 3e 58 3c 2f 69  t">upper(<i>X</i
d870: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
d880: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
d890: 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20  a copy of input 
d8a0: 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20  string <i>X</i> 
d8b0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c  converted to all
d8c0: 0a 75 70 70 65 72 2d 63 61 73 65 20 6c 65 74 74  .upper-case lett
d8d0: 65 72 73 2e 20 20 54 68 65 20 69 6d 70 6c 65 6d  ers.  The implem
d8e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  entation of this
d8f0: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74   function uses t
d900: 68 65 20 43 20 6c 69 62 72 61 72 79 0a 72 6f 75  he C library.rou
d910: 74 69 6e 65 20 3c 62 3e 74 6f 75 70 70 65 72 28  tine <b>toupper(
d920: 29 3c 2f 62 3e 20 77 68 69 63 68 20 6d 65 61 6e  )</b> which mean
d930: 73 20 69 74 20 6d 61 79 20 6e 6f 74 20 77 6f 72  s it may not wor
d940: 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 0a  k correctly on .
d950: 55 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 3c 2f  UTF-8 strings.</
d960: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
d970: 65 3e 0a 0a 3c 62 3e 44 61 74 65 20 41 6e 64 20  e>..<b>Date And 
d980: 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73 3c 2f  Time Functions</
d990: 62 3e 0a 0a 3c 70 3e 44 61 74 65 20 61 6e 64 20  b>..<p>Date and 
d9a0: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  time functions a
d9b0: 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 69 6e  re documented in
d9c0: 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68   the .<a href="h
d9d0: 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
d9e0: 2e 6f 72 67 2f 63 76 73 74 72 61 63 2f 77 69 6b  .org/cvstrac/wik
d9f0: 69 3f 70 3d 44 61 74 65 41 6e 64 54 69 6d 65 46  i?p=DateAndTimeF
da00: 75 6e 63 74 69 6f 6e 73 22 3e 0a 53 51 4c 69 74  unctions">.SQLit
da10: 65 20 57 69 6b 69 3c 2f 61 3e 2e 3c 2f 70 3e 0a  e Wiki</a>.</p>.
da20: 0a 3c 61 20 6e 61 6d 65 3d 22 61 67 67 72 65 67  .<a name="aggreg
da30: 61 74 65 66 75 6e 63 74 69 6f 6e 73 22 3e 3c 2f  atefunctions"></
da40: 61 3e 0a 3c 62 3e 41 67 67 72 65 67 61 74 65 20  a>.<b>Aggregate 
da50: 46 75 6e 63 74 69 6f 6e 73 3c 2f 62 3e 0a 0a 3c  Functions</b>..<
da60: 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65  p>.The aggregate
da70: 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
da80: 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
da90: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
daa0: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67    Additional.agg
dab0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
dac0: 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61   written in C ma
dad0: 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67  y be added using
dae0: 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 63   the .<a href="c
daf0: 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c  api3ref.html#sql
db00: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
db10: 74 69 6f 6e 22 3e 73 71 6c 69 74 65 33 5f 63 72  tion">sqlite3_cr
db20: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 3c  eate_function()<
db30: 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70  /a>.API.</p>..<p
db40: 3e 0a 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  >.In any aggrega
db50: 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
db60: 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
db70: 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
db80: 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
db90: 72 65 63 65 65 64 65 64 20 62 79 20 74 68 65 20  receeded by the 
dba0: 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54  keyword DISTINCT
dbb0: 2e 20 20 49 6e 20 73 75 63 68 20 63 61 73 65 73  .  In such cases
dbc0: 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
dbd0: 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
dbe0: 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
dbf0: 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
dc00: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
dc10: 6e 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  n..For example, 
dc20: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f  the function "co
dc30: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29 22  unt(distinct X)"
dc40: 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 65   will return the
dc50: 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74 69   number.of disti
dc60: 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  nct values of co
dc70: 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20 6f  lumn X instead o
dc80: 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  f the total numb
dc90: 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76  er of non-null.v
dca0: 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20  alues in column 
dcb0: 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  X..</p>..<table 
dcc0: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
dcd0: 64 69 6e 67 3d 31 30 20 63 6c 61 73 73 3d 22 70  ding=10 class="p
dce0: 64 66 5f 66 75 6e 63 74 69 6f 6e 73 22 3e 0a 3c  df_functions">.<
dcf0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
dd00: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
dd10: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 61 76 67  t" width=120>avg
dd20: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
dd30: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
dd40: 3e 52 65 74 75 72 6e 20 74 68 65 20 61 76 65 72  >Return the aver
dd50: 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  age value of all
dd60: 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f   non-NULL <i>X</
dd70: 69 3e 20 77 69 74 68 69 6e 20 61 0a 67 72 6f 75  i> within a.grou
dd80: 70 2e 20 20 53 74 72 69 6e 67 20 61 6e 64 20 42  p.  String and B
dd90: 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74 20  LOB values that 
dda0: 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65  do not look like
ddb0: 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 69 6e 74   numbers are.int
ddc0: 65 72 70 72 65 74 65 64 20 61 73 20 30 2e 0a 54  erpreted as 0..T
ddd0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
dde0: 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
ddf0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
de00: 6c 75 65 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a  lue even if all.
de10: 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67  inputs are integ
de20: 65 72 73 2e 20 3c 2f 70 3e 3c 2f 74 64 3e 0a 3c  ers. </p></td>.<
de30: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
de40: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
de50: 6e 3d 22 72 69 67 68 74 22 3e 63 6f 75 6e 74 28  n="right">count(
de60: 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 3e 63 6f 75  <i>X</i>)<br>cou
de70: 6e 74 28 2a 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  nt(*)</td>.<td v
de80: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 54 68 65 20  align="top">The 
de90: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 74 75 72  first form retur
dea0: 6e 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65  n a count of the
deb0: 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
dec0: 0a 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69  .that <i>X</i> i
ded0: 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20  s not NULL in a 
dee0: 67 72 6f 75 70 2e 20 20 54 68 65 20 73 65 63 6f  group.  The seco
def0: 6e 64 20 66 6f 72 6d 20 28 77 69 74 68 20 6e 6f  nd form (with no
df00: 20 61 72 67 75 6d 65 6e 74 29 0a 72 65 74 75 72   argument).retur
df10: 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
df20: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
df30: 68 65 20 67 72 6f 75 70 2e 3c 2f 74 64 3e 0a 3c  he group.</td>.<
df40: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
df50: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
df60: 6e 3d 22 72 69 67 68 74 22 3e 6d 61 78 28 3c 69  n="right">max(<i
df70: 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64  >X</i>)</td>.<td
df80: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
df90: 74 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  turn the maximum
dfa0: 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
dfb0: 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
dfc0: 70 2e 0a 54 68 65 20 75 73 75 61 6c 20 73 6f 72  p..The usual sor
dfd0: 74 20 6f 72 64 65 72 20 69 73 20 75 73 65 64 20  t order is used 
dfe0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
dff0: 20 6d 61 78 69 6d 75 6d 2e 3c 2f 74 64 3e 0a 3c   maximum.</td>.<
e000: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
e010: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
e020: 6e 3d 22 72 69 67 68 74 22 3e 6d 69 6e 28 3c 69  n="right">min(<i
e030: 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64  >X</i>)</td>.<td
e040: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
e050: 74 75 72 6e 20 74 68 65 20 6d 69 6e 69 6d 75 6d  turn the minimum
e060: 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
e070: 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e  of all values in
e080: 20 74 68 65 20 67 72 6f 75 70 2e 0a 54 68 65 20   the group..The 
e090: 75 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72  usual sort order
e0a0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
e0b0: 72 6d 69 6e 65 20 74 68 65 20 6d 69 6e 69 6d 75  rmine the minimu
e0c0: 6d 2e 20 20 4e 55 4c 4c 20 69 73 20 6f 6e 6c 79  m.  NULL is only
e0d0: 20 72 65 74 75 72 6e 65 64 0a 69 66 20 61 6c 6c   returned.if all
e0e0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
e0f0: 72 6f 75 70 20 61 72 65 20 4e 55 4c 4c 2e 3c 2f  roup are NULL.</
e100: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
e110: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
e120: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73   align="right">s
e130: 75 6d 28 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 3e  um(<i>X</i>)<br>
e140: 74 6f 74 61 6c 28 3c 69 3e 58 3c 2f 69 3e 29 3c  total(<i>X</i>)<
e150: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
e160: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
e170: 20 6e 75 6d 65 72 69 63 20 73 75 6d 20 6f 66 20   numeric sum of 
e180: 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
e190: 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
e1a0: 2e 0a 20 20 20 49 66 20 74 68 65 72 65 20 61 72  ..   If there ar
e1b0: 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e  e no non-NULL in
e1c0: 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75  put rows then su
e1d0: 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 20 4e  m() returns.   N
e1e0: 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20  ULL but total() 
e1f0: 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 20  returns 0.0..   
e200: 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
e210: 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
e220: 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
e230: 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 20  m of no rows.   
e240: 62 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e  but the SQL stan
e250: 64 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74  dard requires it
e260: 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a   and most other.
e270: 20 20 20 53 51 4c 20 64 61 74 61 62 61 73 65 20     SQL database 
e280: 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e  engines implemen
e290: 74 20 73 75 6d 28 29 20 74 68 61 74 20 77 61 79  t sum() that way
e2a0: 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20   so SQLite does 
e2b0: 69 74 20 69 6e 20 74 68 65 0a 20 20 20 73 61 6d  it in the.   sam
e2c0: 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74  e way in order t
e2d0: 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e  o be compatible.
e2e0: 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64     The non-stand
e2f0: 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63  ard total() func
e300: 74 69 6f 6e 0a 20 20 20 69 73 20 70 72 6f 76 69  tion.   is provi
e310: 64 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69  ded as a conveni
e320: 65 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20  ent way to work 
e330: 61 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69  around this desi
e340: 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 20 69 6e  gn problem.   in
e350: 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   the SQL languag
e360: 65 2e 3c 2f 70 3e 0a 0a 20 20 20 3c 70 3e 54 68  e.</p>..   <p>Th
e370: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61  e result of tota
e380: 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  l() is always a 
e390: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
e3a0: 61 6c 75 65 2e 0a 20 20 20 54 68 65 20 72 65 73  alue..   The res
e3b0: 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20  ult of sum() is 
e3c0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
e3d0: 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   if all non-NULL
e3e0: 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
e3f0: 67 65 72 73 2e 0a 20 20 20 49 66 20 61 6e 79 20  gers..   If any 
e400: 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69  input to sum() i
e410: 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74  s neither an int
e420: 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20  eger or a NULL. 
e430: 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74    then sum() ret
e440: 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  urns a floating 
e450: 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 20 77  point value.   w
e460: 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e  hich might be an
e470: 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74   approximation t
e480: 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c  o the true sum.<
e490: 2f 70 3e 0a 0a 20 20 20 3c 70 3e 53 75 6d 28 29  /p>..   <p>Sum()
e4a0: 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22   will throw an "
e4b0: 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
e4c0: 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61  " exception if a
e4d0: 6c 6c 20 69 6e 70 75 74 73 0a 20 20 20 61 72 65  ll inputs.   are
e4e0: 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c   integers or NUL
e4f0: 4c 0a 20 20 20 61 6e 64 20 61 6e 20 69 6e 74 65  L.   and an inte
e500: 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63  ger overflow occ
e510: 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74  urs at any point
e520: 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70   during the comp
e530: 75 74 61 74 69 6f 6e 2e 0a 20 20 20 54 6f 74 61  utation..   Tota
e540: 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73  l() never throws
e550: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 2e 3c 2f   an exception.</
e560: 70 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  p>.</tr>.</table
e570: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 49 4e  >.}...Section IN
e580: 53 45 52 54 20 69 6e 73 65 72 74 0a 0a 53 79 6e  SERT insert..Syn
e590: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
e5a0: 6e 74 7d 20 7b 0a 49 4e 53 45 52 54 20 5b 4f 52  nt} {.INSERT [OR
e5b0: 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72   <conflict-algor
e5c0: 69 74 68 6d 3e 5d 20 49 4e 54 4f 20 5b 3c 64 61  ithm>] INTO [<da
e5d0: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
e5e0: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 3c  <table-name> [(<
e5f0: 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 29 5d 20 56  column-list>)] V
e600: 41 4c 55 45 53 28 3c 76 61 6c 75 65 2d 6c 69 73  ALUES(<value-lis
e610: 74 3e 29 20 7c 0a 49 4e 53 45 52 54 20 5b 4f 52  t>) |.INSERT [OR
e620: 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72   <conflict-algor
e630: 69 74 68 6d 3e 5d 20 49 4e 54 4f 20 5b 3c 64 61  ithm>] INTO [<da
e640: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
e650: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 3c  <table-name> [(<
e660: 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 29 5d 20 3c  column-list>)] <
e670: 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74  select-statement
e680: 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  >.}..puts {.<p>T
e690: 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  he INSERT statem
e6a0: 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 77 6f  ent comes in two
e6b0: 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 54   basic forms.  T
e6c0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 0a 28 77  he first form.(w
e6d0: 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53 22  ith the "VALUES"
e6e0: 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74 65   keyword) create
e6f0: 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72  s a single new r
e700: 6f 77 20 69 6e 20 61 6e 20 65 78 69 73 74 69 6e  ow in an existin
e710: 67 20 74 61 62 6c 65 2e 0a 49 66 20 6e 6f 20 63  g table..If no c
e720: 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70  olumn-list is sp
e730: 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 65  ecified then the
e740: 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
e750: 73 20 6d 75 73 74 0a 62 65 20 74 68 65 20 73 61  s must.be the sa
e760: 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me as the number
e770: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
e780: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
e790: 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73  column-list.is s
e7a0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
e7b0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
e7c0: 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74  ues must match t
e7d0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65  he number of.spe
e7e0: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20  cified columns. 
e7f0: 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   Columns of the 
e800: 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20 6e 6f  table that do no
e810: 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 0a  t appear in the.
e820: 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20  column list are 
e830: 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20  filled with the 
e840: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f  default value, o
e850: 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e  r with NULL if n
e860: 6f 74 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ot.default value
e870: 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c   is specified..<
e880: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 65 63 6f  /p>..<p>The seco
e890: 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  nd form of the I
e8a0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
e8b0: 74 61 6b 65 73 20 69 74 20 64 61 74 61 20 66 72  takes it data fr
e8c0: 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74 61 74  om a.SELECT stat
e8d0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 75 6d 62  ement.  The numb
e8e0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
e8f0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
e900: 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74 20 65  he.SELECT must e
e910: 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
e920: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
e930: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
e940: 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c 69 73  if.no column lis
e950: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
e960: 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74 63 68  or it must match
e970: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
e980: 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20 69 6e 20 74  olumns.name in t
e990: 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e 20  he column list. 
e9a0: 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20   A new entry is 
e9b0: 6d 61 64 65 20 69 6e 20 74 68 65 20 74 61 62 6c  made in the tabl
e9c0: 65 0a 66 6f 72 20 65 76 65 72 79 20 72 6f 77 20  e.for every row 
e9d0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 72 65  of the SELECT re
e9e0: 73 75 6c 74 2e 20 20 54 68 65 20 53 45 4c 45 43  sult.  The SELEC
e9f0: 54 20 6d 61 79 20 62 65 20 73 69 6d 70 6c 65 0a  T may be simple.
ea00: 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e  or compound.</p>
ea10: 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
ea20: 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  l conflict-claus
ea30: 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65  e allows the spe
ea40: 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e  cification of an
ea50: 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e   alternative.con
ea60: 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
ea70: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
ea80: 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
ea90: 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d  ing this one com
eaa0: 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65  mand..See the se
eab0: 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20  ction titled.<a 
eac0: 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22  href="#conflict"
ead0: 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e  >ON CONFLICT</a>
eae0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
eaf0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72  information..For
eb00: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
eb10: 69 74 68 20 4d 79 53 51 4c 2c 20 74 68 65 20 70  ith MySQL, the p
eb20: 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65  arser allows the
eb30: 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67   use of the.sing
eb40: 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72  le keyword <a hr
eb50: 65 66 3d 22 23 72 65 70 6c 61 63 65 22 3e 52 45  ef="#replace">RE
eb60: 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
eb70: 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52  alias for "INSER
eb80: 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 3c  T OR REPLACE"..<
eb90: 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20  /p>.}...Section 
eba0: 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
ebb0: 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 0a 0a 53  use} conflict..S
ebc0: 79 6e 74 61 78 20 7b 63 6f 6e 66 6c 69 63 74 2d  yntax {conflict-
ebd0: 63 6c 61 75 73 65 7d 20 7b 0a 4f 4e 20 43 4f 4e  clause} {.ON CON
ebe0: 46 4c 49 43 54 20 3c 63 6f 6e 66 6c 69 63 74 2d  FLICT <conflict-
ebf0: 61 6c 67 6f 72 69 74 68 6d 3e 0a 7d 20 7b 63 6f  algorithm>.} {co
ec00: 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d  nflict-algorithm
ec10: 7d 20 7b 0a 52 4f 4c 4c 42 41 43 4b 20 7c 20 41  } {.ROLLBACK | A
ec20: 42 4f 52 54 20 7c 20 46 41 49 4c 20 7c 20 49 47  BORT | FAIL | IG
ec30: 4e 4f 52 45 20 7c 20 52 45 50 4c 41 43 45 0a 7d  NORE | REPLACE.}
ec40: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
ec50: 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
ec60: 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61  se is not a sepa
ec70: 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  rate SQL command
ec80: 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73  .  It is a.non-s
ec90: 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74  tandard clause t
eca0: 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20 69  hat can appear i
ecb0: 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c  n many other SQL
ecc0: 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73   commands..It is
ecd0: 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73   given its own s
ece0: 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64  ection in this d
ecf0: 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20  ocument because 
ed00: 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f  it is not.part o
ed10: 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61  f standard SQL a
ed20: 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67  nd therefore mig
ed30: 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69  ht not be famili
ed40: 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ar.</p>..<p>The 
ed50: 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f  syntax for the O
ed60: 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
ed70: 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62  e is as shown ab
ed80: 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41  ove for.the CREA
ed90: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
eda0: 2e 20 20 46 6f 72 20 74 68 65 20 49 4e 53 45 52  .  For the INSER
edb0: 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d  T and.UPDATE com
edc0: 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f  mands, the keywo
edd0: 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  rds "ON CONFLICT
ede0: 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  " are replaced b
edf0: 79 20 22 4f 52 22 2c 20 74 6f 20 6d 61 6b 65 0a  y "OR", to make.
ee00: 74 68 65 20 73 79 6e 74 61 78 20 73 65 65 6d 20  the syntax seem 
ee10: 6d 6f 72 65 20 6e 61 74 75 72 61 6c 2e 20 20 46  more natural.  F
ee20: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
ee30: 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
ee40: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
ee50: 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
ee60: 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
ee70: 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
ee80: 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
ee90: 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
eea0: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
eeb0: 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
eec0: 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
eed0: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
eee0: 73 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20 75  s an algorithm u
eef0: 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 0a 63  sed to resolve.c
ef00: 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
ef10: 63 74 73 2e 20 20 54 68 65 72 65 20 61 72 65 20  cts.  There are 
ef20: 66 69 76 65 20 63 68 6f 69 63 65 73 3a 20 52 4f  five choices: RO
ef30: 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 0a 46  LLBACK, ABORT,.F
ef40: 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64  AIL, IGNORE, and
ef50: 20 52 45 50 4c 41 43 45 2e 20 54 68 65 20 64 65   REPLACE. The de
ef60: 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20  fault algorithm 
ef70: 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73 0a  is ABORT.  This.
ef80: 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65 61  is what they mea
ef90: 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74  n:</p>..<dl>.<dt
efa0: 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e  ><b>ROLLBACK</b>
efb0: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65  </dt>.<dd><p>Whe
efc0: 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  n a constraint v
efd0: 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
efe0: 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 52 4f   an immediate RO
eff0: 4c 4c 42 41 43 4b 0a 6f 63 63 75 72 73 2c 20 74  LLBACK.occurs, t
f000: 68 75 73 20 65 6e 64 69 6e 67 20 74 68 65 20 63  hus ending the c
f010: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
f020: 6f 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d  on, and the comm
f030: 61 6e 64 20 61 62 6f 72 74 73 0a 77 69 74 68 20  and aborts.with 
f040: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66  a return code of
f050: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
f060: 4e 54 2e 20 20 49 66 20 6e 6f 20 74 72 61 6e 73  NT.  If no trans
f070: 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65  action is.active
f080: 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65   (other than the
f090: 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63   implied transac
f0a0: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65  tion that is cre
f0b0: 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f  ated on every.co
f0c0: 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 69 73  mmand) then this
f0d0: 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73   algorithm works
f0e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
f0f0: 52 54 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  RT.</p></dd>..<d
f100: 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f  t><b>ABORT</b></
f110: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20  dt>.<dd><p>When 
f120: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
f130: 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
f140: 68 65 20 63 6f 6d 6d 61 6e 64 20 62 61 63 6b 73  he command backs
f150: 20 6f 75 74 0a 61 6e 79 20 70 72 69 6f 72 20 63   out.any prior c
f160: 68 61 6e 67 65 73 20 69 74 20 6d 69 67 68 74 20  hanges it might 
f170: 68 61 76 65 20 6d 61 64 65 20 61 6e 64 20 61 62  have made and ab
f180: 6f 72 74 73 20 77 69 74 68 20 61 20 72 65 74 75  orts with a retu
f190: 72 6e 20 63 6f 64 65 0a 6f 66 20 53 51 4c 49 54  rn code.of SQLIT
f1a0: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42  E_CONSTRAINT.  B
f1b0: 75 74 20 6e 6f 20 52 4f 4c 4c 42 41 43 4b 20 69  ut no ROLLBACK i
f1c0: 73 20 65 78 65 63 75 74 65 64 20 73 6f 20 63 68  s executed so ch
f1d0: 61 6e 67 65 73 0a 66 72 6f 6d 20 70 72 69 6f 72  anges.from prior
f1e0: 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 69 6e   commands within
f1f0: 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61   the same transa
f200: 63 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72  ction.are preser
f210: 76 65 64 2e 20 20 54 68 69 73 20 69 73 20 74 68  ved.  This is th
f220: 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69  e default behavi
f230: 6f 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  or.</p></dd>..<d
f240: 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64  t><b>FAIL</b></d
f250: 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61  t>.<dd><p>When a
f260: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
f270: 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
f280: 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73  e command aborts
f290: 20 77 69 74 68 20 61 0a 72 65 74 75 72 6e 20 63   with a.return c
f2a0: 6f 64 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  ode SQLITE_CONST
f2b0: 52 41 49 4e 54 2e 20 20 42 75 74 20 61 6e 79 20  RAINT.  But any 
f2c0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
f2d0: 61 74 61 62 61 73 65 20 74 68 61 74 0a 74 68 65  atabase that.the
f2e0: 20 63 6f 6d 6d 61 6e 64 20 6d 61 64 65 20 70 72   command made pr
f2f0: 69 6f 72 20 74 6f 20 65 6e 63 6f 75 6e 74 65 72  ior to encounter
f300: 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ing the constrai
f310: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 61 72 65  nt violation.are
f320: 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 61   preserved and a
f330: 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
f340: 74 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  t.  For example,
f350: 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74   if an UPDATE.st
f360: 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65  atement encounte
f370: 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  red a constraint
f380: 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68   violation on th
f390: 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74  e 100th row that
f3a0: 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  .it attempts to 
f3b0: 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65  update, then the
f3c0: 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68   first 99 row ch
f3d0: 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72  anges are preser
f3e0: 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20  ved.but changes 
f3f0: 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20  to rows 100 and 
f400: 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63  beyond never occ
f410: 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ur.</p></dd>..<d
f420: 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c  t><b>IGNORE</b><
f430: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e  /dt>.<dd><p>When
f440: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
f450: 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
f460: 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74  the one row that
f470: 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f   contains.the co
f480: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
f490: 6f 6e 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  on is not insert
f4a0: 65 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 20 20  ed or changed.  
f4b0: 42 75 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a  But the command.
f4c0: 63 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75 74  continues execut
f4d0: 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4f  ing normally.  O
f4e0: 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65  ther rows before
f4f0: 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72   and after the r
f500: 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65  ow that.containe
f510: 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
f520: 20 76 69 6f 6c 61 74 69 6f 6e 20 63 6f 6e 74 69   violation conti
f530: 6e 75 65 20 74 6f 20 62 65 20 69 6e 73 65 72 74  nue to be insert
f540: 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f  ed or updated.no
f550: 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72 6f  rmally.  No erro
f560: 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 3c 2f  r is returned.</
f570: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
f580: 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e  REPLACE</b></dt>
f590: 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 55  .<dd><p>When a U
f5a0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
f5b0: 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
f5c0: 73 2c 20 74 68 65 20 70 72 65 2d 65 78 69 73 74  s, the pre-exist
f5d0: 69 6e 67 20 72 6f 77 73 0a 74 68 61 74 20 61 72  ing rows.that ar
f5e0: 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f  e causing the co
f5f0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
f600: 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 70  on are removed p
f610: 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e  rior to insertin
f620: 67 0a 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68  g.or updating th
f630: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 20  e current row.  
f640: 54 68 75 73 20 74 68 65 20 69 6e 73 65 72 74 20  Thus the insert 
f650: 6f 72 20 75 70 64 61 74 65 20 61 6c 77 61 79 73  or update always
f660: 20 6f 63 63 75 72 73 2e 0a 54 68 65 20 63 6f 6d   occurs..The com
f670: 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 65  mand continues e
f680: 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c  xecuting normall
f690: 79 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73 20  y.  No error is 
f6a0: 72 65 74 75 72 6e 65 64 2e 0a 49 66 20 61 20 4e  returned..If a N
f6b0: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
f6c0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
f6d0: 75 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76 61  urs, the NULL va
f6e0: 6c 75 65 20 69 73 20 72 65 70 6c 61 63 65 64 0a  lue is replaced.
f6f0: 62 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  by the default v
f700: 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f  alue for that co
f710: 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 20 63 6f  lumn.  If the co
f720: 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61  lumn has no defa
f730: 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20  ult.value, then 
f740: 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69  the ABORT algori
f750: 74 68 6d 20 69 73 20 75 73 65 64 2e 20 20 49 66  thm is used.  If
f760: 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
f770: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 6f 63  int violation.oc
f780: 63 75 72 73 20 74 68 65 6e 20 74 68 65 20 49 47  curs then the IG
f790: 4e 4f 52 45 20 61 6c 67 6f 72 69 74 68 6d 20 69  NORE algorithm i
f7a0: 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s used.</p>..<p>
f7b0: 57 68 65 6e 20 74 68 69 73 20 63 6f 6e 66 6c 69  When this confli
f7c0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74  ct resolution st
f7d0: 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72  rategy deletes r
f7e0: 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ows in order to.
f7f0: 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72  satisfy a constr
f800: 61 69 6e 74 2c 20 69 74 20 64 6f 65 73 20 6e 6f  aint, it does no
f810: 74 20 69 6e 76 6f 6b 65 20 64 65 6c 65 74 65 20  t invoke delete 
f820: 74 72 69 67 67 65 72 73 20 6f 6e 20 74 68 6f 73  triggers on thos
f830: 65 0a 72 6f 77 73 2e 20 20 54 68 69 73 20 62 65  e.rows.  This be
f840: 68 61 76 69 6f 72 20 6d 69 67 68 74 20 63 68 61  havior might cha
f850: 6e 67 65 20 69 6e 20 61 20 66 75 74 75 72 65 20  nge in a future 
f860: 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64  release.</p>.</d
f870: 6c 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c 67 6f 72  l>..<p>The algor
f880: 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
f890: 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20  n the OR clause 
f8a0: 6f 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20 55  of a INSERT or U
f8b0: 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20  PDATE.overrides 
f8c0: 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  any algorithm sp
f8d0: 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45  ecified in a CRE
f8e0: 41 54 45 20 54 41 42 4c 45 2e 0a 49 66 20 6e 6f  ATE TABLE..If no
f8f0: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
f900: 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65  ecified anywhere
f910: 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f  , the ABORT algo
f920: 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
f930: 70 3e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 52 45  p>.}..Section RE
f940: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 0a 0a 53  INDEX reindex..S
f950: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
f960: 6d 65 6e 74 7d 20 7b 0a 20 20 52 45 49 4e 44 45  ment} {.  REINDE
f970: 58 20 3c 63 6f 6c 6c 61 74 69 6f 6e 20 6e 61 6d  X <collation nam
f980: 65 3e 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c  e>.}.Syntax {sql
f990: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20  -statement} {.  
f9a0: 52 45 49 4e 44 45 58 20 5b 3c 64 61 74 61 62 61  REINDEX [<databa
f9b0: 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62  se-name> .] <tab
f9c0: 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3e 0a 7d  le/index-name>.}
f9d0: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
f9e0: 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20  REINDEX command 
f9f0: 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74  is used to delet
fa00: 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69  e and recreate i
fa10: 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61  ndices from scra
fa20: 74 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65  tch..This is use
fa30: 66 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66  ful when the def
fa40: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c  inition of a col
fa50: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
fa60: 68 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70  has changed..</p
fa70: 3e 0a 0a 3c 70 3e 49 6e 20 74 68 65 20 66 69 72  >..<p>In the fir
fa80: 73 74 20 66 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64  st form, all ind
fa90: 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
faa0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74  ched databases t
fab0: 68 61 74 20 75 73 65 20 74 68 65 0a 6e 61 6d 65  hat use the.name
fac0: 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
fad0: 65 6e 63 65 20 61 72 65 20 72 65 63 72 65 61 74  ence are recreat
fae0: 65 64 2e 20 49 6e 20 74 68 65 20 73 65 63 6f 6e  ed. In the secon
faf0: 64 20 66 6f 72 6d 2c 20 69 66 20 0a 3c 69 3e 5b  d form, if .<i>[
fb00: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 5d 74  database-name.]t
fb10: 61 62 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c  able/index-name<
fb20: 2f 69 3e 20 69 64 65 6e 74 69 66 69 65 73 20 61  /i> identifies a
fb30: 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c   table, then all
fb40: 20 69 6e 64 69 63 65 73 0a 61 73 73 6f 63 69 61   indices.associa
fb50: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
fb60: 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20  le are rebuilt. 
fb70: 49 66 20 61 6e 20 69 6e 64 65 78 20 69 73 20 69  If an index is i
fb80: 64 65 6e 74 69 66 69 65 64 2c 20 74 68 65 6e 20  dentified, then 
fb90: 6f 6e 6c 79 0a 74 68 69 73 20 73 70 65 63 69 66  only.this specif
fba0: 69 63 20 69 6e 64 65 78 20 69 73 20 64 65 6c 65  ic index is dele
fbb0: 74 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65  ted and recreate
fbc0: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6e  d..</p>..<p>If n
fbd0: 6f 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61  o <i>database-na
fbe0: 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66  me</i> is specif
fbf0: 69 65 64 20 61 6e 64 20 74 68 65 72 65 20 65 78  ied and there ex
fc00: 69 73 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c  ists both a tabl
fc10: 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61  e or.index and a
fc20: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
fc30: 6e 63 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  nce of the speci
fc40: 66 69 65 64 20 6e 61 6d 65 2c 20 74 68 65 6e 20  fied name, then 
fc50: 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61 74  indices associat
fc60: 65 64 0a 77 69 74 68 20 74 68 65 20 63 6f 6c 6c  ed.with the coll
fc70: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f  ation sequence o
fc80: 6e 6c 79 20 61 72 65 20 72 65 63 6f 6e 73 74 72  nly are reconstr
fc90: 75 63 74 65 64 2e 20 54 68 69 73 20 61 6d 62 69  ucted. This ambi
fca0: 67 75 69 74 79 20 6d 61 79 20 62 65 0a 64 69 73  guity may be.dis
fcb0: 70 65 6c 6c 65 64 20 62 79 20 61 6c 77 61 79 73  pelled by always
fcc0: 20 73 70 65 63 69 66 79 69 6e 67 20 61 20 3c 69   specifying a <i
fcd0: 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
fce0: 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69  i> when reindexi
fcf0: 6e 67 20 61 0a 73 70 65 63 69 66 69 63 20 74 61  ng a.specific ta
fd00: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 7d 0a  ble or index..}.
fd10: 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43 45  .Section REPLACE
fd20: 20 72 65 70 6c 61 63 65 0a 0a 53 79 6e 74 61 78   replace..Syntax
fd30: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
fd40: 20 7b 0a 52 45 50 4c 41 43 45 20 49 4e 54 4f 20   {.REPLACE INTO 
fd50: 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e  [<database-name>
fd60: 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e   .] <table-name>
fd70: 20 5b 28 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   [( <column-list
fd80: 3e 20 29 5d 20 56 41 4c 55 45 53 20 28 20 3c 76  > )] VALUES ( <v
fd90: 61 6c 75 65 2d 6c 69 73 74 3e 20 29 20 7c 0a 52  alue-list> ) |.R
fda0: 45 50 4c 41 43 45 20 49 4e 54 4f 20 5b 3c 64 61  EPLACE INTO [<da
fdb0: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
fdc0: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20  <table-name> [( 
fdd0: 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d  <column-list> )]
fde0: 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65   <select-stateme
fdf0: 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  nt>.}..puts {.<p
fe00: 3e 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d  >The REPLACE com
fe10: 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73  mand is an alias
fe20: 20 66 6f 72 20 74 68 65 20 22 49 4e 53 45 52 54   for the "INSERT
fe30: 20 4f 52 20 52 45 50 4c 41 43 45 22 20 76 61 72   OR REPLACE" var
fe40: 69 61 6e 74 0a 6f 66 20 74 68 65 20 3c 61 20 68  iant.of the <a h
fe50: 72 65 66 3d 22 23 69 6e 73 65 72 74 22 3e 49 4e  ref="#insert">IN
fe60: 53 45 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64  SERT</a> command
fe70: 2e 20 20 54 68 69 73 20 61 6c 69 61 73 20 69 73  .  This alias is
fe80: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 0a 63 6f   provided for.co
fe90: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
fea0: 20 4d 79 53 51 4c 2e 20 20 53 65 65 20 74 68 65   MySQL.  See the
feb0: 20 0a 3c 61 20 68 72 65 66 3d 22 23 69 6e 73 65   .<a href="#inse
fec0: 72 74 22 3e 49 4e 53 45 52 54 3c 2f 61 3e 20 63  rt">INSERT</a> c
fed0: 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
fee0: 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
fef0: 6e 61 6c 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal.information.
ff00: 3c 2f 70 3e 20 20 0a 7d 0a 0a 0a 53 65 63 74 69  </p>  .}...Secti
ff10: 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c 65 63 74  on SELECT select
ff20: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  ..Syntax {sql-st
ff30: 61 74 65 6d 65 6e 74 7d 20 7b 0a 53 45 4c 45 43  atement} {.SELEC
ff40: 54 20 5b 41 4c 4c 20 7c 20 44 49 53 54 49 4e 43  T [ALL | DISTINC
ff50: 54 5d 20 3c 72 65 73 75 6c 74 3e 20 5b 46 52 4f  T] <result> [FRO
ff60: 4d 20 3c 74 61 62 6c 65 2d 6c 69 73 74 3e 5d 0a  M <table-list>].
ff70: 5b 57 48 45 52 45 20 3c 65 78 70 72 3e 5d 0a 5b  [WHERE <expr>].[
ff80: 47 52 4f 55 50 20 42 59 20 3c 65 78 70 72 2d 6c  GROUP BY <expr-l
ff90: 69 73 74 3e 5d 0a 5b 48 41 56 49 4e 47 20 3c 65  ist>].[HAVING <e
ffa0: 78 70 72 3e 5d 0a 5b 3c 63 6f 6d 70 6f 75 6e 64  xpr>].[<compound
ffb0: 2d 6f 70 3e 20 3c 73 65 6c 65 63 74 3e 5d 2a 0a  -op> <select>]*.
ffc0: 5b 4f 52 44 45 52 20 42 59 20 3c 73 6f 72 74 2d  [ORDER BY <sort-
ffd0: 65 78 70 72 2d 6c 69 73 74 3e 5d 0a 5b 4c 49 4d  expr-list>].[LIM
ffe0: 49 54 20 3c 69 6e 74 65 67 65 72 3e 20 5b 4c 50  IT <integer> [LP
fff0: 20 4f 46 46 53 45 54 20 7c 20 2c 20 52 50 20 3c   OFFSET | , RP <
10000 69 6e 74 65 67 65 72 3e 5d 5d 0a 7d 20 7b 72 65  integer>]].} {re
10010 73 75 6c 74 7d 20 7b 0a 3c 72 65 73 75 6c 74 2d  sult} {.<result-
10020 63 6f 6c 75 6d 6e 3e 20 5b 2c 20 3c 72 65 73 75  column> [, <resu
10030 6c 74 2d 63 6f 6c 75 6d 6e 3e 5d 2a 0a 7d 20 7b  lt-column>]*.} {
10040 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 7d 20 7b  result-column} {
10050 0a 53 54 41 52 20 7c 20 3c 74 61 62 6c 65 2d 6e  .STAR | <table-n
10060 61 6d 65 3e 20 2e 20 53 54 41 52 20 7c 20 3c 65  ame> . STAR | <e
10070 78 70 72 3e 20 5b 20 5b 41 53 5d 20 3c 73 74 72  xpr> [ [AS] <str
10080 69 6e 67 3e 20 5d 0a 7d 20 7b 74 61 62 6c 65 2d  ing> ].} {table-
10090 6c 69 73 74 7d 20 7b 0a 3c 74 61 62 6c 65 3e 20  list} {.<table> 
100a0 5b 3c 6a 6f 69 6e 2d 6f 70 3e 20 3c 74 61 62 6c  [<join-op> <tabl
100b0 65 3e 20 3c 6a 6f 69 6e 2d 61 72 67 73 3e 5d 2a  e> <join-args>]*
100c0 0a 7d 20 7b 74 61 62 6c 65 7d 20 7b 0a 3c 74 61  .} {table} {.<ta
100d0 62 6c 65 2d 6e 61 6d 65 3e 20 5b 41 53 20 3c 61  ble-name> [AS <a
100e0 6c 69 61 73 3e 5d 20 7c 0a 28 20 3c 73 65 6c 65  lias>] |.( <sele
100f0 63 74 3e 20 29 20 5b 41 53 20 3c 61 6c 69 61 73  ct> ) [AS <alias
10100 3e 5d 0a 7d 20 7b 6a 6f 69 6e 2d 6f 70 7d 20 7b  >].} {join-op} {
10110 0a 2c 20 7c 20 5b 4e 41 54 55 52 41 4c 5d 20 5b  ., | [NATURAL] [
10120 4c 45 46 54 20 7c 20 52 49 47 48 54 20 7c 20 46  LEFT | RIGHT | F
10130 55 4c 4c 5d 20 5b 4f 55 54 45 52 20 7c 20 49 4e  ULL] [OUTER | IN
10140 4e 45 52 20 7c 20 43 52 4f 53 53 5d 20 4a 4f 49  NER | CROSS] JOI
10150 4e 0a 7d 20 7b 6a 6f 69 6e 2d 61 72 67 73 7d 20  N.} {join-args} 
10160 7b 0a 5b 4f 4e 20 3c 65 78 70 72 3e 5d 20 5b 55  {.[ON <expr>] [U
10170 53 49 4e 47 20 28 20 3c 69 64 2d 6c 69 73 74 3e  SING ( <id-list>
10180 20 29 5d 0a 7d 20 7b 73 6f 72 74 2d 65 78 70 72   )].} {sort-expr
10190 2d 6c 69 73 74 7d 20 7b 0a 3c 65 78 70 72 3e 20  -list} {.<expr> 
101a0 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e 5d 20 5b  [<sort-order>] [
101b0 2c 20 3c 65 78 70 72 3e 20 5b 3c 73 6f 72 74 2d  , <expr> [<sort-
101c0 6f 72 64 65 72 3e 5d 5d 2a 0a 7d 20 7b 73 6f 72  order>]]*.} {sor
101d0 74 2d 6f 72 64 65 72 7d 20 7b 0a 5b 20 43 4f 4c  t-order} {.[ COL
101e0 4c 41 54 45 20 3c 63 6f 6c 6c 61 74 69 6f 6e 2d  LATE <collation-
101f0 6e 61 6d 65 3e 20 5d 20 5b 20 41 53 43 20 7c 20  name> ] [ ASC | 
10200 44 45 53 43 20 5d 0a 7d 20 7b 63 6f 6d 70 6f 75  DESC ].} {compou
10210 6e 64 5f 6f 70 7d 20 7b 0a 55 4e 49 4f 4e 20 7c  nd_op} {.UNION |
10220 20 55 4e 49 4f 4e 20 41 4c 4c 20 7c 20 49 4e 54   UNION ALL | INT
10230 45 52 53 45 43 54 20 7c 20 45 58 43 45 50 54 0a  ERSECT | EXCEPT.
10240 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
10250 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
10260 74 20 69 73 20 75 73 65 64 20 74 6f 20 71 75 65  t is used to que
10270 72 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ry the database.
10280 20 20 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20    The.result of 
10290 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f  a SELECT is zero
102a0 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66   or more rows of
102b0 20 64 61 74 61 20 77 68 65 72 65 20 65 61 63 68   data where each
102c0 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64   row.has a fixed
102d0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
102e0 6e 73 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  ns.  The number 
102f0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
10300 65 0a 72 65 73 75 6c 74 20 69 73 20 73 70 65 63  e.result is spec
10310 69 66 69 65 64 20 62 79 20 74 68 65 20 65 78 70  ified by the exp
10320 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 6e 20  ression list in 
10330 62 65 74 77 65 65 6e 20 74 68 65 0a 53 45 4c 45  between the.SELE
10340 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77  CT and FROM keyw
10350 6f 72 64 73 2e 20 20 41 6e 79 20 61 72 62 69 74  ords.  Any arbit
10360 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20  rary expression 
10370 63 61 6e 20 62 65 20 75 73 65 64 0a 61 73 20 61  can be used.as a
10380 20 72 65 73 75 6c 74 2e 20 20 49 66 20 61 20 72   result.  If a r
10390 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
103a0 20 69 73 20 7d 0a 70 75 74 73 20 22 5b 4f 70 65   is }.puts "[Ope
103b0 72 61 74 6f 72 20 2a 5d 20 74 68 65 6e 20 61 6c  rator *] then al
103c0 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6c 6c  l columns of all
103d0 20 74 61 62 6c 65 73 20 61 72 65 20 73 75 62 73   tables are subs
103e0 74 69 74 75 74 65 64 22 0a 70 75 74 73 20 7b 66  tituted".puts {f
103f0 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72  or that one expr
10400 65 73 73 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  ession.  If the 
10410 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
10420 65 20 6e 61 6d 65 20 6f 66 7d 0a 70 75 74 73 20  e name of}.puts 
10430 22 61 20 74 61 62 6c 65 20 66 6f 6c 6c 6f 77 65  "a table followe
10440 64 20 62 79 20 5b 4f 70 65 72 61 74 6f 72 20 2e  d by [Operator .
10450 2a 5d 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  *] then the resu
10460 6c 74 20 69 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e  lt is all column
10470 73 22 0a 70 75 74 73 20 7b 69 6e 20 74 68 61 74  s".puts {in that
10480 20 6f 6e 65 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a   one table.</p>.
10490 0a 3c 70 3e 54 68 65 20 44 49 53 54 49 4e 43 54  .<p>The DISTINCT
104a0 20 6b 65 79 77 6f 72 64 20 63 61 75 73 65 73 20   keyword causes 
104b0 61 20 73 75 62 73 65 74 20 6f 66 20 72 65 73 75  a subset of resu
104c0 6c 74 20 72 6f 77 73 20 74 6f 20 62 65 20 72 65  lt rows to be re
104d0 74 75 72 6e 65 64 2c 20 0a 69 6e 20 77 68 69 63  turned, .in whic
104e0 68 20 65 61 63 68 20 72 65 73 75 6c 74 20 72 6f  h each result ro
104f0 77 20 69 73 20 64 69 66 66 65 72 65 6e 74 2e 20  w is different. 
10500 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
10510 20 6e 6f 74 20 74 72 65 61 74 65 64 20 61 73 20   not treated as 
10520 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 65  .distinct from e
10530 61 63 68 20 6f 74 68 65 72 2e 20 20 54 68 65 20  ach other.  The 
10540 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
10550 20 69 73 20 74 68 61 74 20 61 6c 6c 20 72 65 73   is that all res
10560 75 6c 74 20 72 6f 77 73 20 0a 62 65 20 72 65 74  ult rows .be ret
10570 75 72 6e 65 64 2c 20 77 68 69 63 68 20 63 61 6e  urned, which can
10580 20 62 65 20 6d 61 64 65 20 65 78 70 6c 69 63 69   be made explici
10590 74 20 77 69 74 68 20 74 68 65 20 6b 65 79 77 6f  t with the keywo
105a0 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  rd ALL.</p>..<p>
105b0 54 68 65 20 71 75 65 72 79 20 69 73 20 65 78 65  The query is exe
105c0 63 75 74 65 64 20 61 67 61 69 6e 73 74 20 6f 6e  cuted against on
105d0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
105e0 20 73 70 65 63 69 66 69 65 64 20 61 66 74 65 72   specified after
105f0 0a 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72  .the FROM keywor
10600 64 2e 20 20 49 66 20 6d 75 6c 74 69 70 6c 65 20  d.  If multiple 
10610 74 61 62 6c 65 73 20 6e 61 6d 65 73 20 61 72 65  tables names are
10620 20 73 65 70 61 72 61 74 65 64 20 62 79 20 63 6f   separated by co
10630 6d 6d 61 73 2c 0a 74 68 65 6e 20 74 68 65 20 71  mmas,.then the q
10640 75 65 72 79 20 69 73 20 61 67 61 69 6e 73 74 20  uery is against 
10650 74 68 65 20 63 72 6f 73 73 20 6a 6f 69 6e 20 6f  the cross join o
10660 66 20 74 68 65 20 76 61 72 69 6f 75 73 20 74 61  f the various ta
10670 62 6c 65 73 2e 0a 54 68 65 20 66 75 6c 6c 20 53  bles..The full S
10680 51 4c 2d 39 32 20 6a 6f 69 6e 20 73 79 6e 74 61  QL-92 join synta
10690 78 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73  x can also be us
106a0 65 64 20 74 6f 20 73 70 65 63 69 66 79 20 6a 6f  ed to specify jo
106b0 69 6e 73 2e 0a 41 20 73 75 62 2d 71 75 65 72 79  ins..A sub-query
106c0 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 20  .in parentheses 
106d0 6d 61 79 20 62 65 20 73 75 62 73 74 69 74 75 74  may be substitut
106e0 65 64 20 66 6f 72 20 61 6e 79 20 74 61 62 6c 65  ed for any table
106f0 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f   name in the FRO
10700 4d 20 63 6c 61 75 73 65 2e 0a 54 68 65 20 65 6e  M clause..The en
10710 74 69 72 65 20 46 52 4f 4d 20 63 6c 61 75 73 65  tire FROM clause
10720 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 2c   may be omitted,
10730 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
10740 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 0a 73  he result is a.s
10750 69 6e 67 6c 65 20 72 6f 77 20 63 6f 6e 73 69 73  ingle row consis
10760 74 69 6e 67 20 6f 66 20 74 68 65 20 76 61 6c 75  ting of the valu
10770 65 73 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  es of the expres
10780 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c 2f 70 3e 0a  sion list..</p>.
10790 0a 3c 70 3e 54 68 65 20 57 48 45 52 45 20 63 6c  .<p>The WHERE cl
107a0 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
107b0 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
107c0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6f 76 65  mber of rows ove
107d0 72 0a 77 68 69 63 68 20 74 68 65 20 71 75 65 72  r.which the quer
107e0 79 20 6f 70 65 72 61 74 65 73 2e 3c 2f 70 3e 0a  y operates.</p>.
107f0 0a 3c 70 3e 54 68 65 20 47 52 4f 55 50 20 42 59  .<p>The GROUP BY
10800 20 63 6c 61 75 73 65 73 20 63 61 75 73 65 73 20   clauses causes 
10810 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
10820 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 74   of the result t
10830 6f 0a 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o.be combined in
10840 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  to a single row 
10850 6f 66 20 6f 75 74 70 75 74 2e 20 20 54 68 69 73  of output.  This
10860 20 69 73 20 65 73 70 65 63 69 61 6c 6c 79 20 75   is especially u
10870 73 65 66 75 6c 0a 77 68 65 6e 20 74 68 65 20 72  seful.when the r
10880 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 61  esult contains a
10890 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
108a0 6e 73 2e 20 20 54 68 65 20 65 78 70 72 65 73 73  ns.  The express
108b0 69 6f 6e 73 20 69 6e 0a 74 68 65 20 47 52 4f 55  ions in.the GROU
108c0 50 20 42 59 20 63 6c 61 75 73 65 20 64 6f 20 3c  P BY clause do <
108d0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65  em>not</em> have
108e0 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f   to be expressio
108f0 6e 73 20 74 68 61 74 0a 61 70 70 65 61 72 20 69  ns that.appear i
10900 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 54  n the result.  T
10910 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
10920 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 57   is similar to W
10930 48 45 52 45 20 65 78 63 65 70 74 0a 74 68 61 74  HERE except.that
10940 20 48 41 56 49 4e 47 20 61 70 70 6c 69 65 73 20   HAVING applies 
10950 61 66 74 65 72 20 67 72 6f 75 70 69 6e 67 20 68  after grouping h
10960 61 73 20 6f 63 63 75 72 72 65 64 2e 20 20 54 68  as occurred.  Th
10970 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73  e HAVING express
10980 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72 20 74 6f  ion.may refer to
10990 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67   values, even ag
109a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
109b0 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  s, that are not 
109c0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f  in the result.</
109d0 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 52 44 45 52  p>..<p>The ORDER
109e0 20 42 59 20 63 6c 61 75 73 65 20 63 61 75 73 65   BY clause cause
109f0 73 20 74 68 65 20 6f 75 74 70 75 74 20 72 6f 77  s the output row
10a00 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 20  s to be sorted. 
10a10 20 0a 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74   .The argument t
10a20 6f 20 4f 52 44 45 52 20 42 59 20 69 73 20 61 20  o ORDER BY is a 
10a30 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
10a40 6f 6e 73 20 74 68 61 74 20 61 72 65 20 75 73 65  ons that are use
10a50 64 20 61 73 20 74 68 65 0a 6b 65 79 20 66 6f 72  d as the.key for
10a60 20 74 68 65 20 73 6f 72 74 2e 20 20 54 68 65 20   the sort.  The 
10a70 65 78 70 72 65 73 73 69 6f 6e 73 20 64 6f 20 6e  expressions do n
10a80 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20 70 61  ot have to be pa
10a90 72 74 20 6f 66 20 74 68 65 0a 72 65 73 75 6c 74  rt of the.result
10aa0 20 66 6f 72 20 61 20 73 69 6d 70 6c 65 20 53 45   for a simple SE
10ab0 4c 45 43 54 2c 20 62 75 74 20 69 6e 20 61 20 63  LECT, but in a c
10ac0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 65  ompound SELECT e
10ad0 61 63 68 20 73 6f 72 74 0a 65 78 70 72 65 73 73  ach sort.express
10ae0 69 6f 6e 20 6d 75 73 74 20 65 78 61 63 74 6c 79  ion must exactly
10af0 20 6d 61 74 63 68 20 6f 6e 65 20 6f 66 20 74 68   match one of th
10b00 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  e result columns
10b10 2e 20 20 45 61 63 68 0a 73 6f 72 74 20 65 78 70  .  Each.sort exp
10b20 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f  ression may be o
10b30 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77  ptionally follow
10b40 65 64 20 62 79 20 61 20 43 4f 4c 4c 41 54 45 20  ed by a COLLATE 
10b50 6b 65 79 77 6f 72 64 20 61 6e 64 0a 74 68 65 20  keyword and.the 
10b60 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 6c 61 74  name of a collat
10b70 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ing function use
10b80 64 20 66 6f 72 20 6f 72 64 65 72 69 6e 67 20 74  d for ordering t
10b90 65 78 74 20 61 6e 64 2f 6f 72 0a 6b 65 79 77 6f  ext and/or.keywo
10ba0 72 64 73 20 41 53 43 20 6f 72 20 44 45 53 43 20  rds ASC or DESC 
10bb0 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 73  to specify the s
10bc0 6f 72 74 20 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a  ort order.</p>..
10bd0 3c 70 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61  <p>The LIMIT cla
10be0 75 73 65 20 70 6c 61 63 65 73 20 61 6e 20 75 70  use places an up
10bf0 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
10c00 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
10c10 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20  returned in the 
10c20 72 65 73 75 6c 74 2e 20 20 41 20 6e 65 67 61 74  result.  A negat
10c30 69 76 65 20 4c 49 4d 49 54 20 69 6e 64 69 63 61  ive LIMIT indica
10c40 74 65 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75  tes no upper bou
10c50 6e 64 2e 0a 54 68 65 20 6f 70 74 69 6f 6e 61 6c  nd..The optional
10c60 20 4f 46 46 53 45 54 20 66 6f 6c 6c 6f 77 69 6e   OFFSET followin
10c70 67 20 4c 49 4d 49 54 20 73 70 65 63 69 66 69 65  g LIMIT specifie
10c80 73 20 68 6f 77 20 6d 61 6e 79 0a 72 6f 77 73 20  s how many.rows 
10c90 74 6f 20 73 6b 69 70 20 61 74 20 74 68 65 20 62  to skip at the b
10ca0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
10cb0 72 65 73 75 6c 74 20 73 65 74 2e 0a 49 6e 20 61  result set..In a
10cc0 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 2c   compound query,
10cd0 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
10ce0 65 20 6d 61 79 20 6f 6e 6c 79 20 61 70 70 65 61  e may only appea
10cf0 72 20 6f 6e 20 74 68 65 0a 66 69 6e 61 6c 20 53  r on the.final S
10d00 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
10d10 0a 54 68 65 20 6c 69 6d 69 74 20 69 73 20 61 70  .The limit is ap
10d20 70 6c 69 65 64 20 74 6f 20 74 68 65 20 65 6e 74  plied to the ent
10d30 69 72 65 20 71 75 65 72 79 20 6e 6f 74 0a 74 6f  ire query not.to
10d40 20 74 68 65 20 69 6e 64 69 76 69 64 75 61 6c 20   the individual 
10d50 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
10d60 20 74 6f 20 77 68 69 63 68 20 69 74 20 69 73 20   to which it is 
10d70 61 74 74 61 63 68 65 64 2e 0a 4e 6f 74 65 20 74  attached..Note t
10d80 68 61 74 20 69 66 20 74 68 65 20 4f 46 46 53 45  hat if the OFFSE
10d90 54 20 6b 65 79 77 6f 72 64 20 69 73 20 75 73 65  T keyword is use
10da0 64 20 69 6e 20 74 68 65 20 4c 49 4d 49 54 20 63  d in the LIMIT c
10db0 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  lause, then the.
10dc0 6c 69 6d 69 74 20 69 73 20 74 68 65 20 66 69 72  limit is the fir
10dd0 73 74 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68  st number and th
10de0 65 20 6f 66 66 73 65 74 20 69 73 20 74 68 65 20  e offset is the 
10df0 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20  second number.  
10e00 49 66 20 61 0a 63 6f 6d 6d 61 20 69 73 20 75 73  If a.comma is us
10e10 65 64 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  ed instead of th
10e20 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64  e OFFSET keyword
10e30 2c 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65  , then the offse
10e40 74 20 69 73 20 74 68 65 0a 66 69 72 73 74 20 6e  t is the.first n
10e50 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6c 69  umber and the li
10e60 6d 69 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e  mit is the secon
10e70 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  d number.  This 
10e80 73 65 65 6d 69 6e 67 0a 63 6f 6e 74 72 61 64 69  seeming.contradi
10e90 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 74 69 6f  tion is intentio
10ea0 6e 61 6c 20 2d 20 69 74 20 6d 61 78 69 6d 69 7a  nal - it maximiz
10eb0 65 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  es compatibility
10ec0 20 77 69 74 68 20 6c 65 67 61 63 79 0a 53 51 4c   with legacy.SQL
10ed0 20 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d   database system
10ee0 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f  s..</p>..<p>A co
10ef0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 69 73  mpound SELECT is
10f00 20 66 6f 72 6d 65 64 20 66 72 6f 6d 20 74 77 6f   formed from two
10f10 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
10f20 53 45 4c 45 43 54 73 20 63 6f 6e 6e 65 63 74 65  SELECTs connecte
10f30 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d.by one of the 
10f40 6f 70 65 72 61 74 6f 72 73 20 55 4e 49 4f 4e 2c  operators UNION,
10f50 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45   UNION ALL, INTE
10f60 52 53 45 43 54 2c 20 6f 72 20 45 58 43 45 50 54  RSECT, or EXCEPT
10f70 2e 20 20 49 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64  .  In.a compound
10f80 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65   SELECT, all the
10f90 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c   constituent SEL
10fa0 45 43 54 73 20 6d 75 73 74 20 73 70 65 63 69 66  ECTs must specif
10fb0 79 20 74 68 65 0a 73 61 6d 65 20 6e 75 6d 62 65  y the.same numbe
10fc0 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75  r of result colu
10fd0 6d 6e 73 2e 20 20 54 68 65 72 65 20 6d 61 79 20  mns.  There may 
10fe0 62 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  be only a single
10ff0 20 4f 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65   ORDER BY.clause
11000 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
11010 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  he compound SELE
11020 43 54 2e 20 20 54 68 65 20 55 4e 49 4f 4e 20 61  CT.  The UNION a
11030 6e 64 20 55 4e 49 4f 4e 20 41 4c 4c 0a 6f 70 65  nd UNION ALL.ope
11040 72 61 74 6f 72 73 20 63 6f 6d 62 69 6e 65 20 74  rators combine t
11050 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
11060 65 20 53 45 4c 45 43 54 73 20 74 6f 20 74 68 65  e SELECTs to the
11070 20 72 69 67 68 74 20 61 6e 64 20 6c 65 66 74 20   right and left 
11080 69 6e 74 6f 0a 61 20 73 69 6e 67 6c 65 20 62 69  into.a single bi
11090 67 20 74 61 62 6c 65 2e 20 20 54 68 65 20 64 69  g table.  The di
110a0 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74  fference is that
110b0 20 69 6e 20 55 4e 49 4f 4e 20 61 6c 6c 20 72 65   in UNION all re
110c0 73 75 6c 74 20 72 6f 77 73 0a 61 72 65 20 64 69  sult rows.are di
110d0 73 74 69 6e 63 74 20 77 68 65 72 65 20 69 6e 20  stinct where in 
110e0 55 4e 49 4f 4e 20 41 4c 4c 20 74 68 65 72 65 20  UNION ALL there 
110f0 6d 61 79 20 62 65 20 64 75 70 6c 69 63 61 74 65  may be duplicate
11100 73 2e 0a 54 68 65 20 49 4e 54 45 52 53 45 43 54  s..The INTERSECT
11110 20 6f 70 65 72 61 74 6f 72 20 74 61 6b 65 73 20   operator takes 
11120 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e  the intersection
11130 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
11140 6f 66 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20  of the.left and 
11150 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20  right SELECTs.  
11160 45 58 43 45 50 54 20 74 61 6b 65 73 20 74 68 65  EXCEPT takes the
11170 20 72 65 73 75 6c 74 20 6f 66 20 6c 65 66 74 20   result of left 
11180 53 45 4c 45 43 54 20 61 66 74 65 72 0a 72 65 6d  SELECT after.rem
11190 6f 76 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  oving the result
111a0 73 20 6f 66 20 74 68 65 20 72 69 67 68 74 20 53  s of the right S
111b0 45 4c 45 43 54 2e 20 20 57 68 65 6e 20 74 68 72  ELECT.  When thr
111c0 65 65 20 6f 72 20 6d 6f 72 65 20 53 45 4c 45 43  ee or more SELEC
111d0 54 73 0a 61 72 65 20 63 6f 6e 6e 65 63 74 65 64  Ts.are connected
111e0 20 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64   into a compound
111f0 2c 20 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f  , they group fro
11200 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
11210 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e  </p>.}...Section
11220 20 55 50 44 41 54 45 20 75 70 64 61 74 65 0a 0a   UPDATE update..
11230 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
11240 65 6d 65 6e 74 7d 20 7b 0a 55 50 44 41 54 45 20  ement} {.UPDATE 
11250 5b 20 4f 52 20 3c 63 6f 6e 66 6c 69 63 74 2d 61  [ OR <conflict-a
11260 6c 67 6f 72 69 74 68 6d 3e 20 5d 20 5b 3c 64 61  lgorithm> ] [<da
11270 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
11280 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 0a 53 45 54  <table-name>.SET
11290 20 3c 61 73 73 69 67 6e 6d 65 6e 74 3e 20 5b 2c   <assignment> [,
112a0 20 3c 61 73 73 69 67 6e 6d 65 6e 74 3e 5d 2a 0a   <assignment>]*.
112b0 5b 57 48 45 52 45 20 3c 65 78 70 72 3e 5d 0a 7d  [WHERE <expr>].}
112c0 20 7b 61 73 73 69 67 6e 6d 65 6e 74 7d 20 7b 0a   {assignment} {.
112d0 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e 20 3d 20  <column-name> = 
112e0 3c 65 78 70 72 3e 0a 7d 0a 0a 70 75 74 73 20 7b  <expr>.}..puts {
112f0 0a 3c 70 3e 54 68 65 20 55 50 44 41 54 45 20 73  .<p>The UPDATE s
11300 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
11310 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20 76   to change the v
11320 61 6c 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  alue of columns 
11330 69 6e 20 0a 73 65 6c 65 63 74 65 64 20 72 6f 77  in .selected row
11340 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 20 20 45  s of a table.  E
11350 61 63 68 20 61 73 73 69 67 6e 6d 65 6e 74 20 69  ach assignment i
11360 6e 20 61 6e 20 55 50 44 41 54 45 20 73 70 65 63  n an UPDATE spec
11370 69 66 69 65 73 0a 61 20 63 6f 6c 75 6d 6e 20 6e  ifies.a column n
11380 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ame to the left 
11390 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 73 69  of the equals si
113a0 67 6e 20 61 6e 64 20 61 6e 20 61 72 62 69 74 72  gn and an arbitr
113b0 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 0a 74  ary expression.t
113c0 6f 20 74 68 65 20 72 69 67 68 74 2e 20 20 54 68  o the right.  Th
113d0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61  e expressions ma
113e0 79 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 73  y use the values
113f0 20 6f 66 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e   of other column
11400 73 2e 0a 41 6c 6c 20 65 78 70 72 65 73 73 69 6f  s..All expressio
11410 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
11420 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69   before any assi
11430 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65  gnments are made
11440 2e 0a 41 20 57 48 45 52 45 20 63 6c 61 75 73 65  ..A WHERE clause
11450 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
11460 72 65 73 74 72 69 63 74 20 77 68 69 63 68 20 72  restrict which r
11470 6f 77 73 20 61 72 65 20 75 70 64 61 74 65 64 2e  ows are updated.
11480 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  </p>..<p>The opt
11490 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63  ional conflict-c
114a0 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65  lause allows the
114b0 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f   specification o
114c0 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  f an alternative
114d0 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
114e0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
114f0 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65  algorithm to use
11500 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65   during this one
11510 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68   command..See th
11520 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
11530 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c  .<a href="#confl
11540 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54  ict">ON CONFLICT
11550 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69 74 69 6f  </a> for additio
11560 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
11570 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e  </p>.}...Section
11580 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 0a 0a   VACUUM vacuum..
11590 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
115a0 65 6d 65 6e 74 7d 20 7b 0a 56 41 43 55 55 4d 20  ement} {.VACUUM 
115b0 5b 3c 69 6e 64 65 78 2d 6f 72 2d 74 61 62 6c 65  [<index-or-table
115c0 2d 6e 61 6d 65 3e 5d 0a 7d 0a 0a 70 75 74 73 20  -name>].}..puts 
115d0 7b 0a 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20  {.<p>The VACUUM 
115e0 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 53 51  command is an SQ
115f0 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6d  Lite extension m
11600 6f 64 65 6c 65 64 20 61 66 74 65 72 20 61 20 73  odeled after a s
11610 69 6d 69 6c 61 72 0a 63 6f 6d 6d 61 6e 64 20 66  imilar.command f
11620 6f 75 6e 64 20 69 6e 20 50 6f 73 74 67 72 65 53  ound in PostgreS
11630 51 4c 2e 20 20 49 66 20 56 41 43 55 55 4d 20 69  QL.  If VACUUM i
11640 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74  s invoked with t
11650 68 65 20 6e 61 6d 65 20 6f 66 20 61 0a 74 61 62  he name of a.tab
11660 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 65 6e  le or index then
11670 20 69 74 20 69 73 20 73 75 70 70 6f 73 65 20 74   it is suppose t
11680 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 6e  o clean up the n
11690 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 69 6e  amed table or in
116a0 64 65 78 2e 0a 49 6e 20 76 65 72 73 69 6f 6e 20  dex..In version 
116b0 31 2e 30 20 6f 66 20 53 51 4c 69 74 65 2c 20 74  1.0 of SQLite, t
116c0 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
116d0 64 20 77 6f 75 6c 64 20 69 6e 76 6f 6b 65 20 0a  d would invoke .
116e0 3c 62 3e 67 64 62 6d 5f 72 65 6f 72 67 61 6e 69  <b>gdbm_reorgani
116f0 7a 65 28 29 3c 2f 62 3e 20 74 6f 20 63 6c 65 61  ze()</b> to clea
11700 6e 20 75 70 20 74 68 65 20 62 61 63 6b 65 6e 64  n up the backend
11710 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
11720 2f 70 3e 0a 0a 3c 70 3e 0a 56 41 43 55 55 4d 20  /p>..<p>.VACUUM 
11730 62 65 63 61 6d 65 20 61 20 6e 6f 2d 6f 70 20 77  became a no-op w
11740 68 65 6e 20 74 68 65 20 47 44 42 4d 20 62 61 63  hen the GDBM bac
11750 6b 65 6e 64 20 77 61 73 20 72 65 6d 6f 76 65 64  kend was removed
11760 20 66 72 6f 6d 0a 53 51 4c 49 54 45 20 69 6e 20   from.SQLITE in 
11770 76 65 72 73 69 6f 6e 20 32 2e 30 2e 30 2e 0a 56  version 2.0.0..V
11780 41 43 55 55 4d 20 77 61 73 20 72 65 69 6d 70 6c  ACUUM was reimpl
11790 65 6d 65 6e 74 65 64 20 69 6e 20 76 65 72 73 69  emented in versi
117a0 6f 6e 20 32 2e 38 2e 31 2e 0a 54 68 65 20 69 6e  on 2.8.1..The in
117b0 64 65 78 20 6f 72 20 74 61 62 6c 65 20 6e 61 6d  dex or table nam
117c0 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f  e argument is no
117d0 77 20 69 67 6e 6f 72 65 64 2e 0a 3c 2f 70 3e 0a  w ignored..</p>.
117e0 0a 3c 70 3e 57 68 65 6e 20 61 6e 20 6f 62 6a 65  .<p>When an obje
117f0 63 74 20 28 74 61 62 6c 65 2c 20 69 6e 64 65 78  ct (table, index
11800 2c 20 6f 72 20 74 72 69 67 67 65 72 29 20 69 73  , or trigger) is
11810 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68   dropped from th
11820 65 20 0a 64 61 74 61 62 61 73 65 2c 20 69 74 20  e .database, it 
11830 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d  leaves behind em
11840 70 74 79 20 73 70 61 63 65 2e 20 20 54 68 69 73  pty space.  This
11850 20 6d 61 6b 65 73 20 74 68 65 20 64 61 74 61 62   makes the datab
11860 61 73 65 20 0a 66 69 6c 65 20 6c 61 72 67 65 72  ase .file larger
11870 20 74 68 61 6e 20 69 74 20 6e 65 65 64 73 20 74   than it needs t
11880 6f 20 62 65 2c 20 62 75 74 20 63 61 6e 20 73 70  o be, but can sp
11890 65 65 64 20 75 70 20 69 6e 73 65 72 74 73 2e 20  eed up inserts. 
118a0 20 49 6e 20 74 69 6d 65 20 0a 69 6e 73 65 72 74   In time .insert
118b0 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61  s and deletes ca
118c0 6e 20 6c 65 61 76 65 20 74 68 65 20 64 61 74 61  n leave the data
118d0 62 61 73 65 20 66 69 6c 65 20 73 74 72 75 63 74  base file struct
118e0 75 72 65 20 66 72 61 67 6d 65 6e 74 65 64 2c 20  ure fragmented, 
118f0 0a 77 68 69 63 68 20 73 6c 6f 77 73 20 64 6f 77  .which slows dow
11900 6e 20 64 69 73 6b 20 61 63 63 65 73 73 20 74 6f  n disk access to
11910 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
11920 6e 74 65 6e 74 73 2e 0a 0a 54 68 65 20 56 41 43  ntents...The VAC
11930 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c 65 61  UUM command clea
11940 6e 73 0a 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns.the main data
11950 62 61 73 65 20 62 79 20 63 6f 70 79 69 6e 67 20  base by copying 
11960 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20  its contents to 
11970 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  a temporary data
11980 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 0a 72  base file and .r
11990 65 6c 6f 61 64 69 6e 67 20 74 68 65 20 6f 72 69  eloading the ori
119a0 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ginal database f
119b0 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 6f 70  ile from the cop
119c0 79 2e 20 20 54 68 69 73 20 65 6c 69 6d 69 6e 61  y.  This elimina
119d0 74 65 73 20 0a 66 72 65 65 20 70 61 67 65 73 2c  tes .free pages,
119e0 20 20 61 6c 69 67 6e 73 20 74 61 62 6c 65 20 64    aligns table d
119f0 61 74 61 20 74 6f 20 62 65 20 63 6f 6e 74 69 67  ata to be contig
11a00 75 6f 75 73 2c 20 61 6e 64 20 6f 74 68 65 72 77  uous, and otherw
11a10 69 73 65 20 63 6c 65 61 6e 73 20 0a 75 70 20 74  ise cleans .up t
11a20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11a30 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
11a40 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
11a50 6f 20 70 65 72 66 6f 72 6d 20 74 68 65 20 73 61  o perform the sa
11a60 6d 65 0a 70 72 6f 63 65 73 73 20 6f 6e 20 61 6e  me.process on an
11a70 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
11a80 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
11a90 3e 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 77 69  >This command wi
11aa0 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
11ab0 20 69 73 20 61 6e 20 61 63 74 69 76 65 20 74 72   is an active tr
11ac0 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73  ansaction.  This
11ad0 20 0a 63 6f 6d 6d 61 6e 64 20 68 61 73 20 6e 6f   .command has no
11ae0 20 65 66 66 65 63 74 20 6f 6e 20 61 6e 20 69 6e   effect on an in
11af0 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
11b00 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 20 6f 66 20  .</p>..<p>As of 
11b10 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
11b20 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
11b30 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
11b40 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69  VACUUM command.i
11b50 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f  s auto-vacuum mo
11b60 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e  de, enabled usin
11b70 67 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22  g the .<a href="
11b80 70 72 61 67 6d 61 2e 68 74 6d 6c 23 70 72 61 67  pragma.html#prag
11b90 6d 61 5f 61 75 74 6f 5f 76 61 63 75 75 6d 22 3e  ma_auto_vacuum">
11ba0 61 75 74 6f 5f 76 61 63 75 75 6d 20 70 72 61 67  auto_vacuum prag
11bb0 6d 61 3c 2f 61 3e 2e 3c 2f 70 3e 0a 7d 0a 0a 23  ma</a>.</p>.}..#
11bc0 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f   A list of keywo
11bd0 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b  rds.  A asterisk
11be0 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
11bf0 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20  e keyword if it 
11c00 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c  is on.# the fall
11c10 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74  back list..#.set
11c20 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c   keyword_list [l
11c30 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 2a  sort {.   ABORT*
11c40 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52  .   ADD.   AFTER
11c50 2a 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45  *.   ALL.   ALTE
11c60 52 0a 20 20 20 41 4e 41 4c 59 5a 45 2a 0a 20 20  R.   ANALYZE*.  
11c70 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53   AND.   AS.   AS
11c80 43 2a 0a 20 20 20 41 54 54 41 43 48 2a 0a 20 20  C*.   ATTACH*.  
11c90 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
11ca0 20 20 42 45 46 4f 52 45 2a 0a 20 20 20 42 45 47    BEFORE*.   BEG
11cb0 49 4e 2a 0a 20 20 20 42 45 54 57 45 45 4e 0a 20  IN*.   BETWEEN. 
11cc0 20 20 42 59 0a 20 20 20 43 41 53 43 41 44 45 2a    BY.   CASCADE*
11cd0 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53 54  .   CASE.   CAST
11ce0 2a 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f  *.   CHECK.   CO
11cf0 4c 4c 41 54 45 0a 20 20 20 43 4f 4d 4d 49 54 0a  LLATE.   COMMIT.
11d00 20 20 20 43 4f 4e 46 4c 49 43 54 2a 0a 20 20 20     CONFLICT*.   
11d10 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52  CONSTRAINT.   CR
11d20 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20  EATE.   CROSS.  
11d30 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2a 0a 20   CURRENT_DATE*. 
11d40 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2a 0a    CURRENT_TIME*.
11d50 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53     CURRENT_TIMES
11d60 54 41 4d 50 2a 0a 20 20 20 44 41 54 41 42 41 53  TAMP*.   DATABAS
11d70 45 2a 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20  E*.   DEFAULT.  
11d80 20 44 45 46 45 52 52 45 44 2a 0a 20 20 20 44 45   DEFERRED*.   DE
11d90 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45  FERRABLE.   DELE
11da0 54 45 0a 20 20 20 44 45 53 43 2a 0a 20 20 20 44  TE.   DESC*.   D
11db0 45 54 41 43 48 2a 0a 20 20 20 44 49 53 54 49 4e  ETACH*.   DISTIN
11dc0 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e  CT.   DROP.   EN
11dd0 44 2a 0a 20 20 20 45 41 43 48 2a 0a 20 20 20 45  D*.   EACH*.   E
11de0 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20  LSE.   ESCAPE.  
11df0 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55   EXCEPT.   EXCLU
11e00 53 49 56 45 2a 0a 20 20 20 45 58 50 4c 41 49 4e  SIVE*.   EXPLAIN
11e10 2a 0a 20 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f  *.   FAIL*.   FO
11e20 52 2a 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20  R*.   FOREIGN.  
11e30 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20   FROM.   FULL.  
11e40 20 47 4c 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a   GLOB*.   GROUP.
11e50 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46 2a     HAVING.   IF*
11e60 0a 20 20 20 49 47 4e 4f 52 45 2a 0a 20 20 20 49  .   IGNORE*.   I
11e70 4d 4d 45 44 49 41 54 45 2a 0a 20 20 20 49 4e 0a  MMEDIATE*.   IN.
11e80 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 49 54     INDEX.   INIT
11e90 49 41 4c 4c 59 2a 0a 20 20 20 49 4e 4e 45 52 0a  IALLY*.   INNER.
11ea0 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53     INSERT.   INS
11eb0 54 45 41 44 2a 0a 20 20 20 49 4e 54 45 52 53 45  TEAD*.   INTERSE
11ec0 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49 53  CT.   INTO.   IS
11ed0 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f  .   ISNULL.   JO
11ee0 49 4e 0a 20 20 20 4b 45 59 2a 0a 20 20 20 4c 45  IN.   KEY*.   LE
11ef0 46 54 0a 20 20 20 4c 49 4b 45 2a 0a 20 20 20 4c  FT.   LIKE*.   L
11f00 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 2a 0a 20  IMIT.   MATCH*. 
11f10 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f 54    NATURAL.   NOT
11f20 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e  .   NOTNULL.   N
11f30 55 4c 4c 0a 20 20 20 4f 46 2a 0a 20 20 20 4f 46  ULL.   OF*.   OF
11f40 46 53 45 54 2a 0a 20 20 20 4f 4e 0a 20 20 20 4f  FSET*.   ON.   O
11f50 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f 55  R.   ORDER.   OU
11f60 54 45 52 0a 20 20 20 50 4c 41 4e 2a 0a 20 20 20  TER.   PLAN*.   
11f70 50 52 41 47 4d 41 2a 0a 20 20 20 50 52 49 4d 41  PRAGMA*.   PRIMA
11f80 52 59 0a 20 20 20 51 55 45 52 59 2a 0a 20 20 20  RY.   QUERY*.   
11f90 52 41 49 53 45 2a 0a 20 20 20 52 45 46 45 52 45  RAISE*.   REFERE
11fa0 4e 43 45 53 0a 20 20 20 52 45 49 4e 44 45 58 2a  NCES.   REINDEX*
11fb0 0a 20 20 20 52 45 4e 41 4d 45 2a 0a 20 20 20 52  .   RENAME*.   R
11fc0 45 50 4c 41 43 45 2a 0a 20 20 20 52 45 53 54 52  EPLACE*.   RESTR
11fd0 49 43 54 2a 0a 20 20 20 52 49 47 48 54 0a 20 20  ICT*.   RIGHT.  
11fe0 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57   ROLLBACK.   ROW
11ff0 2a 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53  *.   SELECT.   S
12000 45 54 0a 20 20 20 53 54 41 54 45 4d 45 4e 54 2a  ET.   STATEMENT*
12010 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d  .   TABLE.   TEM
12020 50 2a 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 2a  P*.   TEMPORARY*
12030 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20  .   THEN.   TO. 
12040 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20    TRANSACTION.  
12050 20 54 52 49 47 47 45 52 2a 0a 20 20 20 55 4e 49   TRIGGER*.   UNI
12060 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
12070 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
12080 20 20 20 56 41 43 55 55 4d 2a 0a 20 20 20 56 41     VACUUM*.   VA
12090 4c 55 45 53 0a 20 20 20 56 49 45 57 2a 0a 20 20  LUES.   VIEW*.  
120a0 20 56 49 52 54 55 41 4c 2a 0a 20 20 20 57 48 45   VIRTUAL*.   WHE
120b0 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 0a  N.   WHERE.}]...
120c0 0a 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73  .puts {<DIV clas
120d0 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e  s="pdf_section">
120e0 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74  }.Section {SQLit
120f0 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77  e Keywords} keyw
12100 6f 72 64 73 20 0a 70 75 74 73 20 7b 3c 2f 44 49  ords .puts {</DI
12110 56 3e 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  V>}..puts {.<p>T
12120 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
12130 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65  specifies a huge
12140 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f   number of keywo
12150 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f  rds which may no
12160 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65  t.be used as the
12170 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
12180 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d  , indices, colum
12190 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75  ns, databases, u
121a0 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63  ser-defined.func
121b0 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  tions, collation
121c0 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  s, virtual table
121d0 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79   modules, or any
121e0 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a   other named obj
121f0 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66  ect..The list of
12200 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20   keywords is so 
12210 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65  long that few pe
12220 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65  ople can remembe
12230 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20  r them all..For 
12240 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79  most SQL code, y
12250 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69  our safest bet i
12260 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61  s to never use a
12270 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  ny English langu
12280 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20  age.word as the 
12290 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64  name of a user-d
122a0 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f  efined object.</
122b0 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61  p>..<p>If you wa
122c0 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77  nt to use a keyw
122d0 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79  ord as a name, y
122e0 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65  ou need to quote
122f0 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20   it.  There.are 
12300 74 68 72 65 65 20 77 61 79 73 20 6f 66 20 71 75  three ways of qu
12310 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69  oting keywords i
12320 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c  n SQLite:</p>..<
12330 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  p>.<blockquote>.
12340 3c 74 61 62 6c 65 20 63 6c 61 73 73 3d 22 70 64  <table class="pd
12350 66 5f 66 75 6e 63 74 69 6f 6e 73 22 3e 0a 3c 74  f_functions">.<t
12360 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
12370 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27  op"><b>'keyword'
12380 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
12390 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c  th="20"></td>..<
123a0 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  td>A keyword in 
123b0 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73  single quotes is
123c0 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
123d0 61 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e 67  a literal string
123e0 0a 20 20 20 20 20 20 20 20 69 66 20 69 74 20 6f  .        if it o
123f0 63 63 75 72 73 20 69 6e 20 61 20 63 6f 6e 74 65  ccurs in a conte
12400 78 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e  xt where a strin
12410 67 20 6c 69 74 65 72 61 6c 20 69 73 20 61 6c 6c  g literal is all
12420 6f 77 65 64 2c 20 6f 74 68 65 72 77 69 73 65 0a  owed, otherwise.
12430 09 69 74 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  .it is understoo
12440 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66 69  d as an identifi
12450 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74  er.</td></tr>.<t
12460 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
12470 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22  op"><b>"keyword"
12480 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
12490 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72  d>..<td>A keywor
124a0 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
124b0 65 73 20 69 73 20 69 6e 74 65 72 70 72 65 74 65  es is interprete
124c0 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66 69  d as an identifi
124d0 65 72 20 69 66 0a 20 20 20 20 20 20 20 20 69 74  er if.        it
124e0 20 6d 61 74 63 68 65 73 20 61 20 6b 6e 6f 77 6e   matches a known
124f0 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 4f 74   identifier.  Ot
12500 68 65 72 77 69 73 65 20 69 74 20 69 73 20 69 6e  herwise it is in
12510 74 65 72 70 72 65 74 65 64 20 61 73 20 61 0a 20  terpreted as a. 
12520 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
12530 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e  teral.</td></tr>
12540 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
12550 3d 22 74 6f 70 22 3e 3c 62 3e 5b 6b 65 79 77 6f  ="top"><b>[keywo
12560 72 64 5d 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  rd]</b></td><td>
12570 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79  </td>..<td>A key
12580 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e  word enclosed in
12590 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73   square brackets
125a0 20 69 73 20 61 6c 77 61 79 73 20 75 6e 64 65 72   is always under
125b0 73 74 6f 6f 64 20 61 73 0a 20 20 20 20 20 20 20  stood as.       
125c0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
125d0 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
125e0 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
125f0 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
12600 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
12610 65 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20  ed by MS Access 
12620 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61  and SQL Server a
12630 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  nd is included i
12640 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20  n SQLite for.   
12650 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69       compatibili
12660 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f  ty.</td></tr>.</
12670 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
12680 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 51 75  ote>.</p>..<p>Qu
12690 6f 74 65 64 20 6b 65 79 77 6f 72 64 73 20 61 72  oted keywords ar
126a0 65 20 75 6e 61 65 73 74 68 65 74 69 63 2e 0a 54  e unaesthetic..T
126b0 6f 20 68 65 6c 70 20 79 6f 75 20 61 76 6f 69 64  o help you avoid
126c0 20 74 68 65 6d 2c 20 53 51 4c 69 74 65 20 61 6c   them, SQLite al
126d0 6c 6f 77 73 20 6d 61 6e 79 20 6b 65 79 77 6f 72  lows many keywor
126e0 64 73 20 74 6f 20 62 65 20 75 73 65 64 20 75 6e  ds to be used un
126f0 71 75 6f 74 65 64 0a 61 73 20 74 68 65 20 6e 61  quoted.as the na
12700 6d 65 73 20 6f 66 20 64 61 74 61 62 61 73 65 73  mes of databases
12710 2c 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65  , tables, indice
12720 73 2c 20 74 72 69 67 67 65 72 73 2c 20 76 69 65  s, triggers, vie
12730 77 73 2c 20 63 6f 6c 75 6d 6e 73 2c 0a 75 73 65  ws, columns,.use
12740 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  r-defined functi
12750 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c  ons, collations,
12760 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
12770 73 65 73 2c 20 61 6e 64 20 76 69 72 74 75 61 6c  ses, and virtual
12780 0a 66 75 6e 63 74 69 6f 6e 20 6d 6f 64 75 6c 65  .function module
12790 73 2e 0a 49 6e 20 74 68 65 20 6c 69 73 74 20 6f  s..In the list o
127a0 66 20 6b 65 79 77 6f 72 64 73 20 74 68 61 74 20  f keywords that 
127b0 66 6f 6c 6c 6f 77 73 2c 20 74 68 6f 73 65 20 74  follows, those t
127c0 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
127d0 61 73 20 69 64 65 6e 74 69 66 69 65 72 73 0a 61  as identifiers.a
127e0 72 65 20 73 68 6f 77 6e 20 69 6e 20 61 6e 20 69  re shown in an i
127f0 74 61 6c 69 63 20 66 6f 6e 74 2e 20 20 4b 65 79  talic font.  Key
12800 77 6f 72 64 73 20 74 68 61 74 20 6d 75 73 74 20  words that must 
12810 62 65 20 71 75 6f 74 65 64 20 69 6e 20 6f 72 64  be quoted in ord
12820 65 72 20 74 6f 20 62 65 0a 75 73 65 64 20 61 73  er to be.used as
12830 20 69 64 65 6e 74 69 66 69 65 72 73 20 61 72 65   identifiers are
12840 20 73 68 6f 77 6e 20 69 6e 20 62 6f 6c 64 2e 3c   shown in bold.<
12850 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  /p>..<p>.SQLite 
12860 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64  adds new keyword
12870 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74  s from time to t
12880 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65  ime when it take
12890 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65 73   on new features
128a0 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74 20  ..So to prevent 
128b0 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20 62  your code from b
128c0 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20 66  eing broken by f
128d0 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
128e0 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a 6e  ts, you should.n
128f0 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61 6e  ormally quote an
12900 79 20 69 6e 64 65 6e 74 69 66 69 65 72 20 74 68  y indentifier th
12910 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68  at is an English
12920 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20   language word, 
12930 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e  even if.you do n
12940 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e  ot have to..</p>
12950 0a 0a 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c 6f 77  ..<p>.The follow
12960 69 6e 67 20 61 72 65 20 74 68 65 20 6b 65 79 77  ing are the keyw
12970 6f 72 64 73 20 63 75 72 72 65 6e 74 6c 79 20 72  ords currently r
12980 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 53 51 4c  ecognized by SQL
12990 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ite:.</p>..<bloc
129a0 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77  kquote>.<table w
129b0 69 64 74 68 3d 22 31 30 30 25 22 20 63 6c 61 73  idth="100%" clas
129c0 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64 73 22  s="pdf_keywords"
129d0 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
129e0 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22  ="left" valign="
129f0 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22  top" width="20%"
12a00 3e 0a 7d 0a 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e  >.}..set n [llen
12a10 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
12a20 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65  t].set nCol 5.se
12a30 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24  t nRow [expr {($
12a40 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c  n+$nCol-1)/$nCol
12a50 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61  }].set i 0.forea
12a60 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64  ch word $keyword
12a70 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 5b 73  _list {.  if {[s
12a80 74 72 69 6e 67 20 69 6e 64 65 78 20 24 77 6f 72  tring index $wor
12a90 64 20 65 6e 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20  d end]=="*"} {. 
12aa0 20 20 20 73 65 74 20 77 6f 72 64 20 5b 73 74 72     set word [str
12ab0 69 6e 67 20 72 61 6e 67 65 20 24 77 6f 72 64 20  ing range $word 
12ac0 30 20 65 6e 64 2d 31 5d 0a 20 20 20 20 73 65 74  0 end-1].    set
12ad0 20 66 6f 6e 74 20 69 0a 20 20 7d 20 65 6c 73 65   font i.  } else
12ae0 20 7b 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20   {.    set font 
12af0 62 0a 20 20 7d 0a 20 20 69 66 20 7b 24 69 3d 3d  b.  }.  if {$i==
12b00 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 70 75 74  $nRow} {.    put
12b10 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69  s "</td><td vali
12b20 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e  gn=\"top\" align
12b30 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d  =\"left\" width=
12b40 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65  \"20%\">".    se
12b50 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b  t i 1.  } else {
12b60 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a  .    incr i.  }.
12b70 20 20 70 75 74 73 20 22 3c 24 66 6f 6e 74 3e 24    puts "<$font>$
12b80 77 6f 72 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e  word</$font><br>
12b90 22 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 2f 74 64  ".}..puts {.</td
12ba0 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f  ></tr></table></
12bb0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32  blockquote>..<h2
12bc0 3e 53 70 65 63 69 61 6c 20 6e 61 6d 65 73 3c 2f  >Special names</
12bd0 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h2>..<p>The foll
12be0 6f 77 69 6e 67 20 61 72 65 20 6e 6f 74 20 6b 65  owing are not ke
12bf0 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65  ywords in SQLite
12c00 2c 20 62 75 74 20 61 72 65 20 75 73 65 64 20 61  , but are used a
12c10 73 20 6e 61 6d 65 73 20 6f 66 20 0a 73 79 73 74  s names of .syst
12c20 65 6d 20 6f 62 6a 65 63 74 73 2e 20 20 54 68 65  em objects.  The
12c30 79 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 73  y can be used as
12c40 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 66   an identifier f
12c50 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 0a  or a different .
12c60 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 2e 3c  type of object.<
12c70 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12c80 20 63 6c 61 73 73 3d 22 70 64 66 5f 6b 65 79 77   class="pdf_keyw
12c90 6f 72 64 73 22 3e 3c 62 3e 0a 20 20 5f 52 4f 57  ords"><b>.  _ROW
12ca0 49 44 5f 3c 62 72 3e 0a 20 20 4d 41 49 4e 3c 62  ID_<br>.  MAIN<b
12cb0 72 3e 0a 20 20 4f 49 44 3c 62 72 3e 0a 20 20 52  r>.  OID<br>.  R
12cc0 4f 57 49 44 3c 62 72 3e 0a 20 20 53 51 4c 49 54  OWID<br>.  SQLIT
12cd0 45 5f 4d 41 53 54 45 52 3c 62 72 3e 0a 20 20 53  E_MASTER<br>.  S
12ce0 51 4c 49 54 45 5f 53 45 51 55 45 4e 43 45 3c 62  QLITE_SEQUENCE<b
12cf0 72 3e 0a 20 20 53 51 4c 49 54 45 5f 54 45 4d 50  r>.  SQLITE_TEMP
12d00 5f 4d 41 53 54 45 52 3c 62 72 3e 0a 20 20 54 45  _MASTER<br>.  TE
12d10 4d 50 3c 62 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f  MP<br>.</b></blo
12d20 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 70 75 74 73  ckquote>.}..puts
12d30 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64   {<DIV class="pd
12d40 66 5f 69 67 6e 6f 72 65 22 3e 7d 0a 66 6f 6f 74  f_ignore">}.foot
12d50 65 72 20 24 72 63 73 69 64 0a 69 66 20 7b 5b 73  er $rcsid.if {[s
12d60 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6f 75  tring length $ou
12d70 74 70 75 74 64 69 72 5d 7d 20 7b 0a 20 20 66 6f  tputdir]} {.  fo
12d80 6f 74 65 72 20 24 72 63 73 69 64 0a 7d 0a 70 75  oter $rcsid.}.pu
12d90 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a              ts {</DIV>}.