/ Hex Artifact Content
Login

Artifact 8dde95ed76af71579a132c9bb730d3764056d3ff:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 54 63 6c  #.# Run this Tcl
0010: 20 73 63 72 69 70 74 20 74 6f 20 67 65 6e 65 72   script to gener
0020: 61 74 65 20 74 68 65 20 6c 61 6e 67 2d 2a 2e 68  ate the lang-*.h
0030: 74 6d 6c 20 66 69 6c 65 73 2e 0a 23 0a 73 65 74  tml files..#.set
0040: 20 72 63 73 69 64 20 7b 24 49 64 3a 20 6c 61 6e   rcsid {$Id: lan
0050: 67 2e 74 63 6c 2c 76 20 31 2e 31 32 39 20 32 30  g.tcl,v 1.129 20
0060: 30 37 2f 30 35 2f 31 35 20 30 31 3a 31 33 3a 34  07/05/15 01:13:4
0070: 37 20 64 72 68 20 45 78 70 20 24 7d 0a 73 6f 75  7 drh Exp $}.sou
0080: 72 63 65 20 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a  rce common.tcl..
0090: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72  if {[llength $ar
00a0: 67 76 5d 3e 30 7d 20 7b 0a 20 20 73 65 74 20 6f  gv]>0} {.  set o
00b0: 75 74 70 75 74 64 69 72 20 5b 6c 69 6e 64 65 78  utputdir [lindex
00c0: 20 24 61 72 67 76 20 30 5d 0a 7d 20 65 6c 73 65   $argv 0].} else
00d0: 20 7b 0a 20 20 73 65 74 20 6f 75 74 70 75 74 64   {.  set outputd
00e0: 69 72 20 22 22 0a 7d 0a 0a 68 65 61 64 65 72 20  ir "".}..header 
00f0: 7b 51 75 65 72 79 20 4c 61 6e 67 75 61 67 65 20  {Query Language 
0100: 55 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 53 51  Understood by SQ
0110: 4c 69 74 65 7d 0a 70 75 74 73 20 7b 0a 3c 68 31  Lite}.puts {.<h1
0120: 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74   class="pdf_sect
0130: 69 6f 6e 22 3e 53 51 4c 20 41 73 20 55 6e 64 65  ion">SQL As Unde
0140: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0150: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  </h1>..<p>The SQ
0160: 4c 69 74 65 20 6c 69 62 72 61 72 79 20 75 6e 64  Lite library und
0170: 65 72 73 74 61 6e 64 73 20 6d 6f 73 74 20 6f 66  erstands most of
0180: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 53 51   the standard SQ
0190: 4c 0a 6c 61 6e 67 75 61 67 65 2e 20 20 42 75 74  L.language.  But
01a0: 20 69 74 20 64 6f 65 73 20 3c 61 20 68 72 65 66   it does <a href
01b0: 3d 22 6f 6d 69 74 74 65 64 2e 68 74 6d 6c 22 3e  ="omitted.html">
01c0: 6f 6d 69 74 20 73 6f 6d 65 20 66 65 61 74 75 72  omit some featur
01d0: 65 73 3c 2f 61 3e 0a 77 68 69 6c 65 20 61 74 20  es</a>.while at 
01e0: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 61 64  the same time.ad
01f0: 64 69 6e 67 20 61 20 66 65 77 20 66 65 61 74 75  ding a few featu
0200: 72 65 73 20 6f 66 20 69 74 73 20 6f 77 6e 2e 20  res of its own. 
0210: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 61   This document a
0220: 74 74 65 6d 70 74 73 20 74 6f 0a 64 65 73 63 72  ttempts to.descr
0230: 69 62 65 20 70 72 65 63 69 73 65 6c 79 20 77 68  ibe precisely wh
0240: 61 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  at parts of the 
0250: 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 53 51 4c  SQL language SQL
0260: 69 74 65 20 64 6f 65 73 0a 61 6e 64 20 64 6f 65  ite does.and doe
0270: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 2e 20 20  s not support.  
0280: 41 20 6c 69 73 74 20 6f 66 20 3c 61 20 68 72 65  A list of <a hre
0290: 66 3d 22 6c 61 6e 67 5f 6b 65 79 77 6f 72 64 73  f="lang_keywords
02a0: 2e 68 74 6d 6c 22 3e 6b 65 79 77 6f 72 64 73 3c  .html">keywords<
02b0: 2f 61 3e 20 69 73 20 0a 61 6c 73 6f 20 70 72 6f  /a> is .also pro
02c0: 76 69 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  vided.</p>..<p>I
02d0: 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 73 79 6e  n all of the syn
02e0: 74 61 78 20 64 69 61 67 72 61 6d 73 20 74 68 61  tax diagrams tha
02f0: 74 20 66 6f 6c 6c 6f 77 2c 20 6c 69 74 65 72 61  t follow, litera
0300: 6c 20 74 65 78 74 20 69 73 20 73 68 6f 77 6e 20  l text is shown 
0310: 69 6e 0a 62 6f 6c 64 20 62 6c 75 65 2e 20 20 4e  in.bold blue.  N
0320: 6f 6e 2d 74 65 72 6d 69 6e 61 6c 20 73 79 6d 62  on-terminal symb
0330: 6f 6c 73 20 61 72 65 20 73 68 6f 77 6e 20 69 6e  ols are shown in
0340: 20 69 74 61 6c 69 63 20 72 65 64 2e 20 20 4f 70   italic red.  Op
0350: 65 72 61 74 6f 72 73 0a 74 68 61 74 20 61 72 65  erators.that are
0360: 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 79 6e   part of the syn
0370: 74 61 63 74 69 63 20 6d 61 72 6b 75 70 20 69 74  tactic markup it
0380: 73 65 6c 66 20 61 72 65 20 73 68 6f 77 6e 20 69  self are shown i
0390: 6e 20 62 6c 61 63 6b 20 72 6f 6d 61 6e 2e 3c 2f  n black roman.</
03a0: 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75  p>..<p>This docu
03b0: 6d 65 6e 74 20 69 73 20 6a 75 73 74 20 61 6e 20  ment is just an 
03c0: 6f 76 65 72 76 69 65 77 20 6f 66 20 74 68 65 20  overview of the 
03d0: 53 51 4c 20 73 79 6e 74 61 78 20 69 6d 70 6c 65  SQL syntax imple
03e0: 6d 65 6e 74 65 64 0a 62 79 20 53 51 4c 69 74 65  mented.by SQLite
03f0: 2e 20 20 4d 61 6e 79 20 6c 6f 77 2d 6c 65 76 65  .  Many low-leve
0400: 6c 20 70 72 6f 64 75 63 74 69 6f 6e 73 20 61 72  l productions ar
0410: 65 20 6f 6d 69 74 74 65 64 2e 20 20 46 6f 72 20  e omitted.  For 
0420: 64 65 74 61 69 6c 65 64 20 69 6e 66 6f 72 6d 61  detailed informa
0430: 74 69 6f 6e 0a 6f 6e 20 74 68 65 20 6c 61 6e 67  tion.on the lang
0440: 75 61 67 65 20 74 68 61 74 20 53 51 4c 69 74 65  uage that SQLite
0450: 20 75 6e 64 65 72 73 74 61 6e 64 73 2c 20 72 65   understands, re
0460: 66 65 72 20 74 6f 20 74 68 65 20 73 6f 75 72 63  fer to the sourc
0470: 65 20 63 6f 64 65 20 61 6e 64 0a 74 68 65 20 67  e code and.the g
0480: 72 61 6d 6d 61 72 20 66 69 6c 65 20 22 70 61 72  rammar file "par
0490: 73 65 2e 79 22 2e 3c 2f 70 3e 0a 0a 3c 64 69 76  se.y".</p>..<div
04a0: 20 63 6c 61 73 73 3d 22 70 64 66 5f 69 67 6e 6f   class="pdf_igno
04b0: 72 65 22 3e 0a 3c 70 3e 53 51 4c 69 74 65 20 69  re">.<p>SQLite i
04c0: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66 6f  mplements the fo
04d0: 6c 6c 6f 77 20 73 79 6e 74 61 78 3a 3c 2f 70 3e  llow syntax:</p>
04e0: 0a 3c 70 3e 3c 75 6c 3e 0a 7d 0a 0a 70 72 6f 63  .<p><ul>.}..proc
04f0: 20 73 6c 69 6e 6b 20 7b 6c 61 62 65 6c 7d 20 7b   slink {label} {
0500: 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d  .  if {[string m
0510: 61 74 63 68 20 2a 2e 68 74 6d 6c 20 24 6c 61 62  atch *.html $lab
0520: 65 6c 5d 7d 20 7b 0a 20 20 20 20 72 65 74 75 72  el]} {.    retur
0530: 6e 20 24 6c 61 62 65 6c 0a 20 20 7d 0a 20 20 69  n $label.  }.  i
0540: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
0550: 68 20 24 3a 3a 6f 75 74 70 75 74 64 69 72 5d 3d  h $::outputdir]=
0560: 3d 30 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0} {.    return
0570: 20 23 24 6c 61 62 65 6c 0a 20 20 7d 20 65 6c 73   #$label.  } els
0580: 65 20 7b 20 0a 20 20 20 20 72 65 74 75 72 6e 20  e { .    return 
0590: 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d 6c  lang_$label.html
05a0: 0a 20 20 7d 0a 7d 0a 0a 66 6f 72 65 61 63 68 20  .  }.}..foreach 
05b0: 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f 72 74  {section} [lsort
05c0: 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63 74 69   -index 0 -dicti
05d0: 6f 6e 61 72 79 20 7b 0a 20 20 7b 7b 43 52 45 41  onary {.  {{CREA
05e0: 54 45 20 54 41 42 4c 45 7d 20 63 72 65 61 74 65  TE TABLE} create
05f0: 74 61 62 6c 65 7d 0a 20 20 7b 7b 43 52 45 41 54  table}.  {{CREAT
0600: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d  E VIRTUAL TABLE}
0610: 20 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 7b   createvtab}.  {
0620: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63  {CREATE INDEX} c
0630: 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 7b 56  reateindex}.  {V
0640: 41 43 55 55 4d 20 76 61 63 75 75 6d 7d 0a 20 20  ACUUM vacuum}.  
0650: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72  {{DROP TABLE} dr
0660: 6f 70 74 61 62 6c 65 7d 0a 20 20 7b 7b 44 52 4f  optable}.  {{DRO
0670: 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64  P INDEX} dropind
0680: 65 78 7d 0a 20 20 7b 49 4e 53 45 52 54 20 69 6e  ex}.  {INSERT in
0690: 73 65 72 74 7d 0a 20 20 7b 52 45 50 4c 41 43 45  sert}.  {REPLACE
06a0: 20 72 65 70 6c 61 63 65 7d 0a 20 20 7b 44 45 4c   replace}.  {DEL
06b0: 45 54 45 20 64 65 6c 65 74 65 7d 0a 20 20 7b 55  ETE delete}.  {U
06c0: 50 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20  PDATE update}.  
06d0: 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d 0a  {SELECT select}.
06e0: 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65    {comment comme
06f0: 6e 74 7d 0a 20 20 7b 43 4f 50 59 20 63 6f 70 79  nt}.  {COPY copy
0700: 7d 0a 20 20 7b 45 58 50 4c 41 49 4e 20 65 78 70  }.  {EXPLAIN exp
0710: 6c 61 69 6e 7d 0a 20 20 7b 65 78 70 72 65 73 73  lain}.  {express
0720: 69 6f 6e 20 65 78 70 72 7d 0a 20 20 7b 7b 42 45  ion expr}.  {{BE
0730: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  GIN TRANSACTION}
0740: 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20   transaction}.  
0750: 7b 7b 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43  {{COMMIT TRANSAC
0760: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
0770: 6e 7d 0a 20 20 7b 7b 45 4e 44 20 54 52 41 4e 53  n}.  {{END TRANS
0780: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
0790: 69 6f 6e 7d 0a 20 20 7b 7b 52 4f 4c 4c 42 41 43  ion}.  {{ROLLBAC
07a0: 4b 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  K TRANSACTION} t
07b0: 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 50  ransaction}.  {P
07c0: 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68 74 6d  RAGMA pragma.htm
07d0: 6c 7d 0a 20 20 7b 7b 4f 4e 20 43 4f 4e 46 4c 49  l}.  {{ON CONFLI
07e0: 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c  CT clause} confl
07f0: 69 63 74 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20  ict}.  {{CREATE 
0800: 56 49 45 57 7d 20 63 72 65 61 74 65 76 69 65 77  VIEW} createview
0810: 7d 0a 20 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d  }.  {{DROP VIEW}
0820: 20 64 72 6f 70 76 69 65 77 7d 0a 20 20 7b 7b 43   dropview}.  {{C
0830: 52 45 41 54 45 20 54 52 49 47 47 45 52 7d 20 63  REATE TRIGGER} c
0840: 72 65 61 74 65 74 72 69 67 67 65 72 7d 0a 20 20  reatetrigger}.  
0850: 7b 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20  {{DROP TRIGGER} 
0860: 64 72 6f 70 74 72 69 67 67 65 72 7d 0a 20 20 7b  droptrigger}.  {
0870: 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  {ATTACH DATABASE
0880: 7d 20 61 74 74 61 63 68 7d 0a 20 20 7b 7b 44 45  } attach}.  {{DE
0890: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
08a0: 65 74 61 63 68 7d 0a 20 20 7b 52 45 49 4e 44 45  etach}.  {REINDE
08b0: 58 20 72 65 69 6e 64 65 78 7d 0a 20 20 7b 7b 41  X reindex}.  {{A
08c0: 4c 54 45 52 20 54 41 42 4c 45 7d 20 61 6c 74 65  LTER TABLE} alte
08d0: 72 74 61 62 6c 65 7d 0a 20 20 7b 7b 41 4e 41 4c  rtable}.  {{ANAL
08e0: 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 7d 0a 7d 5d  YZE} analyze}.}]
08f0: 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 5f   {.  foreach {s_
0900: 74 69 74 6c 65 20 73 5f 74 61 67 7d 20 24 73 65  title s_tag} $se
0910: 63 74 69 6f 6e 20 7b 7d 0a 20 20 70 75 74 73 20  ction {}.  puts 
0920: 22 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22 5b  "<li><a href=\"[
0930: 73 6c 69 6e 6b 20 24 73 5f 74 61 67 5d 5c 22 3e  slink $s_tag]\">
0940: 24 73 5f 74 69 74 6c 65 3c 2f 61 3e 3c 2f 6c 69  $s_title</a></li
0950: 3e 22 0a 7d 0a 70 75 74 73 20 7b 3c 2f 75 6c 3e  >".}.puts {</ul>
0960: 3c 2f 70 3e 0a 3c 2f 64 69 76 3e 0a 0a 3c 70 3e  </p>.</div>..<p>
0970: 44 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 69  Details on the i
0980: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
0990: 20 65 61 63 68 20 63 6f 6d 6d 61 6e 64 20 61 72   each command ar
09a0: 65 20 70 72 6f 76 69 64 65 64 20 69 6e 0a 74 68  e provided in.th
09b0: 65 20 73 65 71 75 65 6c 2e 3c 2f 70 3e 0a 7d 0a  e sequel.</p>.}.
09c0: 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20 7b  .proc Operator {
09d0: 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e  name} {.  return
09e0: 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22   "<font color=\"
09f0: 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e 24  #2c2cf0\"><big>$
0a00: 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74  name</big></font
0a10: 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65 72  >".}.proc Nonter
0a20: 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20  minal {name} {. 
0a30: 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e   return "<i><fon
0a40: 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34 33  t color=\"#ff343
0a50: 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e  4\">$name</font>
0a60: 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65 79  </i>".}.proc Key
0a70: 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  word {name} {.  
0a80: 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f  return "<font co
0a90: 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e  lor=\"#2c2cf0\">
0aa0: 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a  $name</font>".}.
0ab0: 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74 65  proc Example {te
0ac0: 78 74 7d 20 7b 0a 20 20 70 75 74 73 20 22 3c 62  xt} {.  puts "<b
0ad0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 24  lockquote><pre>$
0ae0: 74 65 78 74 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  text</pre></bloc
0af0: 6b 71 75 6f 74 65 3e 22 0a 7d 0a 0a 70 72 6f 63  kquote>".}..proc
0b00: 20 53 65 63 74 69 6f 6e 20 7b 6e 61 6d 65 20 6c   Section {name l
0b10: 61 62 65 6c 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c  abel} {.  global
0b20: 20 6f 75 74 70 75 74 64 69 72 0a 0a 20 20 69 66   outputdir..  if
0b30: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
0b40: 20 24 6f 75 74 70 75 74 64 69 72 5d 21 3d 30 7d   $outputdir]!=0}
0b50: 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e   {.    if {[llen
0b60: 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e  gth [info comman
0b70: 64 73 20 70 75 74 73 5f 73 74 61 6e 64 61 72 64  ds puts_standard
0b80: 5d 5d 3e 30 7d 20 7b 0a 20 20 20 20 20 20 66 6f  ]]>0} {.      fo
0b90: 6f 74 65 72 20 24 3a 3a 72 63 73 69 64 0a 20 20  oter $::rcsid.  
0ba0: 20 20 7d 0a 0a 20 20 20 20 69 66 20 7b 5b 73 74    }..    if {[st
0bb0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6c 61 62  ring length $lab
0bc0: 65 6c 5d 3e 30 7d 20 7b 0a 20 20 20 20 20 20 72  el]>0} {.      r
0bd0: 65 6e 61 6d 65 20 70 75 74 73 20 70 75 74 73 5f  ename puts puts_
0be0: 73 74 61 6e 64 61 72 64 0a 20 20 20 20 20 20 70  standard.      p
0bf0: 72 6f 63 20 70 75 74 73 20 7b 73 74 72 7d 20 7b  roc puts {str} {
0c00: 0a 20 20 20 20 20 20 20 20 72 65 67 73 75 62 20  .        regsub 
0c10: 2d 61 6c 6c 20 7b 68 72 65 66 3d 22 23 28 5b 61  -all {href="#([a
0c20: 2d 7a 5d 2b 29 22 7d 20 24 73 74 72 20 7b 68 72  -z]+)"} $str {hr
0c30: 65 66 3d 22 6c 61 6e 67 5f 5c 31 2e 68 74 6d 6c  ef="lang_\1.html
0c40: 22 7d 20 73 74 72 0a 20 20 20 20 20 20 20 20 70  "} str.        p
0c50: 75 74 73 5f 73 74 61 6e 64 61 72 64 20 24 3a 3a  uts_standard $::
0c60: 73 65 63 74 69 6f 6e 5f 66 69 6c 65 20 24 73 74  section_file $st
0c70: 72 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  r.      }.      
0c80: 72 65 6e 61 6d 65 20 66 6f 6f 74 65 72 20 66 6f  rename footer fo
0c90: 6f 74 65 72 5f 73 74 61 6e 64 61 72 64 0a 20 20  oter_standard.  
0ca0: 20 20 20 20 70 72 6f 63 20 66 6f 6f 74 65 72 20      proc footer 
0cb0: 7b 69 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 66  {id} {.        f
0cc0: 6f 6f 74 65 72 5f 73 74 61 6e 64 61 72 64 20 24  ooter_standard $
0cd0: 69 64 0a 20 20 20 20 20 20 20 20 72 65 6e 61 6d  id.        renam
0ce0: 65 20 66 6f 6f 74 65 72 20 22 22 0a 20 20 20 20  e footer "".    
0cf0: 20 20 20 20 72 65 6e 61 6d 65 20 70 75 74 73 20      rename puts 
0d00: 22 22 0a 20 20 20 20 20 20 20 20 72 65 6e 61 6d  "".        renam
0d10: 65 20 70 75 74 73 5f 73 74 61 6e 64 61 72 64 20  e puts_standard 
0d20: 70 75 74 73 0a 20 20 20 20 20 20 20 20 72 65 6e  puts.        ren
0d30: 61 6d 65 20 66 6f 6f 74 65 72 5f 73 74 61 6e 64  ame footer_stand
0d40: 61 72 64 20 66 6f 6f 74 65 72 0a 20 20 20 20 20  ard footer.     
0d50: 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 3a 3a   } .      set ::
0d60: 73 65 63 74 69 6f 6e 5f 66 69 6c 65 20 5b 6f 70  section_file [op
0d70: 65 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6f  en [file join $o
0d80: 75 74 70 75 74 64 69 72 20 6c 61 6e 67 5f 24 6c  utputdir lang_$l
0d90: 61 62 65 6c 2e 68 74 6d 6c 5d 20 77 5d 0a 20 20  abel.html] w].  
0da0: 20 20 20 20 68 65 61 64 65 72 20 22 51 75 65 72      header "Quer
0db0: 79 20 4c 61 6e 67 75 61 67 65 20 55 6e 64 65 72  y Language Under
0dc0: 73 74 6f 6f 64 20 62 79 20 53 51 4c 69 74 65 3a  stood by SQLite:
0dd0: 20 24 6e 61 6d 65 22 0a 20 20 20 20 20 20 70 75   $name".      pu
0de0: 74 73 20 22 3c 68 31 3e 53 51 4c 20 41 73 20 55  ts "<h1>SQL As U
0df0: 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51 4c  nderstood By SQL
0e00: 69 74 65 3c 2f 68 31 3e 22 0a 20 20 20 20 20 20  ite</h1>".      
0e10: 70 75 74 73 20 22 3c 61 20 68 72 65 66 3d 5c 22  puts "<a href=\"
0e20: 6c 61 6e 67 2e 68 74 6d 6c 5c 22 3e 5c 5b 43 6f  lang.html\">\[Co
0e30: 6e 74 65 6e 74 73 5c 5d 3c 2f 61 3e 22 0a 20 20  ntents\]</a>".  
0e40: 20 20 20 20 70 75 74 73 20 22 3c 68 32 3e 24 6e      puts "<h2>$n
0e50: 61 6d 65 3c 2f 68 32 3e 22 0a 20 20 20 20 20 20  ame</h2>".      
0e60: 72 65 74 75 72 6e 20 0a 20 20 20 20 7d 0a 20 20  return .    }.  
0e70: 7d 0a 20 20 70 75 74 73 20 22 5c 6e 3c 68 72 20  }.  puts "\n<hr 
0e80: 2f 3e 22 0a 20 20 69 66 20 7b 24 6c 61 62 65 6c  />".  if {$label
0e90: 21 3d 22 22 7d 20 7b 0a 20 20 20 20 70 75 74 73  !=""} {.    puts
0ea0: 20 22 3c 61 20 6e 61 6d 65 3d 5c 22 24 6c 61 62   "<a name=\"$lab
0eb0: 65 6c 5c 22 3e 3c 2f 61 3e 22 0a 20 20 7d 0a 20  el\"></a>".  }. 
0ec0: 20 70 75 74 73 20 22 3c 68 31 3e 24 6e 61 6d 65   puts "<h1>$name
0ed0: 3c 2f 68 31 3e 5c 6e 22 0a 7d 0a 0a 53 65 63 74  </h1>\n".}..Sect
0ee0: 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c 45  ion {ALTER TABLE
0ef0: 7d 20 61 6c 74 65 72 74 61 62 6c 65 0a 0a 53 79  } altertable..Sy
0f00: 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
0f10: 65 6e 74 7d 20 7b 0a 41 4c 54 45 52 20 54 41 42  ent} {.ALTER TAB
0f20: 4c 45 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  LE [<database-na
0f30: 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
0f40: 6d 65 3e 20 3c 61 6c 74 65 72 61 74 69 6f 6e 3e  me> <alteration>
0f50: 0a 7d 20 7b 61 6c 74 65 72 61 74 69 6f 6e 7d 20  .} {alteration} 
0f60: 7b 0a 52 45 4e 41 4d 45 20 54 4f 20 3c 6e 65 77  {.RENAME TO <new
0f70: 2d 74 61 62 6c 65 2d 6e 61 6d 65 3e 0a 7d 20 7b  -table-name>.} {
0f80: 61 6c 74 65 72 61 74 69 6f 6e 7d 20 7b 0a 41 44  alteration} {.AD
0f90: 44 20 5b 43 4f 4c 55 4d 4e 5d 20 3c 63 6f 6c 75  D [COLUMN] <colu
0fa0: 6d 6e 2d 64 65 66 3e 0a 7d 0a 0a 70 75 74 73 20  mn-def>.}..puts 
0fb0: 7b 0a 3c 70 3e 53 51 4c 69 74 65 27 73 20 76 65  {.<p>SQLite's ve
0fc0: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 41 4c 54  rsion of the ALT
0fd0: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
0fe0: 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72   allows the user
0ff0: 20 74 6f 20 0a 72 65 6e 61 6d 65 20 6f 72 20 61   to .rename or a
1000: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
1010: 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  to an existing t
1020: 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20  able. It is not 
1030: 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6d 6f  possible.to remo
1040: 76 65 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  ve a column from
1050: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
1060: 3c 70 3e 54 68 65 20 52 45 4e 41 4d 45 20 54 4f  <p>The RENAME TO
1070: 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 20   syntax is used 
1080: 74 6f 20 72 65 6e 61 6d 65 20 74 68 65 20 74 61  to rename the ta
1090: 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ble identified b
10a0: 79 20 0a 3c 69 3e 5b 64 61 74 61 62 61 73 65 2d  y .<i>[database-
10b0: 6e 61 6d 65 2e 5d 74 61 62 6c 65 2d 6e 61 6d 65  name.]table-name
10c0: 3c 2f 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74  </i> to <i>new-t
10d0: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 54  able-name</i>. T
10e0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
10f0: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
1100: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
1110: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
1120: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
1130: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
1140: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
1150: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
1160: 70 3e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62  p>If the table b
1170: 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73  eing renamed has
1180: 20 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64   triggers or ind
1190: 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65  ices, then these
11a0: 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64   remain.attached
11b0: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66   to the table af
11c0: 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20  ter it has been 
11d0: 72 65 6e 61 6d 65 64 2e 20 48 6f 77 65 76 65 72  renamed. However
11e0: 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 61  , if there are.a
11f0: 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  ny view definiti
1200: 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e  ons, or statemen
1210: 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20 74  ts executed by t
1220: 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65 66  riggers that ref
1230: 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65 20  er to.the table 
1240: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74  being renamed, t
1250: 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75 74  hese are not aut
1260: 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66  omatically modif
1270: 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ied to use the n
1280: 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49  ew.table name. I
1290: 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69 72  f this is requir
12a0: 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72 73  ed, the triggers
12b0: 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69 74   or view definit
12c0: 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72 6f  ions must be.dro
12d0: 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74  pped and recreat
12e0: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
12f0: 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79 20  w table name by 
1300: 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  hand..</p>..<p>T
1310: 68 65 20 41 44 44 20 5b 43 4f 4c 55 4d 4e 5d 20  he ADD [COLUMN] 
1320: 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 20 74  syntax is used t
1330: 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
1340: 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e  mn to an existin
1350: 67 20 74 61 62 6c 65 2e 0a 54 68 65 20 6e 65 77  g table..The new
1360: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79   column is alway
1370: 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  s appended to th
1380: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73  e end of the lis
1390: 74 20 6f 66 20 65 78 69 73 74 69 6e 67 20 63 6f  t of existing co
13a0: 6c 75 6d 6e 73 2e 0a 3c 69 3e 43 6f 6c 75 6d 6e  lumns..<i>Column
13b0: 2d 64 65 66 3c 2f 69 3e 20 6d 61 79 20 74 61 6b  -def</i> may tak
13c0: 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72  e any of the for
13d0: 6d 73 20 70 65 72 6d 69 73 73 61 62 6c 65 20 69  ms permissable i
13e0: 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
13f0: 20 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74   .statement, wit
1400: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  h the following 
1410: 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 0a 3c 75  restrictions:.<u
1420: 6c 3e 0a 3c 6c 69 3e 54 68 65 20 63 6f 6c 75 6d  l>.<li>The colum
1430: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
1440: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
1450: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
1460: 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 54 68 65 20  t.</li>.<li>The 
1470: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68  column may not h
1480: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ave a default va
1490: 6c 75 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54  lue of CURRENT_T
14a0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
14b0: 45 20 0a 20 20 20 20 6f 72 20 43 55 52 52 45 4e  E .    or CURREN
14c0: 54 5f 54 49 4d 45 53 54 41 4d 50 2e 3c 2f 6c 69  T_TIMESTAMP.</li
14d0: 3e 0a 3c 6c 69 3e 49 66 20 61 20 4e 4f 54 20 4e  >.<li>If a NOT N
14e0: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  ULL constraint i
14f0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
1500: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73  n the column mus
1510: 74 20 68 61 76 65 20 61 0a 20 20 20 20 64 65 66  t have a.    def
1520: 61 75 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72  ault value other
1530: 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c   than NULL..</ul
1540: 3e 0a 0a 3c 70 3e 54 68 65 20 65 78 65 63 75 74  >..<p>The execut
1550: 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65 20  ion time of the 
1560: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
1570: 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64 65  and is independe
1580: 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74  nt of.the amount
1590: 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20   of data in the 
15a0: 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54 45  table.  The ALTE
15b0: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
15c0: 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79 0a  runs as quickly.
15d0: 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  on a table with 
15e0: 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20  10 million rows 
15f0: 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61 20  as it does on a 
1600: 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f 77  table with 1 row
1610: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72  ..</p>..<p>After
1620: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20   ADD COLUMN has 
1630: 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61  been run on a da
1640: 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61 74  tabase, that dat
1650: 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62  abase will not.b
1660: 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53 51  e readable by SQ
1670: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31  Lite version 3.1
1680: 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 20 75  .3 and earlier u
1690: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
16a0: 65 0a 69 73 20 3c 61 20 68 72 65 66 3d 22 6c 61  e.is <a href="la
16b0: 6e 67 5f 76 61 63 75 75 6d 2e 68 74 6d 6c 22 3e  ng_vacuum.html">
16c0: 56 41 43 55 55 4d 3c 2f 61 3e 65 64 2e 3c 2f 70  VACUUM</a>ed.</p
16d0: 3e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 41 4e  >.}..Section {AN
16e0: 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 0a 0a  ALYZE} analyze..
16f0: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
1700: 65 6d 65 6e 74 7d 20 7b 0a 20 20 41 4e 41 4c 59  ement} {.  ANALY
1710: 5a 45 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ZE.}.Syntax {sql
1720: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20  -statement} {.  
1730: 41 4e 41 4c 59 5a 45 20 3c 64 61 74 61 62 61 73  ANALYZE <databas
1740: 65 2d 6e 61 6d 65 3e 0a 7d 0a 53 79 6e 74 61 78  e-name>.}.Syntax
1750: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
1760: 20 7b 0a 20 20 41 4e 41 4c 59 5a 45 20 5b 3c 64   {.  ANALYZE [<d
1770: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d  atabase-name> .]
1780: 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 0a 7d 0a   <table-name>.}.
1790: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 41  .puts {.<p>The A
17a0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
17b0: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
17c0: 73 20 61 62 6f 75 74 20 69 6e 64 69 63 65 73 20  s about indices 
17d0: 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65 6d 0a  and stores them.
17e0: 69 6e 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  in a special tab
17f0: 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
1800: 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71 75  ase where the qu
1810: 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61  ery optimizer ca
1820: 6e 20 75 73 65 0a 74 68 65 6d 20 74 6f 20 68 65  n use.them to he
1830: 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72 20 69  lp make better i
1840: 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 0a 49 66  ndex choices..If
1850: 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61 72   no arguments ar
1860: 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 69 6e 64  e given, all ind
1870: 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61  ices in all atta
1880: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
1890: 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20 49 66  re.analyzed.  If
18a0: 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
18b0: 20 69 73 20 67 69 76 65 6e 20 61 73 20 74 68 65   is given as the
18c0: 20 61 72 67 75 6d 65 6e 74 2c 20 61 6c 6c 20 69   argument, all i
18d0: 6e 64 69 63 65 73 0a 69 6e 20 74 68 61 74 20 6f  ndices.in that o
18e0: 6e 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  ne database are 
18f0: 61 6e 61 6c 79 7a 65 64 2e 20 20 49 66 20 74 68  analyzed.  If th
1900: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  e argument is a 
1910: 74 61 62 6c 65 20 6e 61 6d 65 2c 0a 74 68 65 6e  table name,.then
1920: 20 6f 6e 6c 79 20 69 6e 64 69 63 65 73 20 61 73   only indices as
1930: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1940: 61 74 20 6f 6e 65 20 74 61 62 6c 65 20 61 72 65  at one table are
1950: 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a   analyzed.</p>..
1960: 3c 70 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 69  <p>The initial i
1970: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1980: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1990: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
19a0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73  table named <b>s
19b0: 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e  qlite_stat1</b>.
19c0: 20 20 46 75 74 75 72 65 20 65 6e 68 61 6e 63 65    Future enhance
19d0: 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61 74 65  ments may create
19e0: 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74 61 62 6c  .additional tabl
19f0: 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1a00: 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78   name pattern ex
1a10: 63 65 70 74 20 77 69 74 68 20 74 68 65 20 22 31  cept with the "1
1a20: 22 0a 63 68 61 6e 67 65 64 20 74 6f 20 61 20 64  ".changed to a d
1a30: 69 66 66 65 72 65 6e 74 20 64 69 67 69 74 2e 20  ifferent digit. 
1a40: 20 54 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73   The <b>sqlite_s
1a50: 74 61 74 31 3c 2f 62 3e 20 74 61 62 6c 65 20 63  tat1</b> table c
1a60: 61 6e 6e 6f 74 0a 62 65 20 3c 61 20 68 72 65 66  annot.be <a href
1a70: 3d 22 23 64 72 6f 70 74 61 62 6c 65 22 3e 44 52  ="#droptable">DR
1a80: 4f 50 3c 2f 61 3e 70 65 64 2c 0a 62 75 74 20 61  OP</a>ped,.but a
1a90: 6c 6c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 63  ll the content c
1aa0: 61 6e 20 62 65 20 3c 61 20 68 72 65 66 3d 22 23  an be <a href="#
1ab0: 64 65 6c 65 74 65 22 3e 44 45 4c 45 54 45 3c 2f  delete">DELETE</
1ac0: 61 3e 64 20 77 68 69 63 68 20 68 61 73 20 74 68  a>d which has th
1ad0: 65 0a 73 61 6d 65 20 65 66 66 65 63 74 2e 3c 2f  e.same effect.</
1ae0: 70 3e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 41  p>.}..Section {A
1af0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
1b00: 61 74 74 61 63 68 0a 0a 53 79 6e 74 61 78 20 7b  attach..Syntax {
1b10: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
1b20: 0a 41 54 54 41 43 48 20 5b 44 41 54 41 42 41 53  .ATTACH [DATABAS
1b30: 45 5d 20 3c 64 61 74 61 62 61 73 65 2d 66 69 6c  E] <database-fil
1b40: 65 6e 61 6d 65 3e 20 41 53 20 3c 64 61 74 61 62  ename> AS <datab
1b50: 61 73 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74  ase-name>.}..put
1b60: 73 20 7b 0a 3c 70 3e 54 68 65 20 41 54 54 41 43  s {.<p>The ATTAC
1b70: 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74 65  H DATABASE state
1b80: 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68 65  ment adds anothe
1b90: 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  r database .file
1ba0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
1bb0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1bc0: 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 66 69 6c  ion.  If the fil
1bd0: 65 6e 61 6d 65 20 63 6f 6e 74 61 69 6e 73 20 0a  ename contains .
1be0: 70 75 6e 63 74 75 61 74 69 6f 6e 20 63 68 61 72  punctuation char
1bf0: 61 63 74 65 72 73 20 69 74 20 6d 75 73 74 20 62  acters it must b
1c00: 65 20 71 75 6f 74 65 64 2e 20 20 54 68 65 20 6e  e quoted.  The n
1c10: 61 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20  ames 'main' and 
1c20: 0a 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f  .'temp' refer to
1c30: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1c40: 73 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62  se and the datab
1c50: 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65  ase used for .te
1c60: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
1c70: 20 54 68 65 73 65 20 63 61 6e 6e 6f 74 20 62 65   These cannot be
1c80: 20 64 65 74 61 63 68 65 64 2e 20 20 41 74 74 61   detached.  Atta
1c90: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 0a  ched databases .
1ca0: 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e  are removed usin
1cb0: 67 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  g the <a href="#
1cc0: 64 65 74 61 63 68 22 3e 44 45 54 41 43 48 20 44  detach">DETACH D
1cd0: 41 54 41 42 41 53 45 3c 2f 61 3e 20 0a 73 74 61  ATABASE</a> .sta
1ce0: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tement.</p>..<p>
1cf0: 59 6f 75 20 63 61 6e 20 72 65 61 64 20 66 72 6f  You can read fro
1d00: 6d 20 61 6e 64 20 77 72 69 74 65 20 74 6f 20 61  m and write to a
1d10: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1d20: 61 73 65 20 61 6e 64 20 79 6f 75 0a 63 61 6e 20  ase and you.can 
1d30: 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68 65 6d  modify the schem
1d40: 61 20 6f 66 20 74 68 65 20 61 74 74 61 63 68 65  a of the attache
1d50: 64 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  d database.  Thi
1d60: 73 20 69 73 20 61 20 6e 65 77 0a 66 65 61 74 75  s is a new.featu
1d70: 72 65 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72  re of SQLite ver
1d80: 73 69 6f 6e 20 33 2e 30 2e 20 20 49 6e 20 53 51  sion 3.0.  In SQ
1d90: 4c 69 74 65 20 32 2e 38 2c 20 73 63 68 65 6d 61  Lite 2.8, schema
1da0: 20 63 68 61 6e 67 65 73 0a 74 6f 20 61 74 74 61   changes.to atta
1db0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 77  ched databases w
1dc0: 65 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e  ere not allowed.
1dd0: 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e  </p>..<p>You can
1de0: 6e 6f 74 20 63 72 65 61 74 65 20 61 20 6e 65 77  not create a new
1df0: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
1e00: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 20 74  same name as a t
1e10: 61 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74 74 61  able in .an atta
1e20: 63 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 62  ched database, b
1e30: 75 74 20 79 6f 75 20 63 61 6e 20 61 74 74 61 63  ut you can attac
1e40: 68 20 61 20 64 61 74 61 62 61 73 65 20 77 68 69  h a database whi
1e50: 63 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c  ch contains.tabl
1e60: 65 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 61  es whose names a
1e70: 72 65 20 64 75 70 6c 69 63 61 74 65 73 20 6f 66  re duplicates of
1e80: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6d   tables in the m
1e90: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 49  ain database.  I
1ea0: 74 20 69 73 20 0a 61 6c 73 6f 20 70 65 72 6d 69  t is .also permi
1eb0: 73 73 69 62 6c 65 20 74 6f 20 61 74 74 61 63 68  ssible to attach
1ec0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
1ed0: 73 65 20 66 69 6c 65 20 6d 75 6c 74 69 70 6c 65  se file multiple
1ee0: 20 74 69 6d 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   times.</p>..<p>
1ef0: 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74  Tables in an att
1f00: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63  ached database c
1f10: 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74  an be referred t
1f20: 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74  o using the synt
1f30: 61 78 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  ax .<i>database-
1f40: 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c  name.table-name<
1f50: 2f 69 3e 2e 20 20 49 66 20 61 6e 20 61 74 74 61  /i>.  If an atta
1f60: 63 68 65 64 20 74 61 62 6c 65 20 64 6f 65 73 6e  ched table doesn
1f70: 27 74 20 68 61 76 65 20 0a 61 20 64 75 70 6c 69  't have .a dupli
1f80: 63 61 74 65 20 74 61 62 6c 65 20 6e 61 6d 65 20  cate table name 
1f90: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
1fa0: 62 61 73 65 2c 20 69 74 20 64 6f 65 73 6e 27 74  base, it doesn't
1fb0: 20 72 65 71 75 69 72 65 20 61 20 0a 64 61 74 61   require a .data
1fc0: 62 61 73 65 20 6e 61 6d 65 20 70 72 65 66 69 78  base name prefix
1fd0: 2e 20 20 57 68 65 6e 20 61 20 64 61 74 61 62 61  .  When a databa
1fe0: 73 65 20 69 73 20 61 74 74 61 63 68 65 64 2c 20  se is attached, 
1ff0: 61 6c 6c 20 6f 66 20 69 74 73 20 0a 74 61 62 6c  all of its .tabl
2000: 65 73 20 77 68 69 63 68 20 64 6f 6e 27 74 20 68  es which don't h
2010: 61 76 65 20 64 75 70 6c 69 63 61 74 65 20 6e 61  ave duplicate na
2020: 6d 65 73 20 62 65 63 6f 6d 65 20 74 68 65 20 64  mes become the d
2030: 65 66 61 75 6c 74 20 74 61 62 6c 65 0a 6f 66 20  efault table.of 
2040: 74 68 61 74 20 6e 61 6d 65 2e 20 20 41 6e 79 20  that name.  Any 
2050: 74 61 62 6c 65 73 20 6f 66 20 74 68 61 74 20 6e  tables of that n
2060: 61 6d 65 20 61 74 74 61 63 68 65 64 20 61 66 74  ame attached aft
2070: 65 72 77 61 72 64 73 20 72 65 71 75 69 72 65 20  erwards require 
2080: 74 68 65 20 74 61 62 6c 65 20 0a 70 72 65 66 69  the table .prefi
2090: 78 2e 20 49 66 20 74 68 65 20 64 65 66 61 75 6c  x. If the defaul
20a0: 74 20 74 61 62 6c 65 20 6f 66 20 61 20 67 69 76  t table of a giv
20b0: 65 6e 20 6e 61 6d 65 20 69 73 20 64 65 74 61 63  en name is detac
20c0: 68 65 64 2c 20 74 68 65 6e 20 0a 74 68 65 20 6c  hed, then .the l
20d0: 61 73 74 20 74 61 62 6c 65 20 6f 66 20 74 68 61  ast table of tha
20e0: 74 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20  t name attached 
20f0: 62 65 63 6f 6d 65 73 20 74 68 65 20 6e 65 77 20  becomes the new 
2100: 64 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70  default.</p>..<p
2110: 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69  >.Transactions i
2120: 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
2130: 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  e attached datab
2140: 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c  ases are atomic,
2150: 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74  .assuming that t
2160: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2170: 20 69 73 20 6e 6f 74 20 22 3a 6d 65 6d 6f 72 79   is not ":memory
2180: 3a 22 2e 20 20 49 66 20 74 68 65 20 6d 61 69 6e  :".  If the main
2190: 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a 6d  .database is ":m
21a0: 65 6d 6f 72 79 3a 22 20 74 68 65 6e 20 0a 74 72  emory:" then .tr
21b0: 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69  ansactions conti
21c0: 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69 63  nue to be atomic
21d0: 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e 64   within each ind
21e0: 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73 65  ividual.database
21f0: 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74 68   file. But if th
2200: 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20  e host computer 
2210: 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d  crashes in the m
2220: 69 64 64 6c 65 0a 6f 66 20 61 20 43 4f 4d 4d 49  iddle.of a COMMI
2230: 54 20 77 68 65 72 65 20 74 77 6f 20 6f 72 20 6d  T where two or m
2240: 6f 72 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ore database fil
2250: 65 73 20 61 72 65 20 75 70 64 61 74 65 64 2c 0a  es are updated,.
2260: 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65 20 66 69  some of those fi
2270: 6c 65 73 20 6d 69 67 68 74 20 67 65 74 20 74 68  les might get th
2280: 65 20 63 68 61 6e 67 65 73 20 77 68 65 72 65 20  e changes where 
2290: 6f 74 68 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74  others.might not
22a0: 2e 0a 41 74 6f 6d 69 63 20 63 6f 6d 6d 69 74 20  ..Atomic commit 
22b0: 6f 66 20 61 74 74 61 63 68 65 64 20 64 61 74 61  of attached data
22c0: 62 61 73 65 73 20 69 73 20 61 20 6e 65 77 20 66  bases is a new f
22d0: 65 61 74 75 72 65 20 6f 66 20 53 51 4c 69 74 65  eature of SQLite
22e0: 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e 0a 49 6e   version 3.0..In
22f0: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
2300: 32 2e 38 2c 20 61 6c 6c 20 63 6f 6d 6d 69 74 73  2.8, all commits
2310: 20 74 6f 20 61 74 74 61 63 68 65 64 20 64 61 74   to attached dat
2320: 61 62 61 73 65 73 20 62 65 68 61 76 65 64 20 61  abases behaved a
2330: 73 20 69 66 0a 74 68 65 20 6d 61 69 6e 20 64 61  s if.the main da
2340: 74 61 62 61 73 65 20 77 65 72 65 20 22 3a 6d 65  tabase were ":me
2350: 6d 6f 72 79 3a 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70  mory:"..</p>..<p
2360: 3e 54 68 65 72 65 20 69 73 20 61 20 63 6f 6d 70  >There is a comp
2370: 69 6c 65 2d 74 69 6d 65 20 6c 69 6d 69 74 20 6f  ile-time limit o
2380: 66 20 31 30 20 61 74 74 61 63 68 65 64 20 64 61  f 10 attached da
2390: 74 61 62 61 73 65 20 66 69 6c 65 73 2e 3c 2f 70  tabase files.</p
23a0: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 42  >.}...Section {B
23b0: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
23c0: 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 0a 53  } transaction..S
23d0: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
23e0: 6d 65 6e 74 7d 20 7b 0a 42 45 47 49 4e 20 5b 20  ment} {.BEGIN [ 
23f0: 44 45 46 45 52 52 45 44 20 7c 20 49 4d 4d 45 44  DEFERRED | IMMED
2400: 49 41 54 45 20 7c 20 45 58 43 4c 55 53 49 56 45  IATE | EXCLUSIVE
2410: 20 5d 20 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20   ] [TRANSACTION 
2420: 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74  [<name>]].}.Synt
2430: 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e  ax {sql-statemen
2440: 74 7d 20 7b 0a 45 4e 44 20 5b 54 52 41 4e 53 41  t} {.END [TRANSA
2450: 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a  CTION [<name>]].
2460: 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  }.Syntax {sql-st
2470: 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 4f 4d 4d 49  atement} {.COMMI
2480: 54 20 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b  T [TRANSACTION [
2490: 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61  <name>]].}.Synta
24a0: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
24b0: 7d 20 7b 0a 52 4f 4c 4c 42 41 43 4b 20 5b 54 52  } {.ROLLBACK [TR
24c0: 41 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65  ANSACTION [<name
24d0: 3e 5d 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  >]].}..puts {.<p
24e0: 3e 42 65 67 69 6e 6e 69 6e 67 20 69 6e 20 76 65  >Beginning in ve
24f0: 72 73 69 6f 6e 20 32 2e 30 2c 20 53 51 4c 69 74  rsion 2.0, SQLit
2500: 65 20 73 75 70 70 6f 72 74 73 20 74 72 61 6e 73  e supports trans
2510: 61 63 74 69 6f 6e 73 20 77 69 74 68 0a 72 6f 6c  actions with.rol
2520: 6c 62 61 63 6b 20 61 6e 64 20 61 74 6f 6d 69 63  lback and atomic
2530: 20 63 6f 6d 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c 70   commit.</p>..<p
2540: 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 74 72  >The optional tr
2550: 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 20 69  ansaction name i
2560: 73 20 69 67 6e 6f 72 65 64 2e 20 53 51 4c 69 74  s ignored. SQLit
2570: 65 20 63 75 72 72 65 6e 74 6c 79 20 0a 64 6f 65  e currently .doe
2580: 73 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 65 73 74  s not allow nest
2590: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ed transactions.
25a0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 4e 6f 20 63 68 61  </p>..<p>.No cha
25b0: 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65  nges can be made
25c0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
25d0: 20 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61   except within a
25e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 41 6e   transaction..An
25f0: 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63  y command that c
2600: 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62  hanges the datab
2610: 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20  ase (basically, 
2620: 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  any SQL command.
2630: 6f 74 68 65 72 20 74 68 61 6e 20 53 45 4c 45 43  other than SELEC
2640: 54 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  T) will automati
2650: 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72  cally start a tr
2660: 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65  ansaction if.one
2670: 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20   is not already 
2680: 69 6e 20 65 66 66 65 63 74 2e 20 20 41 75 74 6f  in effect.  Auto
2690: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65  matically starte
26a0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61  d transactions.a
26b0: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 61 74 20  re committed at 
26c0: 74 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e 20 6f  the conclusion o
26d0: 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 0a 3c  f the command..<
26e0: 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e 73 61 63  /p>..<p>.Transac
26f0: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61  tions can be sta
2700: 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73  rted manually us
2710: 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f  ing the BEGIN.co
2720: 6d 6d 61 6e 64 2e 20 20 53 75 63 68 20 74 72 61  mmand.  Such tra
2730: 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c  nsactions usuall
2740: 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20  y persist until 
2750: 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20  the next.COMMIT 
2760: 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  or ROLLBACK comm
2770: 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e  and.  But a tran
2780: 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73  saction will als
2790: 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74  o .ROLLBACK if t
27a0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
27b0: 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65  losed or if an e
27c0: 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20  rror occurs.and 
27d0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e  the ROLLBACK con
27e0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
27f0: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
2800: 65 63 69 66 69 65 64 2e 0a 53 65 65 20 74 68 65  ecified..See the
2810: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
2820: 6e 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  n the <a href="#
2830: 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e  conflict">ON CON
2840: 46 4c 49 43 54 3c 2f 61 3e 0a 63 6c 61 75 73 65  FLICT</a>.clause
2850: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
2860: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
2870: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
2880: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
2890: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
28a0: 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 53 51 4c 69 74  p>..<p>.In SQLit
28b0: 65 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e 38 20  e version 3.0.8 
28c0: 61 6e 64 20 6c 61 74 65 72 2c 20 74 72 61 6e 73  and later, trans
28d0: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64  actions can be d
28e0: 65 66 65 72 72 65 64 2c 0a 69 6d 6d 65 64 69 61  eferred,.immedia
28f0: 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65  te, or exclusive
2900: 2e 20 20 44 65 66 65 72 72 65 64 20 6d 65 61 6e  .  Deferred mean
2910: 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20  s that no locks 
2920: 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20  are acquired.on 
2930: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74  the database unt
2940: 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  il the database 
2950: 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65  is first accesse
2960: 64 2e 20 20 54 68 75 73 20 77 69 74 68 20 61 0a  d.  Thus with a.
2970: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
2980: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
2990: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
29a0: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 2e 20 20   does nothing.  
29b0: 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63  Locks.are not ac
29c0: 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65  quired until the
29d0: 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77   first read or w
29e0: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rite operation. 
29f0: 20 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a   The first read.
2a00: 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73  operation agains
2a10: 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65  t a database cre
2a20: 61 74 65 73 20 61 20 53 48 41 52 45 44 20 6c 6f  ates a SHARED lo
2a30: 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73 74  ck and the first
2a40: 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e  .write operation
2a50: 20 63 72 65 61 74 65 73 20 61 20 52 45 53 45 52   creates a RESER
2a60: 56 45 44 20 6c 6f 63 6b 2e 20 20 20 42 65 63 61  VED lock.   Beca
2a70: 75 73 65 20 74 68 65 20 61 63 71 75 69 73 69 74  use the acquisit
2a80: 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20 69 73 20  ion of.locks is 
2a90: 64 65 66 65 72 72 65 64 20 75 6e 74 69 6c 20 74  deferred until t
2aa0: 68 65 79 20 61 72 65 20 6e 65 65 64 65 64 2c 20  hey are needed, 
2ab0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
2ac0: 68 61 74 20 61 6e 6f 74 68 65 72 0a 74 68 72 65  hat another.thre
2ad0: 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 63 6f  ad or process co
2ae0: 75 6c 64 20 63 72 65 61 74 65 20 61 20 73 65 70  uld create a sep
2af0: 61 72 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f  arate transactio
2b00: 6e 20 61 6e 64 20 77 72 69 74 65 20 74 6f 0a 74  n and write to.t
2b10: 68 65 20 64 61 74 61 62 61 73 65 20 61 66 74 65  he database afte
2b20: 72 20 74 68 65 20 42 45 47 49 4e 20 6f 6e 20 74  r the BEGIN on t
2b30: 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61  he current threa
2b40: 64 20 68 61 73 20 65 78 65 63 75 74 65 64 2e 0a  d has executed..
2b50: 49 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  If the transacti
2b60: 6f 6e 20 69 73 20 69 6d 6d 65 64 69 61 74 65 2c  on is immediate,
2b70: 20 74 68 65 6e 20 52 45 53 45 52 56 45 44 20 6c   then RESERVED l
2b80: 6f 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65  ocks.are acquire
2b90: 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73  d on all databas
2ba0: 65 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68  es as soon as th
2bb0: 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20  e BEGIN command 
2bc0: 69 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74  is.executed, wit
2bd0: 68 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72  hout waiting for
2be0: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f   the.database to
2bf0: 20 62 65 20 75 73 65 64 2e 20 20 41 66 74 65 72   be used.  After
2c00: 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41   a BEGIN IMMEDIA
2c10: 54 45 2c 20 79 6f 75 20 61 72 65 20 67 75 61 72  TE, you are guar
2c20: 61 6e 74 65 65 64 20 74 68 61 74 0a 6e 6f 20 6f  anteed that.no o
2c30: 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70  ther thread or p
2c40: 72 6f 63 65 73 73 20 77 69 6c 6c 20 62 65 20 61  rocess will be a
2c50: 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74 6f 20  ble to write to 
2c60: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 72 0a  the database or.
2c70: 64 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44  do a BEGIN IMMED
2c80: 49 41 54 45 20 6f 72 20 42 45 47 49 4e 20 45 58  IATE or BEGIN EX
2c90: 43 4c 55 53 49 56 45 2e 20 20 4f 74 68 65 72 20  CLUSIVE.  Other 
2ca0: 70 72 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f  processes can co
2cb0: 6e 74 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66  ntinue.to read f
2cc0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
2cd0: 2c 20 68 6f 77 65 76 65 72 2e 20 20 41 6e 20 65  , however.  An e
2ce0: 78 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63  xclusive transac
2cf0: 74 69 6f 6e 20 63 61 75 73 65 73 0a 45 58 43 4c  tion causes.EXCL
2d00: 55 53 49 56 45 20 6c 6f 63 6b 73 20 74 6f 20 62  USIVE locks to b
2d10: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
2d20: 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 41 66  l databases.  Af
2d30: 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c  ter a BEGIN.EXCL
2d40: 55 53 49 56 45 2c 20 79 6f 75 20 61 72 65 20 67  USIVE, you are g
2d50: 75 61 72 61 6e 74 65 65 64 20 74 68 61 74 20 6e  uaranteed that n
2d60: 6f 20 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f  o other thread o
2d70: 72 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 0a 62  r process will.b
2d80: 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20 6f  e able to read o
2d90: 72 20 77 72 69 74 65 20 74 68 65 20 64 61 74 61  r write the data
2da0: 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20 74  base until the t
2db0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63 6f  ransaction is.co
2dc0: 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70  mplete..</p>..<p
2dd0: 3e 0a 41 20 64 65 73 63 72 69 70 74 69 6f 6e 20  >.A description 
2de0: 6f 66 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  of the meaning o
2df0: 66 20 53 48 41 52 45 44 2c 20 52 45 53 45 52 56  f SHARED, RESERV
2e00: 45 44 2c 20 61 6e 64 20 45 58 43 4c 55 53 49 56  ED, and EXCLUSIV
2e10: 45 20 6c 6f 63 6b 73 0a 69 73 20 61 76 61 69 6c  E locks.is avail
2e20: 61 62 6c 65 20 3c 61 20 68 72 65 66 3d 22 6c 6f  able <a href="lo
2e30: 63 6b 69 6e 67 76 33 2e 68 74 6d 6c 22 3e 73 65  ckingv3.html">se
2e40: 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 0a 3c 2f  parately</a>..</
2e50: 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 65 66 61  p>..<p>.The defa
2e60: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 66 6f 72  ult behavior for
2e70: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
2e80: 33 2e 30 2e 38 20 69 73 20 61 0a 64 65 66 65 72  3.0.8 is a.defer
2e90: 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  red transaction.
2ea0: 20 20 46 6f 72 20 53 51 4c 69 74 65 20 76 65 72    For SQLite ver
2eb0: 73 69 6f 6e 20 33 2e 30 2e 30 20 74 68 72 6f 75  sion 3.0.0 throu
2ec0: 67 68 20 33 2e 30 2e 37 2c 0a 64 65 66 65 72 72  gh 3.0.7,.deferr
2ed0: 65 64 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  ed is the only k
2ee0: 69 6e 64 20 6f 66 20 74 72 61 6e 73 61 63 74 69  ind of transacti
2ef0: 6f 6e 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 46  on available.  F
2f00: 6f 72 20 53 51 4c 69 74 65 0a 76 65 72 73 69 6f  or SQLite.versio
2f10: 6e 20 32 2e 38 20 61 6e 64 20 65 61 72 6c 69 65  n 2.8 and earlie
2f20: 72 2c 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69  r, all transacti
2f30: 6f 6e 73 20 61 72 65 20 65 78 63 6c 75 73 69 76  ons are exclusiv
2f40: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65  e..</p>..<p>.The
2f50: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20   COMMIT command 
2f60: 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c  does not actuall
2f70: 79 20 70 65 72 66 6f 72 6d 20 61 20 63 6f 6d 6d  y perform a comm
2f80: 69 74 20 75 6e 74 69 6c 20 61 6c 6c 0a 70 65 6e  it until all.pen
2f90: 64 69 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ding SQL command
2fa0: 73 20 66 69 6e 69 73 68 2e 20 20 54 68 75 73 20  s finish.  Thus 
2fb0: 69 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 53  if two or more S
2fc0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
2fd0: 0a 61 72 65 20 69 6e 20 74 68 65 20 6d 69 64 64  .are in the midd
2fe0: 6c 65 20 6f 66 20 70 72 6f 63 65 73 73 69 6e 67  le of processing
2ff0: 20 61 6e 64 20 61 20 43 4f 4d 4d 49 54 20 69 73   and a COMMIT is
3000: 20 65 78 65 63 75 74 65 64 2c 20 74 68 65 20 63   executed, the c
3010: 6f 6d 6d 69 74 0a 77 69 6c 6c 20 6e 6f 74 20 61  ommit.will not a
3020: 63 74 75 61 6c 6c 79 20 6f 63 63 75 72 20 75 6e  ctually occur un
3030: 74 69 6c 20 61 6c 6c 20 53 45 4c 45 43 54 20 73  til all SELECT s
3040: 74 61 74 65 6d 65 6e 74 73 20 66 69 6e 69 73 68  tatements finish
3050: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 6e 20 61  ..</p>..<p>.An a
3060: 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74  ttempt to execut
3070: 65 20 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 72  e COMMIT might r
3080: 65 73 75 6c 74 20 69 6e 20 61 6e 20 53 51 4c 49  esult in an SQLI
3090: 54 45 5f 42 55 53 59 20 72 65 74 75 72 6e 20 63  TE_BUSY return c
30a0: 6f 64 65 2e 0a 54 68 69 73 20 69 6e 64 69 63 61  ode..This indica
30b0: 74 65 73 20 74 68 61 74 20 61 6e 6f 74 68 65 72  tes that another
30c0: 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65   thread or proce
30d0: 73 73 20 68 61 64 20 61 20 72 65 61 64 20 6c 6f  ss had a read lo
30e0: 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
30f0: 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65  se.that prevente
3100: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
3110: 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65  rom being update
3120: 64 2e 20 20 57 68 65 6e 20 43 4f 4d 4d 49 54 20  d.  When COMMIT 
3130: 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77 61  fails in this.wa
3140: 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  y, the transacti
3150: 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76  on remains activ
3160: 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54  e and the COMMIT
3170: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 64 20   can be retried 
3180: 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68 65 20  later.after the 
3190: 72 65 61 64 65 72 20 68 61 73 20 68 61 64 20 61  reader has had a
31a0: 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61 72   chance to clear
31b0: 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69  ..</p>.}...Secti
31c0: 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65  on comment comme
31d0: 6e 74 0a 0a 53 79 6e 74 61 78 20 7b 63 6f 6d 6d  nt..Syntax {comm
31e0: 65 6e 74 7d 20 7b 3c 53 51 4c 2d 63 6f 6d 6d 65  ent} {<SQL-comme
31f0: 6e 74 3e 20 7c 20 3c 43 2d 63 6f 6d 6d 65 6e 74  nt> | <C-comment
3200: 3e 0a 7d 20 7b 53 51 4c 2d 63 6f 6d 6d 65 6e 74  >.} {SQL-comment
3210: 7d 20 7b 2d 2d 20 3c 73 69 6e 67 6c 65 2d 6c 69  } {-- <single-li
3220: 6e 65 3e 0a 7d 20 7b 43 2d 63 6f 6d 6d 65 6e 74  ne>.} {C-comment
3230: 7d 20 7b 2f 53 54 41 52 20 3c 6d 75 6c 74 69 70  } {/STAR <multip
3240: 6c 65 2d 6c 69 6e 65 73 3e 20 5b 53 54 41 52 2f  le-lines> [STAR/
3250: 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 20  ].}..puts {.<p> 
3260: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 6e 27 74 20  Comments aren't 
3270: 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75  SQL commands, bu
3280: 74 20 63 61 6e 20 6f 63 63 75 72 20 69 6e 20 53  t can occur in S
3290: 51 4c 20 71 75 65 72 69 65 73 2e 20 54 68 65 79  QL queries. They
32a0: 20 61 72 65 20 0a 74 72 65 61 74 65 64 20 61 73   are .treated as
32b0: 20 77 68 69 74 65 73 70 61 63 65 20 62 79 20 74   whitespace by t
32c0: 68 65 20 70 61 72 73 65 72 2e 20 20 54 68 65 79  he parser.  They
32d0: 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77 68   can begin anywh
32e0: 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20 0a  ere whitespace .
32f0: 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e  can be found, in
3300: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
3310: 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
3320: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
3330: 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 53  nes..</p>..<p> S
3340: 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 6f 6e 6c 79  QL comments only
3350: 20 65 78 74 65 6e 64 20 74 6f 20 74 68 65 20 65   extend to the e
3360: 6e 64 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  nd of the curren
3370: 74 20 6c 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  t line.</p>..<p>
3380: 20 43 20 63 6f 6d 6d 65 6e 74 73 20 63 61 6e 20   C comments can 
3390: 73 70 61 6e 20 61 6e 79 20 6e 75 6d 62 65 72 20  span any number 
33a0: 6f 66 20 6c 69 6e 65 73 2e 20 20 49 66 20 74 68  of lines.  If th
33b0: 65 72 65 20 69 73 20 6e 6f 20 74 65 72 6d 69 6e  ere is no termin
33c0: 61 74 69 6e 67 0a 64 65 6c 69 6d 69 74 65 72 2c  ating.delimiter,
33d0: 20 74 68 65 79 20 65 78 74 65 6e 64 20 74 6f 20   they extend to 
33e0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
33f0: 6e 70 75 74 2e 20 20 54 68 69 73 20 69 73 20 6e  nput.  This is n
3400: 6f 74 20 74 72 65 61 74 65 64 20 61 73 0a 61 6e  ot treated as.an
3410: 20 65 72 72 6f 72 2e 20 20 41 20 6e 65 77 20 53   error.  A new S
3420: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e  QL statement can
3430: 20 62 65 67 69 6e 20 6f 6e 20 61 20 6c 69 6e 65   begin on a line
3440: 20 61 66 74 65 72 20 61 20 6d 75 6c 74 69 6c 69   after a multili
3450: 6e 65 0a 63 6f 6d 6d 65 6e 74 20 65 6e 64 73 2e  ne.comment ends.
3460: 20 20 43 20 63 6f 6d 6d 65 6e 74 73 20 63 61 6e    C comments can
3470: 20 62 65 20 65 6d 62 65 64 64 65 64 20 61 6e 79   be embedded any
3480: 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65  where whitespace
3490: 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c   can occur,.incl
34a0: 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70  uding inside exp
34b0: 72 65 73 73 69 6f 6e 73 2c 20 61 6e 64 20 69 6e  ressions, and in
34c0: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f   the middle of o
34d0: 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65  ther SQL stateme
34e0: 6e 74 73 2e 0a 43 20 63 6f 6d 6d 65 6e 74 73 20  nts..C comments 
34f0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 20 20 53 51  do not nest.  SQ
3500: 4c 20 63 6f 6d 6d 65 6e 74 73 20 69 6e 73 69 64  L comments insid
3510: 65 20 61 20 43 20 63 6f 6d 6d 65 6e 74 20 77 69  e a C comment wi
3520: 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 0a 3c  ll be ignored..<
3530: 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20  /p>.}...Section 
3540: 43 4f 50 59 20 63 6f 70 79 0a 0a 53 79 6e 74 61  COPY copy..Synta
3550: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
3560: 7d 20 7b 0a 43 4f 50 59 20 5b 20 4f 52 20 3c 63  } {.COPY [ OR <c
3570: 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68  onflict-algorith
3580: 6d 3e 20 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d  m> ] [<database-
3590: 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d  name> .] <table-
35a0: 6e 61 6d 65 3e 20 46 52 4f 4d 20 3c 66 69 6c 65  name> FROM <file
35b0: 6e 61 6d 65 3e 0a 5b 20 55 53 49 4e 47 20 44 45  name>.[ USING DE
35c0: 4c 49 4d 49 54 45 52 53 20 3c 64 65 6c 69 6d 3e  LIMITERS <delim>
35d0: 20 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e   ].}..puts {.<p>
35e0: 54 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64  The COPY command
35f0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 69 6e   is available in
3600: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
3610: 32 2e 38 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  2.8 and earlier.
3620: 0a 54 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e  .The COPY comman
3630: 64 20 68 61 73 20 62 65 65 6e 20 72 65 6d 6f 76  d has been remov
3640: 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 76  ed from SQLite v
3650: 65 72 73 69 6f 6e 20 33 2e 30 20 64 75 65 20 74  ersion 3.0 due t
3660: 6f 0a 63 6f 6d 70 6c 69 63 61 74 69 6f 6e 73 20  o.complications 
3670: 69 6e 20 74 72 79 69 6e 67 20 74 6f 20 73 75 70  in trying to sup
3680: 70 6f 72 74 20 69 74 20 69 6e 20 61 20 6d 69 78  port it in a mix
3690: 65 64 20 55 54 46 2d 38 2f 31 36 20 65 6e 76 69  ed UTF-8/16 envi
36a0: 72 6f 6e 6d 65 6e 74 2e 0a 49 6e 20 76 65 72 73  ronment..In vers
36b0: 69 6f 6e 20 33 2e 30 2c 20 74 68 65 20 3c 61 20  ion 3.0, the <a 
36c0: 68 72 65 66 3d 22 73 71 6c 69 74 65 2e 68 74 6d  href="sqlite.htm
36d0: 6c 22 3e 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  l">command-line 
36e0: 73 68 65 6c 6c 3c 2f 61 3e 0a 63 6f 6e 74 61 69  shell</a>.contai
36f0: 6e 73 20 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64  ns a new command
3700: 20 3c 62 3e 2e 69 6d 70 6f 72 74 3c 2f 62 3e 20   <b>.import</b> 
3710: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
3720: 20 61 73 20 61 20 73 75 62 73 74 69 74 75 74 65   as a substitute
3730: 0a 66 6f 72 20 43 4f 50 59 2e 0a 3c 2f 70 3e 0a  .for COPY..</p>.
3740: 0a 3c 70 3e 54 68 65 20 43 4f 50 59 20 63 6f 6d  .<p>The COPY com
3750: 6d 61 6e 64 20 69 73 20 61 6e 20 65 78 74 65 6e  mand is an exten
3760: 73 69 6f 6e 20 75 73 65 64 20 74 6f 20 6c 6f 61  sion used to loa
3770: 64 20 6c 61 72 67 65 20 61 6d 6f 75 6e 74 73 20  d large amounts 
3780: 6f 66 0a 64 61 74 61 20 69 6e 74 6f 20 61 20 74  of.data into a t
3790: 61 62 6c 65 2e 20 20 49 74 20 69 73 20 6d 6f 64  able.  It is mod
37a0: 65 6c 65 64 20 61 66 74 65 72 20 61 20 73 69 6d  eled after a sim
37b0: 69 6c 61 72 20 63 6f 6d 6d 61 6e 64 20 66 6f 75  ilar command fou
37c0: 6e 64 0a 69 6e 20 50 6f 73 74 67 72 65 53 51 4c  nd.in PostgreSQL
37d0: 2e 20 20 49 6e 20 66 61 63 74 2c 20 74 68 65 20  .  In fact, the 
37e0: 53 51 4c 69 74 65 20 43 4f 50 59 20 63 6f 6d 6d  SQLite COPY comm
37f0: 61 6e 64 20 69 73 20 73 70 65 63 69 66 69 63 61  and is specifica
3800: 6c 6c 79 0a 64 65 73 69 67 6e 65 64 20 74 6f 20  lly.designed to 
3810: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
3820: 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68  the output of th
3830: 65 20 50 6f 73 74 67 72 65 53 51 4c 20 64 75 6d  e PostgreSQL dum
3840: 70 0a 75 74 69 6c 69 74 79 20 3c 62 3e 70 67 5f  p.utility <b>pg_
3850: 64 75 6d 70 3c 2f 62 3e 20 73 6f 20 74 68 61 74  dump</b> so that
3860: 20 64 61 74 61 20 63 61 6e 20 62 65 20 65 61 73   data can be eas
3870: 69 6c 79 20 74 72 61 6e 73 66 65 72 72 65 64 20  ily transferred 
3880: 66 72 6f 6d 0a 50 6f 73 74 67 72 65 53 51 4c 20  from.PostgreSQL 
3890: 69 6e 74 6f 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  into SQLite.</p>
38a0: 0a 0a 3c 70 3e 54 68 65 20 74 61 62 6c 65 2d 6e  ..<p>The table-n
38b0: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
38c0: 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  of an existing t
38d0: 61 62 6c 65 20 77 68 69 63 68 20 69 73 20 74 6f  able which is to
38e0: 0a 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20  .be filled with 
38f0: 64 61 74 61 2e 20 20 54 68 65 20 66 69 6c 65 6e  data.  The filen
3900: 61 6d 65 20 69 73 20 61 20 73 74 72 69 6e 67 20  ame is a string 
3910: 6f 72 20 69 64 65 6e 74 69 66 69 65 72 20 74 68  or identifier th
3920: 61 74 0a 6e 61 6d 65 73 20 61 20 66 69 6c 65 20  at.names a file 
3930: 66 72 6f 6d 20 77 68 69 63 68 20 64 61 74 61 20  from which data 
3940: 77 69 6c 6c 20 62 65 20 72 65 61 64 2e 20 20 54  will be read.  T
3950: 68 65 20 66 69 6c 65 6e 61 6d 65 20 63 61 6e 20  he filename can 
3960: 62 65 0a 74 68 65 20 3c 62 3e 53 54 44 49 4e 3c  be.the <b>STDIN<
3970: 2f 62 3e 20 74 6f 20 72 65 61 64 20 64 61 74 61  /b> to read data
3980: 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69   from standard i
3990: 6e 70 75 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  nput.</p>..<p>Ea
39a0: 63 68 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 69  ch line of the i
39b0: 6e 70 75 74 20 66 69 6c 65 20 69 73 20 63 6f 6e  nput file is con
39c0: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69  verted into a si
39d0: 6e 67 6c 65 20 72 65 63 6f 72 64 0a 69 6e 20 74  ngle record.in t
39e0: 68 65 20 74 61 62 6c 65 2e 20 20 43 6f 6c 75 6d  he table.  Colum
39f0: 6e 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64  ns are separated
3a00: 20 62 79 20 74 61 62 73 2e 20 20 49 66 20 61 20   by tabs.  If a 
3a10: 74 61 62 20 6f 63 63 75 72 73 20 61 73 0a 64 61  tab occurs as.da
3a20: 74 61 20 77 69 74 68 69 6e 20 61 20 63 6f 6c 75  ta within a colu
3a30: 6d 6e 2c 20 74 68 65 6e 20 74 68 61 74 20 74 61  mn, then that ta
3a40: 62 20 69 73 20 70 72 65 63 65 64 65 64 20 62 79  b is preceded by
3a50: 20 61 20 62 61 73 6b 73 6c 61 73 68 20 22 5c 22   a baskslash "\"
3a60: 0a 63 68 61 72 61 63 74 65 72 2e 20 20 41 20 62  .character.  A b
3a70: 61 73 6b 73 6c 61 73 68 20 69 6e 20 74 68 65 20  askslash in the 
3a80: 64 61 74 61 20 61 70 70 65 61 72 73 20 61 73 20  data appears as 
3a90: 74 77 6f 20 62 61 63 6b 73 6c 61 73 68 65 73 20  two backslashes 
3aa0: 69 6e 0a 61 20 72 6f 77 2e 20 20 54 68 65 20 6f  in.a row.  The o
3ab0: 70 74 69 6f 6e 61 6c 20 55 53 49 4e 47 20 44 45  ptional USING DE
3ac0: 4c 49 4d 49 54 45 52 53 20 63 6c 61 75 73 65 20  LIMITERS clause 
3ad0: 63 61 6e 20 73 70 65 63 69 66 79 20 61 20 64 65  can specify a de
3ae0: 6c 69 6d 69 74 65 72 0a 6f 74 68 65 72 20 74 68  limiter.other th
3af0: 61 6e 20 74 61 62 2e 3c 2f 70 3e 0a 0a 3c 70 3e  an tab.</p>..<p>
3b00: 49 66 20 61 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73  If a column cons
3b10: 69 73 74 73 20 6f 66 20 74 68 65 20 63 68 61 72  ists of the char
3b20: 61 63 74 65 72 20 22 5c 4e 22 2c 20 74 68 61 74  acter "\N", that
3b30: 20 63 6f 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65   column is fille
3b40: 64 0a 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  d.with the value
3b50: 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   NULL.</p>..<p>T
3b60: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
3b70: 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
3b80: 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
3b90: 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
3ba0: 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
3bb0: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
3bc0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
3bd0: 74 6f 20 75 73 65 20 66 6f 72 20 74 68 69 73 20  to use for this 
3be0: 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65  one command..See
3bf0: 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
3c00: 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f  led.<a href="#co
3c10: 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c  nflict">ON CONFL
3c20: 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69  ICT</a> for addi
3c30: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
3c40: 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e  on.</p>..<p>When
3c50: 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
3c60: 73 6f 75 72 63 65 20 69 73 20 53 54 44 49 4e 2c  source is STDIN,
3c70: 20 74 68 65 20 69 6e 70 75 74 20 63 61 6e 20 62   the input can b
3c80: 65 20 74 65 72 6d 69 6e 61 74 65 64 0a 62 79 20  e terminated.by 
3c90: 61 20 6c 69 6e 65 20 74 68 61 74 20 63 6f 6e 74  a line that cont
3ca0: 61 69 6e 73 20 6f 6e 6c 79 20 61 20 62 61 73 6b  ains only a bask
3cb0: 73 6c 61 73 68 20 61 6e 64 20 61 20 64 6f 74 3a  slash and a dot:
3cc0: 7d 0a 70 75 74 73 20 22 5c 22 5b 4f 70 65 72 61  }.puts "\"[Opera
3cd0: 74 6f 72 20 5c 5c 2e 5d 5c 22 2e 3c 2f 70 3e 22  tor \\.]\".</p>"
3ce0: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ...Section {CREA
3cf0: 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65  TE INDEX} create
3d00: 69 6e 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73  index..Syntax {s
3d10: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
3d20: 43 52 45 41 54 45 20 5b 55 4e 49 51 55 45 5d 20  CREATE [UNIQUE] 
3d30: 49 4e 44 45 58 20 5b 49 46 20 4e 4f 54 20 45 58  INDEX [IF NOT EX
3d40: 49 53 54 53 5d 20 5b 3c 64 61 74 61 62 61 73 65  ISTS] [<database
3d50: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 69 6e 64 65 78  -name> .] <index
3d60: 2d 6e 61 6d 65 3e 20 0a 4f 4e 20 3c 74 61 62 6c  -name> .ON <tabl
3d70: 65 2d 6e 61 6d 65 3e 20 28 20 3c 63 6f 6c 75 6d  e-name> ( <colum
3d80: 6e 2d 6e 61 6d 65 3e 20 5b 2c 20 3c 63 6f 6c 75  n-name> [, <colu
3d90: 6d 6e 2d 6e 61 6d 65 3e 5d 2a 20 29 0a 7d 20 7b  mn-name>]* ).} {
3da0: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 7d 20 7b 0a 3c  column-name} {.<
3db0: 6e 61 6d 65 3e 20 5b 20 43 4f 4c 4c 41 54 45 20  name> [ COLLATE 
3dc0: 3c 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e  <collation-name>
3dd0: 5d 20 5b 20 41 53 43 20 7c 20 44 45 53 43 20 5d  ] [ ASC | DESC ]
3de0: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68  .}..puts {.<p>Th
3df0: 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63  e CREATE INDEX c
3e00: 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ommand consists 
3e10: 6f 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  of the keywords 
3e20: 22 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66  "CREATE INDEX" f
3e30: 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e  ollowed.by the n
3e40: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69  ame of the new i
3e50: 6e 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72  ndex, the keywor
3e60: 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65  d "ON", the name
3e70: 20 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79   of a previously
3e80: 0a 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74  .created table t
3e90: 68 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64  hat is to be ind
3ea0: 65 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65  exed, and a pare
3eb0: 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f  nthesized list o
3ec0: 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d  f names of.colum
3ed0: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
3ee0: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f  that are used fo
3ef0: 72 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  r the index key.
3f00: 0a 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d  .Each column nam
3f10: 65 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65  e can be followe
3f20: 64 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d by one of the 
3f30: 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22 20  "ASC" or "DESC" 
3f40: 6b 65 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69  keywords.to indi
3f50: 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2c  cate sort order,
3f60: 20 62 75 74 20 74 68 65 20 73 6f 72 74 20 6f 72   but the sort or
3f70: 64 65 72 20 69 73 20 69 67 6e 6f 72 65 64 20 69  der is ignored i
3f80: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 69 6d  n the current.im
3f90: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 53  plementation.  S
3fa0: 6f 72 74 69 6e 67 20 69 73 20 61 6c 77 61 79 73  orting is always
3fb0: 20 64 6f 6e 65 20 69 6e 20 61 73 63 65 6e 64 69   done in ascendi
3fc0: 6e 67 20 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  ng order.</p>..<
3fd0: 70 3e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  p>The COLLATE cl
3fe0: 61 75 73 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65  ause following e
3ff0: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
4000: 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
4010: 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 75 73 65  ing.sequence use
4020: 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74 69 72  d for text entir
4030: 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d  es in that colum
4040: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default 
4050: 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e  collating.sequen
4060: 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74  ce is the collat
4070: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64 65 66  ing sequence def
4080: 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f  ined for that co
4090: 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 43 52 45 41  lumn in the.CREA
40a0: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
40b0: 6e 74 2e 20 20 4f 72 20 69 66 20 6e 6f 20 63 6f  nt.  Or if no co
40c0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
40d0: 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65   is otherwise de
40e0: 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74  fined,.the built
40f0: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
4100: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
4110: 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   used.</p>..<p>T
4120: 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69  here are no arbi
4130: 74 72 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20  trary limits on 
4140: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e  the number of in
4150: 64 69 63 65 73 20 74 68 61 74 20 63 61 6e 20 62  dices that can b
4160: 65 0a 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e.attached to a 
4170: 73 69 6e 67 6c 65 20 74 61 62 6c 65 2c 20 6e 6f  single table, no
4180: 72 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  r on the number 
4190: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e  of columns in an
41a0: 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e   index.</p>..<p>
41b0: 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65  If the UNIQUE ke
41c0: 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65  yword appears be
41d0: 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64  tween CREATE and
41e0: 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c   INDEX then dupl
41f0: 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72  icate.index entr
4200: 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ies are not allo
4210: 77 65 64 2e 20 20 41 6e 79 20 61 74 74 65 6d 70  wed.  Any attemp
4220: 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75  t to insert a du
4230: 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69  plicate entry.wi
4240: 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  ll result in an 
4250: 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
4260: 68 65 20 65 78 61 63 74 20 74 65 78 74 0a 6f 66  he exact text.of
4270: 20 65 61 63 68 20 43 52 45 41 54 45 20 49 4e 44   each CREATE IND
4280: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  EX statement is 
4290: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 3c 62  stored in the <b
42a0: 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f  >sqlite_master</
42b0: 62 3e 0a 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f  b>.or <b>sqlite_
42c0: 74 65 6d 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20  temp_master</b> 
42d0: 74 61 62 6c 65 2c 20 64 65 70 65 6e 64 69 6e 67  table, depending
42e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
42f0: 74 61 62 6c 65 0a 62 65 69 6e 67 20 69 6e 64 65  table.being inde
4300: 78 65 64 20 69 73 20 74 65 6d 70 6f 72 61 72 79  xed is temporary
4310: 2e 20 20 45 76 65 72 79 20 74 69 6d 65 20 74 68  .  Every time th
4320: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70  e database is op
4330: 65 6e 65 64 2c 0a 61 6c 6c 20 43 52 45 41 54 45  ened,.all CREATE
4340: 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
4350: 73 0a 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20  s.are read from 
4360: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61  the <b>sqlite_ma
4370: 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61  ster</b> table a
4380: 6e 64 20 75 73 65 64 20 74 6f 20 72 65 67 65 6e  nd used to regen
4390: 65 72 61 74 65 0a 53 51 4c 69 74 65 27 73 20 69  erate.SQLite's i
43a0: 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
43b0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e  tation of the in
43c0: 64 65 78 20 6c 61 79 6f 75 74 2e 3c 2f 70 3e 0a  dex layout.</p>.
43d0: 0a 3c 70 3e 49 66 20 74 68 65 20 6f 70 74 69 6f  .<p>If the optio
43e0: 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53 54  nal IF NOT EXIST
43f0: 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  S clause is pres
4400: 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72 20  ent and another 
4410: 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65 20 73  index.with the s
4420: 61 6d 65 20 6e 61 6d 65 20 61 6c 65 61 64 79 20  ame name aleady 
4430: 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69  exists, then thi
4440: 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65  s command become
4450: 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a  s a no-op.</p>..
4460: 3c 70 3e 49 6e 64 65 78 65 73 20 61 72 65 20 72  <p>Indexes are r
4470: 65 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65 20  emoved with the 
4480: 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 69 6e  <a href="#dropin
4490: 64 65 78 22 3e 44 52 4f 50 20 49 4e 44 45 58 3c  dex">DROP INDEX<
44a0: 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  /a> .command.</p
44b0: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 43  >.}...Section {C
44c0: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
44d0: 65 61 74 65 74 61 62 6c 65 7d 0a 0a 53 79 6e 74  eatetable}..Synt
44e0: 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d  ax {sql-command}
44f0: 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50 20   {.CREATE [TEMP 
4500: 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 54 41 42  | TEMPORARY] TAB
4510: 4c 45 20 5b 49 46 20 4e 4f 54 20 45 58 49 53 54  LE [IF NOT EXIST
4520: 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  S] [<database-na
4530: 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
4540: 6d 65 3e 20 28 0a 20 20 3c 63 6f 6c 75 6d 6e 2d  me> (.  <column-
4550: 64 65 66 3e 20 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d  def> [, <column-
4560: 64 65 66 3e 5d 2a 0a 20 20 5b 2c 20 3c 63 6f 6e  def>]*.  [, <con
4570: 73 74 72 61 69 6e 74 3e 5d 2a 0a 29 0a 7d 20 7b  straint>]*.).} {
4580: 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43  sql-command} {.C
4590: 52 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45  REATE [TEMP | TE
45a0: 4d 50 4f 52 41 52 59 5d 20 54 41 42 4c 45 20 5b  MPORARY] TABLE [
45b0: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 2e  <database-name>.
45c0: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 41  ] <table-name> A
45d0: 53 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d  S <select-statem
45e0: 65 6e 74 3e 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 64  ent>.} {column-d
45f0: 65 66 7d 20 7b 0a 3c 6e 61 6d 65 3e 20 5b 3c 74  ef} {.<name> [<t
4600: 79 70 65 3e 5d 20 5b 5b 43 4f 4e 53 54 52 41 49  ype>] [[CONSTRAI
4610: 4e 54 20 3c 6e 61 6d 65 3e 5d 20 3c 63 6f 6c 75  NT <name>] <colu
4620: 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 3e 5d 2a  mn-constraint>]*
4630: 0a 7d 20 7b 74 79 70 65 7d 20 7b 0a 3c 74 79 70  .} {type} {.<typ
4640: 65 6e 61 6d 65 3e 20 7c 0a 3c 74 79 70 65 6e 61  ename> |.<typena
4650: 6d 65 3e 20 28 20 3c 6e 75 6d 62 65 72 3e 20 29  me> ( <number> )
4660: 20 7c 0a 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20   |.<typename> ( 
4670: 3c 6e 75 6d 62 65 72 3e 20 2c 20 3c 6e 75 6d 62  <number> , <numb
4680: 65 72 3e 20 29 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d  er> ).} {column-
4690: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0a 4e 4f  constraint} {.NO
46a0: 54 20 4e 55 4c 4c 20 5b 20 3c 63 6f 6e 66 6c 69  T NULL [ <confli
46b0: 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 50  ct-clause> ] |.P
46c0: 52 49 4d 41 52 59 20 4b 45 59 20 5b 3c 73 6f 72  RIMARY KEY [<sor
46d0: 74 2d 6f 72 64 65 72 3e 5d 20 5b 20 3c 63 6f 6e  t-order>] [ <con
46e0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20  flict-clause> ] 
46f0: 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20  [AUTOINCREMENT] 
4700: 7c 0a 55 4e 49 51 55 45 20 5b 20 3c 63 6f 6e 66  |.UNIQUE [ <conf
4710: 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c  lict-clause> ] |
4720: 0a 43 48 45 43 4b 20 28 20 3c 65 78 70 72 3e 20  .CHECK ( <expr> 
4730: 29 20 7c 0a 44 45 46 41 55 4c 54 20 3c 76 61 6c  ) |.DEFAULT <val
4740: 75 65 3e 20 7c 0a 43 4f 4c 4c 41 54 45 20 3c 63  ue> |.COLLATE <c
4750: 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 0a 7d  ollation-name>.}
4760: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0a   {constraint} {.
4770: 50 52 49 4d 41 52 59 20 4b 45 59 20 28 20 3c 63  PRIMARY KEY ( <c
4780: 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b 20  olumn-list> ) [ 
4790: 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  <conflict-clause
47a0: 3e 20 5d 20 7c 0a 55 4e 49 51 55 45 20 28 20 3c  > ] |.UNIQUE ( <
47b0: 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b  column-list> ) [
47c0: 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   <conflict-claus
47d0: 65 3e 20 5d 20 7c 0a 43 48 45 43 4b 20 28 20 3c  e> ] |.CHECK ( <
47e0: 65 78 70 72 3e 20 29 0a 7d 20 7b 63 6f 6e 66 6c  expr> ).} {confl
47f0: 69 63 74 2d 63 6c 61 75 73 65 7d 20 7b 0a 4f 4e  ict-clause} {.ON
4800: 20 43 4f 4e 46 4c 49 43 54 20 3c 63 6f 6e 66 6c   CONFLICT <confl
4810: 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 0a 7d  ict-algorithm>.}
4820: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 41 20 43 52  ..puts {.<p>A CR
4830: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
4840: 6d 65 6e 74 20 69 73 20 62 61 73 69 63 61 6c 6c  ment is basicall
4850: 79 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  y the keywords "
4860: 43 52 45 41 54 45 20 54 41 42 4c 45 22 0a 66 6f  CREATE TABLE".fo
4870: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6e 61  llowed by the na
4880: 6d 65 20 6f 66 20 61 20 6e 65 77 20 74 61 62 6c  me of a new tabl
4890: 65 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65  e and a parenthe
48a0: 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  sized list of co
48b0: 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 73  lumn.definitions
48c0: 20 61 6e 64 20 63 6f 6e 73 74 72 61 69 6e 74 73   and constraints
48d0: 2e 20 20 54 68 65 20 74 61 62 6c 65 20 6e 61 6d  .  The table nam
48e0: 65 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  e can be either 
48f0: 61 6e 20 69 64 65 6e 74 69 66 69 65 72 0a 6f 72  an identifier.or
4900: 20 61 20 73 74 72 69 6e 67 2e 20 20 54 61 62 6c   a string.  Tabl
4910: 65 73 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65  es names that be
4920: 67 69 6e 20 77 69 74 68 20 22 3c 62 3e 73 71 6c  gin with "<b>sql
4930: 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72 65  ite_</b>" are re
4940: 73 65 72 76 65 64 0a 66 6f 72 20 75 73 65 20 62  served.for use b
4950: 79 20 74 68 65 20 65 6e 67 69 6e 65 2e 3c 2f 70  y the engine.</p
4960: 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c 75 6d  >..<p>Each colum
4970: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20  n definition is 
4980: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
4990: 63 6f 6c 75 6d 6e 20 66 6f 6c 6c 6f 77 65 64 20  column followed 
49a0: 62 79 20 74 68 65 0a 64 61 74 61 74 79 70 65 20  by the.datatype 
49b0: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c  for that column,
49c0: 20 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72   then one or mor
49d0: 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  e optional colum
49e0: 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54  n constraints..T
49f0: 68 65 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  he datatype for 
4a00: 74 68 65 20 63 6f 6c 75 6d 6e 20 64 6f 65 73 20  the column does 
4a10: 6e 6f 74 20 72 65 73 74 72 69 63 74 20 77 68 61  not restrict wha
4a20: 74 20 64 61 74 61 20 6d 61 79 20 62 65 20 70 75  t data may be pu
4a30: 74 0a 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e  t.in that column
4a40: 2e 0a 53 65 65 20 3c 61 20 68 72 65 66 3d 22 64  ..See <a href="d
4a50: 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22 3e 44  atatype3.html">D
4a60: 61 74 61 74 79 70 65 73 20 49 6e 20 53 51 4c 69  atatypes In SQLi
4a70: 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f 61 3e  te Version 3</a>
4a80: 20 66 6f 72 0a 61 64 64 69 74 69 6f 6e 61 6c 20   for.additional 
4a90: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 54 68 65  information..The
4aa0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
4ab0: 6e 74 20 63 61 75 73 65 73 20 61 6e 20 69 6e 64  nt causes an ind
4ac0: 65 78 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  ex to be created
4ad0: 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65   on the specifie
4ae0: 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 69 73  d.columns.  This
4af0: 20 69 6e 64 65 78 20 6d 75 73 74 20 63 6f 6e 74   index must cont
4b00: 61 69 6e 20 75 6e 69 71 75 65 20 6b 65 79 73 2e  ain unique keys.
4b10: 0a 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61  .The COLLATE cla
4b20: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 77 68  use specifies wh
4b30: 61 74 20 74 65 78 74 20 3c 61 20 68 72 65 66 3d  at text <a href=
4b40: 22 64 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 23  "datatype3.html#
4b50: 63 6f 6c 6c 61 74 69 6f 6e 22 3e 0a 63 6f 6c 6c  collation">.coll
4b60: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 3c 2f  ating function</
4b70: 61 3e 20 74 6f 20 75 73 65 20 77 68 65 6e 20 63  a> to use when c
4b80: 6f 6d 70 61 72 69 6e 67 20 74 65 78 74 20 65 6e  omparing text en
4b90: 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 6f  tries for the co
4ba0: 6c 75 6d 6e 2e 20 20 0a 54 68 65 20 62 75 69 6c  lumn.  .The buil
4bb0: 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c  t-in BINARY coll
4bc0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  ating function i
4bd0: 73 20 75 73 65 64 20 62 79 20 64 65 66 61 75 6c  s used by defaul
4be0: 74 2e 0a 3c 70 3e 0a 54 68 65 20 44 45 46 41 55  t..<p>.The DEFAU
4bf0: 4c 54 20 63 6f 6e 73 74 72 61 69 6e 74 20 73 70  LT constraint sp
4c00: 65 63 69 66 69 65 73 20 61 20 64 65 66 61 75 6c  ecifies a defaul
4c10: 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 77  t value to use w
4c20: 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 49 4e 53  hen doing an INS
4c30: 45 52 54 2e 0a 54 68 65 20 76 61 6c 75 65 20 6d  ERT..The value m
4c40: 61 79 20 62 65 20 4e 55 4c 4c 2c 20 61 20 73 74  ay be NULL, a st
4c50: 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72  ring constant or
4c60: 20 61 20 6e 75 6d 62 65 72 2e 20 53 74 61 72 74   a number. Start
4c70: 69 6e 67 20 77 69 74 68 20 76 65 72 73 69 6f 6e  ing with version
4c80: 0a 33 2e 31 2e 30 2c 20 74 68 65 20 64 65 66 61  .3.1.0, the defa
4c90: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
4ca0: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
4cb0: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
4cc0: 64 65 70 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72  dependant.keywor
4cd0: 64 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds CURRENT_TIME,
4ce0: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
4cf0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
4d00: 4d 50 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  MP. If the value
4d10: 20 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69   is.NULL, a stri
4d20: 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e  ng constant or n
4d30: 75 6d 62 65 72 2c 20 69 74 20 69 73 20 6c 69 74  umber, it is lit
4d40: 65 72 61 6c 6c 79 20 69 6e 73 65 72 74 65 64 20  erally inserted 
4d50: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 0a  into the column.
4d60: 77 68 65 6e 65 76 65 72 20 61 6e 20 49 4e 53 45  whenever an INSE
4d70: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  RT statement tha
4d80: 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 65 63 69  t does not speci
4d90: 66 79 20 61 20 76 61 6c 75 65 20 66 6f 72 20 74  fy a value for t
4da0: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 0a 65 78 65  he column is.exe
4db0: 63 75 74 65 64 2e 20 49 66 20 74 68 65 20 76 61  cuted. If the va
4dc0: 6c 75 65 20 69 73 20 43 55 52 52 45 4e 54 5f 54  lue is CURRENT_T
4dd0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
4de0: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
4df0: 45 53 54 41 4d 50 2c 20 74 68 65 6e 0a 74 68 65  ESTAMP, then.the
4e00: 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74   current UTC dat
4e10: 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73  e and/or time is
4e20: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
4e30: 68 65 20 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 0a  he columns. For.
4e40: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68  CURRENT_TIME, th
4e50: 65 20 66 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d  e format is HH:M
4e60: 4d 3a 53 53 2e 20 46 6f 72 20 43 55 52 52 45 4e  M:SS. For CURREN
4e70: 54 5f 44 41 54 45 2c 20 59 59 59 59 2d 4d 4d 2d  T_DATE, YYYY-MM-
4e80: 44 44 2e 20 54 68 65 20 66 6f 72 6d 61 74 0a 66  DD. The format.f
4e90: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
4ea0: 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d  TAMP is "YYYY-MM
4eb0: 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c  -DD HH:MM:SS"..<
4ec0: 2f 70 3e 0a 0a 3c 70 3e 53 70 65 63 69 66 79 69  /p>..<p>Specifyi
4ed0: 6e 67 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  ng a PRIMARY KEY
4ee0: 20 6e 6f 72 6d 61 6c 6c 79 20 6a 75 73 74 20 63   normally just c
4ef0: 72 65 61 74 65 73 20 61 20 55 4e 49 51 55 45 20  reates a UNIQUE 
4f00: 69 6e 64 65 78 0a 6f 6e 20 74 68 65 20 63 6f 72  index.on the cor
4f10: 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d  responding colum
4f20: 6e 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  ns.  However, if
4f30: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
4f40: 6f 6e 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  on a single colu
4f50: 6d 6e 0a 74 68 61 74 20 68 61 73 20 64 61 74 61  mn.that has data
4f60: 74 79 70 65 20 49 4e 54 45 47 45 52 2c 20 74 68  type INTEGER, th
4f70: 65 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  en that column i
4f80: 73 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  s used internall
4f90: 79 0a 61 73 20 74 68 65 20 61 63 74 75 61 6c 20  y.as the actual 
4fa0: 6b 65 79 20 6f 66 20 74 68 65 20 42 2d 54 72 65  key of the B-Tre
4fb0: 65 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e  e for the table.
4fc0: 20 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61    This means tha
4fd0: 74 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 6d 61 79  t the column.may
4fe0: 20 6f 6e 6c 79 20 68 6f 6c 64 20 75 6e 69 71 75   only hold uniqu
4ff0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
5000: 2e 20 20 28 45 78 63 65 70 74 20 66 6f 72 20 74  .  (Except for t
5010: 68 69 73 20 6f 6e 65 20 63 61 73 65 2c 0a 53 51  his one case,.SQ
5020: 4c 69 74 65 20 69 67 6e 6f 72 65 73 20 74 68 65  Lite ignores the
5030: 20 64 61 74 61 74 79 70 65 20 73 70 65 63 69 66   datatype specif
5040: 69 63 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  ication of colum
5050: 6e 73 20 61 6e 64 20 61 6c 6c 6f 77 73 0a 61 6e  ns and allows.an
5060: 79 20 6b 69 6e 64 20 6f 66 20 64 61 74 61 20 74  y kind of data t
5070: 6f 20 62 65 20 70 75 74 20 69 6e 20 61 20 63 6f  o be put in a co
5080: 6c 75 6d 6e 20 72 65 67 61 72 64 6c 65 73 73 20  lumn regardless 
5090: 6f 66 20 69 74 73 20 64 65 63 6c 61 72 65 64 0a  of its declared.
50a0: 64 61 74 61 74 79 70 65 2e 29 20 20 49 66 20 61  datatype.)  If a
50b0: 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20   table does not 
50c0: 68 61 76 65 20 61 6e 20 49 4e 54 45 47 45 52 20  have an INTEGER 
50d0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
50e0: 6d 6e 2c 0a 74 68 65 6e 20 74 68 65 20 42 2d 54  mn,.then the B-T
50f0: 72 65 65 20 6b 65 79 20 77 69 6c 6c 20 62 65 20  ree key will be 
5100: 61 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  a automatically 
5110: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
5120: 72 2e 20 20 54 68 65 0a 42 2d 54 72 65 65 20 6b  r.  The.B-Tree k
5130: 65 79 20 66 6f 72 20 61 20 72 6f 77 20 63 61 6e  ey for a row can
5140: 20 61 6c 77 61 79 73 20 62 65 20 61 63 63 65 73   always be acces
5150: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
5160: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d   the.special nam
5170: 65 73 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  es "<b>ROWID</b>
5180: 22 2c 20 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ", "<b>OID</b>",
5190: 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
51a0: 2f 62 3e 22 2e 0a 54 68 69 73 20 69 73 20 74 72  /b>"..This is tr
51b0: 75 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ue regardless of
51c0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
51d0: 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 54 45  there is an INTE
51e0: 47 45 52 0a 50 52 49 4d 41 52 59 20 4b 45 59 2e  GER.PRIMARY KEY.
51f0: 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49    An INTEGER PRI
5200: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20  MARY KEY column 
5210: 63 61 6e 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65  can also include
5220: 20 74 68 65 0a 6b 65 79 77 6f 72 64 20 41 55 54   the.keyword AUT
5230: 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 54 68 65  OINCREMENT.  The
5240: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 6b   AUTOINCREMENT k
5250: 65 79 77 6f 72 64 20 6d 6f 64 69 66 69 65 64 20  eyword modified 
5260: 74 68 65 20 77 61 79 0a 74 68 61 74 20 42 2d 54  the way.that B-T
5270: 72 65 65 20 6b 65 79 73 20 61 72 65 20 61 75 74  ree keys are aut
5280: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
5290: 61 74 65 64 2e 20 20 41 64 64 69 74 69 6f 6e 61  ated.  Additiona
52a0: 6c 20 64 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f  l detail.on auto
52b0: 6d 61 74 69 63 20 42 2d 54 72 65 65 20 6b 65 79  matic B-Tree key
52c0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 69 73 20 61   generation is a
52d0: 76 61 69 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66  vailable.<a href
52e0: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
52f0: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
5300: 2f 70 3e 0a 0a 3c 70 3e 41 63 63 6f 72 64 69 6e  /p>..<p>Accordin
5310: 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73 74 61  g to the SQL sta
5320: 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59 20 4b  ndard, PRIMARY K
5330: 45 59 20 73 68 6f 75 6c 64 20 69 6d 70 6c 79 20  EY should imply 
5340: 4e 4f 54 20 4e 55 4c 4c 2e 0a 55 6e 66 6f 72 74  NOT NULL..Unfort
5350: 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20  unately, due to 
5360: 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20  a long-standing 
5370: 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67 68 74  coding oversight
5380: 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 0a 74  , this is not .t
5390: 68 65 20 63 61 73 65 20 69 6e 20 53 51 4c 69 74  he case in SQLit
53a0: 65 2e 20 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77  e.  SQLite allow
53b0: 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 69 6e  s NULL values.in
53c0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
53d0: 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f 75 6c 64  olumn.  We could
53e0: 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74   change SQLite t
53f0: 6f 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65  o conform to the
5400: 0a 73 74 61 6e 64 61 72 64 20 28 61 6e 64 20 77  .standard (and w
5410: 65 20 6d 69 67 68 74 20 64 6f 20 73 6f 20 69 6e  e might do so in
5420: 20 74 68 65 20 66 75 74 75 72 65 29 2c 20 62 75   the future), bu
5430: 74 20 62 79 20 74 68 65 20 74 69 6d 65 20 74 68  t by the time th
5440: 65 0a 6f 76 65 72 73 69 67 68 74 20 77 61 73 20  e.oversight was 
5450: 64 69 73 63 6f 76 65 72 65 64 2c 20 53 51 4c 69  discovered, SQLi
5460: 74 65 20 77 61 73 20 69 6e 20 73 75 63 68 20 77  te was in such w
5470: 69 64 65 20 75 73 65 20 74 68 61 74 20 77 65 20  ide use that we 
5480: 66 65 61 72 65 64 0a 62 72 65 61 6b 69 6e 67 20  feared.breaking 
5490: 6c 65 67 61 63 79 20 63 6f 64 65 20 69 66 20 77  legacy code if w
54a0: 65 20 66 69 78 65 64 20 74 68 65 20 70 72 6f 62  e fixed the prob
54b0: 6c 65 6d 2e 20 20 53 6f 20 66 6f 72 20 6e 6f 77  lem.  So for now
54c0: 20 77 65 20 68 61 76 65 0a 63 68 6f 73 65 6e 20   we have.chosen 
54d0: 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6c 6c 6f 77  to contain allow
54e0: 69 6e 67 20 4e 55 4c 4c 73 20 69 6e 20 50 52 49  ing NULLs in PRI
54f0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
5500: 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 73 68 6f  ..Developers sho
5510: 75 6c 64 20 62 65 20 61 77 61 72 65 2c 20 68 6f  uld be aware, ho
5520: 77 65 76 65 72 2c 20 74 68 61 74 20 77 65 20 6d  wever, that we m
5530: 61 79 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65  ay change SQLite
5540: 20 74 6f 0a 63 6f 6e 66 6f 72 6d 20 74 6f 20 74   to.conform to t
5550: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
5560: 69 6e 20 66 75 74 75 72 65 20 61 6e 64 20 73 68  in future and sh
5570: 6f 75 6c 64 20 64 65 73 69 67 6e 20 6e 65 77 20  ould design new 
5580: 70 72 6f 67 72 61 6d 73 0a 61 63 63 6f 72 64 69  programs.accordi
5590: 6e 67 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ngly.</p>..<p>If
55a0: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
55b0: 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f  TEMPORARY" keywo
55c0: 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  rd occurs in bet
55d0: 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e  ween "CREATE".an
55e0: 64 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74  d "TABLE" then t
55f0: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
5600: 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79   created is only
5610: 20 76 69 73 69 62 6c 65 0a 77 69 74 68 69 6e 20   visible.within 
5620: 74 68 61 74 20 73 61 6d 65 20 64 61 74 61 62 61  that same databa
5630: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 61 6e  se connection.an
5640: 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  d is automatical
5650: 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a  ly deleted when.
5660: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
5670: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
5680: 64 2e 20 20 41 6e 79 20 69 6e 64 69 63 65 73 20  d.  Any indices 
5690: 63 72 65 61 74 65 64 20 6f 6e 20 61 20 74 65 6d  created on a tem
56a0: 70 6f 72 61 72 79 20 74 61 62 6c 65 0a 61 72 65  porary table.are
56b0: 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61 72 79 2e   also temporary.
56c0: 20 20 54 65 6d 70 6f 72 61 72 79 20 74 61 62 6c    Temporary tabl
56d0: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 61  es and indices a
56e0: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 73  re stored in a.s
56f0: 65 70 61 72 61 74 65 20 66 69 6c 65 20 64 69 73  eparate file dis
5700: 74 69 6e 63 74 20 66 72 6f 6d 20 74 68 65 20 6d  tinct from the m
5710: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
5720: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20 61  e.</p>..<p> If a
5730: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
5740: 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66  me&gt; is specif
5750: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ied, then the ta
5760: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
5770: 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74  n .the named dat
5780: 61 62 61 73 65 2e 20 49 74 20 69 73 20 61 6e 20  abase. It is an 
5790: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
57a0: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
57b0: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
57c0: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
57d0: 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26  rd, unless the &
57e0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
57f0: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
5800: 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e  If no.database n
5810: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
5820: 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  , and the TEMP k
5830: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
5840: 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65  esent,.the table
5850: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
5860: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
5870: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70  .</p>..<p>The op
5880: 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
5890: 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 69 6e 67  clause following
58a0: 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74   each constraint
58b0: 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63  .allows the spec
58c0: 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20  ification of an 
58d0: 61 6c 74 65 72 6e 61 74 69 76 65 20 64 65 66 61  alternative defa
58e0: 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ult.constraint c
58f0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
5900: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  on algorithm for
5910: 20 74 68 61 74 20 63 6f 6e 73 74 72 61 69 6e 74   that constraint
5920: 2e 0a 54 68 65 20 64 65 66 61 75 6c 74 20 69 73  ..The default is
5930: 20 61 62 6f 72 74 20 41 42 4f 52 54 2e 20 20 44   abort ABORT.  D
5940: 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61  ifferent constra
5950: 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ints within the 
5960: 73 61 6d 65 0a 74 61 62 6c 65 20 6d 61 79 20 68  same.table may h
5970: 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64 65  ave different de
5980: 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72  fault conflict r
5990: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
59a0: 74 68 6d 73 2e 0a 49 66 20 61 6e 20 43 4f 50 59  thms..If an COPY
59b0: 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20 55 50 44  , INSERT, or UPD
59c0: 41 54 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63  ATE command spec
59d0: 69 66 69 65 73 20 61 20 64 69 66 66 65 72 65 6e  ifies a differen
59e0: 74 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c  t conflict.resol
59f0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2c  ution algorithm,
5a00: 20 74 68 65 6e 20 74 68 61 74 20 61 6c 67 6f 72   then that algor
5a10: 69 74 68 6d 20 69 73 20 75 73 65 64 20 69 6e 20  ithm is used in 
5a20: 70 6c 61 63 65 20 6f 66 20 74 68 65 0a 64 65 66  place of the.def
5a30: 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20 73  ault algorithm s
5a40: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
5a50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
5a60: 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65 20  tement..See the 
5a70: 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c  section titled.<
5a80: 61 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63  a href="#conflic
5a90: 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f  t">ON CONFLICT</
5aa0: 61 3e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  a> for additiona
5ab0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
5ac0: 70 3e 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e  p>..<p>CHECK con
5ad0: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
5ae0: 70 6f 72 74 65 64 20 61 73 20 6f 66 20 76 65 72  ported as of ver
5af0: 73 69 6f 6e 20 33 2e 33 2e 30 2e 20 20 50 72 69  sion 3.3.0.  Pri
5b00: 6f 72 0a 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e  or.to version 3.
5b10: 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74  3.0, CHECK const
5b20: 72 61 69 6e 74 73 20 77 65 72 65 20 70 61 72 73  raints were pars
5b30: 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72  ed but not enfor
5b40: 63 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ced.</p>..<p>The
5b50: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
5b60: 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68  ary limits on th
5b70: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75  e number.of colu
5b80: 6d 6e 73 20 6f 72 20 6f 6e 20 74 68 65 20 6e 75  mns or on the nu
5b90: 6d 62 65 72 20 6f 66 20 63 6f 6e 73 74 72 61 69  mber of constrai
5ba0: 6e 74 73 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  nts in a table..
5bb0: 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74  The total amount
5bc0: 20 6f 66 20 64 61 74 61 20 69 6e 20 61 20 73 69   of data in a si
5bd0: 6e 67 6c 65 20 72 6f 77 20 69 73 20 6c 69 6d 69  ngle row is limi
5be0: 74 65 64 20 74 6f 20 61 62 6f 75 74 0a 31 20 6d  ted to about.1 m
5bf0: 65 67 61 62 79 74 65 73 20 69 6e 20 76 65 72 73  egabytes in vers
5c00: 69 6f 6e 20 32 2e 38 2e 20 20 49 6e 20 76 65 72  ion 2.8.  In ver
5c10: 73 69 6f 6e 20 33 2e 30 20 74 68 65 72 65 20 69  sion 3.0 there i
5c20: 73 20 6e 6f 20 61 72 62 69 74 72 61 72 79 0a 6c  s no arbitrary.l
5c30: 69 6d 69 74 20 6f 6e 20 74 68 65 20 61 6d 6f 75  imit on the amou
5c40: 6e 74 20 6f 66 20 64 61 74 61 20 69 6e 20 61 20  nt of data in a 
5c50: 72 6f 77 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 54 68  row.</p>...<p>Th
5c60: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  e CREATE TABLE A
5c70: 53 20 66 6f 72 6d 20 64 65 66 69 6e 65 73 20 74  S form defines t
5c80: 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 0a 74  he table to be.t
5c90: 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
5ca0: 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 6e   a query.  The n
5cb0: 61 6d 65 73 20 6f 66 20 74 68 65 20 74 61 62 6c  ames of the tabl
5cc0: 65 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68  e columns are.th
5cd0: 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 63  e names of the c
5ce0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
5cf0: 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  sult.</p>..<p>Th
5d00: 65 20 65 78 61 63 74 20 74 65 78 74 0a 6f 66 20  e exact text.of 
5d10: 65 61 63 68 20 43 52 45 41 54 45 20 54 41 42 4c  each CREATE TABL
5d20: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
5d30: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 3c 62 3e  tored in the <b>
5d40: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62  sqlite_master</b
5d50: 3e 0a 74 61 62 6c 65 2e 20 20 45 76 65 72 79 20  >.table.  Every 
5d60: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
5d70: 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 61 6c 6c  e is opened, all
5d80: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
5d90: 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 72 65 61  atements.are rea
5da0: 64 20 66 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71  d from the <b>sq
5db0: 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 20  lite_master</b> 
5dc0: 74 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74  table and used t
5dd0: 6f 20 72 65 67 65 6e 65 72 61 74 65 0a 53 51 4c  o regenerate.SQL
5de0: 69 74 65 27 73 20 69 6e 74 65 72 6e 61 6c 20 72  ite's internal r
5df0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
5e00: 20 74 68 65 20 74 61 62 6c 65 20 6c 61 79 6f 75   the table layou
5e10: 74 2e 0a 49 66 20 74 68 65 20 6f 72 69 67 69 6e  t..If the origin
5e20: 61 6c 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 61  al command was a
5e30: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53   CREATE TABLE AS
5e40: 20 74 68 65 6e 20 74 68 65 6e 20 61 6e 20 65 71   then then an eq
5e50: 75 69 76 61 6c 65 6e 74 0a 43 52 45 41 54 45 20  uivalent.CREATE 
5e60: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
5e70: 69 73 20 73 79 6e 74 68 65 73 69 7a 65 64 20 61  is synthesized a
5e80: 6e 64 20 73 74 6f 72 65 20 69 6e 20 3c 62 3e 73  nd store in <b>s
5e90: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e  qlite_master</b>
5ea0: 0a 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65  .in place of the
5eb0: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e   original comman
5ec0: 64 2e 0a 54 68 65 20 74 65 78 74 20 6f 66 20 43  d..The text of C
5ed0: 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
5ee0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73  TABLE statements
5ef0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
5f00: 68 65 0a 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d  he.<b>sqlite_tem
5f10: 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62  p_master</b> tab
5f20: 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  le..</p>..<p>If 
5f30: 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20  the optional IF 
5f40: 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73  NOT EXISTS claus
5f50: 65 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64  e is present and
5f60: 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 0a 77   another table.w
5f70: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
5f80: 65 20 61 6c 65 61 64 79 20 65 78 69 73 74 73 2c  e aleady exists,
5f90: 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61   then this comma
5fa0: 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d  nd becomes a no-
5fb0: 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 61 62 6c  op.</p>..<p>Tabl
5fc0: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75  es are removed u
5fd0: 73 69 6e 67 20 74 68 65 20 3c 61 20 68 72 65 66  sing the <a href
5fe0: 3d 22 23 64 72 6f 70 74 61 62 6c 65 22 3e 44 52  ="#droptable">DR
5ff0: 4f 50 20 54 41 42 4c 45 3c 2f 61 3e 20 0a 73 74  OP TABLE</a> .st
6000: 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 7d  atement.  </p>.}
6010: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ...Section {CREA
6020: 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65 61  TE TRIGGER} crea
6030: 74 65 74 72 69 67 67 65 72 0a 0a 53 79 6e 74 61  tetrigger..Synta
6040: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
6050: 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50  } {.CREATE [TEMP
6060: 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 54 52   | TEMPORARY] TR
6070: 49 47 47 45 52 20 5b 49 46 20 4e 4f 54 20 45 58  IGGER [IF NOT EX
6080: 49 53 54 53 5d 20 3c 74 72 69 67 67 65 72 2d 6e  ISTS] <trigger-n
6090: 61 6d 65 3e 20 5b 20 42 45 46 4f 52 45 20 7c 20  ame> [ BEFORE | 
60a0: 41 46 54 45 52 20 5d 0a 3c 64 61 74 61 62 61 73  AFTER ].<databas
60b0: 65 2d 65 76 65 6e 74 3e 20 4f 4e 20 5b 3c 64 61  e-event> ON [<da
60c0: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
60d0: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 0a 3c 74 72  <table-name>.<tr
60e0: 69 67 67 65 72 2d 61 63 74 69 6f 6e 3e 0a 7d 0a  igger-action>.}.
60f0: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61  .Syntax {sql-sta
6100: 74 65 6d 65 6e 74 7d 20 7b 0a 43 52 45 41 54 45  tement} {.CREATE
6110: 20 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f 52 41   [TEMP | TEMPORA
6120: 52 59 5d 20 54 52 49 47 47 45 52 20 5b 49 46 20  RY] TRIGGER [IF 
6130: 4e 4f 54 20 45 58 49 53 54 53 5d 20 3c 74 72 69  NOT EXISTS] <tri
6140: 67 67 65 72 2d 6e 61 6d 65 3e 20 49 4e 53 54 45  gger-name> INSTE
6150: 41 44 20 4f 46 0a 3c 64 61 74 61 62 61 73 65 2d  AD OF.<database-
6160: 65 76 65 6e 74 3e 20 4f 4e 20 5b 3c 64 61 74 61  event> ON [<data
6170: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 76  base-name> .] <v
6180: 69 65 77 2d 6e 61 6d 65 3e 0a 3c 74 72 69 67 67  iew-name>.<trigg
6190: 65 72 2d 61 63 74 69 6f 6e 3e 0a 7d 0a 0a 53 79  er-action>.}..Sy
61a0: 6e 74 61 78 20 7b 64 61 74 61 62 61 73 65 2d 65  ntax {database-e
61b0: 76 65 6e 74 7d 20 7b 0a 44 45 4c 45 54 45 20 7c  vent} {.DELETE |
61c0: 20 0a 49 4e 53 45 52 54 20 7c 20 0a 55 50 44 41   .INSERT | .UPDA
61d0: 54 45 20 7c 20 0a 55 50 44 41 54 45 20 4f 46 20  TE | .UPDATE OF 
61e0: 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 0a 7d 0a  <column-list>.}.
61f0: 0a 53 79 6e 74 61 78 20 7b 74 72 69 67 67 65 72  .Syntax {trigger
6200: 2d 61 63 74 69 6f 6e 7d 20 7b 0a 5b 20 46 4f 52  -action} {.[ FOR
6210: 20 45 41 43 48 20 52 4f 57 20 5d 20 5b 20 57 48   EACH ROW ] [ WH
6220: 45 4e 20 3c 65 78 70 72 65 73 73 69 6f 6e 3e 20  EN <expression> 
6230: 5d 20 0a 42 45 47 49 4e 20 0a 20 20 3c 74 72 69  ] .BEGIN .  <tri
6240: 67 67 65 72 2d 73 74 65 70 3e 20 3b 20 5b 20 3c  gger-step> ; [ <
6250: 74 72 69 67 67 65 72 2d 73 74 65 70 3e 20 3b 20  trigger-step> ; 
6260: 5d 2a 0a 45 4e 44 0a 7d 0a 0a 53 79 6e 74 61 78  ]*.END.}..Syntax
6270: 20 7b 74 72 69 67 67 65 72 2d 73 74 65 70 7d 20   {trigger-step} 
6280: 7b 0a 3c 75 70 64 61 74 65 2d 73 74 61 74 65 6d  {.<update-statem
6290: 65 6e 74 3e 20 7c 20 3c 69 6e 73 65 72 74 2d 73  ent> | <insert-s
62a0: 74 61 74 65 6d 65 6e 74 3e 20 7c 20 0a 3c 64 65  tatement> | .<de
62b0: 6c 65 74 65 2d 73 74 61 74 65 6d 65 6e 74 3e 20  lete-statement> 
62c0: 7c 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d  | <select-statem
62d0: 65 6e 74 3e 20 0a 7d 0a 0a 70 75 74 73 20 7b 0a  ent> .}..puts {.
62e0: 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 54 52  <p>The CREATE TR
62f0: 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20  IGGER statement 
6300: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 74  is used to add t
6310: 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a  riggers to the .
6320: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
6330: 20 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61   Triggers are da
6340: 74 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e  tabase operation
6350: 73 20 28 74 68 65 20 3c 69 3e 74 72 69 67 67 65  s (the <i>trigge
6360: 72 2d 61 63 74 69 6f 6e 3c 2f 69 3e 29 20 0a 74  r-action</i>) .t
6370: 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69  hat are automati
6380: 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20  cally performed 
6390: 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65 64  when a specified
63a0: 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74 20   database event 
63b0: 28 74 68 65 0a 3c 69 3e 64 61 74 61 62 61 73 65  (the.<i>database
63c0: 2d 65 76 65 6e 74 3c 2f 69 3e 29 20 6f 63 63 75  -event</i>) occu
63d0: 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  rs.  </p>..<p>A 
63e0: 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73  trigger may be s
63f0: 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65  pecified to fire
6400: 20 77 68 65 6e 65 76 65 72 20 61 20 44 45 4c 45   whenever a DELE
6410: 54 45 2c 20 49 4e 53 45 52 54 20 6f 72 20 55 50  TE, INSERT or UP
6420: 44 41 54 45 20 6f 66 20 61 0a 70 61 72 74 69 63  DATE of a.partic
6430: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61  ular database ta
6440: 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77  ble occurs, or w
6450: 68 65 6e 65 76 65 72 20 61 6e 20 55 50 44 41 54  henever an UPDAT
6460: 45 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  E of one or more
6470: 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d  .specified colum
6480: 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 20 61 72  ns of a table ar
6490: 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a  e updated.</p>..
64a0: 3c 70 3e 41 74 20 74 68 69 73 20 74 69 6d 65 20  <p>At this time 
64b0: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
64c0: 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f  only FOR EACH RO
64d0: 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20  W triggers, not 
64e0: 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45  FOR EACH.STATEME
64f0: 4e 54 20 74 72 69 67 67 65 72 73 2e 20 48 65 6e  NT triggers. Hen
6500: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
6510: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
6520: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
6530: 6c 2e 20 20 46 4f 52 0a 45 41 43 48 20 52 4f 57  l.  FOR.EACH ROW
6540: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
6550: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
6560: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 3c 69   specified as <i
6570: 3e 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f  >trigger-steps</
6580: 69 3e 20 0a 6d 61 79 20 62 65 20 65 78 65 63 75  i> .may be execu
6590: 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f  ted (depending o
65a0: 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  n the WHEN claus
65b0: 65 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  e) for each data
65c0: 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69  base row being.i
65d0: 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64  nserted, updated
65e0: 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74   or deleted by t
65f0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75  he statement cau
6600: 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  sing the trigger
6610: 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c   to fire.</p>..<
6620: 70 3e 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20  p>Both the WHEN 
6630: 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 3c  clause and the <
6640: 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c  i>trigger-steps<
6650: 2f 69 3e 20 6d 61 79 20 61 63 63 65 73 73 20 65  /i> may access e
6660: 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20  lements of .the 
6670: 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74  row being insert
6680: 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75  ed, deleted or u
6690: 70 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66  pdated using ref
66a0: 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66  erences of the f
66b0: 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c  orm ."NEW.<i>col
66c0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e  umn-name</i>" an
66d0: 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e  d "OLD.<i>column
66e0: 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72  -name</i>", wher
66f0: 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  e.<i>column-name
6700: 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  </i> is the name
6710: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f   of a column fro
6720: 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  m the table that
6730: 20 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20   the trigger.is 
6740: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e  associated with.
6750: 20 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66   OLD and NEW ref
6760: 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
6770: 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67   be used in trig
6780: 67 65 72 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67  gers on.<i>trigg
6790: 65 72 2d 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f  er-event</i>s fo
67a0: 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65  r which they are
67b0: 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f   relevant, as fo
67c0: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62  llows:</p>..<tab
67d0: 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
67e0: 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e  padding=10>.<tr>
67f0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6800: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
6810: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53  width=120><i>INS
6820: 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ERT</i></td>.<td
6830: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45   valign="top">NE
6840: 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  W references are
6850: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
6860: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
6870: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
6880: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
6890: 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74  <i>UPDATE</i></t
68a0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
68b0: 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20  op">NEW and OLD 
68c0: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
68d0: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
68e0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
68f0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
6900: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
6910: 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >DELETE</i></td>
6920: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6930: 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73  ">OLD references
6940: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
6950: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
6960: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45  /p>..<p>If a WHE
6970: 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70  N clause is supp
6980: 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74  lied, the SQL st
6990: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
69a0: 65 64 20 61 73 20 3c 69 3e 74 72 69 67 67 65 72  ed as <i>trigger
69b0: 2d 73 74 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f  -steps</i> are o
69c0: 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72  nly executed for
69d0: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
69e0: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
69f0: 69 73 20 74 72 75 65 2e 20 49 66 20 6e 6f 20 57  is true. If no W
6a00: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
6a10: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
6a20: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 65  statements are e
6a30: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
6a40: 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  rows.</p>..<p>Th
6a50: 65 20 73 70 65 63 69 66 69 65 64 20 3c 69 3e 74  e specified <i>t
6a60: 72 69 67 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20  rigger-time</i> 
6a70: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20  determines when 
6a80: 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 73  the <i>trigger-s
6a90: 74 65 70 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65  teps</i>.will be
6aa0: 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69   executed relati
6ab0: 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74  ve to the insert
6ac0: 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f  ion, modificatio
6ad0: 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20  n or removal of 
6ae0: 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72  the.associated r
6af0: 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 4f  ow.</p>..<p>An O
6b00: 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
6b10: 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69  e may be specifi
6b20: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
6b30: 20 55 50 44 41 54 45 20 6f 72 20 49 4e 53 45 52   UPDATE or INSER
6b40: 54 0a 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65  T.<i>trigger-ste
6b50: 70 3c 2f 69 3e 2e 20 48 6f 77 65 76 65 72 20 69  p</i>. However i
6b60: 66 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  f an ON CONFLICT
6b70: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
6b80: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
6b90: 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63  .the statement c
6ba0: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
6bb0: 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e  er to fire, then
6bc0: 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 68   this conflict h
6bd0: 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 69  andling.policy i
6be0: 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c  s used instead.<
6bf0: 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73  /p>..<p>Triggers
6c00: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
6c10: 6c 79 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20  ly dropped when 
6c20: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
6c30: 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61  hey are .associa
6c40: 74 65 64 20 77 69 74 68 20 69 73 20 64 72 6f 70  ted with is drop
6c50: 70 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69  ped.</p>..<p>Tri
6c60: 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65  ggers may be cre
6c70: 61 74 65 64 20 6f 6e 20 76 69 65 77 73 2c 20 61  ated on views, a
6c80: 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61  s well as ordina
6c90: 72 79 20 74 61 62 6c 65 73 2c 20 62 79 20 73 70  ry tables, by sp
6ca0: 65 63 69 66 79 69 6e 67 0a 49 4e 53 54 45 41 44  ecifying.INSTEAD
6cb0: 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41 54   OF in the CREAT
6cc0: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
6cd0: 65 6e 74 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d  ent. If one or m
6ce0: 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f  ore ON INSERT, O
6cf0: 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55  N DELETE.or ON U
6d00: 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61  PDATE triggers a
6d10: 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20  re defined on a 
6d20: 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73  view, then it is
6d30: 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f   not an error to
6d40: 20 65 78 65 63 75 74 65 0a 61 6e 20 49 4e 53 45   execute.an INSE
6d50: 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50  RT, DELETE or UP
6d60: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f  DATE statement o
6d70: 6e 20 74 68 65 20 76 69 65 77 2c 20 72 65 73 70  n the view, resp
6d80: 65 63 74 69 76 65 6c 79 2e 20 54 68 65 72 65 61  ectively. Therea
6d90: 66 74 65 72 2c 0a 65 78 65 63 75 74 69 6e 67 20  fter,.executing 
6da0: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
6db0: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74  E or UPDATE on t
6dc0: 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74  he view causes t
6dd0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 20  he associated.  
6de0: 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65  triggers to fire
6df0: 2e 20 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65  . The real table
6e00: 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65  s underlying the
6e10: 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f   view are not mo
6e20: 64 69 66 69 65 64 0a 20 20 28 65 78 63 65 70 74  dified.  (except
6e30: 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63   possibly explic
6e40: 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67  itly, by a trigg
6e50: 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e  er program).</p>
6e60: 0a 0a 3c 70 3e 3c 62 3e 45 78 61 6d 70 6c 65 3a  ..<p><b>Example:
6e70: 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 73  </b></p>..<p>Ass
6e80: 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f  uming that custo
6e90: 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  mer records are 
6ea0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63  stored in the "c
6eb0: 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c  ustomers" table,
6ec0: 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20   and.that order 
6ed0: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
6ee0: 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72  ed in the "order
6ef0: 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f  s" table, the fo
6f00: 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a  llowing trigger.
6f10: 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c  ensures that all
6f20: 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65   associated orde
6f30: 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65  rs are redirecte
6f40: 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65  d when a custome
6f50: 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72  r changes.his or
6f60: 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70   her address:</p
6f70: 3e 0a 7d 0a 45 78 61 6d 70 6c 65 20 7b 0a 43 52  >.}.Example {.CR
6f80: 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64  EATE TRIGGER upd
6f90: 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64  ate_customer_add
6fa0: 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61  ress UPDATE OF a
6fb0: 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d  ddress ON custom
6fc0: 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20  ers .  BEGIN.   
6fd0: 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53   UPDATE orders S
6fe0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77  ET address = new
6ff0: 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  .address WHERE c
7000: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f  ustomer_name = o
7010: 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a  ld.name;.  END;.
7020: 7d 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 69 74 68  }.puts {.<p>With
7030: 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e   this trigger in
7040: 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69  stalled, executi
7050: 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ng the statement
7060: 3a 3c 2f 70 3e 0a 7d 0a 0a 45 78 61 6d 70 6c 65  :</p>.}..Example
7070: 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d   {.UPDATE custom
7080: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
7090: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
70a0: 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63  HERE name = 'Jac
70b0: 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 0a 70 75 74 73  k Jones';.}.puts
70c0: 20 7b 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65   {.<p>causes the
70d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65   following to be
70e0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65   automatically e
70f0: 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 7d 0a 45  xecuted:</p>.}.E
7100: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
7110: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
7120: 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e  ss = '1 Main St.
7130: 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72  ' WHERE customer
7140: 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f  _name = 'Jack Jo
7150: 6e 65 73 27 3b 0a 7d 0a 0a 70 75 74 73 20 7b 0a  nes';.}..puts {.
7160: 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 63 75 72  <p>Note that cur
7170: 72 65 6e 74 6c 79 2c 20 74 72 69 67 67 65 72 73  rently, triggers
7180: 20 6d 61 79 20 62 65 68 61 76 65 20 6f 64 64 6c   may behave oddl
7190: 79 20 77 68 65 6e 20 63 72 65 61 74 65 64 20 6f  y when created o
71a0: 6e 20 74 61 62 6c 65 73 0a 20 20 77 69 74 68 20  n tables.  with 
71b0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
71c0: 4b 45 59 20 66 69 65 6c 64 73 2e 20 49 66 20 61  KEY fields. If a
71d0: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20   BEFORE trigger 
71e0: 70 72 6f 67 72 61 6d 20 6d 6f 64 69 66 69 65 73  program modifies
71f0: 20 74 68 65 20 0a 20 20 49 4e 54 45 47 45 52 20   the .  INTEGER 
7200: 50 52 49 4d 41 52 59 20 4b 45 59 20 66 69 65 6c  PRIMARY KEY fiel
7210: 64 20 6f 66 20 61 20 72 6f 77 20 74 68 61 74 20  d of a row that 
7220: 77 69 6c 6c 20 62 65 20 73 75 62 73 65 71 75 65  will be subseque
7230: 6e 74 6c 79 20 75 70 64 61 74 65 64 20 62 79 20  ntly updated by 
7240: 74 68 65 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  the.  statement 
7250: 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20  that causes the 
7260: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c  trigger to fire,
7270: 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
7280: 20 6d 61 79 20 6e 6f 74 20 6f 63 63 75 72 2e 20   may not occur. 
7290: 0a 20 20 54 68 65 20 77 6f 72 6b 61 72 6f 75 6e  .  The workaroun
72a0: 64 20 69 73 20 74 6f 20 64 65 63 6c 61 72 65 20  d is to declare 
72b0: 74 68 65 20 74 61 62 6c 65 20 77 69 74 68 20 61  the table with a
72c0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
72d0: 75 6d 6e 20 69 6e 73 74 65 61 64 0a 20 20 6f 66  umn instead.  of
72e0: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
72f0: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 3c  ARY KEY column.<
7300: 2f 70 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  /p>.}..puts {.<p
7310: 3e 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66  >A special SQL f
7320: 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20  unction RAISE() 
7330: 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68  may be used with
7340: 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  in a trigger-pro
7350: 67 72 61 6d 2c 20 77 69 74 68 20 74 68 65 20 66  gram, with the f
7360: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c  ollowing syntax<
7370: 2f 70 3e 20 0a 7d 0a 53 79 6e 74 61 78 20 7b 72  /p> .}.Syntax {r
7380: 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 7d 20 7b  aise-function} {
7390: 0a 52 41 49 53 45 20 28 20 41 42 4f 52 54 2c 20  .RAISE ( ABORT, 
73a0: 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20  <error-message> 
73b0: 29 20 7c 20 0a 52 41 49 53 45 20 28 20 46 41 49  ) | .RAISE ( FAI
73c0: 4c 2c 20 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67  L, <error-messag
73d0: 65 3e 20 29 20 7c 20 0a 52 41 49 53 45 20 28 20  e> ) | .RAISE ( 
73e0: 52 4f 4c 4c 42 41 43 4b 2c 20 3c 65 72 72 6f 72  ROLLBACK, <error
73f0: 2d 6d 65 73 73 61 67 65 3e 20 29 20 7c 20 0a 52  -message> ) | .R
7400: 41 49 53 45 20 28 20 49 47 4e 4f 52 45 20 29 0a  AISE ( IGNORE ).
7410: 7d 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 68 65 6e  }.puts {.<p>When
7420: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73   one of the firs
7430: 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73  t three forms is
7440: 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74   called during t
7450: 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 20 65  rigger-program e
7460: 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70  xecution, the sp
7470: 65 63 69 66 69 65 64 20 4f 4e 20 43 4f 4e 46 4c  ecified ON CONFL
7480: 49 43 54 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ICT processing i
7490: 73 20 70 65 72 66 6f 72 6d 65 64 20 28 65 69 74  s performed (eit
74a0: 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20  her ABORT, FAIL 
74b0: 6f 72 20 0a 20 52 4f 4c 4c 42 41 43 4b 29 20 61  or . ROLLBACK) a
74c0: 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 71  nd the current q
74d0: 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e  uery terminates.
74e0: 20 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f   An error code o
74f0: 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  f SQLITE_CONSTRA
7500: 49 4e 54 20 69 73 20 72 65 74 75 72 6e 65 64 20  INT is returned 
7510: 74 6f 20 74 68 65 20 75 73 65 72 2c 20 61 6c 6f  to the user, alo
7520: 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ng with the spec
7530: 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
7540: 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65  age.</p>..<p>Whe
7550: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
7560: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
7570: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
7580: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
7590: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
75a0: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
75b0: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
75c0: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
75d0: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
75e0: 75 65 6e 74 0a 20 20 20 20 74 72 69 67 67 65 72  uent.    trigger
75f0: 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77   programs that w
7600: 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20 65 78 65  ould of been exe
7610: 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f  cuted are abando
7620: 6e 65 64 2e 20 4e 6f 20 64 61 74 61 62 61 73 65  ned. No database
7630: 0a 20 20 20 20 63 68 61 6e 67 65 73 20 61 72 65  .    changes are
7640: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 49   rolled back.  I
7650: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
7660: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
7670: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
7680: 20 20 20 20 74 6f 20 65 78 65 63 75 74 65 20 69      to execute i
7690: 73 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66  s itself part of
76a0: 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72   a trigger progr
76b0: 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72  am, then that tr
76c0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 20 20  igger program.  
76d0: 20 20 72 65 73 75 6d 65 73 20 65 78 65 63 75 74    resumes execut
76e0: 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e  ion at the begin
76f0: 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74  ning of the next
7700: 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   step..</p>..<p>
7710: 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d  Triggers are rem
7720: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 3c  oved using the <
7730: 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74 72 69  a href="#droptri
7740: 67 67 65 72 22 3e 44 52 4f 50 20 54 52 49 47 47  gger">DROP TRIGG
7750: 45 52 3c 2f 61 3e 0a 73 74 61 74 65 6d 65 6e 74  ER</a>.statement
7760: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
7770: 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20  n {CREATE VIEW} 
7780: 7b 63 72 65 61 74 65 76 69 65 77 7d 0a 0a 53 79  {createview}..Sy
7790: 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e  ntax {sql-comman
77a0: 64 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d  d} {.CREATE [TEM
77b0: 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 56  P | TEMPORARY] V
77c0: 49 45 57 20 5b 49 46 20 4e 4f 54 20 45 58 49 53  IEW [IF NOT EXIS
77d0: 54 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  TS] [<database-n
77e0: 61 6d 65 3e 2e 5d 20 3c 76 69 65 77 2d 6e 61 6d  ame>.] <view-nam
77f0: 65 3e 20 41 53 20 3c 73 65 6c 65 63 74 2d 73 74  e> AS <select-st
7800: 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73  atement>.}..puts
7810: 20 7b 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45   {.<p>The CREATE
7820: 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73   VIEW command as
7830: 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20  signs a name to 
7840: 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a  a pre-packaged .
7850: 3c 61 20 68 72 65 66 3d 22 23 73 65 6c 65 63 74  <a href="#select
7860: 22 3e 53 45 4c 45 43 54 3c 2f 61 3e 0a 73 74 61  ">SELECT</a>.sta
7870: 74 65 6d 65 6e 74 2e 20 20 4f 6e 63 65 20 74 68  tement.  Once th
7880: 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65  e view is create
7890: 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65  d, it can be use
78a0: 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  d in the FROM cl
78b0: 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20  ause.of another 
78c0: 53 45 4c 45 43 54 20 69 6e 20 70 6c 61 63 65 20  SELECT in place 
78d0: 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e  of a table name.
78e0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65  .</p>..<p>If the
78f0: 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50   "TEMP" or "TEMP
7900: 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f  ORARY" keyword o
7910: 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e  ccurs in between
7920: 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56   "CREATE".and "V
7930: 49 45 57 22 20 74 68 65 6e 20 74 68 65 20 76 69  IEW" then the vi
7940: 65 77 20 74 68 61 74 20 69 73 20 63 72 65 61 74  ew that is creat
7950: 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62  ed is only visib
7960: 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73  le to the.proces
7970: 73 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68  s that opened th
7980: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 69  e database and i
7990: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
79a0: 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65  deleted when.the
79b0: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
79c0: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66  sed.</p>..<p> If
79d0: 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d   a &lt;database-
79e0: 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63  name&gt; is spec
79f0: 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
7a00: 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64 20  view is created 
7a10: 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61  in .the named da
7a20: 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 61 6e  tabase. It is an
7a30: 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66   error to specif
7a40: 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74  y both a &lt;dat
7a50: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61  abase-name&gt;.a
7a60: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
7a70: 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  ord, unless the 
7a80: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
7a90: 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e  e&gt; is "temp".
7aa0: 20 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20   If no.database 
7ab0: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
7ac0: 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20  d, and the TEMP 
7ad0: 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70  keyword is not p
7ae0: 72 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c  resent,.the tabl
7af0: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
7b00: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
7b10: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63  e.</p>..<p>You c
7b20: 61 6e 6e 6f 74 20 43 4f 50 59 2c 20 44 45 4c 45  annot COPY, DELE
7b30: 54 45 2c 20 49 4e 53 45 52 54 20 6f 72 20 55 50  TE, INSERT or UP
7b40: 44 41 54 45 20 61 20 76 69 65 77 2e 20 20 56 69  DATE a view.  Vi
7b50: 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  ews are read-onl
7b60: 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 48  y .in SQLite.  H
7b70: 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20  owever, in many 
7b80: 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73  cases you can us
7b90: 65 20 61 20 3c 61 20 68 72 65 66 3d 22 23 63 72  e a <a href="#cr
7ba0: 65 61 74 65 74 72 69 67 67 65 72 22 3e 0a 54 52  eatetrigger">.TR
7bb0: 49 47 47 45 52 3c 2f 61 3e 20 6f 6e 20 74 68 65  IGGER</a> on the
7bc0: 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c   view to accompl
7bd0: 69 73 68 20 74 68 65 20 73 61 6d 65 20 74 68 69  ish the same thi
7be0: 6e 67 2e 20 20 56 69 65 77 73 20 61 72 65 20 72  ng.  Views are r
7bf0: 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65  emoved .with the
7c00: 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 76   <a href="#dropv
7c10: 69 65 77 22 3e 44 52 4f 50 20 56 49 45 57 3c 2f  iew">DROP VIEW</
7c20: 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  a> .command.</p>
7c30: 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  .}..Section {CRE
7c40: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
7c50: 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d 0a  E} {createvtab}.
7c60: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d  .Syntax {sql-com
7c70: 6d 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20 56  mand} {.CREATE V
7c80: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 5b 3c 64  IRTUAL TABLE [<d
7c90: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d  atabase-name> .]
7ca0: 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 55 53   <table-name> US
7cb0: 49 4e 47 20 3c 6d 6f 64 75 6c 65 2d 6e 61 6d 65  ING <module-name
7cc0: 3e 20 5b 28 20 3c 61 72 67 75 6d 65 6e 74 73 3e  > [( <arguments>
7cd0: 20 29 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70   )].}..puts {.<p
7ce0: 3e 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  >A virtual table
7cf0: 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65   is an interface
7d00: 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20   to an external 
7d10: 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75  storage or compu
7d20: 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68  tation.engine th
7d30: 61 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  at appears to be
7d40: 20 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65   a table but doe
7d50: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73  s not actually s
7d60: 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tore information
7d70: 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  .in the database
7d80: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   file.</p>..<p>I
7d90: 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63  n general, you c
7da0: 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77  an do anything w
7db0: 69 74 68 20 61 20 76 69 72 74 75 61 6c 20 74 61  ith a virtual ta
7dc0: 62 6c 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  ble that can be 
7dd0: 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72 64  done.with an ord
7de0: 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78 63  inary table, exc
7df0: 65 70 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e  ept that you can
7e00: 6e 6f 74 20 63 72 65 61 74 65 20 74 72 69 67 67  not create trigg
7e10: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
7e20: 20 74 61 62 6c 65 2e 20 20 53 6f 6d 65 20 76 69   table.  Some vi
7e30: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
7e40: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68  ementations migh
7e50: 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69 6f  t impose additio
7e60: 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e 73  nal.restrictions
7e70: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
7e80: 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61 62  many virtual tab
7e90: 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  les are read-onl
7ea0: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26  y.</p>..<p>The &
7eb0: 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67  lt;module-name&g
7ec0: 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  t; is the name o
7ed0: 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  f an object that
7ee0: 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20   implements.the 
7ef0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
7f00: 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e  The &lt;module-n
7f10: 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20  ame&gt; must be 
7f20: 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68 0a  registered with.
7f30: 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62  the SQLite datab
7f40: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75  ase connection u
7f50: 73 69 6e 67 0a 3c 61 20 68 72 65 66 3d 22 63 61  sing.<a href="ca
7f60: 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69  pi3ref.html#sqli
7f70: 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c  te3_create_modul
7f80: 65 22 3e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e">sqlite3_creat
7f90: 65 5f 6d 6f 64 75 6c 65 3c 2f 61 3e 0a 70 72 69  e_module</a>.pri
7fa0: 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68  or to issuing th
7fb0: 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
7fc0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
7fd0: 2e 0a 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b  ..The module tak
7fe0: 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  es zero or more 
7ff0: 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
8000: 61 72 67 75 6d 65 6e 74 73 2e 0a 54 68 65 20 61  arguments..The a
8010: 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20  rguments can be 
8020: 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20 74  just about any t
8030: 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ext as long as i
8040: 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a 70  t has balanced.p
8050: 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68 65  arentheses.  The
8060: 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61 78   argument syntax
8070: 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c 79   is sufficiently
8080: 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74 68   general that th
8090: 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20  e.arguments can 
80a0: 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65 61  be made to appea
80b0: 72 20 61 73 20 63 6f 6c 75 6d 6e 20 64 65 66 69  r as column defi
80c0: 6e 69 74 69 6f 6e 73 20 69 6e 20 61 20 74 72 61  nitions in a tra
80d0: 64 69 74 69 6f 6e 61 6c 0a 3c 61 20 68 72 65 66  ditional.<a href
80e0: 3d 22 23 63 72 65 61 74 65 74 61 62 6c 65 22 3e  ="#createtable">
80f0: 43 52 45 41 54 45 20 54 41 42 4c 45 3c 2f 61 3e  CREATE TABLE</a>
8100: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 53 51   statement.  .SQ
8110: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
8120: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
8130: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
8140: 20 6d 6f 64 75 6c 65 20 77 69 74 68 6f 75 74 20   module without 
8150: 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61 74 69  any interpretati
8160: 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65 20 72  on.  It is the r
8170: 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66  esponsibility.of
8180: 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
8190: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61  ementation to pa
81a0: 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70 72 65  rse and interpre
81b0: 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75 6d 65  t its own argume
81c0: 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 76  nts.</p>..<p>A v
81d0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20  irtual table is 
81e0: 64 65 73 74 72 6f 79 65 64 20 75 73 69 6e 67 20  destroyed using 
81f0: 74 68 65 20 6f 72 64 69 6e 61 72 79 0a 3c 61 20  the ordinary.<a 
8200: 68 72 65 66 3d 22 23 64 72 6f 70 74 61 62 6c 65  href="#droptable
8210: 22 3e 44 52 4f 50 20 54 41 42 4c 45 3c 2f 61 3e  ">DROP TABLE</a>
8220: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
8230: 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49  re is no.DROP VI
8240: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
8250: 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65  ement.</p>.}..Se
8260: 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c  ction DELETE del
8270: 65 74 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ete..Syntax {sql
8280: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 44 45  -statement} {.DE
8290: 4c 45 54 45 20 46 52 4f 4d 20 5b 3c 64 61 74 61  LETE FROM [<data
82a0: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
82b0: 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 57 48 45 52  able-name> [WHER
82c0: 45 20 3c 65 78 70 72 3e 5d 0a 7d 0a 0a 70 75 74  E <expr>].}..put
82d0: 73 20 7b 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54  s {.<p>The DELET
82e0: 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  E command is use
82f0: 64 20 74 6f 20 72 65 6d 6f 76 65 20 72 65 63 6f  d to remove reco
8300: 72 64 73 20 66 72 6f 6d 20 61 20 74 61 62 6c 65  rds from a table
8310: 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f  ..The command co
8320: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 22 44  nsists of the "D
8330: 45 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65 79 77  ELETE FROM" keyw
8340: 6f 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ords followed by
8350: 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  .the name of the
8360: 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63   table from whic
8370: 68 20 72 65 63 6f 72 64 73 20 61 72 65 20 74 6f  h records are to
8380: 20 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70   be removed..</p
8390: 3e 0a 0a 3c 70 3e 57 69 74 68 6f 75 74 20 61 20  >..<p>Without a 
83a0: 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c  WHERE clause, al
83b0: 6c 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61  l rows of the ta
83c0: 62 6c 65 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ble are removed.
83d0: 0a 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  .If a WHERE clau
83e0: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
83f0: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20  then only those 
8400: 72 6f 77 73 20 74 68 61 74 20 6d 61 74 63 68 0a  rows that match.
8410: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  the expression a
8420: 72 65 20 72 65 6d 6f 76 65 64 2e 3c 2f 70 3e 0a  re removed.</p>.
8430: 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54  }...Section {DET
8440: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65  ACH DATABASE} de
8450: 74 61 63 68 0a 0a 53 79 6e 74 61 78 20 7b 73 71  tach..Syntax {sq
8460: 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 45 54  l-command} {.DET
8470: 41 43 48 20 5b 44 41 54 41 42 41 53 45 5d 20 3c  ACH [DATABASE] <
8480: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 0a 7d  database-name>.}
8490: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 69 73  ..puts {.<p>This
84a0: 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63   statement detac
84b0: 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61  hes an additiona
84c0: 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  l database conne
84d0: 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79  ction previously
84e0: 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67   .attached using
84f0: 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 61   the <a href="#a
8500: 74 74 61 63 68 22 3e 41 54 54 41 43 48 20 44 41  ttach">ATTACH DA
8510: 54 41 42 41 53 45 3c 2f 61 3e 20 73 74 61 74 65  TABASE</a> state
8520: 6d 65 6e 74 2e 20 20 49 74 0a 69 73 20 70 6f 73  ment.  It.is pos
8530: 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68  sible to have th
8540: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
8550: 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75  file attached mu
8560: 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69  ltiple times usi
8570: 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61  ng .different na
8580: 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69  mes, and detachi
8590: 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f  ng one connectio
85a0: 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c  n to a file will
85b0: 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65   leave the .othe
85c0: 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 0a  rs intact.</p>..
85d0: 3c 70 3e 54 68 69 73 20 73 74 61 74 65 6d 65 6e  <p>This statemen
85e0: 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53  t will fail if S
85f0: 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68 65 20  QLite is in the 
8600: 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e  middle of a tran
8610: 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a  saction.</p>.}..
8620: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49  .Section {DROP I
8630: 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 0a  NDEX} dropindex.
8640: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d  .Syntax {sql-com
8650: 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 49 4e 44  mand} {.DROP IND
8660: 45 58 20 5b 49 46 20 45 58 49 53 54 53 5d 20 5b  EX [IF EXISTS] [
8670: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
8680: 2e 5d 20 3c 69 6e 64 65 78 2d 6e 61 6d 65 3e 0a  .] <index-name>.
8690: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
86a0: 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74   DROP INDEX stat
86b0: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e  ement removes an
86c0: 20 69 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74   index added.wit
86d0: 68 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  h the <a href="#
86e0: 63 72 65 61 74 65 69 6e 64 65 78 22 3e 0a 43 52  createindex">.CR
86f0: 45 41 54 45 20 49 4e 44 45 58 3c 2f 61 3e 20 73  EATE INDEX</a> s
8700: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 69  tatement.  The i
8710: 6e 64 65 78 20 6e 61 6d 65 64 20 69 73 20 63 6f  ndex named is co
8720: 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64  mpletely removed
8730: 20 66 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20   from.the disk. 
8740: 20 54 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f   The only way to
8750: 20 72 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64   recover the ind
8760: 65 78 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72  ex is to reenter
8770: 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
8780: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
8790: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  mmand.</p>..<p>T
87a0: 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74  he DROP INDEX st
87b0: 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
87c0: 20 72 65 64 75 63 65 20 74 68 65 20 73 69 7a 65   reduce the size
87d0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
87e0: 20 0a 66 69 6c 65 20 69 6e 20 74 68 65 20 64 65   .file in the de
87f0: 66 61 75 6c 74 20 6d 6f 64 65 2e 0a 45 6d 70 74  fault mode..Empt
8800: 79 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64  y space in the d
8810: 61 74 61 62 61 73 65 20 69 73 20 72 65 74 61 69  atabase is retai
8820: 6e 65 64 20 66 6f 72 20 6c 61 74 65 72 20 49 4e  ned for later IN
8830: 53 45 52 54 73 2e 20 20 54 6f 20 0a 72 65 6d 6f  SERTs.  To .remo
8840: 76 65 20 66 72 65 65 20 73 70 61 63 65 20 69 6e  ve free space in
8850: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 75   the database, u
8860: 73 65 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  se the <a href="
8870: 23 76 61 63 75 75 6d 22 3e 56 41 43 55 55 4d 3c  #vacuum">VACUUM<
8880: 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 20 20 49  /a> .command.  I
8890: 66 20 41 55 54 4f 56 41 43 55 55 4d 20 6d 6f 64  f AUTOVACUUM mod
88a0: 65 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72  e is enabled for
88b0: 20 61 20 64 61 74 61 62 61 73 65 20 74 68 65 6e   a database then
88c0: 20 73 70 61 63 65 0a 77 69 6c 6c 20 62 65 20 66   space.will be f
88d0: 72 65 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  reed automatical
88e0: 6c 79 20 62 79 20 44 52 4f 50 20 49 4e 44 45 58  ly by DROP INDEX
88f0: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
8900: 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64  n {DROP TABLE} d
8910: 72 6f 70 74 61 62 6c 65 0a 0a 53 79 6e 74 61 78  roptable..Syntax
8920: 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b   {sql-command} {
8930: 0a 44 52 4f 50 20 54 41 42 4c 45 20 5b 49 46 20  .DROP TABLE [IF 
8940: 45 58 49 53 54 53 5d 20 5b 3c 64 61 74 61 62 61  EXISTS] [<databa
8950: 73 65 2d 6e 61 6d 65 3e 2e 5d 20 3c 74 61 62 6c  se-name>.] <tabl
8960: 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20  e-name>.}..puts 
8970: 7b 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 54 41  {.<p>The DROP TA
8980: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 72 65  BLE statement re
8990: 6d 6f 76 65 73 20 61 20 74 61 62 6c 65 20 61 64  moves a table ad
89a0: 64 65 64 20 77 69 74 68 20 74 68 65 20 3c 61 20  ded with the <a 
89b0: 68 72 65 66 3d 0a 22 23 63 72 65 61 74 65 74 61  href=."#createta
89c0: 62 6c 65 22 3e 43 52 45 41 54 45 20 54 41 42 4c  ble">CREATE TABL
89d0: 45 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e  E</a> statement.
89e0: 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69    The name speci
89f0: 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c  fied is the.tabl
8a00: 65 20 6e 61 6d 65 2e 20 20 49 74 20 69 73 20 63  e name.  It is c
8a10: 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65  ompletely remove
8a20: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
8a30: 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20 74  ase schema and t
8a40: 68 65 20 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20  he .disk file.  
8a50: 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f  The table can no
8a60: 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20  t be recovered. 
8a70: 20 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 73 73   All indices ass
8a80: 6f 63 69 61 74 65 64 20 0a 77 69 74 68 20 74 68  ociated .with th
8a90: 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f  e table are also
8aa0: 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   deleted.</p>..<
8ab0: 70 3e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45  p>The DROP TABLE
8ac0: 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
8ad0: 6e 6f 74 20 72 65 64 75 63 65 20 74 68 65 20 73  not reduce the s
8ae0: 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
8af0: 61 73 65 20 0a 66 69 6c 65 20 69 6e 20 74 68 65  ase .file in the
8b00: 20 64 65 66 61 75 6c 74 20 6d 6f 64 65 2e 20 20   default mode.  
8b10: 45 6d 70 74 79 20 73 70 61 63 65 20 69 6e 20 74  Empty space in t
8b20: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 72  he database is r
8b30: 65 74 61 69 6e 65 64 20 66 6f 72 0a 6c 61 74 65  etained for.late
8b40: 72 20 49 4e 53 45 52 54 73 2e 20 20 54 6f 20 0a  r INSERTs.  To .
8b50: 72 65 6d 6f 76 65 20 66 72 65 65 20 73 70 61 63  remove free spac
8b60: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
8b70: 65 2c 20 75 73 65 20 74 68 65 20 3c 61 20 68 72  e, use the <a hr
8b80: 65 66 3d 22 23 76 61 63 75 75 6d 22 3e 56 41 43  ef="#vacuum">VAC
8b90: 55 55 4d 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64  UUM</a> .command
8ba0: 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  .  If AUTOVACUUM
8bb0: 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64   mode is enabled
8bc0: 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 20   for a database 
8bd0: 74 68 65 6e 20 73 70 61 63 65 0a 77 69 6c 6c 20  then space.will 
8be0: 62 65 20 66 72 65 65 64 20 61 75 74 6f 6d 61 74  be freed automat
8bf0: 69 63 61 6c 6c 79 20 62 79 20 44 52 4f 50 20 54  ically by DROP T
8c00: 41 42 4c 45 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ABLE.</p>..<p>Th
8c10: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
8c20: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
8c30: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
8c40: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
8c50: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
8c60: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
8c70: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 7d 0a 0a  t exist.</p>.}..
8c80: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
8c90: 52 49 47 47 45 52 7d 20 64 72 6f 70 74 72 69 67  RIGGER} droptrig
8ca0: 67 65 72 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  ger.Syntax {sql-
8cb0: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 44 52 4f  statement} {.DRO
8cc0: 50 20 54 52 49 47 47 45 52 20 5b 49 46 20 45 58  P TRIGGER [IF EX
8cd0: 49 53 54 53 5d 20 5b 3c 64 61 74 61 62 61 73 65  ISTS] [<database
8ce0: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 72 69 67 67  -name> .] <trigg
8cf0: 65 72 2d 6e 61 6d 65 3e 0a 7d 0a 70 75 74 73 20  er-name>.}.puts 
8d00: 7b 20 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 54  { .<p>The DROP T
8d10: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
8d20: 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67   removes a trigg
8d30: 65 72 20 63 72 65 61 74 65 64 20 62 79 20 74 68  er created by th
8d40: 65 20 0a 3c 61 20 68 72 65 66 3d 22 23 63 72 65  e .<a href="#cre
8d50: 61 74 65 74 72 69 67 67 65 72 22 3e 43 52 45 41  atetrigger">CREA
8d60: 54 45 20 54 52 49 47 47 45 52 3c 2f 61 3e 20 73  TE TRIGGER</a> s
8d70: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 74  tatement.  The t
8d80: 72 69 67 67 65 72 20 69 73 20 0a 64 65 6c 65 74  rigger is .delet
8d90: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
8da0: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 4e 6f 74  base schema. Not
8db0: 65 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20  e that triggers 
8dc0: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
8dd0: 79 20 0a 64 72 6f 70 70 65 64 20 77 68 65 6e 20  y .dropped when 
8de0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 74  the associated t
8df0: 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e  able is dropped.
8e00: 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e  </p>.}...Section
8e10: 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f   {DROP VIEW} dro
8e20: 70 76 69 65 77 0a 0a 53 79 6e 74 61 78 20 7b 73  pview..Syntax {s
8e30: 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52  ql-command} {.DR
8e40: 4f 50 20 56 49 45 57 20 5b 49 46 20 45 58 49 53  OP VIEW [IF EXIS
8e50: 54 53 5d 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 0a  TS] <view-name>.
8e60: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
8e70: 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65   DROP VIEW state
8e80: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76  ment removes a v
8e90: 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74  iew created by t
8ea0: 68 65 20 3c 61 20 68 72 65 66 3d 0a 22 23 63 72  he <a href=."#cr
8eb0: 65 61 74 65 76 69 65 77 22 3e 43 52 45 41 54 45  eateview">CREATE
8ec0: 20 56 49 45 57 3c 2f 61 3e 20 73 74 61 74 65 6d   VIEW</a> statem
8ed0: 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73  ent.  The name s
8ee0: 70 65 63 69 66 69 65 64 20 69 73 20 74 68 65 20  pecified is the 
8ef0: 0a 76 69 65 77 20 6e 61 6d 65 2e 20 20 49 74 20  .view name.  It 
8f00: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
8f10: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
8f20: 65 6d 61 2c 20 62 75 74 20 6e 6f 20 61 63 74 75  ema, but no actu
8f30: 61 6c 20 64 61 74 61 20 0a 69 6e 20 74 68 65 20  al data .in the 
8f40: 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73 65 20  underlying base 
8f50: 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69 66 69  tables is modifi
8f60: 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74  ed.</p>.}...Sect
8f70: 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c  ion EXPLAIN expl
8f80: 61 69 6e 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ain..Syntax {sql
8f90: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 45 58  -statement} {.EX
8fa0: 50 4c 41 49 4e 20 3c 73 71 6c 2d 73 74 61 74 65  PLAIN <sql-state
8fb0: 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  ment>.}..puts {.
8fc0: 3c 70 3e 54 68 65 20 45 58 50 4c 41 49 4e 20 63  <p>The EXPLAIN c
8fd0: 6f 6d 6d 61 6e 64 20 6d 6f 64 69 66 69 65 72 20  ommand modifier 
8fe0: 69 73 20 61 20 6e 6f 6e 2d 73 74 61 6e 64 61 72  is a non-standar
8ff0: 64 20 65 78 74 65 6e 73 69 6f 6e 2e 20 20 54 68  d extension.  Th
9000: 65 0a 69 64 65 61 20 63 6f 6d 65 73 20 66 72 6f  e.idea comes fro
9010: 6d 20 61 20 73 69 6d 69 6c 61 72 20 63 6f 6d 6d  m a similar comm
9020: 61 6e 64 20 66 6f 75 6e 64 20 69 6e 20 50 6f 73  and found in Pos
9030: 74 67 72 65 53 51 4c 2c 20 62 75 74 20 74 68 65  tgreSQL, but the
9040: 20 6f 70 65 72 61 74 69 6f 6e 0a 69 73 20 63 6f   operation.is co
9050: 6d 70 6c 65 74 65 6c 79 20 64 69 66 66 65 72 65  mpletely differe
9060: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74  nt.</p>..<p>If t
9070: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
9080: 72 64 20 61 70 70 65 61 72 73 20 62 65 66 6f 72  rd appears befor
9090: 65 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 69  e any other SQLi
90a0: 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 74  te SQL command.t
90b0: 68 65 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 61  hen instead of a
90c0: 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 69 6e  ctually executin
90d0: 67 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2c 20 74  g the command, t
90e0: 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
90f0: 79 20 77 69 6c 6c 0a 72 65 70 6f 72 74 20 62 61  y will.report ba
9100: 63 6b 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  ck the sequence 
9110: 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  of virtual machi
9120: 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ne instructions 
9130: 69 74 20 77 6f 75 6c 64 20 68 61 76 65 0a 75 73  it would have.us
9140: 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68  ed to execute th
9150: 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68  e command had th
9160: 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72  e EXPLAIN keywor
9170: 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65  d not been prese
9180: 6e 74 2e 0a 46 6f 72 20 61 64 64 69 74 69 6f 6e  nt..For addition
9190: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  al information a
91a0: 62 6f 75 74 20 76 69 72 74 75 61 6c 20 6d 61 63  bout virtual mac
91b0: 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  hine instruction
91c0: 73 20 73 65 65 0a 74 68 65 20 3c 61 20 68 72 65  s see.the <a hre
91d0: 66 3d 22 61 72 63 68 2e 68 74 6d 6c 22 3e 61 72  f="arch.html">ar
91e0: 63 68 69 74 65 63 74 75 72 65 20 64 65 73 63 72  chitecture descr
91f0: 69 70 74 69 6f 6e 3c 2f 61 3e 20 6f 72 20 74 68  iption</a> or th
9200: 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  e documentation.
9210: 6f 6e 20 3c 61 20 68 72 65 66 3d 22 6f 70 63 6f  on <a href="opco
9220: 64 65 2e 68 74 6d 6c 22 3e 61 76 61 69 6c 61 62  de.html">availab
9230: 6c 65 20 6f 70 63 6f 64 65 73 3c 2f 61 3e 20 66  le opcodes</a> f
9240: 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  or the virtual m
9250: 61 63 68 69 6e 65 2e 3c 2f 70 3e 0a 7d 0a 0a 0a  achine.</p>.}...
9260: 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69  Section expressi
9270: 6f 6e 20 65 78 70 72 0a 0a 53 79 6e 74 61 78 20  on expr..Syntax 
9280: 7b 65 78 70 72 7d 20 7b 0a 3c 65 78 70 72 3e 20  {expr} {.<expr> 
9290: 3c 62 69 6e 61 72 79 2d 6f 70 3e 20 3c 65 78 70  <binary-op> <exp
92a0: 72 3e 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54  r> |.<expr> [NOT
92b0: 5d 20 3c 6c 69 6b 65 2d 6f 70 3e 20 3c 65 78 70  ] <like-op> <exp
92c0: 72 3e 20 5b 45 53 43 41 50 45 20 3c 65 78 70 72  r> [ESCAPE <expr
92d0: 3e 5d 20 7c 0a 3c 75 6e 61 72 79 2d 6f 70 3e 20  >] |.<unary-op> 
92e0: 3c 65 78 70 72 3e 20 7c 0a 28 20 3c 65 78 70 72  <expr> |.( <expr
92f0: 3e 20 29 20 7c 0a 3c 63 6f 6c 75 6d 6e 2d 6e 61  > ) |.<column-na
9300: 6d 65 3e 20 7c 0a 3c 74 61 62 6c 65 2d 6e 61 6d  me> |.<table-nam
9310: 65 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d  e> . <column-nam
9320: 65 3e 20 7c 0a 3c 64 61 74 61 62 61 73 65 2d 6e  e> |.<database-n
9330: 61 6d 65 3e 20 2e 20 3c 74 61 62 6c 65 2d 6e 61  ame> . <table-na
9340: 6d 65 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61  me> . <column-na
9350: 6d 65 3e 20 7c 0a 3c 6c 69 74 65 72 61 6c 2d 76  me> |.<literal-v
9360: 61 6c 75 65 3e 20 7c 0a 3c 70 61 72 61 6d 65 74  alue> |.<paramet
9370: 65 72 3e 20 7c 0a 3c 66 75 6e 63 74 69 6f 6e 2d  er> |.<function-
9380: 6e 61 6d 65 3e 20 28 20 3c 65 78 70 72 2d 6c 69  name> ( <expr-li
9390: 73 74 3e 20 7c 20 53 54 41 52 20 29 20 7c 0a 3c  st> | STAR ) |.<
93a0: 65 78 70 72 3e 20 49 53 4e 55 4c 4c 20 7c 0a 3c  expr> ISNULL |.<
93b0: 65 78 70 72 3e 20 4e 4f 54 4e 55 4c 4c 20 7c 0a  expr> NOTNULL |.
93c0: 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20 42 45 54  <expr> [NOT] BET
93d0: 57 45 45 4e 20 3c 65 78 70 72 3e 20 41 4e 44 20  WEEN <expr> AND 
93e0: 3c 65 78 70 72 3e 20 7c 0a 3c 65 78 70 72 3e 20  <expr> |.<expr> 
93f0: 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 76 61 6c 75  [NOT] IN ( <valu
9400: 65 2d 6c 69 73 74 3e 20 29 20 7c 0a 3c 65 78 70  e-list> ) |.<exp
9410: 72 3e 20 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 73  r> [NOT] IN ( <s
9420: 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e  elect-statement>
9430: 20 29 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54   ) |.<expr> [NOT
9440: 5d 20 49 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d  ] IN [<database-
9450: 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d  name> .] <table-
9460: 6e 61 6d 65 3e 20 7c 0a 5b 45 58 49 53 54 53 5d  name> |.[EXISTS]
9470: 20 28 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65   ( <select-state
9480: 6d 65 6e 74 3e 20 29 20 7c 0a 43 41 53 45 20 5b  ment> ) |.CASE [
9490: 3c 65 78 70 72 3e 5d 20 4c 50 20 57 48 45 4e 20  <expr>] LP WHEN 
94a0: 3c 65 78 70 72 3e 20 54 48 45 4e 20 3c 65 78 70  <expr> THEN <exp
94b0: 72 3e 20 52 50 50 4c 55 53 20 5b 45 4c 53 45 20  r> RPPLUS [ELSE 
94c0: 3c 65 78 70 72 3e 5d 20 45 4e 44 20 7c 0a 43 41  <expr>] END |.CA
94d0: 53 54 20 28 20 3c 65 78 70 72 3e 20 41 53 20 3c  ST ( <expr> AS <
94e0: 74 79 70 65 3e 20 29 20 7c 0a 3c 65 78 70 72 3e  type> ) |.<expr>
94f0: 20 43 4f 4c 4c 41 54 45 20 3c 63 6f 6c 6c 61 74   COLLATE <collat
9500: 69 6f 6e 2d 6e 61 6d 65 3e 0a 7d 20 7b 6c 69 6b  ion-name>.} {lik
9510: 65 2d 6f 70 7d 20 7b 0a 4c 49 4b 45 20 7c 20 47  e-op} {.LIKE | G
9520: 4c 4f 42 20 7c 20 52 45 47 45 58 50 20 7c 20 4d  LOB | REGEXP | M
9530: 41 54 43 48 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ATCH.}..puts {.<
9540: 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
9550: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
9560: 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
9570: 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
9580: 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
9590: 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
95a0: 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
95b0: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
95c0: 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
95d0: 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
95e0: 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
95f0: 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
9600: 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
9610: 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
9620: 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
9630: 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 70  ommands.</p>..<p
9640: 3e 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  >SQLite understa
9650: 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
9660: 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
9670: 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
9680: 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
9690: 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
96a0: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
96b0: 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
96c0: 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
96d0: 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
96e0: 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
96f0: 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
9700: 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
9710: 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
9720: 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
9730: 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
9740: 20 3c 2f 62 69 67 3e 49 4e 0a 41 4e 44 20 20 20   </big>IN.AND   
9750: 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  .OR</font>.</pre
9760: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
9770: 3c 70 3e 53 75 70 70 6f 72 74 65 64 20 75 6e 61  <p>Supported una
9780: 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
9790: 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
97a0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
97b0: 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
97c0: 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
97d0: 3e 2d 20 20 20 20 2b 20 20 20 20 21 20 20 20 20  >-    +    !    
97e0: 7e 20 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f  ~    NOT</big></
97f0: 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  font>.</pre></bl
9800: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
9810: 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  e COLLATE operat
9820: 6f 72 20 63 61 6e 20 62 65 20 74 68 6f 75 67 68  or can be though
9830: 74 20 6f 66 20 61 73 20 61 20 75 6e 61 72 79 20  t of as a unary 
9840: 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
9850: 2e 20 20 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f  .  The COLLATE o
9860: 70 65 72 61 74 6f 72 20 68 61 73 20 74 68 65 20  perator has the 
9870: 68 69 67 68 65 73 74 20 70 72 65 63 65 64 65 6e  highest preceden
9880: 63 65 2e 0a 49 74 20 61 6c 77 61 79 73 20 62 69  ce..It always bi
9890: 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c 79  nds more tightly
98a0: 20 74 68 61 6e 20 61 6e 79 20 70 72 65 66 69 78   than any prefix
98b0: 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
98c0: 6f 72 0a 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  or.any binary op
98d0: 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  erator.</p>..<p>
98e0: 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
98f0: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
9900: 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 74 20  is a no-op.  It 
9910: 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74  can be applied.t
9920: 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65  o strings, numbe
9930: 72 73 2c 20 6f 72 20 62 6c 6f 62 73 20 61 6e 64  rs, or blobs and
9940: 20 69 74 20 61 6c 77 61 79 73 20 67 69 76 65 73   it always gives
9950: 20 61 73 20 69 74 73 20 72 65 73 75 6c 74 20 74   as its result t
9960: 68 65 0a 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he.value of the 
9970: 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  operand.</p>..<p
9980: 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72 65  >Note that there
9990: 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74 69   are two variati
99a0: 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c  ons of the equal
99b0: 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73  s and not equals
99c0: 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 45 71 75  .operators.  Equ
99d0: 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68 65  als can be eithe
99e0: 72 7d 0a 70 75 74 73 20 22 5b 4f 70 65 72 61 74  r}.puts "[Operat
99f0: 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  or =] or [Operat
9a00: 6f 72 20 3d 3d 5d 2e 0a 54 68 65 20 6e 6f 6e 2d  or ==]..The non-
9a10: 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20  equals operator 
9a20: 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f  can be either.[O
9a30: 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b  perator !=] or [
9a40: 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67  Operator {&lt;&g
9a50: 74 3b 7d 5d 2e 0a 54 68 65 20 5b 4f 70 65 72 61  t;}]..The [Opera
9a60: 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72  tor ||] operator
9a70: 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74   is \"concatenat
9a80: 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74  e\" - it joins t
9a90: 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20  ogether.the two 
9aa0: 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f  strings of its o
9ab0: 70 65 72 61 6e 64 73 2e 0a 54 68 65 20 6f 70 65  perands..The ope
9ac0: 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  rator [Operator 
9ad0: 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20 72  %] outputs the r
9ae0: 65 6d 61 69 6e 64 65 72 20 6f 66 20 69 74 73 20  emainder of its 
9af0: 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f  left .operand mo
9b00: 64 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f  dulo its right o
9b10: 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  perand.</p>..<p>
9b20: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
9b30: 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
9b40: 72 20 69 73 20 61 20 6e 75 6d 65 72 69 63 20 76  r is a numeric v
9b50: 61 6c 75 65 2c 20 65 78 63 65 70 74 0a 66 6f 72  alue, except.for
9b60: 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c   the [Operator |
9b70: 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e  |] concatenation
9b80: 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20   operator which 
9b90: 67 69 76 65 73 20 61 20 73 74 72 69 6e 67 0a 72  gives a string.r
9ba0: 65 73 75 6c 74 2e 3c 2f 70 3e 22 0a 0a 70 75 74  esult.</p>"..put
9bb0: 73 20 7b 0a 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69  s {..<a name="li
9bc0: 74 65 72 61 6c 5f 76 61 6c 75 65 22 3e 3c 2f 61  teral_value"></a
9bd0: 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20  >.<p>.A literal 
9be0: 76 61 6c 75 65 20 69 73 20 61 6e 20 69 6e 74 65  value is an inte
9bf0: 67 65 72 20 6e 75 6d 62 65 72 20 6f 72 20 61 20  ger number or a 
9c00: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
9c10: 75 6d 62 65 72 2e 0a 53 63 69 65 6e 74 69 66 69  umber..Scientifi
9c20: 63 20 6e 6f 74 61 74 69 6f 6e 20 69 73 20 73 75  c notation is su
9c30: 70 70 6f 72 74 65 64 2e 20 20 54 68 65 20 22 2e  pported.  The ".
9c40: 22 20 63 68 61 72 61 63 74 65 72 20 69 73 20 61  " character is a
9c50: 6c 77 61 79 73 20 75 73 65 64 0a 61 73 20 74 68  lways used.as th
9c60: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
9c70: 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61  even if the loca
9c80: 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65 63 69  le setting speci
9c90: 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69  fies "," for.thi
9ca0: 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65  s role - the use
9cb0: 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20   of "," for the 
9cc0: 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f  decimal point wo
9cd0: 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79  uld result in.sy
9ce0: 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75 69 74  ntactic ambiguit
9cf0: 79 2e 20 20 41 20 73 74 72 69 6e 67 20 63 6f 6e  y.  A string con
9d00: 73 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20  stant is formed 
9d10: 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65  by enclosing the
9d20: 0a 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c  .string in singl
9d30: 65 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20 41  e quotes (').  A
9d40: 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69   single quote wi
9d50: 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20  thin the string 
9d60: 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62  can.be encoded b
9d70: 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69  y putting two si
9d80: 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61  ngle quotes in a
9d90: 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73   row - as in Pas
9da0: 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63  cal..C-style esc
9db0: 61 70 65 73 20 75 73 69 6e 67 20 74 68 65 20 62  apes using the b
9dc0: 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74  ackslash charact
9dd0: 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  er are not suppo
9de0: 72 74 65 64 20 62 65 63 61 75 73 65 0a 74 68 65  rted because.the
9df0: 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61  y are not standa
9e00: 72 64 20 53 51 4c 2e 0a 42 4c 4f 42 20 6c 69 74  rd SQL..BLOB lit
9e10: 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67  erals are string
9e20: 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69   literals contai
9e30: 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c  ning hexadecimal
9e40: 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64   data and.preced
9e50: 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22  ed by a single "
9e60: 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63  x" or "X" charac
9e70: 74 65 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ter.  For exampl
9e80: 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e:</p>..<blockqu
9e90: 6f 74 65 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31  ote><pre>.X'5351
9ea0: 34 36 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c  4697465'.</pre><
9eb0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
9ec0: 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  >.A literal valu
9ed0: 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68  e can also be th
9ee0: 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a  e token "NULL"..
9ef0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 20 70 61 72 61  </p>..<p>.A para
9f00: 6d 65 74 65 72 20 73 70 65 63 69 66 69 65 73 20  meter specifies 
9f10: 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e  a placeholder in
9f20: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
9f30: 66 6f 72 20 61 20 6c 69 74 65 72 61 6c 0a 76 61  for a literal.va
9f40: 6c 75 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c  lue that is fill
9f50: 65 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65  ed in at runtime
9f60: 20 75 73 69 6e 67 20 74 68 65 0a 3c 61 20 68 72   using the.<a hr
9f70: 65 66 3d 22 63 61 70 69 33 72 65 66 2e 68 74 6d  ef="capi3ref.htm
9f80: 6c 23 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  l#sqlite3_bind_i
9f90: 6e 74 22 3e 73 71 6c 69 74 65 33 5f 62 69 6e 64  nt">sqlite3_bind
9fa0: 3c 2f 61 3e 20 41 50 49 2e 0a 50 61 72 61 6d 65  </a> API..Parame
9fb0: 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65  ters can take se
9fc0: 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70  veral forms:.</p
9fd0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
9fe0: 74 61 62 6c 65 20 63 6c 61 73 73 3d 22 70 64 66  table class="pdf
9ff0: 5f 66 75 6e 63 74 69 6f 6e 73 22 3e 0a 3c 74 72  _functions">.<tr
a000: 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
a010: 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
a020: 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c  ><b>?</b><i>NNN<
a030: 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
a040: 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
a050: 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  >A question mark
a060: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e   followed by a n
a070: 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e  umber <i>NNN</i>
a080: 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
a090: 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72  r the.NNN-th par
a0a0: 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73  ameter.  NNN mus
a0b0: 74 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  t be between 1 a
a0c0: 6e 64 20 39 39 39 2e 3c 2f 74 64 3e 0a 3c 2f 74  nd 999.</td>.</t
a0d0: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
a0e0: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
a0f0: 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
a100: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
a110: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 71  0"></td>.<td>A q
a120: 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61  uestion mark tha
a130: 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65  t is not followe
a140: 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 68 6f  d by a number ho
a150: 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 0a 74  lds a spot for.t
a160: 68 65 20 6e 65 78 74 20 75 6e 75 73 65 64 20 70  he next unused p
a170: 61 72 61 6d 65 74 65 72 2e 3c 2f 74 64 3e 0a 3c  arameter.</td>.<
a180: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
a190: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
a1a0: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62  gn="top"><b>:</b
a1b0: 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
a1c0: 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
a1d0: 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 63 6f 6c 6f  </td>.<td>A colo
a1e0: 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
a1f0: 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
a200: 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
a210: 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65  r a named.parame
a220: 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d  ter with the nam
a230: 65 20 41 41 41 41 2e 20 20 4e 61 6d 65 64 20 70  e AAAA.  Named p
a240: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c  arameters are al
a250: 73 6f 20 6e 75 6d 62 65 72 65 64 2e 0a 54 68 65  so numbered..The
a260: 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64   number assigned
a270: 20 69 73 20 74 68 65 20 6e 65 78 74 20 75 6e 75   is the next unu
a280: 73 65 64 20 6e 75 6d 62 65 72 2e 20 20 54 6f 20  sed number.  To 
a290: 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c  avoid confusion,
a2a0: 0a 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61  .it is best to a
a2b0: 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65  void mixing name
a2c0: 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 20 70  d and numbered p
a2d0: 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a  arameters.</td>.
a2e0: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
a2f0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
a300: 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f  ign="top"><b>@</
a310: 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
a320: 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
a330: 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 6e 20 22 61  ></td>.<td>An "a
a340: 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78  t" sign works ex
a350: 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c  actly like a col
a360: 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  on.</td>.</tr>.<
a370: 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
a380: 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
a390: 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41  p"><b>$</b><i>AA
a3a0: 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
a3b0: 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
a3c0: 3c 74 64 3e 41 20 64 6f 6c 6c 61 72 2d 73 69 67  <td>A dollar-sig
a3d0: 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
a3e0: 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
a3f0: 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70   also holds a sp
a400: 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70  ot for a named.p
a410: 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68  arameter with th
a420: 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 54 68  e name AAAA.  Th
a430: 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  e identifier nam
a440: 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63  e in this case c
a450: 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f  an include.one o
a460: 72 20 6d 6f 72 65 20 6f 63 63 75 72 61 6e 63 65  r more occurance
a470: 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20  s of "::" and a 
a480: 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20  suffix enclosed 
a490: 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61  in "(...)" conta
a4a0: 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61  ining.any text a
a4b0: 74 20 61 6c 6c 2e 20 20 54 68 69 73 20 73 79 6e  t all.  This syn
a4c0: 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20  tax is the form 
a4d0: 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61  of a variable na
a4e0: 6d 65 20 69 6e 20 74 68 65 20 54 63 6c 0a 70 72  me in the Tcl.pr
a4f0: 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61  ogramming langua
a500: 67 65 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  ge.</td>.</tr>.<
a510: 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
a520: 75 6f 74 65 3e 0a 0a 3c 70 3e 50 61 72 61 6d 65  uote>..<p>Parame
a530: 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ters that are no
a540: 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65  t assigned value
a550: 73 20 75 73 69 6e 67 0a 3c 61 20 68 72 65 66 3d  s using.<a href=
a560: 22 63 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73  "capi3ref.html#s
a570: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22  qlite3_bind_int"
a580: 3e 73 71 6c 69 74 65 33 5f 62 69 6e 64 3c 2f 61  >sqlite3_bind</a
a590: 3e 20 61 72 65 20 74 72 65 61 74 65 64 0a 61 73  > are treated.as
a5a0: 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e   NULL.</p>..<a n
a5b0: 61 6d 65 3d 22 6c 69 6b 65 22 3e 3c 2f 61 3e 0a  ame="like"></a>.
a5c0: 3c 70 3e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  <p>The LIKE oper
a5d0: 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74  ator does a patt
a5e0: 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d  ern matching com
a5f0: 70 61 72 69 73 6f 6e 2e 20 54 68 65 20 6f 70 65  parison. The ope
a600: 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68  rand.to the righ
a610: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70  t contains the p
a620: 61 74 74 65 72 6e 2c 20 74 68 65 20 6c 65 66 74  attern, the left
a630: 20 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 63 6f   hand operand co
a640: 6e 74 61 69 6e 73 20 74 68 65 0a 73 74 72 69 6e  ntains the.strin
a650: 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e  g to match again
a660: 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 20  st the pattern. 
a670: 0a 7d 0a 70 75 74 73 20 22 41 20 70 65 72 63 65  .}.puts "A perce
a680: 6e 74 20 73 79 6d 62 6f 6c 20 5b 4f 70 65 72 61  nt symbol [Opera
a690: 74 6f 72 20 25 5d 20 69 6e 20 74 68 65 20 70 61  tor %] in the pa
a6a0: 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e  ttern matches an
a6b0: 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65  y.sequence of ze
a6c0: 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61  ro or more chara
a6d0: 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74 72  cters in the str
a6e0: 69 6e 67 2e 20 20 41 6e 20 75 6e 64 65 72 73 63  ing.  An undersc
a6f0: 6f 72 65 0a 5b 4f 70 65 72 61 74 6f 72 20 5f 5d  ore.[Operator _]
a700: 20 69 6e 20 74 68 65 20 70 61 74 74 65 72 6e 20   in the pattern 
a710: 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67  matches any sing
a720: 6c 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  le character in 
a730: 74 68 65 0a 73 74 72 69 6e 67 2e 20 20 41 6e 79  the.string.  Any
a740: 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72   other character
a750: 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20   matches itself 
a760: 6f 72 20 69 74 27 73 20 6c 6f 77 65 72 2f 75 70  or it's lower/up
a770: 70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c  per case.equival
a780: 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69  ent (i.e. case-i
a790: 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68  nsensitive match
a7a0: 69 6e 67 29 2e 20 20 28 41 20 62 75 67 3a 20 53  ing).  (A bug: S
a7b0: 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72  QLite only.under
a7c0: 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77  stands upper/low
a7d0: 65 72 20 63 61 73 65 20 66 6f 72 20 37 2d 62 69  er case for 7-bi
a7e0: 74 20 4c 61 74 69 6e 20 63 68 61 72 61 63 74 65  t Latin characte
a7f0: 72 73 2e 20 20 48 65 6e 63 65 20 74 68 65 0a 4c  rs.  Hence the.L
a800: 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  IKE operator is 
a810: 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 66  case sensitive f
a820: 6f 72 20 38 2d 62 69 74 20 69 73 6f 38 38 35 39  or 8-bit iso8859
a830: 20 63 68 61 72 61 63 74 65 72 73 20 6f 72 20 55   characters or U
a840: 54 46 2d 38 0a 63 68 61 72 61 63 74 65 72 73 2e  TF-8.characters.
a850: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74    For example, t
a860: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62  he expression <b
a870: 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e  >'a'&nbsp;LIKE&n
a880: 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54  bsp;'A'</b>.is T
a890: 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c  RUE but <b>'&ael
a8a0: 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e  ig;'&nbsp;LIKE&n
a8b0: 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62  bsp;'&AElig;'</b
a8c0: 3e 20 69 73 20 46 41 4c 53 45 2e 29 2e 3c 2f 70  > is FALSE.).</p
a8d0: 3e 22 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 49 66  >"..puts {.<p>If
a8e0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53   the optional ES
a8f0: 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70  CAPE clause is p
a900: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
a910: 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c   expression.foll
a920: 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50 45  owing the ESCAPE
a930: 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76   keyword must ev
a940: 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72 69  aluate to a stri
a950: 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  ng consisting of
a960: 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  .a single charac
a970: 74 65 72 2e 20 54 68 69 73 20 63 68 61 72 61 63  ter. This charac
a980: 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64 20  ter may be used 
a990: 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
a9a0: 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c  ern.to include l
a9b0: 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f  iteral percent o
a9c0: 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61  r underscore cha
a9d0: 72 61 63 74 65 72 73 2e 20 54 68 65 20 65 73 63  racters. The esc
a9e0: 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f  ape.character fo
a9f0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63  llowed by a perc
aa00: 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65  ent symbol, unde
aa10: 72 73 63 6f 72 65 20 6f 72 20 69 74 73 65 6c 66  rscore or itself
aa20: 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72   matches a.liter
aa30: 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  al percent symbo
aa40: 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 6f 72  l, underscore or
aa50: 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
aa60: 72 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2c  r in the string,
aa70: 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54  .respectively. T
aa80: 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70  he infix LIKE op
aa90: 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
aaa0: 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
aab0: 20 74 68 65 0a 75 73 65 72 20 66 75 6e 63 74 69   the.user functi
aac0: 6f 6e 20 3c 61 20 68 72 65 66 3d 22 23 6c 69 6b  on <a href="#lik
aad0: 65 46 75 6e 63 22 3e 20 6c 69 6b 65 28 3c 69 3e  eFunc"> like(<i>
aae0: 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c  X</i>,<i>Y</i>)<
aaf0: 2f 61 3e 2e 3c 2f 70 3e 0a 7d 0a 0a 70 75 74 73  /a>.</p>.}..puts
ab00: 20 7b 0a 54 68 65 20 4c 49 4b 45 20 6f 70 65 72   {.The LIKE oper
ab10: 61 74 6f 72 20 69 73 20 6e 6f 74 20 63 61 73 65  ator is not case
ab20: 20 73 65 6e 73 69 74 69 76 65 20 61 6e 64 20 77   sensitive and w
ab30: 69 6c 6c 20 6d 61 74 63 68 20 75 70 70 65 72 20  ill match upper 
ab40: 63 61 73 65 0a 63 68 61 72 61 63 74 65 72 73 20  case.characters 
ab50: 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 67 61 69  on one side agai
ab60: 6e 73 74 20 6c 6f 77 65 72 20 63 61 73 65 20 63  nst lower case c
ab70: 68 61 72 61 63 74 65 72 73 20 6f 6e 20 74 68 65  haracters on the
ab80: 20 6f 74 68 65 72 2e 20 20 0a 28 41 20 62 75 67   other.  .(A bug
ab90: 3a 20 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e  : SQLite only un
aba0: 64 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f  derstands upper/
abb0: 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 37  lower case for 7
abc0: 2d 62 69 74 20 4c 61 74 69 6e 0a 63 68 61 72 61  -bit Latin.chara
abd0: 63 74 65 72 73 2e 20 20 48 65 6e 63 65 20 74 68  cters.  Hence th
abe0: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
abf0: 69 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  is case sensitiv
ac00: 65 20 66 6f 72 20 38 2d 62 69 74 0a 69 73 6f 38  e for 8-bit.iso8
ac10: 38 35 39 20 63 68 61 72 61 63 74 65 72 73 20 6f  859 characters o
ac20: 72 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  r UTF-8 characte
ac30: 72 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  rs.  For example
ac40: 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  , the expression
ac50: 0a 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b  .<b>'a'&nbsp;LIK
ac60: 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 20 69  E&nbsp;'A'</b> i
ac70: 73 20 54 52 55 45 20 62 75 74 0a 3c 62 3e 27 26  s TRUE but.<b>'&
ac80: 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b  aelig;'&nbsp;LIK
ac90: 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27  E&nbsp;'&AElig;'
aca0: 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29 2e  </b> is FALSE.).
acb0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66  </p>..<p>The inf
acc0: 69 78 20 4c 49 4b 45 0a 6f 70 65 72 61 74 6f 72  ix LIKE.operator
acd0: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
ace0: 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 75  by calling the u
acf0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 3c 61 20  ser function <a 
ad00: 68 72 65 66 3d 22 23 6c 69 6b 65 46 75 6e 63 22  href="#likeFunc"
ad10: 3e 0a 6c 69 6b 65 28 3c 69 3e 58 3c 2f 69 3e 2c  >.like(<i>X</i>,
ad20: 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e 2e 20 20  <i>Y</i>)</a>.  
ad30: 49 66 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61  If an ESCAPE cla
ad40: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
ad50: 69 74 20 61 64 64 73 0a 61 20 74 68 69 72 64 20  it adds.a third 
ad60: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 65  parameter to the
ad70: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 20   function call. 
ad80: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 61  If the functiona
ad90: 6c 69 74 79 20 6f 66 20 4c 49 4b 45 20 63 61 6e  lity of LIKE can
ada0: 20 62 65 0a 6f 76 65 72 72 69 64 64 65 6e 20 62   be.overridden b
adb0: 79 20 64 65 66 69 6e 69 6e 67 20 61 6e 20 61 6c  y defining an al
adc0: 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d  ternative implem
add0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
ade0: 6c 69 6b 65 28 29 20 53 51 4c 20 66 75 6e 63 74  like() SQL funct
adf0: 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a 3c  ion.</p>.</p>..<
ae00: 61 20 6e 61 6d 65 3d 22 67 6c 6f 62 22 3e 3c 2f  a name="glob"></
ae10: 61 3e 0a 3c 70 3e 54 68 65 20 47 4c 4f 42 20 6f  a>.<p>The GLOB o
ae20: 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c  perator is simil
ae30: 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75  ar to LIKE but u
ae40: 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c  ses the Unix.fil
ae50: 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61  e globbing synta
ae60: 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61  x for its wildca
ae70: 72 64 73 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f 42  rds.  Also, GLOB
ae80: 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69   is case.sensiti
ae90: 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e  ve, unlike LIKE.
aea0: 20 20 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20    Both GLOB and 
aeb0: 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63  LIKE may be prec
aec0: 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20  eded by.the NOT 
aed0: 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72  keyword to inver
aee0: 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74  t the sense of t
aef0: 68 65 20 74 65 73 74 2e 20 20 54 68 65 20 69 6e  he test.  The in
af00: 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74  fix GLOB .operat
af10: 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  or is implemente
af20: 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
af30: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 3c   user function <
af40: 61 20 68 72 65 66 3d 22 23 67 6c 6f 62 46 75 6e  a href="#globFun
af50: 63 22 3e 0a 67 6c 6f 62 28 3c 69 3e 58 3c 2f 69  c">.glob(<i>X</i
af60: 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e 20  >,<i>Y</i>)</a> 
af70: 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64 69 66  and can be modif
af80: 69 65 64 20 62 79 20 6f 76 65 72 72 69 64 69 6e  ied by overridin
af90: 67 0a 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e  g.that function.
afa0: 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22 72  </p>..<a name="r
afb0: 65 67 65 78 70 22 3e 3c 2f 61 3e 0a 3c 70 3e 54  egexp"></a>.<p>T
afc0: 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
afd0: 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
afe0: 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 72  syntax for the r
aff0: 65 67 65 78 70 28 29 0a 75 73 65 72 20 66 75 6e  egexp().user fun
b000: 63 74 69 6f 6e 2e 20 20 4e 6f 20 72 65 67 65 78  ction.  No regex
b010: 70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f  p() user functio
b020: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
b030: 64 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75  default.and so u
b040: 73 65 20 6f 66 20 74 68 65 20 52 45 47 45 58 50  se of the REGEXP
b050: 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e   operator will n
b060: 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69  ormally result i
b070: 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61  n an.error messa
b080: 67 65 2e 20 20 49 66 20 61 20 75 73 65 72 2d 64  ge.  If a user-d
b090: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20  efined function 
b0a0: 6e 61 6d 65 64 20 22 72 65 67 65 78 70 22 0a 69  named "regexp".i
b0b0: 73 20 61 64 64 65 64 20 61 74 20 72 75 6e 2d 74  s added at run-t
b0c0: 69 6d 65 2c 20 74 68 61 74 20 66 75 6e 63 74 69  ime, that functi
b0d0: 6f 6e 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65  on will be calle
b0e0: 64 20 69 6e 20 6f 72 64 65 72 0a 74 6f 20 69 6d  d in order.to im
b0f0: 70 6c 65 6d 65 6e 74 20 74 68 65 20 52 45 47 45  plement the REGE
b100: 58 50 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e  XP operator.</p>
b110: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 6d 61 74 63 68  ..<a name="match
b120: 22 3e 3c 2f 61 3e 0a 3c 70 3e 54 68 65 20 4d 41  "></a>.<p>The MA
b130: 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73 20  TCH operator is 
b140: 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78  a special syntax
b150: 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28 29   for the match()
b160: 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20  .user function. 
b170: 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61 74   The default mat
b180: 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d  ch() function im
b190: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69  plementation.rai
b1a0: 73 65 73 20 61 6e 64 20 65 78 63 65 70 74 69 6f  ses and exceptio
b1b0: 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65 61  n and is not rea
b1c0: 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 61  lly useful for a
b1d0: 6e 79 74 68 69 6e 67 2e 0a 42 75 74 20 65 78 74  nything..But ext
b1e0: 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72  ensions can over
b1f0: 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28 29  ride the match()
b200: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d   function with m
b210: 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69  ore.helpful logi
b220: 63 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6c  c.</p>..<p>A col
b230: 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20  umn name can be 
b240: 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 73  any of the names
b250: 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
b260: 43 52 45 41 54 45 20 54 41 42 4c 45 0a 73 74 61  CREATE TABLE.sta
b270: 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66  tement or one of
b280: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b290: 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65  pecial identifie
b2a0: 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62  rs: "<b>ROWID</b
b2b0: 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22  >",."<b>OID</b>"
b2c0: 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f  , or "<b>_ROWID_
b2d0: 3c 2f 62 3e 22 2e 0a 54 68 65 73 65 20 73 70 65  </b>"..These spe
b2e0: 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
b2f0: 20 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68   all describe th
b300: 65 0a 75 6e 69 71 75 65 20 72 61 6e 64 6f 6d 20  e.unique random 
b310: 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68 65  integer key (the
b320: 20 22 72 6f 77 20 6b 65 79 22 29 20 61 73 73 6f   "row key") asso
b330: 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72  ciated with ever
b340: 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20  y .row of every 
b350: 74 61 62 6c 65 2e 0a 54 68 65 20 73 70 65 63 69  table..The speci
b360: 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  al identifiers o
b370: 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68 65  nly refer to the
b380: 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20   row key if the 
b390: 43 52 45 41 54 45 20 54 41 42 4c 45 0a 73 74 61  CREATE TABLE.sta
b3a0: 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
b3b0: 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f  define a real co
b3c0: 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61  lumn with the sa
b3d0: 6d 65 20 6e 61 6d 65 2e 20 20 52 6f 77 20 6b 65  me name.  Row ke
b3e0: 79 73 0a 61 63 74 20 6c 69 6b 65 20 72 65 61 64  ys.act like read
b3f0: 2d 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 73 2e 20 20  -only columns.  
b400: 41 20 72 6f 77 20 6b 65 79 20 63 61 6e 20 62 65  A row key can be
b410: 20 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61   used anywhere a
b420: 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20   regular.column 
b430: 63 61 6e 20 62 65 20 75 73 65 64 2c 20 65 78 63  can be used, exc
b440: 65 70 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e  ept that you can
b450: 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 76  not change the v
b460: 61 6c 75 65 0a 6f 66 20 61 20 72 6f 77 20 6b 65  alue.of a row ke
b470: 79 20 69 6e 20 61 6e 20 55 50 44 41 54 45 20 6f  y in an UPDATE o
b480: 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  r INSERT stateme
b490: 6e 74 2e 0a 22 53 45 4c 45 43 54 20 2a 20 2e 2e  nt.."SELECT * ..
b4a0: 2e 22 20 64 6f 65 73 20 6e 6f 74 20 72 65 74 75  ." does not retu
b4b0: 72 6e 20 74 68 65 20 72 6f 77 20 6b 65 79 2e 3c  rn the row key.<
b4c0: 2f 70 3e 0a 0a 3c 70 3e 53 45 4c 45 43 54 20 73  /p>..<p>SELECT s
b4d0: 74 61 74 65 6d 65 6e 74 73 20 63 61 6e 20 61 70  tatements can ap
b4e0: 70 65 61 72 20 69 6e 20 65 78 70 72 65 73 73 69  pear in expressi
b4f0: 6f 6e 73 20 61 73 20 65 69 74 68 65 72 20 74 68  ons as either th
b500: 65 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  e.right-hand ope
b510: 72 61 6e 64 20 6f 66 20 74 68 65 20 49 4e 20 6f  rand of the IN o
b520: 70 65 72 61 74 6f 72 2c 20 61 73 20 61 20 73 63  perator, as a sc
b530: 61 6c 61 72 20 71 75 61 6e 74 69 74 79 2c 20 6f  alar quantity, o
b540: 72 0a 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64  r.as the operand
b550: 20 6f 66 20 61 6e 20 45 58 49 53 54 53 20 6f 70   of an EXISTS op
b560: 65 72 61 74 6f 72 2e 0a 41 73 20 61 20 73 63 61  erator..As a sca
b570: 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6f 72 20  lar quantity or 
b580: 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  the operand of a
b590: 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 0a 74  n IN operator,.t
b5a0: 68 65 20 53 45 4c 45 43 54 20 73 68 6f 75 6c 64  he SELECT should
b5b0: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 73 69 6e   have only a sin
b5c0: 67 6c 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 69 74  gle column in it
b5d0: 73 0a 72 65 73 75 6c 74 2e 20 20 43 6f 6d 70 6f  s.result.  Compo
b5e0: 75 6e 64 20 53 45 4c 45 43 54 73 20 28 63 6f 6e  und SELECTs (con
b5f0: 6e 65 63 74 65 64 20 77 69 74 68 20 6b 65 79 77  nected with keyw
b600: 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20  ords like UNION 
b610: 6f 72 0a 45 58 43 45 50 54 29 20 61 72 65 20 61  or.EXCEPT) are a
b620: 6c 6c 6f 77 65 64 2e 0a 57 69 74 68 20 74 68 65  llowed..With the
b630: 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
b640: 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  , the columns in
b650: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
b660: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 61 72  of the SELECT ar
b670: 65 0a 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68  e.ignored and th
b680: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 74  e expression ret
b690: 75 72 6e 73 20 54 52 55 45 20 69 66 20 6f 6e 65  urns TRUE if one
b6a0: 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 65 78   or more rows ex
b6b0: 69 73 74 0a 61 6e 64 20 46 41 4c 53 45 20 69 66  ist.and FALSE if
b6c0: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
b6d0: 69 73 20 65 6d 70 74 79 2e 0a 49 66 20 6e 6f 20  is empty..If no 
b6e0: 74 65 72 6d 73 20 69 6e 20 74 68 65 20 53 45 4c  terms in the SEL
b6f0: 45 43 54 20 65 78 70 72 65 73 73 69 6f 6e 20 72  ECT expression r
b700: 65 66 65 72 20 74 6f 20 76 61 6c 75 65 20 69 6e  efer to value in
b710: 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a   the containing.
b720: 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20  query, then the 
b730: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
b740: 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70 72 69  aluated once pri
b750: 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 0a  or to any other.
b760: 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64 20 74  processing and t
b770: 68 65 20 72 65 73 75 6c 74 20 69 73 20 72 65 75  he result is reu
b780: 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79  sed as necessary
b790: 2e 20 20 49 66 20 74 68 65 20 53 45 4c 45 43 54  .  If the SELECT
b7a0: 20 65 78 70 72 65 73 73 69 6f 6e 0a 64 6f 65 73   expression.does
b7b0: 20 63 6f 6e 74 61 69 6e 20 76 61 72 69 61 62 6c   contain variabl
b7c0: 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 75 74 65  es from the oute
b7d0: 72 20 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68  r query, then th
b7e0: 65 20 53 45 4c 45 43 54 20 69 73 20 72 65 65 76  e SELECT is reev
b7f0: 61 6c 75 61 74 65 64 0a 65 76 65 72 79 20 74 69  aluated.every ti
b800: 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64 2e  me it is needed.
b810: 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20  </p>..<p>When a 
b820: 53 45 4c 45 43 54 20 69 73 20 74 68 65 20 72 69  SELECT is the ri
b830: 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 74  ght operand of t
b840: 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20  he IN operator, 
b850: 74 68 65 20 49 4e 0a 6f 70 65 72 61 74 6f 72 20  the IN.operator 
b860: 72 65 74 75 72 6e 73 20 54 52 55 45 20 69 66 20  returns TRUE if 
b870: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
b880: 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69  e left operand i
b890: 73 20 61 6e 79 20 6f 66 0a 74 68 65 20 76 61 6c  s any of.the val
b8a0: 75 65 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  ues generated by
b8b0: 20 74 68 65 20 73 65 6c 65 63 74 2e 20 20 54 68   the select.  Th
b8c0: 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d 61  e IN operator ma
b8d0: 79 20 62 65 20 70 72 65 63 65 64 65 64 0a 62 79  y be preceded.by
b8e0: 20 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64   the NOT keyword
b8f0: 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73   to invert the s
b900: 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74  ense of the test
b910: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61  .</p>..<p>When a
b920: 20 53 45 4c 45 43 54 20 61 70 70 65 61 72 73 20   SELECT appears 
b930: 77 69 74 68 69 6e 20 61 6e 20 65 78 70 72 65 73  within an expres
b940: 73 69 6f 6e 20 62 75 74 20 69 73 20 6e 6f 74 20  sion but is not 
b950: 74 68 65 20 72 69 67 68 74 0a 6f 70 65 72 61 6e  the right.operan
b960: 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61  d of an IN opera
b970: 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 20 66 69  tor, then the fi
b980: 72 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72  rst row of the r
b990: 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c  esult of the.SEL
b9a0: 45 43 54 20 62 65 63 6f 6d 65 73 20 74 68 65 20  ECT becomes the 
b9b0: 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68  value used in th
b9c0: 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 49  e expression.  I
b9d0: 66 20 74 68 65 20 53 45 4c 45 43 54 20 79 69 65  f the SELECT yie
b9e0: 6c 64 73 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  lds.more than on
b9f0: 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c  e result row, al
ba00: 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74 68 65  l rows after the
ba10: 20 66 69 72 73 74 20 61 72 65 20 69 67 6e 6f 72   first are ignor
ba20: 65 64 2e 20 20 49 66 0a 74 68 65 20 53 45 4c 45  ed.  If.the SELE
ba30: 43 54 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77  CT yields no row
ba40: 73 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  s, then the valu
ba50: 65 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  e of the SELECT 
ba60: 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70  is NULL.</p>..<p
ba70: 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69  >A CAST expressi
ba80: 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 65 20 64  on changes the d
ba90: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 3c  atatype of the <
baa0: 65 78 70 72 3e 20 69 6e 74 6f 20 74 68 65 0a 74  expr> into the.t
bab0: 79 70 65 20 73 70 65 63 69 66 69 65 64 20 62 79  ype specified by
bac0: 20 26 6c 74 3b 74 79 70 65 26 67 74 3b 2e 20 0a   &lt;type&gt;. .
bad0: 26 6c 74 3b 74 79 70 65 26 67 74 3b 20 63 61 6e  &lt;type&gt; can
bae0: 20 62 65 20 61 6e 79 20 6e 6f 6e 2d 65 6d 70 74   be any non-empt
baf0: 79 20 74 79 70 65 20 6e 61 6d 65 20 74 68 61 74  y type name that
bb00: 20 69 73 20 76 61 6c 69 64 0a 66 6f 72 20 74 68   is valid.for th
bb10: 65 20 74 79 70 65 20 69 6e 20 61 20 63 6f 6c 75  e type in a colu
bb20: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  mn definition of
bb30: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   a CREATE TABLE 
bb40: 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  statement.</p>..
bb50: 3c 70 3e 42 6f 74 68 20 73 69 6d 70 6c 65 20 61  <p>Both simple a
bb60: 6e 64 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  nd aggregate fun
bb70: 63 74 69 6f 6e 73 20 61 72 65 20 73 75 70 70 6f  ctions are suppo
bb80: 72 74 65 64 2e 20 20 41 20 73 69 6d 70 6c 65 0a  rted.  A simple.
bb90: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 62 65 20  function can be 
bba0: 75 73 65 64 20 69 6e 20 61 6e 79 20 65 78 70 72  used in any expr
bbb0: 65 73 73 69 6f 6e 2e 20 20 53 69 6d 70 6c 65 20  ession.  Simple 
bbc0: 66 75 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e  functions return
bbd0: 0a 61 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69  .a result immedi
bbe0: 61 74 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 74  ately based on t
bbf0: 68 65 69 72 20 69 6e 70 75 74 73 2e 20 20 41 67  heir inputs.  Ag
bc00: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
bc10: 73 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73  s.may only be us
bc20: 65 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ed in a SELECT s
bc30: 74 61 74 65 6d 65 6e 74 2e 20 20 41 67 67 72 65  tatement.  Aggre
bc40: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 63  gate functions c
bc50: 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72 65 73  ompute.their res
bc60: 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ult across all r
bc70: 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ows of the resul
bc80: 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e  t set.</p>..<a n
bc90: 61 6d 65 3d 22 63 6f 72 65 66 75 6e 63 74 69 6f  ame="corefunctio
bca0: 6e 73 22 3e 3c 2f 61 3e 0a 3c 62 3e 43 6f 72 65  ns"></a>.<b>Core
bcb0: 20 46 75 6e 63 74 69 6f 6e 73 3c 2f 62 3e 0a 0a   Functions</b>..
bcc0: 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63  <p>The core func
bcd0: 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f  tions shown belo
bce0: 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  w are available 
bcf0: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64  by default.  Add
bd00: 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e  itional.function
bd10: 73 20 6d 61 79 20 62 65 20 77 72 69 74 74 65 6e  s may be written
bd20: 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20   in C and added 
bd30: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
bd40: 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65  engine using.the
bd50: 20 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33 72   <a href="capi3r
bd60: 65 66 2e 68 74 6d 6c 23 63 66 75 6e 63 22 3e 73  ef.html#cfunc">s
bd70: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
bd80: 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e 0a 41 50 49  nction()</a>.API
bd90: 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f  .</p>..<table bo
bda0: 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69  rder=0 cellpaddi
bdb0: 6e 67 3d 31 30 20 63 6c 61 73 73 3d 22 70 64 66  ng=10 class="pdf
bdc0: 5f 66 75 6e 63 74 69 6f 6e 73 22 3e 0a 3c 74 72  _functions">.<tr
bdd0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
bde0: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
bdf0: 20 77 69 64 74 68 3d 31 32 30 3e 61 62 73 28 3c   width=120>abs(<
be00: 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>X</i>)</td>.<t
be10: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
be20: 65 74 75 72 6e 20 74 68 65 20 61 62 73 6f 6c 75  eturn the absolu
be30: 74 65 20 76 61 6c 75 65 20 6f 66 20 61 72 67 75  te value of argu
be40: 6d 65 6e 74 20 3c 69 3e 58 3c 2f 69 3e 2e 3c 2f  ment <i>X</i>.</
be50: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
be60: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
be70: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 63   align="right">c
be80: 6f 61 6c 65 73 63 65 28 3c 69 3e 58 3c 2f 69 3e  oalesce(<i>X</i>
be90: 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f  ,<i>Y</i>,...)</
bea0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
beb0: 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 63 6f  top">Return a co
bec0: 70 79 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  py of the first 
bed0: 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
bee0: 74 2e 20 20 49 66 0a 61 6c 6c 20 61 72 67 75 6d  t.  If.all argum
bef0: 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ents are NULL th
bf00: 65 6e 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72  en NULL is retur
bf10: 6e 65 64 2e 20 20 54 68 65 72 65 20 6d 75 73 74  ned.  There must
bf20: 20 62 65 20 61 74 20 6c 65 61 73 74 20 0a 32 20   be at least .2 
bf30: 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 74 64 3e 0a  arguments.</td>.
bf40: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
bf50: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
bf60: 67 6e 3d 22 72 69 67 68 74 22 3e 0a 3c 61 20 6e  gn="right">.<a n
bf70: 61 6d 65 3d 22 67 6c 6f 62 46 75 6e 63 22 3e 3c  ame="globFunc"><
bf80: 2f 61 3e 0a 67 6c 6f 62 28 3c 69 3e 58 3c 2f 69  /a>.glob(<i>X</i
bf90: 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e  >,<i>Y</i>)</td>
bfa0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
bfb0: 22 3e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  ">This function 
bfc0: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
bfd0: 6d 65 6e 74 20 74 68 65 0a 22 3c 62 3e 58 20 47  ment the."<b>X G
bfe0: 4c 4f 42 20 59 3c 2f 62 3e 22 20 73 79 6e 74 61  LOB Y</b>" synta
bff0: 78 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 54 68  x of SQLite.  Th
c000: 65 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33  e.<a href="capi3
c010: 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33  ref.html#sqlite3
c020: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
c030: 22 3e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  ">sqlite3_create
c040: 5f 66 75 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e 20  _function()</a> 
c050: 0a 69 6e 74 65 72 66 61 63 65 20 63 61 6e 0a 62  .interface can.b
c060: 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69  e used to overri
c070: 64 65 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  de this function
c080: 20 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61   and thereby cha
c090: 6e 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  nge the operatio
c0a0: 6e 0a 6f 66 20 74 68 65 20 3c 61 20 68 72 65 66  n.of the <a href
c0b0: 3d 22 23 67 6c 6f 62 46 75 6e 63 22 3e 47 4c 4f  ="#globFunc">GLO
c0c0: 42 3c 2f 61 3e 20 6f 70 65 72 61 74 6f 72 2e 3c  B</a> operator.<
c0d0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
c0e0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
c0f0: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
c100: 69 66 6e 75 6c 6c 28 3c 69 3e 58 3c 2f 69 3e 2c  ifnull(<i>X</i>,
c110: 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>Y</i>)</td>.<
c120: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
c130: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
c140: 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
c150: 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49  ULL argument.  I
c160: 66 0a 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73  f.both arguments
c170: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e   are NULL then N
c180: 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ULL is returned.
c190: 20 54 68 69 73 20 62 65 68 61 76 65 73 20 74 68   This behaves th
c1a0: 65 20 73 61 6d 65 20 61 73 20 0a 3c 62 3e 63 6f  e same as .<b>co
c1b0: 61 6c 65 73 63 65 28 29 3c 2f 62 3e 20 61 62 6f  alesce()</b> abo
c1c0: 76 65 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  ve.</td>.</tr>..
c1d0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
c1e0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
c1f0: 68 74 22 3e 0a 3c 61 20 6e 61 6d 65 3d 22 68 65  ht">.<a name="he
c200: 78 46 75 6e 63 22 3e 0a 68 65 78 28 3c 69 3e 58  xFunc">.hex(<i>X
c210: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
c220: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 54 68 65 20  align="top">The 
c230: 61 72 67 75 6d 65 6e 74 20 69 73 20 69 6e 74 65  argument is inte
c240: 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f  rpreted as a BLO
c250: 42 2e 20 20 54 68 65 20 72 65 73 75 6c 74 0a 69  B.  The result.i
c260: 73 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c 20  s a hexadecimal 
c270: 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65  rendering of the
c280: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
c290: 20 62 6c 6f 62 2e 3c 2f 74 64 3e 0a 3c 2f 74 72   blob.</td>.</tr
c2a0: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
c2b0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
c2c0: 72 69 67 68 74 22 3e 6c 61 73 74 5f 69 6e 73 65  right">last_inse
c2d0: 72 74 5f 72 6f 77 69 64 28 29 3c 2f 74 64 3e 0a  rt_rowid()</td>.
c2e0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
c2f0: 3e 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49  >Return the ROWI
c300: 44 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f  D of the last ro
c310: 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68  w insert from th
c320: 69 73 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  is.connection to
c330: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
c340: 54 68 69 73 20 69 73 20 74 68 65 20 73 61 6d 65  This is the same
c350: 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
c360: 64 20 62 65 20 72 65 74 75 72 6e 65 64 0a 66 72  d be returned.fr
c370: 6f 6d 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65  om the <b>sqlite
c380: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
c390: 69 64 28 29 3c 2f 62 3e 20 41 50 49 20 66 75 6e  id()</b> API fun
c3a0: 63 74 69 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  ction.</td>.</tr
c3b0: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
c3c0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
c3d0: 72 69 67 68 74 22 3e 6c 65 6e 67 74 68 28 3c 69  right">length(<i
c3e0: 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64  >X</i>)</td>.<td
c3f0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
c400: 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e 67 20  turn the string 
c410: 6c 65 6e 67 74 68 20 6f 66 20 3c 69 3e 58 3c 2f  length of <i>X</
c420: 69 3e 20 69 6e 20 63 68 61 72 61 63 74 65 72 73  i> in characters
c430: 2e 0a 49 66 20 53 51 4c 69 74 65 20 69 73 20 63  ..If SQLite is c
c440: 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 73 75 70  onfigured to sup
c450: 70 6f 72 74 20 55 54 46 2d 38 2c 20 74 68 65 6e  port UTF-8, then
c460: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 55   the number of U
c470: 54 46 2d 38 0a 63 68 61 72 61 63 74 65 72 73 20  TF-8.characters 
c480: 69 73 20 72 65 74 75 72 6e 65 64 2c 20 6e 6f 74  is returned, not
c490: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
c4a0: 79 74 65 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ytes.</td>.</tr>
c4b0: 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
c4c0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
c4d0: 69 67 68 74 22 3e 0a 3c 61 20 6e 61 6d 65 3d 22  ight">.<a name="
c4e0: 6c 69 6b 65 46 75 6e 63 22 3e 3c 2f 61 3e 0a 6c  likeFunc"></a>.l
c4f0: 69 6b 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  ike(<i>X</i>,<i>
c500: 59 3c 2f 69 3e 29 3c 62 72 3e 0a 6c 69 6b 65 28  Y</i>)<br>.like(
c510: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
c520: 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 3c 2f 74 64 3e  >,<i>Z</i>)</td>
c530: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
c540: 22 3e 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ">.This function
c550: 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
c560: 65 6d 65 6e 74 20 74 68 65 20 22 3c 62 3e 58 20  ement the "<b>X 
c570: 4c 49 4b 45 20 59 20 5b 45 53 43 41 50 45 20 5a  LIKE Y [ESCAPE Z
c580: 5d 3c 2f 62 3e 22 0a 73 79 6e 74 61 78 20 6f 66  ]</b>".syntax of
c590: 20 53 51 4c 2e 20 49 66 20 74 68 65 20 6f 70 74   SQL. If the opt
c5a0: 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
c5b0: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
c5c0: 74 68 65 6e 20 74 68 65 0a 75 73 65 72 2d 66 75  then the.user-fu
c5d0: 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65  nction is invoke
c5e0: 64 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67  d with three arg
c5f0: 75 6d 65 6e 74 73 2e 20 4f 74 68 65 72 77 69 73  uments. Otherwis
c600: 65 2c 20 69 74 20 69 73 0a 69 6e 76 6f 6b 65 64  e, it is.invoked
c610: 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65   with two argume
c620: 6e 74 73 20 6f 6e 6c 79 2e 20 54 68 65 20 0a 3c  nts only. The .<
c630: 61 20 68 72 65 66 3d 22 63 61 70 69 33 72 65 66  a href="capi3ref
c640: 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33 5f 63 72  .html#sqlite3_cr
c650: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 3e 0a  eate_function">.
c660: 73 71 6c 69 74 65 5f 63 72 65 61 74 65 5f 66 75  sqlite_create_fu
c670: 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e 20 69 6e 74  nction()</a> int
c680: 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73  erface can be us
c690: 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74  ed to override t
c6a0: 68 69 73 0a 66 75 6e 63 74 69 6f 6e 20 61 6e 64  his.function and
c6b0: 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
c6c0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
c6d0: 20 74 68 65 20 3c 61 0a 68 72 65 66 3d 20 22 23   the <a.href= "#
c6e0: 6c 69 6b 65 22 3e 4c 49 4b 45 3c 2f 61 3e 20 6f  like">LIKE</a> o
c6f0: 70 65 72 61 74 6f 72 2e 20 57 68 65 6e 20 64 6f  perator. When do
c700: 69 6e 67 20 74 68 69 73 2c 20 69 74 20 6d 61 79  ing this, it may
c710: 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 74 6f   be important.to
c720: 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68 20 74   override both t
c730: 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72 65 65  he two and three
c740: 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f   argument versio
c750: 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65 28 29  ns of the like()
c760: 20 0a 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65   .function. Othe
c770: 72 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74  rwise, different
c780: 20 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c   code may be cal
c790: 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  led to implement
c7a0: 20 74 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74   the.LIKE operat
c7b0: 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  or depending on 
c7c0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
c7d0: 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  n ESCAPE clause 
c7e0: 77 61 73 20 0a 73 70 65 63 69 66 69 65 64 2e 3c  was .specified.<
c7f0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
c800: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
c810: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
c820: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 3c  load_extension(<
c830: 69 3e 58 3c 2f 69 3e 29 3c 62 72 3e 0a 6c 6f 61  i>X</i>)<br>.loa
c840: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 3c 69 3e 58  d_extension(<i>X
c850: 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f  </i>,<i>Y</i>)</
c860: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
c870: 74 6f 70 22 3e 4c 6f 61 64 20 53 51 4c 69 74 65  top">Load SQLite
c880: 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f 75 74 20   extensions out 
c890: 6f 66 20 74 68 65 20 73 68 61 72 65 64 20 6c 69  of the shared li
c8a0: 62 72 61 72 79 0a 66 69 6c 65 20 6e 61 6d 65 64  brary.file named
c8b0: 20 3c 69 3e 58 3c 2f 69 3e 20 75 73 69 6e 67 20   <i>X</i> using 
c8c0: 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20  the entry point 
c8d0: 3c 69 3e 59 3c 2f 69 3e 2e 20 20 54 68 65 20 72  <i>Y</i>.  The r
c8e0: 65 73 75 6c 74 0a 69 73 20 61 20 4e 55 4c 4c 2e  esult.is a NULL.
c8f0: 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73    If <i>Y</i> is
c900: 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
c910: 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
c920: 70 6f 69 6e 74 0a 6f 66 20 3c 62 3e 73 71 6c 69  point.of <b>sqli
c930: 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e  te3_extension_in
c940: 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64 2e 20  it</b> is used. 
c950: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72   This function r
c960: 61 69 73 65 73 0a 61 6e 20 65 78 63 65 70 74 69  aises.an excepti
c970: 6f 6e 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  on if the extens
c980: 69 6f 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61  ion fails to loa
c990: 64 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20  d or initialize 
c9a0: 63 6f 72 72 65 63 74 6c 79 2e 0a 3c 2f 74 72 3e  correctly..</tr>
c9b0: 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
c9c0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
c9d0: 69 67 68 74 22 3e 6c 6f 77 65 72 28 3c 69 3e 58  ight">lower(<i>X
c9e0: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
c9f0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75  align="top">Retu
ca00: 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72  rn a copy of str
ca10: 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 6c  ing <i>X</i> wil
ca20: 6c 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73  l all characters
ca30: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f  .converted to lo
ca40: 77 65 72 20 63 61 73 65 2e 20 20 54 68 65 20 43  wer case.  The C
ca50: 20 6c 69 62 72 61 72 79 20 3c 62 3e 74 6f 6c 6f   library <b>tolo
ca60: 77 65 72 28 29 3c 2f 62 3e 20 72 6f 75 74 69 6e  wer()</b> routin
ca70: 65 20 69 73 20 75 73 65 64 0a 66 6f 72 20 74 68  e is used.for th
ca80: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 77 68  e conversion, wh
ca90: 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ich means that t
caa0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67  his function mig
cab0: 68 74 20 6e 6f 74 0a 77 6f 72 6b 20 63 6f 72 72  ht not.work corr
cac0: 65 63 74 6c 79 20 6f 6e 20 55 54 46 2d 38 20 63  ectly on UTF-8 c
cad0: 68 61 72 61 63 74 65 72 73 2e 3c 2f 74 64 3e 0a  haracters.</td>.
cae0: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
caf0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
cb00: 67 6e 3d 22 72 69 67 68 74 22 3e 0a 3c 61 20 6e  gn="right">.<a n
cb10: 61 6d 65 3d 22 6c 74 72 69 6d 46 75 6e 63 22 3e  ame="ltrimFunc">
cb20: 0a 6c 74 72 69 6d 28 3c 69 3e 58 3c 2f 69 3e 29  .ltrim(<i>X</i>)
cb30: 3c 62 72 3e 6c 74 72 69 6d 28 3c 69 3e 58 3c 2f  <br>ltrim(<i>X</
cb40: 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64  i>,<i>Y</i>)</td
cb50: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
cb60: 70 22 3e 52 65 74 75 72 6e 20 61 20 73 74 72 69  p">Return a stri
cb70: 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d  ng formed by rem
cb80: 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c  oving any and al
cb90: 6c 0a 63 68 61 72 61 63 74 65 72 73 20 74 68 61  l.characters tha
cba0: 74 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59  t appear in <i>Y
cbb0: 3c 2f 69 3e 20 66 72 6f 6d 20 74 68 65 20 6c 65  </i> from the le
cbc0: 66 74 20 73 69 64 65 20 6f 66 20 3c 69 3e 58 3c  ft side of <i>X<
cbd0: 2f 69 3e 2e 0a 49 66 20 74 68 65 20 3c 69 3e 59  /i>..If the <i>Y
cbe0: 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73  </i> argument is
cbf0: 20 6f 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73   omitted, spaces
cc00: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c 2f 74   are removed.</t
cc10: 64 3e 0a 3c 2f 74 72 3e 0a 0a 0a 3c 74 72 3e 0a  d>.</tr>...<tr>.
cc20: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
cc30: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6d   align="right">m
cc40: 61 78 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  ax(<i>X</i>,<i>Y
cc50: 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c  </i>,...)</td>.<
cc60: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
cc70: 52 65 74 75 72 6e 20 74 68 65 20 61 72 67 75 6d  Return the argum
cc80: 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d 61 78  ent with the max
cc90: 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20 41 72 67  imum value.  Arg
cca0: 75 6d 65 6e 74 73 0a 6d 61 79 20 62 65 20 73 74  uments.may be st
ccb0: 72 69 6e 67 73 20 69 6e 20 61 64 64 69 74 69 6f  rings in additio
ccc0: 6e 20 74 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54  n to numbers.  T
ccd0: 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
cce0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
ccf0: 79 20 74 68 65 20 75 73 75 61 6c 20 73 6f 72 74  y the usual sort
cd00: 20 6f 72 64 65 72 2e 20 20 4e 6f 74 65 20 74 68   order.  Note th
cd10: 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20  at <b>max()</b> 
cd20: 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
cd30: 74 69 6f 6e 20 77 68 65 6e 0a 69 74 20 68 61 73  tion when.it has
cd40: 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
cd50: 65 6e 74 73 20 62 75 74 20 63 6f 6e 76 65 72 74  ents but convert
cd60: 73 20 74 6f 20 61 6e 20 61 67 67 72 65 67 61 74  s to an aggregat
cd70: 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 67 69  e function if gi
cd80: 76 65 6e 0a 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  ven.only a singl
cd90: 65 20 61 72 67 75 6d 65 6e 74 2e 3c 2f 74 64 3e  e argument.</td>
cda0: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
cdb0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
cdc0: 69 67 6e 3d 22 72 69 67 68 74 22 3e 6d 69 6e 28  ign="right">min(
cdd0: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
cde0: 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20  >,...)</td>.<td 
cdf0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
ce00: 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  urn the argument
ce10: 20 77 69 74 68 20 74 68 65 20 6d 69 6e 69 6d 75   with the minimu
ce20: 6d 20 76 61 6c 75 65 2e 20 20 41 72 67 75 6d 65  m value.  Argume
ce30: 6e 74 73 0a 6d 61 79 20 62 65 20 73 74 72 69 6e  nts.may be strin
ce40: 67 73 20 69 6e 20 61 64 64 69 74 69 6f 6e 20 74  gs in addition t
ce50: 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54 68 65 20  o numbers.  The 
ce60: 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  minimum value is
ce70: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
ce80: 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72  he usual sort or
ce90: 64 65 72 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  der.  Note that 
cea0: 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20  <b>min()</b> is 
ceb0: 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
cec0: 6e 20 77 68 65 6e 0a 69 74 20 68 61 73 20 32 20  n when.it has 2 
ced0: 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
cee0: 73 20 62 75 74 20 63 6f 6e 76 65 72 74 73 20 74  s but converts t
cef0: 6f 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  o an aggregate f
cf00: 75 6e 63 74 69 6f 6e 20 69 66 20 67 69 76 65 6e  unction if given
cf10: 0a 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61  .only a single a
cf20: 72 67 75 6d 65 6e 74 2e 3c 2f 74 64 3e 0a 3c 2f  rgument.</td>.</
cf30: 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  tr>..<tr>.<td va
cf40: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
cf50: 3d 22 72 69 67 68 74 22 3e 6e 75 6c 6c 69 66 28  ="right">nullif(
cf60: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
cf70: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
cf80: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
cf90: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
cfa0: 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  nt if the argume
cfb0: 6e 74 73 20 61 72 65 20 64 69 66 66 65 72 65 6e  nts are differen
cfc0: 74 2c 20 0a 6f 74 68 65 72 77 69 73 65 20 72 65  t, .otherwise re
cfd0: 74 75 72 6e 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a  turn NULL.</td>.
cfe0: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
cff0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
d000: 67 6e 3d 22 72 69 67 68 74 22 3e 71 75 6f 74 65  gn="right">quote
d010: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
d020: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
d030: 3e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65  >This routine re
d040: 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 77  turns a string w
d050: 68 69 63 68 20 69 73 20 74 68 65 20 76 61 6c 75  hich is the valu
d060: 65 20 6f 66 0a 69 74 73 20 61 72 67 75 6d 65 6e  e of.its argumen
d070: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
d080: 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
d090: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
d0a0: 65 6e 74 2e 0a 53 74 72 69 6e 67 73 20 61 72 65  ent..Strings are
d0b0: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73   surrounded by s
d0c0: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74  ingle-quotes wit
d0d0: 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74  h escapes on int
d0e0: 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 61 73 20  erior quotes.as 
d0f0: 6e 65 65 64 65 64 2e 20 20 42 4c 4f 42 73 20 61  needed.  BLOBs a
d100: 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65  re encoded as he
d110: 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61  xadecimal litera
d120: 6c 73 2e 0a 54 68 65 20 63 75 72 72 65 6e 74 20  ls..The current 
d130: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
d140: 66 20 56 41 43 55 55 4d 20 75 73 65 73 20 74 68  f VACUUM uses th
d150: 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
d160: 65 20 66 75 6e 63 74 69 6f 6e 0a 69 73 20 61 6c  e function.is al
d170: 73 6f 20 75 73 65 66 75 6c 20 77 68 65 6e 20 77  so useful when w
d180: 72 69 74 69 6e 67 20 74 72 69 67 67 65 72 73 20  riting triggers 
d190: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 75 6e 64  to implement und
d1a0: 6f 2f 72 65 64 6f 20 66 75 6e 63 74 69 6f 6e 61  o/redo functiona
d1b0: 6c 69 74 79 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72  lity..</td>.</tr
d1c0: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
d1d0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
d1e0: 72 69 67 68 74 22 3e 72 61 6e 64 6f 6d 28 2a 29  right">random(*)
d1f0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d200: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20  ="top">Return a 
d210: 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e  pseudo-random in
d220: 74 65 67 65 72 0a 62 65 74 77 65 65 6e 20 2d 39  teger.between -9
d230: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
d240: 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30  08 and +92233720
d250: 33 36 38 35 34 37 37 35 38 30 37 2e 3c 2f 74 64  36854775807.</td
d260: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
d270: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
d280: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 0a 3c 61  lign="right">.<a
d290: 20 6e 61 6d 65 3d 22 72 65 70 6c 61 63 65 46 75   name="replaceFu
d2a0: 6e 63 22 3e 0a 72 65 70 6c 61 63 65 28 3c 69 3e  nc">.replace(<i>
d2b0: 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 3c  X</i>,<i>Y</i>,<
d2c0: 69 3e 5a 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>Z</i>)</td>.<t
d2d0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
d2e0: 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66  eturn a string f
d2f0: 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74  ormed by substit
d300: 75 74 69 6e 67 20 73 74 72 69 6e 67 20 3c 69 3e  uting string <i>
d310: 5a 3c 2f 69 3e 20 66 6f 72 0a 65 76 65 72 79 20  Z</i> for.every 
d320: 6f 63 63 75 72 72 61 6e 63 65 20 6f 66 20 73 74  occurrance of st
d330: 72 69 6e 67 20 3c 69 3e 59 3c 2f 69 3e 20 69 6e  ring <i>Y</i> in
d340: 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e   string <i>X</i>
d350: 2e 20 20 54 68 65 20 42 49 4e 41 52 59 0a 63 6f  .  The BINARY.co
d360: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d370: 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d   is used for com
d380: 70 61 72 69 73 6f 6e 73 2e 3c 2f 74 64 3e 0a 3c  parisons.</td>.<
d390: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
d3a0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
d3b0: 6e 3d 22 72 69 67 68 74 22 3e 0a 3c 61 20 6e 61  n="right">.<a na
d3c0: 6d 65 3d 22 72 61 6e 64 6f 6d 62 6c 6f 62 46 75  me="randomblobFu
d3d0: 6e 63 22 3e 0a 72 61 6e 64 6f 6d 62 6c 6f 62 28  nc">.randomblob(
d3e0: 3c 69 3e 4e 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>N</i>)</td>.<
d3f0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
d400: 52 65 74 75 72 6e 20 61 20 3c 69 3e 4e 3c 2f 69  Return a <i>N</i
d410: 3e 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74  >-byte blob cont
d420: 61 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61  aining pseudo-ra
d430: 6e 64 6f 6d 20 62 79 74 65 73 2e 0a 3c 69 3e 4e  ndom bytes..<i>N
d440: 3c 2f 69 3e 20 73 68 6f 75 6c 64 20 62 65 20 61  </i> should be a
d450: 20 70 6f 73 74 69 76 65 20 69 6e 74 65 67 65 72   postive integer
d460: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
d470: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
d480: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
d490: 22 3e 72 6f 75 6e 64 28 3c 69 3e 58 3c 2f 69 3e  ">round(<i>X</i>
d4a0: 29 3c 62 72 3e 72 6f 75 6e 64 28 3c 69 3e 58 3c  )<br>round(<i>X<
d4b0: 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74  /i>,<i>Y</i>)</t
d4c0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
d4d0: 6f 70 22 3e 52 6f 75 6e 64 20 6f 66 66 20 74 68  op">Round off th
d4e0: 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58 3c 2f 69  e number <i>X</i
d4f0: 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e 20 64 69  > to <i>Y</i> di
d500: 67 69 74 73 20 74 6f 20 74 68 65 0a 72 69 67 68  gits to the.righ
d510: 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c  t of the decimal
d520: 20 70 6f 69 6e 74 2e 20 20 49 66 20 74 68 65 20   point.  If the 
d530: 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e  <i>Y</i> argumen
d540: 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 30 20  t is omitted, 0 
d550: 69 73 20 0a 61 73 73 75 6d 65 64 2e 3c 2f 74 64  is .assumed.</td
d560: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
d570: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
d580: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 0a 3c 61  lign="right">.<a
d590: 20 6e 61 6d 65 3d 22 72 74 72 69 6d 46 75 6e 63   name="rtrimFunc
d5a0: 22 3e 0a 72 74 72 69 6d 28 3c 69 3e 58 3c 2f 69  ">.rtrim(<i>X</i
d5b0: 3e 29 3c 62 72 3e 72 74 72 69 6d 28 3c 69 3e 58  >)<br>rtrim(<i>X
d5c0: 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f  </i>,<i>Y</i>)</
d5d0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
d5e0: 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 73 74  top">Return a st
d5f0: 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
d600: 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20  emoving any and 
d610: 61 6c 6c 0a 63 68 61 72 61 63 74 65 72 73 20 74  all.characters t
d620: 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 3c 69  hat appear in <i
d630: 3e 59 3c 2f 69 3e 20 66 72 6f 6d 20 74 68 65 20  >Y</i> from the 
d640: 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 3c 69  right side of <i
d650: 3e 58 3c 2f 69 3e 2e 0a 49 66 20 74 68 65 20 3c  >X</i>..If the <
d660: 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74  i>Y</i> argument
d670: 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 73 70 61   is omitted, spa
d680: 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ces are removed.
d690: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
d6a0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
d6b0: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
d6c0: 3e 73 6f 75 6e 64 65 78 28 3c 69 3e 58 3c 2f 69  >soundex(<i>X</i
d6d0: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
d6e0: 67 6e 3d 22 74 6f 70 22 3e 43 6f 6d 70 75 74 65  gn="top">Compute
d6f0: 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63   the soundex enc
d700: 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72  oding of the str
d710: 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 54 68  ing <i>X</i>..Th
d720: 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20  e string "?000" 
d730: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
d740: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e  he argument is N
d750: 55 4c 4c 2e 0a 54 68 69 73 20 66 75 6e 63 74 69  ULL..This functi
d760: 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  on is omitted fr
d770: 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65 66  om SQLite by def
d780: 61 75 6c 74 2e 0a 49 74 20 69 73 20 6f 6e 6c 79  ault..It is only
d790: 20 61 76 61 69 6c 61 62 6c 65 20 74 68 65 20 2d   available the -
d7a0: 44 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 3d  DSQLITE_SOUNDEX=
d7b0: 31 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f  1 compiler optio
d7c0: 6e 0a 69 73 20 75 73 65 64 20 77 68 65 6e 20 53  n.is used when S
d7d0: 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 3c  QLite is built.<
d7e0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
d7f0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
d800: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
d810: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 2a  sqlite_version(*
d820: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
d830: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
d840: 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e  he version strin
d850: 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  g for the SQLite
d860: 20 6c 69 62 72 61 72 79 0a 74 68 61 74 20 69 73   library.that is
d870: 20 72 75 6e 6e 69 6e 67 2e 20 20 45 78 61 6d 70   running.  Examp
d880: 6c 65 3a 20 20 22 32 2e 38 2e 30 22 3c 2f 74 64  le:  "2.8.0"</td
d890: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
d8a0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
d8b0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 75 62  lign="right">sub
d8c0: 73 74 72 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  str(<i>X</i>,<i>
d8d0: 59 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 3c  Y</i>,<i>Z</i>)<
d8e0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
d8f0: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 73  "top">Return a s
d900: 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75  ubstring of inpu
d910: 74 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69  t string <i>X</i
d920: 3e 20 74 68 61 74 20 62 65 67 69 6e 73 0a 77 69  > that begins.wi
d930: 74 68 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d  th the <i>Y</i>-
d940: 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64  th character and
d950: 20 77 68 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f   which is <i>Z</
d960: 69 3e 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  i> characters lo
d970: 6e 67 2e 0a 54 68 65 20 6c 65 66 74 2d 6d 6f 73  ng..The left-mos
d980: 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 3c  t character of <
d990: 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 75 6d 62 65  i>X</i> is numbe
d9a0: 72 20 31 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69  r 1.  If <i>Y</i
d9b0: 3e 20 69 73 20 6e 65 67 61 74 69 76 65 0a 74 68  > is negative.th
d9c0: 65 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  e the first char
d9d0: 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62  acter of the sub
d9e0: 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20  string is found 
d9f0: 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d  by counting from
da00: 20 74 68 65 0a 72 69 67 68 74 20 72 61 74 68 65   the.right rathe
da10: 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e  r than the left.
da20: 20 20 49 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 73    If <i>X</i> is
da30: 20 73 74 72 69 6e 67 0a 74 68 65 6e 20 63 68 61   string.then cha
da40: 72 61 63 74 65 72 73 20 69 6e 64 69 63 65 73 20  racters indices 
da50: 72 65 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20  refer to actual 
da60: 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 73  UTF-8 characters
da70: 2e 20 20 49 66 0a 3c 69 3e 58 3c 2f 69 3e 20 69  .  If.<i>X</i> i
da80: 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68  s a BLOB then th
da90: 65 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  e indices refer 
daa0: 74 6f 20 62 79 74 65 73 2e 3c 2f 74 64 3e 0a 3c  to bytes.</td>.<
dab0: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
dac0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
dad0: 6e 3d 22 72 69 67 68 74 22 3e 0a 3c 61 20 6e 61  n="right">.<a na
dae0: 6d 65 3d 22 74 72 69 6d 46 75 6e 63 22 3e 0a 74  me="trimFunc">.t
daf0: 72 69 6d 28 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72  rim(<i>X</i>)<br
db00: 3e 74 72 69 6d 28 3c 69 3e 58 3c 2f 69 3e 2c 3c  >trim(<i>X</i>,<
db10: 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>Y</i>)</td>.<t
db20: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
db30: 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66  eturn a string f
db40: 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
db50: 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 63 68  g any and all.ch
db60: 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
db70: 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c 2f 69 3e  pear in <i>Y</i>
db80: 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20   from both ends 
db90: 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 49 66 20  of <i>X</i>..If 
dba0: 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67  the <i>Y</i> arg
dbb0: 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
dbc0: 2c 20 73 70 61 63 65 73 20 61 72 65 20 72 65 6d  , spaces are rem
dbd0: 6f 76 65 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  oved.</td>.</tr>
dbe0: 0a 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  ...<tr>.<td vali
dbf0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
dc00: 72 69 67 68 74 22 3e 74 79 70 65 6f 66 28 3c 69  right">typeof(<i
dc10: 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64  >X</i>)</td>.<td
dc20: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
dc30: 74 75 72 6e 20 74 68 65 20 74 79 70 65 20 6f 66  turn the type of
dc40: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
dc50: 3c 69 3e 58 3c 2f 69 3e 2e 20 20 54 68 65 20 6f  <i>X</i>.  The o
dc60: 6e 6c 79 20 0a 72 65 74 75 72 6e 20 76 61 6c 75  nly .return valu
dc70: 65 73 20 61 72 65 20 22 6e 75 6c 6c 22 2c 20 22  es are "null", "
dc80: 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22  integer", "real"
dc90: 2c 20 22 74 65 78 74 22 2c 20 61 6e 64 20 22 62  , "text", and "b
dca0: 6c 6f 62 22 2e 0a 53 51 4c 69 74 65 27 73 20 74  lob"..SQLite's t
dcb0: 79 70 65 20 68 61 6e 64 6c 69 6e 67 20 69 73 20  ype handling is 
dcc0: 0a 65 78 70 6c 61 69 6e 65 64 20 69 6e 20 3c 61  .explained in <a
dcd0: 20 68 72 65 66 3d 22 64 61 74 61 74 79 70 65 33   href="datatype3
dce0: 2e 68 74 6d 6c 22 3e 44 61 74 61 74 79 70 65 73  .html">Datatypes
dcf0: 20 69 6e 20 53 51 4c 69 74 65 20 56 65 72 73 69   in SQLite Versi
dd00: 6f 6e 20 33 3c 2f 61 3e 2e 3c 2f 74 64 3e 0a 3c  on 3</a>.</td>.<
dd10: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
dd20: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
dd30: 6e 3d 22 72 69 67 68 74 22 3e 75 70 70 65 72 28  n="right">upper(
dd40: 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>X</i>)</td>.<
dd50: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
dd60: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
dd70: 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 3c 69   input string <i
dd80: 3e 58 3c 2f 69 3e 20 63 6f 6e 76 65 72 74 65 64  >X</i> converted
dd90: 20 74 6f 20 61 6c 6c 0a 75 70 70 65 72 2d 63 61   to all.upper-ca
dda0: 73 65 20 6c 65 74 74 65 72 73 2e 20 20 54 68 65  se letters.  The
ddb0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
ddc0: 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  of this function
ddd0: 20 75 73 65 73 20 74 68 65 20 43 20 6c 69 62 72   uses the C libr
dde0: 61 72 79 0a 72 6f 75 74 69 6e 65 20 3c 62 3e 74  ary.routine <b>t
ddf0: 6f 75 70 70 65 72 28 29 3c 2f 62 3e 20 77 68 69  oupper()</b> whi
de00: 63 68 20 6d 65 61 6e 73 20 69 74 20 6d 61 79 20  ch means it may 
de10: 6e 6f 74 20 77 6f 72 6b 20 63 6f 72 72 65 63 74  not work correct
de20: 6c 79 20 6f 6e 20 0a 55 54 46 2d 38 20 73 74 72  ly on .UTF-8 str
de30: 69 6e 67 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ings.</td>.</tr>
de40: 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 62 3e 44 61  .</table>..<b>Da
de50: 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63  te And Time Func
de60: 74 69 6f 6e 73 3c 2f 62 3e 0a 0a 3c 70 3e 44 61  tions</b>..<p>Da
de70: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
de80: 74 69 6f 6e 73 20 61 72 65 20 64 6f 63 75 6d 65  tions are docume
de90: 6e 74 65 64 20 69 6e 20 74 68 65 20 0a 3c 61 20  nted in the .<a 
dea0: 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77  href="http://www
deb0: 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 63 76 73 74  .sqlite.org/cvst
dec0: 72 61 63 2f 77 69 6b 69 3f 70 3d 44 61 74 65 41  rac/wiki?p=DateA
ded0: 6e 64 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 22  ndTimeFunctions"
dee0: 3e 0a 53 51 4c 69 74 65 20 57 69 6b 69 3c 2f 61  >.SQLite Wiki</a
def0: 3e 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65 3d  >.</p>..<a name=
df00: 22 61 67 67 72 65 67 61 74 65 66 75 6e 63 74 69  "aggregatefuncti
df10: 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 62 3e 41 67 67  ons"></a>.<b>Agg
df20: 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73  regate Functions
df30: 3c 2f 62 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67  </b>..<p>.The ag
df40: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
df50: 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
df60: 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
df70: 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f  efault.  Additio
df80: 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75  nal.aggregate fu
df90: 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
dfa0: 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65  in C may be adde
dfb0: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 3c 61 20  d using the .<a 
dfc0: 68 72 65 66 3d 22 63 61 70 69 33 72 65 66 2e 68  href="capi3ref.h
dfd0: 74 6d 6c 23 73 71 6c 69 74 65 33 5f 63 72 65 61  tml#sqlite3_crea
dfe0: 74 65 5f 66 75 6e 63 74 69 6f 6e 22 3e 73 71 6c  te_function">sql
dff0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
e000: 74 69 6f 6e 28 29 3c 2f 61 3e 0a 41 50 49 2e 3c  tion()</a>.API.<
e010: 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 61 6e 79 20  /p>..<p>.In any 
e020: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
e030: 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20  on that takes a 
e040: 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c  single argument,
e050: 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63   that argument.c
e060: 61 6e 20 62 65 20 70 72 65 63 65 65 64 65 64 20  an be preceeded 
e070: 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44  by the keyword D
e080: 49 53 54 49 4e 43 54 2e 20 20 49 6e 20 73 75 63  ISTINCT.  In suc
e090: 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61  h cases, duplica
e0a0: 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  te.elements are 
e0b0: 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20  filtered before 
e0c0: 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74  being passed int
e0d0: 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  o the aggregate 
e0e0: 66 75 6e 63 74 69 6f 6e 2e 0a 46 6f 72 20 65 78  function..For ex
e0f0: 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74  ample, the funct
e100: 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69  ion "count(disti
e110: 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74  nct X)" will ret
e120: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  urn the number.o
e130: 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65  f distinct value
e140: 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e  s of column X in
e150: 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74  stead of the tot
e160: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  al number of non
e170: 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20  -null.values in 
e180: 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a  column X..</p>..
e190: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
e1a0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 20 63  cellpadding=10 c
e1b0: 6c 61 73 73 3d 22 70 64 66 5f 66 75 6e 63 74 69  lass="pdf_functi
e1c0: 6f 6e 73 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  ons">.<tr>.<td v
e1d0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
e1e0: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
e1f0: 31 32 30 3e 61 76 67 28 3c 69 3e 58 3c 2f 69 3e  120>avg(<i>X</i>
e200: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
e210: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
e220: 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75 65  he average value
e230: 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   of all non-NULL
e240: 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e   <i>X</i> within
e250: 20 61 0a 67 72 6f 75 70 2e 20 20 53 74 72 69 6e   a.group.  Strin
e260: 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65  g and BLOB value
e270: 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f  s that do not lo
e280: 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20  ok like numbers 
e290: 61 72 65 0a 69 6e 74 65 72 70 72 65 74 65 64 20  are.interpreted 
e2a0: 61 73 20 30 2e 0a 54 68 65 20 72 65 73 75 6c 74  as 0..The result
e2b0: 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77   of avg() is alw
e2c0: 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
e2d0: 6f 69 6e 74 20 76 61 6c 75 65 20 65 76 65 6e 20  oint value even 
e2e0: 69 66 20 61 6c 6c 0a 69 6e 70 75 74 73 20 61 72  if all.inputs ar
e2f0: 65 20 69 6e 74 65 67 65 72 73 2e 20 3c 2f 70 3e  e integers. </p>
e300: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
e310: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
e320: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
e330: 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c 2f 69 3e 29  >count(<i>X</i>)
e340: 3c 62 72 3e 63 6f 75 6e 74 28 2a 29 3c 2f 74 64  <br>count(*)</td
e350: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
e360: 70 22 3e 54 68 65 20 66 69 72 73 74 20 66 6f 72  p">The first for
e370: 6d 20 72 65 74 75 72 6e 20 61 20 63 6f 75 6e 74  m return a count
e380: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
e390: 66 20 74 69 6d 65 73 0a 74 68 61 74 20 3c 69 3e  f times.that <i>
e3a0: 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c  X</i> is not NUL
e3b0: 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 54  L in a group.  T
e3c0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 28  he second form (
e3d0: 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74  with no argument
e3e0: 29 0a 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f  ).returns the to
e3f0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
e400: 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
e410: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
e420: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
e430: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
e440: 3e 6d 61 78 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f  >max(<i>X</i>)</
e450: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
e460: 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20  top">Return the 
e470: 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66  maximum value of
e480: 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
e490: 68 65 20 67 72 6f 75 70 2e 0a 54 68 65 20 75 73  he group..The us
e4a0: 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20 69  ual sort order i
e4b0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
e4c0: 69 6e 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 2e  ine the maximum.
e4d0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
e4e0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
e4f0: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
e500: 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f  >min(<i>X</i>)</
e510: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
e520: 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20  top">Return the 
e530: 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c  minimum non-NULL
e540: 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
e550: 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
e560: 70 2e 0a 54 68 65 20 75 73 75 61 6c 20 73 6f 72  p..The usual sor
e570: 74 20 6f 72 64 65 72 20 69 73 20 75 73 65 64 20  t order is used 
e580: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
e590: 20 6d 69 6e 69 6d 75 6d 2e 20 20 4e 55 4c 4c 20   minimum.  NULL 
e5a0: 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64  is only returned
e5b0: 0a 69 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69  .if all values i
e5c0: 6e 20 74 68 65 20 67 72 6f 75 70 20 61 72 65 20  n the group are 
e5d0: 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  NULL.</td>.</tr>
e5e0: 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
e5f0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
e600: 69 67 68 74 22 3e 73 75 6d 28 3c 69 3e 58 3c 2f  ight">sum(<i>X</
e610: 69 3e 29 3c 62 72 3e 74 6f 74 61 6c 28 3c 69 3e  i>)<br>total(<i>
e620: 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20  X</i>)</td>.<td 
e630: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
e640: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
e650: 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e  sum of all non-N
e660: 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  ULL values in th
e670: 65 20 67 72 6f 75 70 2e 0a 20 20 20 49 66 20 74  e group..   If t
e680: 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d  here are no non-
e690: 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20  NULL input rows 
e6a0: 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
e6b0: 6e 73 0a 20 20 20 4e 55 4c 4c 20 62 75 74 20 74  ns.   NULL but t
e6c0: 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20 30  otal() returns 0
e6d0: 2e 30 2e 0a 20 20 20 4e 55 4c 4c 20 69 73 20 6e  .0..   NULL is n
e6e0: 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65  ot normally a he
e6f0: 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72  lpful result for
e700: 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72   the sum of no r
e710: 6f 77 73 0a 20 20 20 62 75 74 20 74 68 65 20 53  ows.   but the S
e720: 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71 75  QL standard requ
e730: 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74  ires it and most
e740: 20 6f 74 68 65 72 0a 20 20 20 53 51 4c 20 64 61   other.   SQL da
e750: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
e760: 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74  mplement sum() t
e770: 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74  hat way so SQLit
e780: 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65  e does it in the
e790: 0a 20 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20  .   same way in 
e7a0: 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70  order to be comp
e7b0: 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f  atible.   The no
e7c0: 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c  n-standard total
e7d0: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 69  () function.   i
e7e0: 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  s provided as a 
e7f0: 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74  convenient way t
e800: 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68  o work around th
e810: 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65  is design proble
e820: 6d 0a 20 20 20 69 6e 20 74 68 65 20 53 51 4c 20  m.   in the SQL 
e830: 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20  language.</p>.. 
e840: 20 20 3c 70 3e 54 68 65 20 72 65 73 75 6c 74 20    <p>The result 
e850: 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c  of total() is al
e860: 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
e870: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 20  point value..   
e880: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75  The result of su
e890: 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65  m() is an intege
e8a0: 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e  r value if all n
e8b0: 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61  on-NULL inputs a
e8c0: 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 20  re integers..   
e8d0: 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20  If any input to 
e8e0: 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72  sum() is neither
e8f0: 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61   an integer or a
e900: 20 4e 55 4c 4c 0a 20 20 20 74 68 65 6e 20 73 75   NULL.   then su
e910: 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66 6c  m() returns a fl
e920: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
e930: 75 65 0a 20 20 20 77 68 69 63 68 20 6d 69 67 68  ue.   which migh
e940: 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d  t be an approxim
e950: 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75  ation to the tru
e960: 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 20 3c  e sum.</p>..   <
e970: 70 3e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72  p>Sum() will thr
e980: 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f  ow an "integer o
e990: 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69  verflow" excepti
e9a0: 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73  on if all inputs
e9b0: 0a 20 20 20 61 72 65 20 69 6e 74 65 67 65 72 73  .   are integers
e9c0: 20 6f 72 20 4e 55 4c 4c 0a 20 20 20 61 6e 64 20   or NULL.   and 
e9d0: 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
e9e0: 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e  low occurs at an
e9f0: 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74  y point during t
ea00: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a  he computation..
ea10: 20 20 20 54 6f 74 61 6c 28 29 20 6e 65 76 65 72     Total() never
ea20: 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70   throws an excep
ea30: 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f 74 72 3e 0a  tion.</p>.</tr>.
ea40: 3c 2f 74 61 62 6c 65 3e 0a 7d 0a 0a 0a 53 65 63  </table>.}...Sec
ea50: 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65  tion INSERT inse
ea60: 72 74 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  rt..Syntax {sql-
ea70: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 49 4e 53  statement} {.INS
ea80: 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63  ERT [OR <conflic
ea90: 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49 4e  t-algorithm>] IN
eaa0: 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  TO [<database-na
eab0: 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
eac0: 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c 69  me> [(<column-li
ead0: 73 74 3e 29 5d 20 56 41 4c 55 45 53 28 3c 76 61  st>)] VALUES(<va
eae0: 6c 75 65 2d 6c 69 73 74 3e 29 20 7c 0a 49 4e 53  lue-list>) |.INS
eaf0: 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63  ERT [OR <conflic
eb00: 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49 4e  t-algorithm>] IN
eb10: 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  TO [<database-na
eb20: 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
eb30: 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c 69  me> [(<column-li
eb40: 73 74 3e 29 5d 20 3c 73 65 6c 65 63 74 2d 73 74  st>)] <select-st
eb50: 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73  atement>.}..puts
eb60: 20 7b 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54   {.<p>The INSERT
eb70: 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73   statement comes
eb80: 20 69 6e 20 74 77 6f 20 62 61 73 69 63 20 66 6f   in two basic fo
eb90: 72 6d 73 2e 20 20 54 68 65 20 66 69 72 73 74 20  rms.  The first 
eba0: 66 6f 72 6d 0a 28 77 69 74 68 20 74 68 65 20 22  form.(with the "
ebb0: 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29  VALUES" keyword)
ebc0: 20 63 72 65 61 74 65 73 20 61 20 73 69 6e 67 6c   creates a singl
ebd0: 65 20 6e 65 77 20 72 6f 77 20 69 6e 20 61 6e 20  e new row in an 
ebe0: 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a  existing table..
ebf0: 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73  If no column-lis
ec00: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74  t is specified t
ec10: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
ec20: 66 20 76 61 6c 75 65 73 20 6d 75 73 74 0a 62 65  f values must.be
ec30: 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
ec40: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
ec50: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
ec60: 20 20 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69    If a column-li
ec70: 73 74 0a 69 73 20 73 70 65 63 69 66 69 65 64 2c  st.is specified,
ec80: 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
ec90: 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74 20   of values must 
eca0: 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72  match the number
ecb0: 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f   of.specified co
ecc0: 6c 75 6d 6e 73 2e 20 20 43 6f 6c 75 6d 6e 73 20  lumns.  Columns 
ecd0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
ece0: 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20  t do not appear 
ecf0: 69 6e 20 74 68 65 0a 63 6f 6c 75 6d 6e 20 6c 69  in the.column li
ed00: 73 74 20 61 72 65 20 66 69 6c 6c 65 64 20 77 69  st are filled wi
ed10: 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  th the default v
ed20: 61 6c 75 65 2c 20 6f 72 20 77 69 74 68 20 4e 55  alue, or with NU
ed30: 4c 4c 20 69 66 20 6e 6f 74 0a 64 65 66 61 75 6c  LL if not.defaul
ed40: 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69  t value is speci
ed50: 66 69 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  fied..</p>..<p>T
ed60: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
ed70: 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
ed80: 74 65 6d 65 6e 74 20 74 61 6b 65 73 20 69 74 20  tement takes it 
ed90: 64 61 74 61 20 66 72 6f 6d 20 61 0a 53 45 4c 45  data from a.SELE
eda0: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
edb0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
edc0: 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
edd0: 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  lt of the.SELECT
ede0: 20 6d 75 73 74 20 65 78 61 63 74 6c 79 20 6d 61   must exactly ma
edf0: 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
ee00: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
ee10: 20 74 61 62 6c 65 20 69 66 0a 6e 6f 20 63 6f 6c   table if.no col
ee20: 75 6d 6e 20 6c 69 73 74 20 69 73 20 73 70 65 63  umn list is spec
ee30: 69 66 69 65 64 2c 20 6f 72 20 69 74 20 6d 75 73  ified, or it mus
ee40: 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  t match the numb
ee50: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 6e 61  er of columns.na
ee60: 6d 65 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  me in the column
ee70: 20 6c 69 73 74 2e 20 20 41 20 6e 65 77 20 65 6e   list.  A new en
ee80: 74 72 79 20 69 73 20 6d 61 64 65 20 69 6e 20 74  try is made in t
ee90: 68 65 20 74 61 62 6c 65 0a 66 6f 72 20 65 76 65  he table.for eve
eea0: 72 79 20 72 6f 77 20 6f 66 20 74 68 65 20 53 45  ry row of the SE
eeb0: 4c 45 43 54 20 72 65 73 75 6c 74 2e 20 20 54 68  LECT result.  Th
eec0: 65 20 53 45 4c 45 43 54 20 6d 61 79 20 62 65 20  e SELECT may be 
eed0: 73 69 6d 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75  simple.or compou
eee0: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  nd.</p>..<p>The 
eef0: 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
ef00: 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
ef10: 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
ef20: 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
ef30: 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
ef40: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
ef50: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
ef60: 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20  use during this 
ef70: 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65  one command..See
ef80: 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74   the section tit
ef90: 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f  led.<a href="#co
efa0: 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c  nflict">ON CONFL
efb0: 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69  ICT</a> for addi
efc0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
efd0: 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62  on..For compatib
efe0: 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c  ility with MySQL
eff0: 2c 20 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c  , the parser all
f000: 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74  ows the use of t
f010: 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72  he.single keywor
f020: 64 20 3c 61 20 68 72 65 66 3d 22 23 72 65 70 6c  d <a href="#repl
f030: 61 63 65 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e  ace">REPLACE</a>
f040: 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
f050: 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c   "INSERT OR REPL
f060: 41 43 45 22 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 0a 53  ACE"..</p>.}...S
f070: 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c  ection {ON CONFL
f080: 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66  ICT clause} conf
f090: 6c 69 63 74 0a 0a 53 79 6e 74 61 78 20 7b 63 6f  lict..Syntax {co
f0a0: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 7d 20 7b  nflict-clause} {
f0b0: 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 3c 63 6f  .ON CONFLICT <co
f0c0: 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d  nflict-algorithm
f0d0: 3e 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74 2d 61 6c  >.} {conflict-al
f0e0: 67 6f 72 69 74 68 6d 7d 20 7b 0a 52 4f 4c 4c 42  gorithm} {.ROLLB
f0f0: 41 43 4b 20 7c 20 41 42 4f 52 54 20 7c 20 46 41  ACK | ABORT | FA
f100: 49 4c 20 7c 20 49 47 4e 4f 52 45 20 7c 20 52 45  IL | IGNORE | RE
f110: 50 4c 41 43 45 0a 7d 0a 0a 70 75 74 73 20 7b 0a  PLACE.}..puts {.
f120: 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
f130: 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  CT clause is not
f140: 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c 20   a separate SQL 
f150: 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20  command.  It is 
f160: 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63  a.non-standard c
f170: 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20 61  lause that can a
f180: 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74  ppear in many ot
f190: 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  her SQL commands
f1a0: 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69 74  ..It is given it
f1b0: 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e  s own section in
f1c0: 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62   this document b
f1d0: 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
f1e0: 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72  .part of standar
f1f0: 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66  d SQL and theref
f200: 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ore might not be
f210: 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a   familiar.</p>..
f220: 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f  <p>The syntax fo
f230: 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  r the ON CONFLIC
f240: 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20 73  T clause is as s
f250: 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74  hown above for.t
f260: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
f270: 63 6f 6d 6d 61 6e 64 2e 20 20 46 6f 72 20 74 68  command.  For th
f280: 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44  e INSERT and.UPD
f290: 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68  ATE commands, th
f2a0: 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43  e keywords "ON C
f2b0: 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70  ONFLICT" are rep
f2c0: 6c 61 63 65 64 20 62 79 20 22 4f 52 22 2c 20 74  laced by "OR", t
f2d0: 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74 61  o make.the synta
f2e0: 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74 75  x seem more natu
f2f0: 72 61 6c 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ral.  For exampl
f300: 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22 49  e, instead of."I
f310: 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43  NSERT ON CONFLIC
f320: 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61 76  T IGNORE" we hav
f330: 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e  e "INSERT OR IGN
f340: 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72  ORE"..The keywor
f350: 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74 68  ds change but th
f360: 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65  e meaning of the
f370: 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20 73   clause is the s
f380: 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c  ame.either way.<
f390: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  /p>..<p>The ON C
f3a0: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 73  ONFLICT clause s
f3b0: 70 65 63 69 66 69 65 73 20 61 6e 20 61 6c 67 6f  pecifies an algo
f3c0: 72 69 74 68 6d 20 75 73 65 64 20 74 6f 20 72 65  rithm used to re
f3d0: 73 6f 6c 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74  solve.constraint
f3e0: 20 63 6f 6e 66 6c 69 63 74 73 2e 20 20 54 68 65   conflicts.  The
f3f0: 72 65 20 61 72 65 20 66 69 76 65 20 63 68 6f 69  re are five choi
f400: 63 65 73 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20 41  ces: ROLLBACK, A
f410: 42 4f 52 54 2c 0a 46 41 49 4c 2c 20 49 47 4e 4f  BORT,.FAIL, IGNO
f420: 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e  RE, and REPLACE.
f430: 20 54 68 65 20 64 65 66 61 75 6c 74 20 61 6c 67   The default alg
f440: 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
f450: 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74    This.is what t
f460: 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c  hey mean:</p>..<
f470: 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42  dl>.<dt><b>ROLLB
f480: 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACK</b></dt>.<dd
f490: 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74  ><p>When a const
f4a0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
f4b0: 6f 63 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65 64  occurs, an immed
f4c0: 69 61 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f 63  iate ROLLBACK.oc
f4d0: 63 75 72 73 2c 20 74 68 75 73 20 65 6e 64 69 6e  curs, thus endin
f4e0: 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  g the current tr
f4f0: 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ansaction, and t
f500: 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74  he command abort
f510: 73 0a 77 69 74 68 20 61 20 72 65 74 75 72 6e 20  s.with a return 
f520: 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 43  code of SQLITE_C
f530: 4f 4e 53 54 52 41 49 4e 54 2e 20 20 49 66 20 6e  ONSTRAINT.  If n
f540: 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
f550: 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
f560: 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
f570: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
f580: 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
f590: 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
f5a0: 65 6e 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68  en this algorith
f5b0: 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  m works the same
f5c0: 20 61 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c 2f   as ABORT.</p></
f5d0: 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52  dd>..<dt><b>ABOR
f5e0: 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  T</b></dt>.<dd><
f5f0: 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  p>When a constra
f600: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
f610: 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e  curs, the comman
f620: 64 20 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79 20  d backs out.any 
f630: 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 69 74  prior changes it
f640: 20 6d 69 67 68 74 20 68 61 76 65 20 6d 61 64 65   might have made
f650: 20 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68   and aborts with
f660: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 6f   a return code.o
f670: 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  f SQLITE_CONSTRA
f680: 49 4e 54 2e 20 20 42 75 74 20 6e 6f 20 52 4f 4c  INT.  But no ROL
f690: 4c 42 41 43 4b 20 69 73 20 65 78 65 63 75 74 65  LBACK is execute
f6a0: 64 20 73 6f 20 63 68 61 6e 67 65 73 0a 66 72 6f  d so changes.fro
f6b0: 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64 73  m prior commands
f6c0: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
f6d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72 65   transaction.are
f6e0: 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 68 69   preserved.  Thi
f6f0: 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  s is the default
f700: 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c 2f   behavior.</p></
f710: 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c  dd>..<dt><b>FAIL
f720: 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
f730: 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  >When a constrai
f740: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
f750: 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64  urs, the command
f760: 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 0a 72   aborts with a.r
f770: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
f780: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42  E_CONSTRAINT.  B
f790: 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74  ut any changes t
f7a0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  o the database t
f7b0: 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61 6e 64 20  hat.the command 
f7c0: 6d 61 64 65 20 70 72 69 6f 72 20 74 6f 20 65 6e  made prior to en
f7d0: 63 6f 75 6e 74 65 72 69 6e 67 20 74 68 65 20 63  countering the c
f7e0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
f7f0: 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72 76 65  ion.are preserve
f800: 64 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 62 61  d and are not ba
f810: 63 6b 65 64 20 6f 75 74 2e 20 20 46 6f 72 20 65  cked out.  For e
f820: 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50  xample, if an UP
f830: 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65  DATE.statement e
f840: 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e  ncountered a con
f850: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
f860: 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72  n on the 100th r
f870: 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d  ow that.it attem
f880: 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74  pts to update, t
f890: 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39  hen the first 99
f8a0: 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65   row changes are
f8b0: 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63   preserved.but c
f8c0: 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31  hanges to rows 1
f8d0: 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65  00 and beyond ne
f8e0: 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f  ver occur.</p></
f8f0: 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f  dd>..<dt><b>IGNO
f900: 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RE</b></dt>.<dd>
f910: 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72  <p>When a constr
f920: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
f930: 63 63 75 72 73 2c 20 74 68 65 20 6f 6e 65 20 72  ccurs, the one r
f940: 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ow that contains
f950: 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  .the constraint 
f960: 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f 74  violation is not
f970: 20 69 6e 73 65 72 74 65 64 20 6f 72 20 63 68 61   inserted or cha
f980: 6e 67 65 64 2e 20 20 42 75 74 20 74 68 65 20 63  nged.  But the c
f990: 6f 6d 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65 73  ommand.continues
f9a0: 20 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61   executing norma
f9b0: 6c 6c 79 2e 20 20 4f 74 68 65 72 20 72 6f 77 73  lly.  Other rows
f9c0: 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
f9d0: 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63  r the row that.c
f9e0: 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e  ontained the con
f9f0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
fa00: 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  n continue to be
fa10: 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
fa20: 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 20  ated.normally.  
fa30: 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  No error is retu
fa40: 72 6e 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  rned.</p></dd>..
fa50: 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f  <dt><b>REPLACE</
fa60: 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57  b></dt>.<dd><p>W
fa70: 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  hen a UNIQUE con
fa80: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
fa90: 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 70 72  n occurs, the pr
faa0: 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 0a  e-existing rows.
fab0: 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67  that are causing
fac0: 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
fad0: 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
fae0: 6d 6f 76 65 64 20 70 72 69 6f 72 20 74 6f 20 69  moved prior to i
faf0: 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75 70 64 61  nserting.or upda
fb00: 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  ting the current
fb10: 20 72 6f 77 2e 20 20 54 68 75 73 20 74 68 65 20   row.  Thus the 
fb20: 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
fb30: 20 61 6c 77 61 79 73 20 6f 63 63 75 72 73 2e 0a   always occurs..
fb40: 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74  The command cont
fb50: 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67 20  inues executing 
fb60: 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72  normally.  No er
fb70: 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ror is returned.
fb80: 0a 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  .If a NOT NULL c
fb90: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
fba0: 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
fbb0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 72 65  NULL value is re
fbc0: 70 6c 61 63 65 64 0a 62 79 20 74 68 65 20 64 65  placed.by the de
fbd0: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
fbe0: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  that column.  If
fbf0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20   the column has 
fc00: 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65  no default.value
fc10: 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54  , then the ABORT
fc20: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
fc30: 65 64 2e 20 20 49 66 20 61 20 43 48 45 43 4b 20  ed.  If a CHECK 
fc40: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
fc50: 74 69 6f 6e 0a 6f 63 63 75 72 73 20 74 68 65 6e  tion.occurs then
fc60: 20 74 68 65 20 49 47 4e 4f 52 45 20 61 6c 67 6f   the IGNORE algo
fc70: 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
fc80: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 69 73  p>..<p>When this
fc90: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
fca0: 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
fcb0: 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
fcc0: 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
fcd0: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20   constraint, it 
fce0: 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 20  does not invoke 
fcf0: 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 20  delete triggers 
fd00: 6f 6e 20 74 68 6f 73 65 0a 72 6f 77 73 2e 20 20  on those.rows.  
fd10: 54 68 69 73 20 62 65 68 61 76 69 6f 72 20 6d 69  This behavior mi
fd20: 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61 20  ght change in a 
fd30: 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c  future release.<
fd40: 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68  /p>.</dl>..<p>Th
fd50: 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  e algorithm spec
fd60: 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20  ified in the OR 
fd70: 63 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45  clause of a INSE
fd80: 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65  RT or UPDATE.ove
fd90: 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72  rrides any algor
fda0: 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
fdb0: 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
fdc0: 2e 0a 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  ..If no algorith
fdd0: 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
fde0: 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
fdf0: 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
fe00: 75 73 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65 63  used.</p>.}..Sec
fe10: 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69  tion REINDEX rei
fe20: 6e 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73 71  ndex..Syntax {sq
fe30: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 20  l-statement} {. 
fe40: 20 52 45 49 4e 44 45 58 20 3c 63 6f 6c 6c 61 74   REINDEX <collat
fe50: 69 6f 6e 20 6e 61 6d 65 3e 0a 7d 0a 53 79 6e 74  ion name>.}.Synt
fe60: 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e  ax {sql-statemen
fe70: 74 7d 20 7b 0a 20 20 52 45 49 4e 44 45 58 20 5b  t} {.  REINDEX [
fe80: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
fe90: 2e 5d 20 3c 74 61 62 6c 65 2f 69 6e 64 65 78 2d  .] <table/index-
fea0: 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  name>.}..puts {.
feb0: 3c 70 3e 54 68 65 20 52 45 49 4e 44 45 58 20 63  <p>The REINDEX c
fec0: 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
fed0: 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
fee0: 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
fef0: 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
ff00: 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
ff10: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
ff20: 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
ff30: 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
ff40: 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  ed..</p>..<p>In 
ff50: 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d 2c 20  the first form, 
ff60: 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
ff70: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
ff80: 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74  bases that use t
ff90: 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69  he.named collati
ffa0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72 65 20  on sequence are 
ffb0: 72 65 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  recreated. In th
ffc0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69  e second form, i
ffd0: 66 20 0a 3c 69 3e 5b 64 61 74 61 62 61 73 65 2d  f .<i>[database-
ffe0: 6e 61 6d 65 2e 5d 74 61 62 6c 65 2f 69 6e 64 65  name.]table/inde
fff0: 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e 74  x-name</i> ident
10000 69 66 69 65 73 20 61 20 74 61 62 6c 65 2c 20 74  ifies a table, t
10010 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a  hen all indices.
10020 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
10030 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 72 65  the table are re
10040 62 75 69 6c 74 2e 20 49 66 20 61 6e 20 69 6e 64  built. If an ind
10050 65 78 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  ex is identified
10060 2c 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73  , then only.this
10070 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 20   specific index 
10080 69 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72  is deleted and r
10090 65 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a  ecreated..</p>..
100a0 3c 70 3e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  <p>If no <i>data
100b0 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
100c0 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
100d0 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
100e0 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
100f0 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
10100 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
10110 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
10120 2c 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61  , then indices a
10130 73 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74  ssociated.with t
10140 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
10150 75 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72  uence only are r
10160 65 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68  econstructed. Th
10170 69 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79  is ambiguity may
10180 20 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79   be.dispelled by
10190 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69   always specifyi
101a0 6e 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65  ng a <i>database
101b0 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72  -name</i> when r
101c0 65 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63  eindexing a.spec
101d0 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e  ific table or in
101e0 64 65 78 2e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20  dex..}..Section 
101f0 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 0a  REPLACE replace.
10200 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61  .Syntax {sql-sta
10210 74 65 6d 65 6e 74 7d 20 7b 0a 52 45 50 4c 41 43  tement} {.REPLAC
10220 45 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73  E INTO [<databas
10230 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
10240 65 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75  e-name> [( <colu
10250 6d 6e 2d 6c 69 73 74 3e 20 29 5d 20 56 41 4c 55  mn-list> )] VALU
10260 45 53 20 28 20 3c 76 61 6c 75 65 2d 6c 69 73 74  ES ( <value-list
10270 3e 20 29 20 7c 0a 52 45 50 4c 41 43 45 20 49 4e  > ) |.REPLACE IN
10280 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  TO [<database-na
10290 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
102a0 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d 6e 2d 6c  me> [( <column-l
102b0 69 73 74 3e 20 29 5d 20 3c 73 65 6c 65 63 74 2d  ist> )] <select-
102c0 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75  statement>.}..pu
102d0 74 73 20 7b 0a 3c 70 3e 54 68 65 20 52 45 50 4c  ts {.<p>The REPL
102e0 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  ACE command is a
102f0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
10300 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  "INSERT OR REPLA
10310 43 45 22 20 76 61 72 69 61 6e 74 0a 6f 66 20 74  CE" variant.of t
10320 68 65 20 3c 61 20 68 72 65 66 3d 22 23 69 6e 73  he <a href="#ins
10330 65 72 74 22 3e 49 4e 53 45 52 54 3c 2f 61 3e 20  ert">INSERT</a> 
10340 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 61  command.  This a
10350 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
10360 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
10370 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2e 20 20  ty with MySQL.  
10380 53 65 65 20 74 68 65 20 0a 3c 61 20 68 72 65 66  See the .<a href
10390 3d 22 23 69 6e 73 65 72 74 22 3e 49 4e 53 45 52  ="#insert">INSER
103a0 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20 64 6f  T</a> command do
103b0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
103c0 61 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f 72  additional.infor
103d0 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 7d 0a  mation.</p>  .}.
103e0 0a 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54  ..Section SELECT
103f0 20 73 65 6c 65 63 74 0a 0a 53 79 6e 74 61 78 20   select..Syntax 
10400 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
10410 7b 0a 53 45 4c 45 43 54 20 5b 41 4c 4c 20 7c 20  {.SELECT [ALL | 
10420 44 49 53 54 49 4e 43 54 5d 20 3c 72 65 73 75 6c  DISTINCT] <resul
10430 74 3e 20 5b 46 52 4f 4d 20 3c 74 61 62 6c 65 2d  t> [FROM <table-
10440 6c 69 73 74 3e 5d 0a 5b 57 48 45 52 45 20 3c 65  list>].[WHERE <e
10450 78 70 72 3e 5d 0a 5b 47 52 4f 55 50 20 42 59 20  xpr>].[GROUP BY 
10460 3c 65 78 70 72 2d 6c 69 73 74 3e 5d 0a 5b 48 41  <expr-list>].[HA
10470 56 49 4e 47 20 3c 65 78 70 72 3e 5d 0a 5b 3c 63  VING <expr>].[<c
10480 6f 6d 70 6f 75 6e 64 2d 6f 70 3e 20 3c 73 65 6c  ompound-op> <sel
10490 65 63 74 3e 5d 2a 0a 5b 4f 52 44 45 52 20 42 59  ect>]*.[ORDER BY
104a0 20 3c 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74   <sort-expr-list
104b0 3e 5d 0a 5b 4c 49 4d 49 54 20 3c 69 6e 74 65 67  >].[LIMIT <integ
104c0 65 72 3e 20 5b 4c 50 20 4f 46 46 53 45 54 20 7c  er> [LP OFFSET |
104d0 20 2c 20 52 50 20 3c 69 6e 74 65 67 65 72 3e 5d   , RP <integer>]
104e0 5d 0a 7d 20 7b 72 65 73 75 6c 74 7d 20 7b 0a 3c  ].} {result} {.<
104f0 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 3e 20 5b  result-column> [
10500 2c 20 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e  , <result-column
10510 3e 5d 2a 0a 7d 20 7b 72 65 73 75 6c 74 2d 63 6f  >]*.} {result-co
10520 6c 75 6d 6e 7d 20 7b 0a 53 54 41 52 20 7c 20 3c  lumn} {.STAR | <
10530 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 2e 20 53 54  table-name> . ST
10540 41 52 20 7c 20 3c 65 78 70 72 3e 20 5b 20 5b 41  AR | <expr> [ [A
10550 53 5d 20 3c 73 74 72 69 6e 67 3e 20 5d 0a 7d 20  S] <string> ].} 
10560 7b 74 61 62 6c 65 2d 6c 69 73 74 7d 20 7b 0a 3c  {table-list} {.<
10570 74 61 62 6c 65 3e 20 5b 3c 6a 6f 69 6e 2d 6f 70  table> [<join-op
10580 3e 20 3c 74 61 62 6c 65 3e 20 3c 6a 6f 69 6e 2d  > <table> <join-
10590 61 72 67 73 3e 5d 2a 0a 7d 20 7b 74 61 62 6c 65  args>]*.} {table
105a0 7d 20 7b 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  } {.<table-name>
105b0 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 20 7c 0a   [AS <alias>] |.
105c0 28 20 3c 73 65 6c 65 63 74 3e 20 29 20 5b 41 53  ( <select> ) [AS
105d0 20 3c 61 6c 69 61 73 3e 5d 0a 7d 20 7b 6a 6f 69   <alias>].} {joi
105e0 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c 20 5b 4e 41 54  n-op} {., | [NAT
105f0 55 52 41 4c 5d 20 5b 4c 45 46 54 20 7c 20 52 49  URAL] [LEFT | RI
10600 47 48 54 20 7c 20 46 55 4c 4c 5d 20 5b 4f 55 54  GHT | FULL] [OUT
10610 45 52 20 7c 20 49 4e 4e 45 52 20 7c 20 43 52 4f  ER | INNER | CRO
10620 53 53 5d 20 4a 4f 49 4e 0a 7d 20 7b 6a 6f 69 6e  SS] JOIN.} {join
10630 2d 61 72 67 73 7d 20 7b 0a 5b 4f 4e 20 3c 65 78  -args} {.[ON <ex
10640 70 72 3e 5d 20 5b 55 53 49 4e 47 20 28 20 3c 69  pr>] [USING ( <i
10650 64 2d 6c 69 73 74 3e 20 29 5d 0a 7d 20 7b 73 6f  d-list> )].} {so
10660 72 74 2d 65 78 70 72 2d 6c 69 73 74 7d 20 7b 0a  rt-expr-list} {.
10670 3c 65 78 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f 72  <expr> [<sort-or
10680 64 65 72 3e 5d 20 5b 2c 20 3c 65 78 70 72 3e 20  der>] [, <expr> 
10690 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e 5d 5d 2a  [<sort-order>]]*
106a0 0a 7d 20 7b 73 6f 72 74 2d 6f 72 64 65 72 7d 20  .} {sort-order} 
106b0 7b 0a 5b 20 43 4f 4c 4c 41 54 45 20 3c 63 6f 6c  {.[ COLLATE <col
106c0 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 20 5d 20 5b  lation-name> ] [
106d0 20 41 53 43 20 7c 20 44 45 53 43 20 5d 0a 7d 20   ASC | DESC ].} 
106e0 7b 63 6f 6d 70 6f 75 6e 64 5f 6f 70 7d 20 7b 0a  {compound_op} {.
106f0 55 4e 49 4f 4e 20 7c 20 55 4e 49 4f 4e 20 41 4c  UNION | UNION AL
10700 4c 20 7c 20 49 4e 54 45 52 53 45 43 54 20 7c 20  L | INTERSECT | 
10710 45 58 43 45 50 54 0a 7d 0a 0a 70 75 74 73 20 7b  EXCEPT.}..puts {
10720 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
10730 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
10740 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61   to query the da
10750 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73  tabase.  The.res
10760 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  ult of a SELECT 
10770 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  is zero or more 
10780 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65  rows of data whe
10790 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20  re each row.has 
107a0 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f  a fixed number o
107b0 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 20  f columns.  The 
107c0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
107d0 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74 20  s in the.result 
107e0 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  is specified by 
107f0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  the expression l
10800 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20 74  ist in between t
10810 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46 52  he.SELECT and FR
10820 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 6e  OM keywords.  An
10830 79 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72  y arbitrary expr
10840 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  ession can be us
10850 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e 20  ed.as a result. 
10860 20 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70   If a result exp
10870 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a 70 75 74  ression is }.put
10880 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d 20  s "[Operator *] 
10890 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  then all columns
108a0 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61   of all tables a
108b0 72 65 20 73 75 62 73 74 69 74 75 74 65 64 22 0a  re substituted".
108c0 70 75 74 73 20 7b 66 6f 72 20 74 68 61 74 20 6f  puts {for that o
108d0 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ne expression.  
108e0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
108f0 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  n is the name of
10900 7d 0a 70 75 74 73 20 22 61 20 74 61 62 6c 65 20  }.puts "a table 
10910 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70 65  followed by [Ope
10920 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20 74  rator .*] then t
10930 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 6c  he result is all
10940 20 63 6f 6c 75 6d 6e 73 22 0a 70 75 74 73 20 7b   columns".puts {
10950 69 6e 20 74 68 61 74 20 6f 6e 65 20 74 61 62 6c  in that one tabl
10960 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44  e.</p>..<p>The D
10970 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
10980 63 61 75 73 65 73 20 61 20 73 75 62 73 65 74 20  causes a subset 
10990 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 74  of result rows t
109a0 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2c 20 0a  o be returned, .
109b0 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 72 65  in which each re
109c0 73 75 6c 74 20 72 6f 77 20 69 73 20 64 69 66 66  sult row is diff
109d0 65 72 65 6e 74 2e 20 20 4e 55 4c 4c 20 76 61 6c  erent.  NULL val
109e0 75 65 73 20 61 72 65 20 6e 6f 74 20 74 72 65 61  ues are not trea
109f0 74 65 64 20 61 73 20 0a 64 69 73 74 69 6e 63 74  ted as .distinct
10a00 20 66 72 6f 6d 20 65 61 63 68 20 6f 74 68 65 72   from each other
10a10 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62  .  The default b
10a20 65 68 61 76 69 6f 72 20 69 73 20 74 68 61 74 20  ehavior is that 
10a30 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 20  all result rows 
10a40 0a 62 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68  .be returned, wh
10a50 69 63 68 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ich can be made 
10a60 65 78 70 6c 69 63 69 74 20 77 69 74 68 20 74 68  explicit with th
10a70 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f  e keyword ALL.</
10a80 70 3e 0a 0a 3c 70 3e 54 68 65 20 71 75 65 72 79  p>..<p>The query
10a90 20 69 73 20 65 78 65 63 75 74 65 64 20 61 67 61   is executed aga
10aa0 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  inst one or more
10ab0 20 74 61 62 6c 65 73 20 73 70 65 63 69 66 69 65   tables specifie
10ac0 64 20 61 66 74 65 72 0a 74 68 65 20 46 52 4f 4d  d after.the FROM
10ad0 20 6b 65 79 77 6f 72 64 2e 20 20 49 66 20 6d 75   keyword.  If mu
10ae0 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20 6e 61  ltiple tables na
10af0 6d 65 73 20 61 72 65 20 73 65 70 61 72 61 74 65  mes are separate
10b00 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65  d by commas,.the
10b10 6e 20 74 68 65 20 71 75 65 72 79 20 69 73 20 61  n the query is a
10b20 67 61 69 6e 73 74 20 74 68 65 20 63 72 6f 73 73  gainst the cross
10b30 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20 76 61 72   join of the var
10b40 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a 54 68 65  ious tables..The
10b50 20 66 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69   full SQL-92 joi
10b60 6e 20 73 79 6e 74 61 78 20 63 61 6e 20 61 6c 73  n syntax can als
10b70 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 70 65  o be used to spe
10b80 63 69 66 79 20 6a 6f 69 6e 73 2e 0a 41 20 73 75  cify joins..A su
10b90 62 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65 6e  b-query.in paren
10ba0 74 68 65 73 65 73 20 6d 61 79 20 62 65 20 73 75  theses may be su
10bb0 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 61 6e  bstituted for an
10bc0 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  y table name in 
10bd0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  the FROM clause.
10be0 0a 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f 4d  .The entire FROM
10bf0 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 6f   clause may be o
10c00 6d 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63 68  mitted, in which
10c10 20 63 61 73 65 20 74 68 65 20 72 65 73 75 6c 74   case the result
10c20 20 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77   is a.single row
10c30 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74   consisting of t
10c40 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  he values of the
10c50 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
10c60 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 57  ..</p>..<p>The W
10c70 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20  HERE clause can 
10c80 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  be used to limit
10c90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
10ca0 6f 77 73 20 6f 76 65 72 0a 77 68 69 63 68 20 74  ows over.which t
10cb0 68 65 20 71 75 65 72 79 20 6f 70 65 72 61 74 65  he query operate
10cc0 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 47  s.</p>..<p>The G
10cd0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 73 20  ROUP BY clauses 
10ce0 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20 6d 6f  causes one or mo
10cf0 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 72  re rows of the r
10d00 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f 6d 62  esult to.be comb
10d10 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67  ined into a sing
10d20 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74  le row of output
10d30 2e 20 20 54 68 69 73 20 69 73 20 65 73 70 65 63  .  This is espec
10d40 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77 68 65  ially useful.whe
10d50 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  n the result con
10d60 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
10d70 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
10d80 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 0a 74  expressions in.t
10d90 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
10da0 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se do <em>not</e
10db0 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65 78  m> have to be ex
10dc0 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 0a 61  pressions that.a
10dd0 70 70 65 61 72 20 69 6e 20 74 68 65 20 72 65 73  ppear in the res
10de0 75 6c 74 2e 20 20 54 68 65 20 48 41 56 49 4e 47  ult.  The HAVING
10df0 20 63 6c 61 75 73 65 20 69 73 20 73 69 6d 69 6c   clause is simil
10e00 61 72 20 74 6f 20 57 48 45 52 45 20 65 78 63 65  ar to WHERE exce
10e10 70 74 0a 74 68 61 74 20 48 41 56 49 4e 47 20 61  pt.that HAVING a
10e20 70 70 6c 69 65 73 20 61 66 74 65 72 20 67 72 6f  pplies after gro
10e30 75 70 69 6e 67 20 68 61 73 20 6f 63 63 75 72 72  uping has occurr
10e40 65 64 2e 20 20 54 68 65 20 48 41 56 49 4e 47 20  ed.  The HAVING 
10e50 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61 79 20 72  expression.may r
10e60 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20  efer to values, 
10e70 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66  even aggregate f
10e80 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61  unctions, that a
10e90 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65  re not in the re
10ea0 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  sult.</p>..<p>Th
10eb0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
10ec0 65 20 63 61 75 73 65 73 20 74 68 65 20 6f 75 74  e causes the out
10ed0 70 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20 73  put rows to be s
10ee0 6f 72 74 65 64 2e 20 20 0a 54 68 65 20 61 72 67  orted.  .The arg
10ef0 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52 20 42  ument to ORDER B
10f00 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 65  Y is a list of e
10f10 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
10f20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 0a  are used as the.
10f30 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f 72 74  key for the sort
10f40 2e 20 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  .  The expressio
10f50 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74  ns do not have t
10f60 6f 20 62 65 20 70 61 72 74 20 6f 66 20 74 68 65  o be part of the
10f70 0a 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73 69  .result for a si
10f80 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75 74  mple SELECT, but
10f90 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53   in a compound S
10fa0 45 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74 0a  ELECT each sort.
10fb0 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20  expression must 
10fc0 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f 6e  exactly match on
10fd0 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  e of the result 
10fe0 63 6f 6c 75 6d 6e 73 2e 20 20 45 61 63 68 0a 73  columns.  Each.s
10ff0 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ort expression m
11000 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
11010 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 43   followed by a C
11020 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64 20 61  OLLATE keyword a
11030 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  nd.the name of a
11040 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
11050 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f 72 64  ion used for ord
11060 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64 2f 6f  ering text and/o
11070 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43 20 6f  r.keywords ASC o
11080 72 20 44 45 53 43 20 74 6f 20 73 70 65 63 69 66  r DESC to specif
11090 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72  y the sort order
110a0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49  .</p>..<p>The LI
110b0 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65  MIT clause place
110c0 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  s an upper bound
110d0 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
110e0 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
110f0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  in the result.  
11100 41 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54  A negative LIMIT
11110 20 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75 70   indicates no up
11120 70 65 72 20 62 6f 75 6e 64 2e 0a 54 68 65 20 6f  per bound..The o
11130 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66  ptional OFFSET f
11140 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73  ollowing LIMIT s
11150 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61 6e  pecifies how man
11160 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20 61  y.rows to skip a
11170 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
11180 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
11190 74 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  t..In a compound
111a0 20 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d 49   query, the LIMI
111b0 54 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c  T clause may onl
111c0 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 0a  y appear on the.
111d0 66 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74 61  final SELECT sta
111e0 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6c 69 6d 69  tement..The limi
111f0 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  t is applied to 
11200 74 68 65 20 65 6e 74 69 72 65 20 71 75 65 72 79  the entire query
11210 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64 69   not.to the indi
11220 76 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73 74  vidual SELECT st
11230 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68  atement to which
11240 20 69 74 20 69 73 20 61 74 74 61 63 68 65 64 2e   it is attached.
11250 0a 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74 68  .Note that if th
11260 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64  e OFFSET keyword
11270 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
11280 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
11290 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73 20  en the.limit is 
112a0 74 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65 72  the first number
112b0 20 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74 20   and the offset 
112c0 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75  is the second nu
112d0 6d 62 65 72 2e 20 20 49 66 20 61 0a 63 6f 6d 6d  mber.  If a.comm
112e0 61 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61  a is used instea
112f0 64 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54 20  d of the OFFSET 
11300 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68  keyword, then th
11310 65 20 6f 66 66 73 65 74 20 69 73 20 74 68 65 0a  e offset is the.
11320 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64  first number and
11330 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74 68   the limit is th
11340 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e  e second number.
11350 20 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a 63    This seeming.c
11360 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20 69  ontradition is i
11370 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20  ntentional - it 
11380 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74  maximizes compat
11390 69 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65 67  ibility with leg
113a0 61 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73 65  acy.SQL database
113b0 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a   systems..</p>..
113c0 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45  <p>A compound SE
113d0 4c 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20 66  LECT is formed f
113e0 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  rom two or more 
113f0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 63  simple SELECTs c
11400 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65 20  onnected.by one 
11410 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73  of the operators
11420 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c   UNION, UNION AL
11430 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72  L, INTERSECT, or
11440 20 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20 63   EXCEPT.  In.a c
11450 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
11460 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75  all the constitu
11470 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74  ent SELECTs must
11480 20 73 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d   specify the.sam
11490 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  e number of resu
114a0 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65  lt columns.  The
114b0 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61  re may be only a
114c0 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42 59   single ORDER BY
114d0 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65  .clause at the e
114e0 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75  nd of the compou
114f0 6e 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65 20  nd SELECT.  The 
11500 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20  UNION and UNION 
11510 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f  ALL.operators co
11520 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  mbine the result
11530 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 73  s of the SELECTs
11540 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61 6e   to the right an
11550 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73 69  d left into.a si
11560 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e 20  ngle big table. 
11570 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
11580 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e  is that in UNION
11590 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73   all result rows
115a0 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20 77 68  .are distinct wh
115b0 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c  ere in UNION ALL
115c0 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 64 75   there may be du
115d0 70 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49 4e  plicates..The IN
115e0 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72  TERSECT operator
115f0 20 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65 72   takes the inter
11600 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
11610 65 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65  esults of the.le
11620 66 74 20 61 6e 64 20 72 69 67 68 74 20 53 45 4c  ft and right SEL
11630 45 43 54 73 2e 20 20 45 58 43 45 50 54 20 74 61  ECTs.  EXCEPT ta
11640 6b 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  kes the result o
11650 66 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61 66  f left SELECT af
11660 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65  ter.removing the
11670 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
11680 72 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20 57  right SELECT.  W
11690 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
116a0 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f  e SELECTs.are co
116b0 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63  nnected into a c
116c0 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72  ompound, they gr
116d0 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  oup from left to
116e0 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 7d 0a 0a 0a   right.</p>.}...
116f0 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75  Section UPDATE u
11700 70 64 61 74 65 0a 0a 53 79 6e 74 61 78 20 7b 73  pdate..Syntax {s
11710 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
11720 55 50 44 41 54 45 20 5b 20 4f 52 20 3c 63 6f 6e  UPDATE [ OR <con
11730 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e  flict-algorithm>
11740 20 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61   ] [<database-na
11750 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
11760 6d 65 3e 0a 53 45 54 20 3c 61 73 73 69 67 6e 6d  me>.SET <assignm
11770 65 6e 74 3e 20 5b 2c 20 3c 61 73 73 69 67 6e 6d  ent> [, <assignm
11780 65 6e 74 3e 5d 2a 0a 5b 57 48 45 52 45 20 3c 65  ent>]*.[WHERE <e
11790 78 70 72 3e 5d 0a 7d 20 7b 61 73 73 69 67 6e 6d  xpr>].} {assignm
117a0 65 6e 74 7d 20 7b 0a 3c 63 6f 6c 75 6d 6e 2d 6e  ent} {.<column-n
117b0 61 6d 65 3e 20 3d 20 3c 65 78 70 72 3e 0a 7d 0a  ame> = <expr>.}.
117c0 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 55  .puts {.<p>The U
117d0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
117e0 69 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e 67  is used to chang
117f0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 63  e the value of c
11800 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c 65 63  olumns in .selec
11810 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20 74 61  ted rows of a ta
11820 62 6c 65 2e 20 20 45 61 63 68 20 61 73 73 69 67  ble.  Each assig
11830 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50 44 41  nment in an UPDA
11840 54 45 20 73 70 65 63 69 66 69 65 73 0a 61 20 63  TE specifies.a c
11850 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68  olumn name to th
11860 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71  e left of the eq
11870 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 6e  uals sign and an
11880 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65   arbitrary expre
11890 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72 69 67  ssion.to the rig
118a0 68 74 2e 20 20 54 68 65 20 65 78 70 72 65 73 73  ht.  The express
118b0 69 6f 6e 73 20 6d 61 79 20 75 73 65 20 74 68 65  ions may use the
118c0 20 76 61 6c 75 65 73 20 6f 66 20 6f 74 68 65 72   values of other
118d0 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c 20 65 78   columns..All ex
118e0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76  pressions are ev
118f0 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 61  aluated before a
11900 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61  ny assignments a
11910 72 65 20 6d 61 64 65 2e 0a 41 20 57 48 45 52 45  re made..A WHERE
11920 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75   clause can be u
11930 73 65 64 20 74 6f 20 72 65 73 74 72 69 63 74 20  sed to restrict 
11940 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 75  which rows are u
11950 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  pdated.</p>..<p>
11960 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e  The optional con
11970 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c  flict-clause all
11980 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63  ows the specific
11990 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65  ation of an alte
119a0 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69  rnative.constrai
119b0 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
119c0 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
119d0 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
119e0 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e  his one command.
119f0 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e  .See the section
11a00 20 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d   titled.<a href=
11a10 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43  "#conflict">ON C
11a20 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20  ONFLICT</a> for 
11a30 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
11a40 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a 0a  mation.</p>.}...
11a50 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76  Section VACUUM v
11a60 61 63 75 75 6d 0a 0a 53 79 6e 74 61 78 20 7b 73  acuum..Syntax {s
11a70 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
11a80 56 41 43 55 55 4d 20 5b 3c 69 6e 64 65 78 2d 6f  VACUUM [<index-o
11a90 72 2d 74 61 62 6c 65 2d 6e 61 6d 65 3e 5d 0a 7d  r-table-name>].}
11aa0 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
11ab0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69  VACUUM command i
11ac0 73 20 61 6e 20 53 51 4c 69 74 65 20 65 78 74 65  s an SQLite exte
11ad0 6e 73 69 6f 6e 20 6d 6f 64 65 6c 65 64 20 61 66  nsion modeled af
11ae0 74 65 72 20 61 20 73 69 6d 69 6c 61 72 0a 63 6f  ter a similar.co
11af0 6d 6d 61 6e 64 20 66 6f 75 6e 64 20 69 6e 20 50  mmand found in P
11b00 6f 73 74 67 72 65 53 51 4c 2e 20 20 49 66 20 56  ostgreSQL.  If V
11b10 41 43 55 55 4d 20 69 73 20 69 6e 76 6f 6b 65 64  ACUUM is invoked
11b20 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 6f   with the name o
11b30 66 20 61 0a 74 61 62 6c 65 20 6f 72 20 69 6e 64  f a.table or ind
11b40 65 78 20 74 68 65 6e 20 69 74 20 69 73 20 73 75  ex then it is su
11b50 70 70 6f 73 65 20 74 6f 20 63 6c 65 61 6e 20 75  ppose to clean u
11b60 70 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  p the named tabl
11b70 65 20 6f 72 20 69 6e 64 65 78 2e 0a 49 6e 20 76  e or index..In v
11b80 65 72 73 69 6f 6e 20 31 2e 30 20 6f 66 20 53 51  ersion 1.0 of SQ
11b90 4c 69 74 65 2c 20 74 68 65 20 56 41 43 55 55 4d  Lite, the VACUUM
11ba0 20 63 6f 6d 6d 61 6e 64 20 77 6f 75 6c 64 20 69   command would i
11bb0 6e 76 6f 6b 65 20 0a 3c 62 3e 67 64 62 6d 5f 72  nvoke .<b>gdbm_r
11bc0 65 6f 72 67 61 6e 69 7a 65 28 29 3c 2f 62 3e 20  eorganize()</b> 
11bd0 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20  to clean up the 
11be0 62 61 63 6b 65 6e 64 20 64 61 74 61 62 61 73 65  backend database
11bf0 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a   file.</p>..<p>.
11c00 56 41 43 55 55 4d 20 62 65 63 61 6d 65 20 61 20  VACUUM became a 
11c10 6e 6f 2d 6f 70 20 77 68 65 6e 20 74 68 65 20 47  no-op when the G
11c20 44 42 4d 20 62 61 63 6b 65 6e 64 20 77 61 73 20  DBM backend was 
11c30 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 53 51 4c  removed from.SQL
11c40 49 54 45 20 69 6e 20 76 65 72 73 69 6f 6e 20 32  ITE in version 2
11c50 2e 30 2e 30 2e 0a 56 41 43 55 55 4d 20 77 61 73  .0.0..VACUUM was
11c60 20 72 65 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69   reimplemented i
11c70 6e 20 76 65 72 73 69 6f 6e 20 32 2e 38 2e 31 2e  n version 2.8.1.
11c80 0a 54 68 65 20 69 6e 64 65 78 20 6f 72 20 74 61  .The index or ta
11c90 62 6c 65 20 6e 61 6d 65 20 61 72 67 75 6d 65 6e  ble name argumen
11ca0 74 20 69 73 20 6e 6f 77 20 69 67 6e 6f 72 65 64  t is now ignored
11cb0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20  ..</p>..<p>When 
11cc0 61 6e 20 6f 62 6a 65 63 74 20 28 74 61 62 6c 65  an object (table
11cd0 2c 20 69 6e 64 65 78 2c 20 6f 72 20 74 72 69 67  , index, or trig
11ce0 67 65 72 29 20 69 73 20 64 72 6f 70 70 65 64 20  ger) is dropped 
11cf0 66 72 6f 6d 20 74 68 65 20 0a 64 61 74 61 62 61  from the .databa
11d00 73 65 2c 20 69 74 20 6c 65 61 76 65 73 20 62 65  se, it leaves be
11d10 68 69 6e 64 20 65 6d 70 74 79 20 73 70 61 63 65  hind empty space
11d20 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68  .  This makes th
11d30 65 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  e database .file
11d40 20 6c 61 72 67 65 72 20 74 68 61 6e 20 69 74 20   larger than it 
11d50 6e 65 65 64 73 20 74 6f 20 62 65 2c 20 62 75 74  needs to be, but
11d60 20 63 61 6e 20 73 70 65 65 64 20 75 70 20 69 6e   can speed up in
11d70 73 65 72 74 73 2e 20 20 49 6e 20 74 69 6d 65 20  serts.  In time 
11d80 0a 69 6e 73 65 72 74 73 20 61 6e 64 20 64 65 6c  .inserts and del
11d90 65 74 65 73 20 63 61 6e 20 6c 65 61 76 65 20 74  etes can leave t
11da0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11db0 20 73 74 72 75 63 74 75 72 65 20 66 72 61 67 6d   structure fragm
11dc0 65 6e 74 65 64 2c 20 0a 77 68 69 63 68 20 73 6c  ented, .which sl
11dd0 6f 77 73 20 64 6f 77 6e 20 64 69 73 6b 20 61 63  ows down disk ac
11de0 63 65 73 73 20 74 6f 20 74 68 65 20 64 61 74 61  cess to the data
11df0 62 61 73 65 20 63 6f 6e 74 65 6e 74 73 2e 0a 0a  base contents...
11e00 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
11e10 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d 61  nd cleans.the ma
11e20 69 6e 20 64 61 74 61 62 61 73 65 20 62 79 20 63  in database by c
11e30 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e 74 65  opying its conte
11e40 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f 72 61  nts to a tempora
11e50 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
11e60 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67 20   and .reloading 
11e70 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
11e80 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f 6d 20  abase file from 
11e90 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69 73 20  the copy.  This 
11ea0 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72 65 65  eliminates .free
11eb0 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e 73 20   pages,  aligns 
11ec0 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20 62 65  table data to be
11ed0 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e 64   contiguous, and
11ee0 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65 61 6e   otherwise clean
11ef0 73 20 0a 75 70 20 74 68 65 20 64 61 74 61 62 61  s .up the databa
11f00 73 65 20 66 69 6c 65 20 73 74 72 75 63 74 75 72  se file structur
11f10 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 56 41 43 55 55  e.</p>..<p>VACUU
11f20 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  M only works on 
11f30 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
11f40 65 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  e..It is not pos
11f50 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20  sible to VACUUM 
11f60 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
11f70 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
11f80 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20 63 6f  <p>The VACUUM co
11f90 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20  mmand will fail 
11fa0 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 61  if there is an a
11fb0 63 74 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f  ctive transactio
11fc0 6e 2e 0a 54 68 65 20 56 41 43 55 55 4d 20 63 6f  n..The VACUUM co
11fd0 6d 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70  mmand is a no-op
11fe0 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   for in-memory d
11ff0 61 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a 0a 3c  atabases.</p>..<
12000 70 3e 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76  p>As of SQLite v
12010 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61  ersion 3.1, an a
12020 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73  lternative to us
12030 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63  ing the VACUUM c
12040 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f 2d 76  ommand.is auto-v
12050 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62  acuum mode, enab
12060 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 3c  led using the .<
12070 61 20 68 72 65 66 3d 22 70 72 61 67 6d 61 2e 68  a href="pragma.h
12080 74 6d 6c 23 70 72 61 67 6d 61 5f 61 75 74 6f 5f  tml#pragma_auto_
12090 76 61 63 75 75 6d 22 3e 61 75 74 6f 5f 76 61 63  vacuum">auto_vac
120a0 75 75 6d 20 70 72 61 67 6d 61 3c 2f 61 3e 2e 0a  uum pragma</a>..
120b0 57 68 65 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  When auto-vacuum
120c0 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   is enabled for 
120d0 61 20 64 61 74 61 62 61 73 65 2c 20 6c 61 72 67  a database, larg
120e0 65 20 64 65 6c 65 74 65 73 20 63 61 75 73 65 0a  e deletes cause.
120f0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
12100 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
12110 20 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65 76 65   shrink.  Howeve
12120 72 2c 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a 61  r, auto-vacuum.a
12130 6c 73 6f 20 63 61 75 73 65 73 20 65 78 63 65 73  lso causes exces
12140 73 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 20  s fragmentation 
12150 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
12160 66 69 6c 65 2e 20 20 41 6e 64 20 61 75 74 6f 2d  file.  And auto-
12170 76 61 63 75 75 6d 0a 64 6f 65 73 20 6e 6f 74 20  vacuum.does not 
12180 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c  compact partiall
12190 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f  y filled pages o
121a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
121b0 73 20 56 41 43 55 55 4d 0a 64 6f 65 73 2e 0a 3c  s VACUUM.does..<
121c0 2f 70 3e 0a 7d 0a 0a 23 20 41 20 6c 69 73 74 20  /p>.}..# A list 
121d0 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20  of keywords.  A 
121e0 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20  asterisk occurs 
121f0 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72  after the keywor
12200 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20  d if it is on.# 
12210 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73  the fallback lis
12220 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64  t..#.set keyword
12230 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20  _list [lsort {. 
12240 20 20 41 42 4f 52 54 2a 0a 20 20 20 41 44 44 0a    ABORT*.   ADD.
12250 20 20 20 41 46 54 45 52 2a 0a 20 20 20 41 4c 4c     AFTER*.   ALL
12260 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41  .   ALTER.   ANA
12270 4c 59 5a 45 2a 0a 20 20 20 41 4e 44 0a 20 20 20  LYZE*.   AND.   
12280 41 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54  AS.   ASC*.   AT
12290 54 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43  TACH*.   AUTOINC
122a0 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45  REMENT.   BEFORE
122b0 2a 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42  *.   BEGIN*.   B
122c0 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
122d0 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53 45  CASCADE*.   CASE
122e0 0a 20 20 20 43 41 53 54 2a 0a 20 20 20 43 48 45  .   CAST*.   CHE
122f0 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20  CK.   COLLATE.  
12300 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c   COMMIT.   CONFL
12310 49 43 54 2a 0a 20 20 20 43 4f 4e 53 54 52 41 49  ICT*.   CONSTRAI
12320 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20 20  NT.   CREATE.   
12330 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e 54  CROSS.   CURRENT
12340 5f 44 41 54 45 2a 0a 20 20 20 43 55 52 52 45 4e  _DATE*.   CURREN
12350 54 5f 54 49 4d 45 2a 0a 20 20 20 43 55 52 52 45  T_TIME*.   CURRE
12360 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2a 0a 20 20  NT_TIMESTAMP*.  
12370 20 44 41 54 41 42 41 53 45 2a 0a 20 20 20 44 45   DATABASE*.   DE
12380 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45  FAULT.   DEFERRE
12390 44 2a 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45  D*.   DEFERRABLE
123a0 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45  .   DELETE.   DE
123b0 53 43 2a 0a 20 20 20 44 45 54 41 43 48 2a 0a 20  SC*.   DETACH*. 
123c0 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 52    DISTINCT.   DR
123d0 4f 50 0a 20 20 20 45 4e 44 2a 0a 20 20 20 45 41  OP.   END*.   EA
123e0 43 48 2a 0a 20 20 20 45 4c 53 45 0a 20 20 20 45  CH*.   ELSE.   E
123f0 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a  SCAPE.   EXCEPT.
12400 20 20 20 45 58 43 4c 55 53 49 56 45 2a 0a 20 20     EXCLUSIVE*.  
12410 20 45 58 50 4c 41 49 4e 2a 0a 20 20 20 46 41 49   EXPLAIN*.   FAI
12420 4c 2a 0a 20 20 20 46 4f 52 2a 0a 20 20 20 46 4f  L*.   FOR*.   FO
12430 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20  REIGN.   FROM.  
12440 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 2a 0a 20   FULL.   GLOB*. 
12450 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e    GROUP.   HAVIN
12460 47 0a 20 20 20 49 46 2a 0a 20 20 20 49 47 4e 4f  G.   IF*.   IGNO
12470 52 45 2a 0a 20 20 20 49 4d 4d 45 44 49 41 54 45  RE*.   IMMEDIATE
12480 2a 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  *.   IN.   INDEX
12490 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a 20  .   INITIALLY*. 
124a0 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
124b0 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20 20  T.   INSTEAD*.  
124c0 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e   INTERSECT.   IN
124d0 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55  TO.   IS.   ISNU
124e0 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45  LL.   JOIN.   KE
124f0 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49  Y*.   LEFT.   LI
12500 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20  KE*.   LIMIT.   
12510 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52 41  MATCH*.   NATURA
12520 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e  L.   NOT.   NOTN
12530 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f  ULL.   NULL.   O
12540 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20 20  F*.   OFFSET*.  
12550 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
12560 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
12570 4c 41 4e 2a 0a 20 20 20 50 52 41 47 4d 41 2a 0a  LAN*.   PRAGMA*.
12580 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55     PRIMARY.   QU
12590 45 52 59 2a 0a 20 20 20 52 41 49 53 45 2a 0a 20  ERY*.   RAISE*. 
125a0 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20    REFERENCES.   
125b0 52 45 49 4e 44 45 58 2a 0a 20 20 20 52 45 4e 41  REINDEX*.   RENA
125c0 4d 45 2a 0a 20 20 20 52 45 50 4c 41 43 45 2a 0a  ME*.   REPLACE*.
125d0 20 20 20 52 45 53 54 52 49 43 54 2a 0a 20 20 20     RESTRICT*.   
125e0 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43  RIGHT.   ROLLBAC
125f0 4b 0a 20 20 20 52 4f 57 2a 0a 20 20 20 53 45 4c  K.   ROW*.   SEL
12600 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41  ECT.   SET.   TA
12610 42 4c 45 0a 20 20 20 54 45 4d 50 2a 0a 20 20 20  BLE.   TEMP*.   
12620 54 45 4d 50 4f 52 41 52 59 2a 0a 20 20 20 54 48  TEMPORARY*.   TH
12630 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e  EN.   TO.   TRAN
12640 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47  SACTION.   TRIGG
12650 45 52 2a 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20  ER*.   UNION.   
12660 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45  UNIQUE.   UPDATE
12670 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43  .   USING.   VAC
12680 55 55 4d 2a 0a 20 20 20 56 41 4c 55 45 53 0a 20  UUM*.   VALUES. 
12690 20 20 56 49 45 57 2a 0a 20 20 20 56 49 52 54 55    VIEW*.   VIRTU
126a0 41 4c 2a 0a 20 20 20 57 48 45 4e 0a 20 20 20 57  AL*.   WHEN.   W
126b0 48 45 52 45 0a 7d 5d 0a 0a 0a 0a 70 75 74 73 20  HERE.}]....puts 
126c0 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66  {<DIV class="pdf
126d0 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74  _section">}.Sect
126e0 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77  ion {SQLite Keyw
126f0 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 0a  ords} keywords .
12700 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 0a 70  puts {</DIV>}..p
12710 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 53 51 4c  uts {.<p>The SQL
12720 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66   standard specif
12730 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65  ies a huge numbe
12740 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68  r of keywords wh
12750 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75  ich may not.be u
12760 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73  sed as the names
12770 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69   of tables, indi
12780 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61  ces, columns, da
12790 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65  tabases, user-de
127a0 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c  fined.functions,
127b0 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72   collations, vir
127c0 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
127d0 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72  es, or any other
127e0 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54   named object..T
127f0 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
12800 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  rds is so long t
12810 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
12820 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
12830 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53   all..For most S
12840 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61  QL code, your sa
12850 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e  fest bet is to n
12860 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67  ever use any Eng
12870 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f  lish language.wo
12880 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f  rd as the name o
12890 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  f a user-defined
128a0 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   object.</p>..<p
128b0 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20  >If you want to 
128c0 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73  use a keyword as
128d0 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65   a name, you nee
128e0 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20  d to quote it.  
128f0 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65 20  There.are three 
12900 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20  ways of quoting 
12910 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69  keywords in SQLi
12920 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c  te:</p>..<p>.<bl
12930 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
12940 20 63 6c 61 73 73 3d 22 70 64 66 5f 66 75 6e 63   class="pdf_func
12950 74 69 6f 6e 73 22 3e 0a 3c 74 72 3e 09 3c 74 64  tions">.<tr>.<td
12960 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
12970 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f  >'keyword'</b></
12980 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
12990 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b  "></td>..<td>A k
129a0 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
129b0 20 71 75 6f 74 65 73 20 69 73 20 69 6e 74 65 72   quotes is inter
129c0 70 72 65 74 65 64 20 61 73 20 61 20 6c 69 74 65  preted as a lite
129d0 72 61 6c 20 73 74 72 69 6e 67 0a 20 20 20 20 20  ral string.     
129e0 20 20 20 69 66 20 69 74 20 6f 63 63 75 72 73 20     if it occurs 
129f0 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65  in a context whe
12a00 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
12a10 72 61 6c 20 69 73 20 61 6c 6c 6f 77 65 64 2c 20  ral is allowed, 
12a20 6f 74 68 65 72 77 69 73 65 0a 09 69 74 20 69 73  otherwise..it is
12a30 20 75 6e 64 65 72 73 74 6f 6f 64 20 61 73 20 61   understood as a
12a40 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74  n identifier.</t
12a50 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74 64  d></tr>.<tr>.<td
12a60 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
12a70 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f  >"keyword"</b></
12a80 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
12a90 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64  d>A keyword in d
12aa0 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20  ouble-quotes is 
12ab0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
12ac0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 66 0a  n identifier if.
12ad0 20 20 20 20 20 20 20 20 69 74 20 6d 61 74 63 68          it match
12ae0 65 73 20 61 20 6b 6e 6f 77 6e 20 69 64 65 6e 74  es a known ident
12af0 69 66 69 65 72 2e 20 20 4f 74 68 65 72 77 69 73  ifier.  Otherwis
12b00 65 20 69 74 20 69 73 20 69 6e 74 65 72 70 72 65  e it is interpre
12b10 74 65 64 20 61 73 20 61 0a 20 20 20 20 20 20 20  ted as a.       
12b20 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e   string literal.
12b30 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09  </td></tr>.<tr>.
12b40 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
12b50 3e 3c 62 3e 5b 6b 65 79 77 6f 72 64 5d 3c 2f 62  ><b>[keyword]</b
12b60 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
12b70 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 65  .<td>A keyword e
12b80 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72  nclosed in squar
12b90 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 61 6c  e brackets is al
12ba0 77 61 79 73 20 75 6e 64 65 72 73 74 6f 6f 64 20  ways understood 
12bb0 61 73 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64  as.        an id
12bc0 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20  entifier.  This 
12bd0 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  is not standard 
12be0 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69  SQL.  This quoti
12bf0 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20  ng mechanism.   
12c00 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by 
12c10 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51  MS Access and SQ
12c20 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20  L Server and is 
12c30 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69  included in SQLi
12c40 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63  te for.        c
12c50 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74  ompatibility.</t
12c60 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  d></tr>.</table>
12c70 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  .</blockquote>.<
12c80 2f 70 3e 0a 0a 3c 70 3e 51 75 6f 74 65 64 20 6b  /p>..<p>Quoted k
12c90 65 79 77 6f 72 64 73 20 61 72 65 20 75 6e 61 65  eywords are unae
12ca0 73 74 68 65 74 69 63 2e 0a 54 6f 20 68 65 6c 70  sthetic..To help
12cb0 20 79 6f 75 20 61 76 6f 69 64 20 74 68 65 6d 2c   you avoid them,
12cc0 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 6d   SQLite allows m
12cd0 61 6e 79 20 6b 65 79 77 6f 72 64 73 20 74 6f 20  any keywords to 
12ce0 62 65 20 75 73 65 64 20 75 6e 71 75 6f 74 65 64  be used unquoted
12cf0 0a 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  .as the names of
12d00 20 64 61 74 61 62 61 73 65 73 2c 20 74 61 62 6c   databases, tabl
12d10 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 74 72 69  es, indices, tri
12d20 67 67 65 72 73 2c 20 76 69 65 77 73 2c 20 63 6f  ggers, views, co
12d30 6c 75 6d 6e 73 2c 0a 75 73 65 72 2d 64 65 66 69  lumns,.user-defi
12d40 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 63  ned functions, c
12d50 6f 6c 6c 61 74 69 6f 6e 73 2c 20 61 74 74 61 63  ollations, attac
12d60 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 61  hed databases, a
12d70 6e 64 20 76 69 72 74 75 61 6c 0a 66 75 6e 63 74  nd virtual.funct
12d80 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0a 49 6e 20  ion modules..In 
12d90 74 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  the list of keyw
12da0 6f 72 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ords that follow
12db0 73 2c 20 74 68 6f 73 65 20 74 68 61 74 20 63 61  s, those that ca
12dc0 6e 20 62 65 20 75 73 65 64 20 61 73 20 69 64 65  n be used as ide
12dd0 6e 74 69 66 69 65 72 73 0a 61 72 65 20 73 68 6f  ntifiers.are sho
12de0 77 6e 20 69 6e 20 61 6e 20 69 74 61 6c 69 63 20  wn in an italic 
12df0 66 6f 6e 74 2e 20 20 4b 65 79 77 6f 72 64 73 20  font.  Keywords 
12e00 74 68 61 74 20 6d 75 73 74 20 62 65 20 71 75 6f  that must be quo
12e10 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ted in order to 
12e20 62 65 0a 75 73 65 64 20 61 73 20 69 64 65 6e 74  be.used as ident
12e30 69 66 69 65 72 73 20 61 72 65 20 73 68 6f 77 6e  ifiers are shown
12e40 20 69 6e 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a 3c   in bold.</p>..<
12e50 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e  p>.SQLite adds n
12e60 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d  ew keywords from
12e70 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68   time to time wh
12e80 65 6e 20 69 74 20 74 61 6b 65 20 6f 6e 20 6e 65  en it take on ne
12e90 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74  w features..So t
12ea0 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63  o prevent your c
12eb0 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62  ode from being b
12ec0 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20  roken by future 
12ed0 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f  enhancements, yo
12ee0 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c  u should.normall
12ef0 79 20 71 75 6f 74 65 20 61 6e 79 20 69 6e 64 65  y quote any inde
12f00 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
12f10 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  an English langu
12f20 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69  age word, even i
12f30 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76  f.you do not hav
12f40 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  e to..</p>..<p>.
12f50 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
12f60 65 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 63  e the keywords c
12f70 75 72 72 65 6e 74 6c 79 20 72 65 63 6f 67 6e 69  urrently recogni
12f80 7a 65 64 20 62 79 20 53 51 4c 69 74 65 3a 0a 3c  zed by SQLite:.<
12f90 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12fa0 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
12fb0 31 30 30 25 22 20 63 6c 61 73 73 3d 22 70 64 66  100%" class="pdf
12fc0 5f 6b 65 79 77 6f 72 64 73 22 3e 0a 3c 74 72 3e  _keywords">.<tr>
12fd0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74  .<td align="left
12fe0 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77  " valign="top" w
12ff0 69 64 74 68 3d 22 32 30 25 22 3e 0a 7d 0a 0a 73  idth="20%">.}..s
13000 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  et n [llength $k
13010 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74  eyword_list].set
13020 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77   nCol 5.set nRow
13030 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f   [expr {($n+$nCo
13040 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74  l-1)/$nCol}].set
13050 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77 6f 72   i 0.foreach wor
13060 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20  d $keyword_list 
13070 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20  {.  if {[string 
13080 69 6e 64 65 78 20 24 77 6f 72 64 20 65 6e 64 5d  index $word end]
13090 3d 3d 22 2a 22 7d 20 7b 0a 20 20 20 20 73 65 74  =="*"} {.    set
130a0 20 77 6f 72 64 20 5b 73 74 72 69 6e 67 20 72 61   word [string ra
130b0 6e 67 65 20 24 77 6f 72 64 20 30 20 65 6e 64 2d  nge $word 0 end-
130c0 31 5d 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20  1].    set font 
130d0 69 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  i.  } else {.   
130e0 20 73 65 74 20 66 6f 6e 74 20 62 0a 20 20 7d 0a   set font b.  }.
130f0 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d    if {$i==$nRow}
13100 20 7b 0a 20 20 20 20 70 75 74 73 20 22 3c 2f 74   {.    puts "</t
13110 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74  d><td valign=\"t
13120 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66  op\" align=\"lef
13130 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c  t\" width=\"20%\
13140 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a  ">".    set i 1.
13150 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69    } else {.    i
13160 6e 63 72 20 69 0a 20 20 7d 0a 20 20 70 75 74 73  ncr i.  }.  puts
13170 20 22 3c 24 66 6f 6e 74 3e 24 77 6f 72 64 3c 2f   "<$font>$word</
13180 24 66 6f 6e 74 3e 3c 62 72 3e 22 0a 7d 0a 0a 70  $font><br>".}..p
13190 75 74 73 20 7b 0a 3c 2f 74 64 3e 3c 2f 74 72 3e  uts {.</td></tr>
131a0 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71  </table></blockq
131b0 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53 70 65 63 69  uote>..<h2>Speci
131c0 61 6c 20 6e 61 6d 65 73 3c 2f 68 32 3e 0a 0a 3c  al names</h2>..<
131d0 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
131e0 61 72 65 20 6e 6f 74 20 6b 65 79 77 6f 72 64 73  are not keywords
131f0 20 69 6e 20 53 51 4c 69 74 65 2c 20 62 75 74 20   in SQLite, but 
13200 61 72 65 20 75 73 65 64 20 61 73 20 6e 61 6d 65  are used as name
13210 73 20 6f 66 20 0a 73 79 73 74 65 6d 20 6f 62 6a  s of .system obj
13220 65 63 74 73 2e 20 20 54 68 65 79 20 63 61 6e 20  ects.  They can 
13230 62 65 20 75 73 65 64 20 61 73 20 61 6e 20 69 64  be used as an id
13240 65 6e 74 69 66 69 65 72 20 66 6f 72 20 61 20 64  entifier for a d
13250 69 66 66 65 72 65 6e 74 20 0a 74 79 70 65 20 6f  ifferent .type o
13260 66 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  f object.</p>..<
13270 62 6c 6f 63 6b 71 75 6f 74 65 20 63 6c 61 73 73  blockquote class
13280 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64 73 22 3e  ="pdf_keywords">
13290 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c 62 72  <b>.  _ROWID_<br
132a0 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20 20 4f  >.  MAIN<br>.  O
132b0 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44 3c 62  ID<br>.  ROWID<b
132c0 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41 53 54  r>.  SQLITE_MAST
132d0 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f  ER<br>.  SQLITE_
132e0 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20 20 53  SEQUENCE<br>.  S
132f0 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53 54 45  QLITE_TEMP_MASTE
13300 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62 72 3e  R<br>.  TEMP<br>
13310 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  .</b></blockquot
13320 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 3c 44 49 56  e>.}..puts {<DIV
13330 20 63 6c 61 73 73 3d 22 70 64 66 5f 69 67 6e 6f   class="pdf_igno
13340 72 65 22 3e 7d 0a 66 6f 6f 74 65 72 20 24 72 63  re">}.footer $rc
13350 73 69 64 0a 69 66 20 7b 5b 73 74 72 69 6e 67 20  sid.if {[string 
13360 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74 64 69  length $outputdi
13370 72 5d 7d 20 7b 0a 20 20 66 6f 6f 74 65 72 20 24  r]} {.  footer $
13380 72 63 73 69 64 0a 7d 0a 70 75 74 73 20 7b 3c 2f  rcsid.}.puts {</
13390 44 49 56 3e 7d 0a                                DIV>}.