/ Hex Artifact Content
Login

Artifact 074e2d08fbe7c756988a9192856e962c8734f797:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 54 63 6c  #.# Run this Tcl
0010: 20 73 63 72 69 70 74 20 74 6f 20 67 65 6e 65 72   script to gener
0020: 61 74 65 20 74 68 65 20 6c 61 6e 67 2d 2a 2e 68  ate the lang-*.h
0030: 74 6d 6c 20 66 69 6c 65 73 2e 0a 23 0a 73 65 74  tml files..#.set
0040: 20 72 63 73 69 64 20 7b 24 49 64 3a 20 6c 61 6e   rcsid {$Id: lan
0050: 67 2e 74 63 6c 2c 76 20 31 2e 38 37 20 32 30 30  g.tcl,v 1.87 200
0060: 35 2f 30 33 2f 31 39 20 31 34 3a 34 35 3a 35 30  5/03/19 14:45:50
0070: 20 64 72 68 20 45 78 70 20 24 7d 0a 73 6f 75 72   drh Exp $}.sour
0080: 63 65 20 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 69  ce common.tcl..i
0090: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67  f {[llength $arg
00a0: 76 5d 3e 30 7d 20 7b 0a 20 20 73 65 74 20 6f 75  v]>0} {.  set ou
00b0: 74 70 75 74 64 69 72 20 5b 6c 69 6e 64 65 78 20  tputdir [lindex 
00c0: 24 61 72 67 76 20 30 5d 0a 7d 20 65 6c 73 65 20  $argv 0].} else 
00d0: 7b 0a 20 20 73 65 74 20 6f 75 74 70 75 74 64 69  {.  set outputdi
00e0: 72 20 22 22 0a 7d 0a 0a 68 65 61 64 65 72 20 7b  r "".}..header {
00f0: 51 75 65 72 79 20 4c 61 6e 67 75 61 67 65 20 55  Query Language U
0100: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 53 51 4c  nderstood by SQL
0110: 69 74 65 7d 0a 70 75 74 73 20 7b 0a 3c 68 31 3e  ite}.puts {.<h1>
0120: 53 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f  SQL As Understoo
0130: 64 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e  d By SQLite</h1>
0140: 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 69 74 65 20  ..<p>The SQLite 
0150: 6c 69 62 72 61 72 79 20 75 6e 64 65 72 73 74 61  library understa
0160: 6e 64 73 20 6d 6f 73 74 20 6f 66 20 74 68 65 20  nds most of the 
0170: 73 74 61 6e 64 61 72 64 20 53 51 4c 0a 6c 61 6e  standard SQL.lan
0180: 67 75 61 67 65 2e 20 20 42 75 74 20 69 74 20 64  guage.  But it d
0190: 6f 65 73 20 3c 61 20 68 72 65 66 3d 22 6f 6d 69  oes <a href="omi
01a0: 74 74 65 64 2e 68 74 6d 6c 22 3e 6f 6d 69 74 20  tted.html">omit 
01b0: 73 6f 6d 65 20 66 65 61 74 75 72 65 73 3c 2f 61  some features</a
01c0: 3e 0a 77 68 69 6c 65 20 61 74 20 74 68 65 20 73  >.while at the s
01d0: 61 6d 65 20 74 69 6d 65 0a 61 64 64 69 6e 67 20  ame time.adding 
01e0: 61 20 66 65 77 20 66 65 61 74 75 72 65 73 20 6f  a few features o
01f0: 66 20 69 74 73 20 6f 77 6e 2e 20 20 54 68 69 73  f its own.  This
0200: 20 64 6f 63 75 6d 65 6e 74 20 61 74 74 65 6d 70   document attemp
0210: 74 73 20 74 6f 0a 64 65 73 63 72 69 62 65 20 70  ts to.describe p
0220: 72 65 63 69 73 65 6c 79 20 77 68 61 74 20 70 61  recisely what pa
0230: 72 74 73 20 6f 66 20 74 68 65 20 53 51 4c 20 6c  rts of the SQL l
0240: 61 6e 67 75 61 67 65 20 53 51 4c 69 74 65 20 64  anguage SQLite d
0250: 6f 65 73 0a 61 6e 64 20 64 6f 65 73 20 6e 6f 74  oes.and does not
0260: 20 73 75 70 70 6f 72 74 2e 20 20 41 20 6c 69 73   support.  A lis
0270: 74 20 6f 66 20 3c 61 20 68 72 65 66 3d 22 6c 61  t of <a href="la
0280: 6e 67 5f 6b 65 79 77 6f 72 64 73 2e 68 74 6d 6c  ng_keywords.html
0290: 22 3e 6b 65 79 77 6f 72 64 73 3c 2f 61 3e 20 69  ">keywords</a> i
02a0: 73 20 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64  s .also provided
02b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6c 6c  .</p>..<p>In all
02c0: 20 6f 66 20 74 68 65 20 73 79 6e 74 61 78 20 64   of the syntax d
02d0: 69 61 67 72 61 6d 73 20 74 68 61 74 20 66 6f 6c  iagrams that fol
02e0: 6c 6f 77 2c 20 6c 69 74 65 72 61 6c 20 74 65 78  low, literal tex
02f0: 74 20 69 73 20 73 68 6f 77 6e 20 69 6e 0a 62 6f  t is shown in.bo
0300: 6c 64 20 62 6c 75 65 2e 20 20 4e 6f 6e 2d 74 65  ld blue.  Non-te
0310: 72 6d 69 6e 61 6c 20 73 79 6d 62 6f 6c 73 20 61  rminal symbols a
0320: 72 65 20 73 68 6f 77 6e 20 69 6e 20 69 74 61 6c  re shown in ital
0330: 69 63 20 72 65 64 2e 20 20 4f 70 65 72 61 74 6f  ic red.  Operato
0340: 72 73 0a 74 68 61 74 20 61 72 65 20 70 61 72 74  rs.that are part
0350: 20 6f 66 20 74 68 65 20 73 79 6e 74 61 63 74 69   of the syntacti
0360: 63 20 6d 61 72 6b 75 70 20 69 74 73 65 6c 66 20  c markup itself 
0370: 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6c 61  are shown in bla
0380: 63 6b 20 72 6f 6d 61 6e 2e 3c 2f 70 3e 0a 0a 3c  ck roman.</p>..<
0390: 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  p>This document 
03a0: 69 73 20 6a 75 73 74 20 61 6e 20 6f 76 65 72 76  is just an overv
03b0: 69 65 77 20 6f 66 20 74 68 65 20 53 51 4c 20 73  iew of the SQL s
03c0: 79 6e 74 61 78 20 69 6d 70 6c 65 6d 65 6e 74 65  yntax implemente
03d0: 64 0a 62 79 20 53 51 4c 69 74 65 2e 20 20 4d 61  d.by SQLite.  Ma
03e0: 6e 79 20 6c 6f 77 2d 6c 65 76 65 6c 20 70 72 6f  ny low-level pro
03f0: 64 75 63 74 69 6f 6e 73 20 61 72 65 20 6f 6d 69  ductions are omi
0400: 74 74 65 64 2e 20 20 46 6f 72 20 64 65 74 61 69  tted.  For detai
0410: 6c 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  led information.
0420: 6f 6e 20 74 68 65 20 6c 61 6e 67 75 61 67 65 20  on the language 
0430: 74 68 61 74 20 53 51 4c 69 74 65 20 75 6e 64 65  that SQLite unde
0440: 72 73 74 61 6e 64 73 2c 20 72 65 66 65 72 20 74  rstands, refer t
0450: 6f 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64  o the source cod
0460: 65 20 61 6e 64 0a 74 68 65 20 67 72 61 6d 6d 61  e and.the gramma
0470: 72 20 66 69 6c 65 20 22 70 61 72 73 65 2e 79 22  r file "parse.y"
0480: 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 53 51 4c 69 74  .</p>...<p>SQLit
0490: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  e implements the
04a0: 20 66 6f 6c 6c 6f 77 20 73 79 6e 74 61 78 3a 3c   follow syntax:<
04b0: 2f 70 3e 0a 3c 70 3e 3c 75 6c 3e 0a 7d 0a 0a 70  /p>.<p><ul>.}..p
04c0: 72 6f 63 20 73 6c 69 6e 6b 20 7b 6c 61 62 65 6c  roc slink {label
04d0: 7d 20 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e  } {.  if {[strin
04e0: 67 20 6d 61 74 63 68 20 2a 2e 68 74 6d 6c 20 24  g match *.html $
04f0: 6c 61 62 65 6c 5d 7d 20 7b 0a 20 20 20 20 72 65  label]} {.    re
0500: 74 75 72 6e 20 24 6c 61 62 65 6c 0a 20 20 7d 0a  turn $label.  }.
0510: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
0520: 6e 67 74 68 20 24 3a 3a 6f 75 74 70 75 74 64 69  ngth $::outputdi
0530: 72 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 74  r]==0} {.    ret
0540: 75 72 6e 20 23 24 6c 61 62 65 6c 0a 20 20 7d 20  urn #$label.  } 
0550: 65 6c 73 65 20 7b 20 0a 20 20 20 20 72 65 74 75  else { .    retu
0560: 72 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  rn lang_$label.h
0570: 74 6d 6c 0a 20 20 7d 0a 7d 0a 0a 66 6f 72 65 61  tml.  }.}..forea
0580: 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c 73  ch {section} [ls
0590: 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69  ort -index 0 -di
05a0: 63 74 69 6f 6e 61 72 79 20 7b 0a 20 20 7b 7b 43  ctionary {.  {{C
05b0: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 63 72 65  REATE TABLE} cre
05c0: 61 74 65 74 61 62 6c 65 7d 0a 20 20 7b 7b 43 52  atetable}.  {{CR
05d0: 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61  EATE INDEX} crea
05e0: 74 65 69 6e 64 65 78 7d 0a 20 20 7b 56 41 43 55  teindex}.  {VACU
05f0: 55 4d 20 76 61 63 75 75 6d 7d 0a 20 20 7b 7b 44  UM vacuum}.  {{D
0600: 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
0610: 61 62 6c 65 7d 0a 20 20 7b 7b 44 52 4f 50 20 49  able}.  {{DROP I
0620: 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 7d  NDEX} dropindex}
0630: 0a 20 20 7b 49 4e 53 45 52 54 20 69 6e 73 65 72  .  {INSERT inser
0640: 74 7d 0a 20 20 7b 52 45 50 4c 41 43 45 20 72 65  t}.  {REPLACE re
0650: 70 6c 61 63 65 7d 0a 20 20 7b 44 45 4c 45 54 45  place}.  {DELETE
0660: 20 64 65 6c 65 74 65 7d 0a 20 20 7b 55 50 44 41   delete}.  {UPDA
0670: 54 45 20 75 70 64 61 74 65 7d 0a 20 20 7b 53 45  TE update}.  {SE
0680: 4c 45 43 54 20 73 65 6c 65 63 74 7d 0a 20 20 7b  LECT select}.  {
0690: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 7d  comment comment}
06a0: 0a 20 20 7b 43 4f 50 59 20 63 6f 70 79 7d 0a 20  .  {COPY copy}. 
06b0: 20 7b 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69   {EXPLAIN explai
06c0: 6e 7d 0a 20 20 7b 65 78 70 72 65 73 73 69 6f 6e  n}.  {expression
06d0: 20 65 78 70 72 7d 0a 20 20 7b 7b 42 45 47 49 4e   expr}.  {{BEGIN
06e0: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
06f0: 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 43  ansaction}.  {{C
0700: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0710: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a  N} transaction}.
0720: 20 20 7b 7b 45 4e 44 20 54 52 41 4e 53 41 43 54    {{END TRANSACT
0730: 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e  ION} transaction
0740: 7d 0a 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20 54  }.  {{ROLLBACK T
0750: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0760: 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 50 52 41 47  saction}.  {PRAG
0770: 4d 41 20 70 72 61 67 6d 61 2e 68 74 6d 6c 7d 0a  MA pragma.html}.
0780: 20 20 7b 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20    {{ON CONFLICT 
0790: 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74  clause} conflict
07a0: 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20 56 49 45  }.  {{CREATE VIE
07b0: 57 7d 20 63 72 65 61 74 65 76 69 65 77 7d 0a 20  W} createview}. 
07c0: 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72   {{DROP VIEW} dr
07d0: 6f 70 76 69 65 77 7d 0a 20 20 7b 7b 43 52 45 41  opview}.  {{CREA
07e0: 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65 61  TE TRIGGER} crea
07f0: 74 65 74 72 69 67 67 65 72 7d 0a 20 20 7b 7b 44  tetrigger}.  {{D
0800: 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f  ROP TRIGGER} dro
0810: 70 74 72 69 67 67 65 72 7d 0a 20 20 7b 7b 41 54  ptrigger}.  {{AT
0820: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
0830: 74 74 61 63 68 7d 0a 20 20 7b 7b 44 45 54 41 43  ttach}.  {{DETAC
0840: 48 20 44 41 54 41 42 41 53 45 7d 20 64 65 74 61  H DATABASE} deta
0850: 63 68 7d 0a 20 20 7b 52 45 49 4e 44 45 58 20 72  ch}.  {REINDEX r
0860: 65 69 6e 64 65 78 7d 0a 20 20 7b 7b 41 4c 54 45  eindex}.  {{ALTE
0870: 52 20 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61  R TABLE} alterta
0880: 62 6c 65 7d 0a 7d 5d 20 7b 0a 20 20 66 6f 72 65  ble}.}] {.  fore
0890: 61 63 68 20 7b 73 5f 74 69 74 6c 65 20 73 5f 74  ach {s_title s_t
08a0: 61 67 7d 20 24 73 65 63 74 69 6f 6e 20 7b 7d 0a  ag} $section {}.
08b0: 20 20 70 75 74 73 20 22 3c 6c 69 3e 3c 61 20 68    puts "<li><a h
08c0: 72 65 66 3d 5c 22 5b 73 6c 69 6e 6b 20 24 73 5f  ref=\"[slink $s_
08d0: 74 61 67 5d 5c 22 3e 24 73 5f 74 69 74 6c 65 3c  tag]\">$s_title<
08e0: 2f 61 3e 3c 2f 6c 69 3e 22 0a 7d 0a 70 75 74 73  /a></li>".}.puts
08f0: 20 7b 3c 2f 75 6c 3e 3c 2f 70 3e 0a 0a 3c 70 3e   {</ul></p>..<p>
0900: 44 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 69  Details on the i
0910: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
0920: 20 65 61 63 68 20 63 6f 6d 6d 61 6e 64 20 61 72   each command ar
0930: 65 20 70 72 6f 76 69 64 65 64 20 69 6e 0a 74 68  e provided in.th
0940: 65 20 73 65 71 75 65 6c 2e 3c 2f 70 3e 0a 7d 0a  e sequel.</p>.}.
0950: 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20 7b  .proc Operator {
0960: 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e  name} {.  return
0970: 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22   "<font color=\"
0980: 23 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e 24  #2c2cf0\"><big>$
0990: 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74  name</big></font
09a0: 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65 72  >".}.proc Nonter
09b0: 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20  minal {name} {. 
09c0: 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e   return "<i><fon
09d0: 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34 33  t color=\"#ff343
09e0: 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e  4\">$name</font>
09f0: 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65 79  </i>".}.proc Key
0a00: 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  word {name} {.  
0a10: 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f  return "<font co
0a20: 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e  lor=\"#2c2cf0\">
0a30: 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a  $name</font>".}.
0a40: 70 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74 65  proc Example {te
0a50: 78 74 7d 20 7b 0a 20 20 70 75 74 73 20 22 3c 62  xt} {.  puts "<b
0a60: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 24  lockquote><pre>$
0a70: 74 65 78 74 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  text</pre></bloc
0a80: 6b 71 75 6f 74 65 3e 22 0a 7d 0a 0a 70 72 6f 63  kquote>".}..proc
0a90: 20 53 65 63 74 69 6f 6e 20 7b 6e 61 6d 65 20 6c   Section {name l
0aa0: 61 62 65 6c 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c  abel} {.  global
0ab0: 20 6f 75 74 70 75 74 64 69 72 0a 0a 20 20 69 66   outputdir..  if
0ac0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
0ad0: 20 24 6f 75 74 70 75 74 64 69 72 5d 21 3d 30 7d   $outputdir]!=0}
0ae0: 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e   {.    if {[llen
0af0: 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e  gth [info comman
0b00: 64 73 20 70 75 74 73 5f 73 74 61 6e 64 61 72 64  ds puts_standard
0b10: 5d 5d 3e 30 7d 20 7b 0a 20 20 20 20 20 20 66 6f  ]]>0} {.      fo
0b20: 6f 74 65 72 20 24 3a 3a 72 63 73 69 64 0a 20 20  oter $::rcsid.  
0b30: 20 20 7d 0a 0a 20 20 20 20 69 66 20 7b 5b 73 74    }..    if {[st
0b40: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6c 61 62  ring length $lab
0b50: 65 6c 5d 3e 30 7d 20 7b 0a 20 20 20 20 20 20 72  el]>0} {.      r
0b60: 65 6e 61 6d 65 20 70 75 74 73 20 70 75 74 73 5f  ename puts puts_
0b70: 73 74 61 6e 64 61 72 64 0a 20 20 20 20 20 20 70  standard.      p
0b80: 72 6f 63 20 70 75 74 73 20 7b 73 74 72 7d 20 7b  roc puts {str} {
0b90: 0a 20 20 20 20 20 20 20 20 72 65 67 73 75 62 20  .        regsub 
0ba0: 2d 61 6c 6c 20 7b 68 72 65 66 3d 22 23 28 5b 61  -all {href="#([a
0bb0: 2d 7a 5d 2b 29 22 7d 20 24 73 74 72 20 7b 68 72  -z]+)"} $str {hr
0bc0: 65 66 3d 22 6c 61 6e 67 5f 5c 31 2e 68 74 6d 6c  ef="lang_\1.html
0bd0: 22 7d 20 73 74 72 0a 20 20 20 20 20 20 20 20 70  "} str.        p
0be0: 75 74 73 5f 73 74 61 6e 64 61 72 64 20 24 3a 3a  uts_standard $::
0bf0: 73 65 63 74 69 6f 6e 5f 66 69 6c 65 20 24 73 74  section_file $st
0c00: 72 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  r.      }.      
0c10: 72 65 6e 61 6d 65 20 66 6f 6f 74 65 72 20 66 6f  rename footer fo
0c20: 6f 74 65 72 5f 73 74 61 6e 64 61 72 64 0a 20 20  oter_standard.  
0c30: 20 20 20 20 70 72 6f 63 20 66 6f 6f 74 65 72 20      proc footer 
0c40: 7b 69 64 7d 20 7b 0a 20 20 20 20 20 20 20 20 66  {id} {.        f
0c50: 6f 6f 74 65 72 5f 73 74 61 6e 64 61 72 64 20 24  ooter_standard $
0c60: 69 64 0a 20 20 20 20 20 20 20 20 72 65 6e 61 6d  id.        renam
0c70: 65 20 66 6f 6f 74 65 72 20 22 22 0a 20 20 20 20  e footer "".    
0c80: 20 20 20 20 72 65 6e 61 6d 65 20 70 75 74 73 20      rename puts 
0c90: 22 22 0a 20 20 20 20 20 20 20 20 72 65 6e 61 6d  "".        renam
0ca0: 65 20 70 75 74 73 5f 73 74 61 6e 64 61 72 64 20  e puts_standard 
0cb0: 70 75 74 73 0a 20 20 20 20 20 20 20 20 72 65 6e  puts.        ren
0cc0: 61 6d 65 20 66 6f 6f 74 65 72 5f 73 74 61 6e 64  ame footer_stand
0cd0: 61 72 64 20 66 6f 6f 74 65 72 0a 20 20 20 20 20  ard footer.     
0ce0: 20 7d 20 0a 20 20 20 20 20 20 73 65 74 20 3a 3a   } .      set ::
0cf0: 73 65 63 74 69 6f 6e 5f 66 69 6c 65 20 5b 6f 70  section_file [op
0d00: 65 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6f  en [file join $o
0d10: 75 74 70 75 74 64 69 72 20 6c 61 6e 67 5f 24 6c  utputdir lang_$l
0d20: 61 62 65 6c 2e 68 74 6d 6c 5d 20 77 5d 0a 20 20  abel.html] w].  
0d30: 20 20 20 20 68 65 61 64 65 72 20 22 51 75 65 72      header "Quer
0d40: 79 20 4c 61 6e 67 75 61 67 65 20 55 6e 64 65 72  y Language Under
0d50: 73 74 6f 6f 64 20 62 79 20 53 51 4c 69 74 65 3a  stood by SQLite:
0d60: 20 24 6e 61 6d 65 22 0a 20 20 20 20 20 20 70 75   $name".      pu
0d70: 74 73 20 22 3c 68 31 3e 53 51 4c 20 41 73 20 55  ts "<h1>SQL As U
0d80: 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51 4c  nderstood By SQL
0d90: 69 74 65 3c 2f 68 31 3e 22 0a 20 20 20 20 20 20  ite</h1>".      
0da0: 70 75 74 73 20 22 3c 61 20 68 72 65 66 3d 5c 22  puts "<a href=\"
0db0: 6c 61 6e 67 2e 68 74 6d 6c 5c 22 3e 5c 5b 43 6f  lang.html\">\[Co
0dc0: 6e 74 65 6e 74 73 5c 5d 3c 2f 61 3e 22 0a 20 20  ntents\]</a>".  
0dd0: 20 20 20 20 70 75 74 73 20 22 3c 68 32 3e 24 6e      puts "<h2>$n
0de0: 61 6d 65 3c 2f 68 32 3e 22 0a 20 20 20 20 20 20  ame</h2>".      
0df0: 72 65 74 75 72 6e 20 0a 20 20 20 20 7d 0a 20 20  return .    }.  
0e00: 7d 0a 20 20 70 75 74 73 20 22 5c 6e 3c 68 72 20  }.  puts "\n<hr 
0e10: 2f 3e 22 0a 20 20 69 66 20 7b 24 6c 61 62 65 6c  />".  if {$label
0e20: 21 3d 22 22 7d 20 7b 0a 20 20 20 20 70 75 74 73  !=""} {.    puts
0e30: 20 22 3c 61 20 6e 61 6d 65 3d 5c 22 24 6c 61 62   "<a name=\"$lab
0e40: 65 6c 5c 22 3e 3c 2f 61 3e 22 0a 20 20 7d 0a 20  el\"></a>".  }. 
0e50: 20 70 75 74 73 20 22 3c 68 31 3e 24 6e 61 6d 65   puts "<h1>$name
0e60: 3c 2f 68 31 3e 5c 6e 22 0a 7d 0a 0a 53 65 63 74  </h1>\n".}..Sect
0e70: 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c 45  ion {ALTER TABLE
0e80: 7d 20 61 6c 74 65 72 74 61 62 6c 65 0a 0a 53 79  } altertable..Sy
0e90: 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
0ea0: 65 6e 74 7d 20 7b 0a 41 4c 54 45 52 20 54 41 42  ent} {.ALTER TAB
0eb0: 4c 45 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  LE [<database-na
0ec0: 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
0ed0: 6d 65 3e 20 3c 61 6c 74 65 72 61 74 69 6f 6e 3e  me> <alteration>
0ee0: 0a 7d 20 7b 61 6c 74 65 72 61 74 69 6f 6e 7d 20  .} {alteration} 
0ef0: 7b 0a 52 45 4e 41 4d 45 20 54 4f 20 3c 6e 65 77  {.RENAME TO <new
0f00: 2d 74 61 62 6c 65 2d 6e 61 6d 65 3e 0a 7d 20 7b  -table-name>.} {
0f10: 61 6c 74 65 72 61 74 69 6f 6e 7d 20 7b 0a 41 44  alteration} {.AD
0f20: 44 20 5b 43 4f 4c 55 4d 4e 5d 20 3c 63 6f 6c 75  D [COLUMN] <colu
0f30: 6d 6e 2d 64 65 66 3e 0a 7d 0a 0a 70 75 74 73 20  mn-def>.}..puts 
0f40: 7b 0a 3c 70 3e 53 51 4c 69 74 65 27 73 20 76 65  {.<p>SQLite's ve
0f50: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 41 4c 54  rsion of the ALT
0f60: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
0f70: 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72   allows the user
0f80: 20 74 6f 20 0a 72 65 6e 61 6d 65 20 6f 72 20 61   to .rename or a
0f90: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
0fa0: 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  to an existing t
0fb0: 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20  able. It is not 
0fc0: 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6d 6f  possible.to remo
0fd0: 76 65 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  ve a column from
0fe0: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0ff0: 3c 70 3e 54 68 65 20 52 45 4e 41 4d 45 20 54 4f  <p>The RENAME TO
1000: 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 20   syntax is used 
1010: 74 6f 20 72 65 6e 61 6d 65 20 74 68 65 20 74 61  to rename the ta
1020: 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ble identified b
1030: 79 20 0a 3c 69 3e 5b 64 61 74 61 62 61 73 65 2d  y .<i>[database-
1040: 6e 61 6d 65 2e 5d 74 61 62 6c 65 2d 6e 61 6d 65  name.]table-name
1050: 3c 2f 69 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74  </i> to <i>new-t
1060: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 54  able-name</i>. T
1070: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e  his command .can
1080: 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d  not be used to m
1090: 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65 74 77  ove a table betw
10a0: 65 65 6e 20 61 74 74 61 63 68 65 64 20 64 61 74  een attached dat
10b0: 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20  abases, only to 
10c0: 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20  rename .a table 
10d0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
10e0: 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
10f0: 70 3e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62  p>If the table b
1100: 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73  eing renamed has
1110: 20 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64   triggers or ind
1120: 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65  ices, then these
1130: 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64   remain.attached
1140: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66   to the table af
1150: 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20  ter it has been 
1160: 72 65 6e 61 6d 65 64 2e 20 48 6f 77 65 76 65 72  renamed. However
1170: 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 61  , if there are.a
1180: 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  ny view definiti
1190: 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e  ons, or statemen
11a0: 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20 74  ts executed by t
11b0: 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65 66  riggers that ref
11c0: 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65 20  er to.the table 
11d0: 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74  being renamed, t
11e0: 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75 74  hese are not aut
11f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66  omatically modif
1200: 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ied to use the n
1210: 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49  ew.table name. I
1220: 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69 72  f this is requir
1230: 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72 73  ed, the triggers
1240: 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69 74   or view definit
1250: 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72 6f  ions must be.dro
1260: 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61 74  pped and recreat
1270: 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
1280: 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79 20  w table name by 
1290: 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  hand..</p>..<p>T
12a0: 68 65 20 41 44 44 20 5b 43 4f 4c 55 4d 4e 5d 20  he ADD [COLUMN] 
12b0: 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 20 74  syntax is used t
12c0: 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
12d0: 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e  mn to an existin
12e0: 67 20 74 61 62 6c 65 2e 0a 54 68 65 20 6e 65 77  g table..The new
12f0: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79   column is alway
1300: 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68  s appended to th
1310: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 73  e end of the lis
1320: 74 20 6f 66 20 65 78 69 73 74 69 6e 67 20 63 6f  t of existing co
1330: 6c 75 6d 6e 73 2e 0a 3c 69 3e 43 6f 6c 75 6d 6e  lumns..<i>Column
1340: 2d 64 65 66 3c 2f 69 3e 20 6d 61 79 20 74 61 6b  -def</i> may tak
1350: 65 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72  e any of the for
1360: 6d 73 20 70 65 72 6d 69 73 73 61 62 6c 65 20 69  ms permissable i
1370: 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
1380: 20 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74   .statement, wit
1390: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  h the following 
13a0: 72 65 73 74 72 69 63 74 69 6f 6e 73 3a 0a 3c 75  restrictions:.<u
13b0: 6c 3e 0a 3c 6c 69 3e 54 68 65 20 63 6f 6c 75 6d  l>.<li>The colum
13c0: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
13d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
13e0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
13f0: 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 54 68 65 20  t.</li>.<li>The 
1400: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68  column may not h
1410: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ave a default va
1420: 6c 75 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54  lue of CURRENT_T
1430: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
1440: 45 20 0a 20 20 20 20 6f 72 20 43 55 52 52 45 4e  E .    or CURREN
1450: 54 5f 54 49 4d 45 53 54 41 4d 50 2e 3c 2f 6c 69  T_TIMESTAMP.</li
1460: 3e 0a 3c 6c 69 3e 49 66 20 61 20 4e 4f 54 20 4e  >.<li>If a NOT N
1470: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  ULL constraint i
1480: 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65  s specified, the
1490: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73  n the column mus
14a0: 74 20 68 61 76 65 20 61 0a 20 20 20 20 64 65 66  t have a.    def
14b0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72  ault value other
14c0: 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c   than NULL..</ul
14d0: 3e 0a 0a 3c 70 3e 54 68 65 20 65 78 65 63 75 74  >..<p>The execut
14e0: 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65 20  ion time of the 
14f0: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d  ALTER TABLE comm
1500: 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64 65  and is independe
1510: 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74  nt of.the amount
1520: 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65 20   of data in the 
1530: 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54 45  table.  The ALTE
1540: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
1550: 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79 0a  runs as quickly.
1560: 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  on a table with 
1570: 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20  10 million rows 
1580: 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61 20  as it does on a 
1590: 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f 77  table with 1 row
15a0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72  ..</p>..<p>After
15b0: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20   ADD COLUMN has 
15c0: 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61  been run on a da
15d0: 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61 74  tabase, that dat
15e0: 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62  abase will not.b
15f0: 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53 51  e readable by SQ
1600: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31  Lite version 3.1
1610: 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 20 75  .3 and earlier u
1620: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
1630: 65 0a 69 73 20 3c 61 20 68 72 65 66 3d 22 6c 61  e.is <a href="la
1640: 6e 67 5f 76 61 63 75 75 6d 2e 68 74 6d 6c 22 3e  ng_vacuum.html">
1650: 56 41 43 55 55 4d 3c 2f 61 3e 65 64 2e 3c 2f 70  VACUUM</a>ed.</p
1660: 3e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 41 54  >.}..Section {AT
1670: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61  TACH DATABASE} a
1680: 74 74 61 63 68 0a 0a 53 79 6e 74 61 78 20 7b 73  ttach..Syntax {s
1690: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
16a0: 41 54 54 41 43 48 20 5b 44 41 54 41 42 41 53 45  ATTACH [DATABASE
16b0: 5d 20 3c 64 61 74 61 62 61 73 65 2d 66 69 6c 65  ] <database-file
16c0: 6e 61 6d 65 3e 20 41 53 20 3c 64 61 74 61 62 61  name> AS <databa
16d0: 73 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73  se-name>.}..puts
16e0: 20 7b 0a 3c 70 3e 54 68 65 20 41 54 54 41 43 48   {.<p>The ATTACH
16f0: 20 44 41 54 41 42 41 53 45 20 73 74 61 74 65 6d   DATABASE statem
1700: 65 6e 74 20 61 64 64 73 20 61 20 70 72 65 65 78  ent adds a preex
1710: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
1720: 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72  .file to the cur
1730: 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
1740: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  nnection.  If th
1750: 65 20 66 69 6c 65 6e 61 6d 65 20 63 6f 6e 74 61  e filename conta
1760: 69 6e 73 20 0a 70 75 6e 63 74 75 61 74 69 6f 6e  ins .punctuation
1770: 20 63 68 61 72 61 63 74 65 72 73 20 69 74 20 6d   characters it m
1780: 75 73 74 20 62 65 20 71 75 6f 74 65 64 2e 20 20  ust be quoted.  
1790: 54 68 65 20 6e 61 6d 65 73 20 27 6d 61 69 6e 27  The names 'main'
17a0: 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65 66   and .'temp' ref
17b0: 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20 64  er to the main d
17c0: 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65 20  atabase and the 
17d0: 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
17e0: 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61 62  r .temporary tab
17f0: 6c 65 73 2e 20 20 54 68 65 73 65 20 63 61 6e 6e  les.  These cann
1800: 6f 74 20 62 65 20 64 65 74 61 63 68 65 64 2e 20  ot be detached. 
1810: 20 41 74 74 61 63 68 65 64 20 64 61 74 61 62 61   Attached databa
1820: 73 65 73 20 0a 61 72 65 20 72 65 6d 6f 76 65 64  ses .are removed
1830: 20 75 73 69 6e 67 20 74 68 65 20 3c 61 20 68 72   using the <a hr
1840: 65 66 3d 22 23 64 65 74 61 63 68 22 3e 44 45 54  ef="#detach">DET
1850: 41 43 48 20 44 41 54 41 42 41 53 45 3c 2f 61 3e  ACH DATABASE</a>
1860: 20 0a 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e   .statement.</p>
1870: 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 20 72 65 61  ..<p>You can rea
1880: 64 20 66 72 6f 6d 20 61 6e 64 20 77 72 69 74 65  d from and write
1890: 20 74 6f 20 61 6e 20 61 74 74 61 63 68 65 64 20   to an attached 
18a0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 79 6f 75  database and you
18b0: 0a 63 61 6e 20 6d 6f 64 69 66 79 20 74 68 65 20  .can modify the 
18c0: 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 61 74  schema of the at
18d0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e  tached database.
18e0: 20 20 54 68 69 73 20 69 73 20 61 20 6e 65 77 0a    This is a new.
18f0: 66 65 61 74 75 72 65 20 6f 66 20 53 51 4c 69 74  feature of SQLit
1900: 65 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e 20 20  e version 3.0.  
1910: 49 6e 20 53 51 4c 69 74 65 20 32 2e 38 2c 20 73  In SQLite 2.8, s
1920: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0a 74 6f  chema changes.to
1930: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1940: 73 65 73 20 77 65 72 65 20 6e 6f 74 20 61 6c 6c  ses were not all
1950: 6f 77 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f  owed.</p>..<p>Yo
1960: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
1970: 61 20 6e 65 77 20 74 61 62 6c 65 20 77 69 74 68  a new table with
1980: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
1990: 73 20 61 20 74 61 62 6c 65 20 69 6e 20 0a 61 6e  s a table in .an
19a0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
19b0: 73 65 2c 20 62 75 74 20 79 6f 75 20 63 61 6e 20  se, but you can 
19c0: 61 74 74 61 63 68 20 61 20 64 61 74 61 62 61 73  attach a databas
19d0: 65 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73  e which contains
19e0: 0a 74 61 62 6c 65 73 20 77 68 6f 73 65 20 6e 61  .tables whose na
19f0: 6d 65 73 20 61 72 65 20 64 75 70 6c 69 63 61 74  mes are duplicat
1a00: 65 73 20 6f 66 20 74 61 62 6c 65 73 20 69 6e 20  es of tables in 
1a10: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1a20: 65 2e 20 20 49 74 20 69 73 20 0a 61 6c 73 6f 20  e.  It is .also 
1a30: 70 65 72 6d 69 73 73 69 62 6c 65 20 74 6f 20 61  permissible to a
1a40: 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20 64  ttach the same d
1a50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 75 6c  atabase file mul
1a60: 74 69 70 6c 65 20 74 69 6d 65 73 2e 3c 2f 70 3e  tiple times.</p>
1a70: 0a 0a 3c 70 3e 54 61 62 6c 65 73 20 69 6e 20 61  ..<p>Tables in a
1a80: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1a90: 61 73 65 20 63 61 6e 20 62 65 20 72 65 66 65 72  ase can be refer
1aa0: 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74 68 65  red to using the
1ab0: 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61   syntax .<i>data
1ac0: 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d  base-name.table-
1ad0: 6e 61 6d 65 3c 2f 69 3e 2e 20 20 49 66 20 61 6e  name</i>.  If an
1ae0: 20 61 74 74 61 63 68 65 64 20 74 61 62 6c 65 20   attached table 
1af0: 64 6f 65 73 6e 27 74 20 68 61 76 65 20 0a 61 20  doesn't have .a 
1b00: 64 75 70 6c 69 63 61 74 65 20 74 61 62 6c 65 20  duplicate table 
1b10: 6e 61 6d 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  name in the main
1b20: 20 64 61 74 61 62 61 73 65 2c 20 69 74 20 64 6f   database, it do
1b30: 65 73 6e 27 74 20 72 65 71 75 69 72 65 20 61 20  esn't require a 
1b40: 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 70  .database name p
1b50: 72 65 66 69 78 2e 20 20 57 68 65 6e 20 61 20 64  refix.  When a d
1b60: 61 74 61 62 61 73 65 20 69 73 20 61 74 74 61 63  atabase is attac
1b70: 68 65 64 2c 20 61 6c 6c 20 6f 66 20 69 74 73 20  hed, all of its 
1b80: 0a 74 61 62 6c 65 73 20 77 68 69 63 68 20 64 6f  .tables which do
1b90: 6e 27 74 20 68 61 76 65 20 64 75 70 6c 69 63 61  n't have duplica
1ba0: 74 65 20 6e 61 6d 65 73 20 62 65 63 6f 6d 65 20  te names become 
1bb0: 74 68 65 20 27 64 65 66 61 75 6c 74 27 20 74 61  the 'default' ta
1bc0: 62 6c 65 0a 6f 66 20 74 68 61 74 20 6e 61 6d 65  ble.of that name
1bd0: 2e 20 20 41 6e 79 20 74 61 62 6c 65 73 20 6f 66  .  Any tables of
1be0: 20 74 68 61 74 20 6e 61 6d 65 20 61 74 74 61 63   that name attac
1bf0: 68 65 64 20 61 66 74 65 72 77 61 72 64 73 20 72  hed afterwards r
1c00: 65 71 75 69 72 65 20 74 68 65 20 74 61 62 6c 65  equire the table
1c10: 20 0a 70 72 65 66 69 78 2e 20 49 66 20 74 68 65   .prefix. If the
1c20: 20 27 64 65 66 61 75 6c 74 27 20 74 61 62 6c 65   'default' table
1c30: 20 6f 66 20 61 20 67 69 76 65 6e 20 6e 61 6d 65   of a given name
1c40: 20 69 73 20 64 65 74 61 63 68 65 64 2c 20 74 68   is detached, th
1c50: 65 6e 20 0a 74 68 65 20 6c 61 73 74 20 74 61 62  en .the last tab
1c60: 6c 65 20 6f 66 20 74 68 61 74 20 6e 61 6d 65 20  le of that name 
1c70: 61 74 74 61 63 68 65 64 20 62 65 63 6f 6d 65 73  attached becomes
1c80: 20 74 68 65 20 6e 65 77 20 64 65 66 61 75 6c 74   the new default
1c90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e 73  .</p>..<p>.Trans
1ca0: 61 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e  actions involvin
1cb0: 67 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63  g multiple attac
1cc0: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72  hed databases ar
1cd0: 65 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69  e atomic,.assumi
1ce0: 6e 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e  ng that the main
1cf0: 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74   database is not
1d00: 20 22 3a 6d 65 6d 6f 72 79 3a 22 2e 20 20 49 66   ":memory:".  If
1d10: 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61   the main.databa
1d20: 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22  se is ":memory:"
1d30: 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69   then .transacti
1d40: 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  ons continue to 
1d50: 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e  be atomic within
1d60: 20 65 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c   each individual
1d70: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20  .database file. 
1d80: 42 75 74 20 69 66 20 74 68 65 20 68 6f 73 74 20  But if the host 
1d90: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
1da0: 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f   in the middle.o
1db0: 66 20 61 20 43 4f 4d 4d 49 54 20 77 68 65 72 65  f a COMMIT where
1dc0: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74   two or more dat
1dd0: 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20  abase files are 
1de0: 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66  updated,.some of
1df0: 20 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67   those files mig
1e00: 68 74 20 67 65 74 20 74 68 65 20 63 68 61 6e 67  ht get the chang
1e10: 65 73 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a  es where others.
1e20: 6d 69 67 68 74 20 6e 6f 74 2e 0a 41 74 6f 6d 69  might not..Atomi
1e30: 63 20 63 6f 6d 6d 69 74 20 6f 66 20 61 74 74 61  c commit of atta
1e40: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 69  ched databases i
1e50: 73 20 61 20 6e 65 77 20 66 65 61 74 75 72 65 20  s a new feature 
1e60: 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  of SQLite versio
1e70: 6e 20 33 2e 30 2e 0a 49 6e 20 53 51 4c 69 74 65  n 3.0..In SQLite
1e80: 20 76 65 72 73 69 6f 6e 20 32 2e 38 2c 20 61 6c   version 2.8, al
1e90: 6c 20 63 6f 6d 6d 69 74 73 20 74 6f 20 61 74 74  l commits to att
1ea0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
1eb0: 62 65 68 61 76 65 64 20 61 73 20 69 66 0a 74 68  behaved as if.th
1ec0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1ed0: 77 65 72 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 2e  were ":memory:".
1ee0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
1ef0: 69 73 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  is a compile-tim
1f00: 65 20 6c 69 6d 69 74 20 6f 66 20 31 30 20 61 74  e limit of 10 at
1f10: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
1f20: 66 69 6c 65 73 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53  files.</p>.}...S
1f30: 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52  ection {BEGIN TR
1f40: 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73  ANSACTION} trans
1f50: 61 63 74 69 6f 6e 0a 0a 53 79 6e 74 61 78 20 7b  action..Syntax {
1f60: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
1f70: 0a 42 45 47 49 4e 20 5b 20 44 45 46 45 52 52 45  .BEGIN [ DEFERRE
1f80: 44 20 7c 20 49 4d 4d 45 44 49 41 54 45 20 7c 20  D | IMMEDIATE | 
1f90: 45 58 43 4c 55 53 49 56 45 20 5d 20 5b 54 52 41  EXCLUSIVE ] [TRA
1fa0: 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e  NSACTION [<name>
1fb0: 5d 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ]].}.Syntax {sql
1fc0: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 45 4e  -statement} {.EN
1fd0: 44 20 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b  D [TRANSACTION [
1fe0: 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61  <name>]].}.Synta
1ff0: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
2000: 7d 20 7b 0a 43 4f 4d 4d 49 54 20 5b 54 52 41 4e  } {.COMMIT [TRAN
2010: 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d  SACTION [<name>]
2020: 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  ].}.Syntax {sql-
2030: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 52 4f 4c  statement} {.ROL
2040: 4c 42 41 43 4b 20 5b 54 52 41 4e 53 41 43 54 49  LBACK [TRANSACTI
2050: 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 0a  ON [<name>]].}..
2060: 70 75 74 73 20 7b 0a 3c 70 3e 42 65 67 69 6e 6e  puts {.<p>Beginn
2070: 69 6e 67 20 69 6e 20 76 65 72 73 69 6f 6e 20 32  ing in version 2
2080: 2e 30 2c 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .0, SQLite suppo
2090: 72 74 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  rts transactions
20a0: 20 77 69 74 68 0a 72 6f 6c 6c 62 61 63 6b 20 61   with.rollback a
20b0: 6e 64 20 61 74 6f 6d 69 63 20 63 6f 6d 6d 69 74  nd atomic commit
20c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70  .</p>..<p>The op
20d0: 74 69 6f 6e 61 6c 20 74 72 61 6e 73 61 63 74 69  tional transacti
20e0: 6f 6e 20 6e 61 6d 65 20 69 73 20 69 67 6e 6f 72  on name is ignor
20f0: 65 64 2e 20 53 51 4c 69 74 65 20 63 75 72 72 65  ed. SQLite curre
2100: 6e 74 6c 79 20 0a 64 6f 65 73 20 6e 6f 74 20 61  ntly .does not a
2110: 6c 6c 6f 77 20 6e 65 73 74 65 64 20 74 72 61 6e  llow nested tran
2120: 73 61 63 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c  sactions.</p>..<
2130: 70 3e 0a 4e 6f 20 63 68 61 6e 67 65 73 20 63 61  p>.No changes ca
2140: 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65  n be made to the
2150: 20 64 61 74 61 62 61 73 65 20 65 78 63 65 70 74   database except
2160: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
2170: 63 74 69 6f 6e 2e 0a 41 6e 79 20 63 6f 6d 6d 61  ction..Any comma
2180: 6e 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20  nd that changes 
2190: 74 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61  the database (ba
21a0: 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c  sically, any SQL
21b0: 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74   command.other t
21c0: 68 61 6e 20 53 45 4c 45 43 54 29 20 77 69 6c 6c  han SELECT) will
21d0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73   automatically s
21e0: 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
21f0: 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74  on if.one is not
2200: 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66 66 65   already in effe
2210: 63 74 2e 20 20 41 75 74 6f 6d 61 74 69 63 61 6c  ct.  Automatical
2220: 6c 79 20 73 74 61 72 74 65 64 20 74 72 61 6e 73  ly started trans
2230: 61 63 74 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d  actions.are comm
2240: 69 74 74 65 64 20 61 74 20 74 68 65 20 63 6f 6e  itted at the con
2250: 63 6c 75 73 69 6f 6e 20 6f 66 20 74 68 65 20 63  clusion of the c
2260: 6f 6d 6d 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ommand..</p>..<p
2270: 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63  >.Transactions c
2280: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61  an be started ma
2290: 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65  nually using the
22a0: 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20   BEGIN.command. 
22b0: 20 53 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f   Such transactio
22c0: 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69  ns usually persi
22d0: 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  st until the nex
22e0: 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  t.COMMIT or ROLL
22f0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42  BACK command.  B
2300: 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ut a transaction
2310: 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c   will also .ROLL
2320: 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74 61  BACK if the data
2330: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f  base is closed o
2340: 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  r if an error oc
2350: 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c  curs.and the ROL
2360: 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72  LBACK conflict r
2370: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
2380: 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64  thm is specified
2390: 2e 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65  ..See the docume
23a0: 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 3c  ntation on the <
23b0: 61 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63  a href="#conflic
23c0: 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f  t">ON CONFLICT</
23d0: 61 3e 0a 63 6c 61 75 73 65 20 66 6f 72 20 61 64  a>.clause for ad
23e0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
23f0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 52  tion about the R
2400: 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74  OLLBACK.conflict
2410: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2420: 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  rithm..</p>..<p>
2430: 0a 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69  .In SQLite versi
2440: 6f 6e 20 33 2e 30 2e 38 20 61 6e 64 20 6c 61 74  on 3.0.8 and lat
2450: 65 72 2c 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  er, transactions
2460: 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65 64   can be deferred
2470: 2c 0a 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20  ,.immediate, or 
2480: 65 78 63 6c 75 73 69 76 65 2e 20 20 44 65 66 65  exclusive.  Defe
2490: 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20  rred means that 
24a0: 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71  no locks are acq
24b0: 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74  uired.on the dat
24c0: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
24d0: 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73  database is firs
24e0: 74 20 61 63 63 65 73 73 65 64 2e 20 20 54 68 75  t accessed.  Thu
24f0: 73 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65  s with a.deferre
2500: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
2510: 68 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65  he BEGIN stateme
2520: 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e  nt itself does n
2530: 6f 74 68 69 6e 67 2e 20 20 4c 6f 63 6b 73 0a 61  othing.  Locks.a
2540: 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65 64 20  re not acquired 
2550: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
2560: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 6f 70  read or write op
2570: 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 66 69  eration.  The fi
2580: 72 73 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69  rst read.operati
2590: 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 64 61 74  on against a dat
25a0: 61 62 61 73 65 20 63 72 65 61 74 65 73 20 61 20  abase creates a 
25b0: 53 48 41 52 45 44 20 6c 6f 63 6b 20 61 6e 64 20  SHARED lock and 
25c0: 74 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20  the first.write 
25d0: 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65  operation create
25e0: 73 20 61 20 52 45 53 45 52 56 45 44 20 6c 6f 63  s a RESERVED loc
25f0: 6b 2e 20 20 20 42 65 63 61 75 73 65 20 74 68 65  k.   Because the
2600: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
2610: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
2620: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
2630: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
2640: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
2650: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
2660: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
2670: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
2680: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
2690: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
26a0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
26b0: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
26c0: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
26d0: 78 65 63 75 74 65 64 2e 0a 49 66 20 74 68 65 20  xecuted..If the 
26e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69  transaction is i
26f0: 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 52  mmediate, then R
2700: 45 53 45 52 56 45 44 20 6c 6f 63 6b 73 0a 61 72  ESERVED locks.ar
2710: 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c  e acquired on al
2720: 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73  l databases as s
2730: 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e  oon as the BEGIN
2740: 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63   command is.exec
2750: 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61  uted, without wa
2760: 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61  iting for the.da
2770: 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65  tabase to be use
2780: 64 2e 20 20 41 66 74 65 72 20 61 20 42 45 47 49  d.  After a BEGI
2790: 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 79 6f 75  N IMMEDIATE, you
27a0: 20 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20   are guaranteed 
27b0: 74 68 61 74 0a 6e 6f 20 6f 74 68 65 72 20 74 68  that.no other th
27c0: 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20  read or process 
27d0: 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20  will be able to 
27e0: 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74  write to the dat
27f0: 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45  abase or.do a BE
2800: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72  GIN IMMEDIATE or
2810: 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45   BEGIN EXCLUSIVE
2820: 2e 20 20 4f 74 68 65 72 20 70 72 6f 63 65 73 73  .  Other process
2830: 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a  es can continue.
2840: 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  to read from the
2850: 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76   database, howev
2860: 65 72 2e 20 20 41 6e 20 65 78 63 6c 75 73 69 76  er.  An exclusiv
2870: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61  e transaction ca
2880: 75 73 65 73 0a 45 58 43 4c 55 53 49 56 45 20 6c  uses.EXCLUSIVE l
2890: 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69  ocks to be acqui
28a0: 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62  red on all datab
28b0: 61 73 65 73 2e 20 20 41 66 74 65 72 20 61 20 42  ases.  After a B
28c0: 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20  EGIN.EXCLUSIVE, 
28d0: 79 6f 75 20 61 72 65 20 67 75 61 72 61 6e 74 65  you are guarante
28e0: 65 64 20 74 68 61 74 20 6e 6f 20 6f 74 68 65 72  ed that no other
28f0: 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65   thread or proce
2900: 73 73 20 77 69 6c 6c 0a 62 65 20 61 62 6c 65 20  ss will.be able 
2910: 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  to read or write
2920: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
2930: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
2940: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
2950: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 20 64 65 73  .</p>..<p>.A des
2960: 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
2970: 6d 65 61 6e 69 6e 67 20 6f 66 20 53 48 41 52 45  meaning of SHARE
2980: 44 2c 20 52 45 53 45 52 56 45 44 2c 20 61 6e 64  D, RESERVED, and
2990: 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 73   EXCLUSIVE locks
29a0: 0a 69 73 20 61 76 61 69 6c 61 62 6c 65 20 3c 61  .is available <a
29b0: 20 68 72 65 66 3d 22 6c 6f 63 6b 69 6e 67 76 33   href="lockingv3
29c0: 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c  .html">separatel
29d0: 79 3c 2f 61 3e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  y</a>..</p>..<p>
29e0: 0a 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68  .The default beh
29f0: 61 76 69 6f 72 20 66 6f 72 20 53 51 4c 69 74 65  avior for SQLite
2a00: 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e 38 20 69   version 3.0.8 i
2a10: 73 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61  s a.deferred tra
2a20: 6e 73 61 63 74 69 6f 6e 2e 20 20 46 6f 72 20 53  nsaction.  For S
2a30: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
2a40: 30 2e 30 20 74 68 72 6f 75 67 68 20 33 2e 30 2e  0.0 through 3.0.
2a50: 37 2c 0a 64 65 66 65 72 72 65 64 20 69 73 20 74  7,.deferred is t
2a60: 68 65 20 6f 6e 6c 79 20 6b 69 6e 64 20 6f 66 20  he only kind of 
2a70: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 76 61 69  transaction avai
2a80: 6c 61 62 6c 65 2e 20 20 46 6f 72 20 53 51 4c 69  lable.  For SQLi
2a90: 74 65 0a 76 65 72 73 69 6f 6e 20 32 2e 38 20 61  te.version 2.8 a
2aa0: 6e 64 20 65 61 72 6c 69 65 72 2c 20 61 6c 6c 20  nd earlier, all 
2ab0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
2ac0: 20 65 78 63 6c 75 73 69 76 65 2e 0a 3c 2f 70 3e   exclusive..</p>
2ad0: 0a 0a 3c 70 3e 0a 54 68 65 20 43 4f 4d 4d 49 54  ..<p>.The COMMIT
2ae0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f   command does no
2af0: 74 20 61 63 74 75 61 6c 6c 79 20 70 65 72 66 6f  t actually perfo
2b00: 72 6d 20 61 20 63 6f 6d 6d 69 74 20 75 6e 74 69  rm a commit unti
2b10: 6c 20 61 6c 6c 0a 70 65 6e 64 69 6e 67 20 53 51  l all.pending SQ
2b20: 4c 20 63 6f 6d 6d 61 6e 64 73 20 66 69 6e 69 73  L commands finis
2b30: 68 2e 20 20 54 68 75 73 20 69 66 20 74 77 6f 20  h.  Thus if two 
2b40: 6f 72 20 6d 6f 72 65 20 53 45 4c 45 43 54 20 73  or more SELECT s
2b50: 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 69 6e  tatements.are in
2b60: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 70   the middle of p
2b70: 72 6f 63 65 73 73 69 6e 67 20 61 6e 64 20 61 20  rocessing and a 
2b80: 43 4f 4d 4d 49 54 20 69 73 20 65 78 65 63 75 74  COMMIT is execut
2b90: 65 64 2c 20 74 68 65 20 63 6f 6d 6d 69 74 0a 77  ed, the commit.w
2ba0: 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  ill not actually
2bb0: 20 6f 63 63 75 72 20 75 6e 74 69 6c 20 61 6c 6c   occur until all
2bc0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2bd0: 74 73 20 66 69 6e 69 73 68 2e 0a 3c 2f 70 3e 0a  ts finish..</p>.
2be0: 0a 3c 70 3e 0a 41 6e 20 61 74 74 65 6d 70 74 20  .<p>.An attempt 
2bf0: 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49  to execute COMMI
2c00: 54 20 6d 69 67 68 74 20 72 65 73 75 6c 74 20 69  T might result i
2c10: 6e 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  n an SQLITE_BUSY
2c20: 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0a 54 68   return code..Th
2c30: 69 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  is indicates tha
2c40: 74 20 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64  t another thread
2c50: 20 6f 72 20 70 72 6f 63 65 73 73 20 68 61 64 20   or process had 
2c60: 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
2c70: 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74  he database.that
2c80: 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64   prevented the d
2c90: 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69  atabase from bei
2ca0: 6e 67 20 75 70 64 61 74 65 64 2e 20 20 57 68 65  ng updated.  Whe
2cb0: 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  n COMMIT fails i
2cc0: 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20  n this.way, the 
2cd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61  transaction rema
2ce0: 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74  ins active and t
2cf0: 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65  he COMMIT can be
2d00: 20 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61   retried later.a
2d10: 66 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20  fter the reader 
2d20: 68 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65  has had a chance
2d30: 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a   to clear..</p>.
2d40: 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d  }...Section comm
2d50: 65 6e 74 20 63 6f 6d 6d 65 6e 74 0a 0a 53 79 6e  ent comment..Syn
2d60: 74 61 78 20 7b 63 6f 6d 6d 65 6e 74 7d 20 7b 3c  tax {comment} {<
2d70: 53 51 4c 2d 63 6f 6d 6d 65 6e 74 3e 20 7c 20 3c  SQL-comment> | <
2d80: 43 2d 63 6f 6d 6d 65 6e 74 3e 0a 7d 20 7b 53 51  C-comment>.} {SQ
2d90: 4c 2d 63 6f 6d 6d 65 6e 74 7d 20 7b 2d 2d 20 3c  L-comment} {-- <
2da0: 73 69 6e 67 6c 65 2d 6c 69 6e 65 3e 0a 7d 20 7b  single-line>.} {
2db0: 43 2d 63 6f 6d 6d 65 6e 74 7d 20 7b 2f 53 54 41  C-comment} {/STA
2dc0: 52 20 3c 6d 75 6c 74 69 70 6c 65 2d 6c 69 6e 65  R <multiple-line
2dd0: 73 3e 20 5b 53 54 41 52 2f 5d 0a 7d 0a 0a 70 75  s> [STAR/].}..pu
2de0: 74 73 20 7b 0a 3c 70 3e 20 43 6f 6d 6d 65 6e 74  ts {.<p> Comment
2df0: 73 20 61 72 65 6e 27 74 20 53 51 4c 20 63 6f 6d  s aren't SQL com
2e00: 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f  mands, but can o
2e10: 63 63 75 72 20 69 6e 20 53 51 4c 20 71 75 65 72  ccur in SQL quer
2e20: 69 65 73 2e 20 54 68 65 79 20 61 72 65 20 0a 74  ies. They are .t
2e30: 72 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73  reated as whites
2e40: 70 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73  pace by the pars
2e50: 65 72 2e 20 20 54 68 65 79 20 63 61 6e 20 62 65  er.  They can be
2e60: 67 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69  gin anywhere whi
2e70: 74 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20  tespace .can be 
2e80: 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67  found, including
2e90: 20 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69   inside expressi
2ea0: 6f 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75  ons that span mu
2eb0: 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f  ltiple lines..</
2ec0: 70 3e 0a 0a 3c 70 3e 20 53 51 4c 20 63 6f 6d 6d  p>..<p> SQL comm
2ed0: 65 6e 74 73 20 6f 6e 6c 79 20 65 78 74 65 6e 64  ents only extend
2ee0: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
2ef0: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 2e  he current line.
2f00: 3c 2f 70 3e 0a 0a 3c 70 3e 20 43 20 63 6f 6d 6d  </p>..<p> C comm
2f10: 65 6e 74 73 20 63 61 6e 20 73 70 61 6e 20 61 6e  ents can span an
2f20: 79 20 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65  y number of line
2f30: 73 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  s.  If there is 
2f40: 6e 6f 20 74 65 72 6d 69 6e 61 74 69 6e 67 0a 64  no terminating.d
2f50: 65 6c 69 6d 69 74 65 72 2c 20 74 68 65 79 20 65  elimiter, they e
2f60: 78 74 65 6e 64 20 74 6f 20 74 68 65 20 65 6e 64  xtend to the end
2f70: 20 6f 66 20 74 68 65 20 69 6e 70 75 74 2e 20 20   of the input.  
2f80: 54 68 69 73 20 69 73 20 6e 6f 74 20 74 72 65 61  This is not trea
2f90: 74 65 64 20 61 73 0a 61 6e 20 65 72 72 6f 72 2e  ted as.an error.
2fa0: 20 20 41 20 6e 65 77 20 53 51 4c 20 73 74 61 74    A new SQL stat
2fb0: 65 6d 65 6e 74 20 63 61 6e 20 62 65 67 69 6e 20  ement can begin 
2fc0: 6f 6e 20 61 20 6c 69 6e 65 20 61 66 74 65 72 20  on a line after 
2fd0: 61 20 6d 75 6c 74 69 6c 69 6e 65 0a 63 6f 6d 6d  a multiline.comm
2fe0: 65 6e 74 20 65 6e 64 73 2e 20 20 43 20 63 6f 6d  ent ends.  C com
2ff0: 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 65 6d 62  ments can be emb
3000: 65 64 64 65 64 20 61 6e 79 77 68 65 72 65 20 77  edded anywhere w
3010: 68 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f 63  hitespace can oc
3020: 63 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69  cur,.including i
3030: 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e  nside expression
3040: 73 2c 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69  s, and in the mi
3050: 64 64 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51  ddle of other SQ
3060: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 43 20  L statements..C 
3070: 63 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20  comments do not 
3080: 6e 65 73 74 2e 20 20 53 51 4c 20 63 6f 6d 6d 65  nest.  SQL comme
3090: 6e 74 73 20 69 6e 73 69 64 65 20 61 20 43 20 63  nts inside a C c
30a0: 6f 6d 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20 69  omment will be i
30b0: 67 6e 6f 72 65 64 2e 0a 3c 2f 70 3e 0a 7d 0a 0a  gnored..</p>.}..
30c0: 0a 53 65 63 74 69 6f 6e 20 43 4f 50 59 20 63 6f  .Section COPY co
30d0: 70 79 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  py..Syntax {sql-
30e0: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 4f 50  statement} {.COP
30f0: 59 20 5b 20 4f 52 20 3c 63 6f 6e 66 6c 69 63 74  Y [ OR <conflict
3100: 2d 61 6c 67 6f 72 69 74 68 6d 3e 20 5d 20 5b 3c  -algorithm> ] [<
3110: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
3120: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 46  ] <table-name> F
3130: 52 4f 4d 20 3c 66 69 6c 65 6e 61 6d 65 3e 0a 5b  ROM <filename>.[
3140: 20 55 53 49 4e 47 20 44 45 4c 49 4d 49 54 45 52   USING DELIMITER
3150: 53 20 3c 64 65 6c 69 6d 3e 20 5d 0a 7d 0a 0a 70  S <delim> ].}..p
3160: 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 43 4f 50  uts {.<p>The COP
3170: 59 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61  Y command is ava
3180: 69 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65  ilable in SQLite
3190: 20 76 65 72 73 69 6f 6e 20 32 2e 38 20 61 6e 64   version 2.8 and
31a0: 20 65 61 72 6c 69 65 72 2e 0a 54 68 65 20 43 4f   earlier..The CO
31b0: 50 59 20 63 6f 6d 6d 61 6e 64 20 68 61 73 20 62  PY command has b
31c0: 65 65 6e 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  een removed from
31d0: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
31e0: 33 2e 30 20 64 75 65 20 74 6f 0a 63 6f 6d 70 6c  3.0 due to.compl
31f0: 69 63 61 74 69 6f 6e 73 20 69 6e 20 74 72 79 69  ications in tryi
3200: 6e 67 20 74 6f 20 73 75 70 70 6f 72 74 20 69 74  ng to support it
3210: 20 69 6e 20 61 20 6d 69 78 65 64 20 55 54 46 2d   in a mixed UTF-
3220: 38 2f 31 36 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  8/16 environment
3230: 2e 0a 49 6e 20 76 65 72 73 69 6f 6e 20 33 2e 30  ..In version 3.0
3240: 2c 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 73  , the <a href="s
3250: 71 6c 69 74 65 2e 68 74 6d 6c 22 3e 63 6f 6d 6d  qlite.html">comm
3260: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 3c 2f  and-line shell</
3270: 61 3e 0a 63 6f 6e 74 61 69 6e 73 20 61 20 6e 65  a>.contains a ne
3280: 77 20 63 6f 6d 6d 61 6e 64 20 3c 62 3e 2e 69 6d  w command <b>.im
3290: 70 6f 72 74 3c 2f 62 3e 20 74 68 61 74 20 63 61  port</b> that ca
32a0: 6e 20 62 65 20 75 73 65 64 20 61 73 20 61 20 73  n be used as a s
32b0: 75 62 73 74 69 74 75 74 65 0a 66 6f 72 20 43 4f  ubstitute.for CO
32c0: 50 59 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  PY..</p>..<p>The
32d0: 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 20 69 73   COPY command is
32e0: 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 75 73   an extension us
32f0: 65 64 20 74 6f 20 6c 6f 61 64 20 6c 61 72 67 65  ed to load large
3300: 20 61 6d 6f 75 6e 74 73 20 6f 66 0a 64 61 74 61   amounts of.data
3310: 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 2e 20 20   into a table.  
3320: 49 74 20 69 73 20 6d 6f 64 65 6c 65 64 20 61 66  It is modeled af
3330: 74 65 72 20 61 20 73 69 6d 69 6c 61 72 20 63 6f  ter a similar co
3340: 6d 6d 61 6e 64 20 66 6f 75 6e 64 0a 69 6e 20 50  mmand found.in P
3350: 6f 73 74 67 72 65 53 51 4c 2e 20 20 49 6e 20 66  ostgreSQL.  In f
3360: 61 63 74 2c 20 74 68 65 20 53 51 4c 69 74 65 20  act, the SQLite 
3370: 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 20 69 73 20  COPY command is 
3380: 73 70 65 63 69 66 69 63 61 6c 6c 79 0a 64 65 73  specifically.des
3390: 69 67 6e 65 64 20 74 6f 20 62 65 20 61 62 6c 65  igned to be able
33a0: 20 74 6f 20 72 65 61 64 20 74 68 65 20 6f 75 74   to read the out
33b0: 70 75 74 20 6f 66 20 74 68 65 20 50 6f 73 74 67  put of the Postg
33c0: 72 65 53 51 4c 20 64 75 6d 70 0a 75 74 69 6c 69  reSQL dump.utili
33d0: 74 79 20 3c 62 3e 70 67 5f 64 75 6d 70 3c 2f 62  ty <b>pg_dump</b
33e0: 3e 20 73 6f 20 74 68 61 74 20 64 61 74 61 20 63  > so that data c
33f0: 61 6e 20 62 65 20 65 61 73 69 6c 79 20 74 72 61  an be easily tra
3400: 6e 73 66 65 72 72 65 64 20 66 72 6f 6d 0a 50 6f  nsferred from.Po
3410: 73 74 67 72 65 53 51 4c 20 69 6e 74 6f 20 53 51  stgreSQL into SQ
3420: 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  Lite.</p>..<p>Th
3430: 65 20 74 61 62 6c 65 2d 6e 61 6d 65 20 69 73 20  e table-name is 
3440: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 65  the name of an e
3450: 78 69 73 74 69 6e 67 20 74 61 62 6c 65 20 77 68  xisting table wh
3460: 69 63 68 20 69 73 20 74 6f 0a 62 65 20 66 69 6c  ich is to.be fil
3470: 6c 65 64 20 77 69 74 68 20 64 61 74 61 2e 20 20  led with data.  
3480: 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 69 73 20  The filename is 
3490: 61 20 73 74 72 69 6e 67 20 6f 72 20 69 64 65 6e  a string or iden
34a0: 74 69 66 69 65 72 20 74 68 61 74 0a 6e 61 6d 65  tifier that.name
34b0: 73 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 77 68  s a file from wh
34c0: 69 63 68 20 64 61 74 61 20 77 69 6c 6c 20 62 65  ich data will be
34d0: 20 72 65 61 64 2e 20 20 54 68 65 20 66 69 6c 65   read.  The file
34e0: 6e 61 6d 65 20 63 61 6e 20 62 65 0a 74 68 65 20  name can be.the 
34f0: 3c 62 3e 53 54 44 49 4e 3c 2f 62 3e 20 74 6f 20  <b>STDIN</b> to 
3500: 72 65 61 64 20 64 61 74 61 20 66 72 6f 6d 20 73  read data from s
3510: 74 61 6e 64 61 72 64 20 69 6e 70 75 74 2e 3c 2f  tandard input.</
3520: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 6c 69 6e 65  p>..<p>Each line
3530: 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 66 69   of the input fi
3540: 6c 65 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  le is converted 
3550: 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 65  into a single re
3560: 63 6f 72 64 0a 69 6e 20 74 68 65 20 74 61 62 6c  cord.in the tabl
3570: 65 2e 20 20 43 6f 6c 75 6d 6e 73 20 61 72 65 20  e.  Columns are 
3580: 73 65 70 61 72 61 74 65 64 20 62 79 20 74 61 62  separated by tab
3590: 73 2e 20 20 49 66 20 61 20 74 61 62 20 6f 63 63  s.  If a tab occ
35a0: 75 72 73 20 61 73 0a 64 61 74 61 20 77 69 74 68  urs as.data with
35b0: 69 6e 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65  in a column, the
35c0: 6e 20 74 68 61 74 20 74 61 62 20 69 73 20 70 72  n that tab is pr
35d0: 65 63 65 64 65 64 20 62 79 20 61 20 62 61 73 6b  eceded by a bask
35e0: 73 6c 61 73 68 20 22 5c 22 0a 63 68 61 72 61 63  slash "\".charac
35f0: 74 65 72 2e 20 20 41 20 62 61 73 6b 73 6c 61 73  ter.  A baskslas
3600: 68 20 69 6e 20 74 68 65 20 64 61 74 61 20 61 70  h in the data ap
3610: 70 65 61 72 73 20 61 73 20 74 77 6f 20 62 61 63  pears as two bac
3620: 6b 73 6c 61 73 68 65 73 20 69 6e 0a 61 20 72 6f  kslashes in.a ro
3630: 77 2e 20 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c  w.  The optional
3640: 20 55 53 49 4e 47 20 44 45 4c 49 4d 49 54 45 52   USING DELIMITER
3650: 53 20 63 6c 61 75 73 65 20 63 61 6e 20 73 70 65  S clause can spe
3660: 63 69 66 79 20 61 20 64 65 6c 69 6d 69 74 65 72  cify a delimiter
3670: 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 61 62 2e  .other than tab.
3680: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 63 6f  </p>..<p>If a co
3690: 6c 75 6d 6e 20 63 6f 6e 73 69 73 74 73 20 6f 66  lumn consists of
36a0: 20 74 68 65 20 63 68 61 72 61 63 74 65 72 20 22   the character "
36b0: 5c 4e 22 2c 20 74 68 61 74 20 63 6f 6c 75 6d 6e  \N", that column
36c0: 20 69 73 20 66 69 6c 6c 65 64 0a 77 69 74 68 20   is filled.with 
36d0: 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 2e 3c  the value NULL.<
36e0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69  /p>..<p>The opti
36f0: 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
3700: 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
3710: 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66  specification of
3720: 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a   an alternative.
3730: 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
3740: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
3750: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
3760: 66 6f 72 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d  for this one com
3770: 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65  mand..See the se
3780: 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20  ction titled.<a 
3790: 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22  href="#conflict"
37a0: 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e  >ON CONFLICT</a>
37b0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
37c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
37d0: 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 69 6e  ..<p>When the in
37e0: 70 75 74 20 64 61 74 61 20 73 6f 75 72 63 65 20  put data source 
37f0: 69 73 20 53 54 44 49 4e 2c 20 74 68 65 20 69 6e  is STDIN, the in
3800: 70 75 74 20 63 61 6e 20 62 65 20 74 65 72 6d 69  put can be termi
3810: 6e 61 74 65 64 0a 62 79 20 61 20 6c 69 6e 65 20  nated.by a line 
3820: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
3830: 6c 79 20 61 20 62 61 73 6b 73 6c 61 73 68 20 61  ly a baskslash a
3840: 6e 64 20 61 20 64 6f 74 3a 7d 0a 70 75 74 73 20  nd a dot:}.puts 
3850: 22 5c 22 5b 4f 70 65 72 61 74 6f 72 20 5c 5c 2e  "\"[Operator \\.
3860: 5d 5c 22 2e 3c 2f 70 3e 22 0a 0a 0a 53 65 63 74  ]\".</p>"...Sect
3870: 69 6f 6e 20 7b 43 52 45 41 54 45 20 49 4e 44 45  ion {CREATE INDE
3880: 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 0a 0a  X} createindex..
3890: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
38a0: 65 6d 65 6e 74 7d 20 7b 0a 43 52 45 41 54 45 20  ement} {.CREATE 
38b0: 5b 55 4e 49 51 55 45 5d 20 49 4e 44 45 58 20 5b  [UNIQUE] INDEX [
38c0: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
38d0: 2e 5d 20 3c 69 6e 64 65 78 2d 6e 61 6d 65 3e 20  .] <index-name> 
38e0: 0a 4f 4e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  .ON <table-name>
38f0: 20 28 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e   ( <column-name>
3900: 20 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   [, <column-name
3910: 3e 5d 2a 20 29 0a 5b 20 4f 4e 20 43 4f 4e 46 4c  >]* ).[ ON CONFL
3920: 49 43 54 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c  ICT <conflict-al
3930: 67 6f 72 69 74 68 6d 3e 20 5d 0a 7d 20 7b 63 6f  gorithm> ].} {co
3940: 6c 75 6d 6e 2d 6e 61 6d 65 7d 20 7b 0a 3c 6e 61  lumn-name} {.<na
3950: 6d 65 3e 20 5b 20 43 4f 4c 4c 41 54 45 20 3c 63  me> [ COLLATE <c
3960: 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 5d 20  ollation-name>] 
3970: 5b 20 41 53 43 20 7c 20 44 45 53 43 20 5d 0a 7d  [ ASC | DESC ].}
3980: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
3990: 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 6d  CREATE INDEX com
39a0: 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66  mand consists of
39b0: 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 43   the keywords "C
39c0: 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f 6c  REATE INDEX" fol
39d0: 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61 6d  lowed.by the nam
39e0: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e 64  e of the new ind
39f0: 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 20  ex, the keyword 
3a00: 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f  "ON", the name o
3a10: 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a 63  f a previously.c
3a20: 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68 61  reated table tha
3a30: 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65 78  t is to be index
3a40: 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e 74  ed, and a parent
3a50: 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
3a60: 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73  names of.columns
3a70: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68   in the table th
3a80: 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  at are used for 
3a90: 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 45  the index key..E
3aa0: 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ach column name 
3ab0: 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  can be followed 
3ac0: 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41  by one of the "A
3ad0: 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65  SC" or "DESC" ke
3ae0: 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61  ywords.to indica
3af0: 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2c 20 62  te sort order, b
3b00: 75 74 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65  ut the sort orde
3b10: 72 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20  r is ignored in 
3b20: 74 68 65 20 63 75 72 72 65 6e 74 0a 69 6d 70 6c  the current.impl
3b30: 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 53 6f 72  ementation.  Sor
3b40: 74 69 6e 67 20 69 73 20 61 6c 77 61 79 73 20 64  ting is always d
3b50: 6f 6e 65 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  one in ascending
3b60: 20 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   order.</p>..<p>
3b70: 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  The COLLATE clau
3b80: 73 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63  se following eac
3b90: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65  h column name de
3ba0: 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
3bb0: 67 0a 73 65 71 75 65 6e 63 65 20 75 73 65 64 20  g.sequence used 
3bc0: 66 6f 72 20 74 65 78 74 20 65 6e 74 69 72 65 73  for text entires
3bd0: 20 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e   in that column.
3be0: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f    The default co
3bf0: 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65  llating.sequence
3c00: 20 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   is the collatin
3c10: 67 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e  g sequence defin
3c20: 65 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75  ed for that colu
3c30: 6d 6e 20 69 6e 20 74 68 65 0a 43 52 45 41 54 45  mn in the.CREATE
3c40: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
3c50: 2e 20 20 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c  .  Or if no coll
3c60: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
3c70: 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69  s otherwise defi
3c80: 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69  ned,.the built-i
3c90: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
3ca0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
3cb0: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sed.</p>..<p>The
3cc0: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
3cd0: 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68  ary limits on th
3ce0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69  e number of indi
3cf0: 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ces that can be.
3d00: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69  attached to a si
3d10: 6e 67 6c 65 20 74 61 62 6c 65 2c 20 6e 6f 72 20  ngle table, nor 
3d20: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
3d30: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69   columns in an i
3d40: 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ndex.</p>..<p>If
3d50: 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77   the UNIQUE keyw
3d60: 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77  ord appears betw
3d70: 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49  een CREATE and I
3d80: 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63  NDEX then duplic
3d90: 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65  ate.index entrie
3da0: 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65  s are not allowe
3db0: 64 2e 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20  d.  Any attempt 
3dc0: 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c  to insert a dupl
3dd0: 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c  icate entry.will
3de0: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72   result in an er
3df0: 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ror.</p>..<p>The
3e00: 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69   optional confli
3e10: 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73  ct-clause allows
3e20: 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69   the specificati
3e30: 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61  on of an alterna
3e40: 74 69 76 65 0a 64 65 66 61 75 6c 74 20 63 6f 6e  tive.default con
3e50: 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
3e60: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
3e70: 72 69 74 68 6d 20 66 6f 72 20 74 68 69 73 20 69  rithm for this i
3e80: 6e 64 65 78 2e 0a 54 68 69 73 20 6f 6e 6c 79 20  ndex..This only 
3e90: 6d 61 6b 65 73 20 73 65 6e 73 65 20 69 66 20 74  makes sense if t
3ea0: 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72  he UNIQUE keywor
3eb0: 64 20 69 73 20 75 73 65 64 20 73 69 6e 63 65 20  d is used since 
3ec0: 6f 74 68 65 72 77 69 73 65 0a 74 68 65 72 65 20  otherwise.there 
3ed0: 61 72 65 20 6e 6f 74 20 63 6f 6e 73 74 72 61 69  are not constrai
3ee0: 6e 74 73 20 6f 6e 20 74 68 65 20 69 6e 64 65 78  nts on the index
3ef0: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 61  .  The default a
3f00: 6c 67 6f 72 69 74 68 6d 20 69 73 0a 41 42 4f 52  lgorithm is.ABOR
3f10: 54 2e 20 20 49 66 20 61 20 43 4f 50 59 2c 20 49  T.  If a COPY, I
3f20: 4e 53 45 52 54 2c 20 6f 72 20 55 50 44 41 54 45  NSERT, or UPDATE
3f30: 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63 69   statement speci
3f40: 66 69 65 73 20 61 20 70 61 72 74 69 63 75 6c 61  fies a particula
3f50: 72 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  r.conflict resol
3f60: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2c  ution algorithm,
3f70: 20 74 68 61 74 20 61 6c 67 6f 72 69 74 68 6d 20   that algorithm 
3f80: 69 73 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  is used in place
3f90: 20 6f 66 0a 74 68 65 20 64 65 66 61 75 6c 74 20   of.the default 
3fa0: 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
3fb0: 69 65 64 20 68 65 72 65 2e 0a 53 65 65 20 74 68  ied here..See th
3fc0: 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
3fd0: 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c  .<a href="#confl
3fe0: 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54  ict">ON CONFLICT
3ff0: 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69 74 69 6f  </a> for additio
4000: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
4010: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 65 78 61  </p>..<p>The exa
4020: 63 74 20 74 65 78 74 0a 6f 66 20 65 61 63 68 20  ct text.of each 
4030: 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
4040: 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64  tement is stored
4050: 20 69 6e 20 74 68 65 20 3c 62 3e 73 71 6c 69 74   in the <b>sqlit
4060: 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 6f 72 20  e_master</b>.or 
4070: 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  <b>sqlite_temp_m
4080: 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 2c  aster</b> table,
4090: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
40a0: 65 74 68 65 72 20 74 68 65 20 74 61 62 6c 65 0a  ether the table.
40b0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 69 73  being indexed is
40c0: 20 74 65 6d 70 6f 72 61 72 79 2e 20 20 45 76 65   temporary.  Eve
40d0: 72 79 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  ry time the data
40e0: 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2c 0a  base is opened,.
40f0: 61 6c 6c 20 43 52 45 41 54 45 20 49 4e 44 45 58  all CREATE INDEX
4100: 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20   statements.are 
4110: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 3c 62  read from the <b
4120: 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f  >sqlite_master</
4130: 62 3e 20 74 61 62 6c 65 20 61 6e 64 20 75 73 65  b> table and use
4140: 64 20 74 6f 20 72 65 67 65 6e 65 72 61 74 65 0a  d to regenerate.
4150: 53 51 4c 69 74 65 27 73 20 69 6e 74 65 72 6e 61  SQLite's interna
4160: 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
4170: 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6c 61   of the index la
4180: 79 6f 75 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  yout.</p>..<p>In
4190: 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f 76 65  dexes are remove
41a0: 64 20 77 69 74 68 20 74 68 65 20 3c 61 20 68 72  d with the <a hr
41b0: 65 66 3d 22 23 64 72 6f 70 69 6e 64 65 78 22 3e  ef="#dropindex">
41c0: 44 52 4f 50 20 49 4e 44 45 58 3c 2f 61 3e 20 0a  DROP INDEX</a> .
41d0: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 7d 0a 0a  command.</p>.}..
41e0: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
41f0: 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74   TABLE} {createt
4200: 61 62 6c 65 7d 0a 0a 53 79 6e 74 61 78 20 7b 73  able}..Syntax {s
4210: 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43 52  ql-command} {.CR
4220: 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d  EATE [TEMP | TEM
4230: 50 4f 52 41 52 59 5d 20 54 41 42 4c 45 20 3c 74  PORARY] TABLE <t
4240: 61 62 6c 65 2d 6e 61 6d 65 3e 20 28 0a 20 20 3c  able-name> (.  <
4250: 63 6f 6c 75 6d 6e 2d 64 65 66 3e 20 5b 2c 20 3c  column-def> [, <
4260: 63 6f 6c 75 6d 6e 2d 64 65 66 3e 5d 2a 0a 20 20  column-def>]*.  
4270: 5b 2c 20 3c 63 6f 6e 73 74 72 61 69 6e 74 3e 5d  [, <constraint>]
4280: 2a 0a 29 0a 7d 20 7b 73 71 6c 2d 63 6f 6d 6d 61  *.).} {sql-comma
4290: 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45  nd} {.CREATE [TE
42a0: 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20  MP | TEMPORARY] 
42b0: 54 41 42 4c 45 20 5b 3c 64 61 74 61 62 61 73 65  TABLE [<database
42c0: 2d 6e 61 6d 65 3e 2e 5d 20 3c 74 61 62 6c 65 2d  -name>.] <table-
42d0: 6e 61 6d 65 3e 20 41 53 20 3c 73 65 6c 65 63 74  name> AS <select
42e0: 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 20 7b 63  -statement>.} {c
42f0: 6f 6c 75 6d 6e 2d 64 65 66 7d 20 7b 0a 3c 6e 61  olumn-def} {.<na
4300: 6d 65 3e 20 5b 3c 74 79 70 65 3e 5d 20 5b 5b 43  me> [<type>] [[C
4310: 4f 4e 53 54 52 41 49 4e 54 20 3c 6e 61 6d 65 3e  ONSTRAINT <name>
4320: 5d 20 3c 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72  ] <column-constr
4330: 61 69 6e 74 3e 5d 2a 0a 7d 20 7b 74 79 70 65 7d  aint>]*.} {type}
4340: 20 7b 0a 3c 74 79 70 65 6e 61 6d 65 3e 20 7c 0a   {.<typename> |.
4350: 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20 3c 6e 75  <typename> ( <nu
4360: 6d 62 65 72 3e 20 29 20 7c 0a 3c 74 79 70 65 6e  mber> ) |.<typen
4370: 61 6d 65 3e 20 28 20 3c 6e 75 6d 62 65 72 3e 20  ame> ( <number> 
4380: 2c 20 3c 6e 75 6d 62 65 72 3e 20 29 0a 7d 20 7b  , <number> ).} {
4390: 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e  column-constrain
43a0: 74 7d 20 7b 0a 4e 4f 54 20 4e 55 4c 4c 20 5b 20  t} {.NOT NULL [ 
43b0: 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  <conflict-clause
43c0: 3e 20 5d 20 7c 0a 50 52 49 4d 41 52 59 20 4b 45  > ] |.PRIMARY KE
43d0: 59 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e 5d  Y [<sort-order>]
43e0: 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   [ <conflict-cla
43f0: 75 73 65 3e 20 5d 20 5b 41 55 54 4f 49 4e 43 52  use> ] [AUTOINCR
4400: 45 4d 45 4e 54 5d 20 7c 0a 55 4e 49 51 55 45 20  EMENT] |.UNIQUE 
4410: 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  [ <conflict-clau
4420: 73 65 3e 20 5d 20 7c 0a 43 48 45 43 4b 20 28 20  se> ] |.CHECK ( 
4430: 3c 65 78 70 72 3e 20 29 20 5b 20 3c 63 6f 6e 66  <expr> ) [ <conf
4440: 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c  lict-clause> ] |
4450: 0a 44 45 46 41 55 4c 54 20 3c 76 61 6c 75 65 3e  .DEFAULT <value>
4460: 20 7c 0a 43 4f 4c 4c 41 54 45 20 3c 63 6f 6c 6c   |.COLLATE <coll
4470: 61 74 69 6f 6e 2d 6e 61 6d 65 3e 0a 7d 20 7b 63  ation-name>.} {c
4480: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0a 50 52 49  onstraint} {.PRI
4490: 4d 41 52 59 20 4b 45 59 20 28 20 3c 63 6f 6c 75  MARY KEY ( <colu
44a0: 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b 20 3c 63 6f  mn-list> ) [ <co
44b0: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d  nflict-clause> ]
44c0: 20 7c 0a 55 4e 49 51 55 45 20 28 20 3c 63 6f 6c   |.UNIQUE ( <col
44d0: 75 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b 20 3c 63  umn-list> ) [ <c
44e0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20  onflict-clause> 
44f0: 5d 20 7c 0a 43 48 45 43 4b 20 28 20 3c 65 78 70  ] |.CHECK ( <exp
4500: 72 3e 20 29 20 5b 20 3c 63 6f 6e 66 6c 69 63 74  r> ) [ <conflict
4510: 2d 63 6c 61 75 73 65 3e 20 5d 0a 7d 20 7b 63 6f  -clause> ].} {co
4520: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 7d 20 7b  nflict-clause} {
4530: 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 3c 63 6f  .ON CONFLICT <co
4540: 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d  nflict-algorithm
4550: 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 41  >.}..puts {.<p>A
4560: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
4570: 61 74 65 6d 65 6e 74 20 69 73 20 62 61 73 69 63  atement is basic
4580: 61 6c 6c 79 20 74 68 65 20 6b 65 79 77 6f 72 64  ally the keyword
4590: 73 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 22  s "CREATE TABLE"
45a0: 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65  .followed by the
45b0: 20 6e 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 74   name of a new t
45c0: 61 62 6c 65 20 61 6e 64 20 61 20 70 61 72 65 6e  able and a paren
45d0: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
45e0: 20 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69   column.definiti
45f0: 6f 6e 73 20 61 6e 64 20 63 6f 6e 73 74 72 61 69  ons and constrai
4600: 6e 74 73 2e 20 20 54 68 65 20 74 61 62 6c 65 20  nts.  The table 
4610: 6e 61 6d 65 20 63 61 6e 20 62 65 20 65 69 74 68  name can be eith
4620: 65 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  er an identifier
4630: 0a 6f 72 20 61 20 73 74 72 69 6e 67 2e 20 20 54  .or a string.  T
4640: 61 62 6c 65 73 20 6e 61 6d 65 73 20 74 68 61 74  ables names that
4650: 20 62 65 67 69 6e 20 77 69 74 68 20 22 3c 62 3e   begin with "<b>
4660: 73 71 6c 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65  sqlite_</b>" are
4670: 20 72 65 73 65 72 76 65 64 0a 66 6f 72 20 75 73   reserved.for us
4680: 65 20 62 79 20 74 68 65 20 65 6e 67 69 6e 65 2e  e by the engine.
4690: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f  </p>..<p>Each co
46a0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  lumn definition 
46b0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
46c0: 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 6c 6c 6f 77  he column follow
46d0: 65 64 20 62 79 20 74 68 65 0a 64 61 74 61 74 79  ed by the.dataty
46e0: 70 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75  pe for that colu
46f0: 6d 6e 2c 20 74 68 65 6e 20 6f 6e 65 20 6f 72 20  mn, then one or 
4700: 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  more optional co
4710: 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73  lumn constraints
4720: 2e 0a 54 68 65 20 64 61 74 61 74 79 70 65 20 66  ..The datatype f
4730: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 6f  or the column do
4740: 65 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20  es not restrict 
4750: 77 68 61 74 20 64 61 74 61 20 6d 61 79 20 62 65  what data may be
4760: 20 70 75 74 0a 69 6e 20 74 68 61 74 20 63 6f 6c   put.in that col
4770: 75 6d 6e 2e 0a 53 65 65 20 3c 61 20 68 72 65 66  umn..See <a href
4780: 3d 22 64 61 74 61 74 79 70 65 33 2e 68 74 6d 6c  ="datatype3.html
4790: 22 3e 44 61 74 61 74 79 70 65 73 20 49 6e 20 53  ">Datatypes In S
47a0: 51 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 3c  QLite Version 3<
47b0: 2f 61 3e 20 66 6f 72 0a 61 64 64 69 74 69 6f 6e  /a> for.addition
47c0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
47d0: 54 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  The UNIQUE const
47e0: 72 61 69 6e 74 20 63 61 75 73 65 73 20 61 6e 20  raint causes an 
47f0: 69 6e 64 65 78 20 74 6f 20 62 65 20 63 72 65 61  index to be crea
4800: 74 65 64 20 6f 6e 20 74 68 65 20 73 70 65 63 69  ted on the speci
4810: 66 69 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 54  fied.columns.  T
4820: 68 69 73 20 69 6e 64 65 78 20 6d 75 73 74 20 63  his index must c
4830: 6f 6e 74 61 69 6e 20 75 6e 69 71 75 65 20 6b 65  ontain unique ke
4840: 79 73 2e 0a 54 68 65 20 43 4f 4c 4c 41 54 45 20  ys..The COLLATE 
4850: 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
4860: 20 77 68 61 74 20 74 65 78 74 20 3c 61 20 68 72   what text <a hr
4870: 65 66 3d 22 64 61 74 61 74 79 70 65 33 2e 68 74  ef="datatype3.ht
4880: 6d 6c 23 63 6f 6c 6c 61 74 69 6f 6e 22 3e 0a 63  ml#collation">.c
4890: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
48a0: 6e 3c 2f 61 3e 20 74 6f 20 75 73 65 20 77 68 65  n</a> to use whe
48b0: 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 65 78 74  n comparing text
48c0: 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65   entries for the
48d0: 20 63 6f 6c 75 6d 6e 2e 20 20 0a 54 68 65 20 62   column.  .The b
48e0: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
48f0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
4900: 6e 20 69 73 20 75 73 65 64 20 62 79 20 64 65 66  n is used by def
4910: 61 75 6c 74 2e 0a 3c 70 3e 0a 54 68 65 20 44 45  ault..<p>.The DE
4920: 46 41 55 4c 54 20 63 6f 6e 73 74 72 61 69 6e 74  FAULT constraint
4930: 20 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66   specifies a def
4940: 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73  ault value to us
4950: 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  e when doing an 
4960: 49 4e 53 45 52 54 2e 0a 54 68 65 20 76 61 6c 75  INSERT..The valu
4970: 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2c 20 61  e may be NULL, a
4980: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
4990: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 53 74   or a number. St
49a0: 61 72 74 69 6e 67 20 77 69 74 68 20 76 65 72 73  arting with vers
49b0: 69 6f 6e 0a 33 2e 31 2e 30 2c 20 74 68 65 20 64  ion.3.1.0, the d
49c0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61 79  efault value may
49d0: 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20   also be one of 
49e0: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
49f0: 2d 69 6e 64 65 70 65 6e 64 61 6e 74 0a 6b 65 79  -independant.key
4a00: 77 6f 72 64 73 20 43 55 52 52 45 4e 54 5f 54 49  words CURRENT_TI
4a10: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
4a20: 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   or CURRENT_TIME
4a30: 53 54 41 4d 50 2e 20 49 66 20 74 68 65 20 76 61  STAMP. If the va
4a40: 6c 75 65 20 69 73 0a 4e 55 4c 4c 2c 20 61 20 73  lue is.NULL, a s
4a50: 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f  tring constant o
4a60: 72 20 6e 75 6d 62 65 72 2c 20 69 74 20 69 73 20  r number, it is 
4a70: 6c 69 74 65 72 61 6c 6c 79 20 69 6e 73 65 72 74  literally insert
4a80: 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75  ed into the colu
4a90: 6d 6e 0a 77 68 65 6e 65 76 65 72 20 61 6e 20 49  mn.whenever an I
4aa0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
4ab0: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70  that does not sp
4ac0: 65 63 69 66 79 20 61 20 76 61 6c 75 65 20 66 6f  ecify a value fo
4ad0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 0a  r the column is.
4ae0: 65 78 65 63 75 74 65 64 2e 20 49 66 20 74 68 65  executed. If the
4af0: 20 76 61 6c 75 65 20 69 73 20 43 55 52 52 45 4e   value is CURREN
4b00: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
4b10: 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f  DATE or CURRENT_
4b20: 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 0a  TIMESTAMP, then.
4b30: 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43 20  the current UTC 
4b40: 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65  date and/or time
4b50: 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74   is inserted int
4b60: 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 73 2e 20 46  o the columns. F
4b70: 6f 72 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  or.CURRENT_TIME,
4b80: 20 74 68 65 20 66 6f 72 6d 61 74 20 69 73 20 48   the format is H
4b90: 48 3a 4d 4d 3a 53 53 2e 20 46 6f 72 20 43 55 52  H:MM:SS. For CUR
4ba0: 52 45 4e 54 5f 44 41 54 45 2c 20 59 59 59 59 2d  RENT_DATE, YYYY-
4bb0: 4d 4d 2d 44 44 2e 20 54 68 65 20 66 6f 72 6d 61  MM-DD. The forma
4bc0: 74 0a 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  t.for CURRENT_TI
4bd0: 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59  MESTAMP is "YYYY
4be0: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
4bf0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 53 70 65 63 69  ..</p>..<p>Speci
4c00: 66 79 69 6e 67 20 61 20 50 52 49 4d 41 52 59 20  fying a PRIMARY 
4c10: 4b 45 59 20 6e 6f 72 6d 61 6c 6c 79 20 6a 75 73  KEY normally jus
4c20: 74 20 63 72 65 61 74 65 73 20 61 20 55 4e 49 51  t creates a UNIQ
4c30: 55 45 20 69 6e 64 65 78 0a 6f 6e 20 74 68 65 20  UE index.on the 
4c40: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f  corresponding co
4c50: 6c 75 6d 6e 73 2e 20 20 48 6f 77 65 76 65 72 2c  lumns.  However,
4c60: 20 69 66 20 70 72 69 6d 61 72 79 20 6b 65 79 20   if primary key 
4c70: 69 73 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 63  is on a single c
4c80: 6f 6c 75 6d 6e 0a 74 68 61 74 20 68 61 73 20 64  olumn.that has d
4c90: 61 74 61 74 79 70 65 20 49 4e 54 45 47 45 52 2c  atatype INTEGER,
4ca0: 20 74 68 65 6e 20 74 68 61 74 20 63 6f 6c 75 6d   then that colum
4cb0: 6e 20 69 73 20 75 73 65 64 20 69 6e 74 65 72 6e  n is used intern
4cc0: 61 6c 6c 79 0a 61 73 20 74 68 65 20 61 63 74 75  ally.as the actu
4cd0: 61 6c 20 6b 65 79 20 6f 66 20 74 68 65 20 42 2d  al key of the B-
4ce0: 54 72 65 65 20 66 6f 72 20 74 68 65 20 74 61 62  Tree for the tab
4cf0: 6c 65 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 20  le.  This means 
4d00: 74 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 0a  that the column.
4d10: 6d 61 79 20 6f 6e 6c 79 20 68 6f 6c 64 20 75 6e  may only hold un
4d20: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
4d30: 75 65 73 2e 20 20 28 45 78 63 65 70 74 20 66 6f  ues.  (Except fo
4d40: 72 20 74 68 69 73 20 6f 6e 65 20 63 61 73 65 2c  r this one case,
4d50: 0a 53 51 4c 69 74 65 20 69 67 6e 6f 72 65 73 20  .SQLite ignores 
4d60: 74 68 65 20 64 61 74 61 74 79 70 65 20 73 70 65  the datatype spe
4d70: 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 63 6f  cification of co
4d80: 6c 75 6d 6e 73 20 61 6e 64 20 61 6c 6c 6f 77 73  lumns and allows
4d90: 0a 61 6e 79 20 6b 69 6e 64 20 6f 66 20 64 61 74  .any kind of dat
4da0: 61 20 74 6f 20 62 65 20 70 75 74 20 69 6e 20 61  a to be put in a
4db0: 20 63 6f 6c 75 6d 6e 20 72 65 67 61 72 64 6c 65   column regardle
4dc0: 73 73 20 6f 66 20 69 74 73 20 64 65 63 6c 61 72  ss of its declar
4dd0: 65 64 0a 64 61 74 61 74 79 70 65 2e 29 20 20 49  ed.datatype.)  I
4de0: 66 20 61 20 74 61 62 6c 65 20 64 6f 65 73 20 6e  f a table does n
4df0: 6f 74 20 68 61 76 65 20 61 6e 20 49 4e 54 45 47  ot have an INTEG
4e00: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ER PRIMARY KEY c
4e10: 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20 74 68 65 20  olumn,.then the 
4e20: 42 2d 54 72 65 65 20 6b 65 79 20 77 69 6c 6c 20  B-Tree key will 
4e30: 62 65 20 61 20 61 75 74 6f 6d 61 74 69 63 61 6c  be a automatical
4e40: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e 74  ly generated int
4e50: 65 67 65 72 2e 20 20 54 68 65 0a 42 2d 54 72 65  eger.  The.B-Tre
4e60: 65 20 6b 65 79 20 66 6f 72 20 61 20 72 6f 77 20  e key for a row 
4e70: 63 61 6e 20 61 6c 77 61 79 73 20 62 65 20 61 63  can always be ac
4e80: 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65  cessed using one
4e90: 20 6f 66 20 74 68 65 0a 73 70 65 63 69 61 6c 20   of the.special 
4ea0: 6e 61 6d 65 73 20 22 3c 62 3e 52 4f 57 49 44 3c  names "<b>ROWID<
4eb0: 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49 44 3c 2f 62  /b>", "<b>OID</b
4ec0: 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49  >", or "<b>_ROWI
4ed0: 44 5f 3c 2f 62 3e 22 2e 0a 54 68 69 73 20 69 73  D_</b>"..This is
4ee0: 20 74 72 75 65 20 72 65 67 61 72 64 6c 65 73 73   true regardless
4ef0: 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
4f00: 6f 74 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  ot there is an I
4f10: 4e 54 45 47 45 52 0a 50 52 49 4d 41 52 59 20 4b  NTEGER.PRIMARY K
4f20: 45 59 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20  EY.  An INTEGER 
4f30: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
4f40: 6d 6e 20 6d 61 6e 20 61 6c 73 6f 20 69 6e 63 6c  mn man also incl
4f50: 75 64 65 20 74 68 65 0a 6b 65 79 77 6f 72 64 20  ude the.keyword 
4f60: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20  AUTOINCREMENT.  
4f70: 54 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  The AUTOINCREMEN
4f80: 54 20 6b 65 79 77 6f 72 64 20 6d 6f 64 69 66 69  T keyword modifi
4f90: 65 64 20 74 68 65 20 77 61 79 0a 74 68 61 74 20  ed the way.that 
4fa0: 42 2d 54 72 65 65 20 6b 65 79 73 20 61 72 65 20  B-Tree keys are 
4fb0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65  automatically ge
4fc0: 6e 65 72 61 74 65 64 2e 20 20 41 64 64 69 74 69  nerated.  Additi
4fd0: 6f 6e 61 6c 20 64 65 74 61 69 6c 0a 6f 6e 20 61  onal detail.on a
4fe0: 75 74 6f 6d 61 74 69 63 20 42 2d 54 72 65 65 20  utomatic B-Tree 
4ff0: 6b 65 79 20 67 65 6e 65 72 61 74 69 6f 6e 20 69  key generation i
5000: 73 20 61 76 61 69 6c 61 62 6c 65 0a 3c 61 20 68  s available.<a h
5010: 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d  ref="autoinc.htm
5020: 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f 61  l">separately</a
5030: 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68  >.</p>..<p>If th
5040: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
5050: 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20  PORARY" keyword 
5060: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
5070: 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22  n "CREATE".and "
5080: 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20  TABLE" then the 
5090: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 63 72  table that is cr
50a0: 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69  eated is only vi
50b0: 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f  sible to the.pro
50c0: 63 65 73 73 20 74 68 61 74 20 6f 70 65 6e 65 64  cess that opened
50d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
50e0: 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  d is automatical
50f0: 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a  ly deleted when.
5100: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
5110: 63 6c 6f 73 65 64 2e 20 20 41 6e 79 20 69 6e 64  closed.  Any ind
5120: 69 63 65 73 20 63 72 65 61 74 65 64 20 6f 6e 20  ices created on 
5130: 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
5140: 65 0a 61 72 65 20 61 6c 73 6f 20 74 65 6d 70 6f  e.are also tempo
5150: 72 61 72 79 2e 20 20 54 65 6d 70 6f 72 61 72 79  rary.  Temporary
5160: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
5170: 63 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  ces are stored i
5180: 6e 20 61 0a 73 65 70 61 72 61 74 65 20 66 69 6c  n a.separate fil
5190: 65 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  e distinct from 
51a0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
51b0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
51c0: 20 49 66 20 61 20 3c 64 61 74 61 62 61 73 65 2d   If a <database-
51d0: 6e 61 6d 65 3e 20 69 73 20 73 70 65 63 69 66 69  name> is specifi
51e0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ed, then the tab
51f0: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
5200: 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61   .the named data
5210: 62 61 73 65 2e 20 49 74 20 69 73 20 61 6e 20 65  base. It is an e
5220: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
5230: 62 6f 74 68 20 61 20 3c 64 61 74 61 62 61 73 65  both a <database
5240: 2d 6e 61 6d 65 3e 0a 61 6e 64 20 74 68 65 20 54  -name>.and the T
5250: 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  EMP keyword, unl
5260: 65 73 73 20 74 68 65 20 3c 64 61 74 61 62 61 73  ess the <databas
5270: 65 2d 6e 61 6d 65 3e 20 69 73 20 22 74 65 6d 70  e-name> is "temp
5280: 22 2e 20 49 66 20 6e 6f 0a 64 61 74 61 62 61 73  ". If no.databas
5290: 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  e name is specif
52a0: 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d  ied, and the TEM
52b0: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
52c0: 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 74 61   present,.the ta
52d0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
52e0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
52f0: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ase.</p>..<p>The
5300: 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69   optional confli
5310: 63 74 2d 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77  ct-clause follow
5320: 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74 72 61  ing each constra
5330: 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73  int.allows the s
5340: 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
5350: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64  an alternative d
5360: 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e  efault.constrain
5370: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
5380: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
5390: 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74 72 61  for that constra
53a0: 69 6e 74 2e 0a 54 68 65 20 64 65 66 61 75 6c 74  int..The default
53b0: 20 69 73 20 61 62 6f 72 74 20 41 42 4f 52 54 2e   is abort ABORT.
53c0: 20 20 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73    Different cons
53d0: 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74  traints within t
53e0: 68 65 20 73 61 6d 65 0a 74 61 62 6c 65 20 6d 61  he same.table ma
53f0: 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e 74  y have different
5400: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
5410: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
5420: 6f 72 69 74 68 6d 73 2e 0a 49 66 20 61 6e 20 43  orithms..If an C
5430: 4f 50 59 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20  OPY, INSERT, or 
5440: 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 20 73  UPDATE command s
5450: 70 65 63 69 66 69 65 73 20 61 20 64 69 66 66 65  pecifies a diffe
5460: 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 0a 72 65  rent conflict.re
5470: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
5480: 68 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 61 6c  hm, then that al
5490: 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 20  gorithm is used 
54a0: 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65 0a  in place of the.
54b0: 64 65 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68  default algorith
54c0: 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
54d0: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
54e0: 73 74 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74  statement..See t
54f0: 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
5500: 64 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e 66  d.<a href="#conf
5510: 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43  lict">ON CONFLIC
5520: 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69 74 69  T</a> for additi
5530: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5540: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 48 45 43 4b 20  .</p>..<p>CHECK 
5550: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
5560: 69 67 6e 6f 72 65 64 20 69 6e 20 74 68 65 20 63  ignored in the c
5570: 75 72 72 65 6e 74 20 69 6d 70 6c 65 6d 65 6e 74  urrent implement
5580: 61 74 69 6f 6e 2e 0a 53 75 70 70 6f 72 74 20 66  ation..Support f
5590: 6f 72 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  or CHECK constra
55a0: 69 6e 74 73 20 6d 61 79 20 62 65 20 61 64 64 65  ints may be adde
55b0: 64 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 2e  d in the future.
55c0: 20 20 41 73 20 6f 66 0a 76 65 72 73 69 6f 6e 20    As of.version 
55d0: 32 2e 33 2e 30 2c 20 4e 4f 54 20 4e 55 4c 4c 2c  2.3.0, NOT NULL,
55e0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 61 6e   PRIMARY KEY, an
55f0: 64 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  d UNIQUE constra
5600: 69 6e 74 73 20 61 6c 6c 0a 77 6f 72 6b 2e 3c 2f  ints all.work.</
5610: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  p>..<p>There are
5620: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69   no arbitrary li
5630: 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62  mits on the numb
5640: 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72  er.of columns or
5650: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
5660: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e  f constraints in
5670: 20 61 20 74 61 62 6c 65 2e 0a 54 68 65 20 74 6f   a table..The to
5680: 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61  tal amount of da
5690: 74 61 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ta in a single r
56a0: 6f 77 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f  ow is limited to
56b0: 20 61 62 6f 75 74 0a 31 20 6d 65 67 61 62 79 74   about.1 megabyt
56c0: 65 73 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e  es in version 2.
56d0: 38 2e 20 20 49 6e 20 76 65 72 73 69 6f 6e 20 33  8.  In version 3
56e0: 2e 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 61  .0 there is no a
56f0: 72 62 69 74 72 61 72 79 0a 6c 69 6d 69 74 20 6f  rbitrary.limit o
5700: 6e 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  n the amount of 
5710: 64 61 74 61 20 69 6e 20 61 20 72 6f 77 2e 3c 2f  data in a row.</
5720: 70 3e 0a 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41  p>...<p>The CREA
5730: 54 45 20 54 41 42 4c 45 20 41 53 20 66 6f 72 6d  TE TABLE AS form
5740: 20 64 65 66 69 6e 65 73 20 74 68 65 20 74 61 62   defines the tab
5750: 6c 65 20 74 6f 20 62 65 0a 74 68 65 20 72 65 73  le to be.the res
5760: 75 6c 74 20 73 65 74 20 6f 66 20 61 20 71 75 65  ult set of a que
5770: 72 79 2e 20 20 54 68 65 20 6e 61 6d 65 73 20 6f  ry.  The names o
5780: 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75  f the table colu
5790: 6d 6e 73 20 61 72 65 0a 74 68 65 20 6e 61 6d 65  mns are.the name
57a0: 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
57b0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c   in the result.<
57c0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 65 78 61 63  /p>..<p>The exac
57d0: 74 20 74 65 78 74 0a 6f 66 20 65 61 63 68 20 43  t text.of each C
57e0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
57f0: 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20  ement is stored 
5800: 69 6e 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65  in the <b>sqlite
5810: 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 74 61 62 6c  _master</b>.tabl
5820: 65 2e 20 20 45 76 65 72 79 20 74 69 6d 65 20 74  e.  Every time t
5830: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
5840: 70 65 6e 65 64 2c 20 61 6c 6c 20 43 52 45 41 54  pened, all CREAT
5850: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
5860: 74 73 0a 61 72 65 20 72 65 61 64 20 66 72 6f 6d  ts.are read from
5870: 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d   the <b>sqlite_m
5880: 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20  aster</b> table 
5890: 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 67 65  and used to rege
58a0: 6e 65 72 61 74 65 0a 53 51 4c 69 74 65 27 73 20  nerate.SQLite's 
58b0: 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
58c0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74  ntation of the t
58d0: 61 62 6c 65 20 6c 61 79 6f 75 74 2e 0a 49 66 20  able layout..If 
58e0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d  the original com
58f0: 6d 61 6e 64 20 77 61 73 20 61 20 43 52 45 41 54  mand was a CREAT
5900: 45 20 54 41 42 4c 45 20 41 53 20 74 68 65 6e 20  E TABLE AS then 
5910: 74 68 65 6e 20 61 6e 20 65 71 75 69 76 61 6c 65  then an equivale
5920: 6e 74 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  nt.CREATE TABLE 
5930: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 79 6e  statement is syn
5940: 74 68 65 73 69 7a 65 64 20 61 6e 64 20 73 74 6f  thesized and sto
5950: 72 65 20 69 6e 20 3c 62 3e 73 71 6c 69 74 65 5f  re in <b>sqlite_
5960: 6d 61 73 74 65 72 3c 2f 62 3e 0a 69 6e 20 70 6c  master</b>.in pl
5970: 61 63 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ace of the origi
5980: 6e 61 6c 20 63 6f 6d 6d 61 6e 64 2e 0a 54 68 65  nal command..The
5990: 20 74 65 78 74 20 6f 66 20 43 52 45 41 54 45 20   text of CREATE 
59a0: 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20  TEMPORARY TABLE 
59b0: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73  statements are s
59c0: 74 6f 72 65 64 20 69 6e 20 74 68 65 0a 3c 62 3e  tored in the.<b>
59d0: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
59e0: 65 72 3c 2f 62 3e 20 74 61 62 6c 65 2e 0a 3c 2f  er</b> table..</
59f0: 70 3e 0a 0a 3c 70 3e 54 61 62 6c 65 73 20 61 72  p>..<p>Tables ar
5a00: 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
5a10: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 64 72  the <a href="#dr
5a20: 6f 70 74 61 62 6c 65 22 3e 44 52 4f 50 20 54 41  optable">DROP TA
5a30: 42 4c 45 3c 2f 61 3e 20 0a 73 74 61 74 65 6d 65  BLE</a> .stateme
5a40: 6e 74 2e 20 20 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65  nt.  </p>.}...Se
5a50: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
5a60: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
5a70: 67 67 65 72 0a 0a 53 79 6e 74 61 78 20 7b 73 71  gger..Syntax {sq
5a80: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43  l-statement} {.C
5a90: 52 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45  REATE [TEMP | TE
5aa0: 4d 50 4f 52 41 52 59 5d 20 54 52 49 47 47 45 52  MPORARY] TRIGGER
5ab0: 20 3c 74 72 69 67 67 65 72 2d 6e 61 6d 65 3e 20   <trigger-name> 
5ac0: 5b 20 42 45 46 4f 52 45 20 7c 20 41 46 54 45 52  [ BEFORE | AFTER
5ad0: 20 5d 0a 3c 64 61 74 61 62 61 73 65 2d 65 76 65   ].<database-eve
5ae0: 6e 74 3e 20 4f 4e 20 5b 3c 64 61 74 61 62 61 73  nt> ON [<databas
5af0: 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
5b00: 65 2d 6e 61 6d 65 3e 0a 3c 74 72 69 67 67 65 72  e-name>.<trigger
5b10: 2d 61 63 74 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74  -action>.}..Synt
5b20: 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e  ax {sql-statemen
5b30: 74 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d  t} {.CREATE [TEM
5b40: 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 54  P | TEMPORARY] T
5b50: 52 49 47 47 45 52 20 3c 74 72 69 67 67 65 72 2d  RIGGER <trigger-
5b60: 6e 61 6d 65 3e 20 49 4e 53 54 45 41 44 20 4f 46  name> INSTEAD OF
5b70: 0a 3c 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74  .<database-event
5b80: 3e 20 4f 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d  > ON [<database-
5b90: 6e 61 6d 65 3e 20 2e 5d 20 3c 76 69 65 77 2d 6e  name> .] <view-n
5ba0: 61 6d 65 3e 0a 3c 74 72 69 67 67 65 72 2d 61 63  ame>.<trigger-ac
5bb0: 74 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20  tion>.}..Syntax 
5bc0: 7b 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74 7d  {database-event}
5bd0: 20 7b 0a 44 45 4c 45 54 45 20 7c 20 0a 49 4e 53   {.DELETE | .INS
5be0: 45 52 54 20 7c 20 0a 55 50 44 41 54 45 20 7c 20  ERT | .UPDATE | 
5bf0: 0a 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75  .UPDATE OF <colu
5c00: 6d 6e 2d 6c 69 73 74 3e 0a 7d 0a 0a 53 79 6e 74  mn-list>.}..Synt
5c10: 61 78 20 7b 74 72 69 67 67 65 72 2d 61 63 74 69  ax {trigger-acti
5c20: 6f 6e 7d 20 7b 0a 5b 20 46 4f 52 20 45 41 43 48  on} {.[ FOR EACH
5c30: 20 52 4f 57 20 7c 20 46 4f 52 20 45 41 43 48 20   ROW | FOR EACH 
5c40: 53 54 41 54 45 4d 45 4e 54 20 5d 20 5b 20 57 48  STATEMENT ] [ WH
5c50: 45 4e 20 3c 65 78 70 72 65 73 73 69 6f 6e 3e 20  EN <expression> 
5c60: 5d 20 0a 42 45 47 49 4e 20 0a 20 20 3c 74 72 69  ] .BEGIN .  <tri
5c70: 67 67 65 72 2d 73 74 65 70 3e 20 3b 20 5b 20 3c  gger-step> ; [ <
5c80: 74 72 69 67 67 65 72 2d 73 74 65 70 3e 20 3b 20  trigger-step> ; 
5c90: 5d 2a 0a 45 4e 44 0a 7d 0a 0a 53 79 6e 74 61 78  ]*.END.}..Syntax
5ca0: 20 7b 74 72 69 67 67 65 72 2d 73 74 65 70 7d 20   {trigger-step} 
5cb0: 7b 0a 3c 75 70 64 61 74 65 2d 73 74 61 74 65 6d  {.<update-statem
5cc0: 65 6e 74 3e 20 7c 20 3c 69 6e 73 65 72 74 2d 73  ent> | <insert-s
5cd0: 74 61 74 65 6d 65 6e 74 3e 20 7c 20 0a 3c 64 65  tatement> | .<de
5ce0: 6c 65 74 65 2d 73 74 61 74 65 6d 65 6e 74 3e 20  lete-statement> 
5cf0: 7c 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d  | <select-statem
5d00: 65 6e 74 3e 20 0a 7d 0a 0a 70 75 74 73 20 7b 0a  ent> .}..puts {.
5d10: 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 54 52  <p>The CREATE TR
5d20: 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20  IGGER statement 
5d30: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 74  is used to add t
5d40: 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a  riggers to the .
5d50: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
5d60: 20 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61   Triggers are da
5d70: 74 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e  tabase operation
5d80: 73 20 28 74 68 65 20 3c 69 3e 74 72 69 67 67 65  s (the <i>trigge
5d90: 72 2d 61 63 74 69 6f 6e 3c 2f 69 3e 29 20 0a 74  r-action</i>) .t
5da0: 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69  hat are automati
5db0: 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20  cally performed 
5dc0: 77 68 65 6e 20 61 20 73 70 65 63 69 66 69 65 64  when a specified
5dd0: 20 64 61 74 61 62 61 73 65 20 65 76 65 6e 74 20   database event 
5de0: 28 74 68 65 0a 3c 69 3e 64 61 74 61 62 61 73 65  (the.<i>database
5df0: 2d 65 76 65 6e 74 3c 2f 69 3e 29 20 6f 63 63 75  -event</i>) occu
5e00: 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  rs.  </p>..<p>A 
5e10: 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73  trigger may be s
5e20: 70 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65  pecified to fire
5e30: 20 77 68 65 6e 65 76 65 72 20 61 20 44 45 4c 45   whenever a DELE
5e40: 54 45 2c 20 49 4e 53 45 52 54 20 6f 72 20 55 50  TE, INSERT or UP
5e50: 44 41 54 45 20 6f 66 20 61 0a 70 61 72 74 69 63  DATE of a.partic
5e60: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61  ular database ta
5e70: 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77  ble occurs, or w
5e80: 68 65 6e 65 76 65 72 20 61 6e 20 55 50 44 41 54  henever an UPDAT
5e90: 45 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  E of one or more
5ea0: 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d  .specified colum
5eb0: 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 20 61 72  ns of a table ar
5ec0: 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a  e updated.</p>..
5ed0: 3c 70 3e 41 74 20 74 68 69 73 20 74 69 6d 65 20  <p>At this time 
5ee0: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
5ef0: 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f  only FOR EACH RO
5f00: 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20  W triggers, not 
5f10: 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45  FOR EACH.STATEME
5f20: 4e 54 20 74 72 69 67 67 65 72 73 2e 20 48 65 6e  NT triggers. Hen
5f30: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
5f40: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
5f50: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
5f60: 6c 2e 20 20 46 4f 52 0a 45 41 43 48 20 52 4f 57  l.  FOR.EACH ROW
5f70: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
5f80: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
5f90: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 3c 69   specified as <i
5fa0: 3e 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f  >trigger-steps</
5fb0: 69 3e 20 0a 6d 61 79 20 62 65 20 65 78 65 63 75  i> .may be execu
5fc0: 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f  ted (depending o
5fd0: 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  n the WHEN claus
5fe0: 65 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  e) for each data
5ff0: 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69  base row being.i
6000: 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64  nserted, updated
6010: 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74   or deleted by t
6020: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75  he statement cau
6030: 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  sing the trigger
6040: 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c   to fire.</p>..<
6050: 70 3e 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20  p>Both the WHEN 
6060: 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 3c  clause and the <
6070: 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c  i>trigger-steps<
6080: 2f 69 3e 20 6d 61 79 20 61 63 63 65 73 73 20 65  /i> may access e
6090: 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20  lements of .the 
60a0: 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74  row being insert
60b0: 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75  ed, deleted or u
60c0: 70 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66  pdated using ref
60d0: 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66  erences of the f
60e0: 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c  orm ."NEW.<i>col
60f0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e  umn-name</i>" an
6100: 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e  d "OLD.<i>column
6110: 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72  -name</i>", wher
6120: 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  e.<i>column-name
6130: 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  </i> is the name
6140: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f   of a column fro
6150: 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  m the table that
6160: 20 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20   the trigger.is 
6170: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e  associated with.
6180: 20 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66   OLD and NEW ref
6190: 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79  erences may only
61a0: 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67   be used in trig
61b0: 67 65 72 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67  gers on.<i>trigg
61c0: 65 72 2d 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f  er-event</i>s fo
61d0: 72 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65  r which they are
61e0: 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f   relevant, as fo
61f0: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62  llows:</p>..<tab
6200: 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
6210: 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e  padding=10>.<tr>
6220: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6230: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
6240: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53  width=120><i>INS
6250: 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ERT</i></td>.<td
6260: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45   valign="top">NE
6270: 57 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  W references are
6280: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
6290: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
62a0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
62b0: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
62c0: 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74  <i>UPDATE</i></t
62d0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
62e0: 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20  op">NEW and OLD 
62f0: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
6300: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
6310: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
6320: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
6330: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
6340: 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >DELETE</i></td>
6350: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6360: 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73  ">OLD references
6370: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
6380: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
6390: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45  /p>..<p>If a WHE
63a0: 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70  N clause is supp
63b0: 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74  lied, the SQL st
63c0: 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
63d0: 65 64 20 61 73 20 3c 69 3e 74 72 69 67 67 65 72  ed as <i>trigger
63e0: 2d 73 74 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f  -steps</i> are o
63f0: 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72  nly executed for
6400: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
6410: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  the WHEN clause 
6420: 69 73 20 74 72 75 65 2e 20 49 66 20 6e 6f 20 57  is true. If no W
6430: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
6440: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
6450: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 65  statements are e
6460: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
6470: 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  rows.</p>..<p>Th
6480: 65 20 73 70 65 63 69 66 69 65 64 20 3c 69 3e 74  e specified <i>t
6490: 72 69 67 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20  rigger-time</i> 
64a0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20  determines when 
64b0: 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 73  the <i>trigger-s
64c0: 74 65 70 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65  teps</i>.will be
64d0: 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69   executed relati
64e0: 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74  ve to the insert
64f0: 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f  ion, modificatio
6500: 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20  n or removal of 
6510: 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72  the.associated r
6520: 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 4f  ow.</p>..<p>An O
6530: 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
6540: 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69  e may be specifi
6550: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
6560: 20 55 50 44 41 54 45 20 6f 72 20 49 4e 53 45 52   UPDATE or INSER
6570: 54 0a 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65  T.<i>trigger-ste
6580: 70 3c 2f 69 3e 2e 20 48 6f 77 65 76 65 72 20 69  p</i>. However i
6590: 66 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  f an ON CONFLICT
65a0: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
65b0: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
65c0: 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63  .the statement c
65d0: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
65e0: 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e  er to fire, then
65f0: 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 68   this conflict h
6600: 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 69  andling.policy i
6610: 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c  s used instead.<
6620: 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73  /p>..<p>Triggers
6630: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
6640: 6c 79 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20  ly dropped when 
6650: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
6660: 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61  hey are .associa
6670: 74 65 64 20 77 69 74 68 20 69 73 20 64 72 6f 70  ted with is drop
6680: 70 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69  ped.</p>..<p>Tri
6690: 67 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65  ggers may be cre
66a0: 61 74 65 64 20 6f 6e 20 76 69 65 77 73 2c 20 61  ated on views, a
66b0: 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61  s well as ordina
66c0: 72 79 20 74 61 62 6c 65 73 2c 20 62 79 20 73 70  ry tables, by sp
66d0: 65 63 69 66 79 69 6e 67 0a 49 4e 53 54 45 41 44  ecifying.INSTEAD
66e0: 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41 54   OF in the CREAT
66f0: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
6700: 65 6e 74 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d  ent. If one or m
6710: 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f  ore ON INSERT, O
6720: 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55  N DELETE.or ON U
6730: 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61  PDATE triggers a
6740: 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20  re defined on a 
6750: 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73  view, then it is
6760: 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f   not an error to
6770: 20 65 78 65 63 75 74 65 0a 61 6e 20 49 4e 53 45   execute.an INSE
6780: 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50  RT, DELETE or UP
6790: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f  DATE statement o
67a0: 6e 20 74 68 65 20 76 69 65 77 2c 20 72 65 73 70  n the view, resp
67b0: 65 63 74 69 76 65 6c 79 2e 20 54 68 65 72 65 61  ectively. Therea
67c0: 66 74 65 72 2c 0a 65 78 65 63 75 74 69 6e 67 20  fter,.executing 
67d0: 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
67e0: 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74  E or UPDATE on t
67f0: 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74  he view causes t
6800: 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 20  he associated.  
6810: 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65  triggers to fire
6820: 2e 20 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65  . The real table
6830: 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65  s underlying the
6840: 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f   view are not mo
6850: 64 69 66 69 65 64 0a 20 20 28 65 78 63 65 70 74  dified.  (except
6860: 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63   possibly explic
6870: 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67  itly, by a trigg
6880: 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e  er program).</p>
6890: 0a 0a 3c 70 3e 3c 62 3e 45 78 61 6d 70 6c 65 3a  ..<p><b>Example:
68a0: 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 73  </b></p>..<p>Ass
68b0: 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f  uming that custo
68c0: 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  mer records are 
68d0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63  stored in the "c
68e0: 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c  ustomers" table,
68f0: 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20   and.that order 
6900: 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72  records are stor
6910: 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72  ed in the "order
6920: 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f  s" table, the fo
6930: 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a  llowing trigger.
6940: 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c  ensures that all
6950: 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65   associated orde
6960: 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65  rs are redirecte
6970: 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65  d when a custome
6980: 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72  r changes.his or
6990: 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70   her address:</p
69a0: 3e 0a 7d 0a 45 78 61 6d 70 6c 65 20 7b 0a 43 52  >.}.Example {.CR
69b0: 45 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64  EATE TRIGGER upd
69c0: 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64  ate_customer_add
69d0: 72 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61  ress UPDATE OF a
69e0: 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d  ddress ON custom
69f0: 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20  ers .  BEGIN.   
6a00: 20 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53   UPDATE orders S
6a10: 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77  ET address = new
6a20: 2e 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  .address WHERE c
6a30: 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f  ustomer_name = o
6a40: 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a  ld.name;.  END;.
6a50: 7d 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 69 74 68  }.puts {.<p>With
6a60: 20 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e   this trigger in
6a70: 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69  stalled, executi
6a80: 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ng the statement
6a90: 3a 3c 2f 70 3e 0a 7d 0a 0a 45 78 61 6d 70 6c 65  :</p>.}..Example
6aa0: 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d   {.UPDATE custom
6ab0: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
6ac0: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
6ad0: 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63  HERE name = 'Jac
6ae0: 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 0a 70 75 74 73  k Jones';.}.puts
6af0: 20 7b 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65   {.<p>causes the
6b00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65   following to be
6b10: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65   automatically e
6b20: 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 7d 0a 45  xecuted:</p>.}.E
6b30: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
6b40: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
6b50: 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e  ss = '1 Main St.
6b60: 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72  ' WHERE customer
6b70: 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f  _name = 'Jack Jo
6b80: 6e 65 73 27 3b 0a 7d 0a 0a 70 75 74 73 20 7b 0a  nes';.}..puts {.
6b90: 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 63 75 72  <p>Note that cur
6ba0: 72 65 6e 74 6c 79 2c 20 74 72 69 67 67 65 72 73  rently, triggers
6bb0: 20 6d 61 79 20 62 65 68 61 76 65 20 6f 64 64 6c   may behave oddl
6bc0: 79 20 77 68 65 6e 20 63 72 65 61 74 65 64 20 6f  y when created o
6bd0: 6e 20 74 61 62 6c 65 73 0a 20 20 77 69 74 68 20  n tables.  with 
6be0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6bf0: 4b 45 59 20 66 69 65 6c 64 73 2e 20 49 66 20 61  KEY fields. If a
6c00: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20   BEFORE trigger 
6c10: 70 72 6f 67 72 61 6d 20 6d 6f 64 69 66 69 65 73  program modifies
6c20: 20 74 68 65 20 0a 20 20 49 4e 54 45 47 45 52 20   the .  INTEGER 
6c30: 50 52 49 4d 41 52 59 20 4b 45 59 20 66 69 65 6c  PRIMARY KEY fiel
6c40: 64 20 6f 66 20 61 20 72 6f 77 20 74 68 61 74 20  d of a row that 
6c50: 77 69 6c 6c 20 62 65 20 73 75 62 73 65 71 75 65  will be subseque
6c60: 6e 74 6c 79 20 75 70 64 61 74 65 64 20 62 79 20  ntly updated by 
6c70: 74 68 65 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  the.  statement 
6c80: 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20  that causes the 
6c90: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c  trigger to fire,
6ca0: 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
6cb0: 20 6d 61 79 20 6e 6f 74 20 6f 63 63 75 72 2e 20   may not occur. 
6cc0: 0a 20 20 54 68 65 20 77 6f 72 6b 61 72 6f 75 6e  .  The workaroun
6cd0: 64 20 69 73 20 74 6f 20 64 65 63 6c 61 72 65 20  d is to declare 
6ce0: 74 68 65 20 74 61 62 6c 65 20 77 69 74 68 20 61  the table with a
6cf0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
6d00: 75 6d 6e 20 69 6e 73 74 65 61 64 0a 20 20 6f 66  umn instead.  of
6d10: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
6d20: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 3c  ARY KEY column.<
6d30: 2f 70 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  /p>.}..puts {.<p
6d40: 3e 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66  >A special SQL f
6d50: 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20  unction RAISE() 
6d60: 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68  may be used with
6d70: 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  in a trigger-pro
6d80: 67 72 61 6d 2c 20 77 69 74 68 20 74 68 65 20 66  gram, with the f
6d90: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c  ollowing syntax<
6da0: 2f 70 3e 20 0a 7d 0a 53 79 6e 74 61 78 20 7b 72  /p> .}.Syntax {r
6db0: 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 7d 20 7b  aise-function} {
6dc0: 0a 52 41 49 53 45 20 28 20 41 42 4f 52 54 2c 20  .RAISE ( ABORT, 
6dd0: 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20  <error-message> 
6de0: 29 20 7c 20 0a 52 41 49 53 45 20 28 20 46 41 49  ) | .RAISE ( FAI
6df0: 4c 2c 20 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67  L, <error-messag
6e00: 65 3e 20 29 20 7c 20 0a 52 41 49 53 45 20 28 20  e> ) | .RAISE ( 
6e10: 52 4f 4c 4c 42 41 43 4b 2c 20 3c 65 72 72 6f 72  ROLLBACK, <error
6e20: 2d 6d 65 73 73 61 67 65 3e 20 29 20 7c 20 0a 52  -message> ) | .R
6e30: 41 49 53 45 20 28 20 49 47 4e 4f 52 45 20 29 0a  AISE ( IGNORE ).
6e40: 7d 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 68 65 6e  }.puts {.<p>When
6e50: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73   one of the firs
6e60: 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73  t three forms is
6e70: 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74   called during t
6e80: 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 20 65  rigger-program e
6e90: 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70  xecution, the sp
6ea0: 65 63 69 66 69 65 64 20 4f 4e 20 43 4f 4e 46 4c  ecified ON CONFL
6eb0: 49 43 54 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ICT processing i
6ec0: 73 20 70 65 72 66 6f 72 6d 65 64 20 28 65 69 74  s performed (eit
6ed0: 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20  her ABORT, FAIL 
6ee0: 6f 72 20 0a 20 52 4f 4c 4c 42 41 43 4b 29 20 61  or . ROLLBACK) a
6ef0: 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 71  nd the current q
6f00: 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e  uery terminates.
6f10: 20 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f   An error code o
6f20: 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  f SQLITE_CONSTRA
6f30: 49 4e 54 20 69 73 20 72 65 74 75 72 6e 65 64 20  INT is returned 
6f40: 74 6f 20 74 68 65 20 75 73 65 72 2c 20 61 6c 6f  to the user, alo
6f50: 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ng with the spec
6f60: 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
6f70: 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65  age.</p>..<p>Whe
6f80: 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20  n RAISE(IGNORE) 
6f90: 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72  is called, the r
6fa0: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
6fb0: 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20  current trigger 
6fc0: 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61  program,.the sta
6fd0: 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73  tement that caus
6fe0: 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ed the trigger p
6ff0: 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
7000: 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71  e and any subseq
7010: 75 65 6e 74 0a 20 20 20 20 74 72 69 67 67 65 72  uent.    trigger
7020: 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77   programs that w
7030: 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20 65 78 65  ould of been exe
7040: 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f  cuted are abando
7050: 6e 65 64 2e 20 4e 6f 20 64 61 74 61 62 61 73 65  ned. No database
7060: 0a 20 20 20 20 63 68 61 6e 67 65 73 20 61 72 65  .    changes are
7070: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 49   rolled back.  I
7080: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
7090: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
70a0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
70b0: 20 20 20 20 74 6f 20 65 78 65 63 75 74 65 20 69      to execute i
70c0: 73 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66  s itself part of
70d0: 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72   a trigger progr
70e0: 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72  am, then that tr
70f0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 20 20  igger program.  
7100: 20 20 72 65 73 75 6d 65 73 20 65 78 65 63 75 74    resumes execut
7110: 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e  ion at the begin
7120: 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74  ning of the next
7130: 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   step..</p>..<p>
7140: 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d  Triggers are rem
7150: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 3c  oved using the <
7160: 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74 72 69  a href="#droptri
7170: 67 67 65 72 22 3e 44 52 4f 50 20 54 52 49 47 47  gger">DROP TRIGG
7180: 45 52 3c 2f 61 3e 0a 73 74 61 74 65 6d 65 6e 74  ER</a>.statement
7190: 2e 20 20 4e 6f 6e 2d 74 65 6d 70 6f 72 61 72 79  .  Non-temporary
71a0: 20 74 72 69 67 67 65 72 73 20 63 61 6e 6e 6f 74   triggers cannot
71b0: 20 62 65 20 61 64 64 65 64 20 6f 6e 20 61 20 74   be added on a t
71c0: 61 62 6c 65 20 69 6e 20 61 6e 20 0a 61 74 74 61  able in an .atta
71d0: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 3c 2f  ched database.</
71e0: 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b  p>.}...Section {
71f0: 43 52 45 41 54 45 20 56 49 45 57 7d 20 7b 63 72  CREATE VIEW} {cr
7200: 65 61 74 65 76 69 65 77 7d 0a 0a 53 79 6e 74 61  eateview}..Synta
7210: 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20  x {sql-command} 
7220: 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50 20 7c  {.CREATE [TEMP |
7230: 20 54 45 4d 50 4f 52 41 52 59 5d 20 56 49 45 57   TEMPORARY] VIEW
7240: 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65   [<database-name
7250: 3e 2e 5d 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 20  >.] <view-name> 
7260: 41 53 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65  AS <select-state
7270: 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  ment>.}..puts {.
7280: 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 56 49  <p>The CREATE VI
7290: 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67  EW command assig
72a0: 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70  ns a name to a p
72b0: 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 3c 61 20  re-packaged .<a 
72c0: 68 72 65 66 3d 22 23 73 65 6c 65 63 74 22 3e 53  href="#select">S
72d0: 45 4c 45 43 54 3c 2f 61 3e 0a 73 74 61 74 65 6d  ELECT</a>.statem
72e0: 65 6e 74 2e 20 20 4f 6e 63 65 20 74 68 65 20 76  ent.  Once the v
72f0: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 2c 20  iew is created, 
7300: 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  it can be used i
7310: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
7320: 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 53 45 4c  e.of another SEL
7330: 45 43 54 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ECT in place of 
7340: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
7350: 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 22 54  p>..<p>If the "T
7360: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
7370: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
7380: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
7390: 52 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42 4c  REATE".and "TABL
73a0: 45 22 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  E" then the tabl
73b0: 65 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  e that is create
73c0: 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c  d is only visibl
73d0: 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73  e to the.process
73e0: 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65   that opened the
73f0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 69 73   database and is
7400: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
7410: 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20  eleted when.the 
7420: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
7430: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20  ed.</p>..<p> If 
7440: 61 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  a <database-name
7450: 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  > is specified, 
7460: 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69 73  then the view is
7470: 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65   created in .the
7480: 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e   named database.
7490: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
74a0: 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20  to specify both 
74b0: 61 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  a <database-name
74c0: 3e 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  >.and the TEMP k
74d0: 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74  eyword, unless t
74e0: 68 65 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  he <database-nam
74f0: 65 3e 20 69 73 20 22 74 65 6d 70 22 2e 20 49 66  e> is "temp". If
7500: 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d   no.database nam
7510: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
7520: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79  and the TEMP key
7530: 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73  word is not pres
7540: 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65 20 69  ent,.the table i
7550: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
7560: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
7570: 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e  /p>..<p>You cann
7580: 6f 74 20 43 4f 50 59 2c 20 44 45 4c 45 54 45 2c  ot COPY, DELETE,
7590: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
75a0: 45 20 61 20 76 69 65 77 2e 20 20 56 69 65 77 73  E a view.  Views
75b0: 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a   are read-only .
75c0: 69 6e 20 53 51 4c 69 74 65 2e 20 20 48 6f 77 65  in SQLite.  Howe
75d0: 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73  ver, in many cas
75e0: 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61  es you can use a
75f0: 20 3c 61 20 68 72 65 66 3d 22 23 63 72 65 61 74   <a href="#creat
7600: 65 74 72 69 67 67 65 72 22 3e 0a 54 52 49 47 47  etrigger">.TRIGG
7610: 45 52 3c 2f 61 3e 20 6f 6e 20 74 68 65 20 76 69  ER</a> on the vi
7620: 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68  ew to accomplish
7630: 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e   the same thing.
7640: 20 20 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f    Views are remo
7650: 76 65 64 20 0a 77 69 74 68 20 74 68 65 20 3c 61  ved .with the <a
7660: 20 68 72 65 66 3d 22 23 64 72 6f 70 76 69 65 77   href="#dropview
7670: 22 3e 44 52 4f 50 20 56 49 45 57 3c 2f 61 3e 20  ">DROP VIEW</a> 
7680: 0a 63 6f 6d 6d 61 6e 64 2e 20 20 4e 6f 6e 2d 74  .command.  Non-t
7690: 65 6d 70 6f 72 61 72 79 20 76 69 65 77 73 20 63  emporary views c
76a0: 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
76b0: 20 6f 6e 20 74 61 62 6c 65 73 20 69 6e 20 61 6e   on tables in an
76c0: 20 61 74 74 61 63 68 65 64 20 0a 64 61 74 61 62   attached .datab
76d0: 61 73 65 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63  ase.</p>.}...Sec
76e0: 74 69 6f 6e 20 44 45 4c 45 54 45 20 64 65 6c 65  tion DELETE dele
76f0: 74 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  te..Syntax {sql-
7700: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 44 45 4c  statement} {.DEL
7710: 45 54 45 20 46 52 4f 4d 20 5b 3c 64 61 74 61 62  ETE FROM [<datab
7720: 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61  ase-name> .] <ta
7730: 62 6c 65 2d 6e 61 6d 65 3e 20 5b 57 48 45 52 45  ble-name> [WHERE
7740: 20 3c 65 78 70 72 3e 5d 0a 7d 0a 0a 70 75 74 73   <expr>].}..puts
7750: 20 7b 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45   {.<p>The DELETE
7760: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
7770: 20 74 6f 20 72 65 6d 6f 76 65 20 72 65 63 6f 72   to remove recor
7780: 64 73 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e  ds from a table.
7790: 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  .The command con
77a0: 73 69 73 74 73 20 6f 66 20 74 68 65 20 22 44 45  sists of the "DE
77b0: 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65 79 77 6f  LETE FROM" keywo
77c0: 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a  rds followed by.
77d0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
77e0: 74 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68  table from which
77f0: 20 72 65 63 6f 72 64 73 20 61 72 65 20 74 6f 20   records are to 
7800: 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70 3e  be removed..</p>
7810: 0a 0a 3c 70 3e 57 69 74 68 6f 75 74 20 61 20 57  ..<p>Without a W
7820: 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c  HERE clause, all
7830: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
7840: 6c 65 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a  le are removed..
7850: 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
7860: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
7870: 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
7880: 6f 77 73 20 74 68 61 74 20 6d 61 74 63 68 0a 74  ows that match.t
7890: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72  he expression ar
78a0: 65 20 72 65 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 7d  e removed.</p>.}
78b0: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 45 54 41  ...Section {DETA
78c0: 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65 74  CH DATABASE} det
78d0: 61 63 68 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ach..Syntax {sql
78e0: 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 45 54 41  -command} {.DETA
78f0: 43 48 20 5b 44 41 54 41 42 41 53 45 5d 20 3c 64  CH [DATABASE] <d
7900: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 0a 7d 0a  atabase-name>.}.
7910: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 69 73 20  .puts {.<p>This 
7920: 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68  statement detach
7930: 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c  es an additional
7940: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7950: 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  tion previously 
7960: 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67 20  .attached using 
7970: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 61 74  the <a href="#at
7980: 74 61 63 68 22 3e 41 54 54 41 43 48 20 44 41 54  tach">ATTACH DAT
7990: 41 42 41 53 45 3c 2f 61 3e 20 73 74 61 74 65 6d  ABASE</a> statem
79a0: 65 6e 74 2e 20 20 49 74 0a 69 73 20 70 6f 73 73  ent.  It.is poss
79b0: 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68 65  ible to have the
79c0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66   same database f
79d0: 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75 6c  ile attached mul
79e0: 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69 6e  tiple times usin
79f0: 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  g .different nam
7a00: 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69 6e  es, and detachin
7a10: 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g one connection
7a20: 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c 20   to a file will 
7a30: 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65 72  leave the .other
7a40: 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c  s intact.</p>..<
7a50: 70 3e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  p>This statement
7a60: 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51   will fail if SQ
7a70: 4c 69 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d  Lite is in the m
7a80: 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73  iddle of a trans
7a90: 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a 0a  action.</p>.}...
7aa0: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
7ab0: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 0a 0a  DEX} dropindex..
7ac0: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d  Syntax {sql-comm
7ad0: 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 49 4e 44 45  and} {.DROP INDE
7ae0: 58 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  X [<database-nam
7af0: 65 3e 20 2e 5d 20 3c 69 6e 64 65 78 2d 6e 61 6d  e> .] <index-nam
7b00: 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  e>.}..puts {.<p>
7b10: 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73  The DROP INDEX s
7b20: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
7b30: 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a   an index added.
7b40: 77 69 74 68 20 74 68 65 20 3c 61 20 68 72 65 66  with the <a href
7b50: 3d 22 23 63 72 65 61 74 65 69 6e 64 65 78 22 3e  ="#createindex">
7b60: 0a 43 52 45 41 54 45 20 49 4e 44 45 58 3c 2f 61  .CREATE INDEX</a
7b70: 3e 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  > statement.  Th
7b80: 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 69 73  e index named is
7b90: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
7ba0: 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73  ved from.the dis
7bb0: 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79  k.  The only way
7bc0: 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20   to recover the 
7bd0: 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e  index is to reen
7be0: 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69  ter the.appropri
7bf0: 61 74 65 20 43 52 45 41 54 45 20 49 4e 44 45 58  ate CREATE INDEX
7c00: 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c   command.</p>..<
7c10: 70 3e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58  p>The DROP INDEX
7c20: 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
7c30: 6e 6f 74 20 72 65 64 75 63 65 20 74 68 65 20 73  not reduce the s
7c40: 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
7c50: 61 73 65 20 0a 66 69 6c 65 2e 20 20 45 6d 70 74  ase .file.  Empt
7c60: 79 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64  y space in the d
7c70: 61 74 61 62 61 73 65 20 69 73 20 72 65 74 61 69  atabase is retai
7c80: 6e 65 64 20 66 6f 72 20 6c 61 74 65 72 20 49 4e  ned for later IN
7c90: 53 45 52 54 73 2e 20 20 54 6f 20 0a 72 65 6d 6f  SERTs.  To .remo
7ca0: 76 65 20 66 72 65 65 20 73 70 61 63 65 20 69 6e  ve free space in
7cb0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 75   the database, u
7cc0: 73 65 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  se the <a href="
7cd0: 23 76 61 63 75 75 6d 22 3e 56 41 43 55 55 4d 3c  #vacuum">VACUUM<
7ce0: 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  /a> .command.</p
7cf0: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44  >.}...Section {D
7d00: 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
7d10: 61 62 6c 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71  able..Syntax {sq
7d20: 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52 4f  l-command} {.DRO
7d30: 50 20 54 41 42 4c 45 20 5b 3c 64 61 74 61 62 61  P TABLE [<databa
7d40: 73 65 2d 6e 61 6d 65 3e 2e 5d 20 3c 74 61 62 6c  se-name>.] <tabl
7d50: 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20  e-name>.}..puts 
7d60: 7b 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 54 41  {.<p>The DROP TA
7d70: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 72 65  BLE statement re
7d80: 6d 6f 76 65 73 20 61 20 74 61 62 6c 65 20 61 64  moves a table ad
7d90: 64 65 64 20 77 69 74 68 20 74 68 65 20 3c 61 20  ded with the <a 
7da0: 68 72 65 66 3d 0a 22 23 63 72 65 61 74 65 74 61  href=."#createta
7db0: 62 6c 65 22 3e 43 52 45 41 54 45 20 54 41 42 4c  ble">CREATE TABL
7dc0: 45 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e  E</a> statement.
7dd0: 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69    The name speci
7de0: 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c  fied is the.tabl
7df0: 65 20 6e 61 6d 65 2e 20 20 49 74 20 69 73 20 63  e name.  It is c
7e00: 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65  ompletely remove
7e10: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
7e20: 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20 74  ase schema and t
7e30: 68 65 20 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20  he .disk file.  
7e40: 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f  The table can no
7e50: 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20  t be recovered. 
7e60: 20 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 73 73   All indices ass
7e70: 6f 63 69 61 74 65 64 20 0a 77 69 74 68 20 74 68  ociated .with th
7e80: 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f  e table are also
7e90: 20 64 65 6c 65 74 65 64 2e 20 20 4e 6f 6e 2d 74   deleted.  Non-t
7ea0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
7eb0: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 0a  in an attached .
7ec0: 64 61 74 61 62 61 73 65 20 63 61 6e 6e 6f 74 20  database cannot 
7ed0: 62 65 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a  be dropped.</p>.
7ee0: 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 54 41 42  .<p>The DROP TAB
7ef0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  LE statement doe
7f00: 73 20 6e 6f 74 20 72 65 64 75 63 65 20 74 68 65  s not reduce the
7f10: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
7f20: 61 62 61 73 65 20 0a 66 69 6c 65 2e 20 20 45 6d  abase .file.  Em
7f30: 70 74 79 20 73 70 61 63 65 20 69 6e 20 74 68 65  pty space in the
7f40: 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 74   database is ret
7f50: 61 69 6e 65 64 20 66 6f 72 20 6c 61 74 65 72 20  ained for later 
7f60: 49 4e 53 45 52 54 73 2e 20 20 54 6f 20 0a 72 65  INSERTs.  To .re
7f70: 6d 6f 76 65 20 66 72 65 65 20 73 70 61 63 65 20  move free space 
7f80: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  in the database,
7f90: 20 75 73 65 20 74 68 65 20 3c 61 20 68 72 65 66   use the <a href
7fa0: 3d 22 23 76 61 63 75 75 6d 22 3e 56 41 43 55 55  ="#vacuum">VACUU
7fb0: 4d 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c  M</a> .command.<
7fc0: 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20  /p>.}...Section 
7fd0: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64  {DROP TRIGGER} d
7fe0: 72 6f 70 74 72 69 67 67 65 72 0a 53 79 6e 74 61  roptrigger.Synta
7ff0: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
8000: 7d 20 7b 0a 44 52 4f 50 20 54 52 49 47 47 45 52  } {.DROP TRIGGER
8010: 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65   [<database-name
8020: 3e 20 2e 5d 20 3c 74 72 69 67 67 65 72 2d 6e 61  > .] <trigger-na
8030: 6d 65 3e 0a 7d 0a 70 75 74 73 20 7b 20 0a 3c 70  me>.}.puts { .<p
8040: 3e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45  >The DROP TRIGGE
8050: 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  R statement remo
8060: 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72  ves a trigger cr
8070: 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 3c 61  eated by the .<a
8080: 20 68 72 65 66 3d 22 23 63 72 65 61 74 65 74 72   href="#createtr
8090: 69 67 67 65 72 22 3e 43 52 45 41 54 45 20 54 52  igger">CREATE TR
80a0: 49 47 47 45 52 3c 2f 61 3e 20 73 74 61 74 65 6d  IGGER</a> statem
80b0: 65 6e 74 2e 20 20 54 68 65 20 74 72 69 67 67 65  ent.  The trigge
80c0: 72 20 69 73 20 0a 64 65 6c 65 74 65 64 20 66 72  r is .deleted fr
80d0: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
80e0: 73 63 68 65 6d 61 2e 20 4e 6f 74 65 20 74 68 61  schema. Note tha
80f0: 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61  t triggers are a
8100: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72  utomatically .dr
8110: 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61  opped when the a
8120: 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20  ssociated table 
8130: 69 73 20 64 72 6f 70 70 65 64 2e 20 20 4e 6f 6e  is dropped.  Non
8140: 2d 74 65 6d 70 6f 72 61 72 79 20 74 72 69 67 67  -temporary trigg
8150: 65 72 73 20 0a 63 61 6e 6e 6f 74 20 62 65 20 64  ers .cannot be d
8160: 72 6f 70 70 65 64 20 6f 6e 20 61 74 74 61 63 68  ropped on attach
8170: 65 64 20 74 61 62 6c 65 73 2e 3c 2f 70 3e 0a 7d  ed tables.</p>.}
8180: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ...Section {DROP
8190: 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 0a   VIEW} dropview.
81a0: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d  .Syntax {sql-com
81b0: 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 56 49 45  mand} {.DROP VIE
81c0: 57 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 0a 7d 0a  W <view-name>.}.
81d0: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44  .puts {.<p>The D
81e0: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
81f0: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
8200: 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
8210: 20 3c 61 20 68 72 65 66 3d 0a 22 23 63 72 65 61   <a href=."#crea
8220: 74 65 76 69 65 77 22 3e 43 52 45 41 54 45 20 56  teview">CREATE V
8230: 49 45 57 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e  IEW</a> statemen
8240: 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
8250: 63 69 66 69 65 64 20 69 73 20 74 68 65 20 0a 76  cified is the .v
8260: 69 65 77 20 6e 61 6d 65 2e 20 20 49 74 20 69 73  iew name.  It is
8270: 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
8280: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
8290: 61 2c 20 62 75 74 20 6e 6f 20 61 63 74 75 61 6c  a, but no actual
82a0: 20 64 61 74 61 20 0a 69 6e 20 74 68 65 20 75 6e   data .in the un
82b0: 64 65 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61  derlying base ta
82c0: 62 6c 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64  bles is modified
82d0: 2e 20 20 4e 6f 6e 2d 74 65 6d 70 6f 72 61 72 79  .  Non-temporary
82e0: 20 76 69 65 77 73 20 69 6e 20 0a 61 74 74 61 63   views in .attac
82f0: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 63 61  hed databases ca
8300: 6e 6e 6f 74 20 62 65 20 64 72 6f 70 70 65 64 2e  nnot be dropped.
8310: 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e  </p>.}...Section
8320: 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e   EXPLAIN explain
8330: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  ..Syntax {sql-st
8340: 61 74 65 6d 65 6e 74 7d 20 7b 0a 45 58 50 4c 41  atement} {.EXPLA
8350: 49 4e 20 3c 73 71 6c 2d 73 74 61 74 65 6d 65 6e  IN <sql-statemen
8360: 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  t>.}..puts {.<p>
8370: 54 68 65 20 45 58 50 4c 41 49 4e 20 63 6f 6d 6d  The EXPLAIN comm
8380: 61 6e 64 20 6d 6f 64 69 66 69 65 72 20 69 73 20  and modifier is 
8390: 61 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65  a non-standard e
83a0: 78 74 65 6e 73 69 6f 6e 2e 20 20 54 68 65 0a 69  xtension.  The.i
83b0: 64 65 61 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  dea comes from a
83c0: 20 73 69 6d 69 6c 61 72 20 63 6f 6d 6d 61 6e 64   similar command
83d0: 20 66 6f 75 6e 64 20 69 6e 20 50 6f 73 74 67 72   found in Postgr
83e0: 65 53 51 4c 2c 20 62 75 74 20 74 68 65 20 6f 70  eSQL, but the op
83f0: 65 72 61 74 69 6f 6e 0a 69 73 20 63 6f 6d 70 6c  eration.is compl
8400: 65 74 65 6c 79 20 64 69 66 66 65 72 65 6e 74 2e  etely different.
8410: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
8420: 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20  EXPLAIN keyword 
8430: 61 70 70 65 61 72 73 20 62 65 66 6f 72 65 20 61  appears before a
8440: 6e 79 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  ny other SQLite 
8450: 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 74 68 65 6e  SQL command.then
8460: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 74 75   instead of actu
8470: 61 6c 6c 79 20 65 78 65 63 75 74 69 6e 67 20 74  ally executing t
8480: 68 65 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 20  he command, the 
8490: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 77  SQLite library w
84a0: 69 6c 6c 0a 72 65 70 6f 72 74 20 62 61 63 6b 20  ill.report back 
84b0: 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20  the sequence of 
84c0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
84d0: 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 69 74 20  instructions it 
84e0: 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65 64 20  would have.used 
84f0: 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 63  to execute the c
8500: 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65 20 45  ommand had the E
8510: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e  XPLAIN keyword n
8520: 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74 2e  ot been present.
8530: 0a 46 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20  .For additional 
8540: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
8550: 74 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  t virtual machin
8560: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
8570: 65 65 0a 74 68 65 20 3c 61 20 68 72 65 66 3d 22  ee.the <a href="
8580: 61 72 63 68 2e 68 74 6d 6c 22 3e 61 72 63 68 69  arch.html">archi
8590: 74 65 63 74 75 72 65 20 64 65 73 63 72 69 70 74  tecture descript
85a0: 69 6f 6e 3c 2f 61 3e 20 6f 72 20 74 68 65 20 64  ion</a> or the d
85b0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 6f 6e 20  ocumentation.on 
85c0: 3c 61 20 68 72 65 66 3d 22 6f 70 63 6f 64 65 2e  <a href="opcode.
85d0: 68 74 6d 6c 22 3e 61 76 61 69 6c 61 62 6c 65 20  html">available 
85e0: 6f 70 63 6f 64 65 73 3c 2f 61 3e 20 66 6f 72 20  opcodes</a> for 
85f0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
8600: 69 6e 65 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63  ine.</p>.}...Sec
8610: 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  tion expression 
8620: 65 78 70 72 0a 0a 53 79 6e 74 61 78 20 7b 65 78  expr..Syntax {ex
8630: 70 72 7d 20 7b 0a 3c 65 78 70 72 3e 20 3c 62 69  pr} {.<expr> <bi
8640: 6e 61 72 79 2d 6f 70 3e 20 3c 65 78 70 72 3e 20  nary-op> <expr> 
8650: 7c 0a 3c 65 78 70 72 3e 20 3c 6c 69 6b 65 2d 6f  |.<expr> <like-o
8660: 70 3e 20 3c 65 78 70 72 3e 20 5b 45 53 43 41 50  p> <expr> [ESCAP
8670: 45 20 3c 65 78 70 72 3e 5d 20 7c 0a 3c 65 78 70  E <expr>] |.<exp
8680: 72 3e 20 3c 67 6c 6f 62 2d 6f 70 3e 20 3c 65 78  r> <glob-op> <ex
8690: 70 72 3e 20 7c 0a 3c 75 6e 61 72 79 2d 6f 70 3e  pr> |.<unary-op>
86a0: 20 3c 65 78 70 72 3e 20 7c 0a 28 20 3c 65 78 70   <expr> |.( <exp
86b0: 72 3e 20 29 20 7c 0a 3c 63 6f 6c 75 6d 6e 2d 6e  r> ) |.<column-n
86c0: 61 6d 65 3e 20 7c 0a 3c 74 61 62 6c 65 2d 6e 61  ame> |.<table-na
86d0: 6d 65 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61  me> . <column-na
86e0: 6d 65 3e 20 7c 0a 3c 64 61 74 61 62 61 73 65 2d  me> |.<database-
86f0: 6e 61 6d 65 3e 20 2e 20 3c 74 61 62 6c 65 2d 6e  name> . <table-n
8700: 61 6d 65 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e  ame> . <column-n
8710: 61 6d 65 3e 20 7c 0a 3c 6c 69 74 65 72 61 6c 2d  ame> |.<literal-
8720: 76 61 6c 75 65 3e 20 7c 0a 3c 66 75 6e 63 74 69  value> |.<functi
8730: 6f 6e 2d 6e 61 6d 65 3e 20 28 20 3c 65 78 70 72  on-name> ( <expr
8740: 2d 6c 69 73 74 3e 20 7c 20 53 54 41 52 20 29 20  -list> | STAR ) 
8750: 7c 0a 3c 65 78 70 72 3e 20 49 53 4e 55 4c 4c 20  |.<expr> ISNULL 
8760: 7c 0a 3c 65 78 70 72 3e 20 4e 4f 54 4e 55 4c 4c  |.<expr> NOTNULL
8770: 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20   |.<expr> [NOT] 
8780: 42 45 54 57 45 45 4e 20 3c 65 78 70 72 3e 20 41  BETWEEN <expr> A
8790: 4e 44 20 3c 65 78 70 72 3e 20 7c 0a 3c 65 78 70  ND <expr> |.<exp
87a0: 72 3e 20 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 76  r> [NOT] IN ( <v
87b0: 61 6c 75 65 2d 6c 69 73 74 3e 20 29 20 7c 0a 3c  alue-list> ) |.<
87c0: 65 78 70 72 3e 20 5b 4e 4f 54 5d 20 49 4e 20 28  expr> [NOT] IN (
87d0: 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65   <select-stateme
87e0: 6e 74 3e 20 29 20 7c 0a 3c 65 78 70 72 3e 20 5b  nt> ) |.<expr> [
87f0: 4e 4f 54 5d 20 49 4e 20 5b 3c 64 61 74 61 62 61  NOT] IN [<databa
8800: 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62  se-name> .] <tab
8810: 6c 65 2d 6e 61 6d 65 3e 20 7c 0a 5b 45 58 49 53  le-name> |.[EXIS
8820: 54 53 5d 20 28 20 3c 73 65 6c 65 63 74 2d 73 74  TS] ( <select-st
8830: 61 74 65 6d 65 6e 74 3e 20 29 20 7c 0a 43 41 53  atement> ) |.CAS
8840: 45 20 5b 3c 65 78 70 72 3e 5d 20 4c 50 20 57 48  E [<expr>] LP WH
8850: 45 4e 20 3c 65 78 70 72 3e 20 54 48 45 4e 20 3c  EN <expr> THEN <
8860: 65 78 70 72 3e 20 52 50 50 4c 55 53 20 5b 45 4c  expr> RPPLUS [EL
8870: 53 45 20 3c 65 78 70 72 3e 5d 20 45 4e 44 0a 7d  SE <expr>] END.}
8880: 20 7b 6c 69 6b 65 2d 6f 70 7d 20 7b 0a 4c 49 4b   {like-op} {.LIK
8890: 45 20 7c 20 4e 4f 54 20 4c 49 4b 45 0a 7d 20 7b  E | NOT LIKE.} {
88a0: 67 6c 6f 62 2d 6f 70 7d 20 7b 0a 47 4c 4f 42 20  glob-op} {.GLOB 
88b0: 7c 20 4e 4f 54 20 47 4c 4f 42 0a 7d 0a 0a 70 75  | NOT GLOB.}..pu
88c0: 74 73 20 7b 0a 3c 70 3e 54 68 69 73 20 73 65 63  ts {.<p>This sec
88d0: 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
88e0: 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
88f0: 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
8900: 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
8910: 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
8920: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
8930: 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
8940: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
8950: 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
8960: 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
8970: 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
8980: 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
8990: 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
89a0: 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
89b0: 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
89c0: 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75 6e  p>..<p>SQLite un
89d0: 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f  derstands the fo
89e0: 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79 20 6f  llowing binary o
89f0: 70 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64  perators, in ord
8a00: 65 72 20 66 72 6f 6d 0a 68 69 67 68 65 73 74 20  er from.highest 
8a10: 74 6f 20 6c 6f 77 65 73 74 20 70 72 65 63 65 64  to lowest preced
8a20: 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ence:</p>..<bloc
8a30: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f  kquote><pre>.<fo
8a40: 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66  nt color="#2c2cf
8a50: 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20  0"><big>||.*    
8a60: 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c  /    %.+    -.&l
8a70: 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26 67 74  t;&lt;   &gt;&gt
8a80: 3b 20 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26  ;   &amp;    |.&
8a90: 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20 26  lt;    &lt;=   &
8aa0: 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20  gt;    &gt;=.=  
8ab0: 20 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b    ==   !=   &lt;
8ac0: 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49 4e 0a  &gt;   </big>IN.
8ad0: 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e  AND   .OR</font>
8ae0: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
8af0: 6f 74 65 3e 0a 0a 3c 70 3e 53 75 70 70 6f 72 74  ote>..<p>Support
8b00: 65 64 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f  ed unary operato
8b10: 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70  rs are these:</p
8b20: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
8b30: 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72  pre>.<font color
8b40: 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e  ="#2c2cf0"><big>
8b50: 2d 20 20 20 20 2b 20 20 20 20 21 20 20 20 20 7e  -    +    !    ~
8b60: 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f  </big></font>.</
8b70: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
8b80: 3e 0a 0a 3c 70 3e 41 6e 79 20 53 51 4c 69 74 65  >..<p>Any SQLite
8b90: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 75 73   value can be us
8ba0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
8bb0: 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 0a 46   expression.  .F
8bc0: 6f 72 20 61 72 69 74 68 6d 65 74 69 63 20 6f 70  or arithmetic op
8bd0: 65 72 61 74 69 6f 6e 73 2c 20 69 6e 74 65 67 65  erations, intege
8be0: 72 73 20 61 72 65 20 74 72 65 61 74 65 64 20 61  rs are treated a
8bf0: 73 20 69 6e 74 65 67 65 72 73 2e 0a 53 74 72 69  s integers..Stri
8c00: 6e 67 73 20 61 72 65 20 66 69 72 73 74 20 63 6f  ngs are first co
8c10: 6e 76 65 72 74 65 64 20 74 6f 20 72 65 61 6c 20  nverted to real 
8c20: 6e 75 6d 62 65 72 73 20 75 73 69 6e 67 20 3c 62  numbers using <b
8c30: 3e 61 74 6f 66 28 29 3c 2f 62 3e 2e 0a 46 6f 72  >atof()</b>..For
8c40: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
8c50: 61 74 6f 72 73 2c 20 6e 75 6d 62 65 72 73 20 63  ators, numbers c
8c60: 6f 6d 70 61 72 65 20 61 73 20 6e 75 6d 62 65 72  ompare as number
8c70: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 0a 63 6f  s and strings.co
8c80: 6d 70 61 72 65 20 75 73 69 6e 67 20 74 68 65 20  mpare using the 
8c90: 3c 62 3e 73 74 72 63 6d 70 28 29 3c 2f 62 3e 20  <b>strcmp()</b> 
8ca0: 66 75 6e 63 74 69 6f 6e 2e 0a 4e 6f 74 65 20 74  function..Note t
8cb0: 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74 77  hat there are tw
8cc0: 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20  o variations of 
8cd0: 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e  the equals and n
8ce0: 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74  ot equals.operat
8cf0: 6f 72 73 2e 20 20 45 71 75 61 6c 73 20 63 61 6e  ors.  Equals can
8d00: 20 62 65 20 65 69 74 68 65 72 7d 0a 70 75 74 73   be either}.puts
8d10: 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f   "[Operator =] o
8d20: 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e  r [Operator ==].
8d30: 0a 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20  .The non-equals 
8d40: 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20  operator can be 
8d50: 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72  either.[Operator
8d60: 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f   !=] or [Operato
8d70: 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 54  r {&lt;&gt;}]..T
8d80: 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
8d90: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63   operator is \"c
8da0: 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69  oncatenate\" - i
8db0: 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72  t joins together
8dc0: 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73  .the two strings
8dd0: 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73   of its operands
8de0: 2e 0a 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b  ..The operator [
8df0: 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70  Operator %] outp
8e00: 75 74 73 20 74 68 65 20 72 65 6d 61 69 6e 64 65  uts the remainde
8e10: 72 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f  r of its left .o
8e20: 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74  perand modulo it
8e30: 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e  s right operand.
8e40: 3c 2f 70 3e 22 0a 70 75 74 73 20 7b 0a 0a 3c 61  </p>".puts {..<a
8e50: 20 6e 61 6d 65 3d 22 6c 69 6b 65 22 3e 3c 2f 61   name="like"></a
8e60: 3e 0a 3c 70 3e 54 68 65 20 4c 49 4b 45 20 6f 70  >.<p>The LIKE op
8e70: 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61  erator does a pa
8e80: 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63  ttern matching c
8e90: 6f 6d 70 61 72 69 73 6f 6e 2e 20 54 68 65 20 6f  omparison. The o
8ea0: 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69  perand.to the ri
8eb0: 67 68 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ght contains the
8ec0: 20 70 61 74 74 65 72 6e 2c 20 74 68 65 20 6c 65   pattern, the le
8ed0: 66 74 20 68 61 6e 64 20 6f 70 65 72 61 6e 64 20  ft hand operand 
8ee0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 73 74 72  contains the.str
8ef0: 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61  ing to match aga
8f00: 69 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e  inst the pattern
8f10: 2e 20 0a 7d 0a 70 75 74 73 20 22 41 20 70 65 72  . .}.puts "A per
8f20: 63 65 6e 74 20 73 79 6d 62 6f 6c 20 5b 4f 70 65  cent symbol [Ope
8f30: 72 61 74 6f 72 20 25 5d 20 69 6e 20 74 68 65 20  rator %] in the 
8f40: 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
8f50: 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20  any.sequence of 
8f60: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61  zero or more cha
8f70: 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
8f80: 74 72 69 6e 67 2e 20 20 41 6e 20 75 6e 64 65 72  tring.  An under
8f90: 73 63 6f 72 65 0a 5b 4f 70 65 72 61 74 6f 72 20  score.[Operator 
8fa0: 5f 5d 20 69 6e 20 74 68 65 20 70 61 74 74 65 72  _] in the patter
8fb0: 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69  n matches any si
8fc0: 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 69  ngle character i
8fd0: 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20 20 41  n the.string.  A
8fe0: 6e 79 20 6f 74 68 65 72 20 63 68 61 72 61 63 74  ny other charact
8ff0: 65 72 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c  er matches itsel
9000: 66 20 6f 72 20 69 74 27 73 20 6c 6f 77 65 72 2f  f or it's lower/
9010: 75 70 70 65 72 20 63 61 73 65 0a 65 71 75 69 76  upper case.equiv
9020: 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65  alent (i.e. case
9030: 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74  -insensitive mat
9040: 63 68 69 6e 67 29 2e 20 20 28 41 20 62 75 67 3a  ching).  (A bug:
9050: 20 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64   SQLite only.und
9060: 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c  erstands upper/l
9070: 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 37 2d  ower case for 7-
9080: 62 69 74 20 4c 61 74 69 6e 20 63 68 61 72 61 63  bit Latin charac
9090: 74 65 72 73 2e 20 20 48 65 6e 63 65 20 74 68 65  ters.  Hence the
90a0: 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69  .LIKE operator i
90b0: 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  s case sensitive
90c0: 20 66 6f 72 20 38 2d 62 69 74 20 69 73 6f 38 38   for 8-bit iso88
90d0: 35 39 20 63 68 61 72 61 63 74 65 72 73 20 6f 72  59 characters or
90e0: 20 55 54 46 2d 38 0a 63 68 61 72 61 63 74 65 72   UTF-8.character
90f0: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
9100: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
9110: 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45  <b>'a'&nbsp;LIKE
9120: 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73  &nbsp;'A'</b>.is
9130: 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61   TRUE but <b>'&a
9140: 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45  elig;'&nbsp;LIKE
9150: 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c  &nbsp;'&AElig;'<
9160: 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29 2e 3c  /b> is FALSE.).<
9170: 2f 70 3e 22 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  /p>"..puts {.<p>
9180: 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
9190: 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
91a0: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
91b0: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f  he expression.fo
91c0: 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41  llowing the ESCA
91d0: 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  PE keyword must 
91e0: 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74  evaluate to a st
91f0: 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20  ring consisting 
9200: 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72  of.a single char
9210: 61 63 74 65 72 2e 20 54 68 69 73 20 63 68 61 72  acter. This char
9220: 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73 65  acter may be use
9230: 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61  d in the LIKE pa
9240: 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65  ttern.to include
9250: 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74   literal percent
9260: 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63   or underscore c
9270: 68 61 72 61 63 74 65 72 73 2e 20 54 68 65 20 65  haracters. The e
9280: 73 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20  scape.character 
9290: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65  followed by a pe
92a0: 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e  rcent symbol, un
92b0: 64 65 72 73 63 6f 72 65 20 6f 72 20 69 74 73 65  derscore or itse
92c0: 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74  lf matches a.lit
92d0: 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d  eral percent sym
92e0: 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 20  bol, underscore 
92f0: 6f 72 20 65 73 63 61 70 65 20 63 68 61 72 61 63  or escape charac
9300: 74 65 72 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ter in the strin
9310: 67 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e  g,.respectively.
9320: 20 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20   The infix LIKE 
9330: 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c  operator is impl
9340: 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
9350: 6e 67 20 74 68 65 0a 75 73 65 72 20 66 75 6e 63  ng the.user func
9360: 74 69 6f 6e 20 3c 61 20 68 72 65 66 3d 22 23 6c  tion <a href="#l
9370: 69 6b 65 46 75 6e 63 22 3e 20 6c 69 6b 65 28 3c  ikeFunc"> like(<
9380: 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e  i>X</i>,<i>Y</i>
9390: 29 3c 2f 61 3e 2e 3c 2f 70 3e 0a 7d 0a 0a 70 75  )</a>.</p>.}..pu
93a0: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 4c 49 4b 45  ts {.<p>The LIKE
93b0: 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73 20 61   operator does a
93c0: 20 77 69 6c 64 63 61 72 64 20 63 6f 6d 70 61 72   wildcard compar
93d0: 69 73 6f 6e 2e 20 20 54 68 65 20 6f 70 65 72 61  ison.  The opera
93e0: 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20  nd.to the right 
93f0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 77 69 6c  contains the wil
9400: 64 63 61 72 64 73 2e 7d 0a 70 75 74 73 20 22 41  dcards.}.puts "A
9410: 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20   percent symbol 
9420: 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 69 6e 20  [Operator %] in 
9430: 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
9440: 64 0a 6d 61 74 63 68 65 73 20 61 6e 79 20 73 65  d.matches any se
9450: 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f  quence of zero o
9460: 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72  r more character
9470: 73 20 6f 6e 20 74 68 65 20 6c 65 66 74 2e 0a 41  s on the left..A
9480: 6e 20 75 6e 64 65 72 73 63 6f 72 65 20 5b 4f 70  n underscore [Op
9490: 65 72 61 74 6f 72 20 5f 5d 20 6f 6e 20 74 68 65  erator _] on the
94a0: 20 72 69 67 68 74 0a 6d 61 74 63 68 65 73 20 61   right.matches a
94b0: 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  ny single charac
94c0: 74 65 72 20 6f 6e 20 74 68 65 20 6c 65 66 74 2e  ter on the left.
94d0: 22 0a 0a 70 75 74 73 20 7b 0a 54 68 65 20 4c 49  "..puts {.The LI
94e0: 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6e  KE operator is n
94f0: 6f 74 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  ot case sensitiv
9500: 65 20 61 6e 64 20 77 69 6c 6c 20 6d 61 74 63 68  e and will match
9510: 20 75 70 70 65 72 20 63 61 73 65 0a 63 68 61 72   upper case.char
9520: 61 63 74 65 72 73 20 6f 6e 20 6f 6e 65 20 73 69  acters on one si
9530: 64 65 20 61 67 61 69 6e 73 74 20 6c 6f 77 65 72  de against lower
9540: 20 63 61 73 65 20 63 68 61 72 61 63 74 65 72 73   case characters
9550: 20 6f 6e 20 74 68 65 20 6f 74 68 65 72 2e 20 20   on the other.  
9560: 0a 28 41 20 62 75 67 3a 20 53 51 4c 69 74 65 20  .(A bug: SQLite 
9570: 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61 6e 64 73  only understands
9580: 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73   upper/lower cas
9590: 65 20 66 6f 72 20 37 2d 62 69 74 20 4c 61 74 69  e for 7-bit Lati
95a0: 6e 0a 63 68 61 72 61 63 74 65 72 73 2e 20 20 48  n.characters.  H
95b0: 65 6e 63 65 20 74 68 65 20 4c 49 4b 45 20 6f 70  ence the LIKE op
95c0: 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20 73  erator is case s
95d0: 65 6e 73 69 74 69 76 65 20 66 6f 72 20 38 2d 62  ensitive for 8-b
95e0: 69 74 0a 69 73 6f 38 38 35 39 20 63 68 61 72 61  it.iso8859 chara
95f0: 63 74 65 72 73 20 6f 72 20 55 54 46 2d 38 20 63  cters or UTF-8 c
9600: 68 61 72 61 63 74 65 72 73 2e 20 20 46 6f 72 20  haracters.  For 
9610: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 65 78 70  example, the exp
9620: 72 65 73 73 69 6f 6e 0a 3c 62 3e 27 61 27 26 6e  ression.<b>'a'&n
9630: 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41  bsp;LIKE&nbsp;'A
9640: 27 3c 2f 62 3e 20 69 73 20 54 52 55 45 20 62 75  '</b> is TRUE bu
9650: 74 0a 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e  t.<b>'&aelig;'&n
9660: 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26  bsp;LIKE&nbsp;'&
9670: 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46  AElig;'</b> is F
9680: 41 4c 53 45 2e 29 2e 20 20 54 68 65 20 69 6e 66  ALSE.).  The inf
9690: 69 78 20 4c 49 4b 45 0a 6f 70 65 72 61 74 6f 72  ix LIKE.operator
96a0: 20 69 73 20 69 64 65 6e 74 69 63 61 6c 20 74 68   is identical th
96b0: 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e user function 
96c0: 3c 61 20 68 72 65 66 3d 22 23 6c 69 6b 65 46 75  <a href="#likeFu
96d0: 6e 63 22 3e 0a 6c 69 6b 65 28 3c 69 3e 58 3c 2f  nc">.like(<i>X</
96e0: 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e  i>,<i>Y</i>)</a>
96f0: 2e 0a 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65 3d  ..</p>..<a name=
9700: 22 67 6c 6f 62 22 3e 3c 2f 61 3e 0a 3c 70 3e 54  "glob"></a>.<p>T
9710: 68 65 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72  he GLOB operator
9720: 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c   is similar to L
9730: 49 4b 45 20 62 75 74 20 75 73 65 73 20 74 68 65  IKE but uses the
9740: 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62   Unix.file globb
9750: 69 6e 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69  ing syntax for i
9760: 74 73 20 77 69 6c 64 63 61 72 64 73 2e 20 20 41  ts wildcards.  A
9770: 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73  lso, GLOB is cas
9780: 65 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c  e.sensitive, unl
9790: 69 6b 65 20 4c 49 4b 45 2e 20 20 42 6f 74 68 20  ike LIKE.  Both 
97a0: 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61  GLOB and LIKE ma
97b0: 79 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  y be preceded by
97c0: 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64  .the NOT keyword
97d0: 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73   to invert the s
97e0: 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74  ense of the test
97f0: 2e 20 20 54 68 65 20 69 6e 66 69 78 20 47 4c 4f  .  The infix GLO
9800: 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  B .operator is i
9810: 64 65 6e 74 69 63 61 6c 20 74 68 65 20 75 73 65  dentical the use
9820: 72 20 66 75 6e 63 74 69 6f 6e 20 3c 61 20 68 72  r function <a hr
9830: 65 66 3d 22 23 67 6c 6f 62 46 75 6e 63 22 3e 0a  ef="#globFunc">.
9840: 67 6c 6f 62 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69  glob(<i>X</i>,<i
9850: 3e 59 3c 2f 69 3e 29 3c 2f 61 3e 2e 3c 2f 70 3e  >Y</i>)</a>.</p>
9860: 0a 0a 3c 70 3e 41 20 63 6f 6c 75 6d 6e 20 6e 61  ..<p>A column na
9870: 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66  me can be any of
9880: 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e   the names defin
9890: 65 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  ed in the CREATE
98a0: 20 54 41 42 4c 45 0a 73 74 61 74 65 6d 65 6e 74   TABLE.statement
98b0: 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   or one of the f
98c0: 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c  ollowing special
98d0: 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c   identifiers: "<
98e0: 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c  b>ROWID</b>",."<
98f0: 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22  b>OID</b>", or "
9900: 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e  <b>_ROWID_</b>".
9910: 0a 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69  .These special i
9920: 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64  dentifiers all d
9930: 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71  escribe the.uniq
9940: 75 65 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65  ue random intege
9950: 72 20 6b 65 79 20 28 74 68 65 20 22 72 6f 77 20  r key (the "row 
9960: 6b 65 79 22 29 20 61 73 73 6f 63 69 61 74 65 64  key") associated
9970: 20 77 69 74 68 20 65 76 65 72 79 20 0a 72 6f 77   with every .row
9980: 20 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65 2e   of every table.
9990: 0a 54 68 65 20 73 70 65 63 69 61 6c 20 69 64 65  .The special ide
99a0: 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72 65  ntifiers only re
99b0: 66 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20 6b  fer to the row k
99c0: 65 79 20 69 66 20 74 68 65 20 43 52 45 41 54 45  ey if the CREATE
99d0: 20 54 41 42 4c 45 0a 73 74 61 74 65 6d 65 6e 74   TABLE.statement
99e0: 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65   does not define
99f0: 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77   a real column w
9a00: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
9a10: 65 2e 20 20 52 6f 77 20 6b 65 79 73 0a 61 63 74  e.  Row keys.act
9a20: 20 6c 69 6b 65 20 72 65 61 64 2d 6f 6e 6c 79 20   like read-only 
9a30: 63 6f 6c 75 6d 6e 73 2e 20 20 41 20 72 6f 77 20  columns.  A row 
9a40: 6b 65 79 20 63 61 6e 20 62 65 20 75 73 65 64 20  key can be used 
9a50: 61 6e 79 77 68 65 72 65 20 61 20 72 65 67 75 6c  anywhere a regul
9a60: 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65  ar.column can be
9a70: 20 75 73 65 64 2c 20 65 78 63 65 70 74 20 74 68   used, except th
9a80: 61 74 20 79 6f 75 20 63 61 6e 6e 6f 74 20 63 68  at you cannot ch
9a90: 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 0a 6f  ange the value.o
9aa0: 66 20 61 20 72 6f 77 20 6b 65 79 20 69 6e 20 61  f a row key in a
9ab0: 6e 20 55 50 44 41 54 45 20 6f 72 20 49 4e 53 45  n UPDATE or INSE
9ac0: 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 22 53  RT statement.."S
9ad0: 45 4c 45 43 54 20 2a 20 2e 2e 2e 22 20 64 6f 65  ELECT * ..." doe
9ae0: 73 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  s not return the
9af0: 20 72 6f 77 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c   row key.</p>..<
9b00: 70 3e 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  p>SELECT stateme
9b10: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 69  nts can appear i
9b20: 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 73  n expressions as
9b30: 20 65 69 74 68 65 72 20 74 68 65 0a 72 69 67 68   either the.righ
9b40: 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f  t-hand operand o
9b50: 66 20 74 68 65 20 49 4e 20 6f 70 65 72 61 74 6f  f the IN operato
9b60: 72 2c 20 61 73 20 61 20 73 63 61 6c 61 72 20 71  r, as a scalar q
9b70: 75 61 6e 74 69 74 79 2c 20 6f 72 0a 61 73 20 74  uantity, or.as t
9b80: 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e  he operand of an
9b90: 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
9ba0: 2e 0a 41 73 20 61 20 73 63 61 6c 61 72 20 71 75  ..As a scalar qu
9bb0: 61 6e 74 69 74 79 20 6f 72 20 74 68 65 20 6f 70  antity or the op
9bc0: 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f  erand of an IN o
9bd0: 70 65 72 61 74 6f 72 2c 0a 74 68 65 20 53 45 4c  perator,.the SEL
9be0: 45 43 54 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ECT should have 
9bf0: 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 63 6f  only a single co
9c00: 6c 75 6d 6e 20 69 6e 20 69 74 73 0a 72 65 73 75  lumn in its.resu
9c10: 6c 74 2e 20 20 43 6f 6d 70 6f 75 6e 64 20 53 45  lt.  Compound SE
9c20: 4c 45 43 54 73 20 28 63 6f 6e 6e 65 63 74 65 64  LECTs (connected
9c30: 20 77 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c   with keywords l
9c40: 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 0a 45 58 43  ike UNION or.EXC
9c50: 45 50 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64  EPT) are allowed
9c60: 2e 0a 57 69 74 68 20 74 68 65 20 45 58 49 53 54  ..With the EXIST
9c70: 53 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 20  S operator, the 
9c80: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
9c90: 65 73 75 6c 74 20 73 65 74 20 6f 66 20 74 68 65  esult set of the
9ca0: 20 53 45 4c 45 43 54 20 61 72 65 0a 69 67 6e 6f   SELECT are.igno
9cb0: 72 65 64 20 61 6e 64 20 74 68 65 20 65 78 70 72  red and the expr
9cc0: 65 73 73 69 6f 6e 20 72 65 74 75 72 6e 73 20 54  ession returns T
9cd0: 52 55 45 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f  RUE if one or mo
9ce0: 72 65 20 72 6f 77 73 20 65 78 69 73 74 0a 61 6e  re rows exist.an
9cf0: 64 20 46 41 4c 53 45 20 69 66 20 74 68 65 20 72  d FALSE if the r
9d00: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
9d10: 74 79 2e 0a 49 66 20 6e 6f 20 74 65 72 6d 73 20  ty..If no terms 
9d20: 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20 65 78  in the SELECT ex
9d30: 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 20 74  pression refer t
9d40: 6f 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 63  o value in the c
9d50: 6f 6e 74 61 69 6e 69 6e 67 0a 71 75 65 72 79 2c  ontaining.query,
9d60: 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
9d70: 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
9d80: 64 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20  d once prior to 
9d90: 61 6e 79 20 6f 74 68 65 72 0a 70 72 6f 63 65 73  any other.proces
9da0: 73 69 6e 67 20 61 6e 64 20 74 68 65 20 72 65 73  sing and the res
9db0: 75 6c 74 20 69 73 20 72 65 75 73 65 64 20 61 73  ult is reused as
9dc0: 20 6e 65 63 65 73 73 61 72 79 2e 20 20 49 66 20   necessary.  If 
9dd0: 74 68 65 20 53 45 4c 45 43 54 20 65 78 70 72 65  the SELECT expre
9de0: 73 73 69 6f 6e 0a 64 6f 65 73 20 63 6f 6e 74 61  ssion.does conta
9df0: 69 6e 20 76 61 72 69 61 62 6c 65 73 20 66 72 6f  in variables fro
9e00: 6d 20 74 68 65 20 6f 75 74 65 72 20 71 75 65 72  m the outer quer
9e10: 79 2c 20 74 68 65 6e 20 74 68 65 20 53 45 4c 45  y, then the SELE
9e20: 43 54 20 69 73 20 72 65 65 76 61 6c 75 61 74 65  CT is reevaluate
9e30: 64 0a 65 76 65 72 79 20 74 69 6d 65 20 69 74 20  d.every time it 
9e40: 69 73 20 6e 65 65 64 65 64 2e 3c 2f 70 3e 0a 0a  is needed.</p>..
9e50: 3c 70 3e 57 68 65 6e 20 61 20 53 45 4c 45 43 54  <p>When a SELECT
9e60: 20 69 73 20 74 68 65 20 72 69 67 68 74 20 6f 70   is the right op
9e70: 65 72 61 6e 64 20 6f 66 20 74 68 65 20 49 4e 20  erand of the IN 
9e80: 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 20 49 4e  operator, the IN
9e90: 0a 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e  .operator return
9ea0: 73 20 54 52 55 45 20 69 66 20 74 68 65 20 72 65  s TRUE if the re
9eb0: 73 75 6c 74 20 6f 66 20 74 68 65 20 6c 65 66 74  sult of the left
9ec0: 20 6f 70 65 72 61 6e 64 20 69 73 20 61 6e 79 20   operand is any 
9ed0: 6f 66 0a 74 68 65 20 76 61 6c 75 65 73 20 67 65  of.the values ge
9ee0: 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 73  nerated by the s
9ef0: 65 6c 65 63 74 2e 20 20 54 68 65 20 49 4e 20 6f  elect.  The IN o
9f00: 70 65 72 61 74 6f 72 20 6d 61 79 20 62 65 20 70  perator may be p
9f10: 72 65 63 65 64 65 64 0a 62 79 20 74 68 65 20 4e  receded.by the N
9f20: 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e  OT keyword to in
9f30: 76 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f  vert the sense o
9f40: 66 20 74 68 65 20 74 65 73 74 2e 3c 2f 70 3e 0a  f the test.</p>.
9f50: 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45 4c 45 43  .<p>When a SELEC
9f60: 54 20 61 70 70 65 61 72 73 20 77 69 74 68 69 6e  T appears within
9f70: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 62   an expression b
9f80: 75 74 20 69 73 20 6e 6f 74 20 74 68 65 20 72 69  ut is not the ri
9f90: 67 68 74 0a 6f 70 65 72 61 6e 64 20 6f 66 20 61  ght.operand of a
9fa0: 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74  n IN operator, t
9fb0: 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f  hen the first ro
9fc0: 77 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  w of the result 
9fd0: 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20 62 65  of the.SELECT be
9fe0: 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75 65 20  comes the value 
9ff0: 75 73 65 64 20 69 6e 20 74 68 65 20 65 78 70 72  used in the expr
a000: 65 73 73 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  ession.  If the 
a010: 53 45 4c 45 43 54 20 79 69 65 6c 64 73 0a 6d 6f  SELECT yields.mo
a020: 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 65 73 75  re than one resu
a030: 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73  lt row, all rows
a040: 20 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74   after the first
a050: 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 20 49   are ignored.  I
a060: 66 0a 74 68 65 20 53 45 4c 45 43 54 20 79 69 65  f.the SELECT yie
a070: 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65  lds no rows, the
a080: 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  n the value of t
a090: 68 65 20 53 45 4c 45 43 54 20 69 73 20 4e 55 4c  he SELECT is NUL
a0a0: 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 6f 74 68 20  L.</p>..<p>Both 
a0b0: 73 69 6d 70 6c 65 20 61 6e 64 20 61 67 67 72 65  simple and aggre
a0c0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
a0d0: 72 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 41  re supported.  A
a0e0: 20 73 69 6d 70 6c 65 0a 66 75 6e 63 74 69 6f 6e   simple.function
a0f0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
a100: 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
a110: 20 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   Simple function
a120: 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c  s return.a resul
a130: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61  t immediately ba
a140: 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70  sed on their inp
a150: 75 74 73 2e 20 20 41 67 67 72 65 67 61 74 65 20  uts.  Aggregate 
a160: 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e  functions.may on
a170: 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 20  ly be used in a 
a180: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
a190: 2e 20 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  .  Aggregate fun
a1a0: 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74  ctions compute.t
a1b0: 68 65 69 72 20 72 65 73 75 6c 74 20 61 63 72 6f  heir result acro
a1c0: 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74  ss all rows of t
a1d0: 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f  he result set.</
a1e0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 75 6e 63 74  p>..<p>The funct
a1f0: 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77  ions shown below
a200: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62   are available b
a210: 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69  y default.  Addi
a220: 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73  tional.functions
a230: 20 6d 61 79 20 62 65 20 77 72 69 74 74 65 6e 20   may be written 
a240: 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74  in C and added t
a250: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65  o the database e
a260: 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20  ngine using.the 
a270: 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33 72 65  <a href="capi3re
a280: 66 2e 68 74 6d 6c 23 63 66 75 6e 63 22 3e 73 71  f.html#cfunc">sq
a290: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
a2a0: 63 74 69 6f 6e 28 29 3c 2f 61 3e 0a 41 50 49 2e  ction()</a>.API.
a2b0: 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  </p>..<table bor
a2c0: 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e  der=0 cellpaddin
a2d0: 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  g=10>.<tr>.<td v
a2e0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
a2f0: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
a300: 31 32 30 3e 61 62 73 28 3c 69 3e 58 3c 2f 69 3e  120>abs(<i>X</i>
a310: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
a320: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
a330: 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
a340: 65 20 6f 66 20 61 72 67 75 6d 65 6e 74 20 3c 69  e of argument <i
a350: 3e 58 3c 2f 69 3e 2e 3c 2f 74 64 3e 0a 3c 2f 74  >X</i>.</td>.</t
a360: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
a370: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
a380: 22 72 69 67 68 74 22 3e 63 6f 61 6c 65 73 63 65  "right">coalesce
a390: 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f  (<i>X</i>,<i>Y</
a3a0: 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64  i>,...)</td>.<td
a3b0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65   valign="top">Re
a3c0: 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 74  turn a copy of t
a3d0: 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  he first non-NUL
a3e0: 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a  L argument.  If.
a3f0: 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72  all arguments ar
a400: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c  e NULL then NULL
a410: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 54   is returned.  T
a420: 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 74 20  here must be at 
a430: 6c 65 61 73 74 20 0a 32 20 61 72 67 75 6d 65 6e  least .2 argumen
a440: 74 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  ts.</td>.</tr>..
a450: 3c 74 72 3e 0a 3c 61 20 6e 61 6d 65 3d 22 67 6c  <tr>.<a name="gl
a460: 6f 62 46 75 6e 63 22 3e 3c 2f 61 3e 0a 3c 74 64  obFunc"></a>.<td
a470: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
a480: 69 67 6e 3d 22 72 69 67 68 74 22 3e 67 6c 6f 62  ign="right">glob
a490: 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f  (<i>X</i>,<i>Y</
a4a0: 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  i>)</td>.<td val
a4b0: 69 67 6e 3d 22 74 6f 70 22 3e 54 68 69 73 20 66  ign="top">This f
a4c0: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
a4d0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
a4e0: 0a 22 3c 62 3e 58 20 47 4c 4f 42 20 59 3c 2f 62  ."<b>X GLOB Y</b
a4f0: 3e 22 20 73 79 6e 74 61 78 20 6f 66 20 53 51 4c  >" syntax of SQL
a500: 69 74 65 2e 20 20 54 68 65 0a 3c 61 20 68 72 65  ite.  The.<a hre
a510: 66 3d 22 63 61 70 69 33 72 65 66 2e 68 74 6d 6c  f="capi3ref.html
a520: 23 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  #sqlite3_create_
a530: 66 75 6e 63 74 69 6f 6e 22 3e 73 71 6c 69 74 65  function">sqlite
a540: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
a550: 6e 28 29 3c 2f 61 3e 20 0a 69 6e 74 65 72 66 61  n()</a> .interfa
a560: 63 65 20 63 61 6e 0a 62 65 20 75 73 65 64 20 74  ce can.be used t
a570: 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  o override this 
a580: 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65  function and the
a590: 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20  reby change the 
a5a0: 6f 70 65 72 61 74 69 6f 6e 0a 6f 66 20 74 68 65  operation.of the
a5b0: 20 3c 61 20 68 72 65 66 3d 22 23 67 6c 6f 62 22   <a href="#glob"
a5c0: 3e 47 4c 4f 42 3c 2f 61 3e 20 6f 70 65 72 61 74  >GLOB</a> operat
a5d0: 6f 72 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  or.</td>.</tr>..
a5e0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
a5f0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
a600: 68 74 22 3e 69 66 6e 75 6c 6c 28 3c 69 3e 58 3c  ht">ifnull(<i>X<
a610: 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74  /i>,<i>Y</i>)</t
a620: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
a630: 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 63 6f 70  op">Return a cop
a640: 79 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e  y of the first n
a650: 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
a660: 2e 20 20 49 66 0a 62 6f 74 68 20 61 72 67 75 6d  .  If.both argum
a670: 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ents are NULL th
a680: 65 6e 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72  en NULL is retur
a690: 6e 65 64 2e 20 54 68 69 73 20 62 65 68 61 76 65  ned. This behave
a6a0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 0a 3c  s the same as .<
a6b0: 62 3e 63 6f 61 6c 65 73 63 65 28 29 3c 2f 62 3e  b>coalesce()</b>
a6c0: 20 61 62 6f 76 65 2e 3c 2f 74 64 3e 0a 3c 2f 74   above.</td>.</t
a6d0: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
a6e0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
a6f0: 22 72 69 67 68 74 22 3e 6c 61 73 74 5f 69 6e 73  "right">last_ins
a700: 65 72 74 5f 72 6f 77 69 64 28 29 3c 2f 74 64 3e  ert_rowid()</td>
a710: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
a720: 22 3e 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57  ">Return the ROW
a730: 49 44 20 6f 66 20 74 68 65 20 6c 61 73 74 20 72  ID of the last r
a740: 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20 74  ow insert from t
a750: 68 69 73 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  his.connection t
a760: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  o the database. 
a770: 20 54 68 69 73 20 69 73 20 74 68 65 20 73 61 6d   This is the sam
a780: 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  e value that wou
a790: 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 0a 66  ld be returned.f
a7a0: 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71 6c 69 74  rom the <b>sqlit
a7b0: 65 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  e_last_insert_ro
a7c0: 77 69 64 28 29 3c 2f 62 3e 20 41 50 49 20 66 75  wid()</b> API fu
a7d0: 6e 63 74 69 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74  nction.</td>.</t
a7e0: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
a7f0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
a800: 22 72 69 67 68 74 22 3e 6c 65 6e 67 74 68 28 3c  "right">length(<
a810: 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>X</i>)</td>.<t
a820: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
a830: 65 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e 67  eturn the string
a840: 20 6c 65 6e 67 74 68 20 6f 66 20 3c 69 3e 58 3c   length of <i>X<
a850: 2f 69 3e 20 69 6e 20 63 68 61 72 61 63 74 65 72  /i> in character
a860: 73 2e 0a 49 66 20 53 51 4c 69 74 65 20 69 73 20  s..If SQLite is 
a870: 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 73 75  configured to su
a880: 70 70 6f 72 74 20 55 54 46 2d 38 2c 20 74 68 65  pport UTF-8, the
a890: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
a8a0: 55 54 46 2d 38 0a 63 68 61 72 61 63 74 65 72 73  UTF-8.characters
a8b0: 20 69 73 20 72 65 74 75 72 6e 65 64 2c 20 6e 6f   is returned, no
a8c0: 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
a8d0: 62 79 74 65 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  bytes.</td>.</tr
a8e0: 3e 0a 0a 3c 74 72 3e 0a 3c 61 20 6e 61 6d 65 3d  >..<tr>.<a name=
a8f0: 22 6c 69 6b 65 46 75 6e 63 22 3e 3c 2f 61 3e 0a  "likeFunc"></a>.
a900: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
a910: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6c   align="right">l
a920: 69 6b 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  ike(<i>X</i>,<i>
a930: 59 3c 2f 69 3e 20 5b 2c 3c 69 3e 5a 3c 2f 69 3e  Y</i> [,<i>Z</i>
a940: 5d 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  ])</td>.<td vali
a950: 67 6e 3d 22 74 6f 70 22 3e 0a 54 68 69 73 20 66  gn="top">.This f
a960: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
a970: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
a980: 20 22 3c 62 3e 58 20 4c 49 4b 45 20 59 20 5b 45   "<b>X LIKE Y [E
a990: 53 43 41 50 45 20 5a 5d 3c 2f 62 3e 22 0a 73 79  SCAPE Z]</b>".sy
a9a0: 6e 74 61 78 20 6f 66 20 53 51 4c 2e 20 49 66 20  ntax of SQL. If 
a9b0: 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
a9c0: 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
a9d0: 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a  esent, then the.
a9e0: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 69 73  user-function is
a9f0: 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68   invoked with th
aa00: 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 4f  ree arguments. O
aa10: 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a  therwise, it is.
aa20: 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
aa30: 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
aa40: 20 54 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 63   The .<a href="c
aa50: 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c  api3ref.html#sql
aa60: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
aa70: 74 69 6f 6e 22 3e 0a 73 71 6c 69 74 65 5f 63 72  tion">.sqlite_cr
aa80: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 3c  eate_function()<
aa90: 2f 61 3e 20 69 6e 74 65 72 66 61 63 65 20 63 61  /a> interface ca
aaa0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65  n be used to ove
aab0: 72 72 69 64 65 20 74 68 69 73 0a 66 75 6e 63 74  rride this.funct
aac0: 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20  ion and thereby 
aad0: 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61  change the opera
aae0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c 61 0a 68  tion of the <a.h
aaf0: 72 65 66 3d 20 22 23 6c 69 6b 65 22 3e 4c 49 4b  ref= "#like">LIK
ab00: 45 3c 2f 61 3e 20 6f 70 65 72 61 74 6f 72 2e 20  E</a> operator. 
ab10: 57 68 65 6e 20 64 6f 69 6e 67 20 74 68 69 73 2c  When doing this,
ab20: 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72   it may be impor
ab30: 74 61 6e 74 0a 74 6f 20 6f 76 65 72 72 69 64 65  tant.to override
ab40: 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e   both the two an
ab50: 64 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  d three argument
ab60: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
ab70: 20 6c 69 6b 65 28 29 20 0a 66 75 6e 63 74 69 6f   like() .functio
ab80: 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69  n. Otherwise, di
ab90: 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79  fferent code may
aba0: 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d   be called to im
abb0: 70 6c 65 6d 65 6e 74 20 74 68 65 0a 4c 49 4b 45  plement the.LIKE
abc0: 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e 64   operator depend
abd0: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
abe0: 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45 20  r not an ESCAPE 
abf0: 63 6c 61 75 73 65 20 77 61 73 20 0a 73 70 65 63  clause was .spec
ac00: 69 66 69 65 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  ified.</td>.</tr
ac10: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
ac20: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
ac30: 72 69 67 68 74 22 3e 6c 6f 77 65 72 28 3c 69 3e  right">lower(<i>
ac40: 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20  X</i>)</td>.<td 
ac50: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
ac60: 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 73 74  urn a copy of st
ac70: 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 77 69  ring <i>X</i> wi
ac80: 6c 6c 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  ll all character
ac90: 73 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c  s.converted to l
aca0: 6f 77 65 72 20 63 61 73 65 2e 20 20 54 68 65 20  ower case.  The 
acb0: 43 20 6c 69 62 72 61 72 79 20 3c 62 3e 74 6f 6c  C library <b>tol
acc0: 6f 77 65 72 28 29 3c 2f 62 3e 20 72 6f 75 74 69  ower()</b> routi
acd0: 6e 65 20 69 73 20 75 73 65 64 0a 66 6f 72 20 74  ne is used.for t
ace0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 77  he conversion, w
acf0: 68 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20  hich means that 
ad00: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 69  this function mi
ad10: 67 68 74 20 6e 6f 74 0a 77 6f 72 6b 20 63 6f 72  ght not.work cor
ad20: 72 65 63 74 6c 79 20 6f 6e 20 55 54 46 2d 38 20  rectly on UTF-8 
ad30: 63 68 61 72 61 63 74 65 72 73 2e 3c 2f 74 64 3e  characters.</td>
ad40: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
ad50: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
ad60: 69 67 6e 3d 22 72 69 67 68 74 22 3e 6d 61 78 28  ign="right">max(
ad70: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
ad80: 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20  >,...)</td>.<td 
ad90: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
ada0: 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  urn the argument
adb0: 20 77 69 74 68 20 74 68 65 20 6d 61 78 69 6d 75   with the maximu
adc0: 6d 20 76 61 6c 75 65 2e 20 20 41 72 67 75 6d 65  m value.  Argume
add0: 6e 74 73 0a 6d 61 79 20 62 65 20 73 74 72 69 6e  nts.may be strin
ade0: 67 73 20 69 6e 20 61 64 64 69 74 69 6f 6e 20 74  gs in addition t
adf0: 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54 68 65 20  o numbers.  The 
ae00: 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  maximum value is
ae10: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
ae20: 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72  he usual sort or
ae30: 64 65 72 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  der.  Note that 
ae40: 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20  <b>max()</b> is 
ae50: 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
ae60: 6e 20 77 68 65 6e 0a 69 74 20 68 61 73 20 32 20  n when.it has 2 
ae70: 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
ae80: 73 20 62 75 74 20 63 6f 6e 76 65 72 74 73 20 74  s but converts t
ae90: 6f 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  o an aggregate f
aea0: 75 6e 63 74 69 6f 6e 20 69 66 20 67 69 76 65 6e  unction if given
aeb0: 0a 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61  .only a single a
aec0: 72 67 75 6d 65 6e 74 2e 3c 2f 74 64 3e 0a 3c 2f  rgument.</td>.</
aed0: 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  tr>..<tr>.<td va
aee0: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
aef0: 3d 22 72 69 67 68 74 22 3e 6d 69 6e 28 3c 69 3e  ="right">min(<i>
af00: 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e  X</i>,<i>Y</i>,.
af10: 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  ..)</td>.<td val
af20: 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e  ign="top">Return
af30: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69   the argument wi
af40: 74 68 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 76  th the minimum v
af50: 61 6c 75 65 2e 20 20 41 72 67 75 6d 65 6e 74 73  alue.  Arguments
af60: 0a 6d 61 79 20 62 65 20 73 74 72 69 6e 67 73 20  .may be strings 
af70: 69 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 6e  in addition to n
af80: 75 6d 62 65 72 73 2e 20 20 54 68 65 20 6d 69 6e  umbers.  The min
af90: 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 64 65  imum value is de
afa0: 74 65 72 6d 69 6e 65 64 0a 62 79 20 74 68 65 20  termined.by the 
afb0: 75 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72  usual sort order
afc0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e  .  Note that <b>
afd0: 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73  min()</b> is a s
afe0: 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77  imple function w
aff0: 68 65 6e 0a 69 74 20 68 61 73 20 32 20 6f 72 20  hen.it has 2 or 
b000: 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62  more arguments b
b010: 75 74 20 63 6f 6e 76 65 72 74 73 20 74 6f 20 61  ut converts to a
b020: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
b030: 74 69 6f 6e 20 69 66 20 67 69 76 65 6e 0a 6f 6e  tion if given.on
b040: 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
b050: 6d 65 6e 74 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ment.</td>.</tr>
b060: 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
b070: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
b080: 69 67 68 74 22 3e 6e 75 6c 6c 69 66 28 3c 69 3e  ight">nullif(<i>
b090: 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c  X</i>,<i>Y</i>)<
b0a0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
b0b0: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
b0c0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
b0d0: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  if the arguments
b0e0: 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2c 20   are different, 
b0f0: 0a 6f 74 68 65 72 77 69 73 65 20 72 65 74 75 72  .otherwise retur
b100: 6e 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a 3c 2f 74  n NULL.</td>.</t
b110: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
b120: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
b130: 22 72 69 67 68 74 22 3e 71 75 6f 74 65 28 3c 69  "right">quote(<i
b140: 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64  >X</i>)</td>.<td
b150: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 54 68   valign="top">Th
b160: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
b170: 6e 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  ns a string whic
b180: 68 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  h is the value o
b190: 66 0a 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73  f.its argument s
b1a0: 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c  uitable for incl
b1b0: 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f 74 68  usion into anoth
b1c0: 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  er SQL statement
b1d0: 2e 0a 53 74 72 69 6e 67 73 20 61 72 65 20 73 75  ..Strings are su
b1e0: 72 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67  rrounded by sing
b1f0: 6c 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65  le-quotes with e
b200: 73 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69  scapes on interi
b210: 6f 72 20 71 75 6f 74 65 73 0a 61 73 20 6e 65 65  or quotes.as nee
b220: 64 65 64 2e 20 20 42 4c 4f 42 73 20 61 72 65 20  ded.  BLOBs are 
b230: 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64  encoded as hexad
b240: 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e  ecimal literals.
b250: 0a 54 68 65 20 63 75 72 72 65 6e 74 20 69 6d 70  .The current imp
b260: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 56  lementation of V
b270: 41 43 55 55 4d 20 75 73 65 73 20 74 68 69 73 20  ACUUM uses this 
b280: 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 66  function.  The f
b290: 75 6e 63 74 69 6f 6e 0a 69 73 20 61 6c 73 6f 20  unction.is also 
b2a0: 75 73 65 66 75 6c 20 77 68 65 6e 20 77 72 69 74  useful when writ
b2b0: 69 6e 67 20 74 72 69 67 67 65 72 73 20 74 6f 20  ing triggers to 
b2c0: 69 6d 70 6c 65 6d 65 6e 74 20 75 6e 64 6f 2f 72  implement undo/r
b2d0: 65 64 6f 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  edo functionalit
b2e0: 79 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  y..</td>.</tr>..
b2f0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
b300: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
b310: 68 74 22 3e 72 61 6e 64 6f 6d 28 2a 29 3c 2f 74  ht">random(*)</t
b320: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
b330: 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 72 61 6e  op">Return a ran
b340: 64 6f 6d 20 69 6e 74 65 67 65 72 20 62 65 74 77  dom integer betw
b350: 65 65 6e 20 2d 32 31 34 37 34 38 33 36 34 38 20  een -2147483648 
b360: 61 6e 64 0a 2b 32 31 34 37 34 38 33 36 34 37 2e  and.+2147483647.
b370: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
b380: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b390: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
b3a0: 3e 72 6f 75 6e 64 28 3c 69 3e 58 3c 2f 69 3e 29  >round(<i>X</i>)
b3b0: 3c 62 72 3e 72 6f 75 6e 64 28 3c 69 3e 58 3c 2f  <br>round(<i>X</
b3c0: 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64  i>,<i>Y</i>)</td
b3d0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b3e0: 70 22 3e 52 6f 75 6e 64 20 6f 66 66 20 74 68 65  p">Round off the
b3f0: 20 6e 75 6d 62 65 72 20 3c 69 3e 58 3c 2f 69 3e   number <i>X</i>
b400: 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e 20 64 69 67   to <i>Y</i> dig
b410: 69 74 73 20 74 6f 20 74 68 65 0a 72 69 67 68 74  its to the.right
b420: 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20   of the decimal 
b430: 70 6f 69 6e 74 2e 20 20 49 66 20 74 68 65 20 3c  point.  If the <
b440: 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74  i>Y</i> argument
b450: 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 30 20 69   is omitted, 0 i
b460: 73 20 0a 61 73 73 75 6d 65 64 2e 3c 2f 74 64 3e  s .assumed.</td>
b470: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
b480: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
b490: 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 6f 75 6e  ign="right">soun
b4a0: 64 65 78 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74  dex(<i>X</i>)</t
b4b0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
b4c0: 6f 70 22 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  op">Compute the 
b4d0: 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67  soundex encoding
b4e0: 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 3c   of the string <
b4f0: 69 3e 58 3c 2f 69 3e 2e 0a 54 68 65 20 73 74 72  i>X</i>..The str
b500: 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65  ing "?000" is re
b510: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72  turned if the ar
b520: 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 0a  gument is NULL..
b530: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
b540: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51   omitted from SQ
b550: 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e  Lite by default.
b560: 0a 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69  .It is only avai
b570: 6c 61 62 6c 65 20 74 68 65 20 2d 44 53 51 4c 49  lable the -DSQLI
b580: 54 45 5f 53 4f 55 4e 44 45 58 3d 31 20 63 6f 6d  TE_SOUNDEX=1 com
b590: 70 69 6c 65 72 20 6f 70 74 69 6f 6e 0a 69 73 20  piler option.is 
b5a0: 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65  used when SQLite
b5b0: 20 69 73 20 62 75 69 6c 74 2e 3c 2f 74 64 3e 0a   is built.</td>.
b5c0: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
b5d0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
b5e0: 67 6e 3d 22 72 69 67 68 74 22 3e 73 71 6c 69 74  gn="right">sqlit
b5f0: 65 5f 76 65 72 73 69 6f 6e 28 2a 29 3c 2f 74 64  e_version(*)</td
b600: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b610: 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20 76 65  p">Return the ve
b620: 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72  rsion string for
b630: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
b640: 61 72 79 0a 74 68 61 74 20 69 73 20 72 75 6e 6e  ary.that is runn
b650: 69 6e 67 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  ing.  Example:  
b660: 22 32 2e 38 2e 30 22 3c 2f 74 64 3e 0a 3c 2f 74  "2.8.0"</td>.</t
b670: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
b680: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
b690: 22 72 69 67 68 74 22 3e 73 75 62 73 74 72 28 3c  "right">substr(<
b6a0: 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e  i>X</i>,<i>Y</i>
b6b0: 2c 3c 69 3e 5a 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  ,<i>Z</i>)</td>.
b6c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b6d0: 3e 52 65 74 75 72 6e 20 61 20 73 75 62 73 74 72  >Return a substr
b6e0: 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74 72  ing of input str
b6f0: 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 74 68 61  ing <i>X</i> tha
b700: 74 20 62 65 67 69 6e 73 0a 77 69 74 68 20 74 68  t begins.with th
b710: 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74 68 20 63 68  e <i>Y</i>-th ch
b720: 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63  aracter and whic
b730: 68 20 69 73 20 3c 69 3e 5a 3c 2f 69 3e 20 63 68  h is <i>Z</i> ch
b740: 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 54  aracters long..T
b750: 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
b760: 72 61 63 74 65 72 20 6f 66 20 3c 69 3e 58 3c 2f  racter of <i>X</
b770: 69 3e 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20  i> is number 1. 
b780: 20 49 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   If <i>Y</i> is 
b790: 6e 65 67 61 74 69 76 65 0a 74 68 65 20 74 68 65  negative.the the
b7a0: 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
b7b0: 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e   of the substrin
b7c0: 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f  g is found by co
b7d0: 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a  unting from the.
b7e0: 72 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61  right rather tha
b7f0: 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 49 66 20  n the left.  If 
b800: 53 51 4c 69 74 65 20 69 73 20 63 6f 6e 66 69 67  SQLite is config
b810: 75 72 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  ured to support 
b820: 55 54 46 2d 38 2c 0a 74 68 65 6e 20 63 68 61 72  UTF-8,.then char
b830: 61 63 74 65 72 73 20 69 6e 64 69 63 65 73 20 72  acters indices r
b840: 65 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55  efer to actual U
b850: 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 73 2c  TF-8 characters,
b860: 20 6e 6f 74 20 62 79 74 65 73 2e 3c 2f 74 64 3e   not bytes.</td>
b870: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
b880: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
b890: 69 67 6e 3d 22 72 69 67 68 74 22 3e 74 79 70 65  ign="right">type
b8a0: 6f 66 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64  of(<i>X</i>)</td
b8b0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b8c0: 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20 74 79  p">Return the ty
b8d0: 70 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  pe of the expres
b8e0: 73 69 6f 6e 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20  sion <i>X</i>.  
b8f0: 54 68 65 20 6f 6e 6c 79 20 0a 72 65 74 75 72 6e  The only .return
b900: 20 76 61 6c 75 65 73 20 61 72 65 20 22 6e 75 6c   values are "nul
b910: 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22  l", "integer", "
b920: 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 61  real", "text", a
b930: 6e 64 20 22 62 6c 6f 62 22 2e 0a 53 51 4c 69 74  nd "blob"..SQLit
b940: 65 27 73 20 74 79 70 65 20 68 61 6e 64 6c 69 6e  e's type handlin
b950: 67 20 69 73 20 0a 65 78 70 6c 61 69 6e 65 64 20  g is .explained 
b960: 69 6e 20 3c 61 20 68 72 65 66 3d 22 64 61 74 61  in <a href="data
b970: 74 79 70 65 33 2e 68 74 6d 6c 22 3e 44 61 74 61  type3.html">Data
b980: 74 79 70 65 73 20 69 6e 20 53 51 4c 69 74 65 20  types in SQLite 
b990: 56 65 72 73 69 6f 6e 20 33 3c 2f 61 3e 2e 3c 2f  Version 3</a>.</
b9a0: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
b9b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b9c0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 75   align="right">u
b9d0: 70 70 65 72 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f  pper(<i>X</i>)</
b9e0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
b9f0: 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 63 6f  top">Return a co
ba00: 70 79 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69  py of input stri
ba10: 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 63 6f 6e 76  ng <i>X</i> conv
ba20: 65 72 74 65 64 20 74 6f 20 61 6c 6c 0a 75 70 70  erted to all.upp
ba30: 65 72 2d 63 61 73 65 20 6c 65 74 74 65 72 73 2e  er-case letters.
ba40: 20 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61    The implementa
ba50: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 66 75 6e  tion of this fun
ba60: 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 20 43  ction uses the C
ba70: 20 6c 69 62 72 61 72 79 0a 72 6f 75 74 69 6e 65   library.routine
ba80: 20 3c 62 3e 74 6f 75 70 70 65 72 28 29 3c 2f 62   <b>toupper()</b
ba90: 3e 20 77 68 69 63 68 20 6d 65 61 6e 73 20 69 74  > which means it
baa0: 20 6d 61 79 20 6e 6f 74 20 77 6f 72 6b 20 63 6f   may not work co
bab0: 72 72 65 63 74 6c 79 20 6f 6e 20 0a 55 54 46 2d  rrectly on .UTF-
bac0: 38 20 73 74 72 69 6e 67 73 2e 3c 2f 74 64 3e 0a  8 strings.</td>.
bad0: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  </tr>.</table>..
bae0: 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  <p>.The followin
baf0: 67 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  g aggregate func
bb00: 74 69 6f 6e 73 20 61 72 65 20 61 76 61 69 6c 61  tions are availa
bb10: 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ble by default. 
bb20: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72   Additional.aggr
bb30: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
bb40: 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79  written in C may
bb50: 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67 20   be added using 
bb60: 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 63 61  the .<a href="ca
bb70: 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69  pi3ref.html#sqli
bb80: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
bb90: 69 6f 6e 22 3e 73 71 6c 69 74 65 33 5f 63 72 65  ion">sqlite3_cre
bba0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 3c 2f  ate_function()</
bbb0: 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61  a>.API.</p>..<ta
bbc0: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
bbd0: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72  lpadding=10>.<tr
bbe0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
bbf0: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
bc00: 20 77 69 64 74 68 3d 31 32 30 3e 61 76 67 28 3c   width=120>avg(<
bc10: 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>X</i>)</td>.<t
bc20: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
bc30: 65 74 75 72 6e 20 74 68 65 20 61 76 65 72 61 67  eturn the averag
bc40: 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 3c  e value of all <
bc50: 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61  i>X</i> within a
bc60: 20 67 72 6f 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74   group.</td>.</t
bc70: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
bc80: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
bc90: 22 72 69 67 68 74 22 3e 63 6f 75 6e 74 28 3c 69  "right">count(<i
bca0: 3e 58 3c 2f 69 3e 29 3c 62 72 3e 63 6f 75 6e 74  >X</i>)<br>count
bcb0: 28 2a 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  (*)</td>.<td val
bcc0: 69 67 6e 3d 22 74 6f 70 22 3e 54 68 65 20 66 69  ign="top">The fi
bcd0: 72 73 74 20 66 6f 72 6d 20 72 65 74 75 72 6e 20  rst form return 
bce0: 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e  a count of the n
bcf0: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 74  umber of times.t
bd00: 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20  hat <i>X</i> is 
bd10: 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72  not NULL in a gr
bd20: 6f 75 70 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  oup.  The second
bd30: 20 66 6f 72 6d 20 28 77 69 74 68 20 6e 6f 20 61   form (with no a
bd40: 72 67 75 6d 65 6e 74 29 0a 72 65 74 75 72 6e 73  rgument).returns
bd50: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
bd60: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
bd70: 20 67 72 6f 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74   group.</td>.</t
bd80: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
bd90: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
bda0: 22 72 69 67 68 74 22 3e 6d 61 78 28 3c 69 3e 58  "right">max(<i>X
bdb0: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
bdc0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75  align="top">Retu
bdd0: 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76  rn the maximum v
bde0: 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
bdf0: 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
be00: 0a 54 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20  .The usual sort 
be10: 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f  order is used to
be20: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6d   determine the m
be30: 61 78 69 6d 75 6d 2e 3c 2f 74 64 3e 0a 3c 2f 74  aximum.</td>.</t
be40: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
be50: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
be60: 22 72 69 67 68 74 22 3e 6d 69 6e 28 3c 69 3e 58  "right">min(<i>X
be70: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
be80: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75  align="top">Retu
be90: 72 6e 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e  rn the minimum n
bea0: 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66  on-NULL value of
beb0: 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
bec0: 68 65 20 67 72 6f 75 70 2e 0a 54 68 65 20 75 73  he group..The us
bed0: 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20 69  ual sort order i
bee0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
bef0: 69 6e 65 20 74 68 65 20 6d 69 6e 69 6d 75 6d 2e  ine the minimum.
bf00: 20 20 4e 55 4c 4c 20 69 73 20 6f 6e 6c 79 20 72    NULL is only r
bf10: 65 74 75 72 6e 65 64 0a 69 66 20 61 6c 6c 20 76  eturned.if all v
bf20: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
bf30: 75 70 20 61 72 65 20 4e 55 4c 4c 2e 3c 2f 74 64  up are NULL.</td
bf40: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
bf50: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
bf60: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 75 6d  lign="right">sum
bf70: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
bf80: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
bf90: 3e 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65  >Return the nume
bfa0: 72 69 63 20 73 75 6d 20 6f 66 20 61 6c 6c 20 76  ric sum of all v
bfb0: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
bfc0: 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  up.</td>.</tr>.<
bfd0: 2f 74 61 62 6c 65 3e 0a 7d 0a 0a 0a 53 65 63 74  /table>.}...Sect
bfe0: 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72  ion INSERT inser
bff0: 74 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  t..Syntax {sql-s
c000: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 49 4e 53 45  tatement} {.INSE
c010: 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63 74  RT [OR <conflict
c020: 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49 4e 54  -algorithm>] INT
c030: 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  O [<database-nam
c040: 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d  e> .] <table-nam
c050: 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  e> [(<column-lis
c060: 74 3e 29 5d 20 56 41 4c 55 45 53 28 3c 76 61 6c  t>)] VALUES(<val
c070: 75 65 2d 6c 69 73 74 3e 29 20 7c 0a 49 4e 53 45  ue-list>) |.INSE
c080: 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63 74  RT [OR <conflict
c090: 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49 4e 54  -algorithm>] INT
c0a0: 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  O [<database-nam
c0b0: 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d  e> .] <table-nam
c0c0: 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  e> [(<column-lis
c0d0: 74 3e 29 5d 20 3c 73 65 6c 65 63 74 2d 73 74 61  t>)] <select-sta
c0e0: 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20  tement>.}..puts 
c0f0: 7b 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20  {.<p>The INSERT 
c100: 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20  statement comes 
c110: 69 6e 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72  in two basic for
c120: 6d 73 2e 20 20 54 68 65 20 66 69 72 73 74 20 66  ms.  The first f
c130: 6f 72 6d 0a 28 77 69 74 68 20 74 68 65 20 22 56  orm.(with the "V
c140: 41 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20  ALUES" keyword) 
c150: 63 72 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65  creates a single
c160: 20 6e 65 77 20 72 6f 77 20 69 6e 20 61 6e 20 65   new row in an e
c170: 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 49  xisting table..I
c180: 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
c190: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68   is specified th
c1a0: 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
c1b0: 20 76 61 6c 75 65 73 20 6d 75 73 74 0a 62 65 20   values must.be 
c1c0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
c1d0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
c1e0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
c1f0: 20 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73   If a column-lis
c200: 74 0a 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t.is specified, 
c210: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
c220: 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74 20 6d  of values must m
c230: 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20  atch the number 
c240: 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c  of.specified col
c250: 75 6d 6e 73 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f  umns.  Columns o
c260: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
c270: 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
c280: 6e 20 74 68 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73  n the.column lis
c290: 74 20 61 72 65 20 66 69 6c 6c 65 64 20 77 69 74  t are filled wit
c2a0: 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  h the default va
c2b0: 6c 75 65 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c  lue, or with NUL
c2c0: 4c 20 69 66 20 6e 6f 74 0a 64 65 66 61 75 6c 74  L if not.default
c2d0: 20 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66   value is specif
c2e0: 69 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ied..</p>..<p>Th
c2f0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
c300: 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
c310: 65 6d 65 6e 74 20 74 61 6b 65 73 20 69 74 20 64  ement takes it d
c320: 61 74 61 20 66 72 6f 6d 20 61 0a 53 45 4c 45 43  ata from a.SELEC
c330: 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
c340: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
c350: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
c360: 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54 20  t of the.SELECT 
c370: 6d 75 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74  must exactly mat
c380: 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
c390: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
c3a0: 74 61 62 6c 65 20 69 66 0a 6e 6f 20 63 6f 6c 75  table if.no colu
c3b0: 6d 6e 20 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn list is speci
c3c0: 66 69 65 64 2c 20 6f 72 20 69 74 20 6d 75 73 74  fied, or it must
c3d0: 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
c3e0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d  r of columns.nam
c3f0: 65 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e in the column 
c400: 6c 69 73 74 2e 20 20 41 20 6e 65 77 20 65 6e 74  list.  A new ent
c410: 72 79 20 69 73 20 6d 61 64 65 20 69 6e 20 74 68  ry is made in th
c420: 65 20 74 61 62 6c 65 0a 66 6f 72 20 65 76 65 72  e table.for ever
c430: 79 20 72 6f 77 20 6f 66 20 74 68 65 20 53 45 4c  y row of the SEL
c440: 45 43 54 20 72 65 73 75 6c 74 2e 20 20 54 68 65  ECT result.  The
c450: 20 53 45 4c 45 43 54 20 6d 61 79 20 62 65 20 73   SELECT may be s
c460: 69 6d 70 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e  imple.or compoun
c470: 64 2e 20 20 49 66 20 74 68 65 20 53 45 4c 45 43  d.  If the SELEC
c480: 54 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  T statement has 
c490: 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
c4a0: 73 65 2c 0a 74 68 65 20 4f 52 44 45 52 20 42 59  se,.the ORDER BY
c4b0: 20 69 73 20 69 67 6e 6f 72 65 64 2e 3c 2f 70 3e   is ignored.</p>
c4c0: 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
c4d0: 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73  l conflict-claus
c4e0: 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65  e allows the spe
c4f0: 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e  cification of an
c500: 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e   alternative.con
c510: 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
c520: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
c530: 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
c540: 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d  ing this one com
c550: 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65  mand..See the se
c560: 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20  ction titled.<a 
c570: 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22  href="#conflict"
c580: 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e  >ON CONFLICT</a>
c590: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
c5a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72  information..For
c5b0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
c5c0: 69 74 68 20 4d 79 53 51 4c 2c 20 74 68 65 20 70  ith MySQL, the p
c5d0: 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68 65  arser allows the
c5e0: 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e 67   use of the.sing
c5f0: 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68 72  le keyword <a hr
c600: 65 66 3d 22 23 72 65 70 6c 61 63 65 22 3e 52 45  ef="#replace">RE
c610: 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
c620: 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52  alias for "INSER
c630: 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 3c  T OR REPLACE"..<
c640: 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20  /p>.}...Section 
c650: 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
c660: 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 0a 0a 53  use} conflict..S
c670: 79 6e 74 61 78 20 7b 63 6f 6e 66 6c 69 63 74 2d  yntax {conflict-
c680: 63 6c 61 75 73 65 7d 20 7b 0a 4f 4e 20 43 4f 4e  clause} {.ON CON
c690: 46 4c 49 43 54 20 3c 63 6f 6e 66 6c 69 63 74 2d  FLICT <conflict-
c6a0: 61 6c 67 6f 72 69 74 68 6d 3e 0a 7d 20 7b 63 6f  algorithm>.} {co
c6b0: 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d  nflict-algorithm
c6c0: 7d 20 7b 0a 52 4f 4c 4c 42 41 43 4b 20 7c 20 41  } {.ROLLBACK | A
c6d0: 42 4f 52 54 20 7c 20 46 41 49 4c 20 7c 20 49 47  BORT | FAIL | IG
c6e0: 4e 4f 52 45 20 7c 20 52 45 50 4c 41 43 45 0a 7d  NORE | REPLACE.}
c6f0: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
c700: 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
c710: 73 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61  se is not a sepa
c720: 72 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  rate SQL command
c730: 2e 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73  .  It is a.non-s
c740: 74 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74  tandard clause t
c750: 68 61 74 20 63 61 6e 20 61 70 70 65 61 72 20 69  hat can appear i
c760: 6e 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c  n many other SQL
c770: 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73   commands..It is
c780: 20 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73   given its own s
c790: 65 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64  ection in this d
c7a0: 6f 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20  ocument because 
c7b0: 69 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f  it is not.part o
c7c0: 66 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61  f standard SQL a
c7d0: 6e 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67  nd therefore mig
c7e0: 68 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69  ht not be famili
c7f0: 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ar.</p>..<p>The 
c800: 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f  syntax for the O
c810: 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
c820: 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62  e is as shown ab
c830: 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41  ove for.the CREA
c840: 54 45 20 54 41 42 4c 45 20 61 6e 64 20 43 52 45  TE TABLE and CRE
c850: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
c860: 64 73 2e 20 20 46 6f 72 20 74 68 65 20 43 4f 50  ds.  For the COP
c870: 59 2c 20 49 4e 53 45 52 54 2c 20 61 6e 64 0a 55  Y, INSERT, and.U
c880: 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20  PDATE commands, 
c890: 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e  the keywords "ON
c8a0: 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72   CONFLICT" are r
c8b0: 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 2c  eplaced by "OR",
c8c0: 20 74 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79 6e   to make.the syn
c8d0: 74 61 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e 61  tax seem more na
c8e0: 74 75 72 61 6c 2e 20 20 42 75 74 20 74 68 65 20  tural.  But the 
c8f0: 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63  meaning of the c
c900: 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
c910: 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70  e.either way.</p
c920: 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
c930: 46 4c 49 43 54 20 63 6c 61 75 73 65 20 73 70 65  FLICT clause spe
c940: 63 69 66 69 65 73 20 61 6e 20 61 6c 67 6f 72 69  cifies an algori
c950: 74 68 6d 20 75 73 65 64 20 74 6f 20 72 65 73 6f  thm used to reso
c960: 6c 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  lve.constraint c
c970: 6f 6e 66 6c 69 63 74 73 2e 20 20 54 68 65 72 65  onflicts.  There
c980: 20 61 72 65 20 66 69 76 65 20 63 68 6f 69 63 65   are five choice
c990: 73 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f  s: ROLLBACK, ABO
c9a0: 52 54 2c 0a 46 41 49 4c 2c 20 49 47 4e 4f 52 45  RT,.FAIL, IGNORE
c9b0: 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 20 54  , and REPLACE. T
c9c0: 68 65 20 64 65 66 61 75 6c 74 20 61 6c 67 6f 72  he default algor
c9d0: 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20  ithm is ABORT.  
c9e0: 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65  This.is what the
c9f0: 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c  y mean:</p>..<dl
ca00: 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43  >.<dt><b>ROLLBAC
ca10: 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  K</b></dt>.<dd><
ca20: 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  p>When a constra
ca30: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
ca40: 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65 64 69 61  curs, an immedia
ca50: 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f 63 63 75  te ROLLBACK.occu
ca60: 72 73 2c 20 74 68 75 73 20 65 6e 64 69 6e 67 20  rs, thus ending 
ca70: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
ca80: 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65  saction, and the
ca90: 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 0a   command aborts.
caa0: 77 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f  with a return co
cab0: 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e  de of SQLITE_CON
cac0: 53 54 52 41 49 4e 54 2e 20 20 49 66 20 6e 6f 20  STRAINT.  If no 
cad0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61  transaction is.a
cae0: 63 74 69 76 65 20 28 6f 74 68 65 72 20 74 68 61  ctive (other tha
caf0: 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72  n the implied tr
cb00: 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69  ansaction that i
cb10: 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65  s created on eve
cb20: 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e  ry.command) then
cb30: 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20   this algorithm 
cb40: 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
cb50: 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c 2f 64 64  s ABORT.</p></dd
cb60: 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c  >..<dt><b>ABORT<
cb70: 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
cb80: 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e  When a constrain
cb90: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
cba0: 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  rs, the command 
cbb0: 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79 20 70 72  backs out.any pr
cbc0: 69 6f 72 20 63 68 61 6e 67 65 73 20 69 74 20 6d  ior changes it m
cbd0: 69 67 68 74 20 68 61 76 65 20 6d 61 64 65 20 61  ight have made a
cbe0: 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61  nd aborts with a
cbf0: 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 6f 66 20   return code.of 
cc00: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
cc10: 54 2e 20 20 42 75 74 20 6e 6f 20 52 4f 4c 4c 42  T.  But no ROLLB
cc20: 41 43 4b 20 69 73 20 65 78 65 63 75 74 65 64 20  ACK is executed 
cc30: 73 6f 20 63 68 61 6e 67 65 73 0a 66 72 6f 6d 20  so changes.from 
cc40: 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64 73 20 77  prior commands w
cc50: 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74  ithin the same t
cc60: 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72 65 20 70  ransaction.are p
cc70: 72 65 73 65 72 76 65 64 2e 20 20 54 68 69 73 20  reserved.  This 
cc80: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
cc90: 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c 2f 64 64  ehavior.</p></dd
cca0: 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f  >..<dt><b>FAIL</
ccb0: 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57  b></dt>.<dd><p>W
ccc0: 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hen a constraint
ccd0: 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
cce0: 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61  s, the command a
ccf0: 62 6f 72 74 73 20 77 69 74 68 20 61 0a 72 65 74  borts with a.ret
cd00: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
cd10: 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42 75 74  CONSTRAINT.  But
cd20: 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20   any changes to 
cd30: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61  the database tha
cd40: 74 0a 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6d 61  t.the command ma
cd50: 64 65 20 70 72 69 6f 72 20 74 6f 20 65 6e 63 6f  de prior to enco
cd60: 75 6e 74 65 72 69 6e 67 20 74 68 65 20 63 6f 6e  untering the con
cd70: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
cd80: 6e 0a 61 72 65 20 70 72 65 73 65 72 76 65 64 20  n.are preserved 
cd90: 61 6e 64 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  and are not back
cda0: 65 64 20 6f 75 74 2e 20 20 46 6f 72 20 65 78 61  ed out.  For exa
cdb0: 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41  mple, if an UPDA
cdc0: 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63  TE.statement enc
cdd0: 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74  ountered a const
cde0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
cdf0: 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77  on the 100th row
ce00: 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74   that.it attempt
ce10: 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65  s to update, the
ce20: 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72  n the first 99 r
ce30: 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70  ow changes are p
ce40: 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61  reserved.but cha
ce50: 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30  nges to rows 100
ce60: 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65   and beyond neve
ce70: 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64  r occur.</p></dd
ce80: 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45  >..<dt><b>IGNORE
ce90: 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
cea0: 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  >When a constrai
ceb0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
cec0: 75 72 73 2c 20 74 68 65 20 6f 6e 65 20 72 6f 77  urs, the one row
ced0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74   that contains.t
cee0: 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
cef0: 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 69  olation is not i
cf00: 6e 73 65 72 74 65 64 20 6f 72 20 63 68 61 6e 67  nserted or chang
cf10: 65 64 2e 20 20 42 75 74 20 74 68 65 20 63 6f 6d  ed.  But the com
cf20: 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65 73 20 65  mand.continues e
cf30: 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c  xecuting normall
cf40: 79 2e 20 20 4f 74 68 65 72 20 72 6f 77 73 20 62  y.  Other rows b
cf50: 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20  efore and after 
cf60: 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e  the row that.con
cf70: 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74  tained the const
cf80: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
cf90: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 69  continue to be i
cfa0: 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
cfb0: 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f  ed.normally.  No
cfc0: 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
cfd0: 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ed.</p></dd>..<d
cfe0: 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e  t><b>REPLACE</b>
cff0: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65  </dt>.<dd><p>Whe
d000: 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  n a UNIQUE const
d010: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
d020: 6f 63 63 75 72 73 2c 20 74 68 65 20 70 72 65 2d  occurs, the pre-
d030: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 0a 74 68  existing rows.th
d040: 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74  at are causing t
d050: 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
d060: 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
d070: 76 65 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 73  ved prior to ins
d080: 65 72 74 69 6e 67 0a 6f 72 20 75 70 64 61 74 69  erting.or updati
d090: 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ng the current r
d0a0: 6f 77 2e 20 20 54 68 75 73 20 74 68 65 20 69 6e  ow.  Thus the in
d0b0: 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 20 61  sert or update a
d0c0: 6c 77 61 79 73 20 6f 63 63 75 72 73 2e 0a 54 68  lways occurs..Th
d0d0: 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e  e command contin
d0e0: 75 65 73 20 65 78 65 63 75 74 69 6e 67 20 6e 6f  ues executing no
d0f0: 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72 6f  rmally.  No erro
d100: 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 49  r is returned..I
d110: 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  f a NOT NULL con
d120: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
d130: 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 4e 55  n occurs, the NU
d140: 4c 4c 20 76 61 6c 75 65 20 69 73 20 72 65 70 6c  LL value is repl
d150: 61 63 65 64 0a 62 79 20 74 68 65 20 64 65 66 61  aced.by the defa
d160: 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
d170: 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  at column.  If t
d180: 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f  he column has no
d190: 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20   default.value, 
d1a0: 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61  then the ABORT a
d1b0: 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
d1c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74  .</p>..<p>When t
d1d0: 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  his conflict res
d1e0: 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
d1f0: 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e   deletes rows in
d200: 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66   order to.satisf
d210: 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  y a constraint, 
d220: 69 74 20 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f  it does not invo
d230: 6b 65 20 64 65 6c 65 74 65 20 74 72 69 67 67 65  ke delete trigge
d240: 72 73 20 6f 6e 20 74 68 6f 73 65 0a 72 6f 77 73  rs on those.rows
d250: 2e 20 20 42 75 74 20 74 68 61 74 20 6d 61 79 20  .  But that may 
d260: 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74 75  change in a futu
d270: 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a  re release.</p>.
d280: 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c  </dl>..<p>The al
d290: 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65  gorithm specifie
d2a0: 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75  d in the OR clau
d2b0: 73 65 20 6f 66 20 61 20 43 4f 50 59 2c 20 49 4e  se of a COPY, IN
d2c0: 53 45 52 54 2c 20 6f 72 20 55 50 44 41 54 45 0a  SERT, or UPDATE.
d2d0: 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c  overrides any al
d2e0: 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65  gorithm specifie
d2f0: 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54 41  d in a CREATE TA
d300: 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
d310: 44 45 58 2e 0a 49 66 20 6e 6f 20 61 6c 67 6f 72  DEX..If no algor
d320: 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
d330: 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20  d anywhere, the 
d340: 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
d350: 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 7d 0a 23  is used.</p>.}.#
d360: 20 3c 70 3e 46 6f 72 20 61 64 64 69 74 69 6f 6e   <p>For addition
d370: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  al information, 
d380: 73 65 65 20 0a 23 20 3c 61 20 68 72 65 66 3d 22  see .# <a href="
d390: 63 6f 6e 66 6c 69 63 74 2e 68 74 6d 6c 22 3e 63  conflict.html">c
d3a0: 6f 6e 66 6c 69 63 74 2e 68 74 6d 6c 3c 2f 61 3e  onflict.html</a>
d3b0: 2e 3c 2f 70 3e 0a 0a 53 65 63 74 69 6f 6e 20 52  .</p>..Section R
d3c0: 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 0a 0a  EINDEX reindex..
d3d0: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
d3e0: 65 6d 65 6e 74 7d 20 7b 0a 20 20 52 45 49 4e 44  ement} {.  REIND
d3f0: 45 58 20 3c 63 6f 6c 6c 61 74 69 6f 6e 20 6e 61  EX <collation na
d400: 6d 65 3e 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71  me>.}.Syntax {sq
d410: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 20  l-statement} {. 
d420: 20 52 45 49 4e 44 45 58 20 5b 3c 64 61 74 61 62   REINDEX [<datab
d430: 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61  ase-name> .] <ta
d440: 62 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3e 0a  ble/index-name>.
d450: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
d460: 20 52 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64   REINDEX command
d470: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65   is used to dele
d480: 74 65 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  te and recreate 
d490: 69 6e 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72  indices from scr
d4a0: 61 74 63 68 2e 0a 54 68 69 73 20 69 73 20 70 72  atch..This is pr
d4b0: 69 6d 61 72 69 6c 79 20 75 73 65 66 75 6c 20 77  imarily useful w
d4c0: 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69  hen the definiti
d4d0: 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f  on of a collatio
d4e0: 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 0a  n sequence has .
d4f0: 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  changed..</p>..<
d500: 70 3e 49 6e 20 74 68 65 20 66 69 72 73 74 20 66  p>In the first f
d510: 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73  orm, all indices
d520: 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   in all attached
d530: 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20   databases that 
d540: 75 73 65 20 74 68 65 0a 6e 61 6d 65 64 20 63 6f  use the.named co
d550: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
d560: 20 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20   are recreated. 
d570: 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f  In the second fo
d580: 72 6d 2c 20 69 66 20 0a 3c 69 3e 5b 64 61 74 61  rm, if .<i>[data
d590: 62 61 73 65 2d 6e 61 6d 65 2e 5d 74 61 62 6c 65  base-name.]table
d5a0: 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e 20  /index-name</i> 
d5b0: 69 64 65 6e 74 69 66 69 65 73 20 61 20 74 61 62  identifies a tab
d5c0: 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  le, then all ind
d5d0: 69 63 65 73 0a 61 73 73 6f 63 69 61 74 65 64 20  ices.associated 
d5e0: 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 61  with the table a
d5f0: 72 65 20 72 65 62 75 69 6c 74 2e 20 49 66 20 61  re rebuilt. If a
d600: 6e 20 69 6e 64 65 78 20 69 73 20 69 64 65 6e 74  n index is ident
d610: 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79  ified, then only
d620: 0a 74 68 69 73 20 73 70 65 63 69 66 69 63 20 69  .this specific i
d630: 6e 64 65 78 20 69 73 20 64 65 6c 65 74 65 64 20  ndex is deleted 
d640: 61 6e 64 20 72 65 63 72 65 61 74 65 64 2e 0a 3c  and recreated..<
d650: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6e 6f 20 3c 69  /p>..<p>If no <i
d660: 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
d670: 69 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 20  i> is specified 
d680: 61 6e 64 20 74 68 65 72 65 20 65 78 69 73 74 73  and there exists
d690: 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72   both a table or
d6a0: 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c  .index and a col
d6b0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
d6c0: 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  of the specified
d6d0: 20 6e 61 6d 65 2c 20 74 68 65 6e 20 69 6e 64 69   name, then indi
d6e0: 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 0a 77  ces associated.w
d6f0: 69 74 68 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  ith the collatio
d700: 6e 20 73 65 71 75 65 6e 63 65 20 6f 6e 6c 79 20  n sequence only 
d710: 61 72 65 20 72 65 63 6f 6e 73 74 72 75 63 74 65  are reconstructe
d720: 64 2e 20 54 68 69 73 20 61 6d 62 69 67 75 69 74  d. This ambiguit
d730: 79 20 6d 61 79 20 62 65 0a 64 69 73 70 65 6c 6c  y may be.dispell
d740: 65 64 20 62 79 20 61 6c 77 61 79 73 20 73 70 65  ed by always spe
d750: 63 69 66 79 69 6e 67 20 61 20 3c 69 3e 64 61 74  cifying a <i>dat
d760: 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77  abase-name</i> w
d770: 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20 61  hen reindexing a
d780: 0a 73 70 65 63 69 66 69 63 20 74 61 62 6c 65 20  .specific table 
d790: 6f 72 20 69 6e 64 65 78 2e 0a 7d 0a 0a 53 65 63  or index..}..Sec
d7a0: 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70  tion REPLACE rep
d7b0: 6c 61 63 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71  lace..Syntax {sq
d7c0: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 52  l-statement} {.R
d7d0: 45 50 4c 41 43 45 20 49 4e 54 4f 20 5b 3c 64 61  EPLACE INTO [<da
d7e0: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
d7f0: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20  <table-name> [( 
d800: 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d  <column-list> )]
d810: 20 56 41 4c 55 45 53 20 28 20 3c 76 61 6c 75 65   VALUES ( <value
d820: 2d 6c 69 73 74 3e 20 29 20 7c 0a 52 45 50 4c 41  -list> ) |.REPLA
d830: 43 45 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61  CE INTO [<databa
d840: 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62  se-name> .] <tab
d850: 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c  le-name> [( <col
d860: 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d 20 3c 73 65  umn-list> )] <se
d870: 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e 0a  lect-statement>.
d880: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
d890: 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64   REPLACE command
d8a0: 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   is an alias for
d8b0: 20 74 68 65 20 22 49 4e 53 45 52 54 20 4f 52 20   the "INSERT OR 
d8c0: 52 45 50 4c 41 43 45 22 20 76 61 72 69 61 6e 74  REPLACE" variant
d8d0: 0a 6f 66 20 74 68 65 20 3c 61 20 68 72 65 66 3d  .of the <a href=
d8e0: 22 23 69 6e 73 65 72 74 22 3e 49 4e 53 45 52 54  "#insert">INSERT
d8f0: 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 2e 20 20 54  </a> command.  T
d900: 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
d910: 76 69 64 65 64 20 66 6f 72 0a 63 6f 6d 70 61 74  vided for.compat
d920: 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53  ibility with MyS
d930: 51 4c 2e 20 20 53 65 65 20 74 68 65 20 0a 3c 61  QL.  See the .<a
d940: 20 68 72 65 66 3d 22 23 69 6e 73 65 72 74 22 3e   href="#insert">
d950: 49 4e 53 45 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61  INSERT</a> comma
d960: 6e 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  nd documentation
d970: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
d980: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
d990: 20 20 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 53    .}...Section S
d9a0: 45 4c 45 43 54 20 73 65 6c 65 63 74 0a 0a 53 79  ELECT select..Sy
d9b0: 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
d9c0: 65 6e 74 7d 20 7b 0a 53 45 4c 45 43 54 20 5b 41  ent} {.SELECT [A
d9d0: 4c 4c 20 7c 20 44 49 53 54 49 4e 43 54 5d 20 3c  LL | DISTINCT] <
d9e0: 72 65 73 75 6c 74 3e 20 5b 46 52 4f 4d 20 3c 74  result> [FROM <t
d9f0: 61 62 6c 65 2d 6c 69 73 74 3e 5d 0a 5b 57 48 45  able-list>].[WHE
da00: 52 45 20 3c 65 78 70 72 3e 5d 0a 5b 47 52 4f 55  RE <expr>].[GROU
da10: 50 20 42 59 20 3c 65 78 70 72 2d 6c 69 73 74 3e  P BY <expr-list>
da20: 5d 0a 5b 48 41 56 49 4e 47 20 3c 65 78 70 72 3e  ].[HAVING <expr>
da30: 5d 0a 5b 3c 63 6f 6d 70 6f 75 6e 64 2d 6f 70 3e  ].[<compound-op>
da40: 20 3c 73 65 6c 65 63 74 3e 5d 2a 0a 5b 4f 52 44   <select>]*.[ORD
da50: 45 52 20 42 59 20 3c 73 6f 72 74 2d 65 78 70 72  ER BY <sort-expr
da60: 2d 6c 69 73 74 3e 5d 0a 5b 4c 49 4d 49 54 20 3c  -list>].[LIMIT <
da70: 69 6e 74 65 67 65 72 3e 20 5b 4c 50 20 4f 46 46  integer> [LP OFF
da80: 53 45 54 20 7c 20 2c 20 52 50 20 3c 69 6e 74 65  SET | , RP <inte
da90: 67 65 72 3e 5d 5d 0a 7d 20 7b 72 65 73 75 6c 74  ger>]].} {result
daa0: 7d 20 7b 0a 3c 72 65 73 75 6c 74 2d 63 6f 6c 75  } {.<result-colu
dab0: 6d 6e 3e 20 5b 2c 20 3c 72 65 73 75 6c 74 2d 63  mn> [, <result-c
dac0: 6f 6c 75 6d 6e 3e 5d 2a 0a 7d 20 7b 72 65 73 75  olumn>]*.} {resu
dad0: 6c 74 2d 63 6f 6c 75 6d 6e 7d 20 7b 0a 53 54 41  lt-column} {.STA
dae0: 52 20 7c 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  R | <table-name>
daf0: 20 2e 20 53 54 41 52 20 7c 20 3c 65 78 70 72 3e   . STAR | <expr>
db00: 20 5b 20 5b 41 53 5d 20 3c 73 74 72 69 6e 67 3e   [ [AS] <string>
db10: 20 5d 0a 7d 20 7b 74 61 62 6c 65 2d 6c 69 73 74   ].} {table-list
db20: 7d 20 7b 0a 3c 74 61 62 6c 65 3e 20 5b 3c 6a 6f  } {.<table> [<jo
db30: 69 6e 2d 6f 70 3e 20 3c 74 61 62 6c 65 3e 20 3c  in-op> <table> <
db40: 6a 6f 69 6e 2d 61 72 67 73 3e 5d 2a 0a 7d 20 7b  join-args>]*.} {
db50: 74 61 62 6c 65 7d 20 7b 0a 3c 74 61 62 6c 65 2d  table} {.<table-
db60: 6e 61 6d 65 3e 20 5b 41 53 20 3c 61 6c 69 61 73  name> [AS <alias
db70: 3e 5d 20 7c 0a 28 20 3c 73 65 6c 65 63 74 3e 20  >] |.( <select> 
db80: 29 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 0a 7d  ) [AS <alias>].}
db90: 20 7b 6a 6f 69 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c   {join-op} {., |
dba0: 20 5b 4e 41 54 55 52 41 4c 5d 20 5b 4c 45 46 54   [NATURAL] [LEFT
dbb0: 20 7c 20 52 49 47 48 54 20 7c 20 46 55 4c 4c 5d   | RIGHT | FULL]
dbc0: 20 5b 4f 55 54 45 52 20 7c 20 49 4e 4e 45 52 20   [OUTER | INNER 
dbd0: 7c 20 43 52 4f 53 53 5d 20 4a 4f 49 4e 0a 7d 20  | CROSS] JOIN.} 
dbe0: 7b 6a 6f 69 6e 2d 61 72 67 73 7d 20 7b 0a 5b 4f  {join-args} {.[O
dbf0: 4e 20 3c 65 78 70 72 3e 5d 20 5b 55 53 49 4e 47  N <expr>] [USING
dc00: 20 28 20 3c 69 64 2d 6c 69 73 74 3e 20 29 5d 0a   ( <id-list> )].
dc10: 7d 20 7b 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73  } {sort-expr-lis
dc20: 74 7d 20 7b 0a 3c 65 78 70 72 3e 20 5b 3c 73 6f  t} {.<expr> [<so
dc30: 72 74 2d 6f 72 64 65 72 3e 5d 20 5b 2c 20 3c 65  rt-order>] [, <e
dc40: 78 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f 72 64 65  xpr> [<sort-orde
dc50: 72 3e 5d 5d 2a 0a 7d 20 7b 73 6f 72 74 2d 6f 72  r>]]*.} {sort-or
dc60: 64 65 72 7d 20 7b 0a 5b 20 43 4f 4c 4c 41 54 45  der} {.[ COLLATE
dc70: 20 3c 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65   <collation-name
dc80: 3e 20 5d 20 5b 20 41 53 43 20 7c 20 44 45 53 43  > ] [ ASC | DESC
dc90: 20 5d 0a 7d 20 7b 63 6f 6d 70 6f 75 6e 64 5f 6f   ].} {compound_o
dca0: 70 7d 20 7b 0a 55 4e 49 4f 4e 20 7c 20 55 4e 49  p} {.UNION | UNI
dcb0: 4f 4e 20 41 4c 4c 20 7c 20 49 4e 54 45 52 53 45  ON ALL | INTERSE
dcc0: 43 54 20 7c 20 45 58 43 45 50 54 0a 7d 0a 0a 70  CT | EXCEPT.}..p
dcd0: 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 53 45 4c  uts {.<p>The SEL
dce0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ECT statement is
dcf0: 20 75 73 65 64 20 74 6f 20 71 75 65 72 79 20 74   used to query t
dd00: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
dd10: 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45  e.result of a SE
dd20: 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20  LECT is zero or 
dd30: 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74  more rows of dat
dd40: 61 20 77 68 65 72 65 20 65 61 63 68 20 72 6f 77  a where each row
dd50: 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d  .has a fixed num
dd60: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20  ber of columns. 
dd70: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   The number of c
dd80: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 72 65  olumns in the.re
dd90: 73 75 6c 74 20 69 73 20 73 70 65 63 69 66 69 65  sult is specifie
dda0: 64 20 62 79 20 74 68 65 20 65 78 70 72 65 73 73  d by the express
ddb0: 69 6f 6e 20 6c 69 73 74 20 69 6e 20 62 65 74 77  ion list in betw
ddc0: 65 65 6e 20 74 68 65 0a 53 45 4c 45 43 54 20 61  een the.SELECT a
ddd0: 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73  nd FROM keywords
dde0: 2e 20 20 41 6e 79 20 61 72 62 69 74 72 61 72 79  .  Any arbitrary
ddf0: 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20   expression can 
de00: 62 65 20 75 73 65 64 0a 61 73 20 61 20 72 65 73  be used.as a res
de10: 75 6c 74 2e 20 20 49 66 20 61 20 72 65 73 75 6c  ult.  If a resul
de20: 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
de30: 7d 0a 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f  }.puts "[Operato
de40: 72 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f  r *] then all co
de50: 6c 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62  lumns of all tab
de60: 6c 65 73 20 61 72 65 20 73 75 62 73 74 69 74 75  les are substitu
de70: 74 65 64 22 0a 70 75 74 73 20 7b 66 6f 72 20 74  ted".puts {for t
de80: 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69  hat one expressi
de90: 6f 6e 2e 20 20 49 66 20 74 68 65 20 65 78 70 72  on.  If the expr
dea0: 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20 6e 61  ession is the na
deb0: 6d 65 20 6f 66 7d 0a 70 75 74 73 20 22 61 20 74  me of}.puts "a t
dec0: 61 62 6c 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  able followed by
ded0: 20 5b 4f 70 65 72 61 74 6f 72 20 2e 2a 5d 20 74   [Operator .*] t
dee0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
def0: 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 22 0a 70  s all columns".p
df00: 75 74 73 20 7b 69 6e 20 74 68 61 74 20 6f 6e 65  uts {in that one
df10: 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   table.</p>..<p>
df20: 54 68 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79  The DISTINCT key
df30: 77 6f 72 64 20 63 61 75 73 65 73 20 61 20 73 75  word causes a su
df40: 62 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72  bset of result r
df50: 6f 77 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e  ows to be return
df60: 65 64 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61  ed, .in which ea
df70: 63 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  ch result row is
df80: 20 64 69 66 66 65 72 65 6e 74 2e 20 20 4e 55 4c   different.  NUL
df90: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74  L values are not
dfa0: 20 74 72 65 61 74 65 64 20 61 73 20 0a 64 69 73   treated as .dis
dfb0: 74 69 6e 63 74 20 66 72 6f 6d 20 65 61 63 68 20  tinct from each 
dfc0: 6f 74 68 65 72 2e 20 20 54 68 65 20 64 65 66 61  other.  The defa
dfd0: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
dfe0: 74 68 61 74 20 61 6c 6c 20 72 65 73 75 6c 74 20  that all result 
dff0: 72 6f 77 73 20 0a 62 65 20 72 65 74 75 72 6e 65  rows .be returne
e000: 64 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20  d, which can be 
e010: 6d 61 64 65 20 65 78 70 6c 69 63 69 74 20 77 69  made explicit wi
e020: 74 68 20 74 68 65 20 6b 65 79 77 6f 72 64 20 41  th the keyword A
e030: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  LL.</p>..<p>The 
e040: 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
e050: 64 20 61 67 61 69 6e 73 74 20 6f 6e 65 20 6f 72  d against one or
e060: 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 73 70 65   more tables spe
e070: 63 69 66 69 65 64 20 61 66 74 65 72 0a 74 68 65  cified after.the
e080: 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 20   FROM keyword.  
e090: 49 66 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c  If multiple tabl
e0a0: 65 73 20 6e 61 6d 65 73 20 61 72 65 20 73 65 70  es names are sep
e0b0: 61 72 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73  arated by commas
e0c0: 2c 0a 74 68 65 6e 20 74 68 65 20 71 75 65 72 79  ,.then the query
e0d0: 20 69 73 20 61 67 61 69 6e 73 74 20 74 68 65 20   is against the 
e0e0: 63 72 6f 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68  cross join of th
e0f0: 65 20 76 61 72 69 6f 75 73 20 74 61 62 6c 65 73  e various tables
e100: 2e 0a 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39  ..The full SQL-9
e110: 32 20 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61  2 join syntax ca
e120: 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
e130: 6f 20 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e  o specify joins.
e140: 0a 41 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20  .A sub-query.in 
e150: 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
e160: 62 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66  be substituted f
e170: 6f 72 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d  or any table nam
e180: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
e190: 61 75 73 65 2e 0a 54 68 65 20 65 6e 74 69 72 65  ause..The entire
e1a0: 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61 79   FROM clause may
e1b0: 20 62 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e 20   be omitted, in 
e1c0: 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 72  which case the r
e1d0: 65 73 75 6c 74 20 69 73 20 61 0a 73 69 6e 67 6c  esult is a.singl
e1e0: 65 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67  e row consisting
e1f0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f   of the values o
e200: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
e210: 20 6c 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   list..</p>..<p>
e220: 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
e230: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
e240: 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
e250: 20 6f 66 20 72 6f 77 73 20 6f 76 65 72 0a 77 68   of rows over.wh
e260: 69 63 68 20 74 68 65 20 71 75 65 72 79 20 6f 70  ich the query op
e270: 65 72 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  erates.</p>..<p>
e280: 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
e290: 75 73 65 73 20 63 61 75 73 65 73 20 6f 6e 65 20  uses causes one 
e2a0: 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
e2b0: 74 68 65 20 72 65 73 75 6c 74 20 74 6f 0a 62 65  the result to.be
e2c0: 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61   combined into a
e2d0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f   single row of o
e2e0: 75 74 70 75 74 2e 20 20 54 68 69 73 20 69 73 20  utput.  This is 
e2f0: 65 73 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75  especially usefu
e300: 6c 0a 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c  l.when the resul
e310: 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  t contains aggre
e320: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20  gate functions. 
e330: 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   The expressions
e340: 20 69 6e 0a 74 68 65 20 47 52 4f 55 50 20 42 59   in.the GROUP BY
e350: 20 63 6c 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e   clause do <em>n
e360: 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20  ot</em> have to 
e370: 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  be expressions t
e380: 68 61 74 0a 61 70 70 65 61 72 20 69 6e 20 74 68  hat.appear in th
e390: 65 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20 48  e result.  The H
e3a0: 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
e3b0: 73 69 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45  similar to WHERE
e3c0: 20 65 78 63 65 70 74 0a 74 68 61 74 20 48 41 56   except.that HAV
e3d0: 49 4e 47 20 61 70 70 6c 69 65 73 20 61 66 74 65  ING applies afte
e3e0: 72 20 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f  r grouping has o
e3f0: 63 63 75 72 72 65 64 2e 20 20 54 68 65 20 48 41  ccurred.  The HA
e400: 56 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a  VING expression.
e410: 6d 61 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c  may refer to val
e420: 75 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67  ues, even aggreg
e430: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74  ate functions, t
e440: 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74  hat are not in t
e450: 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a  he result.</p>..
e460: 3c 70 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20  <p>The ORDER BY 
e470: 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68  clause causes th
e480: 65 20 6f 75 74 70 75 74 20 72 6f 77 73 20 74 6f  e output rows to
e490: 20 62 65 20 73 6f 72 74 65 64 2e 20 20 0a 54 68   be sorted.  .Th
e4a0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 4f 52  e argument to OR
e4b0: 44 45 52 20 42 59 20 69 73 20 61 20 6c 69 73 74  DER BY is a list
e4c0: 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
e4d0: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
e4e0: 20 74 68 65 0a 6b 65 79 20 66 6f 72 20 74 68 65   the.key for the
e4f0: 20 73 6f 72 74 2e 20 20 54 68 65 20 65 78 70 72   sort.  The expr
e500: 65 73 73 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 68  essions do not h
e510: 61 76 65 20 74 6f 20 62 65 20 70 61 72 74 20 6f  ave to be part o
e520: 66 20 74 68 65 0a 72 65 73 75 6c 74 20 66 6f 72  f the.result for
e530: 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
e540: 2c 20 62 75 74 20 69 6e 20 61 20 63 6f 6d 70 6f  , but in a compo
e550: 75 6e 64 20 53 45 4c 45 43 54 20 65 61 63 68 20  und SELECT each 
e560: 73 6f 72 74 0a 65 78 70 72 65 73 73 69 6f 6e 20  sort.expression 
e570: 6d 75 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74  must exactly mat
e580: 63 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65  ch one of the re
e590: 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  sult columns.  E
e5a0: 61 63 68 0a 73 6f 72 74 20 65 78 70 72 65 73 73  ach.sort express
e5b0: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f  ion may be optio
e5c0: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
e5d0: 79 20 61 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77  y a COLLATE keyw
e5e0: 6f 72 64 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65  ord and.the name
e5f0: 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20   of a collating 
e600: 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 66 6f  function used fo
e610: 72 20 6f 72 64 65 72 69 6e 67 20 74 65 78 74 20  r ordering text 
e620: 61 6e 64 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20  and/or.keywords 
e630: 41 53 43 20 6f 72 20 44 45 53 43 20 74 6f 20 73  ASC or DESC to s
e640: 70 65 63 69 66 79 20 74 68 65 20 73 6f 72 74 20  pecify the sort 
e650: 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  order.</p>..<p>T
e660: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
e670: 70 6c 61 63 65 73 20 61 6e 20 75 70 70 65 72 20  places an upper 
e680: 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
e690: 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75  ber of rows.retu
e6a0: 72 6e 65 64 20 69 6e 20 74 68 65 20 72 65 73 75  rned in the resu
e6b0: 6c 74 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20  lt.  A negative 
e6c0: 4c 49 4d 49 54 20 69 6e 64 69 63 61 74 65 73 20  LIMIT indicates 
e6d0: 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a  no upper bound..
e6e0: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46  The optional OFF
e6f0: 53 45 54 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49  SET following LI
e700: 4d 49 54 20 73 70 65 63 69 66 69 65 73 20 68 6f  MIT specifies ho
e710: 77 20 6d 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73  w many.rows to s
e720: 6b 69 70 20 61 74 20 74 68 65 20 62 65 67 69 6e  kip at the begin
e730: 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75  ning of the resu
e740: 6c 74 20 73 65 74 2e 0a 49 6e 20 61 20 63 6f 6d  lt set..In a com
e750: 70 6f 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65  pound query, the
e760: 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61   LIMIT clause ma
e770: 79 20 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e  y only appear on
e780: 20 74 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43   the.final SELEC
e790: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65  T statement..The
e7a0: 20 6c 69 6d 69 74 20 69 73 20 61 70 70 6c 69 65   limit is applie
e7b0: 64 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  d to the entire 
e7c0: 71 75 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65  query not.to the
e7d0: 20 69 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45   individual SELE
e7e0: 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  CT statement to 
e7f0: 77 68 69 63 68 20 69 74 20 69 73 20 61 74 74 61  which it is atta
e800: 63 68 65 64 2e 0a 4e 6f 74 65 20 74 68 61 74 20  ched..Note that 
e810: 69 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65  if the OFFSET ke
e820: 79 77 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e  yword is used in
e830: 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
e840: 65 2c 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69  e, then the.limi
e850: 74 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  t is the first n
e860: 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66  umber and the of
e870: 66 73 65 74 20 69 73 20 74 68 65 20 73 65 63 6f  fset is the seco
e880: 6e 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 61  nd number.  If a
e890: 0a 63 6f 6d 6d 61 20 69 73 20 75 73 65 64 20 69  .comma is used i
e8a0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 4f 46  nstead of the OF
e8b0: 46 53 45 54 20 6b 65 79 77 6f 72 64 2c 20 74 68  FSET keyword, th
e8c0: 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 69 73  en the offset is
e8d0: 20 74 68 65 0a 66 69 72 73 74 20 6e 75 6d 62 65   the.first numbe
e8e0: 72 20 61 6e 64 20 74 68 65 20 6c 69 6d 69 74 20  r and the limit 
e8f0: 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75  is the second nu
e900: 6d 62 65 72 2e 20 20 54 68 69 73 20 73 65 65 6d  mber.  This seem
e910: 69 6e 67 0a 63 6f 6e 74 72 61 64 69 74 69 6f 6e  ing.contradition
e920: 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 20   is intentional 
e930: 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63  - it maximizes c
e940: 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
e950: 68 20 6c 65 67 61 63 79 0a 53 51 4c 20 64 61 74  h legacy.SQL dat
e960: 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 3c  abase systems..<
e970: 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75  /p>..<p>A compou
e980: 6e 64 20 53 45 4c 45 43 54 20 69 73 20 66 6f 72  nd SELECT is for
e990: 6d 65 64 20 66 72 6f 6d 20 74 77 6f 20 6f 72 20  med from two or 
e9a0: 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  more simple SELE
e9b0: 43 54 73 20 63 6f 6e 6e 65 63 74 65 64 0a 62 79  CTs connected.by
e9c0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65 72   one of the oper
e9d0: 61 74 6f 72 73 20 55 4e 49 4f 4e 2c 20 55 4e 49  ators UNION, UNI
e9e0: 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43  ON ALL, INTERSEC
e9f0: 54 2c 20 6f 72 20 45 58 43 45 50 54 2e 20 20 49  T, or EXCEPT.  I
ea00: 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  n.a compound SEL
ea10: 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e  ECT, all the con
ea20: 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73  stituent SELECTs
ea30: 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 74 68   must specify th
ea40: 65 0a 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e.same number of
ea50: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e   result columns.
ea60: 20 20 54 68 65 72 65 20 6d 61 79 20 62 65 20 6f    There may be o
ea70: 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 4f 52 44  nly a single ORD
ea80: 45 52 20 42 59 0a 63 6c 61 75 73 65 20 61 74 20  ER BY.clause at 
ea90: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63  the end of the c
eaa0: 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
eab0: 20 54 68 65 20 55 4e 49 4f 4e 20 61 6e 64 20 55   The UNION and U
eac0: 4e 49 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61 74 6f  NION ALL.operato
ead0: 72 73 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 72  rs combine the r
eae0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45  esults of the SE
eaf0: 4c 45 43 54 73 20 74 6f 20 74 68 65 20 72 69 67  LECTs to the rig
eb00: 68 74 20 61 6e 64 20 6c 65 66 74 20 69 6e 74 6f  ht and left into
eb10: 0a 61 20 73 69 6e 67 6c 65 20 62 69 67 20 74 61  .a single big ta
eb20: 62 6c 65 2e 20 20 54 68 65 20 64 69 66 66 65 72  ble.  The differ
eb30: 65 6e 63 65 20 69 73 20 74 68 61 74 20 69 6e 20  ence is that in 
eb40: 55 4e 49 4f 4e 20 61 6c 6c 20 72 65 73 75 6c 74  UNION all result
eb50: 20 72 6f 77 73 0a 61 72 65 20 64 69 73 74 69 6e   rows.are distin
eb60: 63 74 20 77 68 65 72 65 20 69 6e 20 55 4e 49 4f  ct where in UNIO
eb70: 4e 20 41 4c 4c 20 74 68 65 72 65 20 6d 61 79 20  N ALL there may 
eb80: 62 65 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 54  be duplicates..T
eb90: 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65  he INTERSECT ope
eba0: 72 61 74 6f 72 20 74 61 6b 65 73 20 74 68 65 20  rator takes the 
ebb0: 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
ebc0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
ebd0: 68 65 0a 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he.left and righ
ebe0: 74 20 53 45 4c 45 43 54 73 2e 20 20 45 58 43 45  t SELECTs.  EXCE
ebf0: 50 54 20 74 61 6b 65 73 20 74 68 65 20 72 65 73  PT takes the res
ec00: 75 6c 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45  ult of left SELE
ec10: 43 54 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e  CT after.removin
ec20: 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  g the results of
ec30: 20 74 68 65 20 72 69 67 68 74 20 53 45 4c 45 43   the right SELEC
ec40: 54 2e 20 20 57 68 65 6e 20 74 68 72 65 65 20 61  T.  When three a
ec50: 72 65 20 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a  re more SELECTs.
ec60: 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e  are connected in
ec70: 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74  to a compound, t
ec80: 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c  hey group from l
ec90: 65 66 74 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70  eft to right.</p
eca0: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 55 50  >.}...Section UP
ecb0: 44 41 54 45 20 75 70 64 61 74 65 0a 0a 53 79 6e  DATE update..Syn
ecc0: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
ecd0: 6e 74 7d 20 7b 0a 55 50 44 41 54 45 20 5b 20 4f  nt} {.UPDATE [ O
ece0: 52 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f  R <conflict-algo
ecf0: 72 69 74 68 6d 3e 20 5d 20 5b 3c 64 61 74 61 62  rithm> ] [<datab
ed00: 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61  ase-name> .] <ta
ed10: 62 6c 65 2d 6e 61 6d 65 3e 0a 53 45 54 20 3c 61  ble-name>.SET <a
ed20: 73 73 69 67 6e 6d 65 6e 74 3e 20 5b 2c 20 3c 61  ssignment> [, <a
ed30: 73 73 69 67 6e 6d 65 6e 74 3e 5d 2a 0a 5b 57 48  ssignment>]*.[WH
ed40: 45 52 45 20 3c 65 78 70 72 3e 5d 0a 7d 20 7b 61  ERE <expr>].} {a
ed50: 73 73 69 67 6e 6d 65 6e 74 7d 20 7b 0a 3c 63 6f  ssignment} {.<co
ed60: 6c 75 6d 6e 2d 6e 61 6d 65 3e 20 3d 20 3c 65 78  lumn-name> = <ex
ed70: 70 72 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  pr>.}..puts {.<p
ed80: 3e 54 68 65 20 55 50 44 41 54 45 20 73 74 61 74  >The UPDATE stat
ed90: 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  ement is used to
eda0: 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
edb0: 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  e of columns in 
edc0: 0a 73 65 6c 65 63 74 65 64 20 72 6f 77 73 20 6f  .selected rows o
edd0: 66 20 61 20 74 61 62 6c 65 2e 20 20 45 61 63 68  f a table.  Each
ede0: 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 20 61   assignment in a
edf0: 6e 20 55 50 44 41 54 45 20 73 70 65 63 69 66 69  n UPDATE specifi
ee00: 65 73 0a 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  es.a column name
ee10: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20   to the left of 
ee20: 74 68 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20  the equals sign 
ee30: 61 6e 64 20 61 6e 20 61 72 62 69 74 72 61 72 79  and an arbitrary
ee40: 20 65 78 70 72 65 73 73 69 6f 6e 0a 74 6f 20 74   expression.to t
ee50: 68 65 20 72 69 67 68 74 2e 20 20 54 68 65 20 65  he right.  The e
ee60: 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 75  xpressions may u
ee70: 73 65 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  se the values of
ee80: 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a   other columns..
ee90: 41 6c 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20  All expressions 
eea0: 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 62 65  are evaluated be
eeb0: 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e 6d  fore any assignm
eec0: 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a 41  ents are made..A
eed0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61   WHERE clause ca
eee0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 73  n be used to res
eef0: 74 72 69 63 74 20 77 68 69 63 68 20 72 6f 77 73  trict which rows
ef00: 20 61 72 65 20 75 70 64 61 74 65 64 2e 3c 2f 70   are updated.</p
ef10: 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e  >..<p>The option
ef20: 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  al conflict-clau
ef30: 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70  se allows the sp
ef40: 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61  ecification of a
ef50: 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f  n alternative.co
ef60: 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
ef70: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
ef80: 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75  orithm to use du
ef90: 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 63 6f  ring this one co
efa0: 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
efb0: 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61  ection titled.<a
efc0: 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74   href="#conflict
efd0: 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61  ">ON CONFLICT</a
efe0: 3e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  > for additional
eff0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70   information.</p
f000: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 56 41  >.}...Section VA
f010: 43 55 55 4d 20 76 61 63 75 75 6d 0a 0a 53 79 6e  CUUM vacuum..Syn
f020: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
f030: 6e 74 7d 20 7b 0a 56 41 43 55 55 4d 20 5b 3c 69  nt} {.VACUUM [<i
f040: 6e 64 65 78 2d 6f 72 2d 74 61 62 6c 65 2d 6e 61  ndex-or-table-na
f050: 6d 65 3e 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  me>].}..puts {.<
f060: 70 3e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  p>The VACUUM com
f070: 6d 61 6e 64 20 69 73 20 61 6e 20 53 51 4c 69 74  mand is an SQLit
f080: 65 20 65 78 74 65 6e 73 69 6f 6e 20 6d 6f 64 65  e extension mode
f090: 6c 65 64 20 61 66 74 65 72 20 61 20 73 69 6d 69  led after a simi
f0a0: 6c 61 72 0a 63 6f 6d 6d 61 6e 64 20 66 6f 75 6e  lar.command foun
f0b0: 64 20 69 6e 20 50 6f 73 74 67 72 65 53 51 4c 2e  d in PostgreSQL.
f0c0: 20 20 49 66 20 56 41 43 55 55 4d 20 69 73 20 69    If VACUUM is i
f0d0: 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 65 20  nvoked with the 
f0e0: 6e 61 6d 65 20 6f 66 20 61 0a 74 61 62 6c 65 20  name of a.table 
f0f0: 6f 72 20 69 6e 64 65 78 20 74 68 65 6e 20 69 74  or index then it
f100: 20 69 73 20 73 75 70 70 6f 73 65 20 74 6f 20 63   is suppose to c
f110: 6c 65 61 6e 20 75 70 20 74 68 65 20 6e 61 6d 65  lean up the name
f120: 64 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  d table or index
f130: 2e 0a 49 6e 20 76 65 72 73 69 6f 6e 20 31 2e 30  ..In version 1.0
f140: 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68 65 20   of SQLite, the 
f150: 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77  VACUUM command w
f160: 6f 75 6c 64 20 69 6e 76 6f 6b 65 20 0a 3c 62 3e  ould invoke .<b>
f170: 67 64 62 6d 5f 72 65 6f 72 67 61 6e 69 7a 65 28  gdbm_reorganize(
f180: 29 3c 2f 62 3e 20 74 6f 20 63 6c 65 61 6e 20 75  )</b> to clean u
f190: 70 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61  p the backend da
f1a0: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
f1b0: 0a 0a 3c 70 3e 0a 56 41 43 55 55 4d 20 62 65 63  ..<p>.VACUUM bec
f1c0: 61 6d 65 20 61 20 6e 6f 2d 6f 70 20 77 68 65 6e  ame a no-op when
f1d0: 20 74 68 65 20 47 44 42 4d 20 62 61 63 6b 65 6e   the GDBM backen
f1e0: 64 20 77 61 73 20 72 65 6d 6f 76 65 64 20 66 72  d was removed fr
f1f0: 6f 6d 0a 53 51 4c 49 54 45 20 69 6e 20 76 65 72  om.SQLITE in ver
f200: 73 69 6f 6e 20 32 2e 30 2e 30 2e 0a 56 41 43 55  sion 2.0.0..VACU
f210: 55 4d 20 77 61 73 20 72 65 69 6d 70 6c 65 6d 65  UM was reimpleme
f220: 6e 74 65 64 20 69 6e 20 76 65 72 73 69 6f 6e 20  nted in version 
f230: 32 2e 38 2e 31 2e 0a 54 68 65 20 69 6e 64 65 78  2.8.1..The index
f240: 20 6f 72 20 74 61 62 6c 65 20 6e 61 6d 65 20 61   or table name a
f250: 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 77 20 69  rgument is now i
f260: 67 6e 6f 72 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  gnored..</p>..<p
f270: 3e 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20  >When an object 
f280: 28 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f  (table, index, o
f290: 72 20 74 72 69 67 67 65 72 29 20 69 73 20 64 72  r trigger) is dr
f2a0: 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 0a  opped from the .
f2b0: 64 61 74 61 62 61 73 65 2c 20 69 74 20 6c 65 61  database, it lea
f2c0: 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79  ves behind empty
f2d0: 20 73 70 61 63 65 2e 20 20 54 68 69 73 20 6d 61   space.  This ma
f2e0: 6b 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  kes the database
f2f0: 20 0a 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68   .file larger th
f300: 61 6e 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  an it needs to b
f310: 65 2c 20 62 75 74 20 63 61 6e 20 73 70 65 65 64  e, but can speed
f320: 20 75 70 20 69 6e 73 65 72 74 73 2e 20 20 49 6e   up inserts.  In
f330: 20 74 69 6d 65 20 0a 69 6e 73 65 72 74 73 20 61   time .inserts a
f340: 6e 64 20 64 65 6c 65 74 65 73 20 63 61 6e 20 6c  nd deletes can l
f350: 65 61 76 65 20 74 68 65 20 64 61 74 61 62 61 73  eave the databas
f360: 65 20 66 69 6c 65 20 73 74 72 75 63 74 75 72 65  e file structure
f370: 20 66 72 61 67 6d 65 6e 74 65 64 2c 20 0a 77 68   fragmented, .wh
f380: 69 63 68 20 73 6c 6f 77 73 20 64 6f 77 6e 20 64  ich slows down d
f390: 69 73 6b 20 61 63 63 65 73 73 20 74 6f 20 74 68  isk access to th
f3a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 65  e database conte
f3b0: 6e 74 73 2e 0a 0a 54 68 65 20 56 41 43 55 55 4d  nts...The VACUUM
f3c0: 20 63 6f 6d 6d 61 6e 64 20 63 6c 65 61 6e 73 0a   command cleans.
f3d0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
f3e0: 65 20 62 79 20 63 6f 70 79 69 6e 67 20 69 74 73  e by copying its
f3f0: 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 61 20 74   contents to a t
f400: 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73  emporary databas
f410: 65 20 66 69 6c 65 20 61 6e 64 20 0a 72 65 6c 6f  e file and .relo
f420: 61 64 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  ading the origin
f430: 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  al database file
f440: 20 66 72 6f 6d 20 74 68 65 20 63 6f 70 79 2e 20   from the copy. 
f450: 20 54 68 69 73 20 65 6c 69 6d 69 6e 61 74 65 73   This eliminates
f460: 20 0a 66 72 65 65 20 70 61 67 65 73 2c 20 20 61   .free pages,  a
f470: 6c 69 67 6e 73 20 74 61 62 6c 65 20 64 61 74 61  ligns table data
f480: 20 74 6f 20 62 65 20 63 6f 6e 74 69 67 75 6f 75   to be contiguou
f490: 73 2c 20 61 6e 64 20 6f 74 68 65 72 77 69 73 65  s, and otherwise
f4a0: 20 63 6c 65 61 6e 73 20 0a 75 70 20 74 68 65 20   cleans .up the 
f4b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 74  database file st
f4c0: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 6e  ructure. It is n
f4d0: 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 70  ot possible to p
f4e0: 65 72 66 6f 72 6d 20 74 68 65 20 73 61 6d 65 0a  erform the same.
f4f0: 70 72 6f 63 65 73 73 20 6f 6e 20 61 6e 20 61 74  process on an at
f500: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
f510: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  file.</p>..<p>Th
f520: 69 73 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  is command will 
f530: 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73  fail if there is
f540: 20 61 6e 20 61 63 74 69 76 65 20 74 72 61 6e 73   an active trans
f550: 61 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 0a 63  action.  This .c
f560: 6f 6d 6d 61 6e 64 20 68 61 73 20 6e 6f 20 65 66  ommand has no ef
f570: 66 65 63 74 20 6f 6e 20 61 6e 20 69 6e 2d 6d 65  fect on an in-me
f580: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 3c 2f  mory database.</
f590: 70 3e 0a 0a 3c 70 3e 41 73 20 6f 66 20 53 51 4c  p>..<p>As of SQL
f5a0: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c  ite version 3.1,
f5b0: 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
f5c0: 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43  to using the VAC
f5d0: 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61  UUM command.is a
f5e0: 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
f5f0: 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74   enabled using t
f600: 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 70 72 61  he .<a href="pra
f610: 67 6d 61 2e 68 74 6d 6c 23 70 72 61 67 6d 61 5f  gma.html#pragma_
f620: 61 75 74 6f 5f 76 61 63 75 75 6d 22 3e 61 75 74  auto_vacuum">aut
f630: 6f 5f 76 61 63 75 75 6d 20 70 72 61 67 6d 61 3c  o_vacuum pragma<
f640: 2f 61 3e 2e 3c 2f 70 3e 0a 7d 0a 0a 23 20 41 20  /a>.</p>.}..# A 
f650: 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73  list of keywords
f660: 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63  .  A asterisk oc
f670: 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20 6b  curs after the k
f680: 65 79 77 6f 72 64 20 69 66 20 69 74 20 69 73 20  eyword if it is 
f690: 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63  on.# the fallbac
f6a0: 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65  k list..#.set ke
f6b0: 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72  yword_list [lsor
f6c0: 74 20 7b 0a 20 20 20 41 42 4f 52 54 2a 0a 20 20  t {.   ABORT*.  
f6d0: 20 41 46 54 45 52 2a 0a 20 20 20 41 4c 4c 0a 20   AFTER*.   ALL. 
f6e0: 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 44 0a 20    ALTER.   AND. 
f6f0: 20 20 41 53 0a 20 20 20 41 53 43 2a 0a 20 20 20    AS.   ASC*.   
f700: 41 54 54 41 43 48 2a 0a 20 20 20 41 55 54 4f 49  ATTACH*.   AUTOI
f710: 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f  NCREMENT.   BEFO
f720: 52 45 2a 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20  RE*.   BEGIN*.  
f730: 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20   BETWEEN.   BY. 
f740: 20 20 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41    CASCADE*.   CA
f750: 53 45 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43  SE.   CHECK.   C
f760: 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4d 4d 49 54  OLLATE.   COMMIT
f770: 0a 20 20 20 43 4f 4e 46 4c 49 43 54 2a 0a 20 20  .   CONFLICT*.  
f780: 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43   CONSTRAINT.   C
f790: 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20  REATE.   CROSS. 
f7a0: 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2a 0a    CURRENT_DATE*.
f7b0: 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2a     CURRENT_TIME*
f7c0: 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  .   CURRENT_TIME
f7d0: 53 54 41 4d 50 2a 0a 20 20 20 44 41 54 41 42 41  STAMP*.   DATABA
f7e0: 53 45 2a 0a 20 20 20 44 45 46 41 55 4c 54 0a 20  SE*.   DEFAULT. 
f7f0: 20 20 44 45 46 45 52 52 45 44 2a 0a 20 20 20 44    DEFERRED*.   D
f800: 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c  EFERRABLE.   DEL
f810: 45 54 45 0a 20 20 20 44 45 53 43 2a 0a 20 20 20  ETE.   DESC*.   
f820: 44 45 54 41 43 48 2a 0a 20 20 20 44 49 53 54 49  DETACH*.   DISTI
f830: 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45  NCT.   DROP.   E
f840: 4e 44 2a 0a 20 20 20 45 41 43 48 2a 0a 20 20 20  ND*.   EACH*.   
f850: 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20  ELSE.   ESCAPE. 
f860: 20 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c    EXCEPT.   EXCL
f870: 55 53 49 56 45 2a 0a 20 20 20 45 58 50 4c 41 49  USIVE*.   EXPLAI
f880: 4e 2a 0a 20 20 20 46 41 49 4c 2a 0a 20 20 20 46  N*.   FAIL*.   F
f890: 4f 52 2a 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20  OR*.   FOREIGN. 
f8a0: 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20    FROM.   FULL. 
f8b0: 20 20 47 4c 4f 42 2a 0a 20 20 20 47 52 4f 55 50    GLOB*.   GROUP
f8c0: 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 47  .   HAVING.   IG
f8d0: 4e 4f 52 45 2a 0a 20 20 20 49 4d 4d 45 44 49 41  NORE*.   IMMEDIA
f8e0: 54 45 2a 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44  TE*.   IN.   IND
f8f0: 45 58 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a  EX.   INITIALLY*
f900: 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53  .   INNER.   INS
f910: 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a  ERT.   INSTEAD*.
f920: 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20     INTERSECT.   
f930: 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53  INTO.   IS.   IS
f940: 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20  NULL.   JOIN.   
f950: 4b 45 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20  KEY*.   LEFT.   
f960: 4c 49 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20  LIKE*.   LIMIT. 
f970: 20 20 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55    MATCH*.   NATU
f980: 52 41 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f  RAL.   NOT.   NO
f990: 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20  TNULL.   NULL.  
f9a0: 20 4f 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a   OF*.   OFFSET*.
f9b0: 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f     ON.   OR.   O
f9c0: 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20  RDER.   OUTER.  
f9d0: 20 50 52 41 47 4d 41 2a 0a 20 20 20 50 52 49 4d   PRAGMA*.   PRIM
f9e0: 41 52 59 0a 20 20 20 52 41 49 53 45 2a 0a 20 20  ARY.   RAISE*.  
f9f0: 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52   REFERENCES.   R
fa00: 45 49 4e 44 45 58 2a 0a 20 20 20 52 45 4e 41 4d  EINDEX*.   RENAM
fa10: 45 2a 0a 20 20 20 52 45 50 4c 41 43 45 2a 0a 20  E*.   REPLACE*. 
fa20: 20 20 52 45 53 54 52 49 43 54 2a 0a 20 20 20 52    RESTRICT*.   R
fa30: 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b  IGHT.   ROLLBACK
fa40: 0a 20 20 20 52 4f 57 2a 0a 20 20 20 53 45 4c 45  .   ROW*.   SELE
fa50: 43 54 0a 20 20 20 53 45 54 0a 20 20 20 53 54 41  CT.   SET.   STA
fa60: 54 45 4d 45 4e 54 2a 0a 20 20 20 54 41 42 4c 45  TEMENT*.   TABLE
fa70: 0a 20 20 20 54 45 4d 50 2a 0a 20 20 20 54 45 4d  .   TEMP*.   TEM
fa80: 50 4f 52 41 52 59 2a 0a 20 20 20 54 48 45 4e 0a  PORARY*.   THEN.
fa90: 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43     TO.   TRANSAC
faa0: 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 2a  TION.   TRIGGER*
fab0: 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49  .   UNION.   UNI
fac0: 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20  QUE.   UPDATE.  
fad0: 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d   USING.   VACUUM
fae0: 2a 0a 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56  *.   VALUES.   V
faf0: 49 45 57 2a 0a 20 20 20 57 48 45 4e 0a 20 20 20  IEW*.   WHEN.   
fb00: 57 48 45 52 45 0a 7d 5d 0a 0a 0a 0a 53 65 63 74  WHERE.}]....Sect
fb10: 69 6f 6e 20 7b 53 51 4c 69 74 65 20 6b 65 79 77  ion {SQLite keyw
fb20: 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 0a 0a  ords} keywords..
fb30: 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 53 51  puts {.<p>The SQ
fb40: 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
fb50: 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62  fies a huge numb
fb60: 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77  er of keywords w
fb70: 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20  hich may not.be 
fb80: 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  used as the name
fb90: 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64  s of tables, ind
fba0: 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 6f  ices, columns, o
fbb0: 72 20 64 61 74 61 62 61 73 65 73 2e 20 20 54 68  r databases.  Th
fbc0: 65 0a 6c 69 73 74 20 69 73 20 73 6f 20 6c 6f 6e  e.list is so lon
fbd0: 67 20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c  g that few peopl
fbe0: 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74  e can remember t
fbf0: 68 65 6d 20 61 6c 6c 2e 20 20 46 6f 72 20 6d 6f  hem all.  For mo
fc00: 73 74 20 53 51 4c 0a 63 6f 64 65 2c 20 79 6f 75  st SQL.code, you
fc10: 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73 20  r safest bet is 
fc20: 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79  to never use any
fc30: 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
fc40: 65 20 77 6f 72 64 20 61 73 20 74 68 65 0a 6e 61  e word as the.na
fc50: 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66  me of a user-def
fc60: 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e  ined object.</p>
fc70: 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74  ..<p>If you want
fc80: 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72   to use a keywor
fc90: 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75  d as a name, you
fca0: 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69   need to quote i
fcb0: 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 74 68  t.  There.are th
fcc0: 72 65 65 20 77 61 79 73 20 6f 66 20 71 75 6f 74  ree ways of quot
fcd0: 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  ing keywords in 
fce0: 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite:</p>..<p>
fcf0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
fd00: 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  able>.<tr>.<td v
fd10: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27  align="top"><b>'
fd20: 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64  keyword'</b></td
fd30: 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
fd40: 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79  </td>..<td>A key
fd50: 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71  word in single q
fd60: 75 6f 74 65 73 20 69 73 20 69 6e 74 65 72 70 72  uotes is interpr
fd70: 65 74 65 64 20 61 73 20 61 20 6c 69 74 65 72 61  eted as a litera
fd80: 6c 20 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20  l string.       
fd90: 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 69 6e   if it occurs in
fda0: 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65   a context where
fdb0: 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61   a string litera
fdc0: 6c 20 69 73 20 61 6c 6c 6f 77 65 64 2c 20 6f 74  l is allowed, ot
fdd0: 68 65 72 77 69 73 65 0a 09 69 74 20 69 73 20 75  herwise..it is u
fde0: 6e 64 65 72 73 74 6f 6f 64 20 61 73 20 61 6e 20  nderstood as an 
fdf0: 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e  identifier.</td>
fe00: 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  </tr>.<tr>.<td v
fe10: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22  align="top"><b>"
fe20: 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64  keyword"</b></td
fe30: 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
fe40: 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75  A keyword in dou
fe50: 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 69 6e  ble-quotes is in
fe60: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
fe70: 69 64 65 6e 74 69 66 69 65 72 20 69 66 0a 20 20  identifier if.  
fe80: 20 20 20 20 20 20 69 74 20 6d 61 74 63 68 65 73        it matches
fe90: 20 61 20 6b 6e 6f 77 6e 20 69 64 65 6e 74 69 66   a known identif
fea0: 69 65 72 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ier.  Otherwise 
feb0: 69 74 20 69 73 20 69 6e 74 65 72 70 72 65 74 65  it is interprete
fec0: 64 20 61 73 20 61 0a 20 20 20 20 20 20 20 20 73  d as a.        s
fed0: 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f  tring literal.</
fee0: 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74  td></tr>.<tr>.<t
fef0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  d valign="top"><
ff00: 62 3e 5b 6b 65 79 77 6f 72 64 5d 3c 2f 62 3e 3c  b>[keyword]</b><
ff10: 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
ff20: 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63  td>A keyword enc
ff30: 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20  losed in square 
ff40: 62 72 61 63 6b 65 74 73 20 69 73 20 61 6c 77 61  brackets is alwa
ff50: 79 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 61 73  ys understood as
ff60: 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e  .        an iden
ff70: 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73  tifier.  This is
ff80: 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
ff90: 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67  L.  This quoting
ffa0: 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20   mechanism.     
ffb0: 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53     is used by MS
ffc0: 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20   Access and SQL 
ffd0: 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e  Server and is in
ffe0: 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
fff0: 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
10000 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
10010 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
10020 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70  /blockquote>.</p
10030 3e 0a 0a 3c 70 3e 51 75 6f 74 65 64 20 6b 65 79  >..<p>Quoted key
10040 77 6f 72 64 73 20 61 72 65 20 75 6e 61 65 73 74  words are unaest
10050 68 65 74 69 63 2e 0a 54 6f 20 68 65 6c 70 20 79  hetic..To help y
10060 6f 75 20 61 76 6f 69 64 20 74 68 65 6d 2c 20 53  ou avoid them, S
10070 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 6d 61 6e  QLite allows man
10080 79 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 62 65  y keywords to be
10090 20 75 73 65 64 20 75 6e 71 75 6f 74 65 64 0a 61   used unquoted.a
100a0 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 64  s the names of d
100b0 61 74 61 62 61 73 65 73 2c 20 74 61 62 6c 65 73  atabases, tables
100c0 2c 20 69 6e 64 69 63 65 73 2c 20 74 72 69 67 67  , indices, trigg
100d0 65 72 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 2f  ers, views, and/
100e0 6f 72 20 63 6f 6c 75 6d 6e 73 2e 0a 49 6e 20 74  or columns..In t
100f0 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
10100 72 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  rds that follows
10110 2c 20 74 68 6f 73 65 20 74 68 61 74 20 63 61 6e  , those that can
10120 20 62 65 20 75 73 65 64 20 61 73 20 69 64 65 6e   be used as iden
10130 74 69 66 69 65 72 73 0a 61 72 65 20 73 68 6f 77  tifiers.are show
10140 6e 20 69 6e 20 61 6e 20 69 74 61 6c 69 63 20 66  n in an italic f
10150 6f 6e 74 2e 20 20 4b 65 79 77 6f 72 64 73 20 74  ont.  Keywords t
10160 68 61 74 20 6d 75 73 74 20 62 65 20 71 75 6f 74  hat must be quot
10170 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ed in order to b
10180 65 0a 75 73 65 64 20 61 73 20 69 64 65 6e 74 69  e.used as identi
10190 66 69 65 72 73 20 61 72 65 20 73 68 6f 77 6e 20  fiers are shown 
101a0 69 6e 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70  in bold.</p>..<p
101b0 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65  >.SQLite adds ne
101c0 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20  w keywords from 
101d0 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65  time to time whe
101e0 6e 20 69 74 20 74 61 6b 65 20 6f 6e 20 6e 65 77  n it take on new
101f0 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f   features..So to
10200 20 70 72 65 76 65 6e 74 20 79 6f 75 20 63 6f 64   prevent you cod
10210 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f  e from being bro
10220 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e  ken by future en
10230 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20  hancements, you 
10240 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20  should.normally 
10250 71 75 6f 74 65 20 61 6e 79 20 69 6e 64 65 6e 74  quote any indent
10260 69 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e  ifier that is an
10270 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
10280 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a  e word, even if.
10290 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  you do not have 
102a0 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  to..</p>..<p>.Th
102b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
102c0 74 68 65 20 6b 65 79 77 6f 72 64 73 20 63 75 72  the keywords cur
102d0 72 65 6e 74 6c 79 20 72 65 63 6f 67 6e 69 7a 65  rently recognize
102e0 64 20 62 79 20 53 51 4c 69 74 65 3a 0a 3c 2f 70  d by SQLite:.</p
102f0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
10300 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30  <table width="10
10310 30 25 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  0%">.<tr>.<td al
10320 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67  ign="left" valig
10330 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32  n="top" width="2
10340 30 25 22 3e 0a 7d 0a 0a 73 65 74 20 6e 20 5b 6c  0%">.}..set n [l
10350 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f  length $keyword_
10360 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35  list].set nCol 5
10370 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20  .set nRow [expr 
10380 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e  {($n+$nCol-1)/$n
10390 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f  Col}].set i 0.fo
103a0 72 65 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77  reach word $keyw
103b0 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20  ord_list {.  if 
103c0 7b 5b 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24  {[string index $
103d0 77 6f 72 64 20 65 6e 64 5d 3d 3d 22 2a 22 7d 20  word end]=="*"} 
103e0 7b 0a 20 20 20 20 73 65 74 20 77 6f 72 64 20 5b  {.    set word [
103f0 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 77 6f  string range $wo
10400 72 64 20 30 20 65 6e 64 2d 31 5d 0a 20 20 20 20  rd 0 end-1].    
10410 73 65 74 20 66 6f 6e 74 20 69 0a 20 20 7d 20 65  set font i.  } e
10420 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 6f  lse {.    set fo
10430 6e 74 20 62 0a 20 20 7d 0a 20 20 69 66 20 7b 24  nt b.  }.  if {$
10440 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20  i==$nRow} {.    
10450 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76  puts "</td><td v
10460 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c  align=\"top\" al
10470 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64  ign=\"left\" wid
10480 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20  th=\"20%\">".   
10490 20 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73   set i 1.  } els
104a0 65 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20  e {.    incr i. 
104b0 20 7d 0a 20 20 70 75 74 73 20 22 3c 24 66 6f 6e   }.  puts "<$fon
104c0 74 3e 24 77 6f 72 64 3c 2f 24 66 6f 6e 74 3e 3c  t>$word</$font><
104d0 62 72 3e 22 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  br>".}..puts {.<
104e0 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65  /td></tr></table
104f0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
10500 3c 68 32 3e 53 70 65 63 69 61 6c 20 6e 61 6d 65  <h2>Special name
10510 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66  s</h2>..<p>The f
10520 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 6e 6f 74  ollowing are not
10530 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
10540 69 74 65 2c 20 62 75 74 20 61 72 65 20 75 73 65  ite, but are use
10550 64 20 61 73 20 6e 61 6d 65 73 20 6f 66 20 0a 73  d as names of .s
10560 79 73 74 65 6d 20 6f 62 6a 65 63 74 73 2e 20 20  ystem objects.  
10570 54 68 65 79 20 63 61 6e 20 62 65 20 75 73 65 64  They can be used
10580 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   as an identifie
10590 72 20 66 6f 72 20 61 20 64 69 66 66 65 72 65 6e  r for a differen
105a0 74 20 0a 74 79 70 65 20 6f 66 20 6f 62 6a 65 63  t .type of objec
105b0 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  t.</p>..<blockqu
105c0 6f 74 65 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44  ote><b>.  _ROWID
105d0 5f 3c 62 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e  _<br>.  MAIN<br>
105e0 0a 20 20 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57  .  OID<br>.  ROW
105f0 49 44 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f  ID<br>.  SQLITE_
10600 4d 41 53 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c  MASTER<br>.  SQL
10610 49 54 45 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e  ITE_SEQUENCE<br>
10620 0a 20 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d  .  SQLITE_TEMP_M
10630 41 53 54 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50  ASTER<br>.  TEMP
10640 3c 62 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b  <br>.</b></block
10650 71 75 6f 74 65 3e 0a 7d 0a 0a 66 6f 6f 74 65 72  quote>.}..footer
10660 20 24 72 63 73 69 64 0a 69 66 20 7b 5b 73 74 72   $rcsid.if {[str
10670 69 6e 67 20 6c 65 6e 67 74 68 20 24 6f 75 74 70  ing length $outp
10680 75 74 64 69 72 5d 7d 20 7b 0a 20 20 66 6f 6f 74  utdir]} {.  foot
10690 65 72 20 24 72 63 73 69 64 0a 7d 0a              er $rcsid.}.