/ Hex Artifact Content
Login

Artifact a79b222f29cd94e11aee7bb0e69e133d55b03602:


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 38 31 20 32 30 30  g.tcl,v 1.81 200
0060: 35 2f 30 31 2f 31 30 20 30 36 3a 33 39 3a 35 37  5/01/10 06:39:57
0070: 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70   danielk1977 Exp
0080: 20 24 7d 0a 73 6f 75 72 63 65 20 63 6f 6d 6d 6f   $}.source commo
0090: 6e 2e 74 63 6c 0a 0a 69 66 20 7b 5b 6c 6c 65 6e  n.tcl..if {[llen
00a0: 67 74 68 20 24 61 72 67 76 5d 3e 30 7d 20 7b 0a  gth $argv]>0} {.
00b0: 20 20 73 65 74 20 6f 75 74 70 75 74 64 69 72 20    set outputdir 
00c0: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 30 5d  [lindex $argv 0]
00d0: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 73 65 74 20  .} else {.  set 
00e0: 6f 75 74 70 75 74 64 69 72 20 22 22 0a 7d 0a 0a  outputdir "".}..
00f0: 68 65 61 64 65 72 20 7b 51 75 65 72 79 20 4c 61  header {Query La
0100: 6e 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f  nguage Understoo
0110: 64 20 62 79 20 53 51 4c 69 74 65 7d 0a 70 75 74  d by SQLite}.put
0120: 73 20 7b 0a 3c 68 31 3e 53 51 4c 20 41 73 20 55  s {.<h1>SQL As U
0130: 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51 4c  nderstood By SQL
0140: 69 74 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  ite</h1>..<p>The
0150: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
0160: 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73 74  understands most
0170: 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72 64   of the standard
0180: 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20 20   SQL.language.  
0190: 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20 68  But it does <a h
01a0: 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74 6d  ref="omitted.htm
01b0: 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65 61  l">omit some fea
01c0: 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65 20  tures</a>.while 
01d0: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
01e0: 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66 65  .adding a few fe
01f0: 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f 77  atures of its ow
0200: 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65 6e  n.  This documen
0210: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64 65  t attempts to.de
0220: 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c 79  scribe precisely
0230: 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20 74   what parts of t
0240: 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  he SQL language 
0250: 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64 20  SQLite does.and 
0260: 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
0270: 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 3c 61 20  .  A list of <a 
0280: 68 72 65 66 3d 22 6c 61 6e 67 5f 6b 65 79 77 6f  href="lang_keywo
0290: 72 64 73 2e 68 74 6d 6c 22 3e 6b 65 79 77 6f 72  rds.html">keywor
02a0: 64 73 3c 2f 61 3e 20 69 73 20 0a 61 6c 73 6f 20  ds</a> is .also 
02b0: 70 72 6f 76 69 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  provided.</p>..<
02c0: 70 3e 49 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20  p>In all of the 
02d0: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
02e0: 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 20 6c 69 74  that follow, lit
02f0: 65 72 61 6c 20 74 65 78 74 20 69 73 20 73 68 6f  eral text is sho
0300: 77 6e 20 69 6e 0a 62 6f 6c 64 20 62 6c 75 65 2e  wn in.bold blue.
0310: 20 20 4e 6f 6e 2d 74 65 72 6d 69 6e 61 6c 20 73    Non-terminal s
0320: 79 6d 62 6f 6c 73 20 61 72 65 20 73 68 6f 77 6e  ymbols are shown
0330: 20 69 6e 20 69 74 61 6c 69 63 20 72 65 64 2e 20   in italic red. 
0340: 20 4f 70 65 72 61 74 6f 72 73 0a 74 68 61 74 20   Operators.that 
0350: 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  are part of the 
0360: 73 79 6e 74 61 63 74 69 63 20 6d 61 72 6b 75 70  syntactic markup
0370: 20 69 74 73 65 6c 66 20 61 72 65 20 73 68 6f 77   itself are show
0380: 6e 20 69 6e 20 62 6c 61 63 6b 20 72 6f 6d 61 6e  n in black roman
0390: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64  .</p>..<p>This d
03a0: 6f 63 75 6d 65 6e 74 20 69 73 20 6a 75 73 74 20  ocument is just 
03b0: 61 6e 20 6f 76 65 72 76 69 65 77 20 6f 66 20 74  an overview of t
03c0: 68 65 20 53 51 4c 20 73 79 6e 74 61 78 20 69 6d  he SQL syntax im
03d0: 70 6c 65 6d 65 6e 74 65 64 0a 62 79 20 53 51 4c  plemented.by SQL
03e0: 69 74 65 2e 20 20 4d 61 6e 79 20 6c 6f 77 2d 6c  ite.  Many low-l
03f0: 65 76 65 6c 20 70 72 6f 64 75 63 74 69 6f 6e 73  evel productions
0400: 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 20 20 46   are omitted.  F
0410: 6f 72 20 64 65 74 61 69 6c 65 64 20 69 6e 66 6f  or detailed info
0420: 72 6d 61 74 69 6f 6e 0a 6f 6e 20 74 68 65 20 6c  rmation.on the l
0430: 61 6e 67 75 61 67 65 20 74 68 61 74 20 53 51 4c  anguage that SQL
0440: 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 2c  ite understands,
0450: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 6f   refer to the so
0460: 75 72 63 65 20 63 6f 64 65 20 61 6e 64 0a 74 68  urce code and.th
0470: 65 20 67 72 61 6d 6d 61 72 20 66 69 6c 65 20 22  e grammar file "
0480: 70 61 72 73 65 2e 79 22 2e 3c 2f 70 3e 0a 0a 0a  parse.y".</p>...
0490: 3c 70 3e 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d  <p>SQLite implem
04a0: 65 6e 74 73 20 74 68 65 20 66 6f 6c 6c 6f 77 20  ents the follow 
04b0: 73 79 6e 74 61 78 3a 3c 2f 70 3e 0a 3c 70 3e 3c  syntax:</p>.<p><
04c0: 75 6c 3e 0a 7d 0a 0a 70 72 6f 63 20 73 6c 69 6e  ul>.}..proc slin
04d0: 6b 20 7b 6c 61 62 65 6c 7d 20 7b 0a 20 20 69 66  k {label} {.  if
04e0: 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match 
04f0: 2a 2e 68 74 6d 6c 20 24 6c 61 62 65 6c 5d 7d 20  *.html $label]} 
0500: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 24 6c 61  {.    return $la
0510: 62 65 6c 0a 20 20 7d 0a 20 20 69 66 20 7b 5b 73  bel.  }.  if {[s
0520: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $::
0530: 6f 75 74 70 75 74 64 69 72 5d 3d 3d 30 7d 20 7b  outputdir]==0} {
0540: 0a 20 20 20 20 72 65 74 75 72 6e 20 23 24 6c 61  .    return #$la
0550: 62 65 6c 0a 20 20 7d 20 65 6c 73 65 20 7b 20 0a  bel.  } else { .
0560: 20 20 20 20 72 65 74 75 72 6e 20 6c 61 6e 67 5f      return lang_
0570: 24 6c 61 62 65 6c 2e 68 74 6d 6c 0a 20 20 7d 0a  $label.html.  }.
0580: 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 73 65 63 74  }..foreach {sect
0590: 69 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e 64  ion} [lsort -ind
05a0: 65 78 20 30 20 2d 64 69 63 74 69 6f 6e 61 72 79  ex 0 -dictionary
05b0: 20 7b 0a 20 20 7b 7b 43 52 45 41 54 45 20 54 41   {.  {{CREATE TA
05c0: 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62 6c 65  BLE} createtable
05d0: 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20 49 4e 44  }.  {{CREATE IND
05e0: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 7d  EX} createindex}
05f0: 0a 20 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75  .  {VACUUM vacuu
0600: 6d 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  m}.  {{DROP TABL
0610: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0620: 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72  {{DROP INDEX} dr
0630: 6f 70 69 6e 64 65 78 7d 0a 20 20 7b 49 4e 53 45  opindex}.  {INSE
0640: 52 54 20 69 6e 73 65 72 74 7d 0a 20 20 7b 52 45  RT insert}.  {RE
0650: 50 4c 41 43 45 20 72 65 70 6c 61 63 65 7d 0a 20  PLACE replace}. 
0660: 20 7b 44 45 4c 45 54 45 20 64 65 6c 65 74 65 7d   {DELETE delete}
0670: 0a 20 20 7b 55 50 44 41 54 45 20 75 70 64 61 74  .  {UPDATE updat
0680: 65 7d 0a 20 20 7b 53 45 4c 45 43 54 20 73 65 6c  e}.  {SELECT sel
0690: 65 63 74 7d 0a 20 20 7b 63 6f 6d 6d 65 6e 74 20  ect}.  {comment 
06a0: 63 6f 6d 6d 65 6e 74 7d 0a 20 20 7b 43 4f 50 59  comment}.  {COPY
06b0: 20 63 6f 70 79 7d 0a 20 20 7b 45 58 50 4c 41 49   copy}.  {EXPLAI
06c0: 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 7b 65 78  N explain}.  {ex
06d0: 70 72 65 73 73 69 6f 6e 20 65 78 70 72 7d 0a 20  pression expr}. 
06e0: 20 7b 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43   {{BEGIN TRANSAC
06f0: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
0700: 6e 7d 0a 20 20 7b 7b 43 4f 4d 4d 49 54 20 54 52  n}.  {{COMMIT TR
0710: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
0720: 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 45 4e 44 20  action}.  {{END 
0730: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0740: 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 52 4f  nsaction}.  {{RO
0750: 4c 4c 42 41 43 4b 20 54 52 41 4e 53 41 43 54 49  LLBACK TRANSACTI
0760: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d  ON} transaction}
0770: 0a 20 20 7b 50 52 41 47 4d 41 20 70 72 61 67 6d  .  {PRAGMA pragm
0780: 61 2e 68 74 6d 6c 7d 0a 20 20 7b 7b 4f 4e 20 43  a.html}.  {{ON C
0790: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20  ONFLICT clause} 
07a0: 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 7b 7b 43 52  conflict}.  {{CR
07b0: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
07c0: 65 76 69 65 77 7d 0a 20 20 7b 7b 44 52 4f 50 20  eview}.  {{DROP 
07d0: 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 7d 0a  VIEW} dropview}.
07e0: 20 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47    {{CREATE TRIGG
07f0: 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65  ER} createtrigge
0800: 72 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 52 49 47  r}.  {{DROP TRIG
0810: 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
0820: 7d 0a 20 20 7b 7b 41 54 54 41 43 48 20 44 41 54  }.  {{ATTACH DAT
0830: 41 42 41 53 45 7d 20 61 74 74 61 63 68 7d 0a 20  ABASE} attach}. 
0840: 20 7b 7b 44 45 54 41 43 48 20 44 41 54 41 42 41   {{DETACH DATABA
0850: 53 45 7d 20 64 65 74 61 63 68 7d 0a 20 20 7b 52  SE} detach}.  {R
0860: 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a  EINDEX reindex}.
0870: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
0880: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 7d 5d 20   altertable}.}] 
0890: 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74  {.  foreach {s_t
08a0: 69 74 6c 65 20 73 5f 74 61 67 7d 20 24 73 65 63  itle s_tag} $sec
08b0: 74 69 6f 6e 20 7b 7d 0a 20 20 70 75 74 73 20 22  tion {}.  puts "
08c0: 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22 5b 73  <li><a href=\"[s
08d0: 6c 69 6e 6b 20 24 73 5f 74 61 67 5d 5c 22 3e 24  link $s_tag]\">$
08e0: 73 5f 74 69 74 6c 65 3c 2f 61 3e 3c 2f 6c 69 3e  s_title</a></li>
08f0: 22 0a 7d 0a 70 75 74 73 20 7b 3c 2f 75 6c 3e 3c  ".}.puts {</ul><
0900: 2f 70 3e 0a 0a 3c 70 3e 44 65 74 61 69 6c 73 20  /p>..<p>Details 
0910: 6f 6e 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  on the implement
0920: 61 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 63 6f  ation of each co
0930: 6d 6d 61 6e 64 20 61 72 65 20 70 72 6f 76 69 64  mmand are provid
0940: 65 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c  ed in.the sequel
0950: 2e 3c 2f 70 3e 0a 7d 0a 0a 70 72 6f 63 20 4f 70  .</p>.}..proc Op
0960: 65 72 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a  erator {name} {.
0970: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0980: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0990: 22 3e 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69  "><big>$name</bi
09a0: 67 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f  g></font>".}.pro
09b0: 63 20 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e  c Nonterminal {n
09c0: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
09d0: 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  "<i><font color=
09e0: 5c 22 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d  \"#ff3434\">$nam
09f0: 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a  e</font></i>".}.
0a00: 70 72 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61  proc Keyword {na
0a10: 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22  me} {.  return "
0a20: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32  <font color=\"#2
0a30: 63 32 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66  c2cf0\">$name</f
0a40: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61  ont>".}.proc Exa
0a50: 6d 70 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20  mple {text} {.  
0a60: 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74  puts "<blockquot
0a70: 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72  e><pre>$text</pr
0a80: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22  e></blockquote>"
0a90: 0a 7d 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e  .}..proc Section
0aa0: 20 7b 6e 61 6d 65 20 6c 61 62 65 6c 7d 20 7b 0a   {name label} {.
0ab0: 20 20 67 6c 6f 62 61 6c 20 6f 75 74 70 75 74 64    global outputd
0ac0: 69 72 0a 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e  ir..  if {[strin
0ad0: 67 20 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74  g length $output
0ae0: 64 69 72 5d 21 3d 30 7d 20 7b 0a 20 20 20 20 69  dir]!=0} {.    i
0af0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66  f {[llength [inf
0b00: 6f 20 63 6f 6d 6d 61 6e 64 73 20 70 75 74 73 5f  o commands puts_
0b10: 73 74 61 6e 64 61 72 64 5d 5d 3e 30 7d 20 7b 0a  standard]]>0} {.
0b20: 20 20 20 20 20 20 66 6f 6f 74 65 72 20 24 3a 3a        footer $::
0b30: 72 63 73 69 64 0a 20 20 20 20 7d 0a 0a 20 20 20  rcsid.    }..   
0b40: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
0b50: 67 74 68 20 24 6c 61 62 65 6c 5d 3e 30 7d 20 7b  gth $label]>0} {
0b60: 0a 20 20 20 20 20 20 72 65 6e 61 6d 65 20 70 75  .      rename pu
0b70: 74 73 20 70 75 74 73 5f 73 74 61 6e 64 61 72 64  ts puts_standard
0b80: 0a 20 20 20 20 20 20 70 72 6f 63 20 70 75 74 73  .      proc puts
0b90: 20 7b 73 74 72 7d 20 7b 0a 20 20 20 20 20 20 20   {str} {.       
0ba0: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 68 72   regsub -all {hr
0bb0: 65 66 3d 22 23 28 5b 61 2d 7a 5d 2b 29 22 7d 20  ef="#([a-z]+)"} 
0bc0: 24 73 74 72 20 7b 68 72 65 66 3d 22 6c 61 6e 67  $str {href="lang
0bd0: 5f 5c 31 2e 68 74 6d 6c 22 7d 20 73 74 72 0a 20  _\1.html"} str. 
0be0: 20 20 20 20 20 20 20 70 75 74 73 5f 73 74 61 6e         puts_stan
0bf0: 64 61 72 64 20 24 3a 3a 73 65 63 74 69 6f 6e 5f  dard $::section_
0c00: 66 69 6c 65 20 24 73 74 72 0a 20 20 20 20 20 20  file $str.      
0c10: 7d 0a 20 20 20 20 20 20 72 65 6e 61 6d 65 20 66  }.      rename f
0c20: 6f 6f 74 65 72 20 66 6f 6f 74 65 72 5f 73 74 61  ooter footer_sta
0c30: 6e 64 61 72 64 0a 20 20 20 20 20 20 70 72 6f 63  ndard.      proc
0c40: 20 66 6f 6f 74 65 72 20 7b 69 64 7d 20 7b 0a 20   footer {id} {. 
0c50: 20 20 20 20 20 20 20 66 6f 6f 74 65 72 5f 73 74         footer_st
0c60: 61 6e 64 61 72 64 20 24 69 64 0a 20 20 20 20 20  andard $id.     
0c70: 20 20 20 72 65 6e 61 6d 65 20 66 6f 6f 74 65 72     rename footer
0c80: 20 22 22 0a 20 20 20 20 20 20 20 20 72 65 6e 61   "".        rena
0c90: 6d 65 20 70 75 74 73 20 22 22 0a 20 20 20 20 20  me puts "".     
0ca0: 20 20 20 72 65 6e 61 6d 65 20 70 75 74 73 5f 73     rename puts_s
0cb0: 74 61 6e 64 61 72 64 20 70 75 74 73 0a 20 20 20  tandard puts.   
0cc0: 20 20 20 20 20 72 65 6e 61 6d 65 20 66 6f 6f 74       rename foot
0cd0: 65 72 5f 73 74 61 6e 64 61 72 64 20 66 6f 6f 74  er_standard foot
0ce0: 65 72 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20  er.      } .    
0cf0: 20 20 73 65 74 20 3a 3a 73 65 63 74 69 6f 6e 5f    set ::section_
0d00: 66 69 6c 65 20 5b 6f 70 65 6e 20 5b 66 69 6c 65  file [open [file
0d10: 20 6a 6f 69 6e 20 24 6f 75 74 70 75 74 64 69 72   join $outputdir
0d20: 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d   lang_$label.htm
0d30: 6c 5d 20 77 5d 0a 20 20 20 20 20 20 68 65 61 64  l] w].      head
0d40: 65 72 20 22 51 75 65 72 79 20 4c 61 6e 67 75 61  er "Query Langua
0d50: 67 65 20 55 6e 64 65 72 73 74 6f 6f 64 20 62 79  ge Understood by
0d60: 20 53 51 4c 69 74 65 3a 20 24 6e 61 6d 65 22 0a   SQLite: $name".
0d70: 20 20 20 20 20 20 70 75 74 73 20 22 3c 68 31 3e        puts "<h1>
0d80: 53 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f  SQL As Understoo
0d90: 64 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e  d By SQLite</h1>
0da0: 22 0a 20 20 20 20 20 20 70 75 74 73 20 22 3c 61  ".      puts "<a
0db0: 20 68 72 65 66 3d 5c 22 6c 61 6e 67 2e 68 74 6d   href=\"lang.htm
0dc0: 6c 5c 22 3e 5c 5b 43 6f 6e 74 65 6e 74 73 5c 5d  l\">\[Contents\]
0dd0: 3c 2f 61 3e 22 0a 20 20 20 20 20 20 70 75 74 73  </a>".      puts
0de0: 20 22 3c 68 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e   "<h2>$name</h2>
0df0: 22 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 0a  ".      return .
0e00: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 75 74 73      }.  }.  puts
0e10: 20 22 5c 6e 3c 68 72 20 2f 3e 22 0a 20 20 69 66   "\n<hr />".  if
0e20: 20 7b 24 6c 61 62 65 6c 21 3d 22 22 7d 20 7b 0a   {$label!=""} {.
0e30: 20 20 20 20 70 75 74 73 20 22 3c 61 20 6e 61 6d      puts "<a nam
0e40: 65 3d 5c 22 24 6c 61 62 65 6c 5c 22 3e 3c 2f 61  e=\"$label\"></a
0e50: 3e 22 0a 20 20 7d 0a 20 20 70 75 74 73 20 22 3c  >".  }.  puts "<
0e60: 68 31 3e 24 6e 61 6d 65 3c 2f 68 31 3e 5c 6e 22  h1>$name</h1>\n"
0e70: 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54  .}..Section {ALT
0e80: 45 52 20 54 41 42 4c 45 7d 20 61 6c 74 65 72 74  ER TABLE} altert
0e90: 61 62 6c 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71  able..Syntax {sq
0ea0: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 41  l-statement} {.A
0eb0: 4c 54 45 52 20 54 41 42 4c 45 20 5b 3c 64 61 74  LTER TABLE [<dat
0ec0: 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c  abase-name> .] <
0ed0: 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 52 45 4e 41  table-name> RENA
0ee0: 4d 45 20 54 4f 20 3c 6e 65 77 2d 74 61 62 6c 65  ME TO <new-table
0ef0: 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b  -name>.}..puts {
0f00: 0a 3c 70 3e 53 51 4c 69 74 65 27 73 20 76 65 72  .<p>SQLite's ver
0f10: 73 69 6f 6e 20 6f 66 20 74 68 65 20 41 4c 54 45  sion of the ALTE
0f20: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
0f30: 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20  allows the user 
0f40: 74 6f 20 0a 72 65 6e 61 6d 65 20 61 6e 20 65 78  to .rename an ex
0f50: 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 54 68  isting table. Th
0f60: 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69  e table identifi
0f70: 65 64 20 62 79 20 0a 3c 69 3e 5b 64 61 74 61 62  ed by .<i>[datab
0f80: 61 73 65 2d 6e 61 6d 65 2e 5d 74 61 62 6c 65 2d  ase-name.]table-
0f90: 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 72 65 6e 61  name</i> is rena
0fa0: 6d 65 64 20 74 6f 0a 3c 69 3e 6e 65 77 2d 74 61  med to.<i>new-ta
0fb0: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 54 68  ble-name</i>. Th
0fc0: 69 73 20 63 6f 6d 6d 61 6e 64 20 63 61 6e 6e 6f  is command canno
0fd0: 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76  t be used to mov
0fe0: 65 20 61 0a 74 61 62 6c 65 20 62 65 74 77 65 65  e a.table betwee
0ff0: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1000: 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65  ases, only to re
1010: 6e 61 6d 65 20 61 20 74 61 62 6c 65 20 77 69 74  name a table wit
1020: 68 69 6e 0a 74 68 65 20 73 61 6d 65 20 64 61 74  hin.the same dat
1030: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  abase.</p>..<p>I
1040: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
1050: 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72  g renamed has tr
1060: 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65  iggers or indice
1070: 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72 65  s, then these re
1080: 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f  main.attached to
1090: 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65 72   the table after
10a0: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e   it has been ren
10b0: 61 6d 65 64 2e 20 48 6f 77 65 76 65 72 2c 20 69  amed. However, i
10c0: 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e 79 20  f there are.any 
10d0: 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e 73  view definitions
10e0: 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  , or statements 
10f0: 65 78 65 63 75 74 65 64 20 62 79 20 74 72 69 67  executed by trig
1100: 67 65 72 73 20 74 68 61 74 20 72 65 66 65 72 20  gers that refer 
1110: 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62 65 69  to.the table bei
1120: 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 73  ng renamed, thes
1130: 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61  e are not automa
1140: 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69 65 64  tically modified
1150: 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 0a   to use the new.
1160: 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66 20 74  table name. If t
1170: 68 69 73 20 69 73 20 72 65 71 75 69 72 65 64 2c  his is required,
1180: 20 74 68 65 20 74 72 69 67 67 65 72 73 20 6f 72   the triggers or
1190: 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
11a0: 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70 70 65  s must be.droppe
11b0: 64 20 61 6e 64 20 72 65 63 72 65 61 74 65 64 20  d and recreated 
11c0: 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20 74  to use the new t
11d0: 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68 61 6e  able name by han
11e0: 64 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74 69  d..</p>.}..Secti
11f0: 6f 6e 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  on {ATTACH DATAB
1200: 41 53 45 7d 20 61 74 74 61 63 68 0a 0a 53 79 6e  ASE} attach..Syn
1210: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
1220: 6e 74 7d 20 7b 0a 41 54 54 41 43 48 20 5b 44 41  nt} {.ATTACH [DA
1230: 54 41 42 41 53 45 5d 20 3c 64 61 74 61 62 61 73  TABASE] <databas
1240: 65 2d 66 69 6c 65 6e 61 6d 65 3e 20 41 53 20 3c  e-filename> AS <
1250: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 0a 7d  database-name>.}
1260: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
1270: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20  ATTACH DATABASE 
1280: 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61  statement adds a
1290: 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
12a0: 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74  abase .file to t
12b0: 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62  he current datab
12c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
12d0: 20 49 66 20 74 68 65 20 66 69 6c 65 6e 61 6d 65   If the filename
12e0: 20 63 6f 6e 74 61 69 6e 73 20 0a 70 75 6e 63 74   contains .punct
12f0: 75 61 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72  uation character
1300: 73 20 69 74 20 6d 75 73 74 20 62 65 20 71 75 6f  s it must be quo
1310: 74 65 64 2e 20 20 54 68 65 20 6e 61 6d 65 73 20  ted.  The names 
1320: 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d  'main' and .'tem
1330: 70 27 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  p' refer to the 
1340: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e  main database an
1350: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  d the database u
1360: 73 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61  sed for .tempora
1370: 72 79 20 74 61 62 6c 65 73 2e 20 20 54 68 65 73  ry tables.  Thes
1380: 65 20 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 61  e cannot be deta
1390: 63 68 65 64 2e 20 20 41 74 74 61 63 68 65 64 20  ched.  Attached 
13a0: 64 61 74 61 62 61 73 65 73 20 0a 61 72 65 20 72  databases .are r
13b0: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
13c0: 20 3c 61 20 68 72 65 66 3d 22 23 64 65 74 61 63   <a href="#detac
13d0: 68 22 3e 44 45 54 41 43 48 20 44 41 54 41 42 41  h">DETACH DATABA
13e0: 53 45 3c 2f 61 3e 20 0a 73 74 61 74 65 6d 65 6e  SE</a> .statemen
13f0: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63  t.</p>..<p>You c
1400: 61 6e 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 64  an read from and
1410: 20 77 72 69 74 65 20 74 6f 20 61 6e 20 61 74 74   write to an att
1420: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 61  ached database a
1430: 6e 64 20 79 6f 75 0a 63 61 6e 20 6d 6f 64 69 66  nd you.can modif
1440: 79 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20  y the schema of 
1450: 74 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74  the attached dat
1460: 61 62 61 73 65 2e 20 20 54 68 69 73 20 69 73 20  abase.  This is 
1470: 61 20 6e 65 77 0a 66 65 61 74 75 72 65 20 6f 66  a new.feature of
1480: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1490: 33 2e 30 2e 20 20 49 6e 20 53 51 4c 69 74 65 20  3.0.  In SQLite 
14a0: 32 2e 38 2c 20 73 63 68 65 6d 61 20 63 68 61 6e  2.8, schema chan
14b0: 67 65 73 0a 74 6f 20 61 74 74 61 63 68 65 64 20  ges.to attached 
14c0: 64 61 74 61 62 61 73 65 73 20 77 65 72 65 20 6e  databases were n
14d0: 6f 74 20 61 6c 6c 6f 77 65 64 2e 3c 2f 70 3e 0a  ot allowed.</p>.
14e0: 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e 6f 74 20 63  .<p>You cannot c
14f0: 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  reate a new tabl
1500: 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
1510: 6e 61 6d 65 20 61 73 20 61 20 74 61 62 6c 65 20  name as a table 
1520: 69 6e 20 0a 61 6e 20 61 74 74 61 63 68 65 64 20  in .an attached 
1530: 64 61 74 61 62 61 73 65 2c 20 62 75 74 20 79 6f  database, but yo
1540: 75 20 63 61 6e 20 61 74 74 61 63 68 20 61 20 64  u can attach a d
1550: 61 74 61 62 61 73 65 20 77 68 69 63 68 20 63 6f  atabase which co
1560: 6e 74 61 69 6e 73 0a 74 61 62 6c 65 73 20 77 68  ntains.tables wh
1570: 6f 73 65 20 6e 61 6d 65 73 20 61 72 65 20 64 75  ose names are du
1580: 70 6c 69 63 61 74 65 73 20 6f 66 20 74 61 62 6c  plicates of tabl
1590: 65 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  es in the main d
15a0: 61 74 61 62 61 73 65 2e 20 20 49 74 20 69 73 20  atabase.  It is 
15b0: 0a 61 6c 73 6f 20 70 65 72 6d 69 73 73 69 62 6c  .also permissibl
15c0: 65 20 74 6f 20 61 74 74 61 63 68 20 74 68 65 20  e to attach the 
15d0: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69  same database fi
15e0: 6c 65 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  le multiple time
15f0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 61 62 6c 65  s.</p>..<p>Table
1600: 73 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  s in an attached
1610: 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65   database can be
1620: 20 72 65 66 65 72 72 65 64 20 74 6f 20 75 73 69   referred to usi
1630: 6e 67 20 74 68 65 20 73 79 6e 74 61 78 20 0a 3c  ng the syntax .<
1640: 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e  i>database-name.
1650: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20  table-name</i>. 
1660: 20 49 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   If an attached 
1670: 74 61 62 6c 65 20 64 6f 65 73 6e 27 74 20 68 61  table doesn't ha
1680: 76 65 20 0a 61 20 64 75 70 6c 69 63 61 74 65 20  ve .a duplicate 
1690: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
16a0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
16b0: 20 69 74 20 64 6f 65 73 6e 27 74 20 72 65 71 75   it doesn't requ
16c0: 69 72 65 20 61 20 0a 64 61 74 61 62 61 73 65 20  ire a .database 
16d0: 6e 61 6d 65 20 70 72 65 66 69 78 2e 20 20 57 68  name prefix.  Wh
16e0: 65 6e 20 61 20 64 61 74 61 62 61 73 65 20 69 73  en a database is
16f0: 20 61 74 74 61 63 68 65 64 2c 20 61 6c 6c 20 6f   attached, all o
1700: 66 20 69 74 73 20 0a 74 61 62 6c 65 73 20 77 68  f its .tables wh
1710: 69 63 68 20 64 6f 6e 27 74 20 68 61 76 65 20 64  ich don't have d
1720: 75 70 6c 69 63 61 74 65 20 6e 61 6d 65 73 20 62  uplicate names b
1730: 65 63 6f 6d 65 20 74 68 65 20 27 64 65 66 61 75  ecome the 'defau
1740: 6c 74 27 20 74 61 62 6c 65 0a 6f 66 20 74 68 61  lt' table.of tha
1750: 74 20 6e 61 6d 65 2e 20 20 41 6e 79 20 74 61 62  t name.  Any tab
1760: 6c 65 73 20 6f 66 20 74 68 61 74 20 6e 61 6d 65  les of that name
1770: 20 61 74 74 61 63 68 65 64 20 61 66 74 65 72 77   attached afterw
1780: 61 72 64 73 20 72 65 71 75 69 72 65 20 74 68 65  ards require the
1790: 20 74 61 62 6c 65 20 0a 70 72 65 66 69 78 2e 20   table .prefix. 
17a0: 49 66 20 74 68 65 20 27 64 65 66 61 75 6c 74 27  If the 'default'
17b0: 20 74 61 62 6c 65 20 6f 66 20 61 20 67 69 76 65   table of a give
17c0: 6e 20 6e 61 6d 65 20 69 73 20 64 65 74 61 63 68  n name is detach
17d0: 65 64 2c 20 74 68 65 6e 20 0a 74 68 65 20 6c 61  ed, then .the la
17e0: 73 74 20 74 61 62 6c 65 20 6f 66 20 74 68 61 74  st table of that
17f0: 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20 62   name attached b
1800: 65 63 6f 6d 65 73 20 74 68 65 20 6e 65 77 20 64  ecomes the new d
1810: 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  efault.</p>..<p>
1820: 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e  .Transactions in
1830: 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
1840: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1850: 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a  ses are atomic,.
1860: 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68  assuming that th
1870: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1880: 69 73 20 6e 6f 74 20 22 3a 6d 65 6d 6f 72 79 3a  is not ":memory:
1890: 22 2e 20 20 49 66 20 74 68 65 20 6d 61 69 6e 0a  ".  If the main.
18a0: 64 61 74 61 62 61 73 65 20 69 73 20 22 3a 6d 65  database is ":me
18b0: 6d 6f 72 79 3a 22 20 74 68 65 6e 20 0a 74 72 61  mory:" then .tra
18c0: 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69 6e  nsactions contin
18d0: 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63 20  ue to be atomic 
18e0: 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64 69  within each indi
18f0: 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65 20  vidual.database 
1900: 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68 65  file. But if the
1910: 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20 63   host computer c
1920: 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d 69  rashes in the mi
1930: 64 64 6c 65 0a 6f 66 20 61 20 43 4f 4d 4d 49 54  ddle.of a COMMIT
1940: 20 77 68 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f   where two or mo
1950: 72 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  re database file
1960: 73 20 61 72 65 20 75 70 64 61 74 65 64 2c 0a 73  s are updated,.s
1970: 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20 66 69 6c  ome of those fil
1980: 65 73 20 6d 69 67 68 74 20 67 65 74 20 74 68 65  es might get the
1990: 20 63 68 61 6e 67 65 73 20 77 68 65 72 65 20 6f   changes where o
19a0: 74 68 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e  thers.might not.
19b0: 0a 41 74 6f 6d 69 63 20 63 6f 6d 6d 69 74 20 6f  .Atomic commit o
19c0: 66 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  f attached datab
19d0: 61 73 65 73 20 69 73 20 61 20 6e 65 77 20 66 65  ases is a new fe
19e0: 61 74 75 72 65 20 6f 66 20 53 51 4c 69 74 65 20  ature of SQLite 
19f0: 76 65 72 73 69 6f 6e 20 33 2e 30 2e 0a 49 6e 20  version 3.0..In 
1a00: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 32  SQLite version 2
1a10: 2e 38 2c 20 61 6c 6c 20 63 6f 6d 6d 69 74 73 20  .8, all commits 
1a20: 74 6f 20 61 74 74 61 63 68 65 64 20 64 61 74 61  to attached data
1a30: 62 61 73 65 73 20 62 65 68 61 76 65 64 20 61 73  bases behaved as
1a40: 20 69 66 0a 74 68 65 20 6d 61 69 6e 20 64 61 74   if.the main dat
1a50: 61 62 61 73 65 20 77 65 72 65 20 22 3a 6d 65 6d  abase were ":mem
1a60: 6f 72 79 3a 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ory:"..</p>..<p>
1a70: 54 68 65 72 65 20 69 73 20 61 20 63 6f 6d 70 69  There is a compi
1a80: 6c 65 2d 74 69 6d 65 20 6c 69 6d 69 74 20 6f 66  le-time limit of
1a90: 20 31 30 20 61 74 74 61 63 68 65 64 20 64 61 74   10 attached dat
1aa0: 61 62 61 73 65 20 66 69 6c 65 73 2e 3c 2f 70 3e  abase files.</p>
1ab0: 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 42 45  .}...Section {BE
1ac0: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  GIN TRANSACTION}
1ad0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 0a 53 79   transaction..Sy
1ae0: 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
1af0: 65 6e 74 7d 20 7b 0a 42 45 47 49 4e 20 5b 20 44  ent} {.BEGIN [ D
1b00: 45 46 45 52 52 45 44 20 7c 20 49 4d 4d 45 44 49  EFERRED | IMMEDI
1b10: 41 54 45 20 7c 20 45 58 43 4c 55 53 49 56 45 20  ATE | EXCLUSIVE 
1b20: 5d 20 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b  ] [TRANSACTION [
1b30: 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61  <name>]].}.Synta
1b40: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
1b50: 7d 20 7b 0a 45 4e 44 20 5b 54 52 41 4e 53 41 43  } {.END [TRANSAC
1b60: 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d  TION [<name>]].}
1b70: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61  .Syntax {sql-sta
1b80: 74 65 6d 65 6e 74 7d 20 7b 0a 43 4f 4d 4d 49 54  tement} {.COMMIT
1b90: 20 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c   [TRANSACTION [<
1ba0: 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78  name>]].}.Syntax
1bb0: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
1bc0: 20 7b 0a 52 4f 4c 4c 42 41 43 4b 20 5b 54 52 41   {.ROLLBACK [TRA
1bd0: 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e  NSACTION [<name>
1be0: 5d 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  ]].}..puts {.<p>
1bf0: 42 65 67 69 6e 6e 69 6e 67 20 69 6e 20 76 65 72  Beginning in ver
1c00: 73 69 6f 6e 20 32 2e 30 2c 20 53 51 4c 69 74 65  sion 2.0, SQLite
1c10: 20 73 75 70 70 6f 72 74 73 20 74 72 61 6e 73 61   supports transa
1c20: 63 74 69 6f 6e 73 20 77 69 74 68 0a 72 6f 6c 6c  ctions with.roll
1c30: 62 61 63 6b 20 61 6e 64 20 61 74 6f 6d 69 63 20  back and atomic 
1c40: 63 6f 6d 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  commit.</p>..<p>
1c50: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 74 72 61  The optional tra
1c60: 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 20 69 73  nsaction name is
1c70: 20 69 67 6e 6f 72 65 64 2e 20 53 51 4c 69 74 65   ignored. SQLite
1c80: 20 63 75 72 72 65 6e 74 6c 79 20 0a 64 6f 65 73   currently .does
1c90: 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 65 73 74 65   not allow neste
1ca0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 3c  d transactions.<
1cb0: 2f 70 3e 0a 0a 3c 70 3e 0a 4e 6f 20 63 68 61 6e  /p>..<p>.No chan
1cc0: 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
1cd0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1ce0: 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20  except within a 
1cf0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 41 6e 79  transaction..Any
1d00: 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68   command that ch
1d10: 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61  anges the databa
1d20: 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61  se (basically, a
1d30: 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f  ny SQL command.o
1d40: 74 68 65 72 20 74 68 61 6e 20 53 45 4c 45 43 54  ther than SELECT
1d50: 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  ) will automatic
1d60: 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61  ally start a tra
1d70: 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20  nsaction if.one 
1d80: 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69  is not already i
1d90: 6e 20 65 66 66 65 63 74 2e 20 20 41 75 74 6f 6d  n effect.  Autom
1da0: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64  atically started
1db0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72   transactions.ar
1dc0: 65 20 63 6f 6d 6d 69 74 74 65 64 20 61 74 20 74  e committed at t
1dd0: 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e 20 6f 66  he conclusion of
1de0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 0a 3c 2f   the command..</
1df0: 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74  p>..<p>.Transact
1e00: 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72  ions can be star
1e10: 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69  ted manually usi
1e20: 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d  ng the BEGIN.com
1e30: 6d 61 6e 64 2e 20 20 53 75 63 68 20 74 72 61 6e  mand.  Such tran
1e40: 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79  sactions usually
1e50: 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74   persist until t
1e60: 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f  he next.COMMIT o
1e70: 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  r ROLLBACK comma
1e80: 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73  nd.  But a trans
1e90: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f  action will also
1ea0: 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68   .ROLLBACK if th
1eb0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
1ec0: 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72  osed or if an er
1ed0: 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74  ror occurs.and t
1ee0: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66  he ROLLBACK conf
1ef0: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1f00: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
1f10: 63 69 66 69 65 64 2e 0a 53 65 65 20 74 68 65 20  cified..See the 
1f20: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
1f30: 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 63   the <a href="#c
1f40: 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46  onflict">ON CONF
1f50: 4c 49 43 54 3c 2f 61 3e 0a 63 6c 61 75 73 65 20  LICT</a>.clause 
1f60: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
1f70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1f80: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f   the ROLLBACK.co
1f90: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1fa0: 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70  n algorithm..</p
1fb0: 3e 0a 0a 3c 70 3e 0a 49 6e 20 53 51 4c 69 74 65  >..<p>.In SQLite
1fc0: 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e 38 20 61   version 3.0.8 a
1fd0: 6e 64 20 6c 61 74 65 72 2c 20 74 72 61 6e 73 61  nd later, transa
1fe0: 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65  ctions can be de
1ff0: 66 65 72 72 65 64 2c 0a 69 6d 6d 65 64 69 61 74  ferred,.immediat
2000: 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e  e, or exclusive.
2010: 20 20 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73    Deferred means
2020: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
2030: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
2040: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
2050: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
2060: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
2070: 2e 20 20 54 68 75 73 20 77 69 74 68 20 61 0a 64  .  Thus with a.d
2080: 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74  eferred transact
2090: 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73  ion, the BEGIN s
20a0: 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20  tatement itself 
20b0: 64 6f 65 73 20 6e 6f 74 68 69 6e 67 2e 20 20 4c  does nothing.  L
20c0: 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71  ocks.are not acq
20d0: 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20  uired until the 
20e0: 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77 72  first read or wr
20f0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ite operation.  
2100: 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f  The first read.o
2110: 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74  peration against
2120: 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65 61   a database crea
2130: 74 65 73 20 61 20 53 48 41 52 45 44 20 6c 6f 63  tes a SHARED loc
2140: 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a  k and the first.
2150: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20  write operation 
2160: 63 72 65 61 74 65 73 20 61 20 52 45 53 45 52 56  creates a RESERV
2170: 45 44 20 6c 6f 63 6b 2e 20 20 20 42 65 63 61 75  ED lock.   Becau
2180: 73 65 20 74 68 65 20 61 63 71 75 69 73 69 74 69  se the acquisiti
2190: 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64  on of.locks is d
21a0: 65 66 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68  eferred until th
21b0: 65 79 20 61 72 65 20 6e 65 65 64 65 64 2c 20 69  ey are needed, i
21c0: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
21d0: 61 74 20 61 6e 6f 74 68 65 72 0a 74 68 72 65 61  at another.threa
21e0: 64 20 6f 72 20 70 72 6f 63 65 73 73 20 63 6f 75  d or process cou
21f0: 6c 64 20 63 72 65 61 74 65 20 61 20 73 65 70 61  ld create a sepa
2200: 72 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rate transaction
2210: 20 61 6e 64 20 77 72 69 74 65 20 74 6f 0a 74 68   and write to.th
2220: 65 20 64 61 74 61 62 61 73 65 20 61 66 74 65 72  e database after
2230: 20 74 68 65 20 42 45 47 49 4e 20 6f 6e 20 74 68   the BEGIN on th
2240: 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64  e current thread
2250: 20 68 61 73 20 65 78 65 63 75 74 65 64 2e 0a 49   has executed..I
2260: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
2270: 6e 20 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20  n is immediate, 
2280: 74 68 65 6e 20 52 45 53 45 52 56 45 44 20 6c 6f  then RESERVED lo
2290: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
22a0: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
22b0: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
22c0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
22d0: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
22e0: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
22f0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
2300: 62 65 20 75 73 65 64 2e 20 20 41 66 74 65 72 20  be used.  After 
2310: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
2320: 45 2c 20 79 6f 75 20 61 72 65 20 67 75 61 72 61  E, you are guara
2330: 6e 74 65 65 64 20 74 68 61 74 0a 6e 6f 20 6f 74  nteed that.no ot
2340: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
2350: 6f 63 65 73 73 20 77 69 6c 6c 20 62 65 20 61 62  ocess will be ab
2360: 6c 65 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74  le to write to t
2370: 68 65 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64  he database or.d
2380: 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49  o a BEGIN IMMEDI
2390: 41 54 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43  ATE or BEGIN EXC
23a0: 4c 55 53 49 56 45 2e 20 20 4f 74 68 65 72 20 70  LUSIVE.  Other p
23b0: 72 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e  rocesses can con
23c0: 74 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72  tinue.to read fr
23d0: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  om the database,
23e0: 20 68 6f 77 65 76 65 72 2e 20 20 41 6e 20 65 78   however.  An ex
23f0: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
2400: 69 6f 6e 20 63 61 75 73 65 73 0a 45 58 43 4c 55  ion causes.EXCLU
2410: 53 49 56 45 20 6c 6f 63 6b 73 20 74 6f 20 62 65  SIVE locks to be
2420: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
2430: 20 64 61 74 61 62 61 73 65 73 2e 20 20 41 66 74   databases.  Aft
2440: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
2450: 53 49 56 45 2c 20 79 6f 75 20 61 72 65 20 67 75  SIVE, you are gu
2460: 61 72 61 6e 74 65 65 64 20 74 68 61 74 20 6e 6f  aranteed that no
2470: 20 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72   other thread or
2480: 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 0a 62 65   process will.be
2490: 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20 6f 72   able to read or
24a0: 20 77 72 69 74 65 20 74 68 65 20 64 61 74 61 62   write the datab
24b0: 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 74 72  ase until the tr
24c0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d  ansaction is.com
24d0: 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  plete..</p>..<p>
24e0: 0a 41 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  .A description o
24f0: 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  f the meaning of
2500: 20 53 48 41 52 45 44 2c 20 52 45 53 45 52 56 45   SHARED, RESERVE
2510: 44 2c 20 61 6e 64 20 45 58 43 4c 55 53 49 56 45  D, and EXCLUSIVE
2520: 20 6c 6f 63 6b 73 0a 69 73 20 61 76 61 69 6c 61   locks.is availa
2530: 62 6c 65 20 3c 61 20 68 72 65 66 3d 22 6c 6f 63  ble <a href="loc
2540: 6b 69 6e 67 76 33 2e 68 74 6d 6c 22 3e 73 65 70  kingv3.html">sep
2550: 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 0a 3c 2f 70  arately</a>..</p
2560: 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 65 66 61 75  >..<p>.The defau
2570: 6c 74 20 62 65 68 61 76 69 6f 72 20 66 6f 72 20  lt behavior for 
2580: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
2590: 2e 30 2e 38 20 69 73 20 61 0a 64 65 66 65 72 72  .0.8 is a.deferr
25a0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  ed transaction. 
25b0: 20 46 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73   For SQLite vers
25c0: 69 6f 6e 20 33 2e 30 2e 30 20 74 68 72 6f 75 67  ion 3.0.0 throug
25d0: 68 20 33 2e 30 2e 37 2c 0a 64 65 66 65 72 72 65  h 3.0.7,.deferre
25e0: 64 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b 69  d is the only ki
25f0: 6e 64 20 6f 66 20 74 72 61 6e 73 61 63 74 69 6f  nd of transactio
2600: 6e 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 46 6f  n available.  Fo
2610: 72 20 53 51 4c 69 74 65 0a 76 65 72 73 69 6f 6e  r SQLite.version
2620: 20 32 2e 38 20 61 6e 64 20 65 61 72 6c 69 65 72   2.8 and earlier
2630: 2c 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f  , all transactio
2640: 6e 73 20 61 72 65 20 65 78 63 6c 75 73 69 76 65  ns are exclusive
2650: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
2660: 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 64  COMMIT command d
2670: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
2680: 20 70 65 72 66 6f 72 6d 20 61 20 63 6f 6d 6d 69   perform a commi
2690: 74 20 75 6e 74 69 6c 20 61 6c 6c 0a 70 65 6e 64  t until all.pend
26a0: 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  ing SQL commands
26b0: 20 66 69 6e 69 73 68 2e 20 20 54 68 75 73 20 69   finish.  Thus i
26c0: 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 53 45  f two or more SE
26d0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 0a  LECT statements.
26e0: 61 72 65 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  are in the middl
26f0: 65 20 6f 66 20 70 72 6f 63 65 73 73 69 6e 67 20  e of processing 
2700: 61 6e 64 20 61 20 43 4f 4d 4d 49 54 20 69 73 20  and a COMMIT is 
2710: 65 78 65 63 75 74 65 64 2c 20 74 68 65 20 63 6f  executed, the co
2720: 6d 6d 69 74 0a 77 69 6c 6c 20 6e 6f 74 20 61 63  mmit.will not ac
2730: 74 75 61 6c 6c 79 20 6f 63 63 75 72 20 75 6e 74  tually occur unt
2740: 69 6c 20 61 6c 6c 20 53 45 4c 45 43 54 20 73 74  il all SELECT st
2750: 61 74 65 6d 65 6e 74 73 20 66 69 6e 69 73 68 2e  atements finish.
2760: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 6e 20 61 74  .</p>..<p>.An at
2770: 74 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65  tempt to execute
2780: 20 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 72 65   COMMIT might re
2790: 73 75 6c 74 20 69 6e 20 61 6e 20 53 51 4c 49 54  sult in an SQLIT
27a0: 45 5f 42 55 53 59 20 72 65 74 75 72 6e 20 63 6f  E_BUSY return co
27b0: 64 65 2e 0a 54 68 69 73 20 69 6e 64 69 63 61 74  de..This indicat
27c0: 65 73 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  es that another 
27d0: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
27e0: 73 20 68 61 64 20 61 20 72 65 61 64 20 6c 6f 63  s had a read loc
27f0: 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
2800: 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65 64  e.that prevented
2810: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
2820: 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65 64  om being updated
2830: 2e 20 20 57 68 65 6e 20 43 4f 4d 4d 49 54 20 66  .  When COMMIT f
2840: 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77 61 79  ails in this.way
2850: 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  , the transactio
2860: 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65  n remains active
2870: 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54 20   and the COMMIT 
2880: 63 61 6e 20 62 65 20 72 65 74 72 69 65 64 20 6c  can be retried l
2890: 61 74 65 72 0a 61 66 74 65 72 20 74 68 65 20 72  ater.after the r
28a0: 65 61 64 65 72 20 68 61 73 20 68 61 64 20 61 20  eader has had a 
28b0: 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61 72 2e  chance to clear.
28c0: 0a 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
28d0: 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e  n comment commen
28e0: 74 0a 0a 53 79 6e 74 61 78 20 7b 63 6f 6d 6d 65  t..Syntax {comme
28f0: 6e 74 7d 20 7b 3c 53 51 4c 2d 63 6f 6d 6d 65 6e  nt} {<SQL-commen
2900: 74 3e 20 7c 20 3c 43 2d 63 6f 6d 6d 65 6e 74 3e  t> | <C-comment>
2910: 0a 7d 20 7b 53 51 4c 2d 63 6f 6d 6d 65 6e 74 7d  .} {SQL-comment}
2920: 20 7b 2d 2d 20 3c 73 69 6e 67 6c 65 2d 6c 69 6e   {-- <single-lin
2930: 65 3e 0a 7d 20 7b 43 2d 63 6f 6d 6d 65 6e 74 7d  e>.} {C-comment}
2940: 20 7b 2f 53 54 41 52 20 3c 6d 75 6c 74 69 70 6c   {/STAR <multipl
2950: 65 2d 6c 69 6e 65 73 3e 20 5b 53 54 41 52 2f 5d  e-lines> [STAR/]
2960: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 20 43  .}..puts {.<p> C
2970: 6f 6d 6d 65 6e 74 73 20 61 72 65 6e 27 74 20 53  omments aren't S
2980: 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74  QL commands, but
2990: 20 63 61 6e 20 6f 63 63 75 72 20 69 6e 20 53 51   can occur in SQ
29a0: 4c 20 71 75 65 72 69 65 73 2e 20 54 68 65 79 20  L queries. They 
29b0: 61 72 65 20 0a 74 72 65 61 74 65 64 20 61 73 20  are .treated as 
29c0: 77 68 69 74 65 73 70 61 63 65 20 62 79 20 74 68  whitespace by th
29d0: 65 20 70 61 72 73 65 72 2e 20 20 54 68 65 79 20  e parser.  They 
29e0: 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65  can begin anywhe
29f0: 72 65 20 77 68 69 74 65 73 70 61 63 65 20 0a 63  re whitespace .c
2a00: 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63  an be found, inc
2a10: 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78  luding inside ex
2a20: 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73  pressions that s
2a30: 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e  pan multiple lin
2a40: 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 53 51  es..</p>..<p> SQ
2a50: 4c 20 63 6f 6d 6d 65 6e 74 73 20 6f 6e 6c 79 20  L comments only 
2a60: 65 78 74 65 6e 64 20 74 6f 20 74 68 65 20 65 6e  extend to the en
2a70: 64 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  d of the current
2a80: 20 6c 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20   line.</p>..<p> 
2a90: 43 20 63 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 73  C comments can s
2aa0: 70 61 6e 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f  pan any number o
2ab0: 66 20 6c 69 6e 65 73 2e 20 20 49 66 20 74 68 65  f lines.  If the
2ac0: 72 65 20 69 73 20 6e 6f 20 74 65 72 6d 69 6e 61  re is no termina
2ad0: 74 69 6e 67 0a 64 65 6c 69 6d 69 74 65 72 2c 20  ting.delimiter, 
2ae0: 74 68 65 79 20 65 78 74 65 6e 64 20 74 6f 20 74  they extend to t
2af0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
2b00: 70 75 74 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  put.  This is no
2b10: 74 20 74 72 65 61 74 65 64 20 61 73 0a 61 6e 20  t treated as.an 
2b20: 65 72 72 6f 72 2e 20 20 41 20 6e 65 77 20 53 51  error.  A new SQ
2b30: 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
2b40: 62 65 67 69 6e 20 6f 6e 20 61 20 6c 69 6e 65 20  begin on a line 
2b50: 61 66 74 65 72 20 61 20 6d 75 6c 74 69 6c 69 6e  after a multilin
2b60: 65 0a 63 6f 6d 6d 65 6e 74 20 65 6e 64 73 2e 20  e.comment ends. 
2b70: 20 43 20 63 6f 6d 6d 65 6e 74 73 20 63 61 6e 20   C comments can 
2b80: 62 65 20 65 6d 62 65 64 64 65 64 20 61 6e 79 77  be embedded anyw
2b90: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
2ba0: 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75  can occur,.inclu
2bb0: 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72  ding inside expr
2bc0: 65 73 73 69 6f 6e 73 2c 20 61 6e 64 20 69 6e 20  essions, and in 
2bd0: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74  the middle of ot
2be0: 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  her SQL statemen
2bf0: 74 73 2e 0a 43 20 63 6f 6d 6d 65 6e 74 73 20 64  ts..C comments d
2c00: 6f 20 6e 6f 74 20 6e 65 73 74 2e 20 20 53 51 4c  o not nest.  SQL
2c10: 20 63 6f 6d 6d 65 6e 74 73 20 69 6e 73 69 64 65   comments inside
2c20: 20 61 20 43 20 63 6f 6d 6d 65 6e 74 20 77 69 6c   a C comment wil
2c30: 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 3c 2f  l be ignored..</
2c40: 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 43  p>.}...Section C
2c50: 4f 50 59 20 63 6f 70 79 0a 0a 53 79 6e 74 61 78  OPY copy..Syntax
2c60: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
2c70: 20 7b 0a 43 4f 50 59 20 5b 20 4f 52 20 3c 63 6f   {.COPY [ OR <co
2c80: 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d  nflict-algorithm
2c90: 3e 20 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  > ] [<database-n
2ca0: 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
2cb0: 61 6d 65 3e 20 46 52 4f 4d 20 3c 66 69 6c 65 6e  ame> FROM <filen
2cc0: 61 6d 65 3e 0a 5b 20 55 53 49 4e 47 20 44 45 4c  ame>.[ USING DEL
2cd0: 49 4d 49 54 45 52 53 20 3c 64 65 6c 69 6d 3e 20  IMITERS <delim> 
2ce0: 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  ].}..puts {.<p>T
2cf0: 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 20  he COPY command 
2d00: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20  is available in 
2d10: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 32  SQLite version 2
2d20: 2e 38 20 61 6e 64 20 65 61 72 6c 69 65 72 2e 0a  .8 and earlier..
2d30: 54 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64  The COPY command
2d40: 20 68 61 73 20 62 65 65 6e 20 72 65 6d 6f 76 65   has been remove
2d50: 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 76 65  d from SQLite ve
2d60: 72 73 69 6f 6e 20 33 2e 30 20 64 75 65 20 74 6f  rsion 3.0 due to
2d70: 0a 63 6f 6d 70 6c 69 63 61 74 69 6f 6e 73 20 69  .complications i
2d80: 6e 20 74 72 79 69 6e 67 20 74 6f 20 73 75 70 70  n trying to supp
2d90: 6f 72 74 20 69 74 20 69 6e 20 61 20 6d 69 78 65  ort it in a mixe
2da0: 64 20 55 54 46 2d 38 2f 31 36 20 65 6e 76 69 72  d UTF-8/16 envir
2db0: 6f 6e 6d 65 6e 74 2e 0a 49 6e 20 76 65 72 73 69  onment..In versi
2dc0: 6f 6e 20 33 2e 30 2c 20 74 68 65 20 3c 61 20 68  on 3.0, the <a h
2dd0: 72 65 66 3d 22 73 71 6c 69 74 65 2e 68 74 6d 6c  ref="sqlite.html
2de0: 22 3e 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  ">command-line s
2df0: 68 65 6c 6c 3c 2f 61 3e 0a 63 6f 6e 74 61 69 6e  hell</a>.contain
2e00: 73 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 20  s a new command 
2e10: 3c 62 3e 2e 69 6d 70 6f 72 74 3c 2f 62 3e 20 74  <b>.import</b> t
2e20: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
2e30: 61 73 20 61 20 73 75 62 73 74 69 74 75 74 65 0a  as a substitute.
2e40: 66 6f 72 20 43 4f 50 59 2e 0a 3c 2f 70 3e 0a 0a  for COPY..</p>..
2e50: 3c 70 3e 54 68 65 20 43 4f 50 59 20 63 6f 6d 6d  <p>The COPY comm
2e60: 61 6e 64 20 69 73 20 61 6e 20 65 78 74 65 6e 73  and is an extens
2e70: 69 6f 6e 20 75 73 65 64 20 74 6f 20 6c 6f 61 64  ion used to load
2e80: 20 6c 61 72 67 65 20 61 6d 6f 75 6e 74 73 20 6f   large amounts o
2e90: 66 0a 64 61 74 61 20 69 6e 74 6f 20 61 20 74 61  f.data into a ta
2ea0: 62 6c 65 2e 20 20 49 74 20 69 73 20 6d 6f 64 65  ble.  It is mode
2eb0: 6c 65 64 20 61 66 74 65 72 20 61 20 73 69 6d 69  led after a simi
2ec0: 6c 61 72 20 63 6f 6d 6d 61 6e 64 20 66 6f 75 6e  lar command foun
2ed0: 64 0a 69 6e 20 50 6f 73 74 67 72 65 53 51 4c 2e  d.in PostgreSQL.
2ee0: 20 20 49 6e 20 66 61 63 74 2c 20 74 68 65 20 53    In fact, the S
2ef0: 51 4c 69 74 65 20 43 4f 50 59 20 63 6f 6d 6d 61  QLite COPY comma
2f00: 6e 64 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  nd is specifical
2f10: 6c 79 0a 64 65 73 69 67 6e 65 64 20 74 6f 20 62  ly.designed to b
2f20: 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20 74  e able to read t
2f30: 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65  he output of the
2f40: 20 50 6f 73 74 67 72 65 53 51 4c 20 64 75 6d 70   PostgreSQL dump
2f50: 0a 75 74 69 6c 69 74 79 20 3c 62 3e 70 67 5f 64  .utility <b>pg_d
2f60: 75 6d 70 3c 2f 62 3e 20 73 6f 20 74 68 61 74 20  ump</b> so that 
2f70: 64 61 74 61 20 63 61 6e 20 62 65 20 65 61 73 69  data can be easi
2f80: 6c 79 20 74 72 61 6e 73 66 65 72 72 65 64 20 66  ly transferred f
2f90: 72 6f 6d 0a 50 6f 73 74 67 72 65 53 51 4c 20 69  rom.PostgreSQL i
2fa0: 6e 74 6f 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a  nto SQLite.</p>.
2fb0: 0a 3c 70 3e 54 68 65 20 74 61 62 6c 65 2d 6e 61  .<p>The table-na
2fc0: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
2fd0: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  f an existing ta
2fe0: 62 6c 65 20 77 68 69 63 68 20 69 73 20 74 6f 0a  ble which is to.
2ff0: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 64  be filled with d
3000: 61 74 61 2e 20 20 54 68 65 20 66 69 6c 65 6e 61  ata.  The filena
3010: 6d 65 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f  me is a string o
3020: 72 20 69 64 65 6e 74 69 66 69 65 72 20 74 68 61  r identifier tha
3030: 74 0a 6e 61 6d 65 73 20 61 20 66 69 6c 65 20 66  t.names a file f
3040: 72 6f 6d 20 77 68 69 63 68 20 64 61 74 61 20 77  rom which data w
3050: 69 6c 6c 20 62 65 20 72 65 61 64 2e 20 20 54 68  ill be read.  Th
3060: 65 20 66 69 6c 65 6e 61 6d 65 20 63 61 6e 20 62  e filename can b
3070: 65 0a 74 68 65 20 3c 62 3e 53 54 44 49 4e 3c 2f  e.the <b>STDIN</
3080: 62 3e 20 74 6f 20 72 65 61 64 20 64 61 74 61 20  b> to read data 
3090: 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69 6e  from standard in
30a0: 70 75 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  put.</p>..<p>Eac
30b0: 68 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 69 6e  h line of the in
30c0: 70 75 74 20 66 69 6c 65 20 69 73 20 63 6f 6e 76  put file is conv
30d0: 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  erted into a sin
30e0: 67 6c 65 20 72 65 63 6f 72 64 0a 69 6e 20 74 68  gle record.in th
30f0: 65 20 74 61 62 6c 65 2e 20 20 43 6f 6c 75 6d 6e  e table.  Column
3100: 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20  s are separated 
3110: 62 79 20 74 61 62 73 2e 20 20 49 66 20 61 20 74  by tabs.  If a t
3120: 61 62 20 6f 63 63 75 72 73 20 61 73 0a 64 61 74  ab occurs as.dat
3130: 61 20 77 69 74 68 69 6e 20 61 20 63 6f 6c 75 6d  a within a colum
3140: 6e 2c 20 74 68 65 6e 20 74 68 61 74 20 74 61 62  n, then that tab
3150: 20 69 73 20 70 72 65 63 65 64 65 64 20 62 79 20   is preceded by 
3160: 61 20 62 61 73 6b 73 6c 61 73 68 20 22 5c 22 0a  a baskslash "\".
3170: 63 68 61 72 61 63 74 65 72 2e 20 20 41 20 62 61  character.  A ba
3180: 73 6b 73 6c 61 73 68 20 69 6e 20 74 68 65 20 64  skslash in the d
3190: 61 74 61 20 61 70 70 65 61 72 73 20 61 73 20 74  ata appears as t
31a0: 77 6f 20 62 61 63 6b 73 6c 61 73 68 65 73 20 69  wo backslashes i
31b0: 6e 0a 61 20 72 6f 77 2e 20 20 54 68 65 20 6f 70  n.a row.  The op
31c0: 74 69 6f 6e 61 6c 20 55 53 49 4e 47 20 44 45 4c  tional USING DEL
31d0: 49 4d 49 54 45 52 53 20 63 6c 61 75 73 65 20 63  IMITERS clause c
31e0: 61 6e 20 73 70 65 63 69 66 79 20 61 20 64 65 6c  an specify a del
31f0: 69 6d 69 74 65 72 0a 6f 74 68 65 72 20 74 68 61  imiter.other tha
3200: 6e 20 74 61 62 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  n tab.</p>..<p>I
3210: 66 20 61 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73 69  f a column consi
3220: 73 74 73 20 6f 66 20 74 68 65 20 63 68 61 72 61  sts of the chara
3230: 63 74 65 72 20 22 5c 4e 22 2c 20 74 68 61 74 20  cter "\N", that 
3240: 63 6f 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65 64  column is filled
3250: 0a 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20  .with the value 
3260: 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  NULL.</p>..<p>Th
3270: 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c  e optional confl
3280: 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77  ict-clause allow
3290: 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74  s the specificat
32a0: 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e  ion of an altern
32b0: 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74  ative.constraint
32c0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
32d0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74  tion algorithm t
32e0: 6f 20 75 73 65 20 66 6f 72 20 74 68 69 73 20 6f  o use for this o
32f0: 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20  ne command..See 
3300: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
3310: 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e  ed.<a href="#con
3320: 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49  flict">ON CONFLI
3330: 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69 74  CT</a> for addit
3340: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
3350: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20  n.</p>..<p>When 
3360: 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 73  the input data s
3370: 6f 75 72 63 65 20 69 73 20 53 54 44 49 4e 2c 20  ource is STDIN, 
3380: 74 68 65 20 69 6e 70 75 74 20 63 61 6e 20 62 65  the input can be
3390: 20 74 65 72 6d 69 6e 61 74 65 64 0a 62 79 20 61   terminated.by a
33a0: 20 6c 69 6e 65 20 74 68 61 74 20 63 6f 6e 74 61   line that conta
33b0: 69 6e 73 20 6f 6e 6c 79 20 61 20 62 61 73 6b 73  ins only a basks
33c0: 6c 61 73 68 20 61 6e 64 20 61 20 64 6f 74 3a 7d  lash and a dot:}
33d0: 0a 70 75 74 73 20 22 5c 22 5b 4f 70 65 72 61 74  .puts "\"[Operat
33e0: 6f 72 20 5c 5c 2e 5d 5c 22 2e 3c 2f 70 3e 22 0a  or \\.]\".</p>".
33f0: 0a 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  ..Section {CREAT
3400: 45 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69  E INDEX} createi
3410: 6e 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73 71  ndex..Syntax {sq
3420: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43  l-statement} {.C
3430: 52 45 41 54 45 20 5b 55 4e 49 51 55 45 5d 20 49  REATE [UNIQUE] I
3440: 4e 44 45 58 20 3c 69 6e 64 65 78 2d 6e 61 6d 65  NDEX <index-name
3450: 3e 20 0a 4f 4e 20 5b 3c 64 61 74 61 62 61 73 65  > .ON [<database
3460: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
3470: 2d 6e 61 6d 65 3e 20 28 20 3c 63 6f 6c 75 6d 6e  -name> ( <column
3480: 2d 6e 61 6d 65 3e 20 5b 2c 20 3c 63 6f 6c 75 6d  -name> [, <colum
3490: 6e 2d 6e 61 6d 65 3e 5d 2a 20 29 0a 5b 20 4f 4e  n-name>]* ).[ ON
34a0: 20 43 4f 4e 46 4c 49 43 54 20 3c 63 6f 6e 66 6c   CONFLICT <confl
34b0: 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 20 5d  ict-algorithm> ]
34c0: 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 7d  .} {column-name}
34d0: 20 7b 0a 3c 6e 61 6d 65 3e 20 5b 20 43 4f 4c 4c   {.<name> [ COLL
34e0: 41 54 45 20 3c 63 6f 6c 6c 61 74 69 6f 6e 2d 6e  ATE <collation-n
34f0: 61 6d 65 3e 5d 20 5b 20 41 53 43 20 7c 20 44 45  ame>] [ ASC | DE
3500: 53 43 20 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  SC ].}..puts {.<
3510: 70 3e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44  p>The CREATE IND
3520: 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69  EX command consi
3530: 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f  sts of the keywo
3540: 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45  rds "CREATE INDE
3550: 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74  X" followed.by t
3560: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
3570: 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65  ew index, the ke
3580: 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20  yword "ON", the 
3590: 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f  name of a previo
35a0: 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62  usly.created tab
35b0: 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
35c0: 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20   indexed, and a 
35d0: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
35e0: 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63  st of names of.c
35f0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
3600: 62 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65  ble that are use
3610: 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20  d for the index 
3620: 6b 65 79 2e 0a 45 61 63 68 20 63 6f 6c 75 6d 6e  key..Each column
3630: 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c   name can be fol
3640: 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66 20  lowed by one of 
3650: 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44 45  the "ASC" or "DE
3660: 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20  SC" keywords.to 
3670: 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f 72  indicate sort or
3680: 64 65 72 2c 20 62 75 74 20 74 68 65 20 73 6f 72  der, but the sor
3690: 74 20 6f 72 64 65 72 20 69 73 20 69 67 6e 6f 72  t order is ignor
36a0: 65 64 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ed in the curren
36b0: 74 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t.implementation
36c0: 2e 20 20 53 6f 72 74 69 6e 67 20 69 73 20 61 6c  .  Sorting is al
36d0: 77 61 79 73 20 64 6f 6e 65 20 69 6e 20 61 73 63  ways done in asc
36e0: 65 6e 64 69 6e 67 20 6f 72 64 65 72 2e 3c 2f 70  ending order.</p
36f0: 3e 0a 0a 3c 70 3e 54 68 65 20 43 4f 4c 4c 41 54  >..<p>The COLLAT
3700: 45 20 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 69  E clause followi
3710: 6e 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e  ng each column n
3720: 61 6d 65 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ame defines a co
3730: 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65  llating.sequence
3740: 20 75 73 65 64 20 66 6f 72 20 74 65 78 74 20 65   used for text e
3750: 6e 74 69 72 65 73 20 69 6e 20 74 68 61 74 20 63  ntires in that c
3760: 6f 6c 75 6d 6e 2e 20 20 54 68 65 20 64 65 66 61  olumn.  The defa
3770: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65  ult collating.se
3780: 71 75 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f  quence is the co
3790: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
37a0: 20 64 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61   defined for tha
37b0: 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a  t column in the.
37c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
37d0: 74 65 6d 65 6e 74 2e 20 20 4f 72 20 69 66 20 6e  tement.  Or if n
37e0: 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  o collating sequ
37f0: 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73  ence is otherwis
3800: 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62  e defined,.the b
3810: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
3820: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
3830: 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  e is used.</p>..
3840: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20  <p>There are no 
3850: 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73  arbitrary limits
3860: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
3870: 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63  f indices that c
3880: 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74  an be.attached t
3890: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
38a0: 2c 20 6e 6f 72 20 6f 6e 20 74 68 65 20 6e 75 6d  , nor on the num
38b0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
38c0: 6e 20 61 6e 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a  n an index.</p>.
38d0: 0a 3c 70 3e 49 66 20 74 68 65 20 55 4e 49 51 55  .<p>If the UNIQU
38e0: 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72  E keyword appear
38f0: 73 20 62 65 74 77 65 65 6e 20 43 52 45 41 54 45  s between CREATE
3900: 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e 20   and INDEX then 
3910: 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78 20  duplicate.index 
3920: 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74 20  entries are not 
3930: 61 6c 6c 6f 77 65 64 2e 20 20 41 6e 79 20 61 74  allowed.  Any at
3940: 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20  tempt to insert 
3950: 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72  a duplicate entr
3960: 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  y.will result in
3970: 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
3980: 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
3990: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
39a0: 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69  allows the speci
39b0: 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61  fication of an a
39c0: 6c 74 65 72 6e 61 74 69 76 65 0a 64 65 66 61 75  lternative.defau
39d0: 6c 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  lt constraint co
39e0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
39f0: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20  n algorithm for 
3a00: 74 68 69 73 20 69 6e 64 65 78 2e 0a 54 68 69 73  this index..This
3a10: 20 6f 6e 6c 79 20 6d 61 6b 65 73 20 73 65 6e 73   only makes sens
3a20: 65 20 69 66 20 74 68 65 20 55 4e 49 51 55 45 20  e if the UNIQUE 
3a30: 6b 65 79 77 6f 72 64 20 69 73 20 75 73 65 64 20  keyword is used 
3a40: 73 69 6e 63 65 20 6f 74 68 65 72 77 69 73 65 0a  since otherwise.
3a50: 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 63 6f  there are not co
3a60: 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 74 68 65  nstraints on the
3a70: 20 69 6e 64 65 78 2e 20 20 54 68 65 20 64 65 66   index.  The def
3a80: 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20 69  ault algorithm i
3a90: 73 0a 41 42 4f 52 54 2e 20 20 49 66 20 61 20 43  s.ABORT.  If a C
3aa0: 4f 50 59 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20  OPY, INSERT, or 
3ab0: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
3ac0: 20 73 70 65 63 69 66 69 65 73 20 61 20 70 61 72   specifies a par
3ad0: 74 69 63 75 6c 61 72 0a 63 6f 6e 66 6c 69 63 74  ticular.conflict
3ae0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
3af0: 72 69 74 68 6d 2c 20 74 68 61 74 20 61 6c 67 6f  rithm, that algo
3b00: 72 69 74 68 6d 20 69 73 20 75 73 65 64 20 69 6e  rithm is used in
3b10: 20 70 6c 61 63 65 20 6f 66 0a 74 68 65 20 64 65   place of.the de
3b20: 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20  fault algorithm 
3b30: 73 70 65 63 69 66 69 65 64 20 68 65 72 65 2e 0a  specified here..
3b40: 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
3b50: 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22  titled.<a href="
3b60: 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f  #conflict">ON CO
3b70: 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61  NFLICT</a> for a
3b80: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
3b90: 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ation.</p>..<p>T
3ba0: 68 65 20 65 78 61 63 74 20 74 65 78 74 0a 6f 66  he exact text.of
3bb0: 20 65 61 63 68 20 43 52 45 41 54 45 20 49 4e 44   each CREATE IND
3bc0: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  EX statement is 
3bd0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 3c 62  stored in the <b
3be0: 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f  >sqlite_master</
3bf0: 62 3e 0a 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f  b>.or <b>sqlite_
3c00: 74 65 6d 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20  temp_master</b> 
3c10: 74 61 62 6c 65 2c 20 64 65 70 65 6e 64 69 6e 67  table, depending
3c20: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
3c30: 74 61 62 6c 65 0a 62 65 69 6e 67 20 69 6e 64 65  table.being inde
3c40: 78 65 64 20 69 73 20 74 65 6d 70 6f 72 61 72 79  xed is temporary
3c50: 2e 20 20 45 76 65 72 79 20 74 69 6d 65 20 74 68  .  Every time th
3c60: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70  e database is op
3c70: 65 6e 65 64 2c 0a 61 6c 6c 20 43 52 45 41 54 45  ened,.all CREATE
3c80: 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
3c90: 73 0a 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20  s.are read from 
3ca0: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61  the <b>sqlite_ma
3cb0: 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61  ster</b> table a
3cc0: 6e 64 20 75 73 65 64 20 74 6f 20 72 65 67 65 6e  nd used to regen
3cd0: 65 72 61 74 65 0a 53 51 4c 69 74 65 27 73 20 69  erate.SQLite's i
3ce0: 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
3cf0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e  tation of the in
3d00: 64 65 78 20 6c 61 79 6f 75 74 2e 3c 2f 70 3e 0a  dex layout.</p>.
3d10: 0a 3c 70 3e 49 6e 64 65 78 65 73 20 61 72 65 20  .<p>Indexes are 
3d20: 72 65 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65  removed with the
3d30: 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 69   <a href="#dropi
3d40: 6e 64 65 78 22 3e 44 52 4f 50 20 49 4e 44 45 58  ndex">DROP INDEX
3d50: 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f  </a> .command.</
3d60: 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b  p>.}...Section {
3d70: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63  CREATE TABLE} {c
3d80: 72 65 61 74 65 74 61 62 6c 65 7d 0a 0a 53 79 6e  reatetable}..Syn
3d90: 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64  tax {sql-command
3da0: 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50  } {.CREATE [TEMP
3db0: 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 54 41   | TEMPORARY] TA
3dc0: 42 4c 45 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  BLE <table-name>
3dd0: 20 28 0a 20 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66   (.  <column-def
3de0: 3e 20 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66  > [, <column-def
3df0: 3e 5d 2a 0a 20 20 5b 2c 20 3c 63 6f 6e 73 74 72  >]*.  [, <constr
3e00: 61 69 6e 74 3e 5d 2a 0a 29 0a 7d 20 7b 73 71 6c  aint>]*.).} {sql
3e10: 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43 52 45 41  -command} {.CREA
3e20: 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f  TE [TEMP | TEMPO
3e30: 52 41 52 59 5d 20 54 41 42 4c 45 20 5b 3c 64 61  RARY] TABLE [<da
3e40: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 2e 5d 20 3c  tabase-name>.] <
3e50: 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 41 53 20 3c  table-name> AS <
3e60: 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74  select-statement
3e70: 3e 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 64 65 66 7d  >.} {column-def}
3e80: 20 7b 0a 3c 6e 61 6d 65 3e 20 5b 3c 74 79 70 65   {.<name> [<type
3e90: 3e 5d 20 5b 5b 43 4f 4e 53 54 52 41 49 4e 54 20  >] [[CONSTRAINT 
3ea0: 3c 6e 61 6d 65 3e 5d 20 3c 63 6f 6c 75 6d 6e 2d  <name>] <column-
3eb0: 63 6f 6e 73 74 72 61 69 6e 74 3e 5d 2a 0a 7d 20  constraint>]*.} 
3ec0: 7b 74 79 70 65 7d 20 7b 0a 3c 74 79 70 65 6e 61  {type} {.<typena
3ed0: 6d 65 3e 20 7c 0a 3c 74 79 70 65 6e 61 6d 65 3e  me> |.<typename>
3ee0: 20 28 20 3c 6e 75 6d 62 65 72 3e 20 29 20 7c 0a   ( <number> ) |.
3ef0: 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20 3c 6e 75  <typename> ( <nu
3f00: 6d 62 65 72 3e 20 2c 20 3c 6e 75 6d 62 65 72 3e  mber> , <number>
3f10: 20 29 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 63 6f 6e   ).} {column-con
3f20: 73 74 72 61 69 6e 74 7d 20 7b 0a 4e 4f 54 20 4e  straint} {.NOT N
3f30: 55 4c 4c 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d  ULL [ <conflict-
3f40: 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 50 52 49 4d  clause> ] |.PRIM
3f50: 41 52 59 20 4b 45 59 20 5b 3c 73 6f 72 74 2d 6f  ARY KEY [<sort-o
3f60: 72 64 65 72 3e 5d 20 5b 20 3c 63 6f 6e 66 6c 69  rder>] [ <confli
3f70: 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 5b 41 55  ct-clause> ] [AU
3f80: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20 7c 0a 55  TOINCREMENT] |.U
3f90: 4e 49 51 55 45 20 5b 20 3c 63 6f 6e 66 6c 69 63  NIQUE [ <conflic
3fa0: 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 43 48  t-clause> ] |.CH
3fb0: 45 43 4b 20 28 20 3c 65 78 70 72 3e 20 29 20 5b  ECK ( <expr> ) [
3fc0: 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   <conflict-claus
3fd0: 65 3e 20 5d 20 7c 0a 44 45 46 41 55 4c 54 20 3c  e> ] |.DEFAULT <
3fe0: 76 61 6c 75 65 3e 20 7c 0a 43 4f 4c 4c 41 54 45  value> |.COLLATE
3ff0: 20 3c 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65   <collation-name
4000: 3e 0a 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74 7d  >.} {constraint}
4010: 20 7b 0a 50 52 49 4d 41 52 59 20 4b 45 59 20 28   {.PRIMARY KEY (
4020: 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29   <column-list> )
4030: 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   [ <conflict-cla
4040: 75 73 65 3e 20 5d 20 7c 0a 55 4e 49 51 55 45 20  use> ] |.UNIQUE 
4050: 28 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  ( <column-list> 
4060: 29 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c  ) [ <conflict-cl
4070: 61 75 73 65 3e 20 5d 20 7c 0a 43 48 45 43 4b 20  ause> ] |.CHECK 
4080: 28 20 3c 65 78 70 72 3e 20 29 20 5b 20 3c 63 6f  ( <expr> ) [ <co
4090: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d  nflict-clause> ]
40a0: 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  .} {conflict-cla
40b0: 75 73 65 7d 20 7b 0a 4f 4e 20 43 4f 4e 46 4c 49  use} {.ON CONFLI
40c0: 43 54 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67  CT <conflict-alg
40d0: 6f 72 69 74 68 6d 3e 0a 7d 0a 0a 70 75 74 73 20  orithm>.}..puts 
40e0: 7b 0a 3c 70 3e 41 20 43 52 45 41 54 45 20 54 41  {.<p>A CREATE TA
40f0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
4100: 20 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20 6b   basically the k
4110: 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20  eywords "CREATE 
4120: 54 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64 20  TABLE".followed 
4130: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  by the name of a
4140: 20 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20 61   new table and a
4150: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
4160: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65  ist of column.de
4170: 66 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63 6f  finitions and co
4180: 6e 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65 20  nstraints.  The 
4190: 74 61 62 6c 65 20 6e 61 6d 65 20 63 61 6e 20 62  table name can b
41a0: 65 20 65 69 74 68 65 72 20 61 6e 20 69 64 65 6e  e either an iden
41b0: 74 69 66 69 65 72 0a 6f 72 20 61 20 73 74 72 69  tifier.or a stri
41c0: 6e 67 2e 20 20 54 61 62 6c 65 73 20 6e 61 6d 65  ng.  Tables name
41d0: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
41e0: 68 20 22 3c 62 3e 73 71 6c 69 74 65 5f 3c 2f 62  h "<b>sqlite_</b
41f0: 3e 22 20 61 72 65 20 72 65 73 65 72 76 65 64 0a  >" are reserved.
4200: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 65  for use by the e
4210: 6e 67 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45  ngine.</p>..<p>E
4220: 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  ach column defin
4230: 69 74 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d  ition is the nam
4240: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
4250: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a  followed by the.
4260: 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 61  datatype for tha
4270: 74 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 6f  t column, then o
4280: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69 6f  ne or more optio
4290: 6e 61 6c 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74  nal column const
42a0: 72 61 69 6e 74 73 2e 0a 54 68 65 20 64 61 74 61  raints..The data
42b0: 74 79 70 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  type for the col
42c0: 75 6d 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  umn does not res
42d0: 74 72 69 63 74 20 77 68 61 74 20 64 61 74 61 20  trict what data 
42e0: 6d 61 79 20 62 65 20 70 75 74 0a 69 6e 20 74 68  may be put.in th
42f0: 61 74 20 63 6f 6c 75 6d 6e 2e 0a 53 65 65 20 3c  at column..See <
4300: 61 20 68 72 65 66 3d 22 64 61 74 61 74 79 70 65  a href="datatype
4310: 33 2e 68 74 6d 6c 22 3e 44 61 74 61 74 79 70 65  3.html">Datatype
4320: 73 20 49 6e 20 53 51 4c 69 74 65 20 56 65 72 73  s In SQLite Vers
4330: 69 6f 6e 20 33 3c 2f 61 3e 20 66 6f 72 0a 61 64  ion 3</a> for.ad
4340: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
4350: 74 69 6f 6e 2e 0a 54 68 65 20 55 4e 49 51 55 45  tion..The UNIQUE
4360: 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 61 75 73   constraint caus
4370: 65 73 20 61 6e 20 69 6e 64 65 78 20 74 6f 20 62  es an index to b
4380: 65 20 63 72 65 61 74 65 64 20 6f 6e 20 74 68 65  e created on the
4390: 20 73 70 65 63 69 66 69 65 64 0a 63 6f 6c 75 6d   specified.colum
43a0: 6e 73 2e 20 20 54 68 69 73 20 69 6e 64 65 78 20  ns.  This index 
43b0: 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 75 6e 69  must contain uni
43c0: 71 75 65 20 6b 65 79 73 2e 0a 54 68 65 20 43 4f  que keys..The CO
43d0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73 70 65  LLATE clause spe
43e0: 63 69 66 69 65 73 20 77 68 61 74 20 74 65 78 74  cifies what text
43f0: 20 3c 61 20 68 72 65 66 3d 22 64 61 74 61 74 79   <a href="dataty
4400: 70 65 33 2e 68 74 6d 6c 23 63 6f 6c 6c 61 74 69  pe3.html#collati
4410: 6f 6e 22 3e 0a 63 6f 6c 6c 61 74 69 6e 67 20 66  on">.collating f
4420: 75 6e 63 74 69 6f 6e 3c 2f 61 3e 20 74 6f 20 75  unction</a> to u
4430: 73 65 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  se when comparin
4440: 67 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 66  g text entries f
4450: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20  or the column.  
4460: 0a 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49  .The built-in BI
4470: 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66  NARY collating f
4480: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
4490: 62 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70 3e 0a  by default..<p>.
44a0: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6f 6e 73  The DEFAULT cons
44b0: 74 72 61 69 6e 74 20 73 70 65 63 69 66 69 65 73  traint specifies
44c0: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
44d0: 20 74 6f 20 75 73 65 20 77 68 65 6e 20 64 6f 69   to use when doi
44e0: 6e 67 20 61 6e 20 49 4e 53 45 52 54 2e 0a 54 68  ng an INSERT..Th
44f0: 65 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 4e  e value may be N
4500: 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20 63 6f  ULL, a string co
4510: 6e 73 74 61 6e 74 2c 20 61 20 6e 75 6d 62 65 72  nstant, a number
4520: 2c 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  , or one of the 
4530: 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64  special.case-ind
4540: 65 70 65 6e 64 61 6e 74 20 6b 65 79 77 6f 72 64  ependant keyword
4550: 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s CURRENT_TIME, 
4560: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
4570: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
4580: 50 2e 0a 49 66 20 74 68 65 20 76 61 6c 75 65 20  P..If the value 
4590: 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  is NULL, a strin
45a0: 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75  g constant or nu
45b0: 6d 62 65 72 2c 20 69 74 20 69 73 20 6c 69 74 65  mber, it is lite
45c0: 72 61 6c 6c 79 20 69 6e 73 65 72 74 65 64 0a 69  rally inserted.i
45d0: 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77  nto the column w
45e0: 68 65 6e 65 76 65 72 20 61 6e 20 49 4e 53 45 52  henever an INSER
45f0: 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
4600: 20 64 6f 65 73 20 6e 6f 74 20 73 70 65 63 69 66   does not specif
4610: 79 20 61 20 76 61 6c 75 65 0a 66 6f 72 20 74 68  y a value.for th
4620: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 65 78 65 63  e column is exec
4630: 75 74 65 64 2e 20 49 66 20 74 68 65 20 76 61 6c  uted. If the val
4640: 75 65 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49  ue is CURRENT_TI
4650: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
4660: 20 6f 72 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45   or.CURRENT_TIME
4670: 53 54 41 4d 50 2c 20 74 68 65 6e 20 74 68 65 20  STAMP, then the 
4680: 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74 65  current UTC date
4690: 20 61 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73 20   and/or time is 
46a0: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 0a 74 68  inserted into.th
46b0: 65 20 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 20 43  e columns. For C
46c0: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65  URRENT_TIME, the
46d0: 20 66 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d 4d   format is HH:MM
46e0: 3a 53 53 2e 20 46 6f 72 20 43 55 52 52 45 4e 54  :SS. For CURRENT
46f0: 5f 44 41 54 45 2c 20 0a 59 59 59 59 2d 4d 4d 2d  _DATE, .YYYY-MM-
4700: 44 44 2e 20 54 68 65 20 66 6f 72 6d 61 74 20 66  DD. The format f
4710: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
4720: 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d  TAMP is "YYYY-MM
4730: 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c  -DD HH:MM:SS"..<
4740: 2f 70 3e 0a 0a 3c 70 3e 53 70 65 63 69 66 79 69  /p>..<p>Specifyi
4750: 6e 67 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  ng a PRIMARY KEY
4760: 20 6e 6f 72 6d 61 6c 6c 79 20 6a 75 73 74 20 63   normally just c
4770: 72 65 61 74 65 73 20 61 20 55 4e 49 51 55 45 20  reates a UNIQUE 
4780: 69 6e 64 65 78 0a 6f 6e 20 74 68 65 20 63 6f 72  index.on the cor
4790: 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d  responding colum
47a0: 6e 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  ns.  However, if
47b0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
47c0: 6f 6e 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  on a single colu
47d0: 6d 6e 0a 74 68 61 74 20 68 61 73 20 64 61 74 61  mn.that has data
47e0: 74 79 70 65 20 49 4e 54 45 47 45 52 2c 20 74 68  type INTEGER, th
47f0: 65 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  en that column i
4800: 73 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  s used internall
4810: 79 0a 61 73 20 74 68 65 20 61 63 74 75 61 6c 20  y.as the actual 
4820: 6b 65 79 20 6f 66 20 74 68 65 20 42 2d 54 72 65  key of the B-Tre
4830: 65 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e  e for the table.
4840: 20 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61    This means tha
4850: 74 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 6d 61 79  t the column.may
4860: 20 6f 6e 6c 79 20 68 6f 6c 64 20 75 6e 69 71 75   only hold uniqu
4870: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
4880: 2e 20 20 28 45 78 63 65 70 74 20 66 6f 72 20 74  .  (Except for t
4890: 68 69 73 20 6f 6e 65 20 63 61 73 65 2c 0a 53 51  his one case,.SQ
48a0: 4c 69 74 65 20 69 67 6e 6f 72 65 73 20 74 68 65  Lite ignores the
48b0: 20 64 61 74 61 74 79 70 65 20 73 70 65 63 69 66   datatype specif
48c0: 69 63 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  ication of colum
48d0: 6e 73 20 61 6e 64 20 61 6c 6c 6f 77 73 0a 61 6e  ns and allows.an
48e0: 79 20 6b 69 6e 64 20 6f 66 20 64 61 74 61 20 74  y kind of data t
48f0: 6f 20 62 65 20 70 75 74 20 69 6e 20 61 20 63 6f  o be put in a co
4900: 6c 75 6d 6e 20 72 65 67 61 72 64 6c 65 73 73 20  lumn regardless 
4910: 6f 66 20 69 74 73 20 64 65 63 6c 61 72 65 64 0a  of its declared.
4920: 64 61 74 61 74 79 70 65 2e 29 20 20 49 66 20 61  datatype.)  If a
4930: 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20   table does not 
4940: 68 61 76 65 20 61 6e 20 49 4e 54 45 47 45 52 20  have an INTEGER 
4950: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
4960: 6d 6e 2c 0a 74 68 65 6e 20 74 68 65 20 42 2d 54  mn,.then the B-T
4970: 72 65 65 20 6b 65 79 20 77 69 6c 6c 20 62 65 20  ree key will be 
4980: 61 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  a automatically 
4990: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
49a0: 72 2e 20 20 54 68 65 0a 42 2d 54 72 65 65 20 6b  r.  The.B-Tree k
49b0: 65 79 20 66 6f 72 20 61 20 72 6f 77 20 63 61 6e  ey for a row can
49c0: 20 61 6c 77 61 79 73 20 62 65 20 61 63 63 65 73   always be acces
49d0: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
49e0: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d   the.special nam
49f0: 65 73 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  es "<b>ROWID</b>
4a00: 22 2c 20 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ", "<b>OID</b>",
4a10: 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
4a20: 2f 62 3e 22 2e 0a 54 68 69 73 20 69 73 20 74 72  /b>"..This is tr
4a30: 75 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ue regardless of
4a40: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
4a50: 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 54 45  there is an INTE
4a60: 47 45 52 0a 50 52 49 4d 41 52 59 20 4b 45 59 2e  GER.PRIMARY KEY.
4a70: 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49    An INTEGER PRI
4a80: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20  MARY KEY column 
4a90: 6d 61 6e 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65  man also include
4aa0: 20 74 68 65 0a 6b 65 79 77 6f 72 64 20 41 55 54   the.keyword AUT
4ab0: 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 54 68 65  OINCREMENT.  The
4ac0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 6b   AUTOINCREMENT k
4ad0: 65 79 77 6f 72 64 20 6d 6f 64 69 66 69 65 64 20  eyword modified 
4ae0: 74 68 65 20 77 61 79 0a 74 68 61 74 20 42 2d 54  the way.that B-T
4af0: 72 65 65 20 6b 65 79 73 20 61 72 65 20 61 75 74  ree keys are aut
4b00: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
4b10: 61 74 65 64 2e 20 20 41 64 64 69 74 69 6f 6e 61  ated.  Additiona
4b20: 6c 20 64 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f  l detail.on auto
4b30: 6d 61 74 69 63 20 42 2d 54 72 65 65 20 6b 65 79  matic B-Tree key
4b40: 20 67 65 6e 65 72 61 74 69 6f 6e 20 69 73 20 61   generation is a
4b50: 76 61 69 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66  vailable.<a href
4b60: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
4b70: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
4b80: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 22  /p>..<p>If the "
4b90: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
4ba0: 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63  ARY" keyword occ
4bb0: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22  urs in between "
4bc0: 43 52 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42  CREATE".and "TAB
4bd0: 4c 45 22 20 74 68 65 6e 20 74 68 65 20 74 61 62  LE" then the tab
4be0: 6c 65 20 74 68 61 74 20 69 73 20 63 72 65 61 74  le that is creat
4bf0: 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62  ed is only visib
4c00: 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73  le to the.proces
4c10: 73 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68  s that opened th
4c20: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 69  e database and i
4c30: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
4c40: 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65  deleted when.the
4c50: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
4c60: 73 65 64 2e 20 20 41 6e 79 20 69 6e 64 69 63 65  sed.  Any indice
4c70: 73 20 63 72 65 61 74 65 64 20 6f 6e 20 61 20 74  s created on a t
4c80: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 0a 61  emporary table.a
4c90: 72 65 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61 72  re also temporar
4ca0: 79 2e 20 20 54 65 6d 70 6f 72 61 72 79 20 74 61  y.  Temporary ta
4cb0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
4cc0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
4cd0: 0a 73 65 70 61 72 61 74 65 20 66 69 6c 65 20 64  .separate file d
4ce0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 74 68 65  istinct from the
4cf0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
4d00: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66  ile.</p>..<p> If
4d10: 20 61 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d   a <database-nam
4d20: 65 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  e> is specified,
4d30: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
4d40: 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74  is created in .t
4d50: 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73  he named databas
4d60: 65 2e 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  e. It is an erro
4d70: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
4d80: 68 20 61 20 3c 64 61 74 61 62 61 73 65 2d 6e 61  h a <database-na
4d90: 6d 65 3e 0a 61 6e 64 20 74 68 65 20 54 45 4d 50  me>.and the TEMP
4da0: 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73   keyword, unless
4db0: 20 74 68 65 20 3c 64 61 74 61 62 61 73 65 2d 6e   the <database-n
4dc0: 61 6d 65 3e 20 69 73 20 22 74 65 6d 70 22 2e 20  ame> is "temp". 
4dd0: 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e  If no.database n
4de0: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
4df0: 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  , and the TEMP k
4e00: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
4e10: 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65  esent,.the table
4e20: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
4e30: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
4e40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70  .</p>..<p>The op
4e50: 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
4e60: 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 69 6e 67  clause following
4e70: 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74   each constraint
4e80: 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63  .allows the spec
4e90: 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20  ification of an 
4ea0: 61 6c 74 65 72 6e 61 74 69 76 65 20 64 65 66 61  alternative defa
4eb0: 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ult.constraint c
4ec0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
4ed0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  on algorithm for
4ee0: 20 74 68 61 74 20 63 6f 6e 73 74 72 61 69 6e 74   that constraint
4ef0: 2e 0a 54 68 65 20 64 65 66 61 75 6c 74 20 69 73  ..The default is
4f00: 20 61 62 6f 72 74 20 41 42 4f 52 54 2e 20 20 44   abort ABORT.  D
4f10: 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61  ifferent constra
4f20: 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ints within the 
4f30: 73 61 6d 65 0a 74 61 62 6c 65 20 6d 61 79 20 68  same.table may h
4f40: 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64 65  ave different de
4f50: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
4f60: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
4f70: 74 68 6d 73 2e 0a 49 66 20 61 6e 20 43 4f 50 59  thms..If an COPY
4f80: 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20 55 50 44  , INSERT, or UPD
4f90: 41 54 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63  ATE command spec
4fa0: 69 66 69 65 73 20 61 20 64 69 66 66 65 72 65 6e  ifies a differen
4fb0: 74 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c  t conflict.resol
4fc0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2c  ution algorithm,
4fd0: 20 74 68 65 6e 20 74 68 61 74 20 61 6c 67 6f 72   then that algor
4fe0: 69 74 68 6d 20 69 73 20 75 73 65 64 20 69 6e 20  ithm is used in 
4ff0: 70 6c 61 63 65 20 6f 66 20 74 68 65 0a 64 65 66  place of the.def
5000: 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20 73  ault algorithm s
5010: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
5020: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
5030: 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65 20  tement..See the 
5040: 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c  section titled.<
5050: 61 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63  a href="#conflic
5060: 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f  t">ON CONFLICT</
5070: 61 3e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  a> for additiona
5080: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
5090: 70 3e 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e  p>..<p>CHECK con
50a0: 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 67 6e  straints are ign
50b0: 6f 72 65 64 20 69 6e 20 74 68 65 20 63 75 72 72  ored in the curr
50c0: 65 6e 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ent implementati
50d0: 6f 6e 2e 0a 53 75 70 70 6f 72 74 20 66 6f 72 20  on..Support for 
50e0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
50f0: 73 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 69  s may be added i
5100: 6e 20 74 68 65 20 66 75 74 75 72 65 2e 20 20 41  n the future.  A
5110: 73 20 6f 66 0a 76 65 72 73 69 6f 6e 20 32 2e 33  s of.version 2.3
5120: 2e 30 2c 20 4e 4f 54 20 4e 55 4c 4c 2c 20 50 52  .0, NOT NULL, PR
5130: 49 4d 41 52 59 20 4b 45 59 2c 20 61 6e 64 20 55  IMARY KEY, and U
5140: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
5150: 73 20 61 6c 6c 0a 77 6f 72 6b 2e 3c 2f 70 3e 0a  s all.work.</p>.
5160: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f  .<p>There are no
5170: 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
5180: 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  s on the number.
5190: 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 6f 6e  of columns or on
51a0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
51b0: 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 61 20  onstraints in a 
51c0: 74 61 62 6c 65 2e 0a 54 68 65 20 74 6f 74 61 6c  table..The total
51d0: 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20   amount of data 
51e0: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
51f0: 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 61 62  is limited to ab
5200: 6f 75 74 0a 31 20 6d 65 67 61 62 79 74 65 73 20  out.1 megabytes 
5210: 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e 38 2e 20  in version 2.8. 
5220: 20 49 6e 20 76 65 72 73 69 6f 6e 20 33 2e 30 20   In version 3.0 
5230: 74 68 65 72 65 20 69 73 20 6e 6f 20 61 72 62 69  there is no arbi
5240: 74 72 61 72 79 0a 6c 69 6d 69 74 20 6f 6e 20 74  trary.limit on t
5250: 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74  he amount of dat
5260: 61 20 69 6e 20 61 20 72 6f 77 2e 3c 2f 70 3e 0a  a in a row.</p>.
5270: 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20  ..<p>The CREATE 
5280: 54 41 42 4c 45 20 41 53 20 66 6f 72 6d 20 64 65  TABLE AS form de
5290: 66 69 6e 65 73 20 74 68 65 20 74 61 62 6c 65 20  fines the table 
52a0: 74 6f 20 62 65 0a 74 68 65 20 72 65 73 75 6c 74  to be.the result
52b0: 20 73 65 74 20 6f 66 20 61 20 71 75 65 72 79 2e   set of a query.
52c0: 20 20 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 74    The names of t
52d0: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  he table columns
52e0: 20 61 72 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f   are.the names o
52f0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
5300: 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e   the result.</p>
5310: 0a 0a 3c 70 3e 54 68 65 20 65 78 61 63 74 20 74  ..<p>The exact t
5320: 65 78 74 0a 6f 66 20 65 61 63 68 20 43 52 45 41  ext.of each CREA
5330: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
5340: 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  nt is stored in 
5350: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61  the <b>sqlite_ma
5360: 73 74 65 72 3c 2f 62 3e 0a 74 61 62 6c 65 2e 20  ster</b>.table. 
5370: 20 45 76 65 72 79 20 74 69 6d 65 20 74 68 65 20   Every time the 
5380: 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  database is open
5390: 65 64 2c 20 61 6c 6c 20 43 52 45 41 54 45 20 54  ed, all CREATE T
53a0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 0a  ABLE statements.
53b0: 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68  are read from th
53c0: 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74  e <b>sqlite_mast
53d0: 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e 64  er</b> table and
53e0: 20 75 73 65 64 20 74 6f 20 72 65 67 65 6e 65 72   used to regener
53f0: 61 74 65 0a 53 51 4c 69 74 65 27 73 20 69 6e 74  ate.SQLite's int
5400: 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
5410: 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  tion of the tabl
5420: 65 20 6c 61 79 6f 75 74 2e 0a 49 66 20 74 68 65  e layout..If the
5430: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e   original comman
5440: 64 20 77 61 73 20 61 20 43 52 45 41 54 45 20 54  d was a CREATE T
5450: 41 42 4c 45 20 41 53 20 74 68 65 6e 20 74 68 65  ABLE AS then the
5460: 6e 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 0a  n an equivalent.
5470: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
5480: 74 65 6d 65 6e 74 20 69 73 20 73 79 6e 74 68 65  tement is synthe
5490: 73 69 7a 65 64 20 61 6e 64 20 73 74 6f 72 65 20  sized and store 
54a0: 69 6e 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73  in <b>sqlite_mas
54b0: 74 65 72 3c 2f 62 3e 0a 69 6e 20 70 6c 61 63 65  ter</b>.in place
54c0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
54d0: 20 63 6f 6d 6d 61 6e 64 2e 0a 54 68 65 20 74 65   command..The te
54e0: 78 74 20 6f 66 20 43 52 45 41 54 45 20 54 45 4d  xt of CREATE TEM
54f0: 50 4f 52 41 52 59 20 54 41 42 4c 45 20 73 74 61  PORARY TABLE sta
5500: 74 65 6d 65 6e 74 73 20 61 72 65 20 73 74 6f 72  tements are stor
5510: 65 64 20 69 6e 20 74 68 65 0a 3c 62 3e 73 71 6c  ed in the.<b>sql
5520: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 3c  ite_temp_master<
5530: 2f 62 3e 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a  /b> table..</p>.
5540: 0a 3c 70 3e 54 61 62 6c 65 73 20 61 72 65 20 72  .<p>Tables are r
5550: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
5560: 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74   <a href="#dropt
5570: 61 62 6c 65 22 3e 44 52 4f 50 20 54 41 42 4c 45  able">DROP TABLE
5580: 3c 2f 61 3e 20 0a 73 74 61 74 65 6d 65 6e 74 2e  </a> .statement.
5590: 20 20 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69    </p>.}...Secti
55a0: 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47 47  on {CREATE TRIGG
55b0: 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65  ER} createtrigge
55c0: 72 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  r..Syntax {sql-s
55d0: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 52 45 41  tatement} {.CREA
55e0: 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f  TE [TEMP | TEMPO
55f0: 52 41 52 59 5d 20 54 52 49 47 47 45 52 20 3c 74  RARY] TRIGGER <t
5600: 72 69 67 67 65 72 2d 6e 61 6d 65 3e 20 5b 20 42  rigger-name> [ B
5610: 45 46 4f 52 45 20 7c 20 41 46 54 45 52 20 5d 0a  EFORE | AFTER ].
5620: 3c 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74 3e  <database-event>
5630: 20 4f 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e   ON [<database-n
5640: 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
5650: 61 6d 65 3e 0a 3c 74 72 69 67 67 65 72 2d 61 63  ame>.<trigger-ac
5660: 74 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20  tion>.}..Syntax 
5670: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
5680: 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50 20 7c  {.CREATE [TEMP |
5690: 20 54 45 4d 50 4f 52 41 52 59 5d 20 54 52 49 47   TEMPORARY] TRIG
56a0: 47 45 52 20 3c 74 72 69 67 67 65 72 2d 6e 61 6d  GER <trigger-nam
56b0: 65 3e 20 49 4e 53 54 45 41 44 20 4f 46 0a 3c 64  e> INSTEAD OF.<d
56c0: 61 74 61 62 61 73 65 2d 65 76 65 6e 74 3e 20 4f  atabase-event> O
56d0: 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  N [<database-nam
56e0: 65 3e 20 2e 5d 20 3c 76 69 65 77 2d 6e 61 6d 65  e> .] <view-name
56f0: 3e 0a 3c 74 72 69 67 67 65 72 2d 61 63 74 69 6f  >.<trigger-actio
5700: 6e 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 64 61  n>.}..Syntax {da
5710: 74 61 62 61 73 65 2d 65 76 65 6e 74 7d 20 7b 0a  tabase-event} {.
5720: 44 45 4c 45 54 45 20 7c 20 0a 49 4e 53 45 52 54  DELETE | .INSERT
5730: 20 7c 20 0a 55 50 44 41 54 45 20 7c 20 0a 55 50   | .UPDATE | .UP
5740: 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
5750: 6c 69 73 74 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20  list>.}..Syntax 
5760: 7b 74 72 69 67 67 65 72 2d 61 63 74 69 6f 6e 7d  {trigger-action}
5770: 20 7b 0a 5b 20 46 4f 52 20 45 41 43 48 20 52 4f   {.[ FOR EACH RO
5780: 57 20 7c 20 46 4f 52 20 45 41 43 48 20 53 54 41  W | FOR EACH STA
5790: 54 45 4d 45 4e 54 20 5d 20 5b 20 57 48 45 4e 20  TEMENT ] [ WHEN 
57a0: 3c 65 78 70 72 65 73 73 69 6f 6e 3e 20 5d 20 0a  <expression> ] .
57b0: 42 45 47 49 4e 20 0a 20 20 3c 74 72 69 67 67 65  BEGIN .  <trigge
57c0: 72 2d 73 74 65 70 3e 20 3b 20 5b 20 3c 74 72 69  r-step> ; [ <tri
57d0: 67 67 65 72 2d 73 74 65 70 3e 20 3b 20 5d 2a 0a  gger-step> ; ]*.
57e0: 45 4e 44 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 74  END.}..Syntax {t
57f0: 72 69 67 67 65 72 2d 73 74 65 70 7d 20 7b 0a 3c  rigger-step} {.<
5800: 75 70 64 61 74 65 2d 73 74 61 74 65 6d 65 6e 74  update-statement
5810: 3e 20 7c 20 3c 69 6e 73 65 72 74 2d 73 74 61 74  > | <insert-stat
5820: 65 6d 65 6e 74 3e 20 7c 20 0a 3c 64 65 6c 65 74  ement> | .<delet
5830: 65 2d 73 74 61 74 65 6d 65 6e 74 3e 20 7c 20 3c  e-statement> | <
5840: 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74  select-statement
5850: 3e 20 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  > .}..puts {.<p>
5860: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
5870: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
5880: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
5890: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
58a0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 54 72  abase schema. Tr
58b0: 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62  iggers are datab
58c0: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 28  ase operations (
58d0: 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 61  the <i>trigger-a
58e0: 63 74 69 6f 6e 3c 2f 69 3e 29 20 0a 74 68 61 74  ction</i>) .that
58f0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
5900: 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65  ly performed whe
5910: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64 61  n a specified da
5920: 74 61 62 61 73 65 20 65 76 65 6e 74 20 28 74 68  tabase event (th
5930: 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 65 76  e.<i>database-ev
5940: 65 6e 74 3c 2f 69 3e 29 20 6f 63 63 75 72 73 2e  ent</i>) occurs.
5950: 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 74 72 69    </p>..<p>A tri
5960: 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65 63  gger may be spec
5970: 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77 68  ified to fire wh
5980: 65 6e 65 76 65 72 20 61 20 44 45 4c 45 54 45 2c  enever a DELETE,
5990: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
59a0: 45 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61  E of a.particula
59b0: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
59c0: 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e   occurs, or when
59d0: 65 76 65 72 20 61 6e 20 55 50 44 41 54 45 20 6f  ever an UPDATE o
59e0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 73 70  f one or more.sp
59f0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20  ecified columns 
5a00: 6f 66 20 61 20 74 61 62 6c 65 20 61 72 65 20 75  of a table are u
5a10: 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  pdated.</p>..<p>
5a20: 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c  At this time SQL
5a30: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c  ite supports onl
5a40: 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74  y FOR EACH ROW t
5a50: 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52  riggers, not FOR
5a60: 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20   EACH.STATEMENT 
5a70: 74 72 69 67 67 65 72 73 2e 20 48 65 6e 63 65 20  triggers. Hence 
5a80: 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69  explicitly speci
5a90: 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52  fying FOR EACH R
5aa0: 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20  OW is optional. 
5ab0: 20 46 4f 52 0a 45 41 43 48 20 52 4f 57 20 69 6d   FOR.EACH ROW im
5ac0: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53  plies that the S
5ad0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
5ae0: 65 63 69 66 69 65 64 20 61 73 20 3c 69 3e 74 72  ecified as <i>tr
5af0: 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e 20  igger-steps</i> 
5b00: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
5b10: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
5b20: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
5b30: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
5b40: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
5b50: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
5b60: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
5b70: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
5b80: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
5b90: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42   fire.</p>..<p>B
5ba0: 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61  oth the WHEN cla
5bb0: 75 73 65 20 61 6e 64 20 74 68 65 20 3c 69 3e 74  use and the <i>t
5bc0: 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e  rigger-steps</i>
5bd0: 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d   may access elem
5be0: 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77  ents of .the row
5bf0: 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c   being inserted,
5c00: 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61   deleted or upda
5c10: 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65  ted using refere
5c20: 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  nces of the form
5c30: 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e   ."NEW.<i>column
5c40: 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22  -name</i>" and "
5c50: 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  OLD.<i>column-na
5c60: 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c  me</i>", where.<
5c70: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
5c80: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
5c90: 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74   a column from t
5ca0: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
5cb0: 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73  e trigger.is ass
5cc0: 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 4f 4c  ociated with. OL
5cd0: 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65  D and NEW refere
5ce0: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  nces may only be
5cf0: 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72   used in trigger
5d00: 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67 65 72 2d  s on.<i>trigger-
5d10: 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f 72 20 77  event</i>s for w
5d20: 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65  hich they are re
5d30: 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f  levant, as follo
5d40: 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  ws:</p>..<table 
5d50: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
5d60: 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74  ding=10>.<tr>.<t
5d70: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
5d80: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
5d90: 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54  th=120><i>INSERT
5da0: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
5db0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72  lign="top">NEW r
5dc0: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
5dd0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
5de0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
5df0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
5e00: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
5e10: 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  UPDATE</i></td>.
5e20: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
5e30: 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66  >NEW and OLD ref
5e40: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
5e50: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  d</td>.</tr>.<tr
5e60: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
5e70: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
5e80: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45   width=120><i>DE
5e90: 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  LETE</i></td>.<t
5ea0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f  d valign="top">O
5eb0: 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  LD references ar
5ec0: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
5ed0: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e  r>.</table>.</p>
5ee0: 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45 4e 20 63  ..<p>If a WHEN c
5ef0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
5f00: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
5f10: 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
5f20: 61 73 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74  as <i>trigger-st
5f30: 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f 6e 6c 79  eps</i> are only
5f40: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f   executed for ro
5f50: 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
5f60: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
5f70: 74 72 75 65 2e 20 49 66 20 6e 6f 20 57 48 45 4e  true. If no WHEN
5f80: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
5f90: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
5fa0: 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78 65 63  tements are exec
5fb0: 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77  uted for all row
5fc0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  s.</p>..<p>The s
5fd0: 70 65 63 69 66 69 65 64 20 3c 69 3e 74 72 69 67  pecified <i>trig
5fe0: 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20 64 65 74  ger-time</i> det
5ff0: 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65  ermines when the
6000: 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70   <i>trigger-step
6010: 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65 20 65 78  s</i>.will be ex
6020: 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65 20  ecuted relative 
6030: 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e  to the insertion
6040: 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f  , modification o
6050: 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65  r removal of the
6060: 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77 2e  .associated row.
6070: 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 4f 4e 20 43  </p>..<p>An ON C
6080: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6d  ONFLICT clause m
6090: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
60a0: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50  as part of an UP
60b0: 44 41 54 45 20 6f 72 20 49 4e 53 45 52 54 0a 3c  DATE or INSERT.<
60c0: 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70 3c 2f  i>trigger-step</
60d0: 69 3e 2e 20 48 6f 77 65 76 65 72 20 69 66 20 61  i>. However if a
60e0: 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  n ON CONFLICT cl
60f0: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
6100: 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68  d as part of .th
6110: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
6120: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
6130: 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 74 68  to fire, then th
6140: 69 73 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  is conflict hand
6150: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 69 73 20 75  ling.policy is u
6160: 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e  sed instead.</p>
6170: 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73 20 61 72  ..<p>Triggers ar
6180: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
6190: 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65  dropped when the
61a0: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 79   table that they
61b0: 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64   are .associated
61c0: 20 77 69 74 68 20 69 73 20 64 72 6f 70 70 65 64   with is dropped
61d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65  .</p>..<p>Trigge
61e0: 72 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  rs may be create
61f0: 64 20 6f 6e 20 76 69 65 77 73 2c 20 61 73 20 77  d on views, as w
6200: 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20  ell as ordinary 
6210: 74 61 62 6c 65 73 2c 20 62 79 20 73 70 65 63 69  tables, by speci
6220: 66 79 69 6e 67 0a 49 4e 53 54 45 41 44 20 4f 46  fying.INSTEAD OF
6230: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
6240: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
6250: 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  . If one or more
6260: 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44   ON INSERT, ON D
6270: 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41  ELETE.or ON UPDA
6280: 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20  TE triggers are 
6290: 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65  defined on a vie
62a0: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  w, then it is no
62b0: 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 65 78  t an error to ex
62c0: 65 63 75 74 65 0a 61 6e 20 49 4e 53 45 52 54 2c  ecute.an INSERT,
62d0: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
62e0: 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74  E statement on t
62f0: 68 65 20 76 69 65 77 2c 20 72 65 73 70 65 63 74  he view, respect
6300: 69 76 65 6c 79 2e 20 54 68 65 72 65 61 66 74 65  ively. Thereafte
6310: 72 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20  r,.executing an 
6320: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
6330: 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20  r UPDATE on the 
6340: 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20  view causes the 
6350: 61 73 73 6f 63 69 61 74 65 64 0a 20 20 74 72 69  associated.  tri
6360: 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 54  ggers to fire. T
6370: 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75  he real tables u
6380: 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69  nderlying the vi
6390: 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66  ew are not modif
63a0: 69 65 64 0a 20 20 28 65 78 63 65 70 74 20 70 6f  ied.  (except po
63b0: 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c  ssibly explicitl
63c0: 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20  y, by a trigger 
63d0: 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c  program).</p>..<
63e0: 70 3e 3c 62 3e 45 78 61 6d 70 6c 65 3a 3c 2f 62  p><b>Example:</b
63f0: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 73 75 6d 69  ></p>..<p>Assumi
6400: 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72  ng that customer
6410: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
6420: 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74  red in the "cust
6430: 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e  omers" table, an
6440: 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63  d.that order rec
6450: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
6460: 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20  in the "orders" 
6470: 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  table, the follo
6480: 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73  wing trigger.ens
6490: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
64a0: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
64b0: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
64c0: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
64d0: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
64e0: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 7d  r address:</p>.}
64f0: 0a 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54  .Example {.CREAT
6500: 45 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65  E TRIGGER update
6510: 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73  _customer_addres
6520: 73 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72  s UPDATE OF addr
6530: 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73  ess ON customers
6540: 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50   .  BEGIN.    UP
6550: 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20  DATE orders SET 
6560: 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64  address = new.ad
6570: 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74  dress WHERE cust
6580: 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e  omer_name = old.
6590: 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 0a 70  name;.  END;.}.p
65a0: 75 74 73 20 7b 0a 3c 70 3e 57 69 74 68 20 74 68  uts {.<p>With th
65b0: 69 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61  is trigger insta
65c0: 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20  lled, executing 
65d0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f  the statement:</
65e0: 70 3e 0a 7d 0a 0a 45 78 61 6d 70 6c 65 20 7b 0a  p>.}..Example {.
65f0: 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73  UPDATE customers
6600: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
6610: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
6620: 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a  E name = 'Jack J
6630: 6f 6e 65 73 27 3b 0a 7d 0a 70 75 74 73 20 7b 0a  ones';.}.puts {.
6640: 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f  <p>causes the fo
6650: 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75  llowing to be au
6660: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63  tomatically exec
6670: 75 74 65 64 3a 3c 2f 70 3e 0a 7d 0a 45 78 61 6d  uted:</p>.}.Exam
6680: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64  ple {.UPDATE ord
6690: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
66a0: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
66b0: 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61  HERE customer_na
66c0: 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73  me = 'Jack Jones
66d0: 27 3b 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  ';.}..puts {.<p>
66e0: 4e 6f 74 65 20 74 68 61 74 20 63 75 72 72 65 6e  Note that curren
66f0: 74 6c 79 2c 20 74 72 69 67 67 65 72 73 20 6d 61  tly, triggers ma
6700: 79 20 62 65 68 61 76 65 20 6f 64 64 6c 79 20 77  y behave oddly w
6710: 68 65 6e 20 63 72 65 61 74 65 64 20 6f 6e 20 74  hen created on t
6720: 61 62 6c 65 73 0a 20 20 77 69 74 68 20 49 4e 54  ables.  with INT
6730: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
6740: 20 66 69 65 6c 64 73 2e 20 49 66 20 61 20 42 45   fields. If a BE
6750: 46 4f 52 45 20 74 72 69 67 67 65 72 20 70 72 6f  FORE trigger pro
6760: 67 72 61 6d 20 6d 6f 64 69 66 69 65 73 20 74 68  gram modifies th
6770: 65 20 0a 20 20 49 4e 54 45 47 45 52 20 50 52 49  e .  INTEGER PRI
6780: 4d 41 52 59 20 4b 45 59 20 66 69 65 6c 64 20 6f  MARY KEY field o
6790: 66 20 61 20 72 6f 77 20 74 68 61 74 20 77 69 6c  f a row that wil
67a0: 6c 20 62 65 20 73 75 62 73 65 71 75 65 6e 74 6c  l be subsequentl
67b0: 79 20 75 70 64 61 74 65 64 20 62 79 20 74 68 65  y updated by the
67c0: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  .  statement tha
67d0: 74 20 63 61 75 73 65 73 20 74 68 65 20 74 72 69  t causes the tri
67e0: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
67f0: 65 6e 20 74 68 65 20 75 70 64 61 74 65 20 6d 61  en the update ma
6800: 79 20 6e 6f 74 20 6f 63 63 75 72 2e 20 0a 20 20  y not occur. .  
6810: 54 68 65 20 77 6f 72 6b 61 72 6f 75 6e 64 20 69  The workaround i
6820: 73 20 74 6f 20 64 65 63 6c 61 72 65 20 74 68 65  s to declare the
6830: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 50 52   table with a PR
6840: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
6850: 20 69 6e 73 74 65 61 64 0a 20 20 6f 66 20 61 6e   instead.  of an
6860: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
6870: 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e   KEY column.</p>
6880: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 41 20  .}..puts {.<p>A 
6890: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
68a0: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
68b0: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
68c0: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
68d0: 6d 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  m, with the foll
68e0: 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e  owing syntax</p>
68f0: 20 0a 7d 0a 53 79 6e 74 61 78 20 7b 72 61 69 73   .}.Syntax {rais
6900: 65 2d 66 75 6e 63 74 69 6f 6e 7d 20 7b 0a 52 41  e-function} {.RA
6910: 49 53 45 20 28 20 41 42 4f 52 54 2c 20 3c 65 72  ISE ( ABORT, <er
6920: 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20 29 20 7c  ror-message> ) |
6930: 20 0a 52 41 49 53 45 20 28 20 46 41 49 4c 2c 20   .RAISE ( FAIL, 
6940: 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20  <error-message> 
6950: 29 20 7c 20 0a 52 41 49 53 45 20 28 20 52 4f 4c  ) | .RAISE ( ROL
6960: 4c 42 41 43 4b 2c 20 3c 65 72 72 6f 72 2d 6d 65  LBACK, <error-me
6970: 73 73 61 67 65 3e 20 29 20 7c 20 0a 52 41 49 53  ssage> ) | .RAIS
6980: 45 20 28 20 49 47 4e 4f 52 45 20 29 0a 7d 0a 70  E ( IGNORE ).}.p
6990: 75 74 73 20 7b 0a 3c 70 3e 57 68 65 6e 20 6f 6e  uts {.<p>When on
69a0: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 74  e of the first t
69b0: 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61  hree forms is ca
69c0: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67  lled during trig
69d0: 67 65 72 2d 70 72 6f 67 72 61 6d 20 65 78 65 63  ger-program exec
69e0: 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69  ution, the speci
69f0: 66 69 65 64 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  fied ON CONFLICT
6a00: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70   processing is p
6a10: 65 72 66 6f 72 6d 65 64 20 28 65 69 74 68 65 72  erformed (either
6a20: 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f 72 20   ABORT, FAIL or 
6a30: 0a 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20  . ROLLBACK) and 
6a40: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
6a50: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 20 41 6e  y terminates. An
6a60: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
6a70: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
6a80: 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
6a90: 74 68 65 20 75 73 65 72 2c 20 61 6c 6f 6e 67 20  the user, along 
6aa0: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
6ab0: 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
6ac0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 52  .</p>..<p>When R
6ad0: 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20  AISE(IGNORE) is 
6ae0: 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61  called, the rema
6af0: 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72  inder of the cur
6b00: 72 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f  rent trigger pro
6b10: 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d  gram,.the statem
6b20: 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20  ent that caused 
6b30: 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
6b40: 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61  ram to execute a
6b50: 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  nd any subsequen
6b60: 74 0a 20 20 20 20 74 72 69 67 67 65 72 20 70 72  t.    trigger pr
6b70: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c  ograms that woul
6b80: 64 20 6f 66 20 62 65 65 6e 20 65 78 65 63 75 74  d of been execut
6b90: 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64  ed are abandoned
6ba0: 2e 20 4e 6f 20 64 61 74 61 62 61 73 65 0a 20 20  . No database.  
6bb0: 20 20 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f    changes are ro
6bc0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 49 66 20 74  lled back.  If t
6bd0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
6be0: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
6bf0: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 20 20 20  gger program.   
6c00: 20 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69   to execute is i
6c10: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
6c20: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
6c30: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
6c40: 65 72 20 70 72 6f 67 72 61 6d 0a 20 20 20 20 72  er program.    r
6c50: 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e  esumes execution
6c60: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
6c70: 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74  g of the next st
6c80: 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69  ep..</p>..<p>Tri
6c90: 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65  ggers are remove
6ca0: 64 20 75 73 69 6e 67 20 74 68 65 20 3c 61 20 68  d using the <a h
6cb0: 72 65 66 3d 22 23 64 72 6f 70 74 72 69 67 67 65  ref="#droptrigge
6cc0: 72 22 3e 44 52 4f 50 20 54 52 49 47 47 45 52 3c  r">DROP TRIGGER<
6cd0: 2f 61 3e 0a 73 74 61 74 65 6d 65 6e 74 2e 20 20  /a>.statement.  
6ce0: 4e 6f 6e 2d 74 65 6d 70 6f 72 61 72 79 20 74 72  Non-temporary tr
6cf0: 69 67 67 65 72 73 20 63 61 6e 6e 6f 74 20 62 65  iggers cannot be
6d00: 20 61 64 64 65 64 20 6f 6e 20 61 20 74 61 62 6c   added on a tabl
6d10: 65 20 69 6e 20 61 6e 20 0a 61 74 74 61 63 68 65  e in an .attache
6d20: 64 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  d database.</p>.
6d30: 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  }...Section {CRE
6d40: 41 54 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74  ATE VIEW} {creat
6d50: 65 76 69 65 77 7d 0a 0a 53 79 6e 74 61 78 20 7b  eview}..Syntax {
6d60: 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43  sql-command} {.C
6d70: 52 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45  REATE [TEMP | TE
6d80: 4d 50 4f 52 41 52 59 5d 20 56 49 45 57 20 5b 3c  MPORARY] VIEW [<
6d90: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 2e 5d  database-name>.]
6da0: 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 20 41 53 20   <view-name> AS 
6db0: 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e  <select-statemen
6dc0: 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  t>.}..puts {.<p>
6dd0: 54 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20  The CREATE VIEW 
6de0: 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20  command assigns 
6df0: 61 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d  a name to a pre-
6e00: 70 61 63 6b 61 67 65 64 20 0a 3c 61 20 68 72 65  packaged .<a hre
6e10: 66 3d 22 23 73 65 6c 65 63 74 22 3e 53 45 4c 45  f="#select">SELE
6e20: 43 54 3c 2f 61 3e 0a 73 74 61 74 65 6d 65 6e 74  CT</a>.statement
6e30: 2e 20 20 4f 6e 63 65 20 74 68 65 20 76 69 65 77  .  Once the view
6e40: 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74 20   is created, it 
6e50: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74  can be used in t
6e60: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f  he FROM clause.o
6e70: 66 20 61 6e 6f 74 68 65 72 20 53 45 4c 45 43 54  f another SELECT
6e80: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
6e90: 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a  able name..</p>.
6ea0: 0a 3c 70 3e 49 66 20 74 68 65 20 22 54 45 4d 50  .<p>If the "TEMP
6eb0: 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22  " or "TEMPORARY"
6ec0: 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20   keyword occurs 
6ed0: 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41  in between "CREA
6ee0: 54 45 22 0a 61 6e 64 20 22 54 41 42 4c 45 22 20  TE".and "TABLE" 
6ef0: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
6f00: 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 69  hat is created i
6f10: 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20 74  s only visible t
6f20: 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74 68  o the.process th
6f30: 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64 61  at opened the da
6f40: 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61 75  tabase and is au
6f50: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
6f60: 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74  ted when.the dat
6f70: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 2e  abase is closed.
6f80: 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20 61 20 3c  </p>..<p> If a <
6f90: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 69  database-name> i
6fa0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
6fb0: 6e 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72  n the view is cr
6fc0: 65 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e 61  eated in .the na
6fd0: 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 49 74  med database. It
6fe0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
6ff0: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 3c  specify both a <
7000: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 0a 61  database-name>.a
7010: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
7020: 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  ord, unless the 
7030: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
7040: 69 73 20 22 74 65 6d 70 22 2e 20 49 66 20 6e 6f  is "temp". If no
7050: 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69  .database name i
7060: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
7070: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
7080: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
7090: 2c 0a 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  ,.the table is c
70a0: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
70b0: 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  in database.</p>
70c0: 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e 6f 74 20  ..<p>You cannot 
70d0: 43 4f 50 59 2c 20 44 45 4c 45 54 45 2c 20 49 4e  COPY, DELETE, IN
70e0: 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 61  SERT or UPDATE a
70f0: 20 76 69 65 77 2e 20 20 56 69 65 77 73 20 61 72   view.  Views ar
7100: 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20  e read-only .in 
7110: 53 51 4c 69 74 65 2e 20 20 48 6f 77 65 76 65 72  SQLite.  However
7120: 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20  , in many cases 
7130: 79 6f 75 20 63 61 6e 20 75 73 65 20 61 20 3c 61  you can use a <a
7140: 20 68 72 65 66 3d 22 23 63 72 65 61 74 65 74 72   href="#createtr
7150: 69 67 67 65 72 22 3e 0a 54 52 49 47 47 45 52 3c  igger">.TRIGGER<
7160: 2f 61 3e 20 6f 6e 20 74 68 65 20 76 69 65 77 20  /a> on the view 
7170: 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 74 68  to accomplish th
7180: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 56  e same thing.  V
7190: 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  iews are removed
71a0: 20 0a 77 69 74 68 20 74 68 65 20 3c 61 20 68 72   .with the <a hr
71b0: 65 66 3d 22 23 64 72 6f 70 76 69 65 77 22 3e 44  ef="#dropview">D
71c0: 52 4f 50 20 56 49 45 57 3c 2f 61 3e 20 0a 63 6f  ROP VIEW</a> .co
71d0: 6d 6d 61 6e 64 2e 20 20 4e 6f 6e 2d 74 65 6d 70  mmand.  Non-temp
71e0: 6f 72 61 72 79 20 76 69 65 77 73 20 63 61 6e 6e  orary views cann
71f0: 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e  ot be created on
7200: 20 74 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74   tables in an at
7210: 74 61 63 68 65 64 20 0a 64 61 74 61 62 61 73 65  tached .database
7220: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
7230: 6e 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65 0a  n DELETE delete.
7240: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61  .Syntax {sql-sta
7250: 74 65 6d 65 6e 74 7d 20 7b 0a 44 45 4c 45 54 45  tement} {.DELETE
7260: 20 46 52 4f 4d 20 5b 3c 64 61 74 61 62 61 73 65   FROM [<database
7270: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
7280: 2d 6e 61 6d 65 3e 20 5b 57 48 45 52 45 20 3c 65  -name> [WHERE <e
7290: 78 70 72 3e 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a  xpr>].}..puts {.
72a0: 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20 63 6f  <p>The DELETE co
72b0: 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  mmand is used to
72c0: 20 72 65 6d 6f 76 65 20 72 65 63 6f 72 64 73 20   remove records 
72d0: 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e 0a 54 68  from a table..Th
72e0: 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73  e command consis
72f0: 74 73 20 6f 66 20 74 68 65 20 22 44 45 4c 45 54  ts of the "DELET
7300: 45 20 46 52 4f 4d 22 20 6b 65 79 77 6f 72 64 73  E FROM" keywords
7310: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 74 68 65   followed by.the
7320: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
7330: 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20 72 65  le from which re
7340: 63 6f 72 64 73 20 61 72 65 20 74 6f 20 62 65 20  cords are to be 
7350: 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  removed..</p>..<
7360: 70 3e 57 69 74 68 6f 75 74 20 61 20 57 48 45 52  p>Without a WHER
7370: 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f  E clause, all ro
7380: 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ws of the table 
7390: 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 49 66 20  are removed..If 
73a0: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
73b0: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  s supplied, then
73c0: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73   only those rows
73d0: 20 74 68 61 74 20 6d 61 74 63 68 0a 74 68 65 20   that match.the 
73e0: 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65 20 72  expression are r
73f0: 65 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 0a  emoved.</p>.}...
7400: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
7410: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
7420: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f  ..Syntax {sql-co
7430: 6d 6d 61 6e 64 7d 20 7b 0a 44 45 54 41 43 48 20  mmand} {.DETACH 
7440: 5b 44 41 54 41 42 41 53 45 5d 20 3c 64 61 74 61  [DATABASE] <data
7450: 62 61 73 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75  base-name>.}..pu
7460: 74 73 20 7b 0a 3c 70 3e 54 68 69 73 20 73 74 61  ts {.<p>This sta
7470: 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20  tement detaches 
7480: 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61  an additional da
7490: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
74a0: 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74  n previously .at
74b0: 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65  tached using the
74c0: 20 3c 61 20 68 72 65 66 3d 22 23 61 74 74 61 63   <a href="#attac
74d0: 68 22 3e 41 54 54 41 43 48 20 44 41 54 41 42 41  h">ATTACH DATABA
74e0: 53 45 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e 74  SE</a> statement
74f0: 2e 20 20 49 74 0a 69 73 20 70 6f 73 73 69 62 6c  .  It.is possibl
7500: 65 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61  e to have the sa
7510: 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  me database file
7520: 20 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70   attached multip
7530: 6c 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a  le times using .
7540: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c  different names,
7550: 20 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f   and detaching o
7560: 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  ne connection to
7570: 20 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61   a file will lea
7580: 76 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69  ve the .others i
7590: 6e 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ntact.</p>..<p>T
75a0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
75b0: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
75c0: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
75d0: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
75e0: 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63  ion.</p>.}...Sec
75f0: 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e 44 45 58  tion {DROP INDEX
7600: 7d 20 64 72 6f 70 69 6e 64 65 78 0a 0a 53 79 6e  } dropindex..Syn
7610: 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64  tax {sql-command
7620: 7d 20 7b 0a 44 52 4f 50 20 49 4e 44 45 58 20 5b  } {.DROP INDEX [
7630: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
7640: 2e 5d 20 3c 69 6e 64 65 78 2d 6e 61 6d 65 3e 0a  .] <index-name>.
7650: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
7660: 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74   DROP INDEX stat
7670: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e  ement removes an
7680: 20 69 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74   index added.wit
7690: 68 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  h the <a href="#
76a0: 63 72 65 61 74 65 69 6e 64 65 78 22 3e 0a 43 52  createindex">.CR
76b0: 45 41 54 45 20 49 4e 44 45 58 3c 2f 61 3e 20 73  EATE INDEX</a> s
76c0: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 69  tatement.  The i
76d0: 6e 64 65 78 20 6e 61 6d 65 64 20 69 73 20 63 6f  ndex named is co
76e0: 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64  mpletely removed
76f0: 20 66 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20   from.the disk. 
7700: 20 54 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f   The only way to
7710: 20 72 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64   recover the ind
7720: 65 78 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72  ex is to reenter
7730: 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
7740: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
7750: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  mmand.</p>..<p>T
7760: 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74  he DROP INDEX st
7770: 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
7780: 20 72 65 64 75 63 65 20 74 68 65 20 73 69 7a 65   reduce the size
7790: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
77a0: 20 0a 66 69 6c 65 2e 20 20 45 6d 70 74 79 20 73   .file.  Empty s
77b0: 70 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61  pace in the data
77c0: 62 61 73 65 20 69 73 20 72 65 74 61 69 6e 65 64  base is retained
77d0: 20 66 6f 72 20 6c 61 74 65 72 20 49 4e 53 45 52   for later INSER
77e0: 54 73 2e 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20  Ts.  To .remove 
77f0: 66 72 65 65 20 73 70 61 63 65 20 69 6e 20 74 68  free space in th
7800: 65 20 64 61 74 61 62 61 73 65 2c 20 75 73 65 20  e database, use 
7810: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 76 61  the <a href="#va
7820: 63 75 75 6d 22 3e 56 41 43 55 55 4d 3c 2f 61 3e  cuum">VACUUM</a>
7830: 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 7d   .command.</p>.}
7840: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ...Section {DROP
7850: 20 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c   TABLE} droptabl
7860: 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63  e..Syntax {sql-c
7870: 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 54  ommand} {.DROP T
7880: 41 42 4c 45 20 5b 3c 64 61 74 61 62 61 73 65 2d  ABLE [<database-
7890: 6e 61 6d 65 3e 2e 5d 20 3c 74 61 62 6c 65 2d 6e  name>.] <table-n
78a0: 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ame>.}..puts {.<
78b0: 70 3e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45  p>The DROP TABLE
78c0: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
78d0: 65 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64  es a table added
78e0: 20 77 69 74 68 20 74 68 65 20 3c 61 20 68 72 65   with the <a hre
78f0: 66 3d 0a 22 23 63 72 65 61 74 65 74 61 62 6c 65  f=."#createtable
7900: 22 3e 43 52 45 41 54 45 20 54 41 42 4c 45 3c 2f  ">CREATE TABLE</
7910: 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  a> statement.  T
7920: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
7930: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
7940: 61 6d 65 2e 20 20 49 74 20 69 73 20 63 6f 6d 70  ame.  It is comp
7950: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
7960: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
7970: 20 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20   schema and the 
7980: 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65  .disk file.  The
7990: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
79a0: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 41 6c  e recovered.  Al
79b0: 6c 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  l indices associ
79c0: 61 74 65 64 20 0a 77 69 74 68 20 74 68 65 20 74  ated .with the t
79d0: 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65  able are also de
79e0: 6c 65 74 65 64 2e 20 20 4e 6f 6e 2d 74 65 6d 70  leted.  Non-temp
79f0: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 69 6e 20  orary tables in 
7a00: 61 6e 20 61 74 74 61 63 68 65 64 20 0a 64 61 74  an attached .dat
7a10: 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  abase cannot be 
7a20: 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  dropped.</p>..<p
7a30: 3e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20  >The DROP TABLE 
7a40: 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
7a50: 6f 74 20 72 65 64 75 63 65 20 74 68 65 20 73 69  ot reduce the si
7a60: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
7a70: 73 65 20 0a 66 69 6c 65 2e 20 20 45 6d 70 74 79  se .file.  Empty
7a80: 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61   space in the da
7a90: 74 61 62 61 73 65 20 69 73 20 72 65 74 61 69 6e  tabase is retain
7aa0: 65 64 20 66 6f 72 20 6c 61 74 65 72 20 49 4e 53  ed for later INS
7ab0: 45 52 54 73 2e 20 20 54 6f 20 0a 72 65 6d 6f 76  ERTs.  To .remov
7ac0: 65 20 66 72 65 65 20 73 70 61 63 65 20 69 6e 20  e free space in 
7ad0: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 75 73  the database, us
7ae0: 65 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  e the <a href="#
7af0: 76 61 63 75 75 6d 22 3e 56 41 43 55 55 4d 3c 2f  vacuum">VACUUM</
7b00: 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  a> .command.</p>
7b10: 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 52  .}...Section {DR
7b20: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
7b30: 74 72 69 67 67 65 72 0a 53 79 6e 74 61 78 20 7b  trigger.Syntax {
7b40: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
7b50: 0a 44 52 4f 50 20 54 52 49 47 47 45 52 20 5b 3c  .DROP TRIGGER [<
7b60: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
7b70: 5d 20 3c 74 72 69 67 67 65 72 2d 6e 61 6d 65 3e  ] <trigger-name>
7b80: 0a 7d 0a 70 75 74 73 20 7b 20 0a 3c 70 3e 54 68  .}.puts { .<p>Th
7b90: 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73  e DROP TRIGGER s
7ba0: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
7bb0: 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74   a trigger creat
7bc0: 65 64 20 62 79 20 74 68 65 20 0a 3c 61 20 68 72  ed by the .<a hr
7bd0: 65 66 3d 22 23 63 72 65 61 74 65 74 72 69 67 67  ef="#createtrigg
7be0: 65 72 22 3e 43 52 45 41 54 45 20 54 52 49 47 47  er">CREATE TRIGG
7bf0: 45 52 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e 74  ER</a> statement
7c00: 2e 20 20 54 68 65 20 74 72 69 67 67 65 72 20 69  .  The trigger i
7c10: 73 20 0a 64 65 6c 65 74 65 64 20 66 72 6f 6d 20  s .deleted from 
7c20: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
7c30: 65 6d 61 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  ema. Note that t
7c40: 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
7c50: 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f 70 70  matically .dropp
7c60: 65 64 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f  ed when the asso
7c70: 63 69 61 74 65 64 20 74 61 62 6c 65 20 69 73 20  ciated table is 
7c80: 64 72 6f 70 70 65 64 2e 20 20 4e 6f 6e 2d 74 65  dropped.  Non-te
7c90: 6d 70 6f 72 61 72 79 20 74 72 69 67 67 65 72 73  mporary triggers
7ca0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 64 72 6f 70   .cannot be drop
7cb0: 70 65 64 20 6f 6e 20 61 74 74 61 63 68 65 64 20  ped on attached 
7cc0: 74 61 62 6c 65 73 2e 3c 2f 70 3e 0a 7d 0a 0a 0a  tables.</p>.}...
7cd0: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49  Section {DROP VI
7ce0: 45 57 7d 20 64 72 6f 70 76 69 65 77 0a 0a 53 79  EW} dropview..Sy
7cf0: 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e  ntax {sql-comman
7d00: 64 7d 20 7b 0a 44 52 4f 50 20 56 49 45 57 20 3c  d} {.DROP VIEW <
7d10: 76 69 65 77 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75  view-name>.}..pu
7d20: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44 52 4f 50  ts {.<p>The DROP
7d30: 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 20   VIEW statement 
7d40: 72 65 6d 6f 76 65 73 20 61 20 76 69 65 77 20 63  removes a view c
7d50: 72 65 61 74 65 64 20 62 79 20 74 68 65 20 3c 61  reated by the <a
7d60: 20 68 72 65 66 3d 0a 22 23 63 72 65 61 74 65 76   href=."#createv
7d70: 69 65 77 22 3e 43 52 45 41 54 45 20 56 49 45 57  iew">CREATE VIEW
7d80: 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e 20  </a> statement. 
7d90: 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66   The name specif
7da0: 69 65 64 20 69 73 20 74 68 65 20 0a 76 69 65 77  ied is the .view
7db0: 20 6e 61 6d 65 2e 20 20 49 74 20 69 73 20 72 65   name.  It is re
7dc0: 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64  moved from the d
7dd0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
7de0: 62 75 74 20 6e 6f 20 61 63 74 75 61 6c 20 64 61  but no actual da
7df0: 74 61 20 0a 69 6e 20 74 68 65 20 75 6e 64 65 72  ta .in the under
7e00: 6c 79 69 6e 67 20 62 61 73 65 20 74 61 62 6c 65  lying base table
7e10: 73 20 69 73 20 6d 6f 64 69 66 69 65 64 2e 20 20  s is modified.  
7e20: 4e 6f 6e 2d 74 65 6d 70 6f 72 61 72 79 20 76 69  Non-temporary vi
7e30: 65 77 73 20 69 6e 20 0a 61 74 74 61 63 68 65 64  ews in .attached
7e40: 20 64 61 74 61 62 61 73 65 73 20 63 61 6e 6e 6f   databases canno
7e50: 74 20 62 65 20 64 72 6f 70 70 65 64 2e 3c 2f 70  t be dropped.</p
7e60: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 45 58  >.}...Section EX
7e70: 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 0a 0a 53  PLAIN explain..S
7e80: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
7e90: 6d 65 6e 74 7d 20 7b 0a 45 58 50 4c 41 49 4e 20  ment} {.EXPLAIN 
7ea0: 3c 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 3e 0a  <sql-statement>.
7eb0: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
7ec0: 20 45 58 50 4c 41 49 4e 20 63 6f 6d 6d 61 6e 64   EXPLAIN command
7ed0: 20 6d 6f 64 69 66 69 65 72 20 69 73 20 61 20 6e   modifier is a n
7ee0: 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65 78 74 65  on-standard exte
7ef0: 6e 73 69 6f 6e 2e 20 20 54 68 65 0a 69 64 65 61  nsion.  The.idea
7f00: 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 73 69   comes from a si
7f10: 6d 69 6c 61 72 20 63 6f 6d 6d 61 6e 64 20 66 6f  milar command fo
7f20: 75 6e 64 20 69 6e 20 50 6f 73 74 67 72 65 53 51  und in PostgreSQ
7f30: 4c 2c 20 62 75 74 20 74 68 65 20 6f 70 65 72 61  L, but the opera
7f40: 74 69 6f 6e 0a 69 73 20 63 6f 6d 70 6c 65 74 65  tion.is complete
7f50: 6c 79 20 64 69 66 66 65 72 65 6e 74 2e 3c 2f 70  ly different.</p
7f60: 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 45 58 50  >..<p>If the EXP
7f70: 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
7f80: 65 61 72 73 20 62 65 66 6f 72 65 20 61 6e 79 20  ears before any 
7f90: 6f 74 68 65 72 20 53 51 4c 69 74 65 20 53 51 4c  other SQLite SQL
7fa0: 20 63 6f 6d 6d 61 6e 64 0a 74 68 65 6e 20 69 6e   command.then in
7fb0: 73 74 65 61 64 20 6f 66 20 61 63 74 75 61 6c 6c  stead of actuall
7fc0: 79 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20  y executing the 
7fd0: 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 20 53 51 4c  command, the SQL
7fe0: 69 74 65 20 6c 69 62 72 61 72 79 20 77 69 6c 6c  ite library will
7ff0: 0a 72 65 70 6f 72 74 20 62 61 63 6b 20 74 68 65  .report back the
8000: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 76 69 72   sequence of vir
8010: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73  tual machine ins
8020: 74 72 75 63 74 69 6f 6e 73 20 69 74 20 77 6f 75  tructions it wou
8030: 6c 64 20 68 61 76 65 0a 75 73 65 64 20 74 6f 20  ld have.used to 
8040: 65 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d  execute the comm
8050: 61 6e 64 20 68 61 64 20 74 68 65 20 45 58 50 4c  and had the EXPL
8060: 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  AIN keyword not 
8070: 62 65 65 6e 20 70 72 65 73 65 6e 74 2e 0a 46 6f  been present..Fo
8080: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
8090: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 76  ormation about v
80a0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69  irtual machine i
80b0: 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 65 65 0a  nstructions see.
80c0: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 61 72 63  the <a href="arc
80d0: 68 2e 68 74 6d 6c 22 3e 61 72 63 68 69 74 65 63  h.html">architec
80e0: 74 75 72 65 20 64 65 73 63 72 69 70 74 69 6f 6e  ture description
80f0: 3c 2f 61 3e 20 6f 72 20 74 68 65 20 64 6f 63 75  </a> or the docu
8100: 6d 65 6e 74 61 74 69 6f 6e 0a 6f 6e 20 3c 61 20  mentation.on <a 
8110: 68 72 65 66 3d 22 6f 70 63 6f 64 65 2e 68 74 6d  href="opcode.htm
8120: 6c 22 3e 61 76 61 69 6c 61 62 6c 65 20 6f 70 63  l">available opc
8130: 6f 64 65 73 3c 2f 61 3e 20 66 6f 72 20 74 68 65  odes</a> for the
8140: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
8150: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
8160: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70  n expression exp
8170: 72 0a 0a 53 79 6e 74 61 78 20 7b 65 78 70 72 7d  r..Syntax {expr}
8180: 20 7b 0a 3c 65 78 70 72 3e 20 3c 62 69 6e 61 72   {.<expr> <binar
8190: 79 2d 6f 70 3e 20 3c 65 78 70 72 3e 20 7c 0a 3c  y-op> <expr> |.<
81a0: 65 78 70 72 3e 20 3c 6c 69 6b 65 2d 6f 70 3e 20  expr> <like-op> 
81b0: 3c 65 78 70 72 3e 20 5b 45 53 43 41 50 45 20 3c  <expr> [ESCAPE <
81c0: 65 78 70 72 3e 5d 20 7c 0a 3c 65 78 70 72 3e 20  expr>] |.<expr> 
81d0: 3c 67 6c 6f 62 2d 6f 70 3e 20 3c 65 78 70 72 3e  <glob-op> <expr>
81e0: 20 7c 0a 3c 75 6e 61 72 79 2d 6f 70 3e 20 3c 65   |.<unary-op> <e
81f0: 78 70 72 3e 20 7c 0a 28 20 3c 65 78 70 72 3e 20  xpr> |.( <expr> 
8200: 29 20 7c 0a 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  ) |.<column-name
8210: 3e 20 7c 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  > |.<table-name>
8220: 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e   . <column-name>
8230: 20 7c 0a 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d   |.<database-nam
8240: 65 3e 20 2e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65  e> . <table-name
8250: 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  > . <column-name
8260: 3e 20 7c 0a 3c 6c 69 74 65 72 61 6c 2d 76 61 6c  > |.<literal-val
8270: 75 65 3e 20 7c 0a 3c 66 75 6e 63 74 69 6f 6e 2d  ue> |.<function-
8280: 6e 61 6d 65 3e 20 28 20 3c 65 78 70 72 2d 6c 69  name> ( <expr-li
8290: 73 74 3e 20 7c 20 53 54 41 52 20 29 20 7c 0a 3c  st> | STAR ) |.<
82a0: 65 78 70 72 3e 20 49 53 4e 55 4c 4c 20 7c 0a 3c  expr> ISNULL |.<
82b0: 65 78 70 72 3e 20 4e 4f 54 4e 55 4c 4c 20 7c 0a  expr> NOTNULL |.
82c0: 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20 42 45 54  <expr> [NOT] BET
82d0: 57 45 45 4e 20 3c 65 78 70 72 3e 20 41 4e 44 20  WEEN <expr> AND 
82e0: 3c 65 78 70 72 3e 20 7c 0a 3c 65 78 70 72 3e 20  <expr> |.<expr> 
82f0: 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 76 61 6c 75  [NOT] IN ( <valu
8300: 65 2d 6c 69 73 74 3e 20 29 20 7c 0a 3c 65 78 70  e-list> ) |.<exp
8310: 72 3e 20 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 73  r> [NOT] IN ( <s
8320: 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e  elect-statement>
8330: 20 29 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54   ) |.<expr> [NOT
8340: 5d 20 49 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d  ] IN [<database-
8350: 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d  name> .] <table-
8360: 6e 61 6d 65 3e 20 7c 0a 28 20 3c 73 65 6c 65 63  name> |.( <selec
8370: 74 2d 73 74 61 74 65 6d 65 6e 74 3e 20 29 20 7c  t-statement> ) |
8380: 0a 43 41 53 45 20 5b 3c 65 78 70 72 3e 5d 20 4c  .CASE [<expr>] L
8390: 50 20 57 48 45 4e 20 3c 65 78 70 72 3e 20 54 48  P WHEN <expr> TH
83a0: 45 4e 20 3c 65 78 70 72 3e 20 52 50 50 4c 55 53  EN <expr> RPPLUS
83b0: 20 5b 45 4c 53 45 20 3c 65 78 70 72 3e 5d 20 45   [ELSE <expr>] E
83c0: 4e 44 0a 7d 20 7b 6c 69 6b 65 2d 6f 70 7d 20 7b  ND.} {like-op} {
83d0: 0a 4c 49 4b 45 20 7c 20 4e 4f 54 20 4c 49 4b 45  .LIKE | NOT LIKE
83e0: 0a 7d 20 7b 67 6c 6f 62 2d 6f 70 7d 20 7b 0a 47  .} {glob-op} {.G
83f0: 4c 4f 42 20 7c 20 4e 4f 54 20 47 4c 4f 42 0a 7d  LOB | NOT GLOB.}
8400: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 69 73  ..puts {.<p>This
8410: 20 73 65 63 74 69 6f 6e 20 69 73 20 64 69 66 66   section is diff
8420: 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f  erent from the o
8430: 74 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68  thers.  Most oth
8440: 65 72 20 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74  er sections of.t
8450: 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c  his document tal
8460: 6b 73 20 61 62 6f 75 74 20 61 20 70 61 72 74 69  ks about a parti
8470: 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e  cular SQL comman
8480: 64 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e  d.  This section
8490: 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61   does.not talk a
84a0: 62 6f 75 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e  bout a standalon
84b0: 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62  e command but ab
84c0: 6f 75 74 20 22 65 78 70 72 65 73 73 69 6f 6e 73  out "expressions
84d0: 22 20 77 68 69 63 68 20 61 72 65 20 0a 73 75 62  " which are .sub
84e0: 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f  components of mo
84f0: 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64  st other command
8500: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74  s.</p>..<p>SQLit
8510: 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68  e understands th
8520: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e 61  e following bina
8530: 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69 6e  ry operators, in
8540: 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67 68   order from.high
8550: 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70 72  est to lowest pr
8560: 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c  ecedence:</p>..<
8570: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
8580: 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  .<font color="#2
8590: 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a  c2cf0"><big>||.*
85a0: 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20 20      /    %.+    
85b0: 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67 74  -.&lt;&lt;   &gt
85c0: 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20 20  ;&gt;   &amp;   
85d0: 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b 3d   |.&lt;    &lt;=
85e0: 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b 3d     &gt;    &gt;=
85f0: 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20 20  .=    ==   !=   
8600: 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69 67  &lt;&gt;   </big
8610: 3e 49 4e 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66  >IN.AND   .OR</f
8620: 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ont>.</pre></blo
8630: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 53 75 70  ckquote>..<p>Sup
8640: 70 6f 72 74 65 64 20 75 6e 61 72 79 20 6f 70 65  ported unary ope
8650: 72 61 74 6f 72 73 20 61 72 65 20 74 68 65 73 65  rators are these
8660: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
8670: 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63  te><pre>.<font c
8680: 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c  olor="#2c2cf0"><
8690: 62 69 67 3e 2d 20 20 20 20 2b 20 20 20 20 21 20  big>-    +    ! 
86a0: 20 20 20 7e 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74     ~</big></font
86b0: 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
86c0: 75 6f 74 65 3e 0a 0a 3c 70 3e 41 6e 79 20 53 51  uote>..<p>Any SQ
86d0: 4c 69 74 65 20 76 61 6c 75 65 20 63 61 6e 20 62  Lite value can b
86e0: 65 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  e used as part o
86f0: 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
8700: 20 20 0a 46 6f 72 20 61 72 69 74 68 6d 65 74 69    .For arithmeti
8710: 63 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 69 6e  c operations, in
8720: 74 65 67 65 72 73 20 61 72 65 20 74 72 65 61 74  tegers are treat
8730: 65 64 20 61 73 20 69 6e 74 65 67 65 72 73 2e 0a  ed as integers..
8740: 53 74 72 69 6e 67 73 20 61 72 65 20 66 69 72 73  Strings are firs
8750: 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 72  t converted to r
8760: 65 61 6c 20 6e 75 6d 62 65 72 73 20 75 73 69 6e  eal numbers usin
8770: 67 20 3c 62 3e 61 74 6f 66 28 29 3c 2f 62 3e 2e  g <b>atof()</b>.
8780: 0a 46 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20  .For comparison 
8790: 6f 70 65 72 61 74 6f 72 73 2c 20 6e 75 6d 62 65  operators, numbe
87a0: 72 73 20 63 6f 6d 70 61 72 65 20 61 73 20 6e 75  rs compare as nu
87b0: 6d 62 65 72 73 20 61 6e 64 20 73 74 72 69 6e 67  mbers and string
87c0: 73 0a 63 6f 6d 70 61 72 65 20 75 73 69 6e 67 20  s.compare using 
87d0: 74 68 65 20 3c 62 3e 73 74 72 63 6d 70 28 29 3c  the <b>strcmp()<
87e0: 2f 62 3e 20 66 75 6e 63 74 69 6f 6e 2e 0a 4e 6f  /b> function..No
87f0: 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72  te that there ar
8800: 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73  e two variations
8810: 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61   of the equals a
8820: 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70  nd not equals.op
8830: 65 72 61 74 6f 72 73 2e 20 20 45 71 75 61 6c 73  erators.  Equals
8840: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 7d 0a   can be either}.
8850: 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20  puts "[Operator 
8860: 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
8870: 3d 3d 5d 2e 0a 54 68 65 20 6e 6f 6e 2d 65 71 75  ==]..The non-equ
8880: 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63 61 6e  als operator can
8890: 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70 65 72   be either.[Oper
88a0: 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65  ator !=] or [Ope
88b0: 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d  rator {&lt;&gt;}
88c0: 5d 2e 0a 54 68 65 20 5b 4f 70 65 72 61 74 6f 72  ]..The [Operator
88d0: 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20 69 73   ||] operator is
88e0: 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22   \"concatenate\"
88f0: 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65   - it joins toge
8900: 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73 74 72  ther.the two str
8910: 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70 65 72  ings of its oper
8920: 61 6e 64 73 2e 0a 54 68 65 20 6f 70 65 72 61 74  ands..The operat
8930: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
8940: 6f 75 74 70 75 74 73 20 74 68 65 20 72 65 6d 61  outputs the rema
8950: 69 6e 64 65 72 20 6f 66 20 69 74 73 20 6c 65 66  inder of its lef
8960: 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
8970: 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
8980: 61 6e 64 2e 3c 2f 70 3e 22 0a 70 75 74 73 20 7b  and.</p>".puts {
8990: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69 6b 65 22  ..<a name="like"
89a0: 3e 3c 2f 61 3e 0a 3c 70 3e 54 68 65 20 4c 49 4b  ></a>.<p>The LIK
89b0: 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20  E operator does 
89c0: 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 69  a pattern matchi
89d0: 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 54  ng comparison. T
89e0: 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68  he operand.to th
89f0: 65 20 72 69 67 68 74 20 63 6f 6e 74 61 69 6e 73  e right contains
8a00: 20 74 68 65 20 70 61 74 74 65 72 6e 2c 20 74 68   the pattern, th
8a10: 65 20 6c 65 66 74 20 68 61 6e 64 20 6f 70 65 72  e left hand oper
8a20: 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
8a30: 0a 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68  .string to match
8a40: 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
8a50: 74 65 72 6e 2e 20 0a 7d 0a 70 75 74 73 20 22 41  tern. .}.puts "A
8a60: 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
8a70: 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 69 6e 20  [Operator %] in 
8a80: 74 68 65 20 70 61 74 74 65 72 6e 20 6d 61 74 63  the pattern matc
8a90: 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63 65  hes any.sequence
8aa0: 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   of zero or more
8ab0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
8ac0: 68 65 20 73 74 72 69 6e 67 2e 20 20 41 6e 20 75  he string.  An u
8ad0: 6e 64 65 72 73 63 6f 72 65 0a 5b 4f 70 65 72 61  nderscore.[Opera
8ae0: 74 6f 72 20 5f 5d 20 69 6e 20 74 68 65 20 70 61  tor _] in the pa
8af0: 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e  ttern matches an
8b00: 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  y single charact
8b10: 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e 67  er in the.string
8b20: 2e 20 20 41 6e 79 20 6f 74 68 65 72 20 63 68 61  .  Any other cha
8b30: 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69  racter matches i
8b40: 74 73 65 6c 66 20 6f 72 20 69 74 27 73 20 6c 6f  tself or it's lo
8b50: 77 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65  wer/upper case.e
8b60: 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20  quivalent (i.e. 
8b70: 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65  case-insensitive
8b80: 20 6d 61 74 63 68 69 6e 67 29 2e 20 20 28 41 20   matching).  (A 
8b90: 62 75 67 3a 20 53 51 4c 69 74 65 20 6f 6e 6c 79  bug: SQLite only
8ba0: 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70 70  .understands upp
8bb0: 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66 6f  er/lower case fo
8bc0: 72 20 37 2d 62 69 74 20 4c 61 74 69 6e 20 63 68  r 7-bit Latin ch
8bd0: 61 72 61 63 74 65 72 73 2e 20 20 48 65 6e 63 65  aracters.  Hence
8be0: 20 74 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74   the.LIKE operat
8bf0: 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e 73 69  or is case sensi
8c00: 74 69 76 65 20 66 6f 72 20 38 2d 62 69 74 20 69  tive for 8-bit i
8c10: 73 6f 38 38 35 39 20 63 68 61 72 61 63 74 65 72  so8859 character
8c20: 73 20 6f 72 20 55 54 46 2d 38 0a 63 68 61 72 61  s or UTF-8.chara
8c30: 63 74 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d  cters.  For exam
8c40: 70 6c 65 2c 20 74 68 65 20 65 78 70 72 65 73 73  ple, the express
8c50: 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b  ion <b>'a'&nbsp;
8c60: 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62  LIKE&nbsp;'A'</b
8c70: 3e 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c 62  >.is TRUE but <b
8c80: 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b  >'&aelig;'&nbsp;
8c90: 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69  LIKE&nbsp;'&AEli
8ca0: 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45  g;'</b> is FALSE
8cb0: 2e 29 2e 3c 2f 70 3e 22 0a 0a 70 75 74 73 20 7b  .).</p>"..puts {
8cc0: 0a 3c 70 3e 49 66 20 74 68 65 20 6f 70 74 69 6f  .<p>If the optio
8cd0: 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
8ce0: 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
8cf0: 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  en the expressio
8d00: 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  n.following the 
8d10: 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64 20 6d  ESCAPE keyword m
8d20: 75 73 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20  ust evaluate to 
8d30: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74  a string consist
8d40: 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20  ing of.a single 
8d50: 63 68 61 72 61 63 74 65 72 2e 20 54 68 69 73 20  character. This 
8d60: 63 68 61 72 61 63 74 65 72 20 6d 61 79 20 62 65  character may be
8d70: 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b   used in the LIK
8d80: 45 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63  E pattern.to inc
8d90: 6c 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72  lude literal per
8da0: 63 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f  cent or undersco
8db0: 72 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 54  re characters. T
8dc0: 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63  he escape.charac
8dd0: 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ter followed by 
8de0: 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  a percent symbol
8df0: 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 6f 72 20  , underscore or 
8e00: 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61  itself matches a
8e10: 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74  .literal percent
8e20: 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63   symbol, undersc
8e30: 6f 72 65 20 6f 72 20 65 73 63 61 70 65 20 63 68  ore or escape ch
8e40: 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 20 73  aracter in the s
8e50: 74 72 69 6e 67 2c 0a 72 65 73 70 65 63 74 69 76  tring,.respectiv
8e60: 65 6c 79 2e 20 54 68 65 20 69 6e 66 69 78 20 4c  ely. The infix L
8e70: 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  IKE operator is 
8e80: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
8e90: 61 6c 6c 69 6e 67 20 74 68 65 0a 75 73 65 72 20  alling the.user 
8ea0: 66 75 6e 63 74 69 6f 6e 20 3c 61 20 68 72 65 66  function <a href
8eb0: 3d 22 23 6c 69 6b 65 46 75 6e 63 22 3e 20 6c 69  ="#likeFunc"> li
8ec0: 6b 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  ke(<i>X</i>,<i>Y
8ed0: 3c 2f 69 3e 29 3c 2f 61 3e 2e 3c 2f 70 3e 0a 7d  </i>)</a>.</p>.}
8ee0: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
8ef0: 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f  LIKE operator do
8f00: 65 73 20 61 20 77 69 6c 64 63 61 72 64 20 63 6f  es a wildcard co
8f10: 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 6f  mparison.  The o
8f20: 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69  perand.to the ri
8f30: 67 68 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ght contains the
8f40: 20 77 69 6c 64 63 61 72 64 73 2e 7d 0a 70 75 74   wildcards.}.put
8f50: 73 20 22 41 20 70 65 72 63 65 6e 74 20 73 79 6d  s "A percent sym
8f60: 62 6f 6c 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d  bol [Operator %]
8f70: 20 69 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70   in the right op
8f80: 65 72 61 6e 64 0a 6d 61 74 63 68 65 73 20 61 6e  erand.matches an
8f90: 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65  y sequence of ze
8fa0: 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61  ro or more chara
8fb0: 63 74 65 72 73 20 6f 6e 20 74 68 65 20 6c 65 66  cters on the lef
8fc0: 74 2e 0a 41 6e 20 75 6e 64 65 72 73 63 6f 72 65  t..An underscore
8fd0: 20 5b 4f 70 65 72 61 74 6f 72 20 5f 5d 20 6f 6e   [Operator _] on
8fe0: 20 74 68 65 20 72 69 67 68 74 0a 6d 61 74 63 68   the right.match
8ff0: 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68  es any single ch
9000: 61 72 61 63 74 65 72 20 6f 6e 20 74 68 65 20 6c  aracter on the l
9010: 65 66 74 2e 22 0a 0a 70 75 74 73 20 7b 0a 54 68  eft."..puts {.Th
9020: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
9030: 69 73 20 6e 6f 74 20 63 61 73 65 20 73 65 6e 73  is not case sens
9040: 69 74 69 76 65 20 61 6e 64 20 77 69 6c 6c 20 6d  itive and will m
9050: 61 74 63 68 20 75 70 70 65 72 20 63 61 73 65 0a  atch upper case.
9060: 63 68 61 72 61 63 74 65 72 73 20 6f 6e 20 6f 6e  characters on on
9070: 65 20 73 69 64 65 20 61 67 61 69 6e 73 74 20 6c  e side against l
9080: 6f 77 65 72 20 63 61 73 65 20 63 68 61 72 61 63  ower case charac
9090: 74 65 72 73 20 6f 6e 20 74 68 65 20 6f 74 68 65  ters on the othe
90a0: 72 2e 20 20 0a 28 41 20 62 75 67 3a 20 53 51 4c  r.  .(A bug: SQL
90b0: 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74  ite only underst
90c0: 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72  ands upper/lower
90d0: 20 63 61 73 65 20 66 6f 72 20 37 2d 62 69 74 20   case for 7-bit 
90e0: 4c 61 74 69 6e 0a 63 68 61 72 61 63 74 65 72 73  Latin.characters
90f0: 2e 20 20 48 65 6e 63 65 20 74 68 65 20 4c 49 4b  .  Hence the LIK
9100: 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61  E operator is ca
9110: 73 65 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72  se sensitive for
9120: 20 38 2d 62 69 74 0a 69 73 6f 38 38 35 39 20 63   8-bit.iso8859 c
9130: 68 61 72 61 63 74 65 72 73 20 6f 72 20 55 54 46  haracters or UTF
9140: 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  -8 characters.  
9150: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
9160: 20 65 78 70 72 65 73 73 69 6f 6e 0a 3c 62 3e 27   expression.<b>'
9170: 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  a'&nbsp;LIKE&nbs
9180: 70 3b 27 41 27 3c 2f 62 3e 20 69 73 20 54 52 55  p;'A'</b> is TRU
9190: 45 20 62 75 74 0a 3c 62 3e 27 26 61 65 6c 69 67  E but.<b>'&aelig
91a0: 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  ;'&nbsp;LIKE&nbs
91b0: 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20  p;'&AElig;'</b> 
91c0: 69 73 20 46 41 4c 53 45 2e 29 2e 20 20 54 68 65  is FALSE.).  The
91d0: 20 69 6e 66 69 78 20 4c 49 4b 45 0a 6f 70 65 72   infix LIKE.oper
91e0: 61 74 6f 72 20 69 73 20 69 64 65 6e 74 69 63 61  ator is identica
91f0: 6c 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  l the user funct
9200: 69 6f 6e 20 3c 61 20 68 72 65 66 3d 22 23 6c 69  ion <a href="#li
9210: 6b 65 46 75 6e 63 22 3e 0a 6c 69 6b 65 28 3c 69  keFunc">.like(<i
9220: 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29  >X</i>,<i>Y</i>)
9230: 3c 2f 61 3e 2e 0a 3c 2f 70 3e 0a 0a 3c 61 20 6e  </a>..</p>..<a n
9240: 61 6d 65 3d 22 67 6c 6f 62 22 3e 3c 2f 61 3e 0a  ame="glob"></a>.
9250: 3c 70 3e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72  <p>The GLOB oper
9260: 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20  ator is similar 
9270: 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73  to LIKE but uses
9280: 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67   the Unix.file g
9290: 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66  lobbing syntax f
92a0: 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72 64 73  or its wildcards
92b0: 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73  .  Also, GLOB is
92c0: 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c   case.sensitive,
92d0: 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 42   unlike LIKE.  B
92e0: 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b  oth GLOB and LIK
92f0: 45 20 6d 61 79 20 62 65 20 70 72 65 63 65 64 65  E may be precede
9300: 64 20 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79  d by.the NOT key
9310: 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20 74  word to invert t
9320: 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65 20  he sense of the 
9330: 74 65 73 74 2e 20 20 54 68 65 20 69 6e 66 69 78  test.  The infix
9340: 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20   GLOB .operator 
9350: 69 73 20 69 64 65 6e 74 69 63 61 6c 20 74 68 65  is identical the
9360: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 3c   user function <
9370: 61 20 68 72 65 66 3d 22 23 67 6c 6f 62 46 75 6e  a href="#globFun
9380: 63 22 3e 0a 67 6c 6f 62 28 3c 69 3e 58 3c 2f 69  c">.glob(<i>X</i
9390: 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e 2e  >,<i>Y</i>)</a>.
93a0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6c 75 6d  </p>..<p>A colum
93b0: 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e  n name can be an
93c0: 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64  y of the names d
93d0: 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 43 52  efined in the CR
93e0: 45 41 54 45 20 54 41 42 4c 45 0a 73 74 61 74 65  EATE TABLE.state
93f0: 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
9400: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
9410: 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
9420: 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
9430: 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
9440: 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
9450: 62 3e 22 2e 0a 54 68 65 73 65 20 73 70 65 63 69  b>"..These speci
9460: 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 61  al identifiers a
9470: 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68 65 0a  ll describe the.
9480: 75 6e 69 71 75 65 20 72 61 6e 64 6f 6d 20 69 6e  unique random in
9490: 74 65 67 65 72 20 6b 65 79 20 28 74 68 65 20 22  teger key (the "
94a0: 72 6f 77 20 6b 65 79 22 29 20 61 73 73 6f 63 69  row key") associ
94b0: 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20  ated with every 
94c0: 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61  .row of every ta
94d0: 62 6c 65 2e 0a 54 68 65 20 73 70 65 63 69 61 6c  ble..The special
94e0: 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c   identifiers onl
94f0: 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72  y refer to the r
9500: 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 43 52  ow key if the CR
9510: 45 41 54 45 20 54 41 42 4c 45 0a 73 74 61 74 65  EATE TABLE.state
9520: 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65  ment does not de
9530: 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75  fine a real colu
9540: 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  mn with the same
9550: 20 6e 61 6d 65 2e 20 20 52 6f 77 20 6b 65 79 73   name.  Row keys
9560: 0a 61 63 74 20 6c 69 6b 65 20 72 65 61 64 2d 6f  .act like read-o
9570: 6e 6c 79 20 63 6f 6c 75 6d 6e 73 2e 20 20 41 20  nly columns.  A 
9580: 72 6f 77 20 6b 65 79 20 63 61 6e 20 62 65 20 75  row key can be u
9590: 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
95a0: 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
95b0: 6e 20 62 65 20 75 73 65 64 2c 20 65 78 63 65 70  n be used, excep
95c0: 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e 6e 6f  t that you canno
95d0: 74 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c  t change the val
95e0: 75 65 0a 6f 66 20 61 20 72 6f 77 20 6b 65 79 20  ue.of a row key 
95f0: 69 6e 20 61 6e 20 55 50 44 41 54 45 20 6f 72 20  in an UPDATE or 
9600: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
9610: 2e 0a 22 53 45 4c 45 43 54 20 2a 20 2e 2e 2e 22  .."SELECT * ..."
9620: 20 64 6f 65 73 20 6e 6f 74 20 72 65 74 75 72 6e   does not return
9630: 20 74 68 65 20 72 6f 77 20 6b 65 79 2e 3c 2f 70   the row key.</p
9640: 3e 0a 0a 3c 70 3e 53 45 4c 45 43 54 20 73 74 61  >..<p>SELECT sta
9650: 74 65 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65  tements can appe
9660: 61 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e  ar in expression
9670: 73 20 61 73 20 65 69 74 68 65 72 20 74 68 65 0a  s as either the.
9680: 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
9690: 6e 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65  nd of the IN ope
96a0: 72 61 74 6f 72 20 6f 72 20 61 73 20 61 20 73 63  rator or as a sc
96b0: 61 6c 61 72 20 71 75 61 6e 74 69 74 79 2e 0a 49  alar quantity..I
96c0: 6e 20 62 6f 74 68 20 63 61 73 65 73 2c 20 74 68  n both cases, th
96d0: 65 20 53 45 4c 45 43 54 20 73 68 6f 75 6c 64 20  e SELECT should 
96e0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67  have only a sing
96f0: 6c 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 69 74 73  le column in its
9700: 0a 72 65 73 75 6c 74 2e 20 20 43 6f 6d 70 6f 75  .result.  Compou
9710: 6e 64 20 53 45 4c 45 43 54 73 20 28 63 6f 6e 6e  nd SELECTs (conn
9720: 65 63 74 65 64 20 77 69 74 68 20 6b 65 79 77 6f  ected with keywo
9730: 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f  rds like UNION o
9740: 72 0a 45 58 43 45 50 54 29 20 61 72 65 20 61 6c  r.EXCEPT) are al
9750: 6c 6f 77 65 64 2e 0a 41 20 53 45 4c 45 43 54 20  lowed..A SELECT 
9760: 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  in an expression
9770: 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e   is evaluated on
9780: 63 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6f 74  ce before any ot
9790: 68 65 72 20 70 72 6f 63 65 73 73 69 6e 67 0a 69  her processing.i
97a0: 73 20 70 65 72 66 6f 72 6d 65 64 2c 20 73 6f 20  s performed, so 
97b0: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 65 78 70 72  none of the expr
97c0: 65 73 73 69 6f 6e 73 20 77 69 74 68 69 6e 20 74  essions within t
97d0: 68 65 20 73 65 6c 65 63 74 20 69 74 73 65 6c 66  he select itself
97e0: 20 63 61 6e 0a 72 65 66 65 72 20 74 6f 20 71 75   can.refer to qu
97f0: 61 6e 74 69 74 69 65 73 20 69 6e 20 74 68 65 20  antities in the 
9800: 63 6f 6e 74 61 69 6e 69 6e 67 20 65 78 70 72 65  containing expre
9810: 73 73 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57  ssion.</p>..<p>W
9820: 68 65 6e 20 61 20 53 45 4c 45 43 54 20 69 73 20  hen a SELECT is 
9830: 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
9840: 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72  d of the IN oper
9850: 61 74 6f 72 2c 20 74 68 65 20 49 4e 0a 6f 70 65  ator, the IN.ope
9860: 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 54 52  rator returns TR
9870: 55 45 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  UE if the result
9880: 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65   of the left ope
9890: 72 61 6e 64 20 69 73 20 61 6e 79 20 6f 66 0a 74  rand is any of.t
98a0: 68 65 20 76 61 6c 75 65 73 20 67 65 6e 65 72 61  he values genera
98b0: 74 65 64 20 62 79 20 74 68 65 20 73 65 6c 65 63  ted by the selec
98c0: 74 2e 20 20 54 68 65 20 49 4e 20 6f 70 65 72 61  t.  The IN opera
98d0: 74 6f 72 20 6d 61 79 20 62 65 20 70 72 65 63 65  tor may be prece
98e0: 64 65 64 0a 62 79 20 74 68 65 20 4e 4f 54 20 6b  ded.by the NOT k
98f0: 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74  eyword to invert
9900: 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68   the sense of th
9910: 65 20 74 65 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e test.</p>..<p>
9920: 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 61 70  When a SELECT ap
9930: 70 65 61 72 73 20 77 69 74 68 69 6e 20 61 6e 20  pears within an 
9940: 65 78 70 72 65 73 73 69 6f 6e 20 62 75 74 20 69  expression but i
9950: 73 20 6e 6f 74 20 74 68 65 20 72 69 67 68 74 0a  s not the right.
9960: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
9970: 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 6e 20   operator, then 
9980: 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 6f 66  the first row of
9990: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
99a0: 68 65 0a 53 45 4c 45 43 54 20 62 65 63 6f 6d 65  he.SELECT become
99b0: 73 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64  s the value used
99c0: 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
99d0: 6f 6e 2e 20 20 49 66 20 74 68 65 20 53 45 4c 45  on.  If the SELE
99e0: 43 54 20 79 69 65 6c 64 73 0a 6d 6f 72 65 20 74  CT yields.more t
99f0: 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
9a00: 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
9a10: 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
9a20: 20 69 67 6e 6f 72 65 64 2e 20 20 49 66 0a 74 68   ignored.  If.th
9a30: 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
9a40: 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
9a50: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 53  e value of the S
9a60: 45 4c 45 43 54 20 69 73 20 4e 55 4c 4c 2e 3c 2f  ELECT is NULL.</
9a70: 70 3e 0a 0a 3c 70 3e 42 6f 74 68 20 73 69 6d 70  p>..<p>Both simp
9a80: 6c 65 20 61 6e 64 20 61 67 67 72 65 67 61 74 65  le and aggregate
9a90: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 73   functions are s
9aa0: 75 70 70 6f 72 74 65 64 2e 20 20 41 20 73 69 6d  upported.  A sim
9ab0: 70 6c 65 0a 66 75 6e 63 74 69 6f 6e 20 63 61 6e  ple.function can
9ac0: 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e 79 20   be used in any 
9ad0: 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 53 69 6d  expression.  Sim
9ae0: 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 72 65  ple functions re
9af0: 74 75 72 6e 0a 61 20 72 65 73 75 6c 74 20 69 6d  turn.a result im
9b00: 6d 65 64 69 61 74 65 6c 79 20 62 61 73 65 64 20  mediately based 
9b10: 6f 6e 20 74 68 65 69 72 20 69 6e 70 75 74 73 2e  on their inputs.
9b20: 20 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63    Aggregate func
9b30: 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c 79 20 62  tions.may only b
9b40: 65 20 75 73 65 64 20 69 6e 20 61 20 53 45 4c 45  e used in a SELE
9b50: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41  CT statement.  A
9b60: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
9b70: 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68 65 69 72  ns compute.their
9b80: 20 72 65 73 75 6c 74 20 61 63 72 6f 73 73 20 61   result across a
9b90: 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65 20 72  ll rows of the r
9ba0: 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a  esult set.</p>..
9bb0: 3c 70 3e 54 68 65 20 66 75 6e 63 74 69 6f 6e 73  <p>The functions
9bc0: 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65   shown below are
9bd0: 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65   available by de
9be0: 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e  fault.  Addition
9bf0: 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 6d 61 79  al.functions may
9c00: 20 62 65 20 77 72 69 74 74 65 6e 20 69 6e 20 43   be written in C
9c10: 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68   and added to th
9c20: 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
9c30: 65 20 75 73 69 6e 67 0a 74 68 65 20 3c 61 20 68  e using.the <a h
9c40: 72 65 66 3d 22 63 61 70 69 33 72 65 66 2e 68 74  ref="capi3ref.ht
9c50: 6d 6c 23 63 66 75 6e 63 22 3e 73 71 6c 69 74 65  ml#cfunc">sqlite
9c60: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
9c70: 6e 28 29 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e  n()</a>.API.</p>
9c80: 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
9c90: 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30  0 cellpadding=10
9ca0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
9cb0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
9cc0: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
9cd0: 61 62 73 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74  abs(<i>X</i>)</t
9ce0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
9cf0: 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20 61  op">Return the a
9d00: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
9d10: 20 61 72 67 75 6d 65 6e 74 20 3c 69 3e 58 3c 2f   argument <i>X</
9d20: 69 3e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  i>.</td>.</tr>..
9d30: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
9d40: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
9d50: 68 74 22 3e 63 6f 61 6c 65 73 63 65 28 3c 69 3e  ht">coalesce(<i>
9d60: 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e  X</i>,<i>Y</i>,.
9d70: 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  ..)</td>.<td val
9d80: 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e  ign="top">Return
9d90: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66   a copy of the f
9da0: 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
9db0: 67 75 6d 65 6e 74 2e 20 20 49 66 0a 61 6c 6c 20  gument.  If.all 
9dc0: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55  arguments are NU
9dd0: 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c 20 69 73 20  LL then NULL is 
9de0: 72 65 74 75 72 6e 65 64 2e 20 20 54 68 65 72 65  returned.  There
9df0: 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   must be at leas
9e00: 74 20 0a 32 20 61 72 67 75 6d 65 6e 74 73 2e 3c  t .2 arguments.<
9e10: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
9e20: 0a 3c 61 20 6e 61 6d 65 3d 22 67 6c 6f 62 46 75  .<a name="globFu
9e30: 6e 63 22 3e 3c 2f 61 3e 0a 3c 74 64 20 76 61 6c  nc"></a>.<td val
9e40: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
9e50: 22 72 69 67 68 74 22 3e 67 6c 6f 62 28 3c 69 3e  "right">glob(<i>
9e60: 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c  X</i>,<i>Y</i>)<
9e70: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
9e80: 22 74 6f 70 22 3e 54 68 69 73 20 66 75 6e 63 74  "top">This funct
9e90: 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
9ea0: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 22 3c 62  mplement the."<b
9eb0: 3e 58 20 47 4c 4f 42 20 59 3c 2f 62 3e 22 20 73  >X GLOB Y</b>" s
9ec0: 79 6e 74 61 78 20 6f 66 20 53 51 4c 69 74 65 2e  yntax of SQLite.
9ed0: 20 20 54 68 65 0a 3c 61 20 68 72 65 66 3d 22 63    The.<a href="c
9ee0: 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c  api3ref.html#sql
9ef0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
9f00: 74 69 6f 6e 22 3e 73 71 6c 69 74 65 33 5f 63 72  tion">sqlite3_cr
9f10: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 3c  eate_function()<
9f20: 2f 61 3e 20 0a 69 6e 74 65 72 66 61 63 65 20 63  /a> .interface c
9f30: 61 6e 0a 62 65 20 75 73 65 64 20 74 6f 20 6f 76  an.be used to ov
9f40: 65 72 72 69 64 65 20 74 68 69 73 20 66 75 6e 63  erride this func
9f50: 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79  tion and thereby
9f60: 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72   change the oper
9f70: 61 74 69 6f 6e 0a 6f 66 20 74 68 65 20 3c 61 20  ation.of the <a 
9f80: 68 72 65 66 3d 22 23 67 6c 6f 62 22 3e 47 4c 4f  href="#glob">GLO
9f90: 42 3c 2f 61 3e 20 6f 70 65 72 61 74 6f 72 2e 3c  B</a> operator.<
9fa0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
9fb0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
9fc0: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
9fd0: 69 66 6e 75 6c 6c 28 3c 69 3e 58 3c 2f 69 3e 2c  ifnull(<i>X</i>,
9fe0: 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>Y</i>)</td>.<
9ff0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
a000: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
a010: 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
a020: 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49  ULL argument.  I
a030: 66 0a 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73  f.both arguments
a040: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e   are NULL then N
a050: 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ULL is returned.
a060: 20 54 68 69 73 20 62 65 68 61 76 65 73 20 74 68   This behaves th
a070: 65 20 73 61 6d 65 20 61 73 20 0a 3c 62 3e 63 6f  e same as .<b>co
a080: 61 6c 65 73 63 65 28 29 3c 2f 62 3e 20 61 62 6f  alesce()</b> abo
a090: 76 65 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  ve.</td>.</tr>..
a0a0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
a0b0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
a0c0: 68 74 22 3e 6c 61 73 74 5f 69 6e 73 65 72 74 5f  ht">last_insert_
a0d0: 72 6f 77 69 64 28 29 3c 2f 74 64 3e 0a 3c 74 64  rowid()</td>.<td
a0e0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
a0f0: 74 75 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f  turn the ROWID o
a100: 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69  f the last row i
a110: 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 69 73 0a  nsert from this.
a120: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68  connection to th
a130: 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  e database.  Thi
a140: 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 76 61  s is the same va
a150: 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
a160: 65 20 72 65 74 75 72 6e 65 64 0a 66 72 6f 6d 20  e returned.from 
a170: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6c 61  the <b>sqlite_la
a180: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
a190: 29 3c 2f 62 3e 20 41 50 49 20 66 75 6e 63 74 69  )</b> API functi
a1a0: 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  on.</td>.</tr>..
a1b0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
a1c0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
a1d0: 68 74 22 3e 6c 65 6e 67 74 68 28 3c 69 3e 58 3c  ht">length(<i>X<
a1e0: 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  /i>)</td>.<td va
a1f0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72  lign="top">Retur
a200: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 6c 65 6e  n the string len
a210: 67 74 68 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 20  gth of <i>X</i> 
a220: 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e 0a 49  in characters..I
a230: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6e 66  f SQLite is conf
a240: 69 67 75 72 65 64 20 74 6f 20 73 75 70 70 6f 72  igured to suppor
a250: 74 20 55 54 46 2d 38 2c 20 74 68 65 6e 20 74 68  t UTF-8, then th
a260: 65 20 6e 75 6d 62 65 72 20 6f 66 20 55 54 46 2d  e number of UTF-
a270: 38 0a 63 68 61 72 61 63 74 65 72 73 20 69 73 20  8.characters is 
a280: 72 65 74 75 72 6e 65 64 2c 20 6e 6f 74 20 74 68  returned, not th
a290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
a2a0: 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c  s.</td>.</tr>..<
a2b0: 74 72 3e 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69 6b  tr>.<a name="lik
a2c0: 65 46 75 6e 63 22 3e 3c 2f 61 3e 0a 3c 74 64 20  eFunc"></a>.<td 
a2d0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
a2e0: 67 6e 3d 22 72 69 67 68 74 22 3e 6c 69 6b 65 28  gn="right">like(
a2f0: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
a300: 3e 20 5b 2c 3c 69 3e 5a 3c 2f 69 3e 5d 29 3c 2f  > [,<i>Z</i>])</
a310: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
a320: 74 6f 70 22 3e 0a 54 68 69 73 20 66 75 6e 63 74  top">.This funct
a330: 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
a340: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 22 3c 62  mplement the "<b
a350: 3e 58 20 4c 49 4b 45 20 59 20 5b 45 53 43 41 50  >X LIKE Y [ESCAP
a360: 45 20 5a 5d 3c 2f 62 3e 22 0a 73 79 6e 74 61 78  E Z]</b>".syntax
a370: 20 6f 66 20 53 51 4c 2e 20 49 66 20 74 68 65 20   of SQL. If the 
a380: 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
a390: 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
a3a0: 74 2c 20 74 68 65 6e 20 74 68 65 0a 75 73 65 72  t, then the.user
a3b0: 2d 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76  -function is inv
a3c0: 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20  oked with three 
a3d0: 61 72 67 75 6d 65 6e 74 73 2e 20 4f 74 68 65 72  arguments. Other
a3e0: 77 69 73 65 2c 20 69 74 20 69 73 0a 69 6e 76 6f  wise, it is.invo
a3f0: 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72 67  ked with two arg
a400: 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 54 68 65  uments only. The
a410: 20 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33   .<a href="capi3
a420: 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33  ref.html#sqlite3
a430: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
a440: 22 3e 0a 73 71 6c 69 74 65 5f 63 72 65 61 74 65  ">.sqlite_create
a450: 5f 66 75 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e 20  _function()</a> 
a460: 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65  interface can be
a470: 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64   used to overrid
a480: 65 20 74 68 69 73 0a 66 75 6e 63 74 69 6f 6e 20  e this.function 
a490: 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e  and thereby chan
a4a0: 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ge the operation
a4b0: 20 6f 66 20 74 68 65 20 3c 61 0a 68 72 65 66 3d   of the <a.href=
a4c0: 20 22 23 6c 69 6b 65 22 3e 4c 49 4b 45 3c 2f 61   "#like">LIKE</a
a4d0: 3e 20 6f 70 65 72 61 74 6f 72 2e 20 57 68 65 6e  > operator. When
a4e0: 20 64 6f 69 6e 67 20 74 68 69 73 2c 20 69 74 20   doing this, it 
a4f0: 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74  may be important
a500: 0a 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74  .to override bot
a510: 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68  h the two and th
a520: 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72  ree argument ver
a530: 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b  sions of the lik
a540: 65 28 29 20 0a 66 75 6e 63 74 69 6f 6e 2e 20 4f  e() .function. O
a550: 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65 72  therwise, differ
a560: 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65 20  ent code may be 
a570: 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d  called to implem
a580: 65 6e 74 20 74 68 65 0a 4c 49 4b 45 20 6f 70 65  ent the.LIKE ope
a590: 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20  rator depending 
a5a0: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
a5b0: 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75  t an ESCAPE clau
a5c0: 73 65 20 77 61 73 20 0a 73 70 65 63 69 66 69 65  se was .specifie
a5d0: 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c  d.</td>.</tr>..<
a5e0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
a5f0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
a600: 74 22 3e 6c 6f 77 65 72 28 3c 69 3e 58 3c 2f 69  t">lower(<i>X</i
a610: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
a620: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
a630: 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67  a copy of string
a640: 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 6c 6c 20 61   <i>X</i> will a
a650: 6c 6c 20 63 68 61 72 61 63 74 65 72 73 0a 63 6f  ll characters.co
a660: 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72  nverted to lower
a670: 20 63 61 73 65 2e 20 20 54 68 65 20 43 20 6c 69   case.  The C li
a680: 62 72 61 72 79 20 3c 62 3e 74 6f 6c 6f 77 65 72  brary <b>tolower
a690: 28 29 3c 2f 62 3e 20 72 6f 75 74 69 6e 65 20 69  ()</b> routine i
a6a0: 73 20 75 73 65 64 0a 66 6f 72 20 74 68 65 20 63  s used.for the c
a6b0: 6f 6e 76 65 72 73 69 6f 6e 2c 20 77 68 69 63 68  onversion, which
a6c0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 69 73   means that this
a6d0: 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
a6e0: 6e 6f 74 0a 77 6f 72 6b 20 63 6f 72 72 65 63 74  not.work correct
a6f0: 6c 79 20 6f 6e 20 55 54 46 2d 38 20 63 68 61 72  ly on UTF-8 char
a700: 61 63 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74  acters.</td>.</t
a710: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
a720: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
a730: 22 72 69 67 68 74 22 3e 6d 61 78 28 3c 69 3e 58  "right">max(<i>X
a740: 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e 2e  </i>,<i>Y</i>,..
a750: 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  .)</td>.<td vali
a760: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
a770: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
a780: 68 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61  h the maximum va
a790: 6c 75 65 2e 20 20 41 72 67 75 6d 65 6e 74 73 0a  lue.  Arguments.
a7a0: 6d 61 79 20 62 65 20 73 74 72 69 6e 67 73 20 69  may be strings i
a7b0: 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 6e 75  n addition to nu
a7c0: 6d 62 65 72 73 2e 20 20 54 68 65 20 6d 61 78 69  mbers.  The maxi
a7d0: 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 64 65 74  mum value is det
a7e0: 65 72 6d 69 6e 65 64 0a 62 79 20 74 68 65 20 75  ermined.by the u
a7f0: 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e  sual sort order.
a800: 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
a810: 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  ax()</b> is a si
a820: 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
a830: 65 6e 0a 69 74 20 68 61 73 20 32 20 6f 72 20 6d  en.it has 2 or m
a840: 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
a850: 74 20 63 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e  t converts to an
a860: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
a870: 69 6f 6e 20 69 66 20 67 69 76 65 6e 0a 6f 6e 6c  ion if given.onl
a880: 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
a890: 65 6e 74 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ent.</td>.</tr>.
a8a0: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
a8b0: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
a8c0: 67 68 74 22 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69  ght">min(<i>X</i
a8d0: 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e 2e 2e 29 3c  >,<i>Y</i>,...)<
a8e0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
a8f0: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
a900: 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
a910: 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  he minimum value
a920: 2e 20 20 41 72 67 75 6d 65 6e 74 73 0a 6d 61 79  .  Arguments.may
a930: 20 62 65 20 73 74 72 69 6e 67 73 20 69 6e 20 61   be strings in a
a940: 64 64 69 74 69 6f 6e 20 74 6f 20 6e 75 6d 62 65  ddition to numbe
a950: 72 73 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d  rs.  The minimum
a960: 20 76 61 6c 75 65 20 69 73 20 64 65 74 65 72 6d   value is determ
a970: 69 6e 65 64 0a 62 79 20 74 68 65 20 75 73 75 61  ined.by the usua
a980: 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 4e  l sort order.  N
a990: 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
a9a0: 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
a9b0: 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
a9c0: 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
a9d0: 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 63   arguments but c
a9e0: 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e 20 61 67  onverts to an ag
a9f0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
aa00: 20 69 66 20 67 69 76 65 6e 0a 6f 6e 6c 79 20 61   if given.only a
aa10: 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
aa20: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
aa30: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
aa40: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
aa50: 22 3e 6e 75 6c 6c 69 66 28 3c 69 3e 58 3c 2f 69  ">nullif(<i>X</i
aa60: 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e  >,<i>Y</i>)</td>
aa70: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
aa80: 22 3e 52 65 74 75 72 6e 20 74 68 65 20 66 69 72  ">Return the fir
aa90: 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74  st argument if t
aaa0: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
aab0: 20 64 69 66 66 65 72 65 6e 74 2c 20 0a 6f 74 68   different, .oth
aac0: 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 4e 55  erwise return NU
aad0: 4c 4c 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  LL.</td>.</tr>..
aae0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
aaf0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
ab00: 68 74 22 3e 71 75 6f 74 65 28 3c 69 3e 58 3c 2f  ht">quote(<i>X</
ab10: 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  i>)</td>.<td val
ab20: 69 67 6e 3d 22 74 6f 70 22 3e 54 68 69 73 20 72  ign="top">This r
ab30: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 61  outine returns a
ab40: 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
ab50: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 69 74   the value of.it
ab60: 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61  s argument suita
ab70: 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f  ble for inclusio
ab80: 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 20 53  n into another S
ab90: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 53 74  QL statement..St
aba0: 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75  rings are surrou
abb0: 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71  nded by single-q
abc0: 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70  uotes with escap
abd0: 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71  es on interior q
abe0: 75 6f 74 65 73 0a 61 73 20 6e 65 65 64 65 64 2e  uotes.as needed.
abf0: 20 20 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f    BLOBs are enco
ac00: 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d  ded as hexadecim
ac10: 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 54 68 65  al literals..The
ac20: 20 63 75 72 72 65 6e 74 20 69 6d 70 6c 65 6d 65   current impleme
ac30: 6e 74 61 74 69 6f 6e 20 6f 66 20 56 41 43 55 55  ntation of VACUU
ac40: 4d 20 75 73 65 73 20 74 68 69 73 20 66 75 6e 63  M uses this func
ac50: 74 69 6f 6e 2e 20 20 54 68 65 20 66 75 6e 63 74  tion.  The funct
ac60: 69 6f 6e 0a 69 73 20 61 6c 73 6f 20 75 73 65 66  ion.is also usef
ac70: 75 6c 20 77 68 65 6e 20 77 72 69 74 69 6e 67 20  ul when writing 
ac80: 74 72 69 67 67 65 72 73 20 74 6f 20 69 6d 70 6c  triggers to impl
ac90: 65 6d 65 6e 74 20 75 6e 64 6f 2f 72 65 64 6f 20  ement undo/redo 
aca0: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a 3c  functionality..<
acb0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
acc0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
acd0: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
ace0: 72 61 6e 64 6f 6d 28 2a 29 3c 2f 74 64 3e 0a 3c  random(*)</td>.<
acf0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
ad00: 52 65 74 75 72 6e 20 61 20 72 61 6e 64 6f 6d 20  Return a random 
ad10: 69 6e 74 65 67 65 72 20 62 65 74 77 65 65 6e 20  integer between 
ad20: 2d 32 31 34 37 34 38 33 36 34 38 20 61 6e 64 0a  -2147483648 and.
ad30: 2b 32 31 34 37 34 38 33 36 34 37 2e 3c 2f 74 64  +2147483647.</td
ad40: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
ad50: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
ad60: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 72 6f 75  lign="right">rou
ad70: 6e 64 28 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 3e  nd(<i>X</i>)<br>
ad80: 72 6f 75 6e 64 28 3c 69 3e 58 3c 2f 69 3e 2c 3c  round(<i>X</i>,<
ad90: 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>Y</i>)</td>.<t
ada0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
adb0: 6f 75 6e 64 20 6f 66 66 20 74 68 65 20 6e 75 6d  ound off the num
adc0: 62 65 72 20 3c 69 3e 58 3c 2f 69 3e 20 74 6f 20  ber <i>X</i> to 
add0: 3c 69 3e 59 3c 2f 69 3e 20 64 69 67 69 74 73 20  <i>Y</i> digits 
ade0: 74 6f 20 74 68 65 0a 72 69 67 68 74 20 6f 66 20  to the.right of 
adf0: 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
ae00: 74 2e 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c  t.  If the <i>Y<
ae10: 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20  /i> argument is 
ae20: 6f 6d 69 74 74 65 64 2c 20 30 20 69 73 20 0a 61  omitted, 0 is .a
ae30: 73 73 75 6d 65 64 2e 3c 2f 74 64 3e 0a 3c 2f 74  ssumed.</td>.</t
ae40: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
ae50: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
ae60: 22 72 69 67 68 74 22 3e 73 6f 75 6e 64 65 78 28  "right">soundex(
ae70: 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>X</i>)</td>.<
ae80: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
ae90: 43 6f 6d 70 75 74 65 20 74 68 65 20 73 6f 75 6e  Compute the soun
aea0: 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  dex encoding of 
aeb0: 74 68 65 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c  the string <i>X<
aec0: 2f 69 3e 2e 0a 54 68 65 20 73 74 72 69 6e 67 20  /i>..The string 
aed0: 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e  "?000" is return
aee0: 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ed if the argume
aef0: 6e 74 20 69 73 20 4e 55 4c 4c 2e 0a 54 68 69 73  nt is NULL..This
af00: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69   function is omi
af10: 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65  tted from SQLite
af20: 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 49 74 20   by default..It 
af30: 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
af40: 65 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 53  e the -DSQLITE_S
af50: 4f 55 4e 44 45 58 3d 31 20 63 6f 6d 70 69 6c 65  OUNDEX=1 compile
af60: 72 20 6f 70 74 69 6f 6e 0a 69 73 20 75 73 65 64  r option.is used
af70: 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
af80: 62 75 69 6c 74 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  built.</td>.</tr
af90: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
afa0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
afb0: 72 69 67 68 74 22 3e 73 71 6c 69 74 65 5f 76 65  right">sqlite_ve
afc0: 72 73 69 6f 6e 28 2a 29 3c 2f 74 64 3e 0a 3c 74  rsion(*)</td>.<t
afd0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
afe0: 65 74 75 72 6e 20 74 68 65 20 76 65 72 73 69 6f  eturn the versio
aff0: 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  n string for the
b000: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a   SQLite library.
b010: 74 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e  that is running.
b020: 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 32 2e 38    Example:  "2.8
b030: 2e 30 22 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  .0"</td>.</tr>..
b040: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
b050: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
b060: 68 74 22 3e 73 75 62 73 74 72 28 3c 69 3e 58 3c  ht">substr(<i>X<
b070: 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  /i>,<i>Y</i>,<i>
b080: 5a 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20  Z</i>)</td>.<td 
b090: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
b0a0: 75 72 6e 20 61 20 73 75 62 73 74 72 69 6e 67 20  urn a substring 
b0b0: 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  of input string 
b0c0: 3c 69 3e 58 3c 2f 69 3e 20 74 68 61 74 20 62 65  <i>X</i> that be
b0d0: 67 69 6e 73 0a 77 69 74 68 20 74 68 65 20 3c 69  gins.with the <i
b0e0: 3e 59 3c 2f 69 3e 2d 74 68 20 63 68 61 72 61 63  >Y</i>-th charac
b0f0: 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
b100: 20 3c 69 3e 5a 3c 2f 69 3e 20 63 68 61 72 61 63   <i>Z</i> charac
b110: 74 65 72 73 20 6c 6f 6e 67 2e 0a 54 68 65 20 6c  ters long..The l
b120: 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74  eft-most charact
b130: 65 72 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 20 69  er of <i>X</i> i
b140: 73 20 6e 75 6d 62 65 72 20 31 2e 20 20 49 66 20  s number 1.  If 
b150: 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6e 65 67 61  <i>Y</i> is nega
b160: 74 69 76 65 0a 74 68 65 20 74 68 65 20 66 69 72  tive.the the fir
b170: 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
b180: 74 68 65 20 73 75 62 73 74 72 69 6e 67 20 69 73  the substring is
b190: 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e 74 69   found by counti
b1a0: 6e 67 20 66 72 6f 6d 20 74 68 65 0a 72 69 67 68  ng from the.righ
b1b0: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  t rather than th
b1c0: 65 20 6c 65 66 74 2e 20 20 49 66 20 53 51 4c 69  e left.  If SQLi
b1d0: 74 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  te is configured
b1e0: 20 74 6f 20 73 75 70 70 6f 72 74 20 55 54 46 2d   to support UTF-
b1f0: 38 2c 0a 74 68 65 6e 20 63 68 61 72 61 63 74 65  8,.then characte
b200: 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  rs indices refer
b210: 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38   to actual UTF-8
b220: 20 63 68 61 72 61 63 74 65 72 73 2c 20 6e 6f 74   characters, not
b230: 20 62 79 74 65 73 2e 3c 2f 74 64 3e 0a 3c 2f 74   bytes.</td>.</t
b240: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
b250: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
b260: 22 72 69 67 68 74 22 3e 74 79 70 65 6f 66 28 3c  "right">typeof(<
b270: 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>X</i>)</td>.<t
b280: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
b290: 65 74 75 72 6e 20 74 68 65 20 74 79 70 65 20 6f  eturn the type o
b2a0: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
b2b0: 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 54 68 65 20   <i>X</i>.  The 
b2c0: 6f 6e 6c 79 20 0a 72 65 74 75 72 6e 20 76 61 6c  only .return val
b2d0: 75 65 73 20 61 72 65 20 22 6e 75 6c 6c 22 2c 20  ues are "null", 
b2e0: 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
b2f0: 22 2c 20 22 74 65 78 74 22 2c 20 61 6e 64 20 22  ", "text", and "
b300: 62 6c 6f 62 22 2e 0a 53 51 4c 69 74 65 27 73 20  blob"..SQLite's 
b310: 74 79 70 65 20 68 61 6e 64 6c 69 6e 67 20 69 73  type handling is
b320: 20 0a 65 78 70 6c 61 69 6e 65 64 20 69 6e 20 3c   .explained in <
b330: 61 20 68 72 65 66 3d 22 64 61 74 61 74 79 70 65  a href="datatype
b340: 33 2e 68 74 6d 6c 22 3e 44 61 74 61 74 79 70 65  3.html">Datatype
b350: 73 20 69 6e 20 53 51 4c 69 74 65 20 56 65 72 73  s in SQLite Vers
b360: 69 6f 6e 20 33 3c 2f 61 3e 2e 3c 2f 74 64 3e 0a  ion 3</a>.</td>.
b370: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
b380: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
b390: 67 6e 3d 22 72 69 67 68 74 22 3e 75 70 70 65 72  gn="right">upper
b3a0: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
b3b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b3c0: 3e 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f  >Return a copy o
b3d0: 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 3c  f input string <
b3e0: 69 3e 58 3c 2f 69 3e 20 63 6f 6e 76 65 72 74 65  i>X</i> converte
b3f0: 64 20 74 6f 20 61 6c 6c 0a 75 70 70 65 72 2d 63  d to all.upper-c
b400: 61 73 65 20 6c 65 74 74 65 72 73 2e 20 20 54 68  ase letters.  Th
b410: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
b420: 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f   of this functio
b430: 6e 20 75 73 65 73 20 74 68 65 20 43 20 6c 69 62  n uses the C lib
b440: 72 61 72 79 0a 72 6f 75 74 69 6e 65 20 3c 62 3e  rary.routine <b>
b450: 74 6f 75 70 70 65 72 28 29 3c 2f 62 3e 20 77 68  toupper()</b> wh
b460: 69 63 68 20 6d 65 61 6e 73 20 69 74 20 6d 61 79  ich means it may
b470: 20 6e 6f 74 20 77 6f 72 6b 20 63 6f 72 72 65 63   not work correc
b480: 74 6c 79 20 6f 6e 20 0a 55 54 46 2d 38 20 73 74  tly on .UTF-8 st
b490: 72 69 6e 67 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  rings.</td>.</tr
b4a0: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a  >.</table>..<p>.
b4b0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 67  The following ag
b4c0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
b4d0: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
b4e0: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64  by default.  Add
b4f0: 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74  itional.aggregat
b500: 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74  e functions writ
b510: 74 65 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20  ten in C may be 
b520: 61 64 64 65 64 20 75 73 69 6e 67 20 74 68 65 20  added using the 
b530: 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33 72  .<a href="capi3r
b540: 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33 5f  ef.html#sqlite3_
b550: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22  create_function"
b560: 3e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  >sqlite3_create_
b570: 66 75 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e 0a 41  function()</a>.A
b580: 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  PI.</p>..<table 
b590: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
b5a0: 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74  ding=10>.<tr>.<t
b5b0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
b5c0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
b5d0: 74 68 3d 31 32 30 3e 61 76 67 28 3c 69 3e 58 3c  th=120>avg(<i>X<
b5e0: 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  /i>)</td>.<td va
b5f0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72  lign="top">Retur
b600: 6e 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61  n the average va
b610: 6c 75 65 20 6f 66 20 61 6c 6c 20 3c 69 3e 58 3c  lue of all <i>X<
b620: 2f 69 3e 20 77 69 74 68 69 6e 20 61 20 67 72 6f  /i> within a gro
b630: 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  up.</td>.</tr>..
b640: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
b650: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
b660: 68 74 22 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c 2f  ht">count(<i>X</
b670: 69 3e 29 3c 62 72 3e 63 6f 75 6e 74 28 2a 29 3c  i>)<br>count(*)<
b680: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
b690: 22 74 6f 70 22 3e 54 68 65 20 66 69 72 73 74 20  "top">The first 
b6a0: 66 6f 72 6d 20 72 65 74 75 72 6e 20 61 20 63 6f  form return a co
b6b0: 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  unt of the numbe
b6c0: 72 20 6f 66 20 74 69 6d 65 73 0a 74 68 61 74 20  r of times.that 
b6d0: 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
b6e0: 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
b6f0: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
b700: 6d 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d  m (with no argum
b710: 65 6e 74 29 0a 72 65 74 75 72 6e 73 20 74 68 65  ent).returns the
b720: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
b730: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
b740: 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  up.</td>.</tr>..
b750: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
b760: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
b770: 68 74 22 3e 6d 61 78 28 3c 69 3e 58 3c 2f 69 3e  ht">max(<i>X</i>
b780: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
b790: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
b7a0: 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
b7b0: 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
b7c0: 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 54 68 65  n the group..The
b7d0: 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65   usual sort orde
b7e0: 72 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  r is used to det
b7f0: 65 72 6d 69 6e 65 20 74 68 65 20 6d 61 78 69 6d  ermine the maxim
b800: 75 6d 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  um.</td>.</tr>..
b810: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
b820: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
b830: 68 74 22 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e  ht">min(<i>X</i>
b840: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
b850: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
b860: 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e  he minimum non-N
b870: 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  ULL value of all
b880: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
b890: 72 6f 75 70 2e 0a 54 68 65 20 75 73 75 61 6c 20  roup..The usual 
b8a0: 73 6f 72 74 20 6f 72 64 65 72 20 69 73 20 75 73  sort order is us
b8b0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
b8c0: 74 68 65 20 6d 69 6e 69 6d 75 6d 2e 20 20 4e 55  the minimum.  NU
b8d0: 4c 4c 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72  LL is only retur
b8e0: 6e 65 64 0a 69 66 20 61 6c 6c 20 76 61 6c 75 65  ned.if all value
b8f0: 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 20 61  s in the group a
b900: 72 65 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a 3c 2f  re NULL.</td>.</
b910: 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  tr>..<tr>.<td va
b920: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
b930: 3d 22 72 69 67 68 74 22 3e 73 75 6d 28 3c 69 3e  ="right">sum(<i>
b940: 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20  X</i>)</td>.<td 
b950: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
b960: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
b970: 73 75 6d 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65  sum of all value
b980: 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 3c  s in the group.<
b990: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62  /td>.</tr>.</tab
b9a0: 6c 65 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20  le>.}...Section 
b9b0: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 0a 0a 53  INSERT insert..S
b9c0: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
b9d0: 6d 65 6e 74 7d 20 7b 0a 49 4e 53 45 52 54 20 5b  ment} {.INSERT [
b9e0: 4f 52 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67  OR <conflict-alg
b9f0: 6f 72 69 74 68 6d 3e 5d 20 49 4e 54 4f 20 5b 3c  orithm>] INTO [<
ba00: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
ba10: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b  ] <table-name> [
ba20: 28 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 29 5d  (<column-list>)]
ba30: 20 56 41 4c 55 45 53 28 3c 76 61 6c 75 65 2d 6c   VALUES(<value-l
ba40: 69 73 74 3e 29 20 7c 0a 49 4e 53 45 52 54 20 5b  ist>) |.INSERT [
ba50: 4f 52 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67  OR <conflict-alg
ba60: 6f 72 69 74 68 6d 3e 5d 20 49 4e 54 4f 20 5b 3c  orithm>] INTO [<
ba70: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
ba80: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b  ] <table-name> [
ba90: 28 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 29 5d  (<column-list>)]
baa0: 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65   <select-stateme
bab0: 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  nt>.}..puts {.<p
bac0: 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74  >The INSERT stat
bad0: 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74  ement comes in t
bae0: 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20  wo basic forms. 
baf0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 0a   The first form.
bb00: 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45  (with the "VALUE
bb10: 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61  S" keyword) crea
bb20: 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  tes a single new
bb30: 20 72 6f 77 20 69 6e 20 61 6e 20 65 78 69 73 74   row in an exist
bb40: 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66 20 6e 6f  ing table..If no
bb50: 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20   column-list is 
bb60: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74  specified then t
bb70: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
bb80: 75 65 73 20 6d 75 73 74 0a 62 65 20 74 68 65 20  ues must.be the 
bb90: 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
bba0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
bbb0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
bbc0: 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73  a column-list.is
bbd0: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
bbe0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
bbf0: 61 6c 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68  alues must match
bc00: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73   the number of.s
bc10: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
bc20: 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  .  Columns of th
bc30: 65 20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20  e table that do 
bc40: 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
bc50: 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72  e.column list ar
bc60: 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68  e filled with th
bc70: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c  e default value,
bc80: 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66   or with NULL if
bc90: 20 6e 6f 74 0a 64 65 66 61 75 6c 74 20 76 61 6c   not.default val
bca0: 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ue is specified.
bcb0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 65  .</p>..<p>The se
bcc0: 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65  cond form of the
bcd0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
bce0: 74 20 74 61 6b 65 73 20 69 74 20 64 61 74 61 20  t takes it data 
bcf0: 66 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74  from a.SELECT st
bd00: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 75  atement.  The nu
bd10: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
bd20: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
bd30: 20 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74   the.SELECT must
bd40: 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74   exactly match t
bd50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
bd60: 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
bd70: 65 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c  e if.no column l
bd80: 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
bd90: 2c 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74  , or it must mat
bda0: 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
bdb0: 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20 69 6e   columns.name in
bdc0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74   the column list
bdd0: 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
bde0: 73 20 6d 61 64 65 20 69 6e 20 74 68 65 20 74 61  s made in the ta
bdf0: 62 6c 65 0a 66 6f 72 20 65 76 65 72 79 20 72 6f  ble.for every ro
be00: 77 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  w of the SELECT 
be10: 72 65 73 75 6c 74 2e 20 20 54 68 65 20 53 45 4c  result.  The SEL
be20: 45 43 54 20 6d 61 79 20 62 65 20 73 69 6d 70 6c  ECT may be simpl
be30: 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e 20 20  e.or compound.  
be40: 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
be50: 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f  atement has an O
be60: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a  RDER BY clause,.
be70: 74 68 65 20 4f 52 44 45 52 20 42 59 20 69 73 20  the ORDER BY is 
be80: 69 67 6e 6f 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  ignored.</p>..<p
be90: 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  >The optional co
bea0: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c  nflict-clause al
beb0: 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
bec0: 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
bed0: 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
bee0: 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
bef0: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
bf00: 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
bf10: 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64  this one command
bf20: 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
bf30: 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66  n titled.<a href
bf40: 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20  ="#conflict">ON 
bf50: 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72  CONFLICT</a> for
bf60: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
bf70: 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d  rmation..For com
bf80: 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
bf90: 4d 79 53 51 4c 2c 20 74 68 65 20 70 61 72 73 65  MySQL, the parse
bfa0: 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  r allows the use
bfb0: 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b   of the.single k
bfc0: 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22  eyword <a href="
bfd0: 23 72 65 70 6c 61 63 65 22 3e 52 45 50 4c 41 43  #replace">REPLAC
bfe0: 45 3c 2f 61 3e 20 61 73 20 61 6e 20 61 6c 69 61  E</a> as an alia
bff0: 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52  s for "INSERT OR
c000: 20 52 45 50 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a   REPLACE"..</p>.
c010: 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20  }...Section {ON 
c020: 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d  CONFLICT clause}
c030: 20 63 6f 6e 66 6c 69 63 74 0a 0a 53 79 6e 74 61   conflict..Synta
c040: 78 20 7b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  x {conflict-clau
c050: 73 65 7d 20 7b 0a 4f 4e 20 43 4f 4e 46 4c 49 43  se} {.ON CONFLIC
c060: 54 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f  T <conflict-algo
c070: 72 69 74 68 6d 3e 0a 7d 20 7b 63 6f 6e 66 6c 69  rithm>.} {confli
c080: 63 74 2d 61 6c 67 6f 72 69 74 68 6d 7d 20 7b 0a  ct-algorithm} {.
c090: 52 4f 4c 4c 42 41 43 4b 20 7c 20 41 42 4f 52 54  ROLLBACK | ABORT
c0a0: 20 7c 20 46 41 49 4c 20 7c 20 49 47 4e 4f 52 45   | FAIL | IGNORE
c0b0: 20 7c 20 52 45 50 4c 41 43 45 0a 7d 0a 0a 70 75   | REPLACE.}..pu
c0c0: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  ts {.<p>The ON C
c0d0: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
c0e0: 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
c0f0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
c100: 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
c110: 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
c120: 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
c130: 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
c140: 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
c150: 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
c160: 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
c170: 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
c180: 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
c190: 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
c1a0: 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
c1b0: 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
c1c0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74  /p>..<p>The synt
c1d0: 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  ax for the ON CO
c1e0: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
c1f0: 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20   as shown above 
c200: 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54  for.the CREATE T
c210: 41 42 4c 45 20 61 6e 64 20 43 52 45 41 54 45 20  ABLE and CREATE 
c220: 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 73 2e 20  INDEX commands. 
c230: 20 46 6f 72 20 74 68 65 20 43 4f 50 59 2c 20 49   For the COPY, I
c240: 4e 53 45 52 54 2c 20 61 6e 64 0a 55 50 44 41 54  NSERT, and.UPDAT
c250: 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20  E commands, the 
c260: 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e  keywords "ON CON
c270: 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c 61  FLICT" are repla
c280: 63 65 64 20 62 79 20 22 4f 52 22 2c 20 74 6f 20  ced by "OR", to 
c290: 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74 61 78 20  make.the syntax 
c2a0: 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74 75 72 61  seem more natura
c2b0: 6c 2e 20 20 42 75 74 20 74 68 65 20 6d 65 61 6e  l.  But the mean
c2c0: 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73  ing of the claus
c2d0: 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69  e is the same.ei
c2e0: 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c  ther way.</p>..<
c2f0: 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  p>The ON CONFLIC
c300: 54 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  T clause specifi
c310: 65 73 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20  es an algorithm 
c320: 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 0a  used to resolve.
c330: 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
c340: 69 63 74 73 2e 20 20 54 68 65 72 65 20 61 72 65  icts.  There are
c350: 20 66 69 76 65 20 63 68 6f 69 63 65 73 3a 20 52   five choices: R
c360: 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 0a  OLLBACK, ABORT,.
c370: 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e  FAIL, IGNORE, an
c380: 64 20 52 45 50 4c 41 43 45 2e 20 54 68 65 20 64  d REPLACE. The d
c390: 65 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d  efault algorithm
c3a0: 20 69 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73   is ABORT.  This
c3b0: 0a 69 73 20 77 68 61 74 20 74 68 65 79 20 6d 65  .is what they me
c3c0: 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64  an:</p>..<dl>.<d
c3d0: 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62  t><b>ROLLBACK</b
c3e0: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68  ></dt>.<dd><p>Wh
c3f0: 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  en a constraint 
c400: 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
c410: 2c 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 52  , an immediate R
c420: 4f 4c 4c 42 41 43 4b 0a 6f 63 63 75 72 73 2c 20  OLLBACK.occurs, 
c430: 74 68 75 73 20 65 6e 64 69 6e 67 20 74 68 65 20  thus ending the 
c440: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
c450: 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6d  ion, and the com
c460: 6d 61 6e 64 20 61 62 6f 72 74 73 0a 77 69 74 68  mand aborts.with
c470: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f   a return code o
c480: 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  f SQLITE_CONSTRA
c490: 49 4e 54 2e 20 20 49 66 20 6e 6f 20 74 72 61 6e  INT.  If no tran
c4a0: 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76  saction is.activ
c4b0: 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68  e (other than th
c4c0: 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61  e implied transa
c4d0: 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72  ction that is cr
c4e0: 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63  eated on every.c
c4f0: 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 69  ommand) then thi
c500: 73 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b  s algorithm work
c510: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
c520: 4f 52 54 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ORT.</p></dd>..<
c530: 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c  dt><b>ABORT</b><
c540: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e  /dt>.<dd><p>When
c550: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
c560: 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
c570: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62 61 63 6b  the command back
c580: 73 20 6f 75 74 0a 61 6e 79 20 70 72 69 6f 72 20  s out.any prior 
c590: 63 68 61 6e 67 65 73 20 69 74 20 6d 69 67 68 74  changes it might
c5a0: 20 68 61 76 65 20 6d 61 64 65 20 61 6e 64 20 61   have made and a
c5b0: 62 6f 72 74 73 20 77 69 74 68 20 61 20 72 65 74  borts with a ret
c5c0: 75 72 6e 20 63 6f 64 65 0a 6f 66 20 53 51 4c 49  urn code.of SQLI
c5d0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20  TE_CONSTRAINT.  
c5e0: 42 75 74 20 6e 6f 20 52 4f 4c 4c 42 41 43 4b 20  But no ROLLBACK 
c5f0: 69 73 20 65 78 65 63 75 74 65 64 20 73 6f 20 63  is executed so c
c600: 68 61 6e 67 65 73 0a 66 72 6f 6d 20 70 72 69 6f  hanges.from prio
c610: 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 69  r commands withi
c620: 6e 20 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73  n the same trans
c630: 61 63 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65  action.are prese
c640: 72 76 65 64 2e 20 20 54 68 69 73 20 69 73 20 74  rved.  This is t
c650: 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
c660: 69 6f 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ior.</p></dd>..<
c670: 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f  dt><b>FAIL</b></
c680: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20  dt>.<dd><p>When 
c690: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
c6a0: 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
c6b0: 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74  he command abort
c6c0: 73 20 77 69 74 68 20 61 0a 72 65 74 75 72 6e 20  s with a.return 
c6d0: 63 6f 64 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  code SQLITE_CONS
c6e0: 54 52 41 49 4e 54 2e 20 20 42 75 74 20 61 6e 79  TRAINT.  But any
c6f0: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
c700: 64 61 74 61 62 61 73 65 20 74 68 61 74 0a 74 68  database that.th
c710: 65 20 63 6f 6d 6d 61 6e 64 20 6d 61 64 65 20 70  e command made p
c720: 72 69 6f 72 20 74 6f 20 65 6e 63 6f 75 6e 74 65  rior to encounte
c730: 72 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61  ring the constra
c740: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 61 72  int violation.ar
c750: 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20  e preserved and 
c760: 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
c770: 75 74 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ut.  For example
c780: 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73  , if an UPDATE.s
c790: 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74  tatement encount
c7a0: 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e  ered a constrain
c7b0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74  t violation on t
c7c0: 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61  he 100th row tha
c7d0: 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f  t.it attempts to
c7e0: 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68   update, then th
c7f0: 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63  e first 99 row c
c800: 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65  hanges are prese
c810: 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73  rved.but changes
c820: 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64   to rows 100 and
c830: 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63   beyond never oc
c840: 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  cur.</p></dd>..<
c850: 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e  dt><b>IGNORE</b>
c860: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65  </dt>.<dd><p>Whe
c870: 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  n a constraint v
c880: 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
c890: 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61   the one row tha
c8a0: 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63  t contains.the c
c8b0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
c8c0: 69 6f 6e 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ion is not inser
c8d0: 74 65 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 20  ted or changed. 
c8e0: 20 42 75 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64   But the command
c8f0: 0a 63 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75  .continues execu
c900: 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20  ting normally.  
c910: 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72  Other rows befor
c920: 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20  e and after the 
c930: 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e  row that.contain
c940: 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
c950: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 63 6f 6e 74  t violation cont
c960: 69 6e 75 65 20 74 6f 20 62 65 20 69 6e 73 65 72  inue to be inser
c970: 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e  ted or updated.n
c980: 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72  ormally.  No err
c990: 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 3c  or is returned.<
c9a0: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
c9b0: 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74  >REPLACE</b></dt
c9c0: 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20  >.<dd><p>When a 
c9d0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
c9e0: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
c9f0: 72 73 2c 20 74 68 65 20 70 72 65 2d 65 78 69 73  rs, the pre-exis
ca00: 74 69 6e 67 20 72 6f 77 73 0a 74 68 61 74 20 61  ting rows.that a
ca10: 72 65 20 63 61 75 73 69 6e 67 20 74 68 65 20 63  re causing the c
ca20: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
ca30: 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
ca40: 70 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69  prior to inserti
ca50: 6e 67 0a 6f 72 20 75 70 64 61 74 69 6e 67 20 74  ng.or updating t
ca60: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20  he current row. 
ca70: 20 54 68 75 73 20 74 68 65 20 69 6e 73 65 72 74   Thus the insert
ca80: 20 6f 72 20 75 70 64 61 74 65 20 61 6c 77 61 79   or update alway
ca90: 73 20 6f 63 63 75 72 73 2e 0a 54 68 65 20 63 6f  s occurs..The co
caa0: 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20  mmand continues 
cab0: 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c  executing normal
cac0: 6c 79 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73  ly.  No error is
cad0: 20 72 65 74 75 72 6e 65 64 2e 0a 49 66 20 61 20   returned..If a 
cae0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
caf0: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
cb00: 63 75 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76  curs, the NULL v
cb10: 61 6c 75 65 20 69 73 20 72 65 70 6c 61 63 65 64  alue is replaced
cb20: 0a 62 79 20 74 68 65 20 64 65 66 61 75 6c 74 20  .by the default 
cb30: 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63  value for that c
cb40: 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 20 63  olumn.  If the c
cb50: 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
cb60: 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
cb70: 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
cb80: 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
cb90: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 69 73 20  >..<p>When this 
cba0: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
cbb0: 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c  ion strategy del
cbc0: 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64  etes rows in ord
cbd0: 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20  er to.satisfy a 
cbe0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20 64  constraint, it d
cbf0: 6f 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 20 64  oes not invoke d
cc00: 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 20 6f  elete triggers o
cc10: 6e 20 74 68 6f 73 65 0a 72 6f 77 73 2e 20 20 42  n those.rows.  B
cc20: 75 74 20 74 68 61 74 20 6d 61 79 20 63 68 61 6e  ut that may chan
cc30: 67 65 20 69 6e 20 61 20 66 75 74 75 72 65 20 72  ge in a future r
cc40: 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
cc50: 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c 67 6f 72 69  >..<p>The algori
cc60: 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
cc70: 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f   the OR clause o
cc80: 66 20 61 20 43 4f 50 59 2c 20 49 4e 53 45 52 54  f a COPY, INSERT
cc90: 2c 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  , or UPDATE.over
cca0: 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
ccb0: 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
ccc0: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
ccd0: 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 2e  or CREATE INDEX.
cce0: 0a 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d  .If no algorithm
ccf0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
cd00: 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52  ywhere, the ABOR
cd10: 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
cd20: 73 65 64 2e 3c 2f 70 3e 0a 7d 0a 23 20 3c 70 3e  sed.</p>.}.# <p>
cd30: 46 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  For additional i
cd40: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73 65 65 20  nformation, see 
cd50: 0a 23 20 3c 61 20 68 72 65 66 3d 22 63 6f 6e 66  .# <a href="conf
cd60: 6c 69 63 74 2e 68 74 6d 6c 22 3e 63 6f 6e 66 6c  lict.html">confl
cd70: 69 63 74 2e 68 74 6d 6c 3c 2f 61 3e 2e 3c 2f 70  ict.html</a>.</p
cd80: 3e 0a 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44  >..Section REIND
cd90: 45 58 20 72 65 69 6e 64 65 78 0a 0a 53 79 6e 74  EX reindex..Synt
cda0: 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e  ax {sql-statemen
cdb0: 74 7d 20 7b 0a 20 20 52 45 49 4e 44 45 58 20 3c  t} {.  REINDEX <
cdc0: 63 6f 6c 6c 61 74 69 6f 6e 20 6e 61 6d 65 3e 0a  collation name>.
cdd0: 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  }.Syntax {sql-st
cde0: 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20 52 45 49  atement} {.  REI
cdf0: 4e 44 45 58 20 5b 3c 64 61 74 61 62 61 73 65 2d  NDEX [<database-
ce00: 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2f  name> .] <table/
ce10: 69 6e 64 65 78 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70  index-name>.}..p
ce20: 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 52 45 49  uts {.<p>The REI
ce30: 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20  NDEX command is 
ce40: 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61  used to delete a
ce50: 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69  nd recreate indi
ce60: 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ces from scratch
ce70: 2e 0a 54 68 69 73 20 69 73 20 70 72 69 6d 61 72  ..This is primar
ce80: 69 6c 79 20 75 73 65 66 75 6c 20 77 68 65 6e 20  ily useful when 
ce90: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
cea0: 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
ceb0: 71 75 65 6e 63 65 20 68 61 73 20 0a 63 68 61 6e  quence has .chan
cec0: 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  ged..</p>..<p>In
ced0: 20 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d 2c   the first form,
cee0: 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20   all indices in 
cef0: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
cf00: 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20  abases that use 
cf10: 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74  the.named collat
cf20: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72 65  ion sequence are
cf30: 20 72 65 63 72 65 61 74 65 64 2e 20 49 6e 20 74   recreated. In t
cf40: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20  he second form, 
cf50: 69 66 20 0a 3c 69 3e 5b 64 61 74 61 62 61 73 65  if .<i>[database
cf60: 2d 6e 61 6d 65 2e 5d 74 61 62 6c 65 2f 69 6e 64  -name.]table/ind
cf70: 65 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e  ex-name</i> iden
cf80: 74 69 66 69 65 73 20 61 20 74 61 62 6c 65 2c 20  tifies a table, 
cf90: 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
cfa0: 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
cfb0: 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 72   the table are r
cfc0: 65 62 75 69 6c 74 2e 20 49 66 20 61 6e 20 69 6e  ebuilt. If an in
cfd0: 64 65 78 20 69 73 20 69 64 65 6e 74 69 66 69 65  dex is identifie
cfe0: 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69  d, then only.thi
cff0: 73 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78  s specific index
d000: 20 69 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20   is deleted and 
d010: 72 65 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a  recreated..</p>.
d020: 0a 3c 70 3e 49 66 20 6e 6f 20 3c 69 3e 64 61 74  .<p>If no <i>dat
d030: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69  abase-name</i> i
d040: 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20  s specified and 
d050: 74 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74  there exists bot
d060: 68 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64  h a table or.ind
d070: 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69  ex and a collati
d080: 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  on sequence of t
d090: 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d  he specified nam
d0a0: 65 2c 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20  e, then indices 
d0b0: 61 73 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20  associated.with 
d0c0: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
d0d0: 71 75 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20  quence only are 
d0e0: 72 65 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54  reconstructed. T
d0f0: 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61  his ambiguity ma
d100: 79 20 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62  y be.dispelled b
d110: 79 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79  y always specify
d120: 69 6e 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73  ing a <i>databas
d130: 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20  e-name</i> when 
d140: 72 65 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65  reindexing a.spe
d150: 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69  cific table or i
d160: 6e 64 65 78 2e 0a 7d 0a 0a 53 65 63 74 69 6f 6e  ndex..}..Section
d170: 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65   REPLACE replace
d180: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  ..Syntax {sql-st
d190: 61 74 65 6d 65 6e 74 7d 20 7b 0a 52 45 50 4c 41  atement} {.REPLA
d1a0: 43 45 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61  CE INTO [<databa
d1b0: 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62  se-name> .] <tab
d1c0: 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c  le-name> [( <col
d1d0: 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d 20 56 41 4c  umn-list> )] VAL
d1e0: 55 45 53 20 28 20 3c 76 61 6c 75 65 2d 6c 69 73  UES ( <value-lis
d1f0: 74 3e 20 29 20 7c 0a 52 45 50 4c 41 43 45 20 49  t> ) |.REPLACE I
d200: 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  NTO [<database-n
d210: 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
d220: 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d 6e 2d  ame> [( <column-
d230: 6c 69 73 74 3e 20 29 5d 20 3c 73 65 6c 65 63 74  list> )] <select
d240: 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70  -statement>.}..p
d250: 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 52 45 50  uts {.<p>The REP
d260: 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  LACE command is 
d270: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
d280: 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c   "INSERT OR REPL
d290: 41 43 45 22 20 76 61 72 69 61 6e 74 0a 6f 66 20  ACE" variant.of 
d2a0: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 69 6e  the <a href="#in
d2b0: 73 65 72 74 22 3e 49 4e 53 45 52 54 3c 2f 61 3e  sert">INSERT</a>
d2c0: 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20   command.  This 
d2d0: 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65  alias is provide
d2e0: 64 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c  d for.compatibil
d2f0: 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2e 20  ity with MySQL. 
d300: 20 53 65 65 20 74 68 65 20 0a 3c 61 20 68 72 65   See the .<a hre
d310: 66 3d 22 23 69 6e 73 65 72 74 22 3e 49 4e 53 45  f="#insert">INSE
d320: 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20 64  RT</a> command d
d330: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
d340: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f   additional.info
d350: 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 7d  rmation.</p>  .}
d360: 0a 0a 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43  ...Section SELEC
d370: 54 20 73 65 6c 65 63 74 0a 0a 53 79 6e 74 61 78  T select..Syntax
d380: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
d390: 20 7b 0a 53 45 4c 45 43 54 20 5b 41 4c 4c 20 7c   {.SELECT [ALL |
d3a0: 20 44 49 53 54 49 4e 43 54 5d 20 3c 72 65 73 75   DISTINCT] <resu
d3b0: 6c 74 3e 20 5b 46 52 4f 4d 20 3c 74 61 62 6c 65  lt> [FROM <table
d3c0: 2d 6c 69 73 74 3e 5d 0a 5b 57 48 45 52 45 20 3c  -list>].[WHERE <
d3d0: 65 78 70 72 3e 5d 0a 5b 47 52 4f 55 50 20 42 59  expr>].[GROUP BY
d3e0: 20 3c 65 78 70 72 2d 6c 69 73 74 3e 5d 0a 5b 48   <expr-list>].[H
d3f0: 41 56 49 4e 47 20 3c 65 78 70 72 3e 5d 0a 5b 3c  AVING <expr>].[<
d400: 63 6f 6d 70 6f 75 6e 64 2d 6f 70 3e 20 3c 73 65  compound-op> <se
d410: 6c 65 63 74 3e 5d 2a 0a 5b 4f 52 44 45 52 20 42  lect>]*.[ORDER B
d420: 59 20 3c 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73  Y <sort-expr-lis
d430: 74 3e 5d 0a 5b 4c 49 4d 49 54 20 3c 69 6e 74 65  t>].[LIMIT <inte
d440: 67 65 72 3e 20 5b 4c 50 20 4f 46 46 53 45 54 20  ger> [LP OFFSET 
d450: 7c 20 2c 20 52 50 20 3c 69 6e 74 65 67 65 72 3e  | , RP <integer>
d460: 5d 5d 0a 7d 20 7b 72 65 73 75 6c 74 7d 20 7b 0a  ]].} {result} {.
d470: 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 3e 20  <result-column> 
d480: 5b 2c 20 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  [, <result-colum
d490: 6e 3e 5d 2a 0a 7d 20 7b 72 65 73 75 6c 74 2d 63  n>]*.} {result-c
d4a0: 6f 6c 75 6d 6e 7d 20 7b 0a 53 54 41 52 20 7c 20  olumn} {.STAR | 
d4b0: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 2e 20 53  <table-name> . S
d4c0: 54 41 52 20 7c 20 3c 65 78 70 72 3e 20 5b 20 5b  TAR | <expr> [ [
d4d0: 41 53 5d 20 3c 73 74 72 69 6e 67 3e 20 5d 0a 7d  AS] <string> ].}
d4e0: 20 7b 74 61 62 6c 65 2d 6c 69 73 74 7d 20 7b 0a   {table-list} {.
d4f0: 3c 74 61 62 6c 65 3e 20 5b 3c 6a 6f 69 6e 2d 6f  <table> [<join-o
d500: 70 3e 20 3c 74 61 62 6c 65 3e 20 3c 6a 6f 69 6e  p> <table> <join
d510: 2d 61 72 67 73 3e 5d 2a 0a 7d 20 7b 74 61 62 6c  -args>]*.} {tabl
d520: 65 7d 20 7b 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65  e} {.<table-name
d530: 3e 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 20 7c  > [AS <alias>] |
d540: 0a 28 20 3c 73 65 6c 65 63 74 3e 20 29 20 5b 41  .( <select> ) [A
d550: 53 20 3c 61 6c 69 61 73 3e 5d 0a 7d 20 7b 6a 6f  S <alias>].} {jo
d560: 69 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c 20 5b 4e 41  in-op} {., | [NA
d570: 54 55 52 41 4c 5d 20 5b 4c 45 46 54 20 7c 20 52  TURAL] [LEFT | R
d580: 49 47 48 54 20 7c 20 46 55 4c 4c 5d 20 5b 4f 55  IGHT | FULL] [OU
d590: 54 45 52 20 7c 20 49 4e 4e 45 52 20 7c 20 43 52  TER | INNER | CR
d5a0: 4f 53 53 5d 20 4a 4f 49 4e 0a 7d 20 7b 6a 6f 69  OSS] JOIN.} {joi
d5b0: 6e 2d 61 72 67 73 7d 20 7b 0a 5b 4f 4e 20 3c 65  n-args} {.[ON <e
d5c0: 78 70 72 3e 5d 20 5b 55 53 49 4e 47 20 28 20 3c  xpr>] [USING ( <
d5d0: 69 64 2d 6c 69 73 74 3e 20 29 5d 0a 7d 20 7b 73  id-list> )].} {s
d5e0: 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74 7d 20 7b  ort-expr-list} {
d5f0: 0a 3c 65 78 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f  .<expr> [<sort-o
d600: 72 64 65 72 3e 5d 20 5b 2c 20 3c 65 78 70 72 3e  rder>] [, <expr>
d610: 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e 5d 5d   [<sort-order>]]
d620: 2a 0a 7d 20 7b 73 6f 72 74 2d 6f 72 64 65 72 7d  *.} {sort-order}
d630: 20 7b 0a 5b 20 43 4f 4c 4c 41 54 45 20 3c 63 6f   {.[ COLLATE <co
d640: 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 20 5d 20  llation-name> ] 
d650: 5b 20 41 53 43 20 7c 20 44 45 53 43 20 5d 0a 7d  [ ASC | DESC ].}
d660: 20 7b 63 6f 6d 70 6f 75 6e 64 5f 6f 70 7d 20 7b   {compound_op} {
d670: 0a 55 4e 49 4f 4e 20 7c 20 55 4e 49 4f 4e 20 41  .UNION | UNION A
d680: 4c 4c 20 7c 20 49 4e 54 45 52 53 45 43 54 20 7c  LL | INTERSECT |
d690: 20 45 58 43 45 50 54 0a 7d 0a 0a 70 75 74 73 20   EXCEPT.}..puts 
d6a0: 7b 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  {.<p>The SELECT 
d6b0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
d6c0: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64  d to query the d
d6d0: 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65  atabase.  The.re
d6e0: 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54  sult of a SELECT
d6f0: 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
d700: 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68   rows of data wh
d710: 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73  ere each row.has
d720: 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20   a fixed number 
d730: 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65  of columns.  The
d740: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
d750: 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74  ns in the.result
d760: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
d770: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
d780: 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20  list in between 
d790: 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46  the.SELECT and F
d7a0: 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 41  ROM keywords.  A
d7b0: 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78 70  ny arbitrary exp
d7c0: 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
d7d0: 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e  sed.as a result.
d7e0: 20 20 49 66 20 61 20 72 65 73 75 6c 74 20 65 78    If a result ex
d7f0: 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a 70 75  pression is }.pu
d800: 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d  ts "[Operator *]
d810: 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
d820: 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
d830: 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64 22  are substituted"
d840: 0a 70 75 74 73 20 7b 66 6f 72 20 74 68 61 74 20  .puts {for that 
d850: 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  one expression. 
d860: 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
d870: 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  on is the name o
d880: 66 7d 0a 70 75 74 73 20 22 61 20 74 61 62 6c 65  f}.puts "a table
d890: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70   followed by [Op
d8a0: 65 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20  erator .*] then 
d8b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
d8c0: 6c 20 63 6f 6c 75 6d 6e 73 22 0a 70 75 74 73 20  l columns".puts 
d8d0: 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20 74 61 62  {in that one tab
d8e0: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  le.</p>..<p>The 
d8f0: 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
d900: 20 63 61 75 73 65 73 20 61 20 73 75 62 73 65 74   causes a subset
d910: 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
d920: 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2c 20  to be returned, 
d930: 0a 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 72  .in which each r
d940: 65 73 75 6c 74 20 72 6f 77 20 69 73 20 64 69 66  esult row is dif
d950: 66 65 72 65 6e 74 2e 20 20 4e 55 4c 4c 20 76 61  ferent.  NULL va
d960: 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 74 72 65  lues are not tre
d970: 61 74 65 64 20 61 73 20 0a 64 69 73 74 69 6e 63  ated as .distinc
d980: 74 20 66 72 6f 6d 20 65 61 63 68 20 6f 74 68 65  t from each othe
d990: 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
d9a0: 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 61 74  behavior is that
d9b0: 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73   all result rows
d9c0: 20 0a 62 65 20 72 65 74 75 72 6e 65 64 2c 20 77   .be returned, w
d9d0: 68 69 63 68 20 63 61 6e 20 62 65 20 6d 61 64 65  hich can be made
d9e0: 20 65 78 70 6c 69 63 69 74 20 77 69 74 68 20 74   explicit with t
d9f0: 68 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c 2e 3c  he keyword ALL.<
da00: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 71 75 65 72  /p>..<p>The quer
da10: 79 20 69 73 20 65 78 65 63 75 74 65 64 20 61 67  y is executed ag
da20: 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72  ainst one or mor
da30: 65 20 74 61 62 6c 65 73 20 73 70 65 63 69 66 69  e tables specifi
da40: 65 64 20 61 66 74 65 72 0a 74 68 65 20 46 52 4f  ed after.the FRO
da50: 4d 20 6b 65 79 77 6f 72 64 2e 20 20 49 66 20 6d  M keyword.  If m
da60: 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20 6e  ultiple tables n
da70: 61 6d 65 73 20 61 72 65 20 73 65 70 61 72 61 74  ames are separat
da80: 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a 74 68  ed by commas,.th
da90: 65 6e 20 74 68 65 20 71 75 65 72 79 20 69 73 20  en the query is 
daa0: 61 67 61 69 6e 73 74 20 74 68 65 20 63 72 6f 73  against the cros
dab0: 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20 76 61  s join of the va
dac0: 72 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a 54 68  rious tables..Th
dad0: 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f  e full SQL-92 jo
dae0: 69 6e 20 73 79 6e 74 61 78 20 63 61 6e 20 61 6c  in syntax can al
daf0: 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 70  so be used to sp
db00: 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a 41 20 73  ecify joins..A s
db10: 75 62 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65  ub-query.in pare
db20: 6e 74 68 65 73 65 73 20 6d 61 79 20 62 65 20 73  ntheses may be s
db30: 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 61  ubstituted for a
db40: 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  ny table name in
db50: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
db60: 2e 0a 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f  ..The entire FRO
db70: 4d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20  M clause may be 
db80: 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63  omitted, in whic
db90: 68 20 63 61 73 65 20 74 68 65 20 72 65 73 75 6c  h case the resul
dba0: 74 20 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f  t is a.single ro
dbb0: 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  w consisting of 
dbc0: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
dbd0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  e expression lis
dbe0: 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  t..</p>..<p>The 
dbf0: 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e  WHERE clause can
dc00: 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   be used to limi
dc10: 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
dc20: 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63 68 20  rows over.which 
dc30: 74 68 65 20 71 75 65 72 79 20 6f 70 65 72 61 74  the query operat
dc40: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  es.</p>..<p>The 
dc50: 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 73  GROUP BY clauses
dc60: 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20 6d   causes one or m
dc70: 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  ore rows of the 
dc80: 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f 6d  result to.be com
dc90: 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  bined into a sin
dca0: 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  gle row of outpu
dcb0: 74 2e 20 20 54 68 69 73 20 69 73 20 65 73 70 65  t.  This is espe
dcc0: 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77 68  cially useful.wh
dcd0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  en the result co
dce0: 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
dcf0: 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65   functions.  The
dd00: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 0a   expressions in.
dd10: 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
dd20: 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f  use do <em>not</
dd30: 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65  em> have to be e
dd40: 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 0a  xpressions that.
dd50: 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 72 65  appear in the re
dd60: 73 75 6c 74 2e 20 20 54 68 65 20 48 41 56 49 4e  sult.  The HAVIN
dd70: 47 20 63 6c 61 75 73 65 20 69 73 20 73 69 6d 69  G clause is simi
dd80: 6c 61 72 20 74 6f 20 57 48 45 52 45 20 65 78 63  lar to WHERE exc
dd90: 65 70 74 0a 74 68 61 74 20 48 41 56 49 4e 47 20  ept.that HAVING 
dda0: 61 70 70 6c 69 65 73 20 61 66 74 65 72 20 67 72  applies after gr
ddb0: 6f 75 70 69 6e 67 20 68 61 73 20 6f 63 63 75 72  ouping has occur
ddc0: 72 65 64 2e 20 20 54 68 65 20 48 41 56 49 4e 47  red.  The HAVING
ddd0: 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61 79 20   expression.may 
dde0: 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c  refer to values,
ddf0: 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20   even aggregate 
de00: 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20  functions, that 
de10: 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72  are not in the r
de20: 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  esult.</p>..<p>T
de30: 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
de40: 73 65 20 63 61 75 73 65 73 20 74 68 65 20 6f 75  se causes the ou
de50: 74 70 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20  tput rows to be 
de60: 73 6f 72 74 65 64 2e 20 20 0a 54 68 65 20 61 72  sorted.  .The ar
de70: 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52 20  gument to ORDER 
de80: 42 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  BY is a list of 
de90: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
dea0: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
deb0: 0a 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f 72  .key for the sor
dec0: 74 2e 20 20 54 68 65 20 65 78 70 72 65 73 73 69  t.  The expressi
ded0: 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  ons do not have 
dee0: 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20 74 68  to be part of th
def0: 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73  e.result for a s
df00: 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75  imple SELECT, bu
df10: 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
df20: 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74  SELECT each sort
df30: 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74  .expression must
df40: 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f   exactly match o
df50: 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ne of the result
df60: 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 61 63 68 0a   columns.  Each.
df70: 73 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sort expression 
df80: 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
df90: 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  y followed by a 
dfa0: 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64 20  COLLATE keyword 
dfb0: 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20  and.the name of 
dfc0: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
dfd0: 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f 72  tion used for or
dfe0: 64 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64 2f  dering text and/
dff0: 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43 20  or.keywords ASC 
e000: 6f 72 20 44 45 53 43 20 74 6f 20 73 70 65 63 69  or DESC to speci
e010: 66 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65  fy the sort orde
e020: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c  r.</p>..<p>The L
e030: 49 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63  IMIT clause plac
e040: 65 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  es an upper boun
e050: 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  d on the number 
e060: 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64  of rows.returned
e070: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20   in the result. 
e080: 20 41 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49   A negative LIMI
e090: 54 20 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75  T indicates no u
e0a0: 70 70 65 72 20 62 6f 75 6e 64 2e 0a 54 68 65 20  pper bound..The 
e0b0: 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20  optional OFFSET 
e0c0: 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20  following LIMIT 
e0d0: 73 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61  specifies how ma
e0e0: 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20  ny.rows to skip 
e0f0: 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
e100: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   of the result s
e110: 65 74 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  et..In a compoun
e120: 64 20 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d  d query, the LIM
e130: 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e  IT clause may on
e140: 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65  ly appear on the
e150: 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74  .final SELECT st
e160: 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6c 69 6d  atement..The lim
e170: 69 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f  it is applied to
e180: 20 74 68 65 20 65 6e 74 69 72 65 20 71 75 65 72   the entire quer
e190: 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64  y not.to the ind
e1a0: 69 76 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73  ividual SELECT s
e1b0: 74 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63  tatement to whic
e1c0: 68 20 69 74 20 69 73 20 61 74 74 61 63 68 65 64  h it is attached
e1d0: 2e 0a 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74  ..Note that if t
e1e0: 68 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72  he OFFSET keywor
e1f0: 64 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  d is used in the
e200: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
e210: 68 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73  hen the.limit is
e220: 20 74 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65   the first numbe
e230: 72 20 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74  r and the offset
e240: 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e   is the second n
e250: 75 6d 62 65 72 2e 20 20 49 66 20 61 0a 63 6f 6d  umber.  If a.com
e260: 6d 61 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  ma is used inste
e270: 61 64 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54  ad of the OFFSET
e280: 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74   keyword, then t
e290: 68 65 20 6f 66 66 73 65 74 20 69 73 20 74 68 65  he offset is the
e2a0: 0a 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e  .first number an
e2b0: 64 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74  d the limit is t
e2c0: 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72  he second number
e2d0: 2e 20 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a  .  This seeming.
e2e0: 63 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20  contradition is 
e2f0: 69 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74  intentional - it
e300: 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61   maximizes compa
e310: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65  tibility with le
e320: 67 61 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73  gacy.SQL databas
e330: 65 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a  e systems..</p>.
e340: 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53  .<p>A compound S
e350: 45 4c 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20  ELECT is formed 
e360: 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65  from two or more
e370: 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20   simple SELECTs 
e380: 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65  connected.by one
e390: 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   of the operator
e3a0: 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  s UNION, UNION A
e3b0: 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f  LL, INTERSECT, o
e3c0: 72 20 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20  r EXCEPT.  In.a 
e3d0: 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
e3e0: 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74   all the constit
e3f0: 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73  uent SELECTs mus
e400: 74 20 73 70 65 63 69 66 79 20 74 68 65 0a 73 61  t specify the.sa
e410: 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  me number of res
e420: 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68  ult columns.  Th
e430: 65 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20  ere may be only 
e440: 61 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42  a single ORDER B
e450: 59 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20  Y.clause at the 
e460: 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f  end of the compo
e470: 75 6e 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65  und SELECT.  The
e480: 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e   UNION and UNION
e490: 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63   ALL.operators c
e4a0: 6f 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ombine the resul
e4b0: 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ts of the SELECT
e4c0: 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61  s to the right a
e4d0: 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73  nd left into.a s
e4e0: 69 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e  ingle big table.
e4f0: 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
e500: 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f   is that in UNIO
e510: 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77  N all result row
e520: 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20 77  s.are distinct w
e530: 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c  here in UNION AL
e540: 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 64  L there may be d
e550: 75 70 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49  uplicates..The I
e560: 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
e570: 72 20 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65  r takes the inte
e580: 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
e590: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c  results of the.l
e5a0: 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 53 45  eft and right SE
e5b0: 4c 45 43 54 73 2e 20 20 45 58 43 45 50 54 20 74  LECTs.  EXCEPT t
e5c0: 61 6b 65 73 20 74 68 65 20 72 65 73 75 6c 74 20  akes the result 
e5d0: 6f 66 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61  of left SELECT a
e5e0: 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68  fter.removing th
e5f0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
e600: 20 72 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20   right SELECT.  
e610: 57 68 65 6e 20 74 68 72 65 65 20 61 72 65 20 6d  When three are m
e620: 6f 72 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20  ore SELECTs.are 
e630: 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61  connected into a
e640: 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20   compound, they 
e650: 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20  group from left 
e660: 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 7d 0a  to right.</p>.}.
e670: 0a 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45  ..Section UPDATE
e680: 20 75 70 64 61 74 65 0a 0a 53 79 6e 74 61 78 20   update..Syntax 
e690: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
e6a0: 7b 0a 55 50 44 41 54 45 20 5b 20 4f 52 20 3c 63  {.UPDATE [ OR <c
e6b0: 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68  onflict-algorith
e6c0: 6d 3e 20 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d  m> ] [<database-
e6d0: 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d  name> .] <table-
e6e0: 6e 61 6d 65 3e 0a 53 45 54 20 3c 61 73 73 69 67  name>.SET <assig
e6f0: 6e 6d 65 6e 74 3e 20 5b 2c 20 3c 61 73 73 69 67  nment> [, <assig
e700: 6e 6d 65 6e 74 3e 5d 2a 0a 5b 57 48 45 52 45 20  nment>]*.[WHERE 
e710: 3c 65 78 70 72 3e 5d 0a 7d 20 7b 61 73 73 69 67  <expr>].} {assig
e720: 6e 6d 65 6e 74 7d 20 7b 0a 3c 63 6f 6c 75 6d 6e  nment} {.<column
e730: 2d 6e 61 6d 65 3e 20 3d 20 3c 65 78 70 72 3e 0a  -name> = <expr>.
e740: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
e750: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
e760: 74 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 61  t is used to cha
e770: 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
e780: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c   columns in .sel
e790: 65 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20  ected rows of a 
e7a0: 74 61 62 6c 65 2e 20 20 45 61 63 68 20 61 73 73  table.  Each ass
e7b0: 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50  ignment in an UP
e7c0: 44 41 54 45 20 73 70 65 63 69 66 69 65 73 0a 61  DATE specifies.a
e7d0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20   column name to 
e7e0: 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
e7f0: 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20  equals sign and 
e800: 61 6e 20 61 72 62 69 74 72 61 72 79 20 65 78 70  an arbitrary exp
e810: 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72  ression.to the r
e820: 69 67 68 74 2e 20 20 54 68 65 20 65 78 70 72 65  ight.  The expre
e830: 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20 74  ssions may use t
e840: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74 68  he values of oth
e850: 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c 20  er columns..All 
e860: 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
e870: 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65  evaluated before
e880: 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73   any assignments
e890: 20 61 72 65 20 6d 61 64 65 2e 0a 41 20 57 48 45   are made..A WHE
e8a0: 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65  RE clause can be
e8b0: 20 75 73 65 64 20 74 6f 20 72 65 73 74 72 69 63   used to restric
e8c0: 74 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  t which rows are
e8d0: 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   updated.</p>..<
e8e0: 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63  p>The optional c
e8f0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61  onflict-clause a
e900: 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66  llows the specif
e910: 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c  ication of an al
e920: 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72  ternative.constr
e930: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
e940: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
e950: 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
e960: 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e   this one comman
e970: 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69  d..See the secti
e980: 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68 72 65  on titled.<a hre
e990: 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e  f="#conflict">ON
e9a0: 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f   CONFLICT</a> fo
e9b0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
e9c0: 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a  ormation.</p>.}.
e9d0: 0a 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d  ..Section VACUUM
e9e0: 20 76 61 63 75 75 6d 0a 0a 53 79 6e 74 61 78 20   vacuum..Syntax 
e9f0: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
ea00: 7b 0a 56 41 43 55 55 4d 20 5b 3c 69 6e 64 65 78  {.VACUUM [<index
ea10: 2d 6f 72 2d 74 61 62 6c 65 2d 6e 61 6d 65 3e 5d  -or-table-name>]
ea20: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68  .}..puts {.<p>Th
ea30: 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
ea40: 20 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65 78   is an SQLite ex
ea50: 74 65 6e 73 69 6f 6e 20 6d 6f 64 65 6c 65 64 20  tension modeled 
ea60: 61 66 74 65 72 20 61 20 73 69 6d 69 6c 61 72 0a  after a similar.
ea70: 63 6f 6d 6d 61 6e 64 20 66 6f 75 6e 64 20 69 6e  command found in
ea80: 20 50 6f 73 74 67 72 65 53 51 4c 2e 20 20 49 66   PostgreSQL.  If
ea90: 20 56 41 43 55 55 4d 20 69 73 20 69 6e 76 6f 6b   VACUUM is invok
eaa0: 65 64 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  ed with the name
eab0: 20 6f 66 20 61 0a 74 61 62 6c 65 20 6f 72 20 69   of a.table or i
eac0: 6e 64 65 78 20 74 68 65 6e 20 69 74 20 69 73 20  ndex then it is 
ead0: 73 75 70 70 6f 73 65 20 74 6f 20 63 6c 65 61 6e  suppose to clean
eae0: 20 75 70 20 74 68 65 20 6e 61 6d 65 64 20 74 61   up the named ta
eaf0: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 49 6e  ble or index..In
eb00: 20 76 65 72 73 69 6f 6e 20 31 2e 30 20 6f 66 20   version 1.0 of 
eb10: 53 51 4c 69 74 65 2c 20 74 68 65 20 56 41 43 55  SQLite, the VACU
eb20: 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 75 6c 64  UM command would
eb30: 20 69 6e 76 6f 6b 65 20 0a 3c 62 3e 67 64 62 6d   invoke .<b>gdbm
eb40: 5f 72 65 6f 72 67 61 6e 69 7a 65 28 29 3c 2f 62  _reorganize()</b
eb50: 3e 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  > to clean up th
eb60: 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62 61  e backend databa
eb70: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
eb80: 3e 0a 56 41 43 55 55 4d 20 62 65 63 61 6d 65 20  >.VACUUM became 
eb90: 61 20 6e 6f 2d 6f 70 20 77 68 65 6e 20 74 68 65  a no-op when the
eba0: 20 47 44 42 4d 20 62 61 63 6b 65 6e 64 20 77 61   GDBM backend wa
ebb0: 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 53  s removed from.S
ebc0: 51 4c 49 54 45 20 69 6e 20 76 65 72 73 69 6f 6e  QLITE in version
ebd0: 20 32 2e 30 2e 30 2e 0a 56 41 43 55 55 4d 20 77   2.0.0..VACUUM w
ebe0: 61 73 20 72 65 69 6d 70 6c 65 6d 65 6e 74 65 64  as reimplemented
ebf0: 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e 38 2e   in version 2.8.
ec00: 31 2e 0a 54 68 65 20 69 6e 64 65 78 20 6f 72 20  1..The index or 
ec10: 74 61 62 6c 65 20 6e 61 6d 65 20 61 72 67 75 6d  table name argum
ec20: 65 6e 74 20 69 73 20 6e 6f 77 20 69 67 6e 6f 72  ent is now ignor
ec30: 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65  ed..</p>..<p>Whe
ec40: 6e 20 61 6e 20 6f 62 6a 65 63 74 20 28 74 61 62  n an object (tab
ec50: 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20 74 72  le, index, or tr
ec60: 69 67 67 65 72 29 20 69 73 20 64 72 6f 70 70 65  igger) is droppe
ec70: 64 20 66 72 6f 6d 20 74 68 65 20 0a 64 61 74 61  d from the .data
ec80: 62 61 73 65 2c 20 69 74 20 6c 65 61 76 65 73 20  base, it leaves 
ec90: 62 65 68 69 6e 64 20 65 6d 70 74 79 20 73 70 61  behind empty spa
eca0: 63 65 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20  ce.  This makes 
ecb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66 69  the database .fi
ecc0: 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 69  le larger than i
ecd0: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 2c 20 62  t needs to be, b
ece0: 75 74 20 63 61 6e 20 73 70 65 65 64 20 75 70 20  ut can speed up 
ecf0: 69 6e 73 65 72 74 73 2e 20 20 49 6e 20 74 69 6d  inserts.  In tim
ed00: 65 20 0a 69 6e 73 65 72 74 73 20 61 6e 64 20 64  e .inserts and d
ed10: 65 6c 65 74 65 73 20 63 61 6e 20 6c 65 61 76 65  eletes can leave
ed20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
ed30: 6c 65 20 73 74 72 75 63 74 75 72 65 20 66 72 61  le structure fra
ed40: 67 6d 65 6e 74 65 64 2c 20 0a 77 68 69 63 68 20  gmented, .which 
ed50: 73 6c 6f 77 73 20 64 6f 77 6e 20 64 69 73 6b 20  slows down disk 
ed60: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 64 61  access to the da
ed70: 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 73 2e  tabase contents.
ed80: 0a 0a 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  ..The VACUUM com
ed90: 6d 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20  mand cleans.the 
eda0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 62 79  main database by
edb0: 20 63 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e   copying its con
edc0: 74 65 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f  tents to a tempo
edd0: 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  rary database fi
ede0: 6c 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e  le and .reloadin
edf0: 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  g the original d
ee00: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f  atabase file fro
ee10: 6d 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  m the copy.  Thi
ee20: 73 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72  s eliminates .fr
ee30: 65 65 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e  ee pages,  align
ee40: 73 20 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20  s table data to 
ee50: 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61  be contiguous, a
ee60: 6e 64 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65  nd otherwise cle
ee70: 61 6e 73 20 0a 75 70 20 74 68 65 20 64 61 74 61  ans .up the data
ee80: 62 61 73 65 20 66 69 6c 65 20 73 74 72 75 63 74  base file struct
ee90: 75 72 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ure. It is not p
eea0: 6f 73 73 69 62 6c 65 20 74 6f 20 70 65 72 66 6f  ossible to perfo
eeb0: 72 6d 20 74 68 65 20 73 61 6d 65 0a 70 72 6f 63  rm the same.proc
eec0: 65 73 73 20 6f 6e 20 61 6e 20 61 74 74 61 63 68  ess on an attach
eed0: 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ed database file
eee0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 63  .</p>..<p>This c
eef0: 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c  ommand will fail
ef00: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
ef10: 61 63 74 69 76 65 20 74 72 61 6e 73 61 63 74 69  active transacti
ef20: 6f 6e 2e 20 20 54 68 69 73 20 0a 63 6f 6d 6d 61  on.  This .comma
ef30: 6e 64 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74  nd has no effect
ef40: 20 6f 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79   on an in-memory
ef50: 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a   database.</p>..
ef60: 3c 70 3e 41 73 20 6f 66 20 53 51 4c 69 74 65 20  <p>As of SQLite 
ef70: 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20  version 3.1, an 
ef80: 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75  alternative to u
ef90: 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20  sing the VACUUM 
efa0: 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f 2d  command.is auto-
efb0: 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61  vacuum mode, ena
efc0: 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a  bled using the .
efd0: 3c 61 20 68 72 65 66 3d 22 70 72 61 67 6d 61 2e  <a href="pragma.
efe0: 68 74 6d 6c 23 70 72 61 67 6d 61 5f 61 75 74 6f  html#pragma_auto
eff0: 5f 76 61 63 75 75 6d 22 3e 61 75 74 6f 5f 76 61  _vacuum">auto_va
f000: 63 75 75 6d 20 70 72 61 67 6d 61 3c 2f 61 3e 2e  cuum pragma</a>.
f010: 3c 2f 70 3e 0a 7d 0a 0a 23 20 41 20 6c 69 73 74  </p>.}..# A list
f020: 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41   of keywords.  A
f030: 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73   asterisk occurs
f040: 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f   after the keywo
f050: 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23  rd if it is on.#
f060: 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69   the fallback li
f070: 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72  st..#.set keywor
f080: 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a  d_list [lsort {.
f090: 20 20 20 41 42 4f 52 54 2a 0a 20 20 20 41 46 54     ABORT*.   AFT
f0a0: 45 52 2a 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c  ER*.   ALL.   AL
f0b0: 54 45 52 0a 20 20 20 41 4e 44 0a 20 20 20 41 53  TER.   AND.   AS
f0c0: 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54 54 41  .   ASC*.   ATTA
f0d0: 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43 52 45  CH*.   AUTOINCRE
f0e0: 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 2a 0a  MENT.   BEFORE*.
f0f0: 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42 45 54     BEGIN*.   BET
f100: 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41  WEEN.   BY.   CA
f110: 53 43 41 44 45 2a 0a 20 20 20 43 41 53 45 0a 20  SCADE*.   CASE. 
f120: 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41    CHECK.   COLLA
f130: 54 45 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20  TE.   COMMIT.   
f140: 43 4f 4e 46 4c 49 43 54 2a 0a 20 20 20 43 4f 4e  CONFLICT*.   CON
f150: 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54  STRAINT.   CREAT
f160: 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55  E.   CROSS.   CU
f170: 52 52 45 4e 54 5f 44 41 54 45 2a 0a 20 20 20 43  RRENT_DATE*.   C
f180: 55 52 52 45 4e 54 5f 54 49 4d 45 2a 0a 20 20 20  URRENT_TIME*.   
f190: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
f1a0: 50 2a 0a 20 20 20 44 41 54 41 42 41 53 45 2a 0a  P*.   DATABASE*.
f1b0: 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45     DEFAULT.   DE
f1c0: 46 45 52 52 45 44 2a 0a 20 20 20 44 45 46 45 52  FERRED*.   DEFER
f1d0: 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a  RABLE.   DELETE.
f1e0: 20 20 20 44 45 53 43 2a 0a 20 20 20 44 45 54 41     DESC*.   DETA
f1f0: 43 48 2a 0a 20 20 20 44 49 53 54 49 4e 43 54 0a  CH*.   DISTINCT.
f200: 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 2a 0a     DROP.   END*.
f210: 20 20 20 45 41 43 48 2a 0a 20 20 20 45 4c 53 45     EACH*.   ELSE
f220: 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58  .   ESCAPE.   EX
f230: 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56  CEPT.   EXCLUSIV
f240: 45 2a 0a 20 20 20 45 58 50 4c 41 49 4e 2a 0a 20  E*.   EXPLAIN*. 
f250: 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f 52 2a 0a    FAIL*.   FOR*.
f260: 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52     FOREIGN.   FR
f270: 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c  OM.   FULL.   GL
f280: 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a 20 20 20  OB*.   GROUP.   
f290: 48 41 56 49 4e 47 0a 20 20 20 49 47 4e 4f 52 45  HAVING.   IGNORE
f2a0: 2a 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 2a 0a  *.   IMMEDIATE*.
f2b0: 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20     IN.   INDEX. 
f2c0: 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a 20 20 20    INITIALLY*.   
f2d0: 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a  INNER.   INSERT.
f2e0: 20 20 20 49 4e 53 54 45 41 44 2a 0a 20 20 20 49     INSTEAD*.   I
f2f0: 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f  NTERSECT.   INTO
f300: 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c  .   IS.   ISNULL
f310: 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 2a  .   JOIN.   KEY*
f320: 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45  .   LEFT.   LIKE
f330: 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41  *.   LIMIT.   MA
f340: 54 43 48 2a 0a 20 20 20 4e 41 54 55 52 41 4c 0a  TCH*.   NATURAL.
f350: 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c     NOT.   NOTNUL
f360: 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 2a  L.   NULL.   OF*
f370: 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20 20 20 4f  .   OFFSET*.   O
f380: 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52  N.   OR.   ORDER
f390: 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 52 41  .   OUTER.   PRA
f3a0: 47 4d 41 2a 0a 20 20 20 50 52 49 4d 41 52 59 0a  GMA*.   PRIMARY.
f3b0: 20 20 20 52 41 49 53 45 2a 0a 20 20 20 52 45 46     RAISE*.   REF
f3c0: 45 52 45 4e 43 45 53 0a 20 20 20 52 45 49 4e 44  ERENCES.   REIND
f3d0: 45 58 2a 0a 20 20 20 52 45 4e 41 4d 45 2a 0a 20  EX*.   RENAME*. 
f3e0: 20 20 52 45 50 4c 41 43 45 2a 0a 20 20 20 52 45    REPLACE*.   RE
f3f0: 53 54 52 49 43 54 2a 0a 20 20 20 52 49 47 48 54  STRICT*.   RIGHT
f400: 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20  .   ROLLBACK.   
f410: 52 4f 57 2a 0a 20 20 20 53 45 4c 45 43 54 0a 20  ROW*.   SELECT. 
f420: 20 20 53 45 54 0a 20 20 20 53 54 41 54 45 4d 45    SET.   STATEME
f430: 4e 54 2a 0a 20 20 20 54 41 42 4c 45 0a 20 20 20  NT*.   TABLE.   
f440: 54 45 4d 50 2a 0a 20 20 20 54 45 4d 50 4f 52 41  TEMP*.   TEMPORA
f450: 52 59 2a 0a 20 20 20 54 48 45 4e 0a 20 20 20 54  RY*.   THEN.   T
f460: 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e  O.   TRANSACTION
f470: 0a 20 20 20 54 52 49 47 47 45 52 2a 0a 20 20 20  .   TRIGGER*.   
f480: 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a  UNION.   UNIQUE.
f490: 20 20 20 55 50 44 41 54 45 0a 20 20 20 55 53 49     UPDATE.   USI
f4a0: 4e 47 0a 20 20 20 56 41 43 55 55 4d 2a 0a 20 20  NG.   VACUUM*.  
f4b0: 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57 2a   VALUES.   VIEW*
f4c0: 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52  .   WHEN.   WHER
f4d0: 45 0a 7d 5d 0a 0a 0a 0a 53 65 63 74 69 6f 6e 20  E.}]....Section 
f4e0: 7b 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64 73  {SQLite keywords
f4f0: 7d 20 6b 65 79 77 6f 72 64 73 0a 0a 70 75 74 73  } keywords..puts
f500: 20 7b 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74   {.<p>The SQL st
f510: 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65 73  andard specifies
f520: 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f   a huge number o
f530: 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68  f keywords which
f540: 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64   may not.be used
f550: 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66   as the names of
f560: 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73   tables, indices
f570: 2c 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 64 61  , columns, or da
f580: 74 61 62 61 73 65 73 2e 20 20 54 68 65 0a 6c 69  tabases.  The.li
f590: 73 74 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68  st is so long th
f5a0: 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61  at few people ca
f5b0: 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20  n remember them 
f5c0: 61 6c 6c 2e 20 20 46 6f 72 20 6d 6f 73 74 20 53  all.  For most S
f5d0: 51 4c 0a 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL.code, your sa
f5e0: 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
f5f0: 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
f600: 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f  lish language wo
f610: 72 64 20 61 73 20 74 68 65 0a 6e 61 6d 65 20 6f  rd as the.name o
f620: 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
f630: 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
f640: 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
f650: 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
f660: 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
f670: 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
f680: 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65 20  There.are three 
f690: 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20  ways of quoting 
f6a0: 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69  keywords in SQLi
f6b0: 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c  te:</p>..<p>.<bl
f6c0: 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
f6d0: 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
f6e0: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77  n="top"><b>'keyw
f6f0: 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord'</b></td><td
f700: 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
f710: 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64  >..<td>A keyword
f720: 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
f730: 73 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  s is interpreted
f740: 20 61 73 20 61 20 6c 69 74 65 72 61 6c 20 73 74   as a literal st
f750: 72 69 6e 67 0a 20 20 20 20 20 20 20 20 69 66 20  ring.        if 
f760: 69 74 20 6f 63 63 75 72 73 20 69 6e 20 61 20 63  it occurs in a c
f770: 6f 6e 74 65 78 74 20 77 68 65 72 65 20 61 20 73  ontext where a s
f780: 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73  tring literal is
f790: 20 61 6c 6c 6f 77 65 64 2c 20 6f 74 68 65 72 77   allowed, otherw
f7a0: 69 73 65 0a 09 69 74 20 69 73 20 75 6e 64 65 72  ise..it is under
f7b0: 73 74 6f 6f 64 20 61 73 20 61 6e 20 69 64 65 6e  stood as an iden
f7c0: 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72  tifier.</td></tr
f7d0: 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
f7e0: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77  n="top"><b>"keyw
f7f0: 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord"</b></td><td
f800: 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65  ></td>..<td>A ke
f810: 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d  yword in double-
f820: 71 75 6f 74 65 73 20 69 73 20 69 6e 74 65 72 70  quotes is interp
f830: 72 65 74 65 64 20 61 73 20 61 6e 20 69 64 65 6e  reted as an iden
f840: 74 69 66 69 65 72 20 69 66 0a 20 20 20 20 20 20  tifier if.      
f850: 20 20 69 74 20 6d 61 74 63 68 65 73 20 61 20 6b    it matches a k
f860: 6e 6f 77 6e 20 69 64 65 6e 74 69 66 69 65 72 2e  nown identifier.
f870: 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69    Otherwise it i
f880: 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
f890: 20 61 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e   a.        strin
f8a0: 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c  g literal.</td><
f8b0: 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61  /tr>.<tr>.<td va
f8c0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 5b 6b  lign="top"><b>[k
f8d0: 65 79 77 6f 72 64 5d 3c 2f 62 3e 3c 2f 74 64 3e  eyword]</b></td>
f8e0: 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41  <td></td>..<td>A
f8f0: 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65   keyword enclose
f900: 64 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63  d in square brac
f910: 6b 65 74 73 20 69 73 20 61 6c 77 61 79 73 20 75  kets is always u
f920: 6e 64 65 72 73 74 6f 6f 64 20 61 73 0a 20 20 20  nderstood as.   
f930: 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
f940: 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
f950: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
f960: 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
f970: 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
f980: 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63  s used by MS Acc
f990: 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76  ess and SQL Serv
f9a0: 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  er and is includ
f9b0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
f9c0: 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
f9d0: 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
f9e0: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
f9f0: 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c  ckquote>.</p>..<
fa00: 70 3e 51 75 6f 74 65 64 20 6b 65 79 77 6f 72 64  p>Quoted keyword
fa10: 73 20 61 72 65 20 75 6e 61 65 73 74 68 65 74 69  s are unaestheti
fa20: 63 2e 0a 54 6f 20 68 65 6c 70 20 79 6f 75 20 61  c..To help you a
fa30: 76 6f 69 64 20 74 68 65 6d 2c 20 53 51 4c 69 74  void them, SQLit
fa40: 65 20 61 6c 6c 6f 77 73 20 6d 61 6e 79 20 6b 65  e allows many ke
fa50: 79 77 6f 72 64 73 20 74 6f 20 62 65 20 75 73 65  ywords to be use
fa60: 64 20 75 6e 71 75 6f 74 65 64 0a 61 73 20 74 68  d unquoted.as th
fa70: 65 20 6e 61 6d 65 73 20 6f 66 20 64 61 74 61 62  e names of datab
fa80: 61 73 65 73 2c 20 74 61 62 6c 65 73 2c 20 69 6e  ases, tables, in
fa90: 64 69 63 65 73 2c 20 74 72 69 67 67 65 72 73 2c  dices, triggers,
faa0: 20 76 69 65 77 73 2c 20 61 6e 64 2f 6f 72 20 63   views, and/or c
fab0: 6f 6c 75 6d 6e 73 2e 0a 49 6e 20 74 68 65 20 6c  olumns..In the l
fac0: 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20  ist of keywords 
fad0: 74 68 61 74 20 66 6f 6c 6c 6f 77 73 2c 20 74 68  that follows, th
fae0: 6f 73 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  ose that can be 
faf0: 75 73 65 64 20 61 73 20 69 64 65 6e 74 69 66 69  used as identifi
fb00: 65 72 73 0a 61 72 65 20 73 68 6f 77 6e 20 69 6e  ers.are shown in
fb10: 20 61 6e 20 69 74 61 6c 69 63 20 66 6f 6e 74 2e   an italic font.
fb20: 20 20 4b 65 79 77 6f 72 64 73 20 74 68 61 74 20    Keywords that 
fb30: 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64 20 69  must be quoted i
fb40: 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 0a 75 73  n order to be.us
fb50: 65 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72  ed as identifier
fb60: 73 20 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 62  s are shown in b
fb70: 6f 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51  old.</p>..<p>.SQ
fb80: 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65  Lite adds new ke
fb90: 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65  ywords from time
fba0: 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74   to time when it
fbb0: 20 74 61 6b 65 20 6f 6e 20 6e 65 77 20 66 65 61   take on new fea
fbc0: 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65  tures..So to pre
fbd0: 76 65 6e 74 20 79 6f 75 20 63 6f 64 65 20 66 72  vent you code fr
fbe0: 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20  om being broken 
fbf0: 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63  by future enhanc
fc00: 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75  ements, you shou
fc10: 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74  ld.normally quot
fc20: 65 20 61 6e 79 20 69 6e 64 65 6e 74 69 66 69 65  e any indentifie
fc30: 72 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67  r that is an Eng
fc40: 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f  lish language wo
fc50: 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20  rd, even if.you 
fc60: 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a  do not have to..
fc70: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 6f  </p>..<p>.The fo
fc80: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
fc90: 6b 65 79 77 6f 72 64 73 20 63 75 72 72 65 6e 74  keywords current
fca0: 6c 79 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79  ly recognized by
fcb0: 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
fcc0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
fcd0: 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e  le width="100%">
fce0: 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
fcf0: 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22 74  "left" valign="t
fd00: 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22 3e  op" width="20%">
fd10: 0a 7d 0a 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67  .}..set n [lleng
fd20: 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  th $keyword_list
fd30: 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74  ].set nCol 5.set
fd40: 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e   nRow [expr {($n
fd50: 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d  +$nCol-1)/$nCol}
fd60: 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63  ].set i 0.foreac
fd70: 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f  h word $keyword_
fd80: 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 5b 73 74  list {.  if {[st
fd90: 72 69 6e 67 20 69 6e 64 65 78 20 24 77 6f 72 64  ring index $word
fda0: 20 65 6e 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20 20   end]=="*"} {.  
fdb0: 20 20 73 65 74 20 77 6f 72 64 20 5b 73 74 72 69    set word [stri
fdc0: 6e 67 20 72 61 6e 67 65 20 24 77 6f 72 64 20 30  ng range $word 0
fdd0: 20 65 6e 64 2d 31 5d 0a 20 20 20 20 73 65 74 20   end-1].    set 
fde0: 66 6f 6e 74 20 69 0a 20 20 7d 20 65 6c 73 65 20  font i.  } else 
fdf0: 7b 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20 62  {.    set font b
fe00: 0a 20 20 7d 0a 20 20 69 66 20 7b 24 69 3d 3d 24  .  }.  if {$i==$
fe10: 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 70 75 74 73  nRow} {.    puts
fe20: 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67   "</td><td valig
fe30: 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d  n=\"top\" align=
fe40: 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d 5c  \"left\" width=\
fe50: 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65 74  "20%\">".    set
fe60: 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a   i 1.  } else {.
fe70: 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20      incr i.  }. 
fe80: 20 70 75 74 73 20 22 3c 24 66 6f 6e 74 3e 24 77   puts "<$font>$w
fe90: 6f 72 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22  ord</$font><br>"
fea0: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 2f 74 64 3e  .}..puts {.</td>
feb0: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62  </tr></table></b
fec0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e  lockquote>..<h2>
fed0: 53 70 65 63 69 61 6c 20 6e 61 6d 65 73 3c 2f 68  Special names</h
fee0: 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f  2>..<p>The follo
fef0: 77 69 6e 67 20 61 72 65 20 6e 6f 74 20 6b 65 79  wing are not key
ff00: 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 2c  words in SQLite,
ff10: 20 62 75 74 20 61 72 65 20 75 73 65 64 20 61 73   but are used as
ff20: 20 6e 61 6d 65 73 20 6f 66 20 0a 73 79 73 74 65   names of .syste
ff30: 6d 20 6f 62 6a 65 63 74 73 2e 20 20 54 68 65 79  m objects.  They
ff40: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 73 20   can be used as 
ff50: 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f  an identifier fo
ff60: 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 0a 74  r a different .t
ff70: 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f  ype of object.</
ff80: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
ff90: 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c 62 72  <b>.  _ROWID_<br
ffa0: 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20 20 4f  >.  MAIN<br>.  O
ffb0: 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44 3c 62  ID<br>.  ROWID<b
ffc0: 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41 53 54  r>.  SQLITE_MAST
ffd0: 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f  ER<br>.  SQLITE_
ffe0: 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20 20 53  SEQUENCE<br>.  S
fff0: 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53 54 45  QLITE_TEMP_MASTE
10000 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62 72 3e  R<br>.  TEMP<br>
10010 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  .</b></blockquot
10020 65 3e 0a 7d 0a 0a 66 6f 6f 74 65 72 20 24 72 63  e>.}..footer $rc
10030 73 69 64 0a 69 66 20 7b 5b 73 74 72 69 6e 67 20  sid.if {[string 
10040 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74 64 69  length $outputdi
10050 72 5d 7d 20 7b 0a 20 20 66 6f 6f 74 65 72 20 24  r]} {.  footer $
10060 72 63 73 69 64 0a 7d 0a                          rcsid.}.