/ Hex Artifact Content
Login

Artifact e481e68bc17a850944006e5cfeefa86750244774:


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 33 31 20 32 30  g.tcl,v 1.131 20
0060: 30 37 2f 30 36 2f 31 35 20 31 38 3a 35 39 3a 30  07/06/15 18:59:0
0070: 39 20 64 72 68 20 45 78 70 20 24 7d 0a 73 6f 75  9 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 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
de50: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
de60: 69 67 68 74 22 3e 7a 65 72 6f 62 6c 6f 62 28 3c  ight">zeroblob(<
de70: 69 3e 4e 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>N</i>)</td>.<t
de80: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
de90: 61 20 6e 61 6d 65 3d 22 7a 65 72 6f 62 6c 6f 62  a name="zeroblob
dea0: 22 3e 0a 52 65 74 75 72 6e 20 61 20 42 4c 4f 42  ">.Return a BLOB
deb0: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e   consisting of N
dec0: 20 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 20   bytes of 0x00. 
ded0: 20 53 51 4c 69 74 65 0a 6d 61 6e 61 67 65 73 20   SQLite.manages 
dee0: 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
def0: 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
df00: 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
df10: 20 62 65 20 75 73 65 64 20 74 6f 0a 72 65 73 65   be used to.rese
df20: 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
df30: 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
df40: 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
df50: 20 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33   .<a href="capi3
df60: 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33  ref.html#sqlite3
df70: 5f 62 6c 6f 62 5f 6f 70 65 6e 22 3e 69 6e 63 72  _blob_open">incr
df80: 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f  emental BLOB I/O
df90: 3c 2f 61 3e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  </a>.</td>.</tr>
dfa0: 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 62 3e 44  ..</table>..<b>D
dfb0: 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e  ate And Time Fun
dfc0: 63 74 69 6f 6e 73 3c 2f 62 3e 0a 0a 3c 70 3e 44  ctions</b>..<p>D
dfd0: 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
dfe0: 63 74 69 6f 6e 73 20 61 72 65 20 64 6f 63 75 6d  ctions are docum
dff0: 65 6e 74 65 64 20 69 6e 20 74 68 65 20 0a 3c 61  ented in the .<a
e000: 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77   href="http://ww
e010: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 63 76 73  w.sqlite.org/cvs
e020: 74 72 61 63 2f 77 69 6b 69 3f 70 3d 44 61 74 65  trac/wiki?p=Date
e030: 41 6e 64 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  AndTimeFunctions
e040: 22 3e 0a 53 51 4c 69 74 65 20 57 69 6b 69 3c 2f  ">.SQLite Wiki</
e050: 61 3e 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65  a>.</p>..<a name
e060: 3d 22 61 67 67 72 65 67 61 74 65 66 75 6e 63 74  ="aggregatefunct
e070: 69 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 62 3e 41 67  ions"></a>.<b>Ag
e080: 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e  gregate Function
e090: 73 3c 2f 62 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61  s</b>..<p>.The a
e0a0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
e0b0: 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
e0c0: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
e0d0: 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69  default.  Additi
e0e0: 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66  onal.aggregate f
e0f0: 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
e100: 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64   in C may be add
e110: 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 3c 61  ed using the .<a
e120: 20 68 72 65 66 3d 22 63 61 70 69 33 72 65 66 2e   href="capi3ref.
e130: 68 74 6d 6c 23 73 71 6c 69 74 65 33 5f 63 72 65  html#sqlite3_cre
e140: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 3e 73 71  ate_function">sq
e150: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
e160: 63 74 69 6f 6e 28 29 3c 2f 61 3e 0a 41 50 49 2e  ction()</a>.API.
e170: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 61 6e 79  </p>..<p>.In any
e180: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
e190: 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61  ion that takes a
e1a0: 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
e1b0: 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a  , that argument.
e1c0: 63 61 6e 20 62 65 20 70 72 65 63 65 65 64 65 64  can be preceeded
e1d0: 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64 20   by the keyword 
e1e0: 44 49 53 54 49 4e 43 54 2e 20 20 49 6e 20 73 75  DISTINCT.  In su
e1f0: 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63  ch cases, duplic
e200: 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65  ate.elements are
e210: 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65   filtered before
e220: 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e   being passed in
e230: 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65  to the aggregate
e240: 20 66 75 6e 63 74 69 6f 6e 2e 0a 46 6f 72 20 65   function..For e
e250: 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63  xample, the func
e260: 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74  tion "count(dist
e270: 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65  inct X)" will re
e280: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  turn the number.
e290: 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  of distinct valu
e2a0: 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69  es of column X i
e2b0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f  nstead of the to
e2c0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  tal number of no
e2d0: 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e  n-null.values in
e2e0: 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a   column X..</p>.
e2f0: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
e300: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 20   cellpadding=10 
e310: 63 6c 61 73 73 3d 22 70 64 66 5f 66 75 6e 63 74  class="pdf_funct
e320: 69 6f 6e 73 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20  ions">.<tr>.<td 
e330: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
e340: 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68  gn="right" width
e350: 3d 31 32 30 3e 61 76 67 28 3c 69 3e 58 3c 2f 69  =120>avg(<i>X</i
e360: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
e370: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
e380: 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75  the average valu
e390: 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  e of all non-NUL
e3a0: 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69  L <i>X</i> withi
e3b0: 6e 20 61 0a 67 72 6f 75 70 2e 20 20 53 74 72 69  n a.group.  Stri
e3c0: 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75  ng and BLOB valu
e3d0: 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c  es that do not l
e3e0: 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73  ook like numbers
e3f0: 20 61 72 65 0a 69 6e 74 65 72 70 72 65 74 65 64   are.interpreted
e400: 20 61 73 20 30 2e 0a 54 68 65 20 72 65 73 75 6c   as 0..The resul
e410: 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c  t of avg() is al
e420: 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
e430: 70 6f 69 6e 74 20 76 61 6c 75 65 20 65 76 65 6e  point value even
e440: 20 69 66 20 61 6c 6c 0a 69 6e 70 75 74 73 20 61   if all.inputs a
e450: 72 65 20 69 6e 74 65 67 65 72 73 2e 20 3c 2f 70  re integers. </p
e460: 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  ></td>.</tr>..<t
e470: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
e480: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
e490: 22 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c 2f 69 3e  ">count(<i>X</i>
e4a0: 29 3c 62 72 3e 63 6f 75 6e 74 28 2a 29 3c 2f 74  )<br>count(*)</t
e4b0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
e4c0: 6f 70 22 3e 54 68 65 20 66 69 72 73 74 20 66 6f  op">The first fo
e4d0: 72 6d 20 72 65 74 75 72 6e 20 61 20 63 6f 75 6e  rm return a coun
e4e0: 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
e4f0: 6f 66 20 74 69 6d 65 73 0a 74 68 61 74 20 3c 69  of times.that <i
e500: 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55  >X</i> is not NU
e510: 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20  LL in a group.  
e520: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
e530: 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e  (with no argumen
e540: 74 29 0a 72 65 74 75 72 6e 73 20 74 68 65 20 74  t).returns the t
e550: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72  otal number of r
e560: 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
e570: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
e580: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
e590: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
e5a0: 22 3e 6d 61 78 28 3c 69 3e 58 3c 2f 69 3e 29 3c  ">max(<i>X</i>)<
e5b0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
e5c0: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
e5d0: 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f   maximum value o
e5e0: 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
e5f0: 74 68 65 20 67 72 6f 75 70 2e 0a 54 68 65 20 75  the group..The u
e600: 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20  sual sort order 
e610: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
e620: 6d 69 6e 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  mine the maximum
e630: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
e640: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
e650: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
e660: 22 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e 29 3c  ">min(<i>X</i>)<
e670: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
e680: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
e690: 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c   minimum non-NUL
e6a0: 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76  L value of all v
e6b0: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
e6c0: 75 70 2e 0a 54 68 65 20 75 73 75 61 6c 20 73 6f  up..The usual so
e6d0: 72 74 20 6f 72 64 65 72 20 69 73 20 75 73 65 64  rt order is used
e6e0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
e6f0: 65 20 6d 69 6e 69 6d 75 6d 2e 20 20 4e 55 4c 4c  e minimum.  NULL
e700: 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65   is only returne
e710: 64 0a 69 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  d.if all values 
e720: 69 6e 20 74 68 65 20 67 72 6f 75 70 20 61 72 65  in the group are
e730: 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a 3c 2f 74 72   NULL.</td>.</tr
e740: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
e750: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
e760: 72 69 67 68 74 22 3e 73 75 6d 28 3c 69 3e 58 3c  right">sum(<i>X<
e770: 2f 69 3e 29 3c 62 72 3e 74 6f 74 61 6c 28 3c 69  /i>)<br>total(<i
e780: 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64  >X</i>)</td>.<td
e790: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
e7a0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63  turn the numeric
e7b0: 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d   sum of all non-
e7c0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
e7d0: 68 65 20 67 72 6f 75 70 2e 0a 20 20 20 49 66 20  he group..   If 
e7e0: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e  there are no non
e7f0: 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73  -NULL input rows
e800: 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75   then sum() retu
e810: 72 6e 73 0a 20 20 20 4e 55 4c 4c 20 62 75 74 20  rns.   NULL but 
e820: 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20  total() returns 
e830: 30 2e 30 2e 0a 20 20 20 4e 55 4c 4c 20 69 73 20  0.0..   NULL is 
e840: 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68  not normally a h
e850: 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f  elpful result fo
e860: 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20  r the sum of no 
e870: 72 6f 77 73 0a 20 20 20 62 75 74 20 74 68 65 20  rows.   but the 
e880: 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71  SQL standard req
e890: 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73  uires it and mos
e8a0: 74 20 6f 74 68 65 72 0a 20 20 20 53 51 4c 20 64  t other.   SQL d
e8b0: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
e8c0: 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20  implement sum() 
e8d0: 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69  that way so SQLi
e8e0: 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68  te does it in th
e8f0: 65 0a 20 20 20 73 61 6d 65 20 77 61 79 20 69 6e  e.   same way in
e900: 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d   order to be com
e910: 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e  patible.   The n
e920: 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61  on-standard tota
e930: 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  l() function.   
e940: 69 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61  is provided as a
e950: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20   convenient way 
e960: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74  to work around t
e970: 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c  his design probl
e980: 65 6d 0a 20 20 20 69 6e 20 74 68 65 20 53 51 4c  em.   in the SQL
e990: 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a   language.</p>..
e9a0: 20 20 20 3c 70 3e 54 68 65 20 72 65 73 75 6c 74     <p>The result
e9b0: 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73 20 61   of total() is a
e9c0: 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67  lways a floating
e9d0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20   point value..  
e9e0: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 73   The result of s
e9f0: 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74 65 67  um() is an integ
ea00: 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c 6c 20  er value if all 
ea10: 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20  non-NULL inputs 
ea20: 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 20 20  are integers..  
ea30: 20 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74 6f   If any input to
ea40: 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68 65   sum() is neithe
ea50: 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  r an integer or 
ea60: 61 20 4e 55 4c 4c 0a 20 20 20 74 68 65 6e 20 73  a NULL.   then s
ea70: 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66  um() returns a f
ea80: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
ea90: 6c 75 65 0a 20 20 20 77 68 69 63 68 20 6d 69 67  lue.   which mig
eaa0: 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69  ht be an approxi
eab0: 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72  mation to the tr
eac0: 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 20  ue sum.</p>..   
ead0: 3c 70 3e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68  <p>Sum() will th
eae0: 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20  row an "integer 
eaf0: 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74  overflow" except
eb00: 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74  ion if all input
eb10: 73 0a 20 20 20 61 72 65 20 69 6e 74 65 67 65 72  s.   are integer
eb20: 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 20 61 6e 64  s or NULL.   and
eb30: 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72   an integer over
eb40: 66 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61  flow occurs at a
eb50: 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20  ny point during 
eb60: 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e  the computation.
eb70: 0a 20 20 20 54 6f 74 61 6c 28 29 20 6e 65 76 65  .   Total() neve
eb80: 72 20 74 68 72 6f 77 73 20 61 6e 20 65 78 63 65  r throws an exce
eb90: 70 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f 74 72 3e  ption.</p>.</tr>
eba0: 0a 3c 2f 74 61 62 6c 65 3e 0a 7d 0a 0a 0a 53 65  .</table>.}...Se
ebb0: 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73  ction INSERT ins
ebc0: 65 72 74 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ert..Syntax {sql
ebd0: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 49 4e  -statement} {.IN
ebe0: 53 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69  SERT [OR <confli
ebf0: 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49  ct-algorithm>] I
ec00: 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  NTO [<database-n
ec10: 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
ec20: 61 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c  ame> [(<column-l
ec30: 69 73 74 3e 29 5d 20 56 41 4c 55 45 53 28 3c 76  ist>)] VALUES(<v
ec40: 61 6c 75 65 2d 6c 69 73 74 3e 29 20 7c 0a 49 4e  alue-list>) |.IN
ec50: 53 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69  SERT [OR <confli
ec60: 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49  ct-algorithm>] I
ec70: 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  NTO [<database-n
ec80: 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
ec90: 61 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c  ame> [(<column-l
eca0: 69 73 74 3e 29 5d 20 3c 73 65 6c 65 63 74 2d 73  ist>)] <select-s
ecb0: 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74  tatement>.}..put
ecc0: 73 20 7b 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52  s {.<p>The INSER
ecd0: 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65  T statement come
ece0: 73 20 69 6e 20 74 77 6f 20 62 61 73 69 63 20 66  s in two basic f
ecf0: 6f 72 6d 73 2e 20 20 54 68 65 20 66 69 72 73 74  orms.  The first
ed00: 20 66 6f 72 6d 0a 28 77 69 74 68 20 74 68 65 20   form.(with the 
ed10: 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64  "VALUES" keyword
ed20: 29 20 63 72 65 61 74 65 73 20 61 20 73 69 6e 67  ) creates a sing
ed30: 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e 20 61 6e  le new row in an
ed40: 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e   existing table.
ed50: 0a 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69  .If no column-li
ed60: 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20  st is specified 
ed70: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
ed80: 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74 0a 62  of values must.b
ed90: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  e the same as th
eda0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
edb0: 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
edc0: 2e 20 20 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c  .  If a column-l
edd0: 69 73 74 0a 69 73 20 73 70 65 63 69 66 69 65 64  ist.is specified
ede0: 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
edf0: 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74  r of values must
ee00: 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
ee10: 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63  r of.specified c
ee20: 6f 6c 75 6d 6e 73 2e 20 20 43 6f 6c 75 6d 6e 73  olumns.  Columns
ee30: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
ee40: 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72  at do not appear
ee50: 20 69 6e 20 74 68 65 0a 63 6f 6c 75 6d 6e 20 6c   in the.column l
ee60: 69 73 74 20 61 72 65 20 66 69 6c 6c 65 64 20 77  ist are filled w
ee70: 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20  ith the default 
ee80: 76 61 6c 75 65 2c 20 6f 72 20 77 69 74 68 20 4e  value, or with N
ee90: 55 4c 4c 20 69 66 20 6e 6f 74 0a 64 65 66 61 75  ULL if not.defau
eea0: 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70 65 63  lt value is spec
eeb0: 69 66 69 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ified..</p>..<p>
eec0: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
eed0: 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74  of the INSERT st
eee0: 61 74 65 6d 65 6e 74 20 74 61 6b 65 73 20 69 74  atement takes it
eef0: 20 64 61 74 61 20 66 72 6f 6d 20 61 0a 53 45 4c   data from a.SEL
ef00: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
ef10: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
ef20: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73  lumns in the res
ef30: 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43  ult of the.SELEC
ef40: 54 20 6d 75 73 74 20 65 78 61 63 74 6c 79 20 6d  T must exactly m
ef50: 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
ef60: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
ef70: 65 20 74 61 62 6c 65 20 69 66 0a 6e 6f 20 63 6f  e table if.no co
ef80: 6c 75 6d 6e 20 6c 69 73 74 20 69 73 20 73 70 65  lumn list is spe
ef90: 63 69 66 69 65 64 2c 20 6f 72 20 69 74 20 6d 75  cified, or it mu
efa0: 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  st match the num
efb0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 6e  ber of columns.n
efc0: 61 6d 65 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ame in the colum
efd0: 6e 20 6c 69 73 74 2e 20 20 41 20 6e 65 77 20 65  n list.  A new e
efe0: 6e 74 72 79 20 69 73 20 6d 61 64 65 20 69 6e 20  ntry is made in 
eff0: 74 68 65 20 74 61 62 6c 65 0a 66 6f 72 20 65 76  the table.for ev
f000: 65 72 79 20 72 6f 77 20 6f 66 20 74 68 65 20 53  ery row of the S
f010: 45 4c 45 43 54 20 72 65 73 75 6c 74 2e 20 20 54  ELECT result.  T
f020: 68 65 20 53 45 4c 45 43 54 20 6d 61 79 20 62 65  he SELECT may be
f030: 20 73 69 6d 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f   simple.or compo
f040: 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  und.</p>..<p>The
f050: 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69   optional confli
f060: 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73  ct-clause allows
f070: 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69   the specificati
f080: 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61  on of an alterna
f090: 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20  tive.constraint 
f0a0: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
f0b0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  ion algorithm to
f0c0: 20 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73   use during this
f0d0: 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65   one command..Se
f0e0: 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69  e the section ti
f0f0: 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63  tled.<a href="#c
f100: 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46  onflict">ON CONF
f110: 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64  LICT</a> for add
f120: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f130: 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69  ion..For compati
f140: 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
f150: 4c 2c 20 74 68 65 20 70 61 72 73 65 72 20 61 6c  L, the parser al
f160: 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20  lows the use of 
f170: 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f  the.single keywo
f180: 72 64 20 3c 61 20 68 72 65 66 3d 22 23 72 65 70  rd <a href="#rep
f190: 6c 61 63 65 22 3e 52 45 50 4c 41 43 45 3c 2f 61  lace">REPLACE</a
f1a0: 3e 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  > as an alias fo
f1b0: 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50  r "INSERT OR REP
f1c0: 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 0a  LACE"..</p>.}...
f1d0: 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46  Section {ON CONF
f1e0: 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e  LICT clause} con
f1f0: 66 6c 69 63 74 0a 0a 53 79 6e 74 61 78 20 7b 63  flict..Syntax {c
f200: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 7d 20  onflict-clause} 
f210: 7b 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 3c 63  {.ON CONFLICT <c
f220: 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68  onflict-algorith
f230: 6d 3e 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74 2d 61  m>.} {conflict-a
f240: 6c 67 6f 72 69 74 68 6d 7d 20 7b 0a 52 4f 4c 4c  lgorithm} {.ROLL
f250: 42 41 43 4b 20 7c 20 41 42 4f 52 54 20 7c 20 46  BACK | ABORT | F
f260: 41 49 4c 20 7c 20 49 47 4e 4f 52 45 20 7c 20 52  AIL | IGNORE | R
f270: 45 50 4c 41 43 45 0a 7d 0a 0a 70 75 74 73 20 7b  EPLACE.}..puts {
f280: 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
f290: 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
f2a0: 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
f2b0: 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
f2c0: 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
f2d0: 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
f2e0: 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
f2f0: 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
f300: 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
f310: 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
f320: 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
f330: 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
f340: 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
f350: 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
f360: 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
f370: 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
f380: 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66  .<p>The syntax f
f390: 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
f3a0: 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20  CT clause is as 
f3b0: 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a  shown above for.
f3c0: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
f3d0: 20 63 6f 6d 6d 61 6e 64 2e 20 20 46 6f 72 20 74   command.  For t
f3e0: 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50  he INSERT and.UP
f3f0: 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74  DATE commands, t
f400: 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20  he keywords "ON 
f410: 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65  CONFLICT" are re
f420: 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 2c 20  placed by "OR", 
f430: 74 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74  to make.the synt
f440: 61 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74  ax seem more nat
f450: 75 72 61 6c 2e 20 20 46 6f 72 20 65 78 61 6d 70  ural.  For examp
f460: 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
f470: 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
f480: 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
f490: 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
f4a0: 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
f4b0: 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
f4c0: 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
f4d0: 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
f4e0: 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
f4f0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
f500: 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
f510: 73 70 65 63 69 66 69 65 73 20 61 6e 20 61 6c 67  specifies an alg
f520: 6f 72 69 74 68 6d 20 75 73 65 64 20 74 6f 20 72  orithm used to r
f530: 65 73 6f 6c 76 65 0a 63 6f 6e 73 74 72 61 69 6e  esolve.constrain
f540: 74 20 63 6f 6e 66 6c 69 63 74 73 2e 20 20 54 68  t conflicts.  Th
f550: 65 72 65 20 61 72 65 20 66 69 76 65 20 63 68 6f  ere are five cho
f560: 69 63 65 73 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20  ices: ROLLBACK, 
f570: 41 42 4f 52 54 2c 0a 46 41 49 4c 2c 20 49 47 4e  ABORT,.FAIL, IGN
f580: 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
f590: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 61 6c  . The default al
f5a0: 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
f5b0: 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20  .  This.is what 
f5c0: 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a  they mean:</p>..
f5d0: 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c  <dl>.<dt><b>ROLL
f5e0: 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BACK</b></dt>.<d
f5f0: 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73  d><p>When a cons
f600: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
f610: 20 6f 63 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65   occurs, an imme
f620: 64 69 61 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f  diate ROLLBACK.o
f630: 63 63 75 72 73 2c 20 74 68 75 73 20 65 6e 64 69  ccurs, thus endi
f640: 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ng the current t
f650: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20  ransaction, and 
f660: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72  the command abor
f670: 74 73 0a 77 69 74 68 20 61 20 72 65 74 75 72 6e  ts.with a return
f680: 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
f690: 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 49 66 20  CONSTRAINT.  If 
f6a0: 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
f6b0: 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
f6c0: 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
f6d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
f6e0: 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
f6f0: 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
f700: 68 65 6e 20 74 68 69 73 20 61 6c 67 6f 72 69 74  hen this algorit
f710: 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  hm works the sam
f720: 65 20 61 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c  e as ABORT.</p><
f730: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
f740: 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
f750: 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72  <p>When a constr
f760: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
f770: 63 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61  ccurs, the comma
f780: 6e 64 20 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79  nd backs out.any
f790: 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 69   prior changes i
f7a0: 74 20 6d 69 67 68 74 20 68 61 76 65 20 6d 61 64  t might have mad
f7b0: 65 20 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74  e and aborts wit
f7c0: 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 0a  h a return code.
f7d0: 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  of SQLITE_CONSTR
f7e0: 41 49 4e 54 2e 20 20 42 75 74 20 6e 6f 20 52 4f  AINT.  But no RO
f7f0: 4c 4c 42 41 43 4b 20 69 73 20 65 78 65 63 75 74  LLBACK is execut
f800: 65 64 20 73 6f 20 63 68 61 6e 67 65 73 0a 66 72  ed so changes.fr
f810: 6f 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64  om prior command
f820: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
f830: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72  e transaction.ar
f840: 65 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 68  e preserved.  Th
f850: 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
f860: 74 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c  t behavior.</p><
f870: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
f880: 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
f890: 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  p>When a constra
f8a0: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
f8b0: 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e  curs, the comman
f8c0: 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 0a  d aborts with a.
f8d0: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
f8e0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20  TE_CONSTRAINT.  
f8f0: 42 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 20  But any changes 
f900: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
f910: 74 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61 6e 64  that.the command
f920: 20 6d 61 64 65 20 70 72 69 6f 72 20 74 6f 20 65   made prior to e
f930: 6e 63 6f 75 6e 74 65 72 69 6e 67 20 74 68 65 20  ncountering the 
f940: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f950: 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72 76  tion.are preserv
f960: 65 64 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 62  ed and are not b
f970: 61 63 6b 65 64 20 6f 75 74 2e 20 20 46 6f 72 20  acked out.  For 
f980: 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55  example, if an U
f990: 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20  PDATE.statement 
f9a0: 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f  encountered a co
f9b0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
f9c0: 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20  on on the 100th 
f9d0: 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65  row that.it atte
f9e0: 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20  mpts to update, 
f9f0: 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39  then the first 9
fa00: 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72  9 row changes ar
fa10: 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20  e preserved.but 
fa20: 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20  changes to rows 
fa30: 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e  100 and beyond n
fa40: 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c  ever occur.</p><
fa50: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e  /dd>..<dt><b>IGN
fa60: 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
fa70: 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74  ><p>When a const
fa80: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
fa90: 6f 63 63 75 72 73 2c 20 74 68 65 20 6f 6e 65 20  occurs, the one 
faa0: 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  row that contain
fab0: 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  s.the constraint
fac0: 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f   violation is no
fad0: 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 63 68  t inserted or ch
fae0: 61 6e 67 65 64 2e 20 20 42 75 74 20 74 68 65 20  anged.  But the 
faf0: 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65  command.continue
fb00: 73 20 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d  s executing norm
fb10: 61 6c 6c 79 2e 20 20 4f 74 68 65 72 20 72 6f 77  ally.  Other row
fb20: 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  s before and aft
fb30: 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  er the row that.
fb40: 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f  contained the co
fb50: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
fb60: 6f 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  on continue to b
fb70: 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  e inserted or up
fb80: 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20  dated.normally. 
fb90: 20 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74   No error is ret
fba0: 75 72 6e 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  urned.</p></dd>.
fbb0: 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c  .<dt><b>REPLACE<
fbc0: 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
fbd0: 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f  When a UNIQUE co
fbe0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
fbf0: 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 70  on occurs, the p
fc00: 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73  re-existing rows
fc10: 0a 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e  .that are causin
fc20: 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  g the constraint
fc30: 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
fc40: 65 6d 6f 76 65 64 20 70 72 69 6f 72 20 74 6f 20  emoved prior to 
fc50: 69 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75 70 64  inserting.or upd
fc60: 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  ating the curren
fc70: 74 20 72 6f 77 2e 20 20 54 68 75 73 20 74 68 65  t row.  Thus the
fc80: 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
fc90: 65 20 61 6c 77 61 79 73 20 6f 63 63 75 72 73 2e  e always occurs.
fca0: 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  .The command con
fcb0: 74 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67  tinues executing
fcc0: 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65   normally.  No e
fcd0: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
fce0: 2e 0a 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ..If a NOT NULL 
fcf0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
fd00: 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
fd10: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 72   NULL value is r
fd20: 65 70 6c 61 63 65 64 0a 62 79 20 74 68 65 20 64  eplaced.by the d
fd30: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
fd40: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49   that column.  I
fd50: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73  f the column has
fd60: 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75   no default.valu
fd70: 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52  e, then the ABOR
fd80: 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
fd90: 73 65 64 2e 20 20 49 66 20 61 20 43 48 45 43 4b  sed.  If a CHECK
fda0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
fdb0: 61 74 69 6f 6e 0a 6f 63 63 75 72 73 20 74 68 65  ation.occurs the
fdc0: 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 61 6c 67  n the IGNORE alg
fdd0: 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
fde0: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 69  /p>..<p>When thi
fdf0: 73 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  s conflict resol
fe00: 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64  ution strategy d
fe10: 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f  eletes rows in o
fe20: 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20  rder to.satisfy 
fe30: 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74  a constraint, it
fe40: 20 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65   does not invoke
fe50: 20 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73   delete triggers
fe60: 20 6f 6e 20 74 68 6f 73 65 0a 72 6f 77 73 2e 20   on those.rows. 
fe70: 20 54 68 69 73 20 62 65 68 61 76 69 6f 72 20 6d   This behavior m
fe80: 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61  ight change in a
fe90: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e   future release.
fea0: 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54  </p>.</dl>..<p>T
feb0: 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  he algorithm spe
fec0: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52  cified in the OR
fed0: 20 63 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53   clause of a INS
fee0: 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76  ERT or UPDATE.ov
fef0: 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f  errides any algo
ff00: 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
ff10: 69 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  in a CREATE TABL
ff20: 45 2e 0a 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74  E..If no algorit
ff30: 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20  hm is specified 
ff40: 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42  anywhere, the AB
ff50: 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
ff60: 20 75 73 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65   used.</p>.}..Se
ff70: 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65  ction REINDEX re
ff80: 69 6e 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73  index..Syntax {s
ff90: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
ffa0: 20 20 52 45 49 4e 44 45 58 20 3c 63 6f 6c 6c 61    REINDEX <colla
ffb0: 74 69 6f 6e 20 6e 61 6d 65 3e 0a 7d 0a 53 79 6e  tion name>.}.Syn
ffc0: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
ffd0: 6e 74 7d 20 7b 0a 20 20 52 45 49 4e 44 45 58 20  nt} {.  REINDEX 
ffe0: 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e  [<database-name>
fff0: 20 2e 5d 20 3c 74 61 62 6c 65 2f 69 6e 64 65 78   .] <table/index
10000 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b  -name>.}..puts {
10010 0a 3c 70 3e 54 68 65 20 52 45 49 4e 44 45 58 20  .<p>The REINDEX 
10020 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
10030 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65  to delete and re
10040 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66  create indices f
10050 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69  rom scratch..Thi
10060 73 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e  s is useful when
10070 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
10080 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  of a collation s
10090 65 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e  equence has chan
100a0 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  ged..</p>..<p>In
100b0 20 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d 2c   the first form,
100c0 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20   all indices in 
100d0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
100e0 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20  abases that use 
100f0 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74  the.named collat
10100 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72 65  ion sequence are
10110 20 72 65 63 72 65 61 74 65 64 2e 20 49 6e 20 74   recreated. In t
10120 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20  he second form, 
10130 69 66 20 0a 3c 69 3e 5b 64 61 74 61 62 61 73 65  if .<i>[database
10140 2d 6e 61 6d 65 2e 5d 74 61 62 6c 65 2f 69 6e 64  -name.]table/ind
10150 65 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e  ex-name</i> iden
10160 74 69 66 69 65 73 20 61 20 74 61 62 6c 65 2c 20  tifies a table, 
10170 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73  then all indices
10180 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
10190 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 72   the table are r
101a0 65 62 75 69 6c 74 2e 20 49 66 20 61 6e 20 69 6e  ebuilt. If an in
101b0 64 65 78 20 69 73 20 69 64 65 6e 74 69 66 69 65  dex is identifie
101c0 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69  d, then only.thi
101d0 73 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78  s specific index
101e0 20 69 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20   is deleted and 
101f0 72 65 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a  recreated..</p>.
10200 0a 3c 70 3e 49 66 20 6e 6f 20 3c 69 3e 64 61 74  .<p>If no <i>dat
10210 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69  abase-name</i> i
10220 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20  s specified and 
10230 74 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74  there exists bot
10240 68 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64  h a table or.ind
10250 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69  ex and a collati
10260 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  on sequence of t
10270 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d  he specified nam
10280 65 2c 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20  e, then indices 
10290 61 73 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20  associated.with 
102a0 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
102b0 71 75 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20  quence only are 
102c0 72 65 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54  reconstructed. T
102d0 68 69 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61  his ambiguity ma
102e0 79 20 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62  y be.dispelled b
102f0 79 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79  y always specify
10300 69 6e 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73  ing a <i>databas
10310 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20  e-name</i> when 
10320 72 65 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65  reindexing a.spe
10330 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69  cific table or i
10340 6e 64 65 78 2e 0a 7d 0a 0a 53 65 63 74 69 6f 6e  ndex..}..Section
10350 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65   REPLACE replace
10360 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  ..Syntax {sql-st
10370 61 74 65 6d 65 6e 74 7d 20 7b 0a 52 45 50 4c 41  atement} {.REPLA
10380 43 45 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61  CE INTO [<databa
10390 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62  se-name> .] <tab
103a0 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c  le-name> [( <col
103b0 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d 20 56 41 4c  umn-list> )] VAL
103c0 55 45 53 20 28 20 3c 76 61 6c 75 65 2d 6c 69 73  UES ( <value-lis
103d0 74 3e 20 29 20 7c 0a 52 45 50 4c 41 43 45 20 49  t> ) |.REPLACE I
103e0 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  NTO [<database-n
103f0 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
10400 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d 6e 2d  ame> [( <column-
10410 6c 69 73 74 3e 20 29 5d 20 3c 73 65 6c 65 63 74  list> )] <select
10420 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70  -statement>.}..p
10430 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 52 45 50  uts {.<p>The REP
10440 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  LACE command is 
10450 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
10460 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c   "INSERT OR REPL
10470 41 43 45 22 20 76 61 72 69 61 6e 74 0a 6f 66 20  ACE" variant.of 
10480 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 69 6e  the <a href="#in
10490 73 65 72 74 22 3e 49 4e 53 45 52 54 3c 2f 61 3e  sert">INSERT</a>
104a0 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20   command.  This 
104b0 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65  alias is provide
104c0 64 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c  d for.compatibil
104d0 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2e 20  ity with MySQL. 
104e0 20 53 65 65 20 74 68 65 20 0a 3c 61 20 68 72 65   See the .<a hre
104f0 66 3d 22 23 69 6e 73 65 72 74 22 3e 49 4e 53 45  f="#insert">INSE
10500 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20 64  RT</a> command d
10510 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
10520 20 61 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f   additional.info
10530 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 7d  rmation.</p>  .}
10540 0a 0a 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43  ...Section SELEC
10550 54 20 73 65 6c 65 63 74 0a 0a 53 79 6e 74 61 78  T select..Syntax
10560 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
10570 20 7b 0a 53 45 4c 45 43 54 20 5b 41 4c 4c 20 7c   {.SELECT [ALL |
10580 20 44 49 53 54 49 4e 43 54 5d 20 3c 72 65 73 75   DISTINCT] <resu
10590 6c 74 3e 20 5b 46 52 4f 4d 20 3c 74 61 62 6c 65  lt> [FROM <table
105a0 2d 6c 69 73 74 3e 5d 0a 5b 57 48 45 52 45 20 3c  -list>].[WHERE <
105b0 65 78 70 72 3e 5d 0a 5b 47 52 4f 55 50 20 42 59  expr>].[GROUP BY
105c0 20 3c 65 78 70 72 2d 6c 69 73 74 3e 5d 0a 5b 48   <expr-list>].[H
105d0 41 56 49 4e 47 20 3c 65 78 70 72 3e 5d 0a 5b 3c  AVING <expr>].[<
105e0 63 6f 6d 70 6f 75 6e 64 2d 6f 70 3e 20 3c 73 65  compound-op> <se
105f0 6c 65 63 74 3e 5d 2a 0a 5b 4f 52 44 45 52 20 42  lect>]*.[ORDER B
10600 59 20 3c 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73  Y <sort-expr-lis
10610 74 3e 5d 0a 5b 4c 49 4d 49 54 20 3c 69 6e 74 65  t>].[LIMIT <inte
10620 67 65 72 3e 20 5b 4c 50 20 4f 46 46 53 45 54 20  ger> [LP OFFSET 
10630 7c 20 2c 20 52 50 20 3c 69 6e 74 65 67 65 72 3e  | , RP <integer>
10640 5d 5d 0a 7d 20 7b 72 65 73 75 6c 74 7d 20 7b 0a  ]].} {result} {.
10650 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 3e 20  <result-column> 
10660 5b 2c 20 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  [, <result-colum
10670 6e 3e 5d 2a 0a 7d 20 7b 72 65 73 75 6c 74 2d 63  n>]*.} {result-c
10680 6f 6c 75 6d 6e 7d 20 7b 0a 53 54 41 52 20 7c 20  olumn} {.STAR | 
10690 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 2e 20 53  <table-name> . S
106a0 54 41 52 20 7c 20 3c 65 78 70 72 3e 20 5b 20 5b  TAR | <expr> [ [
106b0 41 53 5d 20 3c 73 74 72 69 6e 67 3e 20 5d 0a 7d  AS] <string> ].}
106c0 20 7b 74 61 62 6c 65 2d 6c 69 73 74 7d 20 7b 0a   {table-list} {.
106d0 3c 74 61 62 6c 65 3e 20 5b 3c 6a 6f 69 6e 2d 6f  <table> [<join-o
106e0 70 3e 20 3c 74 61 62 6c 65 3e 20 3c 6a 6f 69 6e  p> <table> <join
106f0 2d 61 72 67 73 3e 5d 2a 0a 7d 20 7b 74 61 62 6c  -args>]*.} {tabl
10700 65 7d 20 7b 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65  e} {.<table-name
10710 3e 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 20 7c  > [AS <alias>] |
10720 0a 28 20 3c 73 65 6c 65 63 74 3e 20 29 20 5b 41  .( <select> ) [A
10730 53 20 3c 61 6c 69 61 73 3e 5d 0a 7d 20 7b 6a 6f  S <alias>].} {jo
10740 69 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c 20 5b 4e 41  in-op} {., | [NA
10750 54 55 52 41 4c 5d 20 5b 4c 45 46 54 20 7c 20 52  TURAL] [LEFT | R
10760 49 47 48 54 20 7c 20 46 55 4c 4c 5d 20 5b 4f 55  IGHT | FULL] [OU
10770 54 45 52 20 7c 20 49 4e 4e 45 52 20 7c 20 43 52  TER | INNER | CR
10780 4f 53 53 5d 20 4a 4f 49 4e 0a 7d 20 7b 6a 6f 69  OSS] JOIN.} {joi
10790 6e 2d 61 72 67 73 7d 20 7b 0a 5b 4f 4e 20 3c 65  n-args} {.[ON <e
107a0 78 70 72 3e 5d 20 5b 55 53 49 4e 47 20 28 20 3c  xpr>] [USING ( <
107b0 69 64 2d 6c 69 73 74 3e 20 29 5d 0a 7d 20 7b 73  id-list> )].} {s
107c0 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74 7d 20 7b  ort-expr-list} {
107d0 0a 3c 65 78 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f  .<expr> [<sort-o
107e0 72 64 65 72 3e 5d 20 5b 2c 20 3c 65 78 70 72 3e  rder>] [, <expr>
107f0 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e 5d 5d   [<sort-order>]]
10800 2a 0a 7d 20 7b 73 6f 72 74 2d 6f 72 64 65 72 7d  *.} {sort-order}
10810 20 7b 0a 5b 20 43 4f 4c 4c 41 54 45 20 3c 63 6f   {.[ COLLATE <co
10820 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 20 5d 20  llation-name> ] 
10830 5b 20 41 53 43 20 7c 20 44 45 53 43 20 5d 0a 7d  [ ASC | DESC ].}
10840 20 7b 63 6f 6d 70 6f 75 6e 64 5f 6f 70 7d 20 7b   {compound_op} {
10850 0a 55 4e 49 4f 4e 20 7c 20 55 4e 49 4f 4e 20 41  .UNION | UNION A
10860 4c 4c 20 7c 20 49 4e 54 45 52 53 45 43 54 20 7c  LL | INTERSECT |
10870 20 45 58 43 45 50 54 0a 7d 0a 0a 70 75 74 73 20   EXCEPT.}..puts 
10880 7b 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  {.<p>The SELECT 
10890 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
108a0 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64  d to query the d
108b0 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65  atabase.  The.re
108c0 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54  sult of a SELECT
108d0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
108e0 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68   rows of data wh
108f0 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73  ere each row.has
10900 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20   a fixed number 
10910 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65  of columns.  The
10920 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
10930 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74  ns in the.result
10940 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
10950 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10960 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20  list in between 
10970 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46  the.SELECT and F
10980 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 41  ROM keywords.  A
10990 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78 70  ny arbitrary exp
109a0 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
109b0 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e  sed.as a result.
109c0 20 20 49 66 20 61 20 72 65 73 75 6c 74 20 65 78    If a result ex
109d0 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a 70 75  pression is }.pu
109e0 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d  ts "[Operator *]
109f0 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
10a00 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
10a10 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64 22  are substituted"
10a20 0a 70 75 74 73 20 7b 66 6f 72 20 74 68 61 74 20  .puts {for that 
10a30 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  one expression. 
10a40 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
10a50 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  on is the name o
10a60 66 7d 0a 70 75 74 73 20 22 61 20 74 61 62 6c 65  f}.puts "a table
10a70 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70   followed by [Op
10a80 65 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20  erator .*] then 
10a90 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
10aa0 6c 20 63 6f 6c 75 6d 6e 73 22 0a 70 75 74 73 20  l columns".puts 
10ab0 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20 74 61 62  {in that one tab
10ac0 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  le.</p>..<p>The 
10ad0 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
10ae0 20 63 61 75 73 65 73 20 61 20 73 75 62 73 65 74   causes a subset
10af0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
10b00 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2c 20  to be returned, 
10b10 0a 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 72  .in which each r
10b20 65 73 75 6c 74 20 72 6f 77 20 69 73 20 64 69 66  esult row is dif
10b30 66 65 72 65 6e 74 2e 20 20 4e 55 4c 4c 20 76 61  ferent.  NULL va
10b40 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 74 72 65  lues are not tre
10b50 61 74 65 64 20 61 73 20 0a 64 69 73 74 69 6e 63  ated as .distinc
10b60 74 20 66 72 6f 6d 20 65 61 63 68 20 6f 74 68 65  t from each othe
10b70 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
10b80 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 61 74  behavior is that
10b90 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73   all result rows
10ba0 20 0a 62 65 20 72 65 74 75 72 6e 65 64 2c 20 77   .be returned, w
10bb0 68 69 63 68 20 63 61 6e 20 62 65 20 6d 61 64 65  hich can be made
10bc0 20 65 78 70 6c 69 63 69 74 20 77 69 74 68 20 74   explicit with t
10bd0 68 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c 2e 3c  he keyword ALL.<
10be0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 71 75 65 72  /p>..<p>The quer
10bf0 79 20 69 73 20 65 78 65 63 75 74 65 64 20 61 67  y is executed ag
10c00 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72  ainst one or mor
10c10 65 20 74 61 62 6c 65 73 20 73 70 65 63 69 66 69  e tables specifi
10c20 65 64 20 61 66 74 65 72 0a 74 68 65 20 46 52 4f  ed after.the FRO
10c30 4d 20 6b 65 79 77 6f 72 64 2e 20 20 49 66 20 6d  M keyword.  If m
10c40 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20 6e  ultiple tables n
10c50 61 6d 65 73 20 61 72 65 20 73 65 70 61 72 61 74  ames are separat
10c60 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a 74 68  ed by commas,.th
10c70 65 6e 20 74 68 65 20 71 75 65 72 79 20 69 73 20  en the query is 
10c80 61 67 61 69 6e 73 74 20 74 68 65 20 63 72 6f 73  against the cros
10c90 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20 76 61  s join of the va
10ca0 72 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a 54 68  rious tables..Th
10cb0 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f  e full SQL-92 jo
10cc0 69 6e 20 73 79 6e 74 61 78 20 63 61 6e 20 61 6c  in syntax can al
10cd0 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 70  so be used to sp
10ce0 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a 41 20 73  ecify joins..A s
10cf0 75 62 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65  ub-query.in pare
10d00 6e 74 68 65 73 65 73 20 6d 61 79 20 62 65 20 73  ntheses may be s
10d10 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 61  ubstituted for a
10d20 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  ny table name in
10d30 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
10d40 2e 0a 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f  ..The entire FRO
10d50 4d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20  M clause may be 
10d60 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63  omitted, in whic
10d70 68 20 63 61 73 65 20 74 68 65 20 72 65 73 75 6c  h case the resul
10d80 74 20 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f  t is a.single ro
10d90 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  w consisting of 
10da0 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
10db0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  e expression lis
10dc0 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  t..</p>..<p>The 
10dd0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e  WHERE clause can
10de0 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   be used to limi
10df0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
10e00 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63 68 20  rows over.which 
10e10 74 68 65 20 71 75 65 72 79 20 6f 70 65 72 61 74  the query operat
10e20 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  es.</p>..<p>The 
10e30 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 73  GROUP BY clauses
10e40 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20 6d   causes one or m
10e50 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20  ore rows of the 
10e60 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f 6d  result to.be com
10e70 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  bined into a sin
10e80 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  gle row of outpu
10e90 74 2e 20 20 54 68 69 73 20 69 73 20 65 73 70 65  t.  This is espe
10ea0 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77 68  cially useful.wh
10eb0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  en the result co
10ec0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
10ed0 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65   functions.  The
10ee0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 0a   expressions in.
10ef0 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
10f00 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f  use do <em>not</
10f10 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65  em> have to be e
10f20 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 0a  xpressions that.
10f30 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 72 65  appear in the re
10f40 73 75 6c 74 2e 20 20 54 68 65 20 48 41 56 49 4e  sult.  The HAVIN
10f50 47 20 63 6c 61 75 73 65 20 69 73 20 73 69 6d 69  G clause is simi
10f60 6c 61 72 20 74 6f 20 57 48 45 52 45 20 65 78 63  lar to WHERE exc
10f70 65 70 74 0a 74 68 61 74 20 48 41 56 49 4e 47 20  ept.that HAVING 
10f80 61 70 70 6c 69 65 73 20 61 66 74 65 72 20 67 72  applies after gr
10f90 6f 75 70 69 6e 67 20 68 61 73 20 6f 63 63 75 72  ouping has occur
10fa0 72 65 64 2e 20 20 54 68 65 20 48 41 56 49 4e 47  red.  The HAVING
10fb0 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61 79 20   expression.may 
10fc0 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c  refer to values,
10fd0 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20   even aggregate 
10fe0 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20  functions, that 
10ff0 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72  are not in the r
11000 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  esult.</p>..<p>T
11010 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
11020 73 65 20 63 61 75 73 65 73 20 74 68 65 20 6f 75  se causes the ou
11030 74 70 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20  tput rows to be 
11040 73 6f 72 74 65 64 2e 20 20 0a 54 68 65 20 61 72  sorted.  .The ar
11050 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52 20  gument to ORDER 
11060 42 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  BY is a list of 
11070 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
11080 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
11090 0a 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f 72  .key for the sor
110a0 74 2e 20 20 54 68 65 20 65 78 70 72 65 73 73 69  t.  The expressi
110b0 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  ons do not have 
110c0 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20 74 68  to be part of th
110d0 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73  e.result for a s
110e0 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75  imple SELECT, bu
110f0 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
11100 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74  SELECT each sort
11110 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74  .expression must
11120 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f   exactly match o
11130 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ne of the result
11140 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 61 63 68 0a   columns.  Each.
11150 73 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sort expression 
11160 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c  may be optionall
11170 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  y followed by a 
11180 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64 20  COLLATE keyword 
11190 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20  and.the name of 
111a0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
111b0 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f 72  tion used for or
111c0 64 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64 2f  dering text and/
111d0 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43 20  or.keywords ASC 
111e0 6f 72 20 44 45 53 43 20 74 6f 20 73 70 65 63 69  or DESC to speci
111f0 66 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65  fy the sort orde
11200 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c  r.</p>..<p>The L
11210 49 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63  IMIT clause plac
11220 65 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  es an upper boun
11230 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  d on the number 
11240 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64  of rows.returned
11250 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20   in the result. 
11260 20 41 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49   A negative LIMI
11270 54 20 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75  T indicates no u
11280 70 70 65 72 20 62 6f 75 6e 64 2e 0a 54 68 65 20  pper bound..The 
11290 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20  optional OFFSET 
112a0 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20  following LIMIT 
112b0 73 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61  specifies how ma
112c0 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20  ny.rows to skip 
112d0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
112e0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   of the result s
112f0 65 74 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  et..In a compoun
11300 64 20 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d  d query, the LIM
11310 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e  IT clause may on
11320 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65  ly appear on the
11330 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74  .final SELECT st
11340 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6c 69 6d  atement..The lim
11350 69 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f  it is applied to
11360 20 74 68 65 20 65 6e 74 69 72 65 20 71 75 65 72   the entire quer
11370 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64  y not.to the ind
11380 69 76 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73  ividual SELECT s
11390 74 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63  tatement to whic
113a0 68 20 69 74 20 69 73 20 61 74 74 61 63 68 65 64  h it is attached
113b0 2e 0a 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74  ..Note that if t
113c0 68 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72  he OFFSET keywor
113d0 64 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  d is used in the
113e0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
113f0 68 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73  hen the.limit is
11400 20 74 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65   the first numbe
11410 72 20 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74  r and the offset
11420 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e   is the second n
11430 75 6d 62 65 72 2e 20 20 49 66 20 61 0a 63 6f 6d  umber.  If a.com
11440 6d 61 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  ma is used inste
11450 61 64 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54  ad of the OFFSET
11460 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74   keyword, then t
11470 68 65 20 6f 66 66 73 65 74 20 69 73 20 74 68 65  he offset is the
11480 0a 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e  .first number an
11490 64 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74  d the limit is t
114a0 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72  he second number
114b0 2e 20 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a  .  This seeming.
114c0 63 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20  contradition is 
114d0 69 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74  intentional - it
114e0 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61   maximizes compa
114f0 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65  tibility with le
11500 67 61 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73  gacy.SQL databas
11510 65 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a  e systems..</p>.
11520 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53  .<p>A compound S
11530 45 4c 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20  ELECT is formed 
11540 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65  from two or more
11550 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20   simple SELECTs 
11560 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65  connected.by one
11570 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   of the operator
11580 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  s UNION, UNION A
11590 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f  LL, INTERSECT, o
115a0 72 20 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20  r EXCEPT.  In.a 
115b0 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
115c0 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74   all the constit
115d0 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73  uent SELECTs mus
115e0 74 20 73 70 65 63 69 66 79 20 74 68 65 0a 73 61  t specify the.sa
115f0 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  me number of res
11600 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68  ult columns.  Th
11610 65 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20  ere may be only 
11620 61 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42  a single ORDER B
11630 59 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20  Y.clause at the 
11640 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f  end of the compo
11650 75 6e 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65  und SELECT.  The
11660 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e   UNION and UNION
11670 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63   ALL.operators c
11680 6f 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ombine the resul
11690 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ts of the SELECT
116a0 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61  s to the right a
116b0 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73  nd left into.a s
116c0 69 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e  ingle big table.
116d0 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
116e0 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f   is that in UNIO
116f0 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77  N all result row
11700 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20 77  s.are distinct w
11710 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c  here in UNION AL
11720 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 64  L there may be d
11730 75 70 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49  uplicates..The I
11740 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
11750 72 20 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65  r takes the inte
11760 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
11770 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c  results of the.l
11780 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 53 45  eft and right SE
11790 4c 45 43 54 73 2e 20 20 45 58 43 45 50 54 20 74  LECTs.  EXCEPT t
117a0 61 6b 65 73 20 74 68 65 20 72 65 73 75 6c 74 20  akes the result 
117b0 6f 66 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61  of left SELECT a
117c0 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68  fter.removing th
117d0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
117e0 20 72 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20   right SELECT.  
117f0 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f  When three or mo
11800 72 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63  re SELECTs.are c
11810 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20  onnected into a 
11820 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67  compound, they g
11830 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74  roup from left t
11840 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 7d 0a 0a  o right.</p>.}..
11850 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
11860 75 70 64 61 74 65 0a 0a 53 79 6e 74 61 78 20 7b  update..Syntax {
11870 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
11880 0a 55 50 44 41 54 45 20 5b 20 4f 52 20 3c 63 6f  .UPDATE [ OR <co
11890 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d  nflict-algorithm
118a0 3e 20 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  > ] [<database-n
118b0 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
118c0 61 6d 65 3e 0a 53 45 54 20 3c 61 73 73 69 67 6e  ame>.SET <assign
118d0 6d 65 6e 74 3e 20 5b 2c 20 3c 61 73 73 69 67 6e  ment> [, <assign
118e0 6d 65 6e 74 3e 5d 2a 0a 5b 57 48 45 52 45 20 3c  ment>]*.[WHERE <
118f0 65 78 70 72 3e 5d 0a 7d 20 7b 61 73 73 69 67 6e  expr>].} {assign
11900 6d 65 6e 74 7d 20 7b 0a 3c 63 6f 6c 75 6d 6e 2d  ment} {.<column-
11910 6e 61 6d 65 3e 20 3d 20 3c 65 78 70 72 3e 0a 7d  name> = <expr>.}
11920 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
11930 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
11940 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e   is used to chan
11950 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
11960 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c 65  columns in .sele
11970 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20 74  cted rows of a t
11980 61 62 6c 65 2e 20 20 45 61 63 68 20 61 73 73 69  able.  Each assi
11990 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50 44  gnment in an UPD
119a0 41 54 45 20 73 70 65 63 69 66 69 65 73 0a 61 20  ATE specifies.a 
119b0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74  column name to t
119c0 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65  he left of the e
119d0 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61  quals sign and a
119e0 6e 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72  n arbitrary expr
119f0 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72 69  ession.to the ri
11a00 67 68 74 2e 20 20 54 68 65 20 65 78 70 72 65 73  ght.  The expres
11a10 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20 74 68  sions may use th
11a20 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74 68 65  e values of othe
11a30 72 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c 20 65  r columns..All e
11a40 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
11a50 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
11a60 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20  any assignments 
11a70 61 72 65 20 6d 61 64 65 2e 0a 41 20 57 48 45 52  are made..A WHER
11a80 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  E clause can be 
11a90 75 73 65 64 20 74 6f 20 72 65 73 74 72 69 63 74  used to restrict
11aa0 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65 20   which rows are 
11ab0 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  updated.</p>..<p
11ac0 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  >The optional co
11ad0 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c  nflict-clause al
11ae0 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
11af0 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
11b00 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
11b10 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
11b20 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
11b30 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
11b40 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64  this one command
11b50 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
11b60 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66  n titled.<a href
11b70 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20  ="#conflict">ON 
11b80 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72  CONFLICT</a> for
11b90 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
11ba0 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a  rmation.</p>.}..
11bb0 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20  .Section VACUUM 
11bc0 76 61 63 75 75 6d 0a 0a 53 79 6e 74 61 78 20 7b  vacuum..Syntax {
11bd0 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
11be0 0a 56 41 43 55 55 4d 20 5b 3c 69 6e 64 65 78 2d  .VACUUM [<index-
11bf0 6f 72 2d 74 61 62 6c 65 2d 6e 61 6d 65 3e 5d 0a  or-table-name>].
11c00 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
11c10 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
11c20 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65 78 74  is an SQLite ext
11c30 65 6e 73 69 6f 6e 20 6d 6f 64 65 6c 65 64 20 61  ension modeled a
11c40 66 74 65 72 20 61 20 73 69 6d 69 6c 61 72 0a 63  fter a similar.c
11c50 6f 6d 6d 61 6e 64 20 66 6f 75 6e 64 20 69 6e 20  ommand found in 
11c60 50 6f 73 74 67 72 65 53 51 4c 2e 20 20 49 66 20  PostgreSQL.  If 
11c70 56 41 43 55 55 4d 20 69 73 20 69 6e 76 6f 6b 65  VACUUM is invoke
11c80 64 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  d with the name 
11c90 6f 66 20 61 0a 74 61 62 6c 65 20 6f 72 20 69 6e  of a.table or in
11ca0 64 65 78 20 74 68 65 6e 20 69 74 20 69 73 20 73  dex then it is s
11cb0 75 70 70 6f 73 65 20 74 6f 20 63 6c 65 61 6e 20  uppose to clean 
11cc0 75 70 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  up the named tab
11cd0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 49 6e 20  le or index..In 
11ce0 76 65 72 73 69 6f 6e 20 31 2e 30 20 6f 66 20 53  version 1.0 of S
11cf0 51 4c 69 74 65 2c 20 74 68 65 20 56 41 43 55 55  QLite, the VACUU
11d00 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 75 6c 64 20  M command would 
11d10 69 6e 76 6f 6b 65 20 0a 3c 62 3e 67 64 62 6d 5f  invoke .<b>gdbm_
11d20 72 65 6f 72 67 61 6e 69 7a 65 28 29 3c 2f 62 3e  reorganize()</b>
11d30 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65   to clean up the
11d40 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62 61 73   backend databas
11d50 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
11d60 0a 56 41 43 55 55 4d 20 62 65 63 61 6d 65 20 61  .VACUUM became a
11d70 20 6e 6f 2d 6f 70 20 77 68 65 6e 20 74 68 65 20   no-op when the 
11d80 47 44 42 4d 20 62 61 63 6b 65 6e 64 20 77 61 73  GDBM backend was
11d90 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 53 51   removed from.SQ
11da0 4c 49 54 45 20 69 6e 20 76 65 72 73 69 6f 6e 20  LITE in version 
11db0 32 2e 30 2e 30 2e 0a 56 41 43 55 55 4d 20 77 61  2.0.0..VACUUM wa
11dc0 73 20 72 65 69 6d 70 6c 65 6d 65 6e 74 65 64 20  s reimplemented 
11dd0 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e 38 2e 31  in version 2.8.1
11de0 2e 0a 54 68 65 20 69 6e 64 65 78 20 6f 72 20 74  ..The index or t
11df0 61 62 6c 65 20 6e 61 6d 65 20 61 72 67 75 6d 65  able name argume
11e00 6e 74 20 69 73 20 6e 6f 77 20 69 67 6e 6f 72 65  nt is now ignore
11e10 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e  d..</p>..<p>When
11e20 20 61 6e 20 6f 62 6a 65 63 74 20 28 74 61 62 6c   an object (tabl
11e30 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20 74 72 69  e, index, or tri
11e40 67 67 65 72 29 20 69 73 20 64 72 6f 70 70 65 64  gger) is dropped
11e50 20 66 72 6f 6d 20 74 68 65 20 0a 64 61 74 61 62   from the .datab
11e60 61 73 65 2c 20 69 74 20 6c 65 61 76 65 73 20 62  ase, it leaves b
11e70 65 68 69 6e 64 20 65 6d 70 74 79 20 73 70 61 63  ehind empty spac
11e80 65 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  e.  This makes t
11e90 68 65 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  he database .fil
11ea0 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 69 74  e larger than it
11eb0 20 6e 65 65 64 73 20 74 6f 20 62 65 2c 20 62 75   needs to be, bu
11ec0 74 20 63 61 6e 20 73 70 65 65 64 20 75 70 20 69  t can speed up i
11ed0 6e 73 65 72 74 73 2e 20 20 49 6e 20 74 69 6d 65  nserts.  In time
11ee0 20 0a 69 6e 73 65 72 74 73 20 61 6e 64 20 64 65   .inserts and de
11ef0 6c 65 74 65 73 20 63 61 6e 20 6c 65 61 76 65 20  letes can leave 
11f00 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
11f10 65 20 73 74 72 75 63 74 75 72 65 20 66 72 61 67  e structure frag
11f20 6d 65 6e 74 65 64 2c 20 0a 77 68 69 63 68 20 73  mented, .which s
11f30 6c 6f 77 73 20 64 6f 77 6e 20 64 69 73 6b 20 61  lows down disk a
11f40 63 63 65 73 73 20 74 6f 20 74 68 65 20 64 61 74  ccess to the dat
11f50 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 73 2e 0a  abase contents..
11f60 0a 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  .The VACUUM comm
11f70 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d  and cleans.the m
11f80 61 69 6e 20 64 61 74 61 62 61 73 65 20 62 79 20  ain database by 
11f90 63 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e 74  copying its cont
11fa0 65 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f 72  ents to a tempor
11fb0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
11fc0 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67  e and .reloading
11fd0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
11fe0 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f 6d  tabase file from
11ff0 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69 73   the copy.  This
12000 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72 65   eliminates .fre
12010 65 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e 73  e pages,  aligns
12020 20 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20 62   table data to b
12030 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e  e contiguous, an
12040 64 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65 61  d otherwise clea
12050 6e 73 20 0a 75 70 20 74 68 65 20 64 61 74 61 62  ns .up the datab
12060 61 73 65 20 66 69 6c 65 20 73 74 72 75 63 74 75  ase file structu
12070 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 56 41 43 55  re.</p>..<p>VACU
12080 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  UM only works on
12090 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
120a0 73 65 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70 6f  se..It is not po
120b0 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d  ssible to VACUUM
120c0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
120d0 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
120e0 0a 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20 63  .<p>The VACUUM c
120f0 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c  ommand will fail
12100 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
12110 61 63 74 69 76 65 20 74 72 61 6e 73 61 63 74 69  active transacti
12120 6f 6e 2e 0a 54 68 65 20 56 41 43 55 55 4d 20 63  on..The VACUUM c
12130 6f 6d 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f  ommand is a no-o
12140 70 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79 20  p for in-memory 
12150 64 61 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a 0a  databases.</p>..
12160 3c 70 3e 41 73 20 6f 66 20 53 51 4c 69 74 65 20  <p>As of SQLite 
12170 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20  version 3.1, an 
12180 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75  alternative to u
12190 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20  sing the VACUUM 
121a0 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f 2d  command.is auto-
121b0 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61  vacuum mode, ena
121c0 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a  bled using the .
121d0 3c 61 20 68 72 65 66 3d 22 70 72 61 67 6d 61 2e  <a href="pragma.
121e0 68 74 6d 6c 23 70 72 61 67 6d 61 5f 61 75 74 6f  html#pragma_auto
121f0 5f 76 61 63 75 75 6d 22 3e 61 75 74 6f 5f 76 61  _vacuum">auto_va
12200 63 75 75 6d 20 70 72 61 67 6d 61 3c 2f 61 3e 2e  cuum pragma</a>.
12210 0a 57 68 65 6e 20 61 75 74 6f 2d 76 61 63 75 75  .When auto-vacuu
12220 6d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72  m is enabled for
12230 20 61 20 64 61 74 61 62 61 73 65 2c 20 6c 61 72   a database, lar
12240 67 65 20 64 65 6c 65 74 65 73 20 63 61 75 73 65  ge deletes cause
12250 0a 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65  .the size of the
12260 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
12270 6f 20 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65 76  o shrink.  Howev
12280 65 72 2c 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a  er, auto-vacuum.
12290 61 6c 73 6f 20 63 61 75 73 65 73 20 65 78 63 65  also causes exce
122a0 73 73 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e  ss fragmentation
122b0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
122c0 20 66 69 6c 65 2e 20 20 41 6e 64 20 61 75 74 6f   file.  And auto
122d0 2d 76 61 63 75 75 6d 0a 64 6f 65 73 20 6e 6f 74  -vacuum.does not
122e0 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c   compact partial
122f0 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
12300 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
12310 61 73 20 56 41 43 55 55 4d 0a 64 6f 65 73 2e 0a  as VACUUM.does..
12320 3c 2f 70 3e 0a 7d 0a 0a 23 20 41 20 6c 69 73 74  </p>.}..# A list
12330 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41   of keywords.  A
12340 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73   asterisk occurs
12350 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f   after the keywo
12360 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23  rd if it is on.#
12370 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69   the fallback li
12380 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72  st..#.set keywor
12390 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a  d_list [lsort {.
123a0 20 20 20 41 42 4f 52 54 2a 0a 20 20 20 41 44 44     ABORT*.   ADD
123b0 0a 20 20 20 41 46 54 45 52 2a 0a 20 20 20 41 4c  .   AFTER*.   AL
123c0 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e  L.   ALTER.   AN
123d0 41 4c 59 5a 45 2a 0a 20 20 20 41 4e 44 0a 20 20  ALYZE*.   AND.  
123e0 20 41 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41   AS.   ASC*.   A
123f0 54 54 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e  TTACH*.   AUTOIN
12400 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52  CREMENT.   BEFOR
12410 45 2a 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20  E*.   BEGIN*.   
12420 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20  BETWEEN.   BY.  
12430 20 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53   CASCADE*.   CAS
12440 45 0a 20 20 20 43 41 53 54 2a 0a 20 20 20 43 48  E.   CAST*.   CH
12450 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20  ECK.   COLLATE. 
12460 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46    COMMIT.   CONF
12470 4c 49 43 54 2a 0a 20 20 20 43 4f 4e 53 54 52 41  LICT*.   CONSTRA
12480 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20  INT.   CREATE.  
12490 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e   CROSS.   CURREN
124a0 54 5f 44 41 54 45 2a 0a 20 20 20 43 55 52 52 45  T_DATE*.   CURRE
124b0 4e 54 5f 54 49 4d 45 2a 0a 20 20 20 43 55 52 52  NT_TIME*.   CURR
124c0 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2a 0a 20  ENT_TIMESTAMP*. 
124d0 20 20 44 41 54 41 42 41 53 45 2a 0a 20 20 20 44    DATABASE*.   D
124e0 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52  EFAULT.   DEFERR
124f0 45 44 2a 0a 20 20 20 44 45 46 45 52 52 41 42 4c  ED*.   DEFERRABL
12500 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44  E.   DELETE.   D
12510 45 53 43 2a 0a 20 20 20 44 45 54 41 43 48 2a 0a  ESC*.   DETACH*.
12520 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44     DISTINCT.   D
12530 52 4f 50 0a 20 20 20 45 4e 44 2a 0a 20 20 20 45  ROP.   END*.   E
12540 41 43 48 2a 0a 20 20 20 45 4c 53 45 0a 20 20 20  ACH*.   ELSE.   
12550 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54  ESCAPE.   EXCEPT
12560 0a 20 20 20 45 58 43 4c 55 53 49 56 45 2a 0a 20  .   EXCLUSIVE*. 
12570 20 20 45 58 50 4c 41 49 4e 2a 0a 20 20 20 46 41    EXPLAIN*.   FA
12580 49 4c 2a 0a 20 20 20 46 4f 52 2a 0a 20 20 20 46  IL*.   FOR*.   F
12590 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20  OREIGN.   FROM. 
125a0 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 2a 0a    FULL.   GLOB*.
125b0 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49     GROUP.   HAVI
125c0 4e 47 0a 20 20 20 49 46 2a 0a 20 20 20 49 47 4e  NG.   IF*.   IGN
125d0 4f 52 45 2a 0a 20 20 20 49 4d 4d 45 44 49 41 54  ORE*.   IMMEDIAT
125e0 45 2a 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45  E*.   IN.   INDE
125f0 58 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a  X.   INITIALLY*.
12600 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45     INNER.   INSE
12610 52 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20  RT.   INSTEAD*. 
12620 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49    INTERSECT.   I
12630 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e  NTO.   IS.   ISN
12640 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b  ULL.   JOIN.   K
12650 45 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c  EY*.   LEFT.   L
12660 49 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20  IKE*.   LIMIT.  
12670 20 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52   MATCH*.   NATUR
12680 41 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54  AL.   NOT.   NOT
12690 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20  NULL.   NULL.   
126a0 4f 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20  OF*.   OFFSET*. 
126b0 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52    ON.   OR.   OR
126c0 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20  DER.   OUTER.   
126d0 50 4c 41 4e 2a 0a 20 20 20 50 52 41 47 4d 41 2a  PLAN*.   PRAGMA*
126e0 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51  .   PRIMARY.   Q
126f0 55 45 52 59 2a 0a 20 20 20 52 41 49 53 45 2a 0a  UERY*.   RAISE*.
12700 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
12710 20 52 45 49 4e 44 45 58 2a 0a 20 20 20 52 45 4e   REINDEX*.   REN
12720 41 4d 45 2a 0a 20 20 20 52 45 50 4c 41 43 45 2a  AME*.   REPLACE*
12730 0a 20 20 20 52 45 53 54 52 49 43 54 2a 0a 20 20  .   RESTRICT*.  
12740 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41   RIGHT.   ROLLBA
12750 43 4b 0a 20 20 20 52 4f 57 2a 0a 20 20 20 53 45  CK.   ROW*.   SE
12760 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54  LECT.   SET.   T
12770 41 42 4c 45 0a 20 20 20 54 45 4d 50 2a 0a 20 20  ABLE.   TEMP*.  
12780 20 54 45 4d 50 4f 52 41 52 59 2a 0a 20 20 20 54   TEMPORARY*.   T
12790 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41  HEN.   TO.   TRA
127a0 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47  NSACTION.   TRIG
127b0 47 45 52 2a 0a 20 20 20 55 4e 49 4f 4e 0a 20 20  GER*.   UNION.  
127c0 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54   UNIQUE.   UPDAT
127d0 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41  E.   USING.   VA
127e0 43 55 55 4d 2a 0a 20 20 20 56 41 4c 55 45 53 0a  CUUM*.   VALUES.
127f0 20 20 20 56 49 45 57 2a 0a 20 20 20 56 49 52 54     VIEW*.   VIRT
12800 55 41 4c 2a 0a 20 20 20 57 48 45 4e 0a 20 20 20  UAL*.   WHEN.   
12810 57 48 45 52 45 0a 7d 5d 0a 0a 0a 0a 70 75 74 73  WHERE.}]....puts
12820 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64   {<DIV class="pd
12830 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63  f_section">}.Sec
12840 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79  tion {SQLite Key
12850 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20  words} keywords 
12860 0a 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 0a  .puts {</DIV>}..
12870 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 53 51  puts {.<p>The SQ
12880 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
12890 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62  fies a huge numb
128a0 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77  er of keywords w
128b0 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20  hich may not.be 
128c0 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  used as the name
128d0 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64  s of tables, ind
128e0 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64  ices, columns, d
128f0 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64  atabases, user-d
12900 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73  efined.functions
12910 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69  , collations, vi
12920 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
12930 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65  les, or any othe
12940 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a  r named object..
12950 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  The list of keyw
12960 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20  ords is so long 
12970 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20  that few people 
12980 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65  can remember the
12990 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20  m all..For most 
129a0 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73  SQL code, your s
129b0 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20  afest bet is to 
129c0 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e  never use any En
129d0 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77  glish language.w
129e0 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20  ord as the name 
129f0 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  of a user-define
12a00 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  d object.</p>..<
12a10 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f  p>If you want to
12a20 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61   use a keyword a
12a30 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65  s a name, you ne
12a40 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20  ed to quote it. 
12a50 20 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65   There.are three
12a60 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67   ways of quoting
12a70 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
12a80 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62  ite:</p>..<p>.<b
12a90 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
12aa0 65 20 63 6c 61 73 73 3d 22 70 64 66 5f 66 75 6e  e class="pdf_fun
12ab0 63 74 69 6f 6e 73 22 3e 0a 3c 74 72 3e 09 3c 74  ctions">.<tr>.<t
12ac0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
12ad0 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c  b>'keyword'</b><
12ae0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
12af0 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20  0"></td>..<td>A 
12b00 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c  keyword in singl
12b10 65 20 71 75 6f 74 65 73 20 69 73 20 69 6e 74 65  e quotes is inte
12b20 72 70 72 65 74 65 64 20 61 73 20 61 20 6c 69 74  rpreted as a lit
12b30 65 72 61 6c 20 73 74 72 69 6e 67 0a 20 20 20 20  eral string.    
12b40 20 20 20 20 69 66 20 69 74 20 6f 63 63 75 72 73      if it occurs
12b50 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
12b60 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74  ere a string lit
12b70 65 72 61 6c 20 69 73 20 61 6c 6c 6f 77 65 64 2c  eral is allowed,
12b80 20 6f 74 68 65 72 77 69 73 65 0a 09 69 74 20 69   otherwise..it i
12b90 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 61 73 20  s understood as 
12ba0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f  an identifier.</
12bb0 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74  td></tr>.<tr>.<t
12bc0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
12bd0 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c  b>"keyword"</b><
12be0 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
12bf0 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  td>A keyword in 
12c00 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73  double-quotes is
12c10 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
12c20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 66  an identifier if
12c30 0a 20 20 20 20 20 20 20 20 69 74 20 6d 61 74 63  .        it matc
12c40 68 65 73 20 61 20 6b 6e 6f 77 6e 20 69 64 65 6e  hes a known iden
12c50 74 69 66 69 65 72 2e 20 20 4f 74 68 65 72 77 69  tifier.  Otherwi
12c60 73 65 20 69 74 20 69 73 20 69 6e 74 65 72 70 72  se it is interpr
12c70 65 74 65 64 20 61 73 20 61 0a 20 20 20 20 20 20  eted as a.      
12c80 20 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c    string literal
12c90 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e  .</td></tr>.<tr>
12ca0 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
12cb0 22 3e 3c 62 3e 5b 6b 65 79 77 6f 72 64 5d 3c 2f  "><b>[keyword]</
12cc0 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
12cd0 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20  ..<td>A keyword 
12ce0 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61  enclosed in squa
12cf0 72 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 61  re brackets is a
12d00 6c 77 61 79 73 20 75 6e 64 65 72 73 74 6f 6f 64  lways understood
12d10 20 61 73 0a 20 20 20 20 20 20 20 20 61 6e 20 69   as.        an i
12d20 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
12d30 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
12d40 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
12d50 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
12d60 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
12d70 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53   MS Access and S
12d80 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73  QL Server and is
12d90 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c   included in SQL
12da0 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20  ite for.        
12db0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f  compatibility.</
12dc0 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  td></tr>.</table
12dd0 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
12de0 3c 2f 70 3e 0a 0a 3c 70 3e 51 75 6f 74 65 64 20  </p>..<p>Quoted 
12df0 6b 65 79 77 6f 72 64 73 20 61 72 65 20 75 6e 61  keywords are una
12e00 65 73 74 68 65 74 69 63 2e 0a 54 6f 20 68 65 6c  esthetic..To hel
12e10 70 20 79 6f 75 20 61 76 6f 69 64 20 74 68 65 6d  p you avoid them
12e20 2c 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20  , SQLite allows 
12e30 6d 61 6e 79 20 6b 65 79 77 6f 72 64 73 20 74 6f  many keywords to
12e40 20 62 65 20 75 73 65 64 20 75 6e 71 75 6f 74 65   be used unquote
12e50 64 0a 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d.as the names o
12e60 66 20 64 61 74 61 62 61 73 65 73 2c 20 74 61 62  f databases, tab
12e70 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 74 72  les, indices, tr
12e80 69 67 67 65 72 73 2c 20 76 69 65 77 73 2c 20 63  iggers, views, c
12e90 6f 6c 75 6d 6e 73 2c 0a 75 73 65 72 2d 64 65 66  olumns,.user-def
12ea0 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20  ined functions, 
12eb0 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 61 74 74 61  collations, atta
12ec0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
12ed0 61 6e 64 20 76 69 72 74 75 61 6c 0a 66 75 6e 63  and virtual.func
12ee0 74 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0a 49 6e  tion modules..In
12ef0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79   the list of key
12f00 77 6f 72 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  words that follo
12f10 77 73 2c 20 74 68 6f 73 65 20 74 68 61 74 20 63  ws, those that c
12f20 61 6e 20 62 65 20 75 73 65 64 20 61 73 20 69 64  an be used as id
12f30 65 6e 74 69 66 69 65 72 73 0a 61 72 65 20 73 68  entifiers.are sh
12f40 6f 77 6e 20 69 6e 20 61 6e 20 69 74 61 6c 69 63  own in an italic
12f50 20 66 6f 6e 74 2e 20 20 4b 65 79 77 6f 72 64 73   font.  Keywords
12f60 20 74 68 61 74 20 6d 75 73 74 20 62 65 20 71 75   that must be qu
12f70 6f 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  oted in order to
12f80 20 62 65 0a 75 73 65 64 20 61 73 20 69 64 65 6e   be.used as iden
12f90 74 69 66 69 65 72 73 20 61 72 65 20 73 68 6f 77  tifiers are show
12fa0 6e 20 69 6e 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a  n in bold.</p>..
12fb0 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
12fc0 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
12fd0 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
12fe0 68 65 6e 20 69 74 20 74 61 6b 65 20 6f 6e 20 6e  hen it take on n
12ff0 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20  ew features..So 
13000 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20  to prevent your 
13010 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  code from being 
13020 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65  broken by future
13030 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79   enhancements, y
13040 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c  ou should.normal
13050 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 6e 64  ly quote any ind
13060 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
13070 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
13080 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20  uage word, even 
13090 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61  if.you do not ha
130a0 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ve to..</p>..<p>
130b0 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  .The following a
130c0 72 65 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  re the keywords 
130d0 63 75 72 72 65 6e 74 6c 79 20 72 65 63 6f 67 6e  currently recogn
130e0 69 7a 65 64 20 62 79 20 53 51 4c 69 74 65 3a 0a  ized by SQLite:.
130f0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
13100 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  e>.<table width=
13110 22 31 30 30 25 22 20 63 6c 61 73 73 3d 22 70 64  "100%" class="pd
13120 66 5f 6b 65 79 77 6f 72 64 73 22 3e 0a 3c 74 72  f_keywords">.<tr
13130 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66  >.<td align="lef
13140 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  t" valign="top" 
13150 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 7d 0a 0a  width="20%">.}..
13160 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24  set n [llength $
13170 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65  keyword_list].se
13180 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f  t nCol 5.set nRo
13190 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43  w [expr {($n+$nC
131a0 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65  ol-1)/$nCol}].se
131b0 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77 6f  t i 0.foreach wo
131c0 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  rd $keyword_list
131d0 20 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67   {.  if {[string
131e0 20 69 6e 64 65 78 20 24 77 6f 72 64 20 65 6e 64   index $word end
131f0 5d 3d 3d 22 2a 22 7d 20 7b 0a 20 20 20 20 73 65  ]=="*"} {.    se
13200 74 20 77 6f 72 64 20 5b 73 74 72 69 6e 67 20 72  t word [string r
13210 61 6e 67 65 20 24 77 6f 72 64 20 30 20 65 6e 64  ange $word 0 end
13220 2d 31 5d 0a 20 20 20 20 73 65 74 20 66 6f 6e 74  -1].    set font
13230 20 69 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20   i.  } else {.  
13240 20 20 73 65 74 20 66 6f 6e 74 20 62 0a 20 20 7d    set font b.  }
13250 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77  .  if {$i==$nRow
13260 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 22 3c 2f  } {.    puts "</
13270 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22  td><td valign=\"
13280 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65  top\" align=\"le
13290 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25  ft\" width=\"20%
132a0 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31  \">".    set i 1
132b0 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
132c0 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 70 75 74  incr i.  }.  put
132d0 73 20 22 3c 24 66 6f 6e 74 3e 24 77 6f 72 64 3c  s "<$font>$word<
132e0 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22 0a 7d 0a 0a  /$font><br>".}..
132f0 70 75 74 73 20 7b 0a 3c 2f 74 64 3e 3c 2f 74 72  puts {.</td></tr
13300 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b  ></table></block
13310 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53 70 65 63  quote>..<h2>Spec
13320 69 61 6c 20 6e 61 6d 65 73 3c 2f 68 32 3e 0a 0a  ial names</h2>..
13330 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
13340 20 61 72 65 20 6e 6f 74 20 6b 65 79 77 6f 72 64   are not keyword
13350 73 20 69 6e 20 53 51 4c 69 74 65 2c 20 62 75 74  s in SQLite, but
13360 20 61 72 65 20 75 73 65 64 20 61 73 20 6e 61 6d   are used as nam
13370 65 73 20 6f 66 20 0a 73 79 73 74 65 6d 20 6f 62  es of .system ob
13380 6a 65 63 74 73 2e 20 20 54 68 65 79 20 63 61 6e  jects.  They can
13390 20 62 65 20 75 73 65 64 20 61 73 20 61 6e 20 69   be used as an i
133a0 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 61 20  dentifier for a 
133b0 64 69 66 66 65 72 65 6e 74 20 0a 74 79 70 65 20  different .type 
133c0 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a  of object.</p>..
133d0 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 63 6c 61 73  <blockquote clas
133e0 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64 73 22  s="pdf_keywords"
133f0 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c 62  ><b>.  _ROWID_<b
13400 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20 20  r>.  MAIN<br>.  
13410 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44 3c  OID<br>.  ROWID<
13420 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41 53  br>.  SQLITE_MAS
13430 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45  TER<br>.  SQLITE
13440 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20 20  _SEQUENCE<br>.  
13450 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53 54  SQLITE_TEMP_MAST
13460 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62 72  ER<br>.  TEMP<br
13470 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  >.</b></blockquo
13480 74 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 3c 44 49  te>.}..puts {<DI
13490 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 69 67 6e  V class="pdf_ign
134a0 6f 72 65 22 3e 7d 0a 66 6f 6f 74 65 72 20 24 72  ore">}.footer $r
134b0 63 73 69 64 0a 69 66 20 7b 5b 73 74 72 69 6e 67  csid.if {[string
134c0 20 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74 64   length $outputd
134d0 69 72 5d 7d 20 7b 0a 20 20 66 6f 6f 74 65 72 20  ir]} {.  footer 
134e0 24 72 63 73 69 64 0a 7d 0a 70 75 74 73 20 7b 3c  $rcsid.}.puts {<
134f0 2f 44 49 56 3e 7d 0a                             /DIV>}.