/ Hex Artifact Content
Login

Artifact 53a3643fe8a1f2397a0be00527eb26e4c801c0ae:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 54 63 6c  #.# Run this Tcl
0010: 20 73 63 72 69 70 74 20 74 6f 20 67 65 6e 65 72   script to gener
0020: 61 74 65 20 74 68 65 20 6c 61 6e 67 2d 2a 2e 68  ate the lang-*.h
0030: 74 6d 6c 20 66 69 6c 65 73 2e 0a 23 0a 73 65 74  tml files..#.set
0040: 20 72 63 73 69 64 20 7b 24 49 64 3a 20 6c 61 6e   rcsid {$Id: lan
0050: 67 2e 74 63 6c 2c 76 20 31 2e 31 31 30 20 32 30  g.tcl,v 1.110 20
0060: 30 36 2f 30 32 2f 31 35 20 31 37 3a 33 30 3a 33  06/02/15 17:30:3
0070: 31 20 64 72 68 20 45 78 70 20 24 7d 0a 73 6f 75  1 drh Exp $}.sou
0080: 72 63 65 20 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a  rce common.tcl..
0090: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72  if {[llength $ar
00a0: 67 76 5d 3e 30 7d 20 7b 0a 20 20 73 65 74 20 6f  gv]>0} {.  set o
00b0: 75 74 70 75 74 64 69 72 20 5b 6c 69 6e 64 65 78  utputdir [lindex
00c0: 20 24 61 72 67 76 20 30 5d 0a 7d 20 65 6c 73 65   $argv 0].} else
00d0: 20 7b 0a 20 20 73 65 74 20 6f 75 74 70 75 74 64   {.  set outputd
00e0: 69 72 20 22 22 0a 7d 0a 0a 68 65 61 64 65 72 20  ir "".}..header 
00f0: 7b 51 75 65 72 79 20 4c 61 6e 67 75 61 67 65 20  {Query Language 
0100: 55 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 53 51  Understood by SQ
0110: 4c 69 74 65 7d 0a 70 75 74 73 20 7b 0a 3c 68 31  Lite}.puts {.<h1
0120: 3e 53 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f  >SQL As Understo
0130: 6f 64 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31  od By SQLite</h1
0140: 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 69 74 65  >..<p>The SQLite
0150: 20 6c 69 62 72 61 72 79 20 75 6e 64 65 72 73 74   library underst
0160: 61 6e 64 73 20 6d 6f 73 74 20 6f 66 20 74 68 65  ands most of the
0170: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 0a 6c 61   standard SQL.la
0180: 6e 67 75 61 67 65 2e 20 20 42 75 74 20 69 74 20  nguage.  But it 
0190: 64 6f 65 73 20 3c 61 20 68 72 65 66 3d 22 6f 6d  does <a href="om
01a0: 69 74 74 65 64 2e 68 74 6d 6c 22 3e 6f 6d 69 74  itted.html">omit
01b0: 20 73 6f 6d 65 20 66 65 61 74 75 72 65 73 3c 2f   some features</
01c0: 61 3e 0a 77 68 69 6c 65 20 61 74 20 74 68 65 20  a>.while at the 
01d0: 73 61 6d 65 20 74 69 6d 65 0a 61 64 64 69 6e 67  same time.adding
01e0: 20 61 20 66 65 77 20 66 65 61 74 75 72 65 73 20   a few features 
01f0: 6f 66 20 69 74 73 20 6f 77 6e 2e 20 20 54 68 69  of its own.  Thi
0200: 73 20 64 6f 63 75 6d 65 6e 74 20 61 74 74 65 6d  s document attem
0210: 70 74 73 20 74 6f 0a 64 65 73 63 72 69 62 65 20  pts to.describe 
0220: 70 72 65 63 69 73 65 6c 79 20 77 68 61 74 20 70  precisely what p
0230: 61 72 74 73 20 6f 66 20 74 68 65 20 53 51 4c 20  arts of the SQL 
0240: 6c 61 6e 67 75 61 67 65 20 53 51 4c 69 74 65 20  language SQLite 
0250: 64 6f 65 73 0a 61 6e 64 20 64 6f 65 73 20 6e 6f  does.and does no
0260: 74 20 73 75 70 70 6f 72 74 2e 20 20 41 20 6c 69  t support.  A li
0270: 73 74 20 6f 66 20 3c 61 20 68 72 65 66 3d 22 6c  st of <a href="l
0280: 61 6e 67 5f 6b 65 79 77 6f 72 64 73 2e 68 74 6d  ang_keywords.htm
0290: 6c 22 3e 6b 65 79 77 6f 72 64 73 3c 2f 61 3e 20  l">keywords</a> 
02a0: 69 73 20 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65  is .also provide
02b0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6c  d.</p>..<p>In al
02c0: 6c 20 6f 66 20 74 68 65 20 73 79 6e 74 61 78 20  l of the syntax 
02d0: 64 69 61 67 72 61 6d 73 20 74 68 61 74 20 66 6f  diagrams that fo
02e0: 6c 6c 6f 77 2c 20 6c 69 74 65 72 61 6c 20 74 65  llow, literal te
02f0: 78 74 20 69 73 20 73 68 6f 77 6e 20 69 6e 0a 62  xt is shown in.b
0300: 6f 6c 64 20 62 6c 75 65 2e 20 20 4e 6f 6e 2d 74  old blue.  Non-t
0310: 65 72 6d 69 6e 61 6c 20 73 79 6d 62 6f 6c 73 20  erminal symbols 
0320: 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 69 74 61  are shown in ita
0330: 6c 69 63 20 72 65 64 2e 20 20 4f 70 65 72 61 74  lic red.  Operat
0340: 6f 72 73 0a 74 68 61 74 20 61 72 65 20 70 61 72  ors.that are par
0350: 74 20 6f 66 20 74 68 65 20 73 79 6e 74 61 63 74  t of the syntact
0360: 69 63 20 6d 61 72 6b 75 70 20 69 74 73 65 6c 66  ic markup itself
0370: 20 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6c   are shown in bl
0380: 61 63 6b 20 72 6f 6d 61 6e 2e 3c 2f 70 3e 0a 0a  ack roman.</p>..
0390: 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74  <p>This document
03a0: 20 69 73 20 6a 75 73 74 20 61 6e 20 6f 76 65 72   is just an over
03b0: 76 69 65 77 20 6f 66 20 74 68 65 20 53 51 4c 20  view of the SQL 
03c0: 73 79 6e 74 61 78 20 69 6d 70 6c 65 6d 65 6e 74  syntax implement
03d0: 65 64 0a 62 79 20 53 51 4c 69 74 65 2e 20 20 4d  ed.by SQLite.  M
03e0: 61 6e 79 20 6c 6f 77 2d 6c 65 76 65 6c 20 70 72  any low-level pr
03f0: 6f 64 75 63 74 69 6f 6e 73 20 61 72 65 20 6f 6d  oductions are om
0400: 69 74 74 65 64 2e 20 20 46 6f 72 20 64 65 74 61  itted.  For deta
0410: 69 6c 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  iled information
0420: 0a 6f 6e 20 74 68 65 20 6c 61 6e 67 75 61 67 65  .on the language
0430: 20 74 68 61 74 20 53 51 4c 69 74 65 20 75 6e 64   that SQLite und
0440: 65 72 73 74 61 6e 64 73 2c 20 72 65 66 65 72 20  erstands, refer 
0450: 74 6f 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  to the source co
0460: 64 65 20 61 6e 64 0a 74 68 65 20 67 72 61 6d 6d  de and.the gramm
0470: 61 72 20 66 69 6c 65 20 22 70 61 72 73 65 2e 79  ar file "parse.y
0480: 22 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 53 51 4c 69  ".</p>...<p>SQLi
0490: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  te implements th
04a0: 65 20 66 6f 6c 6c 6f 77 20 73 79 6e 74 61 78 3a  e follow syntax:
04b0: 3c 2f 70 3e 0a 3c 70 3e 3c 75 6c 3e 0a 7d 0a 0a  </p>.<p><ul>.}..
04c0: 70 72 6f 63 20 73 6c 69 6e 6b 20 7b 6c 61 62 65  proc slink {labe
04d0: 6c 7d 20 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69  l} {.  if {[stri
04e0: 6e 67 20 6d 61 74 63 68 20 2a 2e 68 74 6d 6c 20  ng match *.html 
04f0: 24 6c 61 62 65 6c 5d 7d 20 7b 0a 20 20 20 20 72  $label]} {.    r
0500: 65 74 75 72 6e 20 24 6c 61 62 65 6c 0a 20 20 7d  eturn $label.  }
0510: 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c  .  if {[string l
0520: 65 6e 67 74 68 20 24 3a 3a 6f 75 74 70 75 74 64  ength $::outputd
0530: 69 72 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65  ir]==0} {.    re
0540: 74 75 72 6e 20 23 24 6c 61 62 65 6c 0a 20 20 7d  turn #$label.  }
0550: 20 65 6c 73 65 20 7b 20 0a 20 20 20 20 72 65 74   else { .    ret
0560: 75 72 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e  urn lang_$label.
0570: 68 74 6d 6c 0a 20 20 7d 0a 7d 0a 0a 66 6f 72 65  html.  }.}..fore
0580: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0590: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
05a0: 69 63 74 69 6f 6e 61 72 79 20 7b 0a 20 20 7b 7b  ictionary {.  {{
05b0: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20 63 72  CREATE TABLE} cr
05c0: 65 61 74 65 74 61 62 6c 65 7d 0a 20 20 7b 7b 43  eatetable}.  {{C
05d0: 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65  REATE INDEX} cre
05e0: 61 74 65 69 6e 64 65 78 7d 0a 20 20 7b 56 41 43  ateindex}.  {VAC
05f0: 55 55 4d 20 76 61 63 75 75 6d 7d 0a 20 20 7b 7b  UUM vacuum}.  {{
0600: 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70  DROP TABLE} drop
0610: 74 61 62 6c 65 7d 0a 20 20 7b 7b 44 52 4f 50 20  table}.  {{DROP 
0620: 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78  INDEX} dropindex
0630: 7d 0a 20 20 7b 49 4e 53 45 52 54 20 69 6e 73 65  }.  {INSERT inse
0640: 72 74 7d 0a 20 20 7b 52 45 50 4c 41 43 45 20 72  rt}.  {REPLACE r
0650: 65 70 6c 61 63 65 7d 0a 20 20 7b 44 45 4c 45 54  eplace}.  {DELET
0660: 45 20 64 65 6c 65 74 65 7d 0a 20 20 7b 55 50 44  E delete}.  {UPD
0670: 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 7b 53  ATE update}.  {S
0680: 45 4c 45 43 54 20 73 65 6c 65 63 74 7d 0a 20 20  ELECT select}.  
0690: 7b 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74  {comment comment
06a0: 7d 0a 20 20 7b 43 4f 50 59 20 63 6f 70 79 7d 0a  }.  {COPY copy}.
06b0: 20 20 7b 45 58 50 4c 41 49 4e 20 65 78 70 6c 61    {EXPLAIN expla
06c0: 69 6e 7d 0a 20 20 7b 65 78 70 72 65 73 73 69 6f  in}.  {expressio
06d0: 6e 20 65 78 70 72 7d 0a 20 20 7b 7b 42 45 47 49  n expr}.  {{BEGI
06e0: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
06f0: 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b  ransaction}.  {{
0700: 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49  COMMIT TRANSACTI
0710: 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d  ON} transaction}
0720: 0a 20 20 7b 7b 45 4e 44 20 54 52 41 4e 53 41 43  .  {{END TRANSAC
0730: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
0740: 6e 7d 0a 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20  n}.  {{ROLLBACK 
0750: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
0760: 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 50 52 41  nsaction}.  {PRA
0770: 47 4d 41 20 70 72 61 67 6d 61 2e 68 74 6d 6c 7d  GMA pragma.html}
0780: 0a 20 20 7b 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  .  {{ON CONFLICT
0790: 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63   clause} conflic
07a0: 74 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20 56 49  t}.  {{CREATE VI
07b0: 45 57 7d 20 63 72 65 61 74 65 76 69 65 77 7d 0a  EW} createview}.
07c0: 20 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 20 64    {{DROP VIEW} d
07d0: 72 6f 70 76 69 65 77 7d 0a 20 20 7b 7b 43 52 45  ropview}.  {{CRE
07e0: 41 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65  ATE TRIGGER} cre
07f0: 61 74 65 74 72 69 67 67 65 72 7d 0a 20 20 7b 7b  atetrigger}.  {{
0800: 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72  DROP TRIGGER} dr
0810: 6f 70 74 72 69 67 67 65 72 7d 0a 20 20 7b 7b 41  optrigger}.  {{A
0820: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
0830: 61 74 74 61 63 68 7d 0a 20 20 7b 7b 44 45 54 41  attach}.  {{DETA
0840: 43 48 20 44 41 54 41 42 41 53 45 7d 20 64 65 74  CH DATABASE} det
0850: 61 63 68 7d 0a 20 20 7b 52 45 49 4e 44 45 58 20  ach}.  {REINDEX 
0860: 72 65 69 6e 64 65 78 7d 0a 20 20 7b 7b 41 4c 54  reindex}.  {{ALT
0870: 45 52 20 54 41 42 4c 45 7d 20 61 6c 74 65 72 74  ER TABLE} altert
0880: 61 62 6c 65 7d 0a 20 20 7b 7b 41 4e 41 4c 59 5a  able}.  {{ANALYZ
0890: 45 7d 20 61 6e 61 6c 79 7a 65 7d 0a 7d 5d 20 7b  E} analyze}.}] {
08a0: 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69  .  foreach {s_ti
08b0: 74 6c 65 20 73 5f 74 61 67 7d 20 24 73 65 63 74  tle s_tag} $sect
08c0: 69 6f 6e 20 7b 7d 0a 20 20 70 75 74 73 20 22 3c  ion {}.  puts "<
08d0: 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22 5b 73 6c  li><a href=\"[sl
08e0: 69 6e 6b 20 24 73 5f 74 61 67 5d 5c 22 3e 24 73  ink $s_tag]\">$s
08f0: 5f 74 69 74 6c 65 3c 2f 61 3e 3c 2f 6c 69 3e 22  _title</a></li>"
0900: 0a 7d 0a 70 75 74 73 20 7b 3c 2f 75 6c 3e 3c 2f  .}.puts {</ul></
0910: 70 3e 0a 0a 3c 70 3e 44 65 74 61 69 6c 73 20 6f  p>..<p>Details o
0920: 6e 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  n the implementa
0930: 74 69 6f 6e 20 6f 66 20 65 61 63 68 20 63 6f 6d  tion of each com
0940: 6d 61 6e 64 20 61 72 65 20 70 72 6f 76 69 64 65  mand are provide
0950: 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e  d in.the sequel.
0960: 3c 2f 70 3e 0a 7d 0a 0a 70 72 6f 63 20 4f 70 65  </p>.}..proc Ope
0970: 72 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20  rator {name} {. 
0980: 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63   return "<font c
0990: 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22  olor=\"#2c2cf0\"
09a0: 3e 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69 67  ><big>$name</big
09b0: 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63  ></font>".}.proc
09c0: 20 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e 61   Nonterminal {na
09d0: 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22  me} {.  return "
09e0: 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c  <i><font color=\
09f0: 22 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d 65  "#ff3434\">$name
0a00: 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70  </font></i>".}.p
0a10: 72 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61 6d  roc Keyword {nam
0a20: 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c  e} {.  return "<
0a30: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63  font color=\"#2c
0a40: 32 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  2cf0\">$name</fo
0a50: 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61 6d  nt>".}.proc Exam
0a60: 70 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20 70  ple {text} {.  p
0a70: 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65  uts "<blockquote
0a80: 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65  ><pre>$text</pre
0a90: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a  ></blockquote>".
0aa0: 7d 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20  }..proc Section 
0ab0: 7b 6e 61 6d 65 20 6c 61 62 65 6c 7d 20 7b 0a 20  {name label} {. 
0ac0: 20 67 6c 6f 62 61 6c 20 6f 75 74 70 75 74 64 69   global outputdi
0ad0: 72 0a 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  r..  if {[string
0ae0: 20 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74 64   length $outputd
0af0: 69 72 5d 21 3d 30 7d 20 7b 0a 20 20 20 20 69 66  ir]!=0} {.    if
0b00: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
0b10: 20 63 6f 6d 6d 61 6e 64 73 20 70 75 74 73 5f 73   commands puts_s
0b20: 74 61 6e 64 61 72 64 5d 5d 3e 30 7d 20 7b 0a 20  tandard]]>0} {. 
0b30: 20 20 20 20 20 66 6f 6f 74 65 72 20 24 3a 3a 72       footer $::r
0b40: 63 73 69 64 0a 20 20 20 20 7d 0a 0a 20 20 20 20  csid.    }..    
0b50: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
0b60: 74 68 20 24 6c 61 62 65 6c 5d 3e 30 7d 20 7b 0a  th $label]>0} {.
0b70: 20 20 20 20 20 20 72 65 6e 61 6d 65 20 70 75 74        rename put
0b80: 73 20 70 75 74 73 5f 73 74 61 6e 64 61 72 64 0a  s puts_standard.
0b90: 20 20 20 20 20 20 70 72 6f 63 20 70 75 74 73 20        proc puts 
0ba0: 7b 73 74 72 7d 20 7b 0a 20 20 20 20 20 20 20 20  {str} {.        
0bb0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 68 72 65  regsub -all {hre
0bc0: 66 3d 22 23 28 5b 61 2d 7a 5d 2b 29 22 7d 20 24  f="#([a-z]+)"} $
0bd0: 73 74 72 20 7b 68 72 65 66 3d 22 6c 61 6e 67 5f  str {href="lang_
0be0: 5c 31 2e 68 74 6d 6c 22 7d 20 73 74 72 0a 20 20  \1.html"} str.  
0bf0: 20 20 20 20 20 20 70 75 74 73 5f 73 74 61 6e 64        puts_stand
0c00: 61 72 64 20 24 3a 3a 73 65 63 74 69 6f 6e 5f 66  ard $::section_f
0c10: 69 6c 65 20 24 73 74 72 0a 20 20 20 20 20 20 7d  ile $str.      }
0c20: 0a 20 20 20 20 20 20 72 65 6e 61 6d 65 20 66 6f  .      rename fo
0c30: 6f 74 65 72 20 66 6f 6f 74 65 72 5f 73 74 61 6e  oter footer_stan
0c40: 64 61 72 64 0a 20 20 20 20 20 20 70 72 6f 63 20  dard.      proc 
0c50: 66 6f 6f 74 65 72 20 7b 69 64 7d 20 7b 0a 20 20  footer {id} {.  
0c60: 20 20 20 20 20 20 66 6f 6f 74 65 72 5f 73 74 61        footer_sta
0c70: 6e 64 61 72 64 20 24 69 64 0a 20 20 20 20 20 20  ndard $id.      
0c80: 20 20 72 65 6e 61 6d 65 20 66 6f 6f 74 65 72 20    rename footer 
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 20 22 22 0a 20 20 20 20 20 20  e puts "".      
0cb0: 20 20 72 65 6e 61 6d 65 20 70 75 74 73 5f 73 74    rename puts_st
0cc0: 61 6e 64 61 72 64 20 70 75 74 73 0a 20 20 20 20  andard puts.    
0cd0: 20 20 20 20 72 65 6e 61 6d 65 20 66 6f 6f 74 65      rename foote
0ce0: 72 5f 73 74 61 6e 64 61 72 64 20 66 6f 6f 74 65  r_standard foote
0cf0: 72 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20  r.      } .     
0d00: 20 73 65 74 20 3a 3a 73 65 63 74 69 6f 6e 5f 66   set ::section_f
0d10: 69 6c 65 20 5b 6f 70 65 6e 20 5b 66 69 6c 65 20  ile [open [file 
0d20: 6a 6f 69 6e 20 24 6f 75 74 70 75 74 64 69 72 20  join $outputdir 
0d30: 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d 6c  lang_$label.html
0d40: 5d 20 77 5d 0a 20 20 20 20 20 20 68 65 61 64 65  ] w].      heade
0d50: 72 20 22 51 75 65 72 79 20 4c 61 6e 67 75 61 67  r "Query Languag
0d60: 65 20 55 6e 64 65 72 73 74 6f 6f 64 20 62 79 20  e Understood by 
0d70: 53 51 4c 69 74 65 3a 20 24 6e 61 6d 65 22 0a 20  SQLite: $name". 
0d80: 20 20 20 20 20 70 75 74 73 20 22 3c 68 31 3e 53       puts "<h1>S
0d90: 51 4c 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64  QL As Understood
0da0: 20 42 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 22   By SQLite</h1>"
0db0: 0a 20 20 20 20 20 20 70 75 74 73 20 22 3c 61 20  .      puts "<a 
0dc0: 68 72 65 66 3d 5c 22 6c 61 6e 67 2e 68 74 6d 6c  href=\"lang.html
0dd0: 5c 22 3e 5c 5b 43 6f 6e 74 65 6e 74 73 5c 5d 3c  \">\[Contents\]<
0de0: 2f 61 3e 22 0a 20 20 20 20 20 20 70 75 74 73 20  /a>".      puts 
0df0: 22 3c 68 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22  "<h2>$name</h2>"
0e00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 0a 20  .      return . 
0e10: 20 20 20 7d 0a 20 20 7d 0a 20 20 70 75 74 73 20     }.  }.  puts 
0e20: 22 5c 6e 3c 68 72 20 2f 3e 22 0a 20 20 69 66 20  "\n<hr />".  if 
0e30: 7b 24 6c 61 62 65 6c 21 3d 22 22 7d 20 7b 0a 20  {$label!=""} {. 
0e40: 20 20 20 70 75 74 73 20 22 3c 61 20 6e 61 6d 65     puts "<a name
0e50: 3d 5c 22 24 6c 61 62 65 6c 5c 22 3e 3c 2f 61 3e  =\"$label\"></a>
0e60: 22 0a 20 20 7d 0a 20 20 70 75 74 73 20 22 3c 68  ".  }.  puts "<h
0e70: 31 3e 24 6e 61 6d 65 3c 2f 68 31 3e 5c 6e 22 0a  1>$name</h1>\n".
0e80: 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 41 4c 54 45  }..Section {ALTE
0e90: 52 20 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61  R TABLE} alterta
0ea0: 62 6c 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ble..Syntax {sql
0eb0: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 41 4c  -statement} {.AL
0ec0: 54 45 52 20 54 41 42 4c 45 20 5b 3c 64 61 74 61  TER TABLE [<data
0ed0: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
0ee0: 61 62 6c 65 2d 6e 61 6d 65 3e 20 3c 61 6c 74 65  able-name> <alte
0ef0: 72 61 74 69 6f 6e 3e 0a 7d 20 7b 61 6c 74 65 72  ration>.} {alter
0f00: 61 74 69 6f 6e 7d 20 7b 0a 52 45 4e 41 4d 45 20  ation} {.RENAME 
0f10: 54 4f 20 3c 6e 65 77 2d 74 61 62 6c 65 2d 6e 61  TO <new-table-na
0f20: 6d 65 3e 0a 7d 20 7b 61 6c 74 65 72 61 74 69 6f  me>.} {alteratio
0f30: 6e 7d 20 7b 0a 41 44 44 20 5b 43 4f 4c 55 4d 4e  n} {.ADD [COLUMN
0f40: 5d 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66 3e 0a 7d  ] <column-def>.}
0f50: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 53 51 4c 69  ..puts {.<p>SQLi
0f60: 74 65 27 73 20 76 65 72 73 69 6f 6e 20 6f 66 20  te's version of 
0f70: 74 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  the ALTER TABLE 
0f80: 63 6f 6d 6d 61 6e 64 20 61 6c 6c 6f 77 73 20 74  command allows t
0f90: 68 65 20 75 73 65 72 20 74 6f 20 0a 72 65 6e 61  he user to .rena
0fa0: 6d 65 20 6f 72 20 61 64 64 20 61 20 6e 65 77 20  me or add a new 
0fb0: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
0fc0: 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 49 74 20  sting table. It 
0fd0: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 0a  is not possible.
0fe0: 74 6f 20 72 65 6d 6f 76 65 20 61 20 63 6f 6c 75  to remove a colu
0ff0: 6d 6e 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e  mn from a table.
1000: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 52 45  .</p>..<p>The RE
1010: 4e 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 69  NAME TO syntax i
1020: 73 20 75 73 65 64 20 74 6f 20 72 65 6e 61 6d 65  s used to rename
1030: 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
1040: 69 66 69 65 64 20 62 79 20 0a 3c 69 3e 5b 64 61  ified by .<i>[da
1050: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 5d 74 61 62  tabase-name.]tab
1060: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f 20 3c  le-name</i> to <
1070: 69 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65  i>new-table-name
1080: 3c 2f 69 3e 2e 20 54 68 69 73 20 63 6f 6d 6d 61  </i>. This comma
1090: 6e 64 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73  nd .cannot be us
10a0: 65 64 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62  ed to move a tab
10b0: 6c 65 20 62 65 74 77 65 65 6e 20 61 74 74 61 63  le between attac
10c0: 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f  hed databases, o
10d0: 6e 6c 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61  nly to rename .a
10e0: 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68   table within th
10f0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e  e same database.
1100: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
1110: 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61  table being rena
1120: 6d 65 64 20 68 61 73 20 74 72 69 67 67 65 72 73  med has triggers
1130: 20 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65   or indices, the
1140: 6e 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61  n these remain.a
1150: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74  ttached to the t
1160: 61 62 6c 65 20 61 66 74 65 72 20 69 74 20 68 61  able after it ha
1170: 73 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20  s been renamed. 
1180: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
1190: 65 20 61 72 65 0a 61 6e 79 20 76 69 65 77 20 64  e are.any view d
11a0: 65 66 69 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73  efinitions, or s
11b0: 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74  tatements execut
11c0: 65 64 20 62 79 20 74 72 69 67 67 65 72 73 20 74  ed by triggers t
11d0: 68 61 74 20 72 65 66 65 72 20 74 6f 0a 74 68 65  hat refer to.the
11e0: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e   table being ren
11f0: 61 6d 65 64 2c 20 74 68 65 73 65 20 61 72 65 20  amed, these are 
1200: 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  not automaticall
1210: 79 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 75 73  y modified to us
1220: 65 20 74 68 65 20 6e 65 77 0a 74 61 62 6c 65 20  e the new.table 
1230: 6e 61 6d 65 2e 20 49 66 20 74 68 69 73 20 69 73  name. If this is
1240: 20 72 65 71 75 69 72 65 64 2c 20 74 68 65 20 74   required, the t
1250: 72 69 67 67 65 72 73 20 6f 72 20 76 69 65 77 20  riggers or view 
1260: 64 65 66 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74  definitions must
1270: 20 62 65 0a 64 72 6f 70 70 65 64 20 61 6e 64 20   be.dropped and 
1280: 72 65 63 72 65 61 74 65 64 20 74 6f 20 75 73 65  recreated to use
1290: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 6e   the new table n
12a0: 61 6d 65 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70  ame by hand..</p
12b0: 3e 0a 0a 3c 70 3e 54 68 65 20 41 44 44 20 5b 43  >..<p>The ADD [C
12c0: 4f 4c 55 4d 4e 5d 20 73 79 6e 74 61 78 20 69 73  OLUMN] syntax is
12d0: 20 75 73 65 64 20 74 6f 20 61 64 64 20 61 20 6e   used to add a n
12e0: 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20  ew column to an 
12f0: 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a  existing table..
1300: 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69  The new column i
1310: 73 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65  s always appende
1320: 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  d to the end of 
1330: 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73  the list of exis
1340: 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 3c 69  ting columns..<i
1350: 3e 43 6f 6c 75 6d 6e 2d 64 65 66 3c 2f 69 3e 20  >Column-def</i> 
1360: 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66 20  may take any of 
1370: 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69 73  the forms permis
1380: 73 61 62 6c 65 20 69 6e 20 61 20 43 52 45 41 54  sable in a CREAT
1390: 45 20 54 41 42 4c 45 20 0a 73 74 61 74 65 6d 65  E TABLE .stateme
13a0: 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c  nt, with the fol
13b0: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
13c0: 6f 6e 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68  ons:.<ul>.<li>Th
13d0: 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74  e column may not
13e0: 20 68 61 76 65 20 61 20 50 52 49 4d 41 52 59 20   have a PRIMARY 
13f0: 4b 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f  KEY or UNIQUE co
1400: 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c  nstraint.</li>.<
1410: 6c 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61  li>The column ma
1420: 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66  y not have a def
1430: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55  ault value of CU
1440: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
1450: 45 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f 72  ENT_DATE .    or
1460: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
1470: 4d 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 49 66 20  MP.</li>.<li>If 
1480: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
1490: 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69  raint is specifi
14a0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ed, then the col
14b0: 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a  umn must have a.
14c0: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
14d0: 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c  e other than NUL
14e0: 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68 65  L..</ul>..<p>The
14f0: 20 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65 20   execution time 
1500: 6f 66 20 74 68 65 20 41 4c 54 45 52 20 54 41 42  of the ALTER TAB
1510: 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  LE command is in
1520: 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68 65  dependent of.the
1530: 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20   amount of data 
1540: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  in the table.  T
1550: 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63  he ALTER TABLE c
1560: 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61 73 20 71  ommand runs as q
1570: 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62 6c  uickly.on a tabl
1580: 65 20 77 69 74 68 20 31 30 20 6d 69 6c 6c 69 6f  e with 10 millio
1590: 6e 20 72 6f 77 73 20 61 73 20 69 74 20 64 6f 65  n rows as it doe
15a0: 73 20 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74  s on a table wit
15b0: 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a 3c  h 1 row..</p>..<
15c0: 70 3e 41 66 74 65 72 20 41 44 44 20 43 4f 4c 55  p>After ADD COLU
15d0: 4d 4e 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  MN has been run 
15e0: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2c 20 74  on a database, t
15f0: 68 61 74 20 64 61 74 61 62 61 73 65 20 77 69 6c  hat database wil
1600: 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64 61 62 6c  l not.be readabl
1610: 65 20 62 79 20 53 51 4c 69 74 65 20 76 65 72 73  e by SQLite vers
1620: 69 6f 6e 20 33 2e 31 2e 33 20 61 6e 64 20 65 61  ion 3.1.3 and ea
1630: 72 6c 69 65 72 20 75 6e 74 69 6c 20 74 68 65 20  rlier until the 
1640: 64 61 74 61 62 61 73 65 0a 69 73 20 3c 61 20 68  database.is <a h
1650: 72 65 66 3d 22 6c 61 6e 67 5f 76 61 63 75 75 6d  ref="lang_vacuum
1660: 2e 68 74 6d 6c 22 3e 56 41 43 55 55 4d 3c 2f 61  .html">VACUUM</a
1670: 3e 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74  >ed.</p>.}..Sect
1680: 69 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e  ion {ANALYZE} an
1690: 61 6c 79 7a 65 0a 0a 53 79 6e 74 61 78 20 7b 73  alyze..Syntax {s
16a0: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
16b0: 20 20 41 4e 41 4c 59 5a 45 0a 7d 0a 53 79 6e 74    ANALYZE.}.Synt
16c0: 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e  ax {sql-statemen
16d0: 74 7d 20 7b 0a 20 20 41 4e 41 4c 59 5a 45 20 3c  t} {.  ANALYZE <
16e0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 0a 7d  database-name>.}
16f0: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61  .Syntax {sql-sta
1700: 74 65 6d 65 6e 74 7d 20 7b 0a 20 20 41 4e 41 4c  tement} {.  ANAL
1710: 59 5a 45 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e  YZE [<database-n
1720: 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e  ame> .] <table-n
1730: 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ame>.}..puts {.<
1740: 70 3e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f  p>The ANALYZE co
1750: 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74  mmand gathers st
1760: 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 69  atistics about i
1770: 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72 65  ndices and store
1780: 73 20 74 68 65 6d 0a 69 6e 20 61 20 73 70 65 63  s them.in a spec
1790: 69 61 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  ial tables in th
17a0: 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72 65  e database where
17b0: 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
17c0: 69 7a 65 72 20 63 61 6e 20 75 73 65 0a 74 68 65  izer can use.the
17d0: 6d 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  m to help make b
17e0: 65 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f 69  etter index choi
17f0: 63 65 73 2e 0a 49 66 20 6e 6f 20 61 72 67 75 6d  ces..If no argum
1800: 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20  ents are given, 
1810: 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
1820: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1830: 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a  bases are.analyz
1840: 65 64 2e 20 20 49 66 20 61 20 64 61 74 61 62 61  ed.  If a databa
1850: 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e  se name is given
1860: 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
1870: 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 69 6e  , all indices.in
1880: 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61   that one databa
1890: 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e  se are analyzed.
18a0: 20 20 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e    If the argumen
18b0: 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d  t is a table nam
18c0: 65 2c 0a 74 68 65 6e 20 6f 6e 6c 79 20 69 6e 64  e,.then only ind
18d0: 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ices associated 
18e0: 77 69 74 68 20 74 68 61 74 20 6f 6e 65 20 74 61  with that one ta
18f0: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
1900: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e  .</p>..<p>The in
1910: 69 74 69 61 6c 20 69 6d 70 6c 65 6d 65 6e 74 61  itial implementa
1920: 74 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20  tion stores all 
1930: 73 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20  statistics in a 
1940: 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d  single.table nam
1950: 65 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61  ed <b>sqlite_sta
1960: 74 31 3c 2f 62 3e 2e 20 20 46 75 74 75 72 65 20  t1</b>.  Future 
1970: 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61 79  enhancements may
1980: 20 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f 6e   create.addition
1990: 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 74  al tables with t
19a0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74  he same name pat
19b0: 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68  tern except with
19c0: 20 74 68 65 20 22 31 22 0a 63 68 61 6e 67 65 64   the "1".changed
19d0: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20   to a different 
19e0: 64 69 67 69 74 2e 20 20 54 68 65 20 3c 62 3e 73  digit.  The <b>s
19f0: 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62 3e 20  qlite_stat1</b> 
1a00: 74 61 62 6c 65 20 63 61 6e 6e 6f 74 0a 62 65 20  table cannot.be 
1a10: 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74 61  <a href="#dropta
1a20: 62 6c 65 22 3e 44 52 4f 50 3c 2f 61 3e 70 65 64  ble">DROP</a>ped
1a30: 2c 0a 62 75 74 20 69 74 20 61 6c 6c 20 74 68 65  ,.but it all the
1a40: 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 62 65 20   content can be 
1a50: 3c 61 20 68 72 65 66 3d 22 23 64 65 6c 65 74 65  <a href="#delete
1a60: 22 3e 44 45 4c 45 54 45 3c 2f 61 3e 64 20 77 68  ">DELETE</a>d wh
1a70: 69 63 68 20 68 61 73 20 74 68 65 0a 73 61 6d 65  ich has the.same
1a80: 20 65 66 66 65 63 74 2e 3c 2f 70 3e 0a 7d 0a 0a   effect.</p>.}..
1a90: 53 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20  Section {ATTACH 
1aa0: 44 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68  DATABASE} attach
1ab0: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  ..Syntax {sql-st
1ac0: 61 74 65 6d 65 6e 74 7d 20 7b 0a 41 54 54 41 43  atement} {.ATTAC
1ad0: 48 20 5b 44 41 54 41 42 41 53 45 5d 20 3c 64 61  H [DATABASE] <da
1ae0: 74 61 62 61 73 65 2d 66 69 6c 65 6e 61 6d 65 3e  tabase-filename>
1af0: 20 41 53 20 3c 64 61 74 61 62 61 73 65 2d 6e 61   AS <database-na
1b00: 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  me>.}..puts {.<p
1b10: 3e 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41  >The ATTACH DATA
1b20: 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61  BASE statement a
1b30: 64 64 73 20 61 20 70 72 65 65 78 69 73 74 69 6e  dds a preexistin
1b40: 67 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  g database .file
1b50: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
1b60: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1b70: 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 66 69 6c  ion.  If the fil
1b80: 65 6e 61 6d 65 20 63 6f 6e 74 61 69 6e 73 20 0a  ename contains .
1b90: 70 75 6e 63 74 75 61 74 69 6f 6e 20 63 68 61 72  punctuation char
1ba0: 61 63 74 65 72 73 20 69 74 20 6d 75 73 74 20 62  acters it must b
1bb0: 65 20 71 75 6f 74 65 64 2e 20 20 54 68 65 20 6e  e quoted.  The n
1bc0: 61 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20  ames 'main' and 
1bd0: 0a 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f  .'temp' refer to
1be0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1bf0: 73 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62  se and the datab
1c00: 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65  ase used for .te
1c10: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
1c20: 20 54 68 65 73 65 20 63 61 6e 6e 6f 74 20 62 65   These cannot be
1c30: 20 64 65 74 61 63 68 65 64 2e 20 20 41 74 74 61   detached.  Atta
1c40: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 0a  ched databases .
1c50: 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e  are removed usin
1c60: 67 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  g the <a href="#
1c70: 64 65 74 61 63 68 22 3e 44 45 54 41 43 48 20 44  detach">DETACH D
1c80: 41 54 41 42 41 53 45 3c 2f 61 3e 20 0a 73 74 61  ATABASE</a> .sta
1c90: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tement.</p>..<p>
1ca0: 59 6f 75 20 63 61 6e 20 72 65 61 64 20 66 72 6f  You can read fro
1cb0: 6d 20 61 6e 64 20 77 72 69 74 65 20 74 6f 20 61  m and write to a
1cc0: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1cd0: 61 73 65 20 61 6e 64 20 79 6f 75 0a 63 61 6e 20  ase and you.can 
1ce0: 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68 65 6d  modify the schem
1cf0: 61 20 6f 66 20 74 68 65 20 61 74 74 61 63 68 65  a of the attache
1d00: 64 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  d database.  Thi
1d10: 73 20 69 73 20 61 20 6e 65 77 0a 66 65 61 74 75  s is a new.featu
1d20: 72 65 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72  re of SQLite ver
1d30: 73 69 6f 6e 20 33 2e 30 2e 20 20 49 6e 20 53 51  sion 3.0.  In SQ
1d40: 4c 69 74 65 20 32 2e 38 2c 20 73 63 68 65 6d 61  Lite 2.8, schema
1d50: 20 63 68 61 6e 67 65 73 0a 74 6f 20 61 74 74 61   changes.to atta
1d60: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 77  ched databases w
1d70: 65 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e  ere not allowed.
1d80: 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e  </p>..<p>You can
1d90: 6e 6f 74 20 63 72 65 61 74 65 20 61 20 6e 65 77  not create a new
1da0: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
1db0: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 20 74  same name as a t
1dc0: 61 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74 74 61  able in .an atta
1dd0: 63 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 62  ched database, b
1de0: 75 74 20 79 6f 75 20 63 61 6e 20 61 74 74 61 63  ut you can attac
1df0: 68 20 61 20 64 61 74 61 62 61 73 65 20 77 68 69  h a database whi
1e00: 63 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c  ch contains.tabl
1e10: 65 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 61  es whose names a
1e20: 72 65 20 64 75 70 6c 69 63 61 74 65 73 20 6f 66  re duplicates of
1e30: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6d   tables in the m
1e40: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 49  ain database.  I
1e50: 74 20 69 73 20 0a 61 6c 73 6f 20 70 65 72 6d 69  t is .also permi
1e60: 73 73 69 62 6c 65 20 74 6f 20 61 74 74 61 63 68  ssible to attach
1e70: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
1e80: 73 65 20 66 69 6c 65 20 6d 75 6c 74 69 70 6c 65  se file multiple
1e90: 20 74 69 6d 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   times.</p>..<p>
1ea0: 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74  Tables in an att
1eb0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63  ached database c
1ec0: 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74  an be referred t
1ed0: 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74  o using the synt
1ee0: 61 78 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  ax .<i>database-
1ef0: 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c  name.table-name<
1f00: 2f 69 3e 2e 20 20 49 66 20 61 6e 20 61 74 74 61  /i>.  If an atta
1f10: 63 68 65 64 20 74 61 62 6c 65 20 64 6f 65 73 6e  ched table doesn
1f20: 27 74 20 68 61 76 65 20 0a 61 20 64 75 70 6c 69  't have .a dupli
1f30: 63 61 74 65 20 74 61 62 6c 65 20 6e 61 6d 65 20  cate table name 
1f40: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
1f50: 62 61 73 65 2c 20 69 74 20 64 6f 65 73 6e 27 74  base, it doesn't
1f60: 20 72 65 71 75 69 72 65 20 61 20 0a 64 61 74 61   require a .data
1f70: 62 61 73 65 20 6e 61 6d 65 20 70 72 65 66 69 78  base name prefix
1f80: 2e 20 20 57 68 65 6e 20 61 20 64 61 74 61 62 61  .  When a databa
1f90: 73 65 20 69 73 20 61 74 74 61 63 68 65 64 2c 20  se is attached, 
1fa0: 61 6c 6c 20 6f 66 20 69 74 73 20 0a 74 61 62 6c  all of its .tabl
1fb0: 65 73 20 77 68 69 63 68 20 64 6f 6e 27 74 20 68  es which don't h
1fc0: 61 76 65 20 64 75 70 6c 69 63 61 74 65 20 6e 61  ave duplicate na
1fd0: 6d 65 73 20 62 65 63 6f 6d 65 20 74 68 65 20 27  mes become the '
1fe0: 64 65 66 61 75 6c 74 27 20 74 61 62 6c 65 0a 6f  default' table.o
1ff0: 66 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 41 6e  f that name.  An
2000: 79 20 74 61 62 6c 65 73 20 6f 66 20 74 68 61 74  y tables of that
2010: 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20 61   name attached a
2020: 66 74 65 72 77 61 72 64 73 20 72 65 71 75 69 72  fterwards requir
2030: 65 20 74 68 65 20 74 61 62 6c 65 20 0a 70 72 65  e the table .pre
2040: 66 69 78 2e 20 49 66 20 74 68 65 20 27 64 65 66  fix. If the 'def
2050: 61 75 6c 74 27 20 74 61 62 6c 65 20 6f 66 20 61  ault' table of a
2060: 20 67 69 76 65 6e 20 6e 61 6d 65 20 69 73 20 64   given name is d
2070: 65 74 61 63 68 65 64 2c 20 74 68 65 6e 20 0a 74  etached, then .t
2080: 68 65 20 6c 61 73 74 20 74 61 62 6c 65 20 6f 66  he last table of
2090: 20 74 68 61 74 20 6e 61 6d 65 20 61 74 74 61 63   that name attac
20a0: 68 65 64 20 62 65 63 6f 6d 65 73 20 74 68 65 20  hed becomes the 
20b0: 6e 65 77 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e  new default.</p>
20c0: 0a 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f  ..<p>.Transactio
20d0: 6e 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  ns involving mul
20e0: 74 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64  tiple attached d
20f0: 61 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f  atabases are ato
2100: 6d 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68  mic,.assuming th
2110: 61 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  at the main data
2120: 62 61 73 65 20 69 73 20 6e 6f 74 20 22 3a 6d 65  base is not ":me
2130: 6d 6f 72 79 3a 22 2e 20 20 49 66 20 74 68 65 20  mory:".  If the 
2140: 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73  main.database is
2150: 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e   ":memory:" then
2160: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63   .transactions c
2170: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74  ontinue to be at
2180: 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68  omic within each
2190: 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61   individual.data
21a0: 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69  base file. But i
21b0: 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
21c0: 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74  ter crashes in t
21d0: 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 43  he middle.of a C
21e0: 4f 4d 4d 49 54 20 77 68 65 72 65 20 74 77 6f 20  OMMIT where two 
21f0: 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65  or more database
2200: 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74   files are updat
2210: 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73  ed,.some of thos
2220: 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65  e files might ge
2230: 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68  t the changes wh
2240: 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74  ere others.might
2250: 20 6e 6f 74 2e 0a 41 74 6f 6d 69 63 20 63 6f 6d   not..Atomic com
2260: 6d 69 74 20 6f 66 20 61 74 74 61 63 68 65 64 20  mit of attached 
2270: 64 61 74 61 62 61 73 65 73 20 69 73 20 61 20 6e  databases is a n
2280: 65 77 20 66 65 61 74 75 72 65 20 6f 66 20 53 51  ew feature of SQ
2290: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 30  Lite version 3.0
22a0: 2e 0a 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73  ..In SQLite vers
22b0: 69 6f 6e 20 32 2e 38 2c 20 61 6c 6c 20 63 6f 6d  ion 2.8, all com
22c0: 6d 69 74 73 20 74 6f 20 61 74 74 61 63 68 65 64  mits to attached
22d0: 20 64 61 74 61 62 61 73 65 73 20 62 65 68 61 76   databases behav
22e0: 65 64 20 61 73 20 69 66 0a 74 68 65 20 6d 61 69  ed as if.the mai
22f0: 6e 20 64 61 74 61 62 61 73 65 20 77 65 72 65 20  n database were 
2300: 22 3a 6d 65 6d 6f 72 79 3a 22 2e 0a 3c 2f 70 3e  ":memory:"..</p>
2310: 0a 0a 3c 70 3e 54 68 65 72 65 20 69 73 20 61 20  ..<p>There is a 
2320: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6c 69 6d  compile-time lim
2330: 69 74 20 6f 66 20 31 30 20 61 74 74 61 63 68 65  it of 10 attache
2340: 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  d database files
2350: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
2360: 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43  n {BEGIN TRANSAC
2370: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
2380: 6e 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  n..Syntax {sql-s
2390: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 42 45 47 49  tatement} {.BEGI
23a0: 4e 20 5b 20 44 45 46 45 52 52 45 44 20 7c 20 49  N [ DEFERRED | I
23b0: 4d 4d 45 44 49 41 54 45 20 7c 20 45 58 43 4c 55  MMEDIATE | EXCLU
23c0: 53 49 56 45 20 5d 20 5b 54 52 41 4e 53 41 43 54  SIVE ] [TRANSACT
23d0: 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a  ION [<name>]].}.
23e0: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
23f0: 65 6d 65 6e 74 7d 20 7b 0a 45 4e 44 20 5b 54 52  ement} {.END [TR
2400: 41 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65  ANSACTION [<name
2410: 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71  >]].}.Syntax {sq
2420: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43  l-statement} {.C
2430: 4f 4d 4d 49 54 20 5b 54 52 41 4e 53 41 43 54 49  OMMIT [TRANSACTI
2440: 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53  ON [<name>]].}.S
2450: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
2460: 6d 65 6e 74 7d 20 7b 0a 52 4f 4c 4c 42 41 43 4b  ment} {.ROLLBACK
2470: 20 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c   [TRANSACTION [<
2480: 6e 61 6d 65 3e 5d 5d 0a 7d 0a 0a 70 75 74 73 20  name>]].}..puts 
2490: 7b 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 69  {.<p>Beginning i
24a0: 6e 20 76 65 72 73 69 6f 6e 20 32 2e 30 2c 20 53  n version 2.0, S
24b0: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 74  QLite supports t
24c0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 77 69 74 68  ransactions with
24d0: 0a 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 61 74  .rollback and at
24e0: 6f 6d 69 63 20 63 6f 6d 6d 69 74 2e 3c 2f 70 3e  omic commit.</p>
24f0: 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
2500: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61  l transaction na
2510: 6d 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 53  me is ignored. S
2520: 51 4c 69 74 65 20 63 75 72 72 65 6e 74 6c 79 20  QLite currently 
2530: 0a 64 6f 65 73 20 6e 6f 74 20 61 6c 6c 6f 77 20  .does not allow 
2540: 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69  nested transacti
2550: 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 4e 6f  ons.</p>..<p>.No
2560: 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
2570: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
2580: 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74 68  base except with
2590: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
25a0: 2e 0a 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68  ..Any command th
25b0: 61 74 20 63 68 61 6e 67 65 73 20 74 68 65 20 64  at changes the d
25c0: 61 74 61 62 61 73 65 20 28 62 61 73 69 63 61 6c  atabase (basical
25d0: 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d  ly, any SQL comm
25e0: 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 53  and.other than S
25f0: 45 4c 45 43 54 29 20 77 69 6c 6c 20 61 75 74 6f  ELECT) will auto
2600: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20  matically start 
2610: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66  a transaction if
2620: 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65  .one is not alre
2630: 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20  ady in effect.  
2640: 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74  Automatically st
2650: 61 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  arted transactio
2660: 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64  ns.are committed
2670: 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69   at the conclusi
2680: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e  on of the comman
2690: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61  d..</p>..<p>.Tra
26a0: 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  nsactions can be
26b0: 20 73 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c   started manuall
26c0: 79 20 75 73 69 6e 67 20 74 68 65 20 42 45 47 49  y using the BEGI
26d0: 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20 53 75 63 68  N.command.  Such
26e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73   transactions us
26f0: 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e  ually persist un
2700: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d  til the next.COM
2710: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20  MIT or ROLLBACK 
2720: 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20  command.  But a 
2730: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c  transaction will
2740: 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20   also .ROLLBACK 
2750: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2760: 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20  is closed or if 
2770: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a  an error occurs.
2780: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
2790: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
27a0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
27b0: 73 20 73 70 65 63 69 66 69 65 64 2e 0a 53 65 65  s specified..See
27c0: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   the documentati
27d0: 6f 6e 20 6f 6e 20 74 68 65 20 3c 61 20 68 72 65  on on the <a hre
27e0: 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e  f="#conflict">ON
27f0: 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 0a 63 6c   CONFLICT</a>.cl
2800: 61 75 73 65 20 66 6f 72 20 61 64 64 69 74 69 6f  ause for additio
2810: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  nal information 
2820: 61 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42 41  about the ROLLBA
2830: 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CK.conflict reso
2840: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
2850: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 53  ..</p>..<p>.In S
2860: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
2870: 30 2e 38 20 61 6e 64 20 6c 61 74 65 72 2c 20 74  0.8 and later, t
2880: 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20  ransactions can 
2890: 62 65 20 64 65 66 65 72 72 65 64 2c 0a 69 6d 6d  be deferred,.imm
28a0: 65 64 69 61 74 65 2c 20 6f 72 20 65 78 63 6c 75  ediate, or exclu
28b0: 73 69 76 65 2e 20 20 44 65 66 65 72 72 65 64 20  sive.  Deferred 
28c0: 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f  means that no lo
28d0: 63 6b 73 20 61 72 65 20 61 63 71 75 69 72 65 64  cks are acquired
28e0: 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  .on the database
28f0: 20 75 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62   until the datab
2900: 61 73 65 20 69 73 20 66 69 72 73 74 20 61 63 63  ase is first acc
2910: 65 73 73 65 64 2e 20 20 54 68 75 73 20 77 69 74  essed.  Thus wit
2920: 68 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61  h a.deferred tra
2930: 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45  nsaction, the BE
2940: 47 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74  GIN statement it
2950: 73 65 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e  self does nothin
2960: 67 2e 20 20 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f  g.  Locks.are no
2970: 74 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c  t acquired until
2980: 20 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20   the first read 
2990: 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69  or write operati
29a0: 6f 6e 2e 20 20 54 68 65 20 66 69 72 73 74 20 72  on.  The first r
29b0: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
29c0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
29d0: 20 63 72 65 61 74 65 73 20 61 20 53 48 41 52 45   creates a SHARE
29e0: 44 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66  D lock and the f
29f0: 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61  irst.write opera
2a00: 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 52  tion creates a R
2a10: 45 53 45 52 56 45 44 20 6c 6f 63 6b 2e 20 20 20  ESERVED lock.   
2a20: 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71 75  Because the acqu
2a30: 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73  isition of.locks
2a40: 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74   is deferred unt
2a50: 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65 64  il they are need
2a60: 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62  ed, it is possib
2a70: 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a  le that another.
2a80: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
2a90: 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61  s could create a
2aa0: 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73 61   separate transa
2ab0: 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20  ction and write 
2ac0: 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  to.the database 
2ad0: 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e 20  after the BEGIN 
2ae0: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  on the current t
2af0: 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75 74  hread has execut
2b00: 65 64 2e 0a 49 66 20 74 68 65 20 74 72 61 6e 73  ed..If the trans
2b10: 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69  action is immedi
2b20: 61 74 65 2c 20 74 68 65 6e 20 52 45 53 45 52 56  ate, then RESERV
2b30: 45 44 20 6c 6f 63 6b 73 0a 61 72 65 20 61 63 71  ED locks.are acq
2b40: 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74  uired on all dat
2b50: 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e 20 61  abases as soon a
2b60: 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d 6d  s the BEGIN comm
2b70: 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65 64 2c  and is.executed,
2b80: 20 77 69 74 68 6f 75 74 20 77 61 69 74 69 6e 67   without waiting
2b90: 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62 61 73   for the.databas
2ba0: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20 20 41  e to be used.  A
2bb0: 66 74 65 72 20 61 20 42 45 47 49 4e 20 49 4d 4d  fter a BEGIN IMM
2bc0: 45 44 49 41 54 45 2c 20 79 6f 75 20 61 72 65 20  EDIATE, you are 
2bd0: 67 75 61 72 61 6e 74 65 65 64 20 74 68 61 74 0a  guaranteed that.
2be0: 6e 6f 20 6f 74 68 65 72 20 74 68 72 65 61 64 20  no other thread 
2bf0: 6f 72 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20  or process will 
2c00: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
2c10: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2c20: 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e 20 49   or.do a BEGIN I
2c30: 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45 47 49  MMEDIATE or BEGI
2c40: 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20 4f 74  N EXCLUSIVE.  Ot
2c50: 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 63 61  her processes ca
2c60: 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20 72 65  n continue.to re
2c70: 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ad from the data
2c80: 62 61 73 65 2c 20 68 6f 77 65 76 65 72 2e 20 20  base, however.  
2c90: 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74 72 61  An exclusive tra
2ca0: 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65 73 0a  nsaction causes.
2cb0: 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 73 20  EXCLUSIVE locks 
2cc0: 74 6f 20 62 65 20 61 63 71 75 69 72 65 64 20 6f  to be acquired o
2cd0: 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 2e  n all databases.
2ce0: 20 20 41 66 74 65 72 20 61 20 42 45 47 49 4e 0a    After a BEGIN.
2cf0: 45 58 43 4c 55 53 49 56 45 2c 20 79 6f 75 20 61  EXCLUSIVE, you a
2d00: 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 68  re guaranteed th
2d10: 61 74 20 6e 6f 20 6f 74 68 65 72 20 74 68 72 65  at no other thre
2d20: 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 77 69  ad or process wi
2d30: 6c 6c 0a 62 65 20 61 62 6c 65 20 74 6f 20 72 65  ll.be able to re
2d40: 61 64 20 6f 72 20 77 72 69 74 65 20 74 68 65 20  ad or write the 
2d50: 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74  database until t
2d60: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
2d70: 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e  s.complete..</p>
2d80: 0a 0a 3c 70 3e 0a 41 20 64 65 73 63 72 69 70 74  ..<p>.A descript
2d90: 69 6f 6e 20 6f 66 20 74 68 65 20 6d 65 61 6e 69  ion of the meani
2da0: 6e 67 20 6f 66 20 53 48 41 52 45 44 2c 20 52 45  ng of SHARED, RE
2db0: 53 45 52 56 45 44 2c 20 61 6e 64 20 45 58 43 4c  SERVED, and EXCL
2dc0: 55 53 49 56 45 20 6c 6f 63 6b 73 0a 69 73 20 61  USIVE locks.is a
2dd0: 76 61 69 6c 61 62 6c 65 20 3c 61 20 68 72 65 66  vailable <a href
2de0: 3d 22 6c 6f 63 6b 69 6e 67 76 33 2e 68 74 6d 6c  ="lockingv3.html
2df0: 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e  ">separately</a>
2e00: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
2e10: 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72  default behavior
2e20: 20 66 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73   for SQLite vers
2e30: 69 6f 6e 20 33 2e 30 2e 38 20 69 73 20 61 0a 64  ion 3.0.8 is a.d
2e40: 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74  eferred transact
2e50: 69 6f 6e 2e 20 20 46 6f 72 20 53 51 4c 69 74 65  ion.  For SQLite
2e60: 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e 30 20 74   version 3.0.0 t
2e70: 68 72 6f 75 67 68 20 33 2e 30 2e 37 2c 0a 64 65  hrough 3.0.7,.de
2e80: 66 65 72 72 65 64 20 69 73 20 74 68 65 20 6f 6e  ferred is the on
2e90: 6c 79 20 6b 69 6e 64 20 6f 66 20 74 72 61 6e 73  ly kind of trans
2ea0: 61 63 74 69 6f 6e 20 61 76 61 69 6c 61 62 6c 65  action available
2eb0: 2e 20 20 46 6f 72 20 53 51 4c 69 74 65 0a 76 65  .  For SQLite.ve
2ec0: 72 73 69 6f 6e 20 32 2e 38 20 61 6e 64 20 65 61  rsion 2.8 and ea
2ed0: 72 6c 69 65 72 2c 20 61 6c 6c 20 74 72 61 6e 73  rlier, all trans
2ee0: 61 63 74 69 6f 6e 73 20 61 72 65 20 65 78 63 6c  actions are excl
2ef0: 75 73 69 76 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  usive..</p>..<p>
2f00: 0a 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  .The COMMIT comm
2f10: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61 63 74  and does not act
2f20: 75 61 6c 6c 79 20 70 65 72 66 6f 72 6d 20 61 20  ually perform a 
2f30: 63 6f 6d 6d 69 74 20 75 6e 74 69 6c 20 61 6c 6c  commit until all
2f40: 0a 70 65 6e 64 69 6e 67 20 53 51 4c 20 63 6f 6d  .pending SQL com
2f50: 6d 61 6e 64 73 20 66 69 6e 69 73 68 2e 20 20 54  mands finish.  T
2f60: 68 75 73 20 69 66 20 74 77 6f 20 6f 72 20 6d 6f  hus if two or mo
2f70: 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  re SELECT statem
2f80: 65 6e 74 73 0a 61 72 65 20 69 6e 20 74 68 65 20  ents.are in the 
2f90: 6d 69 64 64 6c 65 20 6f 66 20 70 72 6f 63 65 73  middle of proces
2fa0: 73 69 6e 67 20 61 6e 64 20 61 20 43 4f 4d 4d 49  sing and a COMMI
2fb0: 54 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74  T is executed, t
2fc0: 68 65 20 63 6f 6d 6d 69 74 0a 77 69 6c 6c 20 6e  he commit.will n
2fd0: 6f 74 20 61 63 74 75 61 6c 6c 79 20 6f 63 63 75  ot actually occu
2fe0: 72 20 75 6e 74 69 6c 20 61 6c 6c 20 53 45 4c 45  r until all SELE
2ff0: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 66 69  CT statements fi
3000: 6e 69 73 68 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  nish..</p>..<p>.
3010: 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78  An attempt to ex
3020: 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67  ecute COMMIT mig
3030: 68 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  ht result in an 
3040: 53 51 4c 49 54 45 5f 42 55 53 59 20 72 65 74 75  SQLITE_BUSY retu
3050: 72 6e 20 63 6f 64 65 2e 0a 54 68 69 73 20 69 6e  rn code..This in
3060: 64 69 63 61 74 65 73 20 74 68 61 74 20 61 6e 6f  dicates that ano
3070: 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70  ther thread or p
3080: 72 6f 63 65 73 73 20 68 61 64 20 61 20 72 65 61  rocess had a rea
3090: 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
30a0: 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65 76  tabase.that prev
30b0: 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62 61  ented the databa
30c0: 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70  se from being up
30d0: 64 61 74 65 64 2e 20 20 57 68 65 6e 20 43 4f 4d  dated.  When COM
30e0: 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69  MIT fails in thi
30f0: 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73  s.way, the trans
3100: 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61  action remains a
3110: 63 74 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f  ctive and the CO
3120: 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65 74 72  MMIT can be retr
3130: 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20  ied later.after 
3140: 74 68 65 20 72 65 61 64 65 72 20 68 61 73 20 68  the reader has h
3150: 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63  ad a chance to c
3160: 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 0a 53  lear..</p>.}...S
3170: 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63  ection comment c
3180: 6f 6d 6d 65 6e 74 0a 0a 53 79 6e 74 61 78 20 7b  omment..Syntax {
3190: 63 6f 6d 6d 65 6e 74 7d 20 7b 3c 53 51 4c 2d 63  comment} {<SQL-c
31a0: 6f 6d 6d 65 6e 74 3e 20 7c 20 3c 43 2d 63 6f 6d  omment> | <C-com
31b0: 6d 65 6e 74 3e 0a 7d 20 7b 53 51 4c 2d 63 6f 6d  ment>.} {SQL-com
31c0: 6d 65 6e 74 7d 20 7b 2d 2d 20 3c 73 69 6e 67 6c  ment} {-- <singl
31d0: 65 2d 6c 69 6e 65 3e 0a 7d 20 7b 43 2d 63 6f 6d  e-line>.} {C-com
31e0: 6d 65 6e 74 7d 20 7b 2f 53 54 41 52 20 3c 6d 75  ment} {/STAR <mu
31f0: 6c 74 69 70 6c 65 2d 6c 69 6e 65 73 3e 20 5b 53  ltiple-lines> [S
3200: 54 41 52 2f 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a  TAR/].}..puts {.
3210: 3c 70 3e 20 43 6f 6d 6d 65 6e 74 73 20 61 72 65  <p> Comments are
3220: 6e 27 74 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  n't SQL commands
3230: 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75 72 20  , but can occur 
3240: 69 6e 20 53 51 4c 20 71 75 65 72 69 65 73 2e 20  in SQL queries. 
3250: 54 68 65 79 20 61 72 65 20 0a 74 72 65 61 74 65  They are .treate
3260: 64 20 61 73 20 77 68 69 74 65 73 70 61 63 65 20  d as whitespace 
3270: 62 79 20 74 68 65 20 70 61 72 73 65 72 2e 20 20  by the parser.  
3280: 54 68 65 79 20 63 61 6e 20 62 65 67 69 6e 20 61  They can begin a
3290: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
32a0: 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64  ce .can be found
32b0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  , including insi
32c0: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  de expressions t
32d0: 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c  hat span multipl
32e0: 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c  e lines..</p>..<
32f0: 70 3e 20 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20  p> SQL comments 
3300: 6f 6e 6c 79 20 65 78 74 65 6e 64 20 74 6f 20 74  only extend to t
3310: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 75  he end of the cu
3320: 72 72 65 6e 74 20 6c 69 6e 65 2e 3c 2f 70 3e 0a  rrent line.</p>.
3330: 0a 3c 70 3e 20 43 20 63 6f 6d 6d 65 6e 74 73 20  .<p> C comments 
3340: 63 61 6e 20 73 70 61 6e 20 61 6e 79 20 6e 75 6d  can span any num
3350: 62 65 72 20 6f 66 20 6c 69 6e 65 73 2e 20 20 49  ber of lines.  I
3360: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 74 65  f there is no te
3370: 72 6d 69 6e 61 74 69 6e 67 0a 64 65 6c 69 6d 69  rminating.delimi
3380: 74 65 72 2c 20 74 68 65 79 20 65 78 74 65 6e 64  ter, they extend
3390: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
33a0: 68 65 20 69 6e 70 75 74 2e 20 20 54 68 69 73 20  he input.  This 
33b0: 69 73 20 6e 6f 74 20 74 72 65 61 74 65 64 20 61  is not treated a
33c0: 73 0a 61 6e 20 65 72 72 6f 72 2e 20 20 41 20 6e  s.an error.  A n
33d0: 65 77 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ew SQL statement
33e0: 20 63 61 6e 20 62 65 67 69 6e 20 6f 6e 20 61 20   can begin on a 
33f0: 6c 69 6e 65 20 61 66 74 65 72 20 61 20 6d 75 6c  line after a mul
3400: 74 69 6c 69 6e 65 0a 63 6f 6d 6d 65 6e 74 20 65  tiline.comment e
3410: 6e 64 73 2e 20 20 43 20 63 6f 6d 6d 65 6e 74 73  nds.  C comments
3420: 20 63 61 6e 20 62 65 20 65 6d 62 65 64 64 65 64   can be embedded
3430: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
3440: 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a  pace can occur,.
3450: 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65  including inside
3460: 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6e   expressions, an
3470: 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  d in the middle 
3480: 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73 74 61  of other SQL sta
3490: 74 65 6d 65 6e 74 73 2e 0a 43 20 63 6f 6d 6d 65  tements..C comme
34a0: 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e  nts do not nest.
34b0: 20 20 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 69    SQL comments i
34c0: 6e 73 69 64 65 20 61 20 43 20 63 6f 6d 6d 65 6e  nside a C commen
34d0: 74 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  t will be ignore
34e0: 64 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74  d..</p>.}...Sect
34f0: 69 6f 6e 20 43 4f 50 59 20 63 6f 70 79 0a 0a 53  ion COPY copy..S
3500: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
3510: 6d 65 6e 74 7d 20 7b 0a 43 4f 50 59 20 5b 20 4f  ment} {.COPY [ O
3520: 52 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f  R <conflict-algo
3530: 72 69 74 68 6d 3e 20 5d 20 5b 3c 64 61 74 61 62  rithm> ] [<datab
3540: 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61  ase-name> .] <ta
3550: 62 6c 65 2d 6e 61 6d 65 3e 20 46 52 4f 4d 20 3c  ble-name> FROM <
3560: 66 69 6c 65 6e 61 6d 65 3e 0a 5b 20 55 53 49 4e  filename>.[ USIN
3570: 47 20 44 45 4c 49 4d 49 54 45 52 53 20 3c 64 65  G DELIMITERS <de
3580: 6c 69 6d 3e 20 5d 0a 7d 0a 0a 70 75 74 73 20 7b  lim> ].}..puts {
3590: 0a 3c 70 3e 54 68 65 20 43 4f 50 59 20 63 6f 6d  .<p>The COPY com
35a0: 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c  mand is availabl
35b0: 65 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  e in SQLite vers
35c0: 69 6f 6e 20 32 2e 38 20 61 6e 64 20 65 61 72 6c  ion 2.8 and earl
35d0: 69 65 72 2e 0a 54 68 65 20 43 4f 50 59 20 63 6f  ier..The COPY co
35e0: 6d 6d 61 6e 64 20 68 61 73 20 62 65 65 6e 20 72  mmand has been r
35f0: 65 6d 6f 76 65 64 20 66 72 6f 6d 20 53 51 4c 69  emoved from SQLi
3600: 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 30 20 64  te version 3.0 d
3610: 75 65 20 74 6f 0a 63 6f 6d 70 6c 69 63 61 74 69  ue to.complicati
3620: 6f 6e 73 20 69 6e 20 74 72 79 69 6e 67 20 74 6f  ons in trying to
3630: 20 73 75 70 70 6f 72 74 20 69 74 20 69 6e 20 61   support it in a
3640: 20 6d 69 78 65 64 20 55 54 46 2d 38 2f 31 36 20   mixed UTF-8/16 
3650: 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 0a 49 6e 20  environment..In 
3660: 76 65 72 73 69 6f 6e 20 33 2e 30 2c 20 74 68 65  version 3.0, the
3670: 20 3c 61 20 68 72 65 66 3d 22 73 71 6c 69 74 65   <a href="sqlite
3680: 2e 68 74 6d 6c 22 3e 63 6f 6d 6d 61 6e 64 2d 6c  .html">command-l
3690: 69 6e 65 20 73 68 65 6c 6c 3c 2f 61 3e 0a 63 6f  ine shell</a>.co
36a0: 6e 74 61 69 6e 73 20 61 20 6e 65 77 20 63 6f 6d  ntains a new com
36b0: 6d 61 6e 64 20 3c 62 3e 2e 69 6d 70 6f 72 74 3c  mand <b>.import<
36c0: 2f 62 3e 20 74 68 61 74 20 63 61 6e 20 62 65 20  /b> that can be 
36d0: 75 73 65 64 20 61 73 20 61 20 73 75 62 73 74 69  used as a substi
36e0: 74 75 74 65 0a 66 6f 72 20 43 4f 50 59 2e 0a 3c  tute.for COPY..<
36f0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 43 4f 50 59  /p>..<p>The COPY
3700: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 65   command is an e
3710: 78 74 65 6e 73 69 6f 6e 20 75 73 65 64 20 74 6f  xtension used to
3720: 20 6c 6f 61 64 20 6c 61 72 67 65 20 61 6d 6f 75   load large amou
3730: 6e 74 73 20 6f 66 0a 64 61 74 61 20 69 6e 74 6f  nts of.data into
3740: 20 61 20 74 61 62 6c 65 2e 20 20 49 74 20 69 73   a table.  It is
3750: 20 6d 6f 64 65 6c 65 64 20 61 66 74 65 72 20 61   modeled after a
3760: 20 73 69 6d 69 6c 61 72 20 63 6f 6d 6d 61 6e 64   similar command
3770: 20 66 6f 75 6e 64 0a 69 6e 20 50 6f 73 74 67 72   found.in Postgr
3780: 65 53 51 4c 2e 20 20 49 6e 20 66 61 63 74 2c 20  eSQL.  In fact, 
3790: 74 68 65 20 53 51 4c 69 74 65 20 43 4f 50 59 20  the SQLite COPY 
37a0: 63 6f 6d 6d 61 6e 64 20 69 73 20 73 70 65 63 69  command is speci
37b0: 66 69 63 61 6c 6c 79 0a 64 65 73 69 67 6e 65 64  fically.designed
37c0: 20 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 72   to be able to r
37d0: 65 61 64 20 74 68 65 20 6f 75 74 70 75 74 20 6f  ead the output o
37e0: 66 20 74 68 65 20 50 6f 73 74 67 72 65 53 51 4c  f the PostgreSQL
37f0: 20 64 75 6d 70 0a 75 74 69 6c 69 74 79 20 3c 62   dump.utility <b
3800: 3e 70 67 5f 64 75 6d 70 3c 2f 62 3e 20 73 6f 20  >pg_dump</b> so 
3810: 74 68 61 74 20 64 61 74 61 20 63 61 6e 20 62 65  that data can be
3820: 20 65 61 73 69 6c 79 20 74 72 61 6e 73 66 65 72   easily transfer
3830: 72 65 64 20 66 72 6f 6d 0a 50 6f 73 74 67 72 65  red from.Postgre
3840: 53 51 4c 20 69 6e 74 6f 20 53 51 4c 69 74 65 2e  SQL into SQLite.
3850: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 61 62  </p>..<p>The tab
3860: 6c 65 2d 6e 61 6d 65 20 69 73 20 74 68 65 20 6e  le-name is the n
3870: 61 6d 65 20 6f 66 20 61 6e 20 65 78 69 73 74 69  ame of an existi
3880: 6e 67 20 74 61 62 6c 65 20 77 68 69 63 68 20 69  ng table which i
3890: 73 20 74 6f 0a 62 65 20 66 69 6c 6c 65 64 20 77  s to.be filled w
38a0: 69 74 68 20 64 61 74 61 2e 20 20 54 68 65 20 66  ith data.  The f
38b0: 69 6c 65 6e 61 6d 65 20 69 73 20 61 20 73 74 72  ilename is a str
38c0: 69 6e 67 20 6f 72 20 69 64 65 6e 74 69 66 69 65  ing or identifie
38d0: 72 20 74 68 61 74 0a 6e 61 6d 65 73 20 61 20 66  r that.names a f
38e0: 69 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20 64  ile from which d
38f0: 61 74 61 20 77 69 6c 6c 20 62 65 20 72 65 61 64  ata will be read
3900: 2e 20 20 54 68 65 20 66 69 6c 65 6e 61 6d 65 20  .  The filename 
3910: 63 61 6e 20 62 65 0a 74 68 65 20 3c 62 3e 53 54  can be.the <b>ST
3920: 44 49 4e 3c 2f 62 3e 20 74 6f 20 72 65 61 64 20  DIN</b> to read 
3930: 64 61 74 61 20 66 72 6f 6d 20 73 74 61 6e 64 61  data from standa
3940: 72 64 20 69 6e 70 75 74 2e 3c 2f 70 3e 0a 0a 3c  rd input.</p>..<
3950: 70 3e 45 61 63 68 20 6c 69 6e 65 20 6f 66 20 74  p>Each line of t
3960: 68 65 20 69 6e 70 75 74 20 66 69 6c 65 20 69 73  he input file is
3970: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
3980: 61 20 73 69 6e 67 6c 65 20 72 65 63 6f 72 64 0a  a single record.
3990: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 43  in the table.  C
39a0: 6f 6c 75 6d 6e 73 20 61 72 65 20 73 65 70 61 72  olumns are separ
39b0: 61 74 65 64 20 62 79 20 74 61 62 73 2e 20 20 49  ated by tabs.  I
39c0: 66 20 61 20 74 61 62 20 6f 63 63 75 72 73 20 61  f a tab occurs a
39d0: 73 0a 64 61 74 61 20 77 69 74 68 69 6e 20 61 20  s.data within a 
39e0: 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 61  column, then tha
39f0: 74 20 74 61 62 20 69 73 20 70 72 65 63 65 64 65  t tab is precede
3a00: 64 20 62 79 20 61 20 62 61 73 6b 73 6c 61 73 68  d by a baskslash
3a10: 20 22 5c 22 0a 63 68 61 72 61 63 74 65 72 2e 20   "\".character. 
3a20: 20 41 20 62 61 73 6b 73 6c 61 73 68 20 69 6e 20   A baskslash in 
3a30: 74 68 65 20 64 61 74 61 20 61 70 70 65 61 72 73  the data appears
3a40: 20 61 73 20 74 77 6f 20 62 61 63 6b 73 6c 61 73   as two backslas
3a50: 68 65 73 20 69 6e 0a 61 20 72 6f 77 2e 20 20 54  hes in.a row.  T
3a60: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 55 53 49 4e  he optional USIN
3a70: 47 20 44 45 4c 49 4d 49 54 45 52 53 20 63 6c 61  G DELIMITERS cla
3a80: 75 73 65 20 63 61 6e 20 73 70 65 63 69 66 79 20  use can specify 
3a90: 61 20 64 65 6c 69 6d 69 74 65 72 0a 6f 74 68 65  a delimiter.othe
3aa0: 72 20 74 68 61 6e 20 74 61 62 2e 3c 2f 70 3e 0a  r than tab.</p>.
3ab0: 0a 3c 70 3e 49 66 20 61 20 63 6f 6c 75 6d 6e 20  .<p>If a column 
3ac0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
3ad0: 63 68 61 72 61 63 74 65 72 20 22 5c 4e 22 2c 20  character "\N", 
3ae0: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 66  that column is f
3af0: 69 6c 6c 65 64 0a 77 69 74 68 20 74 68 65 20 76  illed.with the v
3b00: 61 6c 75 65 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  alue NULL.</p>..
3b10: 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
3b20: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
3b30: 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69  allows the speci
3b40: 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61  fication of an a
3b50: 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74  lternative.const
3b60: 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
3b70: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
3b80: 74 68 6d 20 74 6f 20 75 73 65 20 66 6f 72 20 74  thm to use for t
3b90: 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e  his one command.
3ba0: 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e  .See the section
3bb0: 20 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d   titled.<a href=
3bc0: 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43  "#conflict">ON C
3bd0: 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20  ONFLICT</a> for 
3be0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
3bf0: 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mation.</p>..<p>
3c00: 57 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64  When the input d
3c10: 61 74 61 20 73 6f 75 72 63 65 20 69 73 20 53 54  ata source is ST
3c20: 44 49 4e 2c 20 74 68 65 20 69 6e 70 75 74 20 63  DIN, the input c
3c30: 61 6e 20 62 65 20 74 65 72 6d 69 6e 61 74 65 64  an be terminated
3c40: 0a 62 79 20 61 20 6c 69 6e 65 20 74 68 61 74 20  .by a line that 
3c50: 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 20 61 20  contains only a 
3c60: 62 61 73 6b 73 6c 61 73 68 20 61 6e 64 20 61 20  baskslash and a 
3c70: 64 6f 74 3a 7d 0a 70 75 74 73 20 22 5c 22 5b 4f  dot:}.puts "\"[O
3c80: 70 65 72 61 74 6f 72 20 5c 5c 2e 5d 5c 22 2e 3c  perator \\.]\".<
3c90: 2f 70 3e 22 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b  /p>"...Section {
3ca0: 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72  CREATE INDEX} cr
3cb0: 65 61 74 65 69 6e 64 65 78 0a 0a 53 79 6e 74 61  eateindex..Synta
3cc0: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
3cd0: 7d 20 7b 0a 43 52 45 41 54 45 20 5b 55 4e 49 51  } {.CREATE [UNIQ
3ce0: 55 45 5d 20 49 4e 44 45 58 20 5b 49 46 20 4e 4f  UE] INDEX [IF NO
3cf0: 54 20 45 58 49 53 54 53 5d 20 5b 3c 64 61 74 61  T EXISTS] [<data
3d00: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 69  base-name> .] <i
3d10: 6e 64 65 78 2d 6e 61 6d 65 3e 20 0a 4f 4e 20 3c  ndex-name> .ON <
3d20: 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 28 20 3c 63  table-name> ( <c
3d30: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e 20 5b 2c 20 3c  olumn-name> [, <
3d40: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e 5d 2a 20 29  column-name>]* )
3d50: 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 7d  .} {column-name}
3d60: 20 7b 0a 3c 6e 61 6d 65 3e 20 5b 20 43 4f 4c 4c   {.<name> [ COLL
3d70: 41 54 45 20 3c 63 6f 6c 6c 61 74 69 6f 6e 2d 6e  ATE <collation-n
3d80: 61 6d 65 3e 5d 20 5b 20 41 53 43 20 7c 20 44 45  ame>] [ ASC | DE
3d90: 53 43 20 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  SC ].}..puts {.<
3da0: 70 3e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44  p>The CREATE IND
3db0: 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69  EX command consi
3dc0: 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f  sts of the keywo
3dd0: 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45  rds "CREATE INDE
3de0: 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74  X" followed.by t
3df0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
3e00: 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65  ew index, the ke
3e10: 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20  yword "ON", the 
3e20: 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f  name of a previo
3e30: 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62  usly.created tab
3e40: 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
3e50: 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20   indexed, and a 
3e60: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
3e70: 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63  st of names of.c
3e80: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
3e90: 62 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65  ble that are use
3ea0: 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20  d for the index 
3eb0: 6b 65 79 2e 0a 45 61 63 68 20 63 6f 6c 75 6d 6e  key..Each column
3ec0: 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c   name can be fol
3ed0: 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66 20  lowed by one of 
3ee0: 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44 45  the "ASC" or "DE
3ef0: 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20  SC" keywords.to 
3f00: 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f 72  indicate sort or
3f10: 64 65 72 2c 20 62 75 74 20 74 68 65 20 73 6f 72  der, but the sor
3f20: 74 20 6f 72 64 65 72 20 69 73 20 69 67 6e 6f 72  t order is ignor
3f30: 65 64 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ed in the curren
3f40: 74 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t.implementation
3f50: 2e 20 20 53 6f 72 74 69 6e 67 20 69 73 20 61 6c  .  Sorting is al
3f60: 77 61 79 73 20 64 6f 6e 65 20 69 6e 20 61 73 63  ways done in asc
3f70: 65 6e 64 69 6e 67 20 6f 72 64 65 72 2e 3c 2f 70  ending order.</p
3f80: 3e 0a 0a 3c 70 3e 54 68 65 20 43 4f 4c 4c 41 54  >..<p>The COLLAT
3f90: 45 20 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 69  E clause followi
3fa0: 6e 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e  ng each column n
3fb0: 61 6d 65 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ame defines a co
3fc0: 6c 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65  llating.sequence
3fd0: 20 75 73 65 64 20 66 6f 72 20 74 65 78 74 20 65   used for text e
3fe0: 6e 74 69 72 65 73 20 69 6e 20 74 68 61 74 20 63  ntires in that c
3ff0: 6f 6c 75 6d 6e 2e 20 20 54 68 65 20 64 65 66 61  olumn.  The defa
4000: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65  ult collating.se
4010: 71 75 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f  quence is the co
4020: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
4030: 20 64 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61   defined for tha
4040: 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a  t column in the.
4050: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
4060: 74 65 6d 65 6e 74 2e 20 20 4f 72 20 69 66 20 6e  tement.  Or if n
4070: 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  o collating sequ
4080: 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69 73  ence is otherwis
4090: 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20 62  e defined,.the b
40a0: 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63  uilt-in BINARY c
40b0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
40c0: 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  e is used.</p>..
40d0: 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f 20  <p>There are no 
40e0: 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 73  arbitrary limits
40f0: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
4100: 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 63  f indices that c
4110: 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20 74  an be.attached t
4120: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
4130: 2c 20 6e 6f 72 20 6f 6e 20 74 68 65 20 6e 75 6d  , nor on the num
4140: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
4150: 6e 20 61 6e 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a  n an index.</p>.
4160: 0a 3c 70 3e 49 66 20 74 68 65 20 55 4e 49 51 55  .<p>If the UNIQU
4170: 45 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72  E keyword appear
4180: 73 20 62 65 74 77 65 65 6e 20 43 52 45 41 54 45  s between CREATE
4190: 20 61 6e 64 20 49 4e 44 45 58 20 74 68 65 6e 20   and INDEX then 
41a0: 64 75 70 6c 69 63 61 74 65 0a 69 6e 64 65 78 20  duplicate.index 
41b0: 65 6e 74 72 69 65 73 20 61 72 65 20 6e 6f 74 20  entries are not 
41c0: 61 6c 6c 6f 77 65 64 2e 20 20 41 6e 79 20 61 74  allowed.  Any at
41d0: 74 65 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20  tempt to insert 
41e0: 61 20 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72  a duplicate entr
41f0: 79 0a 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  y.will result in
4200: 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
4210: 3c 70 3e 54 68 65 20 65 78 61 63 74 20 74 65 78  <p>The exact tex
4220: 74 0a 6f 66 20 65 61 63 68 20 43 52 45 41 54 45  t.of each CREATE
4230: 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
4240: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
4250: 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74  e <b>sqlite_mast
4260: 65 72 3c 2f 62 3e 0a 6f 72 20 3c 62 3e 73 71 6c  er</b>.or <b>sql
4270: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 3c  ite_temp_master<
4280: 2f 62 3e 20 74 61 62 6c 65 2c 20 64 65 70 65 6e  /b> table, depen
4290: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
42a0: 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20  the table.being 
42b0: 69 6e 64 65 78 65 64 20 69 73 20 74 65 6d 70 6f  indexed is tempo
42c0: 72 61 72 79 2e 20 20 45 76 65 72 79 20 74 69 6d  rary.  Every tim
42d0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
42e0: 73 20 6f 70 65 6e 65 64 2c 0a 61 6c 6c 20 43 52  s opened,.all CR
42f0: 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
4300: 6d 65 6e 74 73 0a 61 72 65 20 72 65 61 64 20 66  ments.are read f
4310: 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71 6c 69 74  rom the <b>sqlit
4320: 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62  e_master</b> tab
4330: 6c 65 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  le and used to r
4340: 65 67 65 6e 65 72 61 74 65 0a 53 51 4c 69 74 65  egenerate.SQLite
4350: 27 73 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  's internal repr
4360: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
4370: 65 20 69 6e 64 65 78 20 6c 61 79 6f 75 74 2e 3c  e index layout.<
4380: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 6f  /p>..<p>If the o
4390: 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45  ptional IF NOT E
43a0: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
43b0: 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74  present and anot
43c0: 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74  her index.with t
43d0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 65  he same name ale
43e0: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
43f0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
4400: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
4410: 70 3e 0a 0a 3c 70 3e 49 6e 64 65 78 65 73 20 61  p>..<p>Indexes a
4420: 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20  re removed with 
4430: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 64 72  the <a href="#dr
4440: 6f 70 69 6e 64 65 78 22 3e 44 52 4f 50 20 49 4e  opindex">DROP IN
4450: 44 45 58 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64  DEX</a> .command
4460: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
4470: 6e 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d  n {CREATE TABLE}
4480: 20 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 0a 0a   {createtable}..
4490: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d  Syntax {sql-comm
44a0: 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54  and} {.CREATE [T
44b0: 45 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d  EMP | TEMPORARY]
44c0: 20 54 41 42 4c 45 20 5b 49 46 20 4e 4f 54 20 45   TABLE [IF NOT E
44d0: 58 49 53 54 53 5d 20 3c 74 61 62 6c 65 2d 6e 61  XISTS] <table-na
44e0: 6d 65 3e 20 28 0a 20 20 3c 63 6f 6c 75 6d 6e 2d  me> (.  <column-
44f0: 64 65 66 3e 20 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d  def> [, <column-
4500: 64 65 66 3e 5d 2a 0a 20 20 5b 2c 20 3c 63 6f 6e  def>]*.  [, <con
4510: 73 74 72 61 69 6e 74 3e 5d 2a 0a 29 0a 7d 20 7b  straint>]*.).} {
4520: 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43  sql-command} {.C
4530: 52 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45  REATE [TEMP | TE
4540: 4d 50 4f 52 41 52 59 5d 20 54 41 42 4c 45 20 5b  MPORARY] TABLE [
4550: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 2e  <database-name>.
4560: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 41  ] <table-name> A
4570: 53 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d  S <select-statem
4580: 65 6e 74 3e 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 64  ent>.} {column-d
4590: 65 66 7d 20 7b 0a 3c 6e 61 6d 65 3e 20 5b 3c 74  ef} {.<name> [<t
45a0: 79 70 65 3e 5d 20 5b 5b 43 4f 4e 53 54 52 41 49  ype>] [[CONSTRAI
45b0: 4e 54 20 3c 6e 61 6d 65 3e 5d 20 3c 63 6f 6c 75  NT <name>] <colu
45c0: 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 3e 5d 2a  mn-constraint>]*
45d0: 0a 7d 20 7b 74 79 70 65 7d 20 7b 0a 3c 74 79 70  .} {type} {.<typ
45e0: 65 6e 61 6d 65 3e 20 7c 0a 3c 74 79 70 65 6e 61  ename> |.<typena
45f0: 6d 65 3e 20 28 20 3c 6e 75 6d 62 65 72 3e 20 29  me> ( <number> )
4600: 20 7c 0a 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20   |.<typename> ( 
4610: 3c 6e 75 6d 62 65 72 3e 20 2c 20 3c 6e 75 6d 62  <number> , <numb
4620: 65 72 3e 20 29 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d  er> ).} {column-
4630: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0a 4e 4f  constraint} {.NO
4640: 54 20 4e 55 4c 4c 20 5b 20 3c 63 6f 6e 66 6c 69  T NULL [ <confli
4650: 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 50  ct-clause> ] |.P
4660: 52 49 4d 41 52 59 20 4b 45 59 20 5b 3c 73 6f 72  RIMARY KEY [<sor
4670: 74 2d 6f 72 64 65 72 3e 5d 20 5b 20 3c 63 6f 6e  t-order>] [ <con
4680: 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20  flict-clause> ] 
4690: 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20  [AUTOINCREMENT] 
46a0: 7c 0a 55 4e 49 51 55 45 20 5b 20 3c 63 6f 6e 66  |.UNIQUE [ <conf
46b0: 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c  lict-clause> ] |
46c0: 0a 43 48 45 43 4b 20 28 20 3c 65 78 70 72 3e 20  .CHECK ( <expr> 
46d0: 29 20 7c 0a 44 45 46 41 55 4c 54 20 3c 76 61 6c  ) |.DEFAULT <val
46e0: 75 65 3e 20 7c 0a 43 4f 4c 4c 41 54 45 20 3c 63  ue> |.COLLATE <c
46f0: 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 0a 7d  ollation-name>.}
4700: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0a   {constraint} {.
4710: 50 52 49 4d 41 52 59 20 4b 45 59 20 28 20 3c 63  PRIMARY KEY ( <c
4720: 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b 20  olumn-list> ) [ 
4730: 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  <conflict-clause
4740: 3e 20 5d 20 7c 0a 55 4e 49 51 55 45 20 28 20 3c  > ] |.UNIQUE ( <
4750: 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b  column-list> ) [
4760: 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   <conflict-claus
4770: 65 3e 20 5d 20 7c 0a 43 48 45 43 4b 20 28 20 3c  e> ] |.CHECK ( <
4780: 65 78 70 72 3e 20 29 0a 7d 20 7b 63 6f 6e 66 6c  expr> ).} {confl
4790: 69 63 74 2d 63 6c 61 75 73 65 7d 20 7b 0a 4f 4e  ict-clause} {.ON
47a0: 20 43 4f 4e 46 4c 49 43 54 20 3c 63 6f 6e 66 6c   CONFLICT <confl
47b0: 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 0a 7d  ict-algorithm>.}
47c0: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 41 20 43 52  ..puts {.<p>A CR
47d0: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
47e0: 6d 65 6e 74 20 69 73 20 62 61 73 69 63 61 6c 6c  ment is basicall
47f0: 79 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  y the keywords "
4800: 43 52 45 41 54 45 20 54 41 42 4c 45 22 0a 66 6f  CREATE TABLE".fo
4810: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6e 61  llowed by the na
4820: 6d 65 20 6f 66 20 61 20 6e 65 77 20 74 61 62 6c  me of a new tabl
4830: 65 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65  e and a parenthe
4840: 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  sized list of co
4850: 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 73  lumn.definitions
4860: 20 61 6e 64 20 63 6f 6e 73 74 72 61 69 6e 74 73   and constraints
4870: 2e 20 20 54 68 65 20 74 61 62 6c 65 20 6e 61 6d  .  The table nam
4880: 65 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  e can be either 
4890: 61 6e 20 69 64 65 6e 74 69 66 69 65 72 0a 6f 72  an identifier.or
48a0: 20 61 20 73 74 72 69 6e 67 2e 20 20 54 61 62 6c   a string.  Tabl
48b0: 65 73 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65  es names that be
48c0: 67 69 6e 20 77 69 74 68 20 22 3c 62 3e 73 71 6c  gin with "<b>sql
48d0: 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72 65  ite_</b>" are re
48e0: 73 65 72 76 65 64 0a 66 6f 72 20 75 73 65 20 62  served.for use b
48f0: 79 20 74 68 65 20 65 6e 67 69 6e 65 2e 3c 2f 70  y the engine.</p
4900: 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c 75 6d  >..<p>Each colum
4910: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20  n definition is 
4920: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
4930: 63 6f 6c 75 6d 6e 20 66 6f 6c 6c 6f 77 65 64 20  column followed 
4940: 62 79 20 74 68 65 0a 64 61 74 61 74 79 70 65 20  by the.datatype 
4950: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c  for that column,
4960: 20 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72   then one or mor
4970: 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  e optional colum
4980: 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54  n constraints..T
4990: 68 65 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  he datatype for 
49a0: 74 68 65 20 63 6f 6c 75 6d 6e 20 64 6f 65 73 20  the column does 
49b0: 6e 6f 74 20 72 65 73 74 72 69 63 74 20 77 68 61  not restrict wha
49c0: 74 20 64 61 74 61 20 6d 61 79 20 62 65 20 70 75  t data may be pu
49d0: 74 0a 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e  t.in that column
49e0: 2e 0a 53 65 65 20 3c 61 20 68 72 65 66 3d 22 64  ..See <a href="d
49f0: 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22 3e 44  atatype3.html">D
4a00: 61 74 61 74 79 70 65 73 20 49 6e 20 53 51 4c 69  atatypes In SQLi
4a10: 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f 61 3e  te Version 3</a>
4a20: 20 66 6f 72 0a 61 64 64 69 74 69 6f 6e 61 6c 20   for.additional 
4a30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 54 68 65  information..The
4a40: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
4a50: 6e 74 20 63 61 75 73 65 73 20 61 6e 20 69 6e 64  nt causes an ind
4a60: 65 78 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  ex to be created
4a70: 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65   on the specifie
4a80: 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 69 73  d.columns.  This
4a90: 20 69 6e 64 65 78 20 6d 75 73 74 20 63 6f 6e 74   index must cont
4aa0: 61 69 6e 20 75 6e 69 71 75 65 20 6b 65 79 73 2e  ain unique keys.
4ab0: 0a 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61  .The COLLATE cla
4ac0: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 77 68  use specifies wh
4ad0: 61 74 20 74 65 78 74 20 3c 61 20 68 72 65 66 3d  at text <a href=
4ae0: 22 64 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 23  "datatype3.html#
4af0: 63 6f 6c 6c 61 74 69 6f 6e 22 3e 0a 63 6f 6c 6c  collation">.coll
4b00: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 3c 2f  ating function</
4b10: 61 3e 20 74 6f 20 75 73 65 20 77 68 65 6e 20 63  a> to use when c
4b20: 6f 6d 70 61 72 69 6e 67 20 74 65 78 74 20 65 6e  omparing text en
4b30: 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 6f  tries for the co
4b40: 6c 75 6d 6e 2e 20 20 0a 54 68 65 20 62 75 69 6c  lumn.  .The buil
4b50: 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c  t-in BINARY coll
4b60: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  ating function i
4b70: 73 20 75 73 65 64 20 62 79 20 64 65 66 61 75 6c  s used by defaul
4b80: 74 2e 0a 3c 70 3e 0a 54 68 65 20 44 45 46 41 55  t..<p>.The DEFAU
4b90: 4c 54 20 63 6f 6e 73 74 72 61 69 6e 74 20 73 70  LT constraint sp
4ba0: 65 63 69 66 69 65 73 20 61 20 64 65 66 61 75 6c  ecifies a defaul
4bb0: 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 77  t value to use w
4bc0: 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 49 4e 53  hen doing an INS
4bd0: 45 52 54 2e 0a 54 68 65 20 76 61 6c 75 65 20 6d  ERT..The value m
4be0: 61 79 20 62 65 20 4e 55 4c 4c 2c 20 61 20 73 74  ay be NULL, a st
4bf0: 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72  ring constant or
4c00: 20 61 20 6e 75 6d 62 65 72 2e 20 53 74 61 72 74   a number. Start
4c10: 69 6e 67 20 77 69 74 68 20 76 65 72 73 69 6f 6e  ing with version
4c20: 0a 33 2e 31 2e 30 2c 20 74 68 65 20 64 65 66 61  .3.1.0, the defa
4c30: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
4c40: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
4c50: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
4c60: 64 65 70 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72  dependant.keywor
4c70: 64 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds CURRENT_TIME,
4c80: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
4c90: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
4ca0: 4d 50 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  MP. If the value
4cb0: 20 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69   is.NULL, a stri
4cc0: 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e  ng constant or n
4cd0: 75 6d 62 65 72 2c 20 69 74 20 69 73 20 6c 69 74  umber, it is lit
4ce0: 65 72 61 6c 6c 79 20 69 6e 73 65 72 74 65 64 20  erally inserted 
4cf0: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 0a  into the column.
4d00: 77 68 65 6e 65 76 65 72 20 61 6e 20 49 4e 53 45  whenever an INSE
4d10: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  RT statement tha
4d20: 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 65 63 69  t does not speci
4d30: 66 79 20 61 20 76 61 6c 75 65 20 66 6f 72 20 74  fy a value for t
4d40: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 0a 65 78 65  he column is.exe
4d50: 63 75 74 65 64 2e 20 49 66 20 74 68 65 20 76 61  cuted. If the va
4d60: 6c 75 65 20 69 73 20 43 55 52 52 45 4e 54 5f 54  lue is CURRENT_T
4d70: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
4d80: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
4d90: 45 53 54 41 4d 50 2c 20 74 68 65 6e 0a 74 68 65  ESTAMP, then.the
4da0: 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74   current UTC dat
4db0: 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73  e and/or time is
4dc0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
4dd0: 68 65 20 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 0a  he columns. For.
4de0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68  CURRENT_TIME, th
4df0: 65 20 66 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d  e format is HH:M
4e00: 4d 3a 53 53 2e 20 46 6f 72 20 43 55 52 52 45 4e  M:SS. For CURREN
4e10: 54 5f 44 41 54 45 2c 20 59 59 59 59 2d 4d 4d 2d  T_DATE, YYYY-MM-
4e20: 44 44 2e 20 54 68 65 20 66 6f 72 6d 61 74 0a 66  DD. The format.f
4e30: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
4e40: 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d  TAMP is "YYYY-MM
4e50: 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c  -DD HH:MM:SS"..<
4e60: 2f 70 3e 0a 0a 3c 70 3e 53 70 65 63 69 66 79 69  /p>..<p>Specifyi
4e70: 6e 67 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  ng a PRIMARY KEY
4e80: 20 6e 6f 72 6d 61 6c 6c 79 20 6a 75 73 74 20 63   normally just c
4e90: 72 65 61 74 65 73 20 61 20 55 4e 49 51 55 45 20  reates a UNIQUE 
4ea0: 69 6e 64 65 78 0a 6f 6e 20 74 68 65 20 63 6f 72  index.on the cor
4eb0: 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d  responding colum
4ec0: 6e 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  ns.  However, if
4ed0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
4ee0: 6f 6e 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  on a single colu
4ef0: 6d 6e 0a 74 68 61 74 20 68 61 73 20 64 61 74 61  mn.that has data
4f00: 74 79 70 65 20 49 4e 54 45 47 45 52 2c 20 74 68  type INTEGER, th
4f10: 65 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  en that column i
4f20: 73 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  s used internall
4f30: 79 0a 61 73 20 74 68 65 20 61 63 74 75 61 6c 20  y.as the actual 
4f40: 6b 65 79 20 6f 66 20 74 68 65 20 42 2d 54 72 65  key of the B-Tre
4f50: 65 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e  e for the table.
4f60: 20 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61    This means tha
4f70: 74 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 6d 61 79  t the column.may
4f80: 20 6f 6e 6c 79 20 68 6f 6c 64 20 75 6e 69 71 75   only hold uniqu
4f90: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
4fa0: 2e 20 20 28 45 78 63 65 70 74 20 66 6f 72 20 74  .  (Except for t
4fb0: 68 69 73 20 6f 6e 65 20 63 61 73 65 2c 0a 53 51  his one case,.SQ
4fc0: 4c 69 74 65 20 69 67 6e 6f 72 65 73 20 74 68 65  Lite ignores the
4fd0: 20 64 61 74 61 74 79 70 65 20 73 70 65 63 69 66   datatype specif
4fe0: 69 63 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  ication of colum
4ff0: 6e 73 20 61 6e 64 20 61 6c 6c 6f 77 73 0a 61 6e  ns and allows.an
5000: 79 20 6b 69 6e 64 20 6f 66 20 64 61 74 61 20 74  y kind of data t
5010: 6f 20 62 65 20 70 75 74 20 69 6e 20 61 20 63 6f  o be put in a co
5020: 6c 75 6d 6e 20 72 65 67 61 72 64 6c 65 73 73 20  lumn regardless 
5030: 6f 66 20 69 74 73 20 64 65 63 6c 61 72 65 64 0a  of its declared.
5040: 64 61 74 61 74 79 70 65 2e 29 20 20 49 66 20 61  datatype.)  If a
5050: 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20   table does not 
5060: 68 61 76 65 20 61 6e 20 49 4e 54 45 47 45 52 20  have an INTEGER 
5070: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
5080: 6d 6e 2c 0a 74 68 65 6e 20 74 68 65 20 42 2d 54  mn,.then the B-T
5090: 72 65 65 20 6b 65 79 20 77 69 6c 6c 20 62 65 20  ree key will be 
50a0: 61 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  a automatically 
50b0: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
50c0: 72 2e 20 20 54 68 65 0a 42 2d 54 72 65 65 20 6b  r.  The.B-Tree k
50d0: 65 79 20 66 6f 72 20 61 20 72 6f 77 20 63 61 6e  ey for a row can
50e0: 20 61 6c 77 61 79 73 20 62 65 20 61 63 63 65 73   always be acces
50f0: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
5100: 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d   the.special nam
5110: 65 73 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  es "<b>ROWID</b>
5120: 22 2c 20 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ", "<b>OID</b>",
5130: 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
5140: 2f 62 3e 22 2e 0a 54 68 69 73 20 69 73 20 74 72  /b>"..This is tr
5150: 75 65 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ue regardless of
5160: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
5170: 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 54 45  there is an INTE
5180: 47 45 52 0a 50 52 49 4d 41 52 59 20 4b 45 59 2e  GER.PRIMARY KEY.
5190: 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49    An INTEGER PRI
51a0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20  MARY KEY column 
51b0: 6d 61 6e 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65  man also include
51c0: 20 74 68 65 0a 6b 65 79 77 6f 72 64 20 41 55 54   the.keyword AUT
51d0: 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 54 68 65  OINCREMENT.  The
51e0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 6b   AUTOINCREMENT k
51f0: 65 79 77 6f 72 64 20 6d 6f 64 69 66 69 65 64 20  eyword modified 
5200: 74 68 65 20 77 61 79 0a 74 68 61 74 20 42 2d 54  the way.that B-T
5210: 72 65 65 20 6b 65 79 73 20 61 72 65 20 61 75 74  ree keys are aut
5220: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
5230: 61 74 65 64 2e 20 20 41 64 64 69 74 69 6f 6e 61  ated.  Additiona
5240: 6c 20 64 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f  l detail.on auto
5250: 6d 61 74 69 63 20 42 2d 54 72 65 65 20 6b 65 79  matic B-Tree key
5260: 20 67 65 6e 65 72 61 74 69 6f 6e 20 69 73 20 61   generation is a
5270: 76 61 69 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66  vailable.<a href
5280: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
5290: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
52a0: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 22  /p>..<p>If the "
52b0: 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52  TEMP" or "TEMPOR
52c0: 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63  ARY" keyword occ
52d0: 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22  urs in between "
52e0: 43 52 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42  CREATE".and "TAB
52f0: 4c 45 22 20 74 68 65 6e 20 74 68 65 20 74 61 62  LE" then the tab
5300: 6c 65 20 74 68 61 74 20 69 73 20 63 72 65 61 74  le that is creat
5310: 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62  ed is only visib
5320: 6c 65 0a 77 69 74 68 69 6e 20 74 68 61 74 20 73  le.within that s
5330: 61 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ame database con
5340: 6e 65 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20 61  nection.and is a
5350: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
5360: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
5370: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5380: 6e 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 41 6e  n is closed.  An
5390: 79 20 69 6e 64 69 63 65 73 20 63 72 65 61 74 65  y indices create
53a0: 64 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  d on a temporary
53b0: 20 74 61 62 6c 65 0a 61 72 65 20 61 6c 73 6f 20   table.are also 
53c0: 74 65 6d 70 6f 72 61 72 79 2e 20 20 54 65 6d 70  temporary.  Temp
53d0: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
53e0: 20 69 6e 64 69 63 65 73 20 61 72 65 20 73 74 6f   indices are sto
53f0: 72 65 64 20 69 6e 20 61 0a 73 65 70 61 72 61 74  red in a.separat
5400: 65 20 66 69 6c 65 20 64 69 73 74 69 6e 63 74 20  e file distinct 
5410: 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e 20 64 61  from the main da
5420: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
5430: 0a 0a 3c 70 3e 20 49 66 20 61 20 26 6c 74 3b 64  ..<p> If a &lt;d
5440: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
5450: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
5460: 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73  hen the table is
5470: 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68 65   created in .the
5480: 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e   named database.
5490: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
54a0: 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20  to specify both 
54b0: 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  a &lt;database-n
54c0: 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65 20  ame&gt;.and the 
54d0: 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20 75 6e  TEMP keyword, un
54e0: 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61 74  less the &lt;dat
54f0: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
5500: 73 20 22 74 65 6d 70 22 2e 20 49 66 20 6e 6f 0a  s "temp". If no.
5510: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
5520: 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20   specified, and 
5530: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
5540: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c   is not present,
5550: 0a 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 72  .the table is cr
5560: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
5570: 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  n database.</p>.
5580: 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
5590: 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65   conflict-clause
55a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20   following each 
55b0: 63 6f 6e 73 74 72 61 69 6e 74 0a 61 6c 6c 6f 77  constraint.allow
55c0: 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74  s the specificat
55d0: 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e  ion of an altern
55e0: 61 74 69 76 65 20 64 65 66 61 75 6c 74 0a 63 6f  ative default.co
55f0: 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
5600: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
5610: 6f 72 69 74 68 6d 20 66 6f 72 20 74 68 61 74 20  orithm for that 
5620: 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 54 68 65 20  constraint..The 
5630: 64 65 66 61 75 6c 74 20 69 73 20 61 62 6f 72 74  default is abort
5640: 20 41 42 4f 52 54 2e 20 20 44 69 66 66 65 72 65   ABORT.  Differe
5650: 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  nt constraints w
5660: 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 74  ithin the same.t
5670: 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69  able may have di
5680: 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20  fferent default 
5690: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
56a0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a  ion algorithms..
56b0: 49 66 20 61 6e 20 43 4f 50 59 2c 20 49 4e 53 45  If an COPY, INSE
56c0: 52 54 2c 20 6f 72 20 55 50 44 41 54 45 20 63 6f  RT, or UPDATE co
56d0: 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65 73 20  mmand specifies 
56e0: 61 20 64 69 66 66 65 72 65 6e 74 20 63 6f 6e 66  a different conf
56f0: 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  lict.resolution 
5700: 61 6c 67 6f 72 69 74 68 6d 2c 20 74 68 65 6e 20  algorithm, then 
5710: 74 68 61 74 20 61 6c 67 6f 72 69 74 68 6d 20 69  that algorithm i
5720: 73 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  s used in place 
5730: 6f 66 20 74 68 65 0a 64 65 66 61 75 6c 74 20 61  of the.default a
5740: 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
5750: 65 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  ed in the CREATE
5760: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
5770: 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
5780: 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66  n titled.<a href
5790: 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20  ="#conflict">ON 
57a0: 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72  CONFLICT</a> for
57b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
57c0: 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70  rmation.</p>..<p
57d0: 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  >CHECK constrain
57e0: 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
57f0: 20 61 73 20 6f 66 20 76 65 72 73 69 6f 6e 20 33   as of version 3
5800: 2e 33 2e 30 2e 20 20 50 72 69 6f 72 0a 74 6f 20  .3.0.  Prior.to 
5810: 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43  version 3.3.0, C
5820: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
5830: 20 77 65 72 65 20 70 61 72 73 65 64 20 62 75 74   were parsed but
5840: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64 2e 3c 2f   not enforced.</
5850: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  p>..<p>There are
5860: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69   no arbitrary li
5870: 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62  mits on the numb
5880: 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72  er.of columns or
5890: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
58a0: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e  f constraints in
58b0: 20 61 20 74 61 62 6c 65 2e 0a 54 68 65 20 74 6f   a table..The to
58c0: 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61  tal amount of da
58d0: 74 61 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ta in a single r
58e0: 6f 77 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f  ow is limited to
58f0: 20 61 62 6f 75 74 0a 31 20 6d 65 67 61 62 79 74   about.1 megabyt
5900: 65 73 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e  es in version 2.
5910: 38 2e 20 20 49 6e 20 76 65 72 73 69 6f 6e 20 33  8.  In version 3
5920: 2e 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 61  .0 there is no a
5930: 72 62 69 74 72 61 72 79 0a 6c 69 6d 69 74 20 6f  rbitrary.limit o
5940: 6e 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  n the amount of 
5950: 64 61 74 61 20 69 6e 20 61 20 72 6f 77 2e 3c 2f  data in a row.</
5960: 70 3e 0a 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41  p>...<p>The CREA
5970: 54 45 20 54 41 42 4c 45 20 41 53 20 66 6f 72 6d  TE TABLE AS form
5980: 20 64 65 66 69 6e 65 73 20 74 68 65 20 74 61 62   defines the tab
5990: 6c 65 20 74 6f 20 62 65 0a 74 68 65 20 72 65 73  le to be.the res
59a0: 75 6c 74 20 73 65 74 20 6f 66 20 61 20 71 75 65  ult set of a que
59b0: 72 79 2e 20 20 54 68 65 20 6e 61 6d 65 73 20 6f  ry.  The names o
59c0: 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75  f the table colu
59d0: 6d 6e 73 20 61 72 65 0a 74 68 65 20 6e 61 6d 65  mns are.the name
59e0: 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
59f0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c   in the result.<
5a00: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 65 78 61 63  /p>..<p>The exac
5a10: 74 20 74 65 78 74 0a 6f 66 20 65 61 63 68 20 43  t text.of each C
5a20: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
5a30: 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20  ement is stored 
5a40: 69 6e 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65  in the <b>sqlite
5a50: 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 74 61 62 6c  _master</b>.tabl
5a60: 65 2e 20 20 45 76 65 72 79 20 74 69 6d 65 20 74  e.  Every time t
5a70: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
5a80: 70 65 6e 65 64 2c 20 61 6c 6c 20 43 52 45 41 54  pened, all CREAT
5a90: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
5aa0: 74 73 0a 61 72 65 20 72 65 61 64 20 66 72 6f 6d  ts.are read from
5ab0: 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d   the <b>sqlite_m
5ac0: 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20  aster</b> table 
5ad0: 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 67 65  and used to rege
5ae0: 6e 65 72 61 74 65 0a 53 51 4c 69 74 65 27 73 20  nerate.SQLite's 
5af0: 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
5b00: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74  ntation of the t
5b10: 61 62 6c 65 20 6c 61 79 6f 75 74 2e 0a 49 66 20  able layout..If 
5b20: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d  the original com
5b30: 6d 61 6e 64 20 77 61 73 20 61 20 43 52 45 41 54  mand was a CREAT
5b40: 45 20 54 41 42 4c 45 20 41 53 20 74 68 65 6e 20  E TABLE AS then 
5b50: 74 68 65 6e 20 61 6e 20 65 71 75 69 76 61 6c 65  then an equivale
5b60: 6e 74 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  nt.CREATE TABLE 
5b70: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 79 6e  statement is syn
5b80: 74 68 65 73 69 7a 65 64 20 61 6e 64 20 73 74 6f  thesized and sto
5b90: 72 65 20 69 6e 20 3c 62 3e 73 71 6c 69 74 65 5f  re in <b>sqlite_
5ba0: 6d 61 73 74 65 72 3c 2f 62 3e 0a 69 6e 20 70 6c  master</b>.in pl
5bb0: 61 63 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ace of the origi
5bc0: 6e 61 6c 20 63 6f 6d 6d 61 6e 64 2e 0a 54 68 65  nal command..The
5bd0: 20 74 65 78 74 20 6f 66 20 43 52 45 41 54 45 20   text of CREATE 
5be0: 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20  TEMPORARY TABLE 
5bf0: 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 73  statements are s
5c00: 74 6f 72 65 64 20 69 6e 20 74 68 65 0a 3c 62 3e  tored in the.<b>
5c10: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
5c20: 65 72 3c 2f 62 3e 20 74 61 62 6c 65 2e 0a 3c 2f  er</b> table..</
5c30: 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 6f 70  p>..<p>If the op
5c40: 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58  tional IF NOT EX
5c50: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
5c60: 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68  resent and anoth
5c70: 65 72 20 74 61 62 6c 65 0a 77 69 74 68 20 74 68  er table.with th
5c80: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 65 61  e same name alea
5c90: 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20  dy exists, then 
5ca0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63  this command bec
5cb0: 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70  omes a no-op.</p
5cc0: 3e 0a 0a 3c 70 3e 54 61 62 6c 65 73 20 61 72 65  >..<p>Tables are
5cd0: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
5ce0: 68 65 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f  he <a href="#dro
5cf0: 70 74 61 62 6c 65 22 3e 44 52 4f 50 20 54 41 42  ptable">DROP TAB
5d00: 4c 45 3c 2f 61 3e 20 0a 73 74 61 74 65 6d 65 6e  LE</a> .statemen
5d10: 74 2e 20 20 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63  t.  </p>.}...Sec
5d20: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49  tion {CREATE TRI
5d30: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
5d40: 67 65 72 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ger..Syntax {sql
5d50: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 52  -statement} {.CR
5d60: 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d  EATE [TEMP | TEM
5d70: 50 4f 52 41 52 59 5d 20 54 52 49 47 47 45 52 20  PORARY] TRIGGER 
5d80: 3c 74 72 69 67 67 65 72 2d 6e 61 6d 65 3e 20 5b  <trigger-name> [
5d90: 20 42 45 46 4f 52 45 20 7c 20 41 46 54 45 52 20   BEFORE | AFTER 
5da0: 5d 0a 3c 64 61 74 61 62 61 73 65 2d 65 76 65 6e  ].<database-even
5db0: 74 3e 20 4f 4e 20 5b 3c 64 61 74 61 62 61 73 65  t> ON [<database
5dc0: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
5dd0: 2d 6e 61 6d 65 3e 0a 3c 74 72 69 67 67 65 72 2d  -name>.<trigger-
5de0: 61 63 74 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74 61  action>.}..Synta
5df0: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
5e00: 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50  } {.CREATE [TEMP
5e10: 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 54 52   | TEMPORARY] TR
5e20: 49 47 47 45 52 20 3c 74 72 69 67 67 65 72 2d 6e  IGGER <trigger-n
5e30: 61 6d 65 3e 20 49 4e 53 54 45 41 44 20 4f 46 0a  ame> INSTEAD OF.
5e40: 3c 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74 3e  <database-event>
5e50: 20 4f 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e   ON [<database-n
5e60: 61 6d 65 3e 20 2e 5d 20 3c 76 69 65 77 2d 6e 61  ame> .] <view-na
5e70: 6d 65 3e 0a 3c 74 72 69 67 67 65 72 2d 61 63 74  me>.<trigger-act
5e80: 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b  ion>.}..Syntax {
5e90: 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74 7d 20  database-event} 
5ea0: 7b 0a 44 45 4c 45 54 45 20 7c 20 0a 49 4e 53 45  {.DELETE | .INSE
5eb0: 52 54 20 7c 20 0a 55 50 44 41 54 45 20 7c 20 0a  RT | .UPDATE | .
5ec0: 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d  UPDATE OF <colum
5ed0: 6e 2d 6c 69 73 74 3e 0a 7d 0a 0a 53 79 6e 74 61  n-list>.}..Synta
5ee0: 78 20 7b 74 72 69 67 67 65 72 2d 61 63 74 69 6f  x {trigger-actio
5ef0: 6e 7d 20 7b 0a 5b 20 46 4f 52 20 45 41 43 48 20  n} {.[ FOR EACH 
5f00: 52 4f 57 20 7c 20 46 4f 52 20 45 41 43 48 20 53  ROW | FOR EACH S
5f10: 54 41 54 45 4d 45 4e 54 20 5d 20 5b 20 57 48 45  TATEMENT ] [ WHE
5f20: 4e 20 3c 65 78 70 72 65 73 73 69 6f 6e 3e 20 5d  N <expression> ]
5f30: 20 0a 42 45 47 49 4e 20 0a 20 20 3c 74 72 69 67   .BEGIN .  <trig
5f40: 67 65 72 2d 73 74 65 70 3e 20 3b 20 5b 20 3c 74  ger-step> ; [ <t
5f50: 72 69 67 67 65 72 2d 73 74 65 70 3e 20 3b 20 5d  rigger-step> ; ]
5f60: 2a 0a 45 4e 44 0a 7d 0a 0a 53 79 6e 74 61 78 20  *.END.}..Syntax 
5f70: 7b 74 72 69 67 67 65 72 2d 73 74 65 70 7d 20 7b  {trigger-step} {
5f80: 0a 3c 75 70 64 61 74 65 2d 73 74 61 74 65 6d 65  .<update-stateme
5f90: 6e 74 3e 20 7c 20 3c 69 6e 73 65 72 74 2d 73 74  nt> | <insert-st
5fa0: 61 74 65 6d 65 6e 74 3e 20 7c 20 0a 3c 64 65 6c  atement> | .<del
5fb0: 65 74 65 2d 73 74 61 74 65 6d 65 6e 74 3e 20 7c  ete-statement> |
5fc0: 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65   <select-stateme
5fd0: 6e 74 3e 20 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  nt> .}..puts {.<
5fe0: 70 3e 54 68 65 20 43 52 45 41 54 45 20 54 52 49  p>The CREATE TRI
5ff0: 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69  GGER statement i
6000: 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 74 72  s used to add tr
6010: 69 67 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64  iggers to the .d
6020: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
6030: 54 72 69 67 67 65 72 73 20 61 72 65 20 64 61 74  Triggers are dat
6040: 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73  abase operations
6050: 20 28 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72   (the <i>trigger
6060: 2d 61 63 74 69 6f 6e 3c 2f 69 3e 29 20 0a 74 68  -action</i>) .th
6070: 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  at are automatic
6080: 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77  ally performed w
6090: 68 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20  hen a specified 
60a0: 64 61 74 61 62 61 73 65 20 65 76 65 6e 74 20 28  database event (
60b0: 74 68 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  the.<i>database-
60c0: 65 76 65 6e 74 3c 2f 69 3e 29 20 6f 63 63 75 72  event</i>) occur
60d0: 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 74  s.  </p>..<p>A t
60e0: 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70  rigger may be sp
60f0: 65 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20  ecified to fire 
6100: 77 68 65 6e 65 76 65 72 20 61 20 44 45 4c 45 54  whenever a DELET
6110: 45 2c 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  E, INSERT or UPD
6120: 41 54 45 20 6f 66 20 61 0a 70 61 72 74 69 63 75  ATE of a.particu
6130: 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61 62  lar database tab
6140: 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68  le occurs, or wh
6150: 65 6e 65 76 65 72 20 61 6e 20 55 50 44 41 54 45  enever an UPDATE
6160: 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a   of one or more.
6170: 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e  specified column
6180: 73 20 6f 66 20 61 20 74 61 62 6c 65 20 61 72 65  s of a table are
6190: 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   updated.</p>..<
61a0: 70 3e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53  p>At this time S
61b0: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f  QLite supports o
61c0: 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57  nly FOR EACH ROW
61d0: 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46   triggers, not F
61e0: 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e  OR EACH.STATEMEN
61f0: 54 20 74 72 69 67 67 65 72 73 2e 20 48 65 6e 63  T triggers. Henc
6200: 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65  e explicitly spe
6210: 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48  cifying FOR EACH
6220: 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c   ROW is optional
6230: 2e 20 20 46 4f 52 0a 45 41 43 48 20 52 4f 57 20  .  FOR.EACH ROW 
6240: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
6250: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
6260: 73 70 65 63 69 66 69 65 64 20 61 73 20 3c 69 3e  specified as <i>
6270: 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69  trigger-steps</i
6280: 3e 20 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74  > .may be execut
6290: 65 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ed (depending on
62a0: 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
62b0: 29 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  ) for each datab
62c0: 61 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e  ase row being.in
62d0: 73 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20  serted, updated 
62e0: 6f 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  or deleted by th
62f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
6300: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
6310: 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70  to fire.</p>..<p
6320: 3e 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63  >Both the WHEN c
6330: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 3c 69  lause and the <i
6340: 3e 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f  >trigger-steps</
6350: 69 3e 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c  i> may access el
6360: 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72  ements of .the r
6370: 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65  ow being inserte
6380: 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70  d, deleted or up
6390: 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65  dated using refe
63a0: 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f  rences of the fo
63b0: 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75  rm ."NEW.<i>colu
63c0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64  mn-name</i>" and
63d0: 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d   "OLD.<i>column-
63e0: 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65  name</i>", where
63f0: 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
6400: 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  /i> is the name 
6410: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  of a column from
6420: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
6430: 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61  the trigger.is a
6440: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20  ssociated with. 
6450: 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65  OLD and NEW refe
6460: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
6470: 62 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67  be used in trigg
6480: 65 72 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67 65  ers on.<i>trigge
6490: 72 2d 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f 72  r-event</i>s for
64a0: 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20   which they are 
64b0: 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c  relevant, as fol
64c0: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  lows:</p>..<tabl
64d0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
64e0: 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a  adding=10>.<tr>.
64f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
6500: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77   align="right" w
6510: 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45  idth=120><i>INSE
6520: 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20  RT</i></td>.<td 
6530: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57  valign="top">NEW
6540: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
6550: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
6560: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
6570: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
6580: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
6590: 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64  i>UPDATE</i></td
65a0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
65b0: 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72  p">NEW and OLD r
65c0: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
65d0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
65e0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
65f0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
6600: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
6610: 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  DELETE</i></td>.
6620: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
6630: 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20  >OLD references 
6640: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
6650: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
6660: 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45 4e  p>..<p>If a WHEN
6670: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
6680: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
6690: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
66a0: 64 20 61 73 20 3c 69 3e 74 72 69 67 67 65 72 2d  d as <i>trigger-
66b0: 73 74 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f 6e  steps</i> are on
66c0: 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  ly executed for 
66d0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
66e0: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69  he WHEN clause i
66f0: 73 20 74 72 75 65 2e 20 49 66 20 6e 6f 20 57 48  s true. If no WH
6700: 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70  EN clause is sup
6710: 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73  plied, the SQL s
6720: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78  tatements are ex
6730: 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72  ecuted for all r
6740: 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ows.</p>..<p>The
6750: 20 73 70 65 63 69 66 69 65 64 20 3c 69 3e 74 72   specified <i>tr
6760: 69 67 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20 64  igger-time</i> d
6770: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74  etermines when t
6780: 68 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74  he <i>trigger-st
6790: 65 70 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65 20  eps</i>.will be 
67a0: 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76  executed relativ
67b0: 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69  e to the inserti
67c0: 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  on, modification
67d0: 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74   or removal of t
67e0: 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f  he.associated ro
67f0: 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 4f 4e  w.</p>..<p>An ON
6800: 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
6810: 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65   may be specifie
6820: 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
6830: 55 50 44 41 54 45 20 6f 72 20 49 4e 53 45 52 54  UPDATE or INSERT
6840: 0a 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70  .<i>trigger-step
6850: 3c 2f 69 3e 2e 20 48 6f 77 65 76 65 72 20 69 66  </i>. However if
6860: 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   an ON CONFLICT 
6870: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
6880: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a  ied as part of .
6890: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61  the statement ca
68a0: 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  using the trigge
68b0: 72 20 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20  r to fire, then 
68c0: 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 68 61  this conflict ha
68d0: 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 69 73  ndling.policy is
68e0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f   used instead.</
68f0: 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73 20  p>..<p>Triggers 
6900: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
6910: 79 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74  y dropped when t
6920: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
6930: 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74  ey are .associat
6940: 65 64 20 77 69 74 68 20 69 73 20 64 72 6f 70 70  ed with is dropp
6950: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67  ed.</p>..<p>Trig
6960: 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65 61  gers may be crea
6970: 74 65 64 20 6f 6e 20 76 69 65 77 73 2c 20 61 73  ted on views, as
6980: 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72   well as ordinar
6990: 79 20 74 61 62 6c 65 73 2c 20 62 79 20 73 70 65  y tables, by spe
69a0: 63 69 66 79 69 6e 67 0a 49 4e 53 54 45 41 44 20  cifying.INSTEAD 
69b0: 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  OF in the CREATE
69c0: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
69d0: 6e 74 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f  nt. If one or mo
69e0: 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e  re ON INSERT, ON
69f0: 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50   DELETE.or ON UP
6a00: 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61 72  DATE triggers ar
6a10: 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76  e defined on a v
6a20: 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20  iew, then it is 
6a30: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  not an error to 
6a40: 65 78 65 63 75 74 65 0a 61 6e 20 49 4e 53 45 52  execute.an INSER
6a50: 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  T, DELETE or UPD
6a60: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e  ATE statement on
6a70: 20 74 68 65 20 76 69 65 77 2c 20 72 65 73 70 65   the view, respe
6a80: 63 74 69 76 65 6c 79 2e 20 54 68 65 72 65 61 66  ctively. Thereaf
6a90: 74 65 72 2c 0a 65 78 65 63 75 74 69 6e 67 20 61  ter,.executing a
6aa0: 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
6ab0: 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68   or UPDATE on th
6ac0: 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74 68  e view causes th
6ad0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 20 74  e associated.  t
6ae0: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e  riggers to fire.
6af0: 20 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73   The real tables
6b00: 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20   underlying the 
6b10: 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64  view are not mod
6b20: 69 66 69 65 64 0a 20 20 28 65 78 63 65 70 74 20  ified.  (except 
6b30: 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69  possibly explici
6b40: 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67 65  tly, by a trigge
6b50: 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a  r program).</p>.
6b60: 0a 3c 70 3e 3c 62 3e 45 78 61 6d 70 6c 65 3a 3c  .<p><b>Example:<
6b70: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 73 75  /b></p>..<p>Assu
6b80: 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d  ming that custom
6b90: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
6ba0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63 75  tored in the "cu
6bb0: 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20  stomers" table, 
6bc0: 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72  and.that order r
6bd0: 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65  ecords are store
6be0: 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73  d in the "orders
6bf0: 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c  " table, the fol
6c00: 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65  lowing trigger.e
6c10: 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20  nsures that all 
6c20: 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72  associated order
6c30: 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64  s are redirected
6c40: 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72   when a customer
6c50: 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20   changes.his or 
6c60: 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e  her address:</p>
6c70: 0a 7d 0a 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45  .}.Example {.CRE
6c80: 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64 61  ATE TRIGGER upda
6c90: 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  te_customer_addr
6ca0: 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61 64  ess UPDATE OF ad
6cb0: 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65  dress ON custome
6cc0: 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20  rs .  BEGIN.    
6cd0: 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45  UPDATE orders SE
6ce0: 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e  T address = new.
6cf0: 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75  address WHERE cu
6d00: 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c  stomer_name = ol
6d10: 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d  d.name;.  END;.}
6d20: 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 69 74 68 20  .puts {.<p>With 
6d30: 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e 73  this trigger ins
6d40: 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e  talled, executin
6d50: 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a  g the statement:
6d60: 3c 2f 70 3e 0a 7d 0a 0a 45 78 61 6d 70 6c 65 20  </p>.}..Example 
6d70: 7b 0a 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65  {.UPDATE custome
6d80: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
6d90: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
6da0: 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b  ERE name = 'Jack
6db0: 20 4a 6f 6e 65 73 27 3b 0a 7d 0a 70 75 74 73 20   Jones';.}.puts 
6dc0: 7b 0a 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20  {.<p>causes the 
6dd0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20  following to be 
6de0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78  automatically ex
6df0: 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 7d 0a 45 78  ecuted:</p>.}.Ex
6e00: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f  ample {.UPDATE o
6e10: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
6e20: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
6e30: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
6e40: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
6e50: 65 73 27 3b 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  es';.}..puts {.<
6e60: 70 3e 4e 6f 74 65 20 74 68 61 74 20 63 75 72 72  p>Note that curr
6e70: 65 6e 74 6c 79 2c 20 74 72 69 67 67 65 72 73 20  ently, triggers 
6e80: 6d 61 79 20 62 65 68 61 76 65 20 6f 64 64 6c 79  may behave oddly
6e90: 20 77 68 65 6e 20 63 72 65 61 74 65 64 20 6f 6e   when created on
6ea0: 20 74 61 62 6c 65 73 0a 20 20 77 69 74 68 20 49   tables.  with I
6eb0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
6ec0: 45 59 20 66 69 65 6c 64 73 2e 20 49 66 20 61 20  EY fields. If a 
6ed0: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20 70  BEFORE trigger p
6ee0: 72 6f 67 72 61 6d 20 6d 6f 64 69 66 69 65 73 20  rogram modifies 
6ef0: 74 68 65 20 0a 20 20 49 4e 54 45 47 45 52 20 50  the .  INTEGER P
6f00: 52 49 4d 41 52 59 20 4b 45 59 20 66 69 65 6c 64  RIMARY KEY field
6f10: 20 6f 66 20 61 20 72 6f 77 20 74 68 61 74 20 77   of a row that w
6f20: 69 6c 6c 20 62 65 20 73 75 62 73 65 71 75 65 6e  ill be subsequen
6f30: 74 6c 79 20 75 70 64 61 74 65 64 20 62 79 20 74  tly updated by t
6f40: 68 65 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 74  he.  statement t
6f50: 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20 74  hat causes the t
6f60: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20  rigger to fire, 
6f70: 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 20  then the update 
6f80: 6d 61 79 20 6e 6f 74 20 6f 63 63 75 72 2e 20 0a  may not occur. .
6f90: 20 20 54 68 65 20 77 6f 72 6b 61 72 6f 75 6e 64    The workaround
6fa0: 20 69 73 20 74 6f 20 64 65 63 6c 61 72 65 20 74   is to declare t
6fb0: 68 65 20 74 61 62 6c 65 20 77 69 74 68 20 61 20  he table with a 
6fc0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
6fd0: 6d 6e 20 69 6e 73 74 65 61 64 0a 20 20 6f 66 20  mn instead.  of 
6fe0: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
6ff0: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 3c 2f  RY KEY column.</
7000: 70 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  p>.}..puts {.<p>
7010: 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75  A special SQL fu
7020: 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d  nction RAISE() m
7030: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 69  ay be used withi
7040: 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  n a trigger-prog
7050: 72 61 6d 2c 20 77 69 74 68 20 74 68 65 20 66 6f  ram, with the fo
7060: 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f  llowing syntax</
7070: 70 3e 20 0a 7d 0a 53 79 6e 74 61 78 20 7b 72 61  p> .}.Syntax {ra
7080: 69 73 65 2d 66 75 6e 63 74 69 6f 6e 7d 20 7b 0a  ise-function} {.
7090: 52 41 49 53 45 20 28 20 41 42 4f 52 54 2c 20 3c  RAISE ( ABORT, <
70a0: 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20 29  error-message> )
70b0: 20 7c 20 0a 52 41 49 53 45 20 28 20 46 41 49 4c   | .RAISE ( FAIL
70c0: 2c 20 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65  , <error-message
70d0: 3e 20 29 20 7c 20 0a 52 41 49 53 45 20 28 20 52  > ) | .RAISE ( R
70e0: 4f 4c 4c 42 41 43 4b 2c 20 3c 65 72 72 6f 72 2d  OLLBACK, <error-
70f0: 6d 65 73 73 61 67 65 3e 20 29 20 7c 20 0a 52 41  message> ) | .RA
7100: 49 53 45 20 28 20 49 47 4e 4f 52 45 20 29 0a 7d  ISE ( IGNORE ).}
7110: 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 68 65 6e 20  .puts {.<p>When 
7120: 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  one of the first
7130: 20 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20   three forms is 
7140: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72  called during tr
7150: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 20 65 78  igger-program ex
7160: 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65  ecution, the spe
7170: 63 69 66 69 65 64 20 4f 4e 20 43 4f 4e 46 4c 49  cified ON CONFLI
7180: 43 54 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  CT processing is
7190: 20 70 65 72 66 6f 72 6d 65 64 20 28 65 69 74 68   performed (eith
71a0: 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f  er ABORT, FAIL o
71b0: 72 20 0a 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e  r . ROLLBACK) an
71c0: 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 71 75  d the current qu
71d0: 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 20  ery terminates. 
71e0: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  An error code of
71f0: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
7200: 4e 54 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  NT is returned t
7210: 6f 20 74 68 65 20 75 73 65 72 2c 20 61 6c 6f 6e  o the user, alon
7220: 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  g with the speci
7230: 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61  fied error messa
7240: 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e  ge.</p>..<p>When
7250: 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69   RAISE(IGNORE) i
7260: 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65  s called, the re
7270: 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63  mainder of the c
7280: 75 72 72 65 6e 74 20 74 72 69 67 67 65 72 20 70  urrent trigger p
7290: 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74  rogram,.the stat
72a0: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
72b0: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
72c0: 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
72d0: 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75   and any subsequ
72e0: 65 6e 74 0a 20 20 20 20 74 72 69 67 67 65 72 20  ent.    trigger 
72f0: 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f  programs that wo
7300: 75 6c 64 20 6f 66 20 62 65 65 6e 20 65 78 65 63  uld of been exec
7310: 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e  uted are abandon
7320: 65 64 2e 20 4e 6f 20 64 61 74 61 62 61 73 65 0a  ed. No database.
7330: 20 20 20 20 63 68 61 6e 67 65 73 20 61 72 65 20      changes are 
7340: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 49 66  rolled back.  If
7350: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
7360: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74  hat caused the t
7370: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 20  rigger program. 
7380: 20 20 20 74 6f 20 65 78 65 63 75 74 65 20 69 73     to execute is
7390: 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20   itself part of 
73a0: 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  a trigger progra
73b0: 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69  m, then that tri
73c0: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 20 20 20  gger program.   
73d0: 20 72 65 73 75 6d 65 73 20 65 78 65 63 75 74 69   resumes executi
73e0: 6f 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  on at the beginn
73f0: 69 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20  ing of the next 
7400: 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  step..</p>..<p>T
7410: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d 6f  riggers are remo
7420: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 3c 61  ved using the <a
7430: 20 68 72 65 66 3d 22 23 64 72 6f 70 74 72 69 67   href="#droptrig
7440: 67 65 72 22 3e 44 52 4f 50 20 54 52 49 47 47 45  ger">DROP TRIGGE
7450: 52 3c 2f 61 3e 0a 73 74 61 74 65 6d 65 6e 74 2e  R</a>.statement.
7460: 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e  </p>.}...Section
7470: 20 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 7b   {CREATE VIEW} {
7480: 63 72 65 61 74 65 76 69 65 77 7d 0a 0a 53 79 6e  createview}..Syn
7490: 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64  tax {sql-command
74a0: 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50  } {.CREATE [TEMP
74b0: 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 56 49   | TEMPORARY] VI
74c0: 45 57 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  EW [<database-na
74d0: 6d 65 3e 2e 5d 20 3c 76 69 65 77 2d 6e 61 6d 65  me>.] <view-name
74e0: 3e 20 41 53 20 3c 73 65 6c 65 63 74 2d 73 74 61  > AS <select-sta
74f0: 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20  tement>.}..puts 
7500: 7b 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20  {.<p>The CREATE 
7510: 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73  VIEW command ass
7520: 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61  igns a name to a
7530: 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 3c   pre-packaged .<
7540: 61 20 68 72 65 66 3d 22 23 73 65 6c 65 63 74 22  a href="#select"
7550: 3e 53 45 4c 45 43 54 3c 2f 61 3e 0a 73 74 61 74  >SELECT</a>.stat
7560: 65 6d 65 6e 74 2e 20 20 4f 6e 63 65 20 74 68 65  ement.  Once the
7570: 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64   view is created
7580: 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64  , it can be used
7590: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
75a0: 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 53  use.of another S
75b0: 45 4c 45 43 54 20 69 6e 20 70 6c 61 63 65 20 6f  ELECT in place o
75c0: 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a  f a table name..
75d0: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
75e0: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
75f0: 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
7600: 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
7610: 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49  "CREATE".and "VI
7620: 45 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65  EW" then the vie
7630: 77 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  w that is create
7640: 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c  d is only visibl
7650: 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73  e to the.process
7660: 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65   that opened the
7670: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 69 73   database and is
7680: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
7690: 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20  eleted when.the 
76a0: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
76b0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20  ed.</p>..<p> If 
76c0: 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  a &lt;database-n
76d0: 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69  ame&gt; is speci
76e0: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76  fied, then the v
76f0: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69  iew is created i
7700: 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74  n .the named dat
7710: 61 62 61 73 65 2e 20 49 74 20 69 73 20 61 6e 20  abase. It is an 
7720: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
7730: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
7740: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
7750: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
7760: 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26  rd, unless the &
7770: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
7780: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
7790: 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e  If no.database n
77a0: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
77b0: 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  , and the TEMP k
77c0: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
77d0: 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65  esent,.the table
77e0: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
77f0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
7800: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61  .</p>..<p>You ca
7810: 6e 6e 6f 74 20 43 4f 50 59 2c 20 44 45 4c 45 54  nnot COPY, DELET
7820: 45 2c 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  E, INSERT or UPD
7830: 41 54 45 20 61 20 76 69 65 77 2e 20 20 56 69 65  ATE a view.  Vie
7840: 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79  ws are read-only
7850: 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 48 6f   .in SQLite.  Ho
7860: 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63  wever, in many c
7870: 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65  ases you can use
7880: 20 61 20 3c 61 20 68 72 65 66 3d 22 23 63 72 65   a <a href="#cre
7890: 61 74 65 74 72 69 67 67 65 72 22 3e 0a 54 52 49  atetrigger">.TRI
78a0: 47 47 45 52 3c 2f 61 3e 20 6f 6e 20 74 68 65 20  GGER</a> on the 
78b0: 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69  view to accompli
78c0: 73 68 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  sh the same thin
78d0: 67 2e 20 20 56 69 65 77 73 20 61 72 65 20 72 65  g.  Views are re
78e0: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
78f0: 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 76 69  <a href="#dropvi
7900: 65 77 22 3e 44 52 4f 50 20 56 49 45 57 3c 2f 61  ew">DROP VIEW</a
7910: 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  > .command.</p>.
7920: 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45  }...Section DELE
7930: 54 45 20 64 65 6c 65 74 65 0a 0a 53 79 6e 74 61  TE delete..Synta
7940: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
7950: 7d 20 7b 0a 44 45 4c 45 54 45 20 46 52 4f 4d 20  } {.DELETE FROM 
7960: 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e  [<database-name>
7970: 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e   .] <table-name>
7980: 20 5b 57 48 45 52 45 20 3c 65 78 70 72 3e 5d 0a   [WHERE <expr>].
7990: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
79a0: 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20   DELETE command 
79b0: 69 73 20 75 73 65 64 20 74 6f 20 72 65 6d 6f 76  is used to remov
79c0: 65 20 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 61  e records from a
79d0: 20 74 61 62 6c 65 2e 0a 54 68 65 20 63 6f 6d 6d   table..The comm
79e0: 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  and consists of 
79f0: 74 68 65 20 22 44 45 4c 45 54 45 20 46 52 4f 4d  the "DELETE FROM
7a00: 22 20 6b 65 79 77 6f 72 64 73 20 66 6f 6c 6c 6f  " keywords follo
7a10: 77 65 64 20 62 79 0a 74 68 65 20 6e 61 6d 65 20  wed by.the name 
7a20: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 66 72 6f  of the table fro
7a30: 6d 20 77 68 69 63 68 20 72 65 63 6f 72 64 73 20  m which records 
7a40: 61 72 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  are to be remove
7a50: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68  d..</p>..<p>With
7a60: 6f 75 74 20 61 20 57 48 45 52 45 20 63 6c 61 75  out a WHERE clau
7a70: 73 65 2c 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20  se, all rows of 
7a80: 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 72 65  the table are re
7a90: 6d 6f 76 65 64 2e 0a 49 66 20 61 20 57 48 45 52  moved..If a WHER
7aa0: 45 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70  E clause is supp
7ab0: 6c 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  lied, then only 
7ac0: 74 68 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20  those rows that 
7ad0: 6d 61 74 63 68 0a 74 68 65 20 65 78 70 72 65 73  match.the expres
7ae0: 73 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  sion are removed
7af0: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
7b00: 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41  n {DETACH DATABA
7b10: 53 45 7d 20 64 65 74 61 63 68 0a 0a 53 79 6e 74  SE} detach..Synt
7b20: 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d  ax {sql-command}
7b30: 20 7b 0a 44 45 54 41 43 48 20 5b 44 41 54 41 42   {.DETACH [DATAB
7b40: 41 53 45 5d 20 3c 64 61 74 61 62 61 73 65 2d 6e  ASE] <database-n
7b50: 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ame>.}..puts {.<
7b60: 70 3e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  p>This statement
7b70: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
7b80: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
7b90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
7ba0: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
7bb0: 20 75 73 69 6e 67 20 74 68 65 20 3c 61 20 68 72   using the <a hr
7bc0: 65 66 3d 22 23 61 74 74 61 63 68 22 3e 41 54 54  ef="#attach">ATT
7bd0: 41 43 48 20 44 41 54 41 42 41 53 45 3c 2f 61 3e  ACH DATABASE</a>
7be0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 74 0a   statement.  It.
7bf0: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68  is possible to h
7c00: 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 61 74  ave the same dat
7c10: 61 62 61 73 65 20 66 69 6c 65 20 61 74 74 61 63  abase file attac
7c20: 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  hed multiple tim
7c30: 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72  es using .differ
7c40: 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64  ent names, and d
7c50: 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e  etaching one con
7c60: 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c  nection to a fil
7c70: 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65  e will leave the
7c80: 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e   .others intact.
7c90: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 74  </p>..<p>This st
7ca0: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69  atement will fai
7cb0: 6c 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69  l if SQLite is i
7cc0: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
7cd0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f  a transaction.</
7ce0: 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b  p>.}...Section {
7cf0: 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70  DROP INDEX} drop
7d00: 69 6e 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73  index..Syntax {s
7d10: 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52  ql-command} {.DR
7d20: 4f 50 20 49 4e 44 45 58 20 5b 49 46 20 45 58 49  OP INDEX [IF EXI
7d30: 53 54 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d  STS] [<database-
7d40: 6e 61 6d 65 3e 20 2e 5d 20 3c 69 6e 64 65 78 2d  name> .] <index-
7d50: 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  name>.}..puts {.
7d60: 3c 70 3e 54 68 65 20 44 52 4f 50 20 49 4e 44 45  <p>The DROP INDE
7d70: 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  X statement remo
7d80: 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64  ves an index add
7d90: 65 64 0a 77 69 74 68 20 74 68 65 20 3c 61 20 68  ed.with the <a h
7da0: 72 65 66 3d 22 23 63 72 65 61 74 65 69 6e 64 65  ref="#createinde
7db0: 78 22 3e 0a 43 52 45 41 54 45 20 49 4e 44 45 58  x">.CREATE INDEX
7dc0: 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e 20  </a> statement. 
7dd0: 20 54 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   The index named
7de0: 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72   is completely r
7df0: 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20  emoved from.the 
7e00: 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20  disk.  The only 
7e10: 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74  way to recover t
7e20: 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72  he index is to r
7e30: 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f  eenter the.appro
7e40: 70 72 69 61 74 65 20 43 52 45 41 54 45 20 49 4e  priate CREATE IN
7e50: 44 45 58 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e  DEX command.</p>
7e60: 0a 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 49 4e  ..<p>The DROP IN
7e70: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  DEX statement do
7e80: 65 73 20 6e 6f 74 20 72 65 64 75 63 65 20 74 68  es not reduce th
7e90: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
7ea0: 74 61 62 61 73 65 20 0a 66 69 6c 65 20 69 6e 20  tabase .file in 
7eb0: 74 68 65 20 64 65 66 61 75 6c 74 20 6d 6f 64 65  the default mode
7ec0: 2e 0a 45 6d 70 74 79 20 73 70 61 63 65 20 69 6e  ..Empty space in
7ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
7ee0: 20 72 65 74 61 69 6e 65 64 20 66 6f 72 20 6c 61   retained for la
7ef0: 74 65 72 20 49 4e 53 45 52 54 73 2e 20 20 54 6f  ter INSERTs.  To
7f00: 20 0a 72 65 6d 6f 76 65 20 66 72 65 65 20 73 70   .remove free sp
7f10: 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  ace in the datab
7f20: 61 73 65 2c 20 75 73 65 20 74 68 65 20 3c 61 20  ase, use the <a 
7f30: 68 72 65 66 3d 22 23 76 61 63 75 75 6d 22 3e 56  href="#vacuum">V
7f40: 41 43 55 55 4d 3c 2f 61 3e 20 0a 63 6f 6d 6d 61  ACUUM</a> .comma
7f50: 6e 64 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55  nd.  If AUTOVACU
7f60: 55 4d 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c  UM mode is enabl
7f70: 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ed for a databas
7f80: 65 20 74 68 65 6e 20 73 70 61 63 65 0a 77 69 6c  e then space.wil
7f90: 6c 20 62 65 20 66 72 65 65 64 20 61 75 74 6f 6d  l be freed autom
7fa0: 61 74 69 63 61 6c 6c 79 20 62 79 20 44 52 4f 50  atically by DROP
7fb0: 20 49 4e 44 45 58 2e 3c 2f 70 3e 0a 7d 0a 0a 0a   INDEX.</p>.}...
7fc0: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41  Section {DROP TA
7fd0: 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 0a 0a  BLE} droptable..
7fe0: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d  Syntax {sql-comm
7ff0: 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 54 41 42 4c  and} {.DROP TABL
8000: 45 20 5b 49 46 20 45 58 49 53 54 53 5d 20 5b 3c  E [IF EXISTS] [<
8010: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 2e 5d  database-name>.]
8020: 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 0a 7d 0a   <table-name>.}.
8030: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44  .puts {.<p>The D
8040: 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
8050: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61  ent removes a ta
8060: 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74  ble added with t
8070: 68 65 20 3c 61 20 68 72 65 66 3d 0a 22 23 63 72  he <a href=."#cr
8080: 65 61 74 65 74 61 62 6c 65 22 3e 43 52 45 41 54  eatetable">CREAT
8090: 45 20 54 41 42 4c 45 3c 2f 61 3e 20 73 74 61 74  E TABLE</a> stat
80a0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65  ement.  The name
80b0: 20 73 70 65 63 69 66 69 65 64 20 69 73 20 74 68   specified is th
80c0: 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49  e.table name.  I
80d0: 74 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  t is completely 
80e0: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
80f0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
8100: 20 61 6e 64 20 74 68 65 20 0a 64 69 73 6b 20 66   and the .disk f
8110: 69 6c 65 2e 20 20 54 68 65 20 74 61 62 6c 65 20  ile.  The table 
8120: 63 61 6e 20 6e 6f 74 20 62 65 20 72 65 63 6f 76  can not be recov
8130: 65 72 65 64 2e 20 20 41 6c 6c 20 69 6e 64 69 63  ered.  All indic
8140: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 0a 77  es associated .w
8150: 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 61 72  ith the table ar
8160: 65 20 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e 3c  e also deleted.<
8170: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44 52 4f 50  /p>..<p>The DROP
8180: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
8190: 20 64 6f 65 73 20 6e 6f 74 20 72 65 64 75 63 65   does not reduce
81a0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
81b0: 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20   database .file 
81c0: 69 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  in the default m
81d0: 6f 64 65 2e 20 20 45 6d 70 74 79 20 73 70 61 63  ode.  Empty spac
81e0: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
81f0: 65 20 69 73 20 72 65 74 61 69 6e 65 64 20 66 6f  e is retained fo
8200: 72 0a 6c 61 74 65 72 20 49 4e 53 45 52 54 73 2e  r.later INSERTs.
8210: 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72 65    To .remove fre
8220: 65 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64  e space in the d
8230: 61 74 61 62 61 73 65 2c 20 75 73 65 20 74 68 65  atabase, use the
8240: 20 3c 61 20 68 72 65 66 3d 22 23 76 61 63 75 75   <a href="#vacuu
8250: 6d 22 3e 56 41 43 55 55 4d 3c 2f 61 3e 20 0a 63  m">VACUUM</a> .c
8260: 6f 6d 6d 61 6e 64 2e 20 20 49 66 20 41 55 54 4f  ommand.  If AUTO
8270: 56 41 43 55 55 4d 20 6d 6f 64 65 20 69 73 20 65  VACUUM mode is e
8280: 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
8290: 61 62 61 73 65 20 74 68 65 6e 20 73 70 61 63 65  abase then space
82a0: 0a 77 69 6c 6c 20 62 65 20 66 72 65 65 64 20 61  .will be freed a
82b0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79 20  utomatically by 
82c0: 44 52 4f 50 20 54 41 42 4c 45 2e 3c 2f 70 3e 0a  DROP TABLE.</p>.
82d0: 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
82e0: 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73   IF EXISTS claus
82f0: 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65  e suppresses the
8300: 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c   error that woul
8310: 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c  d normally.resul
8320: 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64  t if the table d
8330: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f  oes not exist.</
8340: 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b  p>.}...Section {
8350: 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72  DROP TRIGGER} dr
8360: 6f 70 74 72 69 67 67 65 72 0a 53 79 6e 74 61 78  optrigger.Syntax
8370: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
8380: 20 7b 0a 44 52 4f 50 20 54 52 49 47 47 45 52 20   {.DROP TRIGGER 
8390: 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e  [<database-name>
83a0: 20 2e 5d 20 3c 74 72 69 67 67 65 72 2d 6e 61 6d   .] <trigger-nam
83b0: 65 3e 0a 7d 0a 70 75 74 73 20 7b 20 0a 3c 70 3e  e>.}.puts { .<p>
83c0: 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45 52  The DROP TRIGGER
83d0: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
83e0: 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72 65  es a trigger cre
83f0: 61 74 65 64 20 62 79 20 74 68 65 20 0a 3c 61 20  ated by the .<a 
8400: 68 72 65 66 3d 22 23 63 72 65 61 74 65 74 72 69  href="#createtri
8410: 67 67 65 72 22 3e 43 52 45 41 54 45 20 54 52 49  gger">CREATE TRI
8420: 47 47 45 52 3c 2f 61 3e 20 73 74 61 74 65 6d 65  GGER</a> stateme
8430: 6e 74 2e 20 20 54 68 65 20 74 72 69 67 67 65 72  nt.  The trigger
8440: 20 69 73 20 0a 64 65 6c 65 74 65 64 20 66 72 6f   is .deleted fro
8450: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  m the database s
8460: 63 68 65 6d 61 2e 20 4e 6f 74 65 20 74 68 61 74  chema. Note that
8470: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75   triggers are au
8480: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f  tomatically .dro
8490: 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73  pped when the as
84a0: 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69  sociated table i
84b0: 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 7d  s dropped.</p>.}
84c0: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ...Section {DROP
84d0: 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 0a   VIEW} dropview.
84e0: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d  .Syntax {sql-com
84f0: 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 56 49 45  mand} {.DROP VIE
8500: 57 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 0a 7d 0a  W <view-name>.}.
8510: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44  .puts {.<p>The D
8520: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
8530: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
8540: 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
8550: 20 3c 61 20 68 72 65 66 3d 0a 22 23 63 72 65 61   <a href=."#crea
8560: 74 65 76 69 65 77 22 3e 43 52 45 41 54 45 20 56  teview">CREATE V
8570: 49 45 57 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e  IEW</a> statemen
8580: 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
8590: 63 69 66 69 65 64 20 69 73 20 74 68 65 20 0a 76  cified is the .v
85a0: 69 65 77 20 6e 61 6d 65 2e 20 20 49 74 20 69 73  iew name.  It is
85b0: 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
85c0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
85d0: 61 2c 20 62 75 74 20 6e 6f 20 61 63 74 75 61 6c  a, but no actual
85e0: 20 64 61 74 61 20 0a 69 6e 20 74 68 65 20 75 6e   data .in the un
85f0: 64 65 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61  derlying base ta
8600: 62 6c 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64  bles is modified
8610: 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f  .</p>.}...Sectio
8620: 6e 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69  n EXPLAIN explai
8630: 6e 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  n..Syntax {sql-s
8640: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 45 58 50 4c  tatement} {.EXPL
8650: 41 49 4e 20 3c 73 71 6c 2d 73 74 61 74 65 6d 65  AIN <sql-stateme
8660: 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  nt>.}..puts {.<p
8670: 3e 54 68 65 20 45 58 50 4c 41 49 4e 20 63 6f 6d  >The EXPLAIN com
8680: 6d 61 6e 64 20 6d 6f 64 69 66 69 65 72 20 69 73  mand modifier is
8690: 20 61 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a non-standard 
86a0: 65 78 74 65 6e 73 69 6f 6e 2e 20 20 54 68 65 0a  extension.  The.
86b0: 69 64 65 61 20 63 6f 6d 65 73 20 66 72 6f 6d 20  idea comes from 
86c0: 61 20 73 69 6d 69 6c 61 72 20 63 6f 6d 6d 61 6e  a similar comman
86d0: 64 20 66 6f 75 6e 64 20 69 6e 20 50 6f 73 74 67  d found in Postg
86e0: 72 65 53 51 4c 2c 20 62 75 74 20 74 68 65 20 6f  reSQL, but the o
86f0: 70 65 72 61 74 69 6f 6e 0a 69 73 20 63 6f 6d 70  peration.is comp
8700: 6c 65 74 65 6c 79 20 64 69 66 66 65 72 65 6e 74  letely different
8710: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65  .</p>..<p>If the
8720: 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
8730: 20 61 70 70 65 61 72 73 20 62 65 66 6f 72 65 20   appears before 
8740: 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 69 74 65  any other SQLite
8750: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 74 68 65   SQL command.the
8760: 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 74  n instead of act
8770: 75 61 6c 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ually executing 
8780: 74 68 65 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  the command, the
8790: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
87a0: 77 69 6c 6c 0a 72 65 70 6f 72 74 20 62 61 63 6b  will.report back
87b0: 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66   the sequence of
87c0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
87d0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 69 74   instructions it
87e0: 20 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65 64   would have.used
87f0: 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20   to execute the 
8800: 63 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65 20  command had the 
8810: 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20  EXPLAIN keyword 
8820: 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74  not been present
8830: 2e 0a 46 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  ..For additional
8840: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
8850: 75 74 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ut virtual machi
8860: 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ne instructions 
8870: 73 65 65 0a 74 68 65 20 3c 61 20 68 72 65 66 3d  see.the <a href=
8880: 22 61 72 63 68 2e 68 74 6d 6c 22 3e 61 72 63 68  "arch.html">arch
8890: 69 74 65 63 74 75 72 65 20 64 65 73 63 72 69 70  itecture descrip
88a0: 74 69 6f 6e 3c 2f 61 3e 20 6f 72 20 74 68 65 20  tion</a> or the 
88b0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 6f 6e  documentation.on
88c0: 20 3c 61 20 68 72 65 66 3d 22 6f 70 63 6f 64 65   <a href="opcode
88d0: 2e 68 74 6d 6c 22 3e 61 76 61 69 6c 61 62 6c 65  .html">available
88e0: 20 6f 70 63 6f 64 65 73 3c 2f 61 3e 20 66 6f 72   opcodes</a> for
88f0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
8900: 68 69 6e 65 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65  hine.</p>.}...Se
8910: 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ction expression
8920: 20 65 78 70 72 0a 0a 53 79 6e 74 61 78 20 7b 65   expr..Syntax {e
8930: 78 70 72 7d 20 7b 0a 3c 65 78 70 72 3e 20 3c 62  xpr} {.<expr> <b
8940: 69 6e 61 72 79 2d 6f 70 3e 20 3c 65 78 70 72 3e  inary-op> <expr>
8950: 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20   |.<expr> [NOT] 
8960: 3c 6c 69 6b 65 2d 6f 70 3e 20 3c 65 78 70 72 3e  <like-op> <expr>
8970: 20 5b 45 53 43 41 50 45 20 3c 65 78 70 72 3e 5d   [ESCAPE <expr>]
8980: 20 7c 0a 3c 75 6e 61 72 79 2d 6f 70 3e 20 3c 65   |.<unary-op> <e
8990: 78 70 72 3e 20 7c 0a 28 20 3c 65 78 70 72 3e 20  xpr> |.( <expr> 
89a0: 29 20 7c 0a 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  ) |.<column-name
89b0: 3e 20 7c 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  > |.<table-name>
89c0: 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e   . <column-name>
89d0: 20 7c 0a 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d   |.<database-nam
89e0: 65 3e 20 2e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65  e> . <table-name
89f0: 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  > . <column-name
8a00: 3e 20 7c 0a 3c 6c 69 74 65 72 61 6c 2d 76 61 6c  > |.<literal-val
8a10: 75 65 3e 20 7c 0a 3c 70 61 72 61 6d 65 74 65 72  ue> |.<parameter
8a20: 3e 20 7c 0a 3c 66 75 6e 63 74 69 6f 6e 2d 6e 61  > |.<function-na
8a30: 6d 65 3e 20 28 20 3c 65 78 70 72 2d 6c 69 73 74  me> ( <expr-list
8a40: 3e 20 7c 20 53 54 41 52 20 29 20 7c 0a 3c 65 78  > | STAR ) |.<ex
8a50: 70 72 3e 20 49 53 4e 55 4c 4c 20 7c 0a 3c 65 78  pr> ISNULL |.<ex
8a60: 70 72 3e 20 4e 4f 54 4e 55 4c 4c 20 7c 0a 3c 65  pr> NOTNULL |.<e
8a70: 78 70 72 3e 20 5b 4e 4f 54 5d 20 42 45 54 57 45  xpr> [NOT] BETWE
8a80: 45 4e 20 3c 65 78 70 72 3e 20 41 4e 44 20 3c 65  EN <expr> AND <e
8a90: 78 70 72 3e 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e  xpr> |.<expr> [N
8aa0: 4f 54 5d 20 49 4e 20 28 20 3c 76 61 6c 75 65 2d  OT] IN ( <value-
8ab0: 6c 69 73 74 3e 20 29 20 7c 0a 3c 65 78 70 72 3e  list> ) |.<expr>
8ac0: 20 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 73 65 6c   [NOT] IN ( <sel
8ad0: 65 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e 20 29  ect-statement> )
8ae0: 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20   |.<expr> [NOT] 
8af0: 49 4e 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  IN [<database-na
8b00: 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
8b10: 6d 65 3e 20 7c 0a 5b 45 58 49 53 54 53 5d 20 28  me> |.[EXISTS] (
8b20: 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65   <select-stateme
8b30: 6e 74 3e 20 29 20 7c 0a 43 41 53 45 20 5b 3c 65  nt> ) |.CASE [<e
8b40: 78 70 72 3e 5d 20 4c 50 20 57 48 45 4e 20 3c 65  xpr>] LP WHEN <e
8b50: 78 70 72 3e 20 54 48 45 4e 20 3c 65 78 70 72 3e  xpr> THEN <expr>
8b60: 20 52 50 50 4c 55 53 20 5b 45 4c 53 45 20 3c 65   RPPLUS [ELSE <e
8b70: 78 70 72 3e 5d 20 45 4e 44 20 7c 0a 43 41 53 54  xpr>] END |.CAST
8b80: 20 28 20 3c 65 78 70 72 3e 20 41 53 20 3c 74 79   ( <expr> AS <ty
8b90: 70 65 3e 20 29 0a 7d 20 7b 6c 69 6b 65 2d 6f 70  pe> ).} {like-op
8ba0: 7d 20 7b 0a 4c 49 4b 45 20 7c 20 47 4c 4f 42 20  } {.LIKE | GLOB 
8bb0: 7c 20 52 45 47 45 58 50 0a 7d 0a 0a 70 75 74 73  | REGEXP.}..puts
8bc0: 20 7b 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69   {.<p>This secti
8bd0: 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20  on is different 
8be0: 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e  from the others.
8bf0: 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63    Most other sec
8c00: 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f  tions of.this do
8c10: 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f  cument talks abo
8c20: 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  ut a particular 
8c30: 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68  SQL command.  Th
8c40: 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a  is section does.
8c50: 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61  not talk about a
8c60: 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d   standalone comm
8c70: 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20 22 65  and but about "e
8c80: 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63  xpressions" whic
8c90: 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e  h are .subcompon
8ca0: 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68  ents of most oth
8cb0: 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e  er commands.</p>
8cc0: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75 6e 64 65  ..<p>SQLite unde
8cd0: 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f 6c 6c  rstands the foll
8ce0: 6f 77 69 6e 67 20 62 69 6e 61 72 79 20 6f 70 65  owing binary ope
8cf0: 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65 72  rators, in order
8d00: 20 66 72 6f 6d 0a 68 69 67 68 65 73 74 20 74 6f   from.highest to
8d10: 20 6c 6f 77 65 73 74 20 70 72 65 63 65 64 65 6e   lowest preceden
8d20: 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ce:</p>..<blockq
8d30: 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74  uote><pre>.<font
8d40: 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22   color="#2c2cf0"
8d50: 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20  ><big>||.*    / 
8d60: 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b     %.+    -.&lt;
8d70: 26 6c 74 3b 20 20 20 26 67 74 3b 26 67 74 3b 20  &lt;   &gt;&gt; 
8d80: 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c 74    &amp;    |.&lt
8d90: 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20 26 67 74  ;    &lt;=   &gt
8da0: 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20 20  ;    &gt;=.=    
8db0: 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b 26 67  ==   !=   &lt;&g
8dc0: 74 3b 20 20 20 3c 2f 62 69 67 3e 49 4e 0a 41 4e  t;   </big>IN.AN
8dd0: 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c  D   .OR</font>.<
8de0: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
8df0: 65 3e 0a 0a 3c 70 3e 53 75 70 70 6f 72 74 65 64  e>..<p>Supported
8e00: 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73   unary operators
8e10: 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a   are these:</p>.
8e20: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
8e30: 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
8e40: 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20  #2c2cf0"><big>- 
8e50: 20 20 20 2b 20 20 20 20 21 20 20 20 20 7e 20 20     +    !    ~  
8e60: 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e    NOT</big></fon
8e70: 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
8e80: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 4e 6f 74 65 20  quote>..<p>Note 
8e90: 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74  that there are t
8ea0: 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66  wo variations of
8eb0: 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20   the equals and 
8ec0: 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61  not equals.opera
8ed0: 74 6f 72 73 2e 20 20 45 71 75 61 6c 73 20 63 61  tors.  Equals ca
8ee0: 6e 20 62 65 20 65 69 74 68 65 72 7d 0a 70 75 74  n be either}.put
8ef0: 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  s "[Operator =] 
8f00: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d  or [Operator ==]
8f10: 2e 0a 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73  ..The non-equals
8f20: 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
8f30: 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f   either.[Operato
8f40: 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  r !=] or [Operat
8f50: 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a  or {&lt;&gt;}]..
8f60: 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c  The [Operator ||
8f70: 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22  ] operator is \"
8f80: 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20  concatenate\" - 
8f90: 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65  it joins togethe
8fa0: 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67  r.the two string
8fb0: 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64  s of its operand
8fc0: 73 2e 0a 54 68 65 20 6f 70 65 72 61 74 6f 72 20  s..The operator 
8fd0: 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74  [Operator %] out
8fe0: 70 75 74 73 20 74 68 65 20 72 65 6d 61 69 6e 64  puts the remaind
8ff0: 65 72 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  er of its left .
9000: 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
9010: 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
9020: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
9030: 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
9040: 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  ry operator is a
9050: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2c 20   numeric value, 
9060: 65 78 63 65 70 74 0a 66 6f 72 20 74 68 65 20 5b  except.for the [
9070: 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
9080: 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
9090: 74 6f 72 20 77 68 69 63 68 20 67 69 76 65 73 20  tor which gives 
90a0: 61 20 73 74 72 69 6e 67 0a 72 65 73 75 6c 74 2e  a string.result.
90b0: 3c 2f 70 3e 22 0a 0a 70 75 74 73 20 7b 0a 0a 3c  </p>"..puts {..<
90c0: 61 20 6e 61 6d 65 3d 22 6c 69 74 65 72 61 6c 5f  a name="literal_
90d0: 76 61 6c 75 65 22 3e 3c 2f 61 3e 0a 3c 70 3e 0a  value"></a>.<p>.
90e0: 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
90f0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  is an integer nu
9100: 6d 62 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69  mber or a floati
9110: 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ng point number.
9120: 0a 53 63 69 65 6e 74 69 66 69 63 20 6e 6f 74 61  .Scientific nota
9130: 74 69 6f 6e 20 69 73 20 73 75 70 70 6f 72 74 65  tion is supporte
9140: 64 2e 20 20 54 68 65 20 22 2e 22 20 63 68 61 72  d.  The "." char
9150: 61 63 74 65 72 20 69 73 20 61 6c 77 61 79 73 20  acter is always 
9160: 75 73 65 64 0a 61 73 20 74 68 65 20 64 65 63 69  used.as the deci
9170: 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69  mal point even i
9180: 66 20 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74  f the locale set
9190: 74 69 6e 67 20 73 70 65 63 69 66 69 65 73 20 22  ting specifies "
91a0: 2c 22 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65  ," for.this role
91b0: 20 2d 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c   - the use of ",
91c0: 22 20 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61  " for the decima
91d0: 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65  l point would re
91e0: 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69  sult in.syntacti
91f0: 63 20 61 6d 62 69 67 75 69 74 79 2e 20 20 41 20  c ambiguity.  A 
9200: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20  string constant 
9210: 69 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63  is formed by enc
9220: 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e  losing the.strin
9230: 67 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  g in single quot
9240: 65 73 20 28 27 29 2e 20 20 41 20 73 69 6e 67 6c  es (').  A singl
9250: 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74  e quote within t
9260: 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65  he string can.be
9270: 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74   encoded by putt
9280: 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71  ing two single q
9290: 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d  uotes in a row -
92a0: 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43   as in Pascal..C
92b0: 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75  -style escapes u
92c0: 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61  sing the backsla
92d0: 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  sh character are
92e0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62   not supported b
92f0: 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20  ecause.they are 
9300: 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
9310: 2e 0a 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20  ..BLOB literals 
9320: 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72  are string liter
9330: 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68  als containing h
9340: 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20  exadecimal data 
9350: 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79 20  and.preceded by 
9360: 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20  a single "x" or 
9370: 22 58 22 20 63 68 61 72 61 63 74 65 72 2e 20 20  "X" character.  
9380: 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e  For example:</p>
9390: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
93a0: 72 65 3e 0a 58 27 35 33 35 31 34 36 39 37 34 36  re>.X'5351469746
93b0: 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  5'.</pre></block
93c0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 41 20 6c 69  quote>..<p>.A li
93d0: 74 65 72 61 6c 20 76 61 6c 75 65 20 63 61 6e 20  teral value can 
93e0: 61 6c 73 6f 20 62 65 20 74 68 65 20 74 6f 6b 65  also be the toke
93f0: 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a  n "NULL"..</p>..
9400: 3c 70 3e 0a 41 20 70 61 72 61 6d 65 74 65 72 20  <p>.A parameter 
9410: 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63  specifies a plac
9420: 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65  eholder in the e
9430: 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20  xpression for a 
9440: 6c 69 74 65 72 61 6c 0a 76 61 6c 75 65 20 74 68  literal.value th
9450: 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69 6e 20  at is filled in 
9460: 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67  at runtime using
9470: 20 74 68 65 0a 3c 61 20 68 72 65 66 3d 22 63 61   the.<a href="ca
9480: 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69  pi3ref.html#sqli
9490: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22 3e 73 71  te3_bind_int">sq
94a0: 6c 69 74 65 33 5f 62 69 6e 64 3c 2f 61 3e 20 41  lite3_bind</a> A
94b0: 50 49 2e 0a 50 61 72 61 6d 65 74 65 72 73 20 63  PI..Parameters c
94c0: 61 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20  an take several 
94d0: 66 6f 72 6d 73 3a 0a 3c 2f 70 0a 0a 3c 62 6c 6f  forms:.</p..<blo
94e0: 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e  ckquote>.<table>
94f0: 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
9500: 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
9510: 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e  top"><b>?</b><i>
9520: 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  NNN</i></td><td 
9530: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
9540: 0a 3c 74 64 3e 41 20 71 75 65 73 74 69 6f 6e 20  .<td>A question 
9550: 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79  mark followed by
9560: 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e   a number <i>NNN
9570: 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f  </i> holds a spo
9580: 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68  t for the.NNN-th
9590: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e   parameter.  NNN
95a0: 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
95b0: 20 31 20 61 6e 64 20 39 39 39 2e 3c 2f 74 64 3e   1 and 999.</td>
95c0: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
95d0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
95e0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c  lign="top"><b>?<
95f0: 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /b></td><td widt
9600: 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
9610: 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  >A question mark
9620: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c   that is not fol
9630: 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
9640: 72 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  r holds a spot f
9650: 6f 72 0a 74 68 65 20 6e 65 78 74 20 75 6e 75 73  or.the next unus
9660: 65 64 20 70 61 72 61 6d 65 74 65 72 2e 3c 2f 74  ed parameter.</t
9670: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
9680: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
9690: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
96a0: 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e  :</b><i>AAAA</i>
96b0: 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
96c0: 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20  20"></td>.<td>A 
96d0: 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62  colon followed b
96e0: 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  y an identifier 
96f0: 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70 6f  name holds a spo
9700: 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
9710: 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
9720: 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 4e 61 6d   name AAAA.  Nam
9730: 65 64 20 70 61 72 61 6d 65 74 65 72 73 20 61 72  ed parameters ar
9740: 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e  e also numbered.
9750: 0a 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73 69  .The number assi
9760: 67 6e 65 64 20 69 73 20 74 68 65 20 6e 65 78 74  gned is the next
9770: 20 75 6e 75 73 65 64 20 6e 75 6d 62 65 72 2e 20   unused number. 
9780: 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   To avoid confus
9790: 69 6f 6e 2c 0a 69 74 20 69 73 20 62 65 73 74 20  ion,.it is best 
97a0: 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20  to avoid mixing 
97b0: 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72  named and number
97c0: 65 64 20 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f  ed parameters.</
97d0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
97e0: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
97f0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
9800: 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >$</b><i>AAAA</i
9810: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
9820: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41  "20"></td>.<td>A
9830: 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c   dollar-sign fol
9840: 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e  lowed by an iden
9850: 74 69 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f  tifier name also
9860: 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
9870: 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65  r a named.parame
9880: 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d  ter with the nam
9890: 65 20 41 41 41 41 2e 20 20 54 68 65 20 69 64 65  e AAAA.  The ide
98a0: 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20  ntifier name in 
98b0: 74 68 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e  this case can in
98c0: 63 6c 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72  clude.one or mor
98d0: 65 20 6f 63 63 75 72 61 6e 63 65 73 20 6f 66 20  e occurances of 
98e0: 22 3a 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69  "::" and a suffi
98f0: 78 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28  x enclosed in "(
9900: 2e 2e 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67  ...)" containing
9910: 0a 61 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c  .any text at all
9920: 2e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69  .  This syntax i
9930: 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20  s the form of a 
9940: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e  variable name in
9950: 20 74 68 65 20 54 63 6c 0a 70 72 6f 67 72 61 6d   the Tcl.program
9960: 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 2e 3c 2f  ming language.</
9970: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
9980: 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
9990: 0a 0a 3c 70 3e 50 61 72 61 6d 65 74 65 72 73 20  ..<p>Parameters 
99a0: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73  that are not ass
99b0: 69 67 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69  igned values usi
99c0: 6e 67 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69  ng.<a href="capi
99d0: 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65  3ref.html#sqlite
99e0: 33 5f 62 69 6e 64 5f 69 6e 74 22 3e 73 71 6c 69  3_bind_int">sqli
99f0: 74 65 33 5f 62 69 6e 64 3c 2f 61 3e 20 61 72 65  te3_bind</a> are
9a00: 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c 4c   treated.as NULL
9a10: 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22  .</p>..<a name="
9a20: 6c 69 6b 65 22 3e 3c 2f 61 3e 0a 3c 70 3e 54 68  like"></a>.<p>Th
9a30: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
9a40: 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d  does a pattern m
9a50: 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73  atching comparis
9a60: 6f 6e 2e 20 54 68 65 20 6f 70 65 72 61 6e 64 0a  on. The operand.
9a70: 74 6f 20 74 68 65 20 72 69 67 68 74 20 63 6f 6e  to the right con
9a80: 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65 72  tains the patter
9a90: 6e 2c 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64  n, the left hand
9aa0: 20 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e   operand contain
9ab0: 73 20 74 68 65 0a 73 74 72 69 6e 67 20 74 6f 20  s the.string to 
9ac0: 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74 68  match against th
9ad0: 65 20 70 61 74 74 65 72 6e 2e 20 0a 7d 0a 70 75  e pattern. .}.pu
9ae0: 74 73 20 22 41 20 70 65 72 63 65 6e 74 20 73 79  ts "A percent sy
9af0: 6d 62 6f 6c 20 5b 4f 70 65 72 61 74 6f 72 20 25  mbol [Operator %
9b00: 5d 20 69 6e 20 74 68 65 20 70 61 74 74 65 72 6e  ] in the pattern
9b10: 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73 65 71   matches any.seq
9b20: 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72  uence of zero or
9b30: 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72 73   more characters
9b40: 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 20   in the string. 
9b50: 20 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 5b   An underscore.[
9b60: 4f 70 65 72 61 74 6f 72 20 5f 5d 20 69 6e 20 74  Operator _] in t
9b70: 68 65 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68  he pattern match
9b80: 65 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68  es any single ch
9b90: 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73  aracter in the.s
9ba0: 74 72 69 6e 67 2e 20 20 41 6e 79 20 6f 74 68 65  tring.  Any othe
9bb0: 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63  r character matc
9bc0: 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74  hes itself or it
9bd0: 27 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63  's lower/upper c
9be0: 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28  ase.equivalent (
9bf0: 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73  i.e. case-insens
9c00: 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e  itive matching).
9c10: 20 20 28 41 20 62 75 67 3a 20 53 51 4c 69 74 65    (A bug: SQLite
9c20: 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64   only.understand
9c30: 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20 63 61  s upper/lower ca
9c40: 73 65 20 66 6f 72 20 37 2d 62 69 74 20 4c 61 74  se for 7-bit Lat
9c50: 69 6e 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  in characters.  
9c60: 48 65 6e 63 65 20 74 68 65 0a 4c 49 4b 45 20 6f  Hence the.LIKE o
9c70: 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
9c80: 73 65 6e 73 69 74 69 76 65 20 66 6f 72 20 38 2d  sensitive for 8-
9c90: 62 69 74 20 69 73 6f 38 38 35 39 20 63 68 61 72  bit iso8859 char
9ca0: 61 63 74 65 72 73 20 6f 72 20 55 54 46 2d 38 0a  acters or UTF-8.
9cb0: 63 68 61 72 61 63 74 65 72 73 2e 20 20 46 6f 72  characters.  For
9cc0: 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 65 78   example, the ex
9cd0: 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26  pression <b>'a'&
9ce0: 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
9cf0: 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55 45 20 62  A'</b>.is TRUE b
9d00: 75 74 20 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26  ut <b>'&aelig;'&
9d10: 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27  nbsp;LIKE&nbsp;'
9d20: 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20  &AElig;'</b> is 
9d30: 46 41 4c 53 45 2e 29 2e 3c 2f 70 3e 22 0a 0a 70  FALSE.).</p>"..p
9d40: 75 74 73 20 7b 0a 3c 70 3e 49 66 20 74 68 65 20  uts {.<p>If the 
9d50: 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
9d60: 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
9d70: 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72  t, then the expr
9d80: 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67  ession.following
9d90: 20 74 68 65 20 45 53 43 41 50 45 20 6b 65 79 77   the ESCAPE keyw
9da0: 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74  ord must evaluat
9db0: 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f  e to a string co
9dc0: 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69  nsisting of.a si
9dd0: 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20  ngle character. 
9de0: 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20 6d  This character m
9df0: 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  ay be used in th
9e00: 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74  e LIKE pattern.t
9e10: 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61  o include litera
9e20: 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64  l percent or und
9e30: 65 72 73 63 6f 72 65 20 63 68 61 72 61 63 74 65  erscore characte
9e40: 72 73 2e 20 54 68 65 20 65 73 63 61 70 65 0a 63  rs. The escape.c
9e50: 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77 65  haracter followe
9e60: 64 20 62 79 20 61 20 70 65 72 63 65 6e 74 20 73  d by a percent s
9e70: 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72  ymbol, underscor
9e80: 65 20 6f 72 20 69 74 73 65 6c 66 20 6d 61 74 63  e or itself matc
9e90: 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20 70 65  hes a.literal pe
9ea0: 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e  rcent symbol, un
9eb0: 64 65 72 73 63 6f 72 65 20 6f 72 20 65 73 63 61  derscore or esca
9ec0: 70 65 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  pe character in 
9ed0: 74 68 65 20 73 74 72 69 6e 67 2c 0a 72 65 73 70  the string,.resp
9ee0: 65 63 74 69 76 65 6c 79 2e 20 54 68 65 20 69 6e  ectively. The in
9ef0: 66 69 78 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  fix LIKE operato
9f00: 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
9f10: 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a   by calling the.
9f20: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 3c 61  user function <a
9f30: 20 68 72 65 66 3d 22 23 6c 69 6b 65 46 75 6e 63   href="#likeFunc
9f40: 22 3e 20 6c 69 6b 65 28 3c 69 3e 58 3c 2f 69 3e  "> like(<i>X</i>
9f50: 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e 2e 3c  ,<i>Y</i>)</a>.<
9f60: 2f 70 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 54 68  /p>.}..puts {.Th
9f70: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
9f80: 69 73 20 6e 6f 74 20 63 61 73 65 20 73 65 6e 73  is not case sens
9f90: 69 74 69 76 65 20 61 6e 64 20 77 69 6c 6c 20 6d  itive and will m
9fa0: 61 74 63 68 20 75 70 70 65 72 20 63 61 73 65 0a  atch upper case.
9fb0: 63 68 61 72 61 63 74 65 72 73 20 6f 6e 20 6f 6e  characters on on
9fc0: 65 20 73 69 64 65 20 61 67 61 69 6e 73 74 20 6c  e side against l
9fd0: 6f 77 65 72 20 63 61 73 65 20 63 68 61 72 61 63  ower case charac
9fe0: 74 65 72 73 20 6f 6e 20 74 68 65 20 6f 74 68 65  ters on the othe
9ff0: 72 2e 20 20 0a 28 41 20 62 75 67 3a 20 53 51 4c  r.  .(A bug: SQL
a000: 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74  ite only underst
a010: 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72  ands upper/lower
a020: 20 63 61 73 65 20 66 6f 72 20 37 2d 62 69 74 20   case for 7-bit 
a030: 4c 61 74 69 6e 0a 63 68 61 72 61 63 74 65 72 73  Latin.characters
a040: 2e 20 20 48 65 6e 63 65 20 74 68 65 20 4c 49 4b  .  Hence the LIK
a050: 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61  E operator is ca
a060: 73 65 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72  se sensitive for
a070: 20 38 2d 62 69 74 0a 69 73 6f 38 38 35 39 20 63   8-bit.iso8859 c
a080: 68 61 72 61 63 74 65 72 73 20 6f 72 20 55 54 46  haracters or UTF
a090: 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  -8 characters.  
a0a0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
a0b0: 20 65 78 70 72 65 73 73 69 6f 6e 0a 3c 62 3e 27   expression.<b>'
a0c0: 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  a'&nbsp;LIKE&nbs
a0d0: 70 3b 27 41 27 3c 2f 62 3e 20 69 73 20 54 52 55  p;'A'</b> is TRU
a0e0: 45 20 62 75 74 0a 3c 62 3e 27 26 61 65 6c 69 67  E but.<b>'&aelig
a0f0: 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  ;'&nbsp;LIKE&nbs
a100: 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20  p;'&AElig;'</b> 
a110: 69 73 20 46 41 4c 53 45 2e 29 2e 3c 2f 70 3e 0a  is FALSE.).</p>.
a120: 0a 3c 70 3e 54 68 65 20 69 6e 66 69 78 20 4c 49  .<p>The infix LI
a130: 4b 45 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  KE.operator is i
a140: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
a150: 6c 6c 69 6e 67 20 74 68 65 20 75 73 65 72 20 66  lling the user f
a160: 75 6e 63 74 69 6f 6e 20 3c 61 20 68 72 65 66 3d  unction <a href=
a170: 22 23 6c 69 6b 65 46 75 6e 63 22 3e 0a 6c 69 6b  "#likeFunc">.lik
a180: 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c  e(<i>X</i>,<i>Y<
a190: 2f 69 3e 29 3c 2f 61 3e 2e 20 20 49 66 20 61 6e  /i>)</a>.  If an
a1a0: 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
a1b0: 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 61 64  s present, it ad
a1c0: 64 73 0a 61 20 74 68 69 72 64 20 70 61 72 61 6d  ds.a third param
a1d0: 65 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63  eter to the func
a1e0: 74 69 6f 6e 20 63 61 6c 6c 2e 20 49 66 20 74 68  tion call. If th
a1f0: 65 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  e functionality 
a200: 6f 66 20 4c 49 4b 45 20 63 61 6e 20 62 65 0a 6f  of LIKE can be.o
a210: 76 65 72 72 69 64 64 65 6e 20 62 79 20 64 65 66  verridden by def
a220: 69 6e 69 6e 67 20 61 6e 20 61 6c 74 65 72 6e 61  ining an alterna
a230: 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
a240: 69 6f 6e 20 6f 66 20 74 68 65 0a 6c 69 6b 65 28  ion of the.like(
a250: 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 3c  ) SQL function.<
a260: 2f 70 3e 0a 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d  /p>.</p>..<a nam
a270: 65 3d 22 67 6c 6f 62 22 3e 3c 2f 61 3e 0a 3c 70  e="glob"></a>.<p
a280: 3e 54 68 65 20 47 4c 4f 42 20 6f 70 65 72 61 74  >The GLOB operat
a290: 6f 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  or is similar to
a2a0: 20 4c 49 4b 45 20 62 75 74 20 75 73 65 73 20 74   LIKE but uses t
a2b0: 68 65 20 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f  he Unix.file glo
a2c0: 62 62 69 6e 67 20 73 79 6e 74 61 78 20 66 6f 72  bbing syntax for
a2d0: 20 69 74 73 20 77 69 6c 64 63 61 72 64 73 2e 20   its wildcards. 
a2e0: 20 41 6c 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63   Also, GLOB is c
a2f0: 61 73 65 0a 73 65 6e 73 69 74 69 76 65 2c 20 75  ase.sensitive, u
a300: 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20 20 42 6f 74  nlike LIKE.  Bot
a310: 68 20 47 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20  h GLOB and LIKE 
a320: 6d 61 79 20 62 65 20 70 72 65 63 65 64 65 64 20  may be preceded 
a330: 62 79 0a 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f  by.the NOT keywo
a340: 72 64 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65  rd to invert the
a350: 20 73 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65   sense of the te
a360: 73 74 2e 20 20 54 68 65 20 69 6e 66 69 78 20 47  st.  The infix G
a370: 4c 4f 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73  LOB .operator is
a380: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
a390: 63 61 6c 6c 69 6e 67 20 74 68 65 20 75 73 65 72  calling the user
a3a0: 20 66 75 6e 63 74 69 6f 6e 20 3c 61 20 68 72 65   function <a hre
a3b0: 66 3d 22 23 67 6c 6f 62 46 75 6e 63 22 3e 0a 67  f="#globFunc">.g
a3c0: 6c 6f 62 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  lob(<i>X</i>,<i>
a3d0: 59 3c 2f 69 3e 29 3c 2f 61 3e 20 61 6e 64 20 63  Y</i>)</a> and c
a3e0: 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 62  an be modified b
a3f0: 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68 61  y overriding.tha
a400: 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  t function.</p>.
a410: 0a 3c 61 20 6e 61 6d 65 3d 22 72 65 67 65 78 70  .<a name="regexp
a420: 22 3e 3c 2f 61 3e 0a 3c 70 3e 54 68 65 20 52 45  "></a>.<p>The RE
a430: 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73  GEXP operator is
a440: 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
a450: 78 20 66 6f 72 20 74 68 65 20 72 65 67 65 78 70  x for the regexp
a460: 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ().user function
a470: 2e 20 20 4e 6f 20 72 65 67 65 78 70 28 29 20 75  .  No regexp() u
a480: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser function is 
a490: 64 65 66 69 6e 65 64 20 62 79 20 64 65 66 61 75  defined by defau
a4a0: 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66  lt.and so use of
a4b0: 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72   the REGEXP oper
a4c0: 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c  ator will normal
a4d0: 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a  ly result in an.
a4e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20  error message.  
a4f0: 49 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  If a user-define
a500: 64 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64  d function named
a510: 20 22 72 65 67 65 78 70 22 0a 69 73 20 64 65 66   "regexp".is def
a520: 69 6e 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  ined at run-time
a530: 2c 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20  , that function 
a540: 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69  will be called i
a550: 6e 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65  n order.to imple
a560: 6d 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20  ment the REGEXP 
a570: 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c  operator.</p>..<
a580: 70 3e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  p>A column name 
a590: 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
a5a0: 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
a5b0: 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41  in the CREATE TA
a5c0: 42 4c 45 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72  BLE.statement or
a5d0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
a5e0: 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64  owing special id
a5f0: 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52  entifiers: "<b>R
a600: 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f  OWID</b>",."<b>O
a610: 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e  ID</b>", or "<b>
a620: 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 54 68  _ROWID_</b>"..Th
a630: 65 73 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ese special iden
a640: 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63  tifiers all desc
a650: 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20  ribe the.unique 
a660: 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 6b  random integer k
a670: 65 79 20 28 74 68 65 20 22 72 6f 77 20 6b 65 79  ey (the "row key
a680: 22 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ") associated wi
a690: 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66  th every .row of
a6a0: 20 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 54 68   every table..Th
a6b0: 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
a6c0: 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
a6d0: 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
a6e0: 69 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  if the CREATE TA
a6f0: 42 4c 45 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f  BLE.statement do
a700: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61 20  es not define a 
a710: 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68  real column with
a720: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20   the same name. 
a730: 20 52 6f 77 20 6b 65 79 73 0a 61 63 74 20 6c 69   Row keys.act li
a740: 6b 65 20 72 65 61 64 2d 6f 6e 6c 79 20 63 6f 6c  ke read-only col
a750: 75 6d 6e 73 2e 20 20 41 20 72 6f 77 20 6b 65 79  umns.  A row key
a760: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79   can be used any
a770: 77 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a  where a regular.
a780: 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73  column can be us
a790: 65 64 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  ed, except that 
a7a0: 79 6f 75 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67  you cannot chang
a7b0: 65 20 74 68 65 20 76 61 6c 75 65 0a 6f 66 20 61  e the value.of a
a7c0: 20 72 6f 77 20 6b 65 79 20 69 6e 20 61 6e 20 55   row key in an U
a7d0: 50 44 41 54 45 20 6f 72 20 49 4e 53 45 52 54 20  PDATE or INSERT 
a7e0: 73 74 61 74 65 6d 65 6e 74 2e 0a 22 53 45 4c 45  statement.."SELE
a7f0: 43 54 20 2a 20 2e 2e 2e 22 20 64 6f 65 73 20 6e  CT * ..." does n
a800: 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f  ot return the ro
a810: 77 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53  w key.</p>..<p>S
a820: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
a830: 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65   can appear in e
a840: 78 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69  xpressions as ei
a850: 74 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68  ther the.right-h
a860: 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74  and operand of t
a870: 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20  he IN operator, 
a880: 61 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e  as a scalar quan
a890: 74 69 74 79 2c 20 6f 72 0a 61 73 20 74 68 65 20  tity, or.as the 
a8a0: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 45 58  operand of an EX
a8b0: 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 0a 41  ISTS operator..A
a8c0: 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74  s a scalar quant
a8d0: 69 74 79 20 6f 72 20 74 68 65 20 6f 70 65 72 61  ity or the opera
a8e0: 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72  nd of an IN oper
a8f0: 61 74 6f 72 2c 0a 74 68 65 20 53 45 4c 45 43 54  ator,.the SELECT
a900: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 6f 6e 6c   should have onl
a910: 79 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  y a single colum
a920: 6e 20 69 6e 20 69 74 73 0a 72 65 73 75 6c 74 2e  n in its.result.
a930: 20 20 43 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43    Compound SELEC
a940: 54 73 20 28 63 6f 6e 6e 65 63 74 65 64 20 77 69  Ts (connected wi
a950: 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65  th keywords like
a960: 20 55 4e 49 4f 4e 20 6f 72 0a 45 58 43 45 50 54   UNION or.EXCEPT
a970: 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 57  ) are allowed..W
a980: 69 74 68 20 74 68 65 20 45 58 49 53 54 53 20 6f  ith the EXISTS o
a990: 70 65 72 61 74 6f 72 2c 20 74 68 65 20 63 6f 6c  perator, the col
a9a0: 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
a9b0: 6c 74 20 73 65 74 20 6f 66 20 74 68 65 20 53 45  lt set of the SE
a9c0: 4c 45 43 54 20 61 72 65 0a 69 67 6e 6f 72 65 64  LECT are.ignored
a9d0: 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
a9e0: 69 6f 6e 20 72 65 74 75 72 6e 73 20 54 52 55 45  ion returns TRUE
a9f0: 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   if one or more 
aa00: 72 6f 77 73 20 65 78 69 73 74 0a 61 6e 64 20 46  rows exist.and F
aa10: 41 4c 53 45 20 69 66 20 74 68 65 20 72 65 73 75  ALSE if the resu
aa20: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
aa30: 0a 49 66 20 6e 6f 20 74 65 72 6d 73 20 69 6e 20  .If no terms in 
aa40: 74 68 65 20 53 45 4c 45 43 54 20 65 78 70 72 65  the SELECT expre
aa50: 73 73 69 6f 6e 20 72 65 66 65 72 20 74 6f 20 76  ssion refer to v
aa60: 61 6c 75 65 20 69 6e 20 74 68 65 20 63 6f 6e 74  alue in the cont
aa70: 61 69 6e 69 6e 67 0a 71 75 65 72 79 2c 20 74 68  aining.query, th
aa80: 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  en the expressio
aa90: 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  n is evaluated o
aaa0: 6e 63 65 20 70 72 69 6f 72 20 74 6f 20 61 6e 79  nce prior to any
aab0: 20 6f 74 68 65 72 0a 70 72 6f 63 65 73 73 69 6e   other.processin
aac0: 67 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  g and the result
aad0: 20 69 73 20 72 65 75 73 65 64 20 61 73 20 6e 65   is reused as ne
aae0: 63 65 73 73 61 72 79 2e 20 20 49 66 20 74 68 65  cessary.  If the
aaf0: 20 53 45 4c 45 43 54 20 65 78 70 72 65 73 73 69   SELECT expressi
ab00: 6f 6e 0a 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  on.does contain 
ab10: 76 61 72 69 61 62 6c 65 73 20 66 72 6f 6d 20 74  variables from t
ab20: 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2c 20  he outer query, 
ab30: 74 68 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20  then the SELECT 
ab40: 69 73 20 72 65 65 76 61 6c 75 61 74 65 64 0a 65  is reevaluated.e
ab50: 76 65 72 79 20 74 69 6d 65 20 69 74 20 69 73 20  very time it is 
ab60: 6e 65 65 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  needed.</p>..<p>
ab70: 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 69 73  When a SELECT is
ab80: 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
ab90: 6e 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65  nd of the IN ope
aba0: 72 61 74 6f 72 2c 20 74 68 65 20 49 4e 0a 6f 70  rator, the IN.op
abb0: 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 54  erator returns T
abc0: 52 55 45 20 69 66 20 74 68 65 20 72 65 73 75 6c  RUE if the resul
abd0: 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70  t of the left op
abe0: 65 72 61 6e 64 20 69 73 20 61 6e 79 20 6f 66 0a  erand is any of.
abf0: 74 68 65 20 76 61 6c 75 65 73 20 67 65 6e 65 72  the values gener
ac00: 61 74 65 64 20 62 79 20 74 68 65 20 73 65 6c 65  ated by the sele
ac10: 63 74 2e 20 20 54 68 65 20 49 4e 20 6f 70 65 72  ct.  The IN oper
ac20: 61 74 6f 72 20 6d 61 79 20 62 65 20 70 72 65 63  ator may be prec
ac30: 65 64 65 64 0a 62 79 20 74 68 65 20 4e 4f 54 20  eded.by the NOT 
ac40: 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72  keyword to inver
ac50: 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74  t the sense of t
ac60: 68 65 20 74 65 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  he test.</p>..<p
ac70: 3e 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 61  >When a SELECT a
ac80: 70 70 65 61 72 73 20 77 69 74 68 69 6e 20 61 6e  ppears within an
ac90: 20 65 78 70 72 65 73 73 69 6f 6e 20 62 75 74 20   expression but 
aca0: 69 73 20 6e 6f 74 20 74 68 65 20 72 69 67 68 74  is not the right
acb0: 0a 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49  .operand of an I
acc0: 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 6e  N operator, then
acd0: 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 6f   the first row o
ace0: 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
acf0: 74 68 65 0a 53 45 4c 45 43 54 20 62 65 63 6f 6d  the.SELECT becom
ad00: 65 73 20 74 68 65 20 76 61 6c 75 65 20 75 73 65  es the value use
ad10: 64 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  d in the express
ad20: 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 53 45 4c  ion.  If the SEL
ad30: 45 43 54 20 79 69 65 6c 64 73 0a 6d 6f 72 65 20  ECT yields.more 
ad40: 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20  than one result 
ad50: 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66  row, all rows af
ad60: 74 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72  ter the first ar
ad70: 65 20 69 67 6e 6f 72 65 64 2e 20 20 49 66 0a 74  e ignored.  If.t
ad80: 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73  he SELECT yields
ad90: 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74   no rows, then t
ada0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
adb0: 53 45 4c 45 43 54 20 69 73 20 4e 55 4c 4c 2e 3c  SELECT is NULL.<
adc0: 2f 70 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65  /p>..<p>A CAST e
add0: 78 70 72 65 73 73 69 6f 6e 20 63 68 61 6e 67 65  xpression change
ade0: 73 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  s the datatype o
adf0: 66 20 74 68 65 20 3c 65 78 70 72 3e 20 69 6e 74  f the <expr> int
ae00: 6f 20 74 68 65 0a 74 79 70 65 20 73 70 65 63 69  o the.type speci
ae10: 66 69 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65  fied by &lt;type
ae20: 26 67 74 3b 2e 20 0a 26 6c 74 3b 74 79 70 65 26  &gt;. .&lt;type&
ae30: 67 74 3b 20 63 61 6e 20 62 65 20 61 6e 79 20 6e  gt; can be any n
ae40: 6f 6e 2d 65 6d 70 74 79 20 74 79 70 65 20 6e 61  on-empty type na
ae50: 6d 65 20 74 68 61 74 20 69 73 20 76 61 6c 69 64  me that is valid
ae60: 0a 66 6f 72 20 74 68 65 20 74 79 70 65 20 69 6e  .for the type in
ae70: 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69   a column defini
ae80: 74 69 6f 6e 20 6f 66 20 61 20 43 52 45 41 54 45  tion of a CREATE
ae90: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
aea0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 6f 74 68 20 73  .</p>..<p>Both s
aeb0: 69 6d 70 6c 65 20 61 6e 64 20 61 67 67 72 65 67  imple and aggreg
aec0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
aed0: 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 41 20  e supported.  A 
aee0: 73 69 6d 70 6c 65 0a 66 75 6e 63 74 69 6f 6e 20  simple.function 
aef0: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61  can be used in a
af00: 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ny expression.  
af10: 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  Simple functions
af20: 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c 74   return.a result
af30: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61 73   immediately bas
af40: 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70 75  ed on their inpu
af50: 74 73 2e 20 20 41 67 67 72 65 67 61 74 65 20 66  ts.  Aggregate f
af60: 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c  unctions.may onl
af70: 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 20 53  y be used in a S
af80: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
af90: 20 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63    Aggregate func
afa0: 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68  tions compute.th
afb0: 65 69 72 20 72 65 73 75 6c 74 20 61 63 72 6f 73  eir result acros
afc0: 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  s all rows of th
afd0: 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70  e result set.</p
afe0: 3e 0a 0a 3c 70 3e 54 68 65 20 66 75 6e 63 74 69  >..<p>The functi
aff0: 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
b000: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
b010: 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
b020: 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20  ional.functions 
b030: 6d 61 79 20 62 65 20 77 72 69 74 74 65 6e 20 69  may be written i
b040: 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f  n C and added to
b050: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
b060: 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 3c  gine using.the <
b070: 61 20 68 72 65 66 3d 22 63 61 70 69 33 72 65 66  a href="capi3ref
b080: 2e 68 74 6d 6c 23 63 66 75 6e 63 22 3e 73 71 6c  .html#cfunc">sql
b090: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
b0a0: 74 69 6f 6e 28 29 3c 2f 61 3e 0a 41 50 49 2e 3c  tion()</a>.API.<
b0b0: 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
b0c0: 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
b0d0: 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  =10>.<tr>.<td va
b0e0: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
b0f0: 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31  ="right" width=1
b100: 32 30 3e 61 62 73 28 3c 69 3e 58 3c 2f 69 3e 29  20>abs(<i>X</i>)
b110: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
b120: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68  ="top">Return th
b130: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
b140: 20 6f 66 20 61 72 67 75 6d 65 6e 74 20 3c 69 3e   of argument <i>
b150: 58 3c 2f 69 3e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  X</i>.</td>.</tr
b160: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
b170: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
b180: 72 69 67 68 74 22 3e 63 6f 61 6c 65 73 63 65 28  right">coalesce(
b190: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
b1a0: 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20  >,...)</td>.<td 
b1b0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
b1c0: 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68  urn a copy of th
b1d0: 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  e first non-NULL
b1e0: 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a 61   argument.  If.a
b1f0: 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ll arguments are
b200: 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c 20   NULL then NULL 
b210: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 54 68  is returned.  Th
b220: 65 72 65 20 6d 75 73 74 20 62 65 20 61 74 20 6c  ere must be at l
b230: 65 61 73 74 20 0a 32 20 61 72 67 75 6d 65 6e 74  east .2 argument
b240: 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c  s.</td>.</tr>..<
b250: 74 72 3e 0a 3c 61 20 6e 61 6d 65 3d 22 67 6c 6f  tr>.<a name="glo
b260: 62 46 75 6e 63 22 3e 3c 2f 61 3e 0a 3c 74 64 20  bFunc"></a>.<td 
b270: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
b280: 67 6e 3d 22 72 69 67 68 74 22 3e 67 6c 6f 62 28  gn="right">glob(
b290: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
b2a0: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
b2b0: 67 6e 3d 22 74 6f 70 22 3e 54 68 69 73 20 66 75  gn="top">This fu
b2c0: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  nction is used t
b2d0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
b2e0: 22 3c 62 3e 58 20 47 4c 4f 42 20 59 3c 2f 62 3e  "<b>X GLOB Y</b>
b2f0: 22 20 73 79 6e 74 61 78 20 6f 66 20 53 51 4c 69  " syntax of SQLi
b300: 74 65 2e 20 20 54 68 65 0a 3c 61 20 68 72 65 66  te.  The.<a href
b310: 3d 22 63 61 70 69 33 72 65 66 2e 68 74 6d 6c 23  ="capi3ref.html#
b320: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
b330: 75 6e 63 74 69 6f 6e 22 3e 73 71 6c 69 74 65 33  unction">sqlite3
b340: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
b350: 28 29 3c 2f 61 3e 20 0a 69 6e 74 65 72 66 61 63  ()</a> .interfac
b360: 65 20 63 61 6e 0a 62 65 20 75 73 65 64 20 74 6f  e can.be used to
b370: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 66   override this f
b380: 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72  unction and ther
b390: 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f  eby change the o
b3a0: 70 65 72 61 74 69 6f 6e 0a 6f 66 20 74 68 65 20  peration.of the 
b3b0: 3c 61 20 68 72 65 66 3d 22 23 67 6c 6f 62 46 75  <a href="#globFu
b3c0: 6e 63 22 3e 47 4c 4f 42 3c 2f 61 3e 20 6f 70 65  nc">GLOB</a> ope
b3d0: 72 61 74 6f 72 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  rator.</td>.</tr
b3e0: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
b3f0: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
b400: 72 69 67 68 74 22 3e 69 66 6e 75 6c 6c 28 3c 69  right">ifnull(<i
b410: 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29  >X</i>,<i>Y</i>)
b420: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
b430: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20  ="top">Return a 
b440: 63 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72 73  copy of the firs
b450: 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d  t non-NULL argum
b460: 65 6e 74 2e 20 20 49 66 0a 62 6f 74 68 20 61 72  ent.  If.both ar
b470: 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c  guments are NULL
b480: 20 74 68 65 6e 20 4e 55 4c 4c 20 69 73 20 72 65   then NULL is re
b490: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 62 65 68  turned. This beh
b4a0: 61 76 65 73 20 74 68 65 20 73 61 6d 65 20 61 73  aves the same as
b4b0: 20 0a 3c 62 3e 63 6f 61 6c 65 73 63 65 28 29 3c   .<b>coalesce()<
b4c0: 2f 62 3e 20 61 62 6f 76 65 2e 3c 2f 74 64 3e 0a  /b> above.</td>.
b4d0: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
b4e0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
b4f0: 67 6e 3d 22 72 69 67 68 74 22 3e 6c 61 73 74 5f  gn="right">last_
b500: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3c 2f  insert_rowid()</
b510: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
b520: 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20  top">Return the 
b530: 52 4f 57 49 44 20 6f 66 20 74 68 65 20 6c 61 73  ROWID of the las
b540: 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f  t row insert fro
b550: 6d 20 74 68 69 73 0a 63 6f 6e 6e 65 63 74 69 6f  m this.connectio
b560: 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  n to the databas
b570: 65 2e 20 20 54 68 69 73 20 69 73 20 74 68 65 20  e.  This is the 
b580: 73 61 6d 65 20 76 61 6c 75 65 20 74 68 61 74 20  same value that 
b590: 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65  would be returne
b5a0: 64 0a 66 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71  d.from the <b>sq
b5b0: 6c 69 74 65 5f 6c 61 73 74 5f 69 6e 73 65 72 74  lite_last_insert
b5c0: 5f 72 6f 77 69 64 28 29 3c 2f 62 3e 20 41 50 49  _rowid()</b> API
b5d0: 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 74 64 3e 0a   function.</td>.
b5e0: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
b5f0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
b600: 67 6e 3d 22 72 69 67 68 74 22 3e 6c 65 6e 67 74  gn="right">lengt
b610: 68 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e  h(<i>X</i>)</td>
b620: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
b630: 22 3e 52 65 74 75 72 6e 20 74 68 65 20 73 74 72  ">Return the str
b640: 69 6e 67 20 6c 65 6e 67 74 68 20 6f 66 20 3c 69  ing length of <i
b650: 3e 58 3c 2f 69 3e 20 69 6e 20 63 68 61 72 61 63  >X</i> in charac
b660: 74 65 72 73 2e 0a 49 66 20 53 51 4c 69 74 65 20  ters..If SQLite 
b670: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  is configured to
b680: 20 73 75 70 70 6f 72 74 20 55 54 46 2d 38 2c 20   support UTF-8, 
b690: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
b6a0: 6f 66 20 55 54 46 2d 38 0a 63 68 61 72 61 63 74  of UTF-8.charact
b6b0: 65 72 73 20 69 73 20 72 65 74 75 72 6e 65 64 2c  ers is returned,
b6c0: 20 6e 6f 74 20 74 68 65 20 6e 75 6d 62 65 72 20   not the number 
b6d0: 6f 66 20 62 79 74 65 73 2e 3c 2f 74 64 3e 0a 3c  of bytes.</td>.<
b6e0: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 61 20 6e 61  /tr>..<tr>.<a na
b6f0: 6d 65 3d 22 6c 69 6b 65 46 75 6e 63 22 3e 3c 2f  me="likeFunc"></
b700: 61 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  a>.<td valign="t
b710: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
b720: 22 3e 6c 69 6b 65 28 3c 69 3e 58 3c 2f 69 3e 2c  ">like(<i>X</i>,
b730: 3c 69 3e 59 3c 2f 69 3e 20 5b 2c 3c 69 3e 5a 3c  <i>Y</i> [,<i>Z<
b740: 2f 69 3e 5d 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  /i>])</td>.<td v
b750: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 54 68 69  align="top">.Thi
b760: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  s function is us
b770: 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
b780: 74 68 65 20 22 3c 62 3e 58 20 4c 49 4b 45 20 59  the "<b>X LIKE Y
b790: 20 5b 45 53 43 41 50 45 20 5a 5d 3c 2f 62 3e 22   [ESCAPE Z]</b>"
b7a0: 0a 73 79 6e 74 61 78 20 6f 66 20 53 51 4c 2e 20  .syntax of SQL. 
b7b0: 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
b7c0: 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
b7d0: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
b7e0: 68 65 0a 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he.user-function
b7f0: 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68   is invoked with
b800: 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73   three arguments
b810: 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
b820: 69 73 0a 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  is.invoked with 
b830: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e  two arguments on
b840: 6c 79 2e 20 54 68 65 20 0a 3c 61 20 68 72 65 66  ly. The .<a href
b850: 3d 22 63 61 70 69 33 72 65 66 2e 68 74 6d 6c 23  ="capi3ref.html#
b860: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
b870: 75 6e 63 74 69 6f 6e 22 3e 0a 73 71 6c 69 74 65  unction">.sqlite
b880: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
b890: 28 29 3c 2f 61 3e 20 69 6e 74 65 72 66 61 63 65  ()</a> interface
b8a0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
b8b0: 6f 76 65 72 72 69 64 65 20 74 68 69 73 0a 66 75  override this.fu
b8c0: 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65  nction and there
b8d0: 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70  by change the op
b8e0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c  eration of the <
b8f0: 61 0a 68 72 65 66 3d 20 22 23 6c 69 6b 65 22 3e  a.href= "#like">
b900: 4c 49 4b 45 3c 2f 61 3e 20 6f 70 65 72 61 74 6f  LIKE</a> operato
b910: 72 2e 20 57 68 65 6e 20 64 6f 69 6e 67 20 74 68  r. When doing th
b920: 69 73 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d  is, it may be im
b930: 70 6f 72 74 61 6e 74 0a 74 6f 20 6f 76 65 72 72  portant.to overr
b940: 69 64 65 20 62 6f 74 68 20 74 68 65 20 74 77 6f  ide both the two
b950: 20 61 6e 64 20 74 68 72 65 65 20 61 72 67 75 6d   and three argum
b960: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
b970: 74 68 65 20 6c 69 6b 65 28 29 20 0a 66 75 6e 63  the like() .func
b980: 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c  tion. Otherwise,
b990: 20 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20   different code 
b9a0: 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f  may be called to
b9b0: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 4c   implement the.L
b9c0: 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 65 70  IKE operator dep
b9d0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
b9e0: 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
b9f0: 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 73  PE clause was .s
ba00: 70 65 63 69 66 69 65 64 2e 3c 2f 74 64 3e 0a 3c  pecified.</td>.<
ba10: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
ba20: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
ba30: 6e 3d 22 72 69 67 68 74 22 3e 6c 6f 77 65 72 28  n="right">lower(
ba40: 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>X</i>)</td>.<
ba50: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
ba60: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
ba70: 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e   string <i>X</i>
ba80: 20 77 69 6c 6c 20 61 6c 6c 20 63 68 61 72 61 63   will all charac
ba90: 74 65 72 73 0a 63 6f 6e 76 65 72 74 65 64 20 74  ters.converted t
baa0: 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 54  o lower case.  T
bab0: 68 65 20 43 20 6c 69 62 72 61 72 79 20 3c 62 3e  he C library <b>
bac0: 74 6f 6c 6f 77 65 72 28 29 3c 2f 62 3e 20 72 6f  tolower()</b> ro
bad0: 75 74 69 6e 65 20 69 73 20 75 73 65 64 0a 66 6f  utine is used.fo
bae0: 72 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  r the conversion
baf0: 2c 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68  , which means th
bb00: 61 74 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  at this function
bb10: 20 6d 69 67 68 74 20 6e 6f 74 0a 77 6f 72 6b 20   might not.work 
bb20: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 55 54 46  correctly on UTF
bb30: 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e 3c 2f  -8 characters.</
bb40: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
bb50: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
bb60: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6d   align="right">m
bb70: 61 78 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  ax(<i>X</i>,<i>Y
bb80: 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c  </i>,...)</td>.<
bb90: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
bba0: 52 65 74 75 72 6e 20 74 68 65 20 61 72 67 75 6d  Return the argum
bbb0: 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d 61 78  ent with the max
bbc0: 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20 41 72 67  imum value.  Arg
bbd0: 75 6d 65 6e 74 73 0a 6d 61 79 20 62 65 20 73 74  uments.may be st
bbe0: 72 69 6e 67 73 20 69 6e 20 61 64 64 69 74 69 6f  rings in additio
bbf0: 6e 20 74 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54  n to numbers.  T
bc00: 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
bc10: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
bc20: 79 20 74 68 65 20 75 73 75 61 6c 20 73 6f 72 74  y the usual sort
bc30: 20 6f 72 64 65 72 2e 20 20 4e 6f 74 65 20 74 68   order.  Note th
bc40: 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20  at <b>max()</b> 
bc50: 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
bc60: 74 69 6f 6e 20 77 68 65 6e 0a 69 74 20 68 61 73  tion when.it has
bc70: 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
bc80: 65 6e 74 73 20 62 75 74 20 63 6f 6e 76 65 72 74  ents but convert
bc90: 73 20 74 6f 20 61 6e 20 61 67 67 72 65 67 61 74  s to an aggregat
bca0: 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 67 69  e function if gi
bcb0: 76 65 6e 0a 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  ven.only a singl
bcc0: 65 20 61 72 67 75 6d 65 6e 74 2e 3c 2f 74 64 3e  e argument.</td>
bcd0: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
bce0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
bcf0: 69 67 6e 3d 22 72 69 67 68 74 22 3e 6d 69 6e 28  ign="right">min(
bd00: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
bd10: 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20  >,...)</td>.<td 
bd20: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74  valign="top">Ret
bd30: 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74  urn the argument
bd40: 20 77 69 74 68 20 74 68 65 20 6d 69 6e 69 6d 75   with the minimu
bd50: 6d 20 76 61 6c 75 65 2e 20 20 41 72 67 75 6d 65  m value.  Argume
bd60: 6e 74 73 0a 6d 61 79 20 62 65 20 73 74 72 69 6e  nts.may be strin
bd70: 67 73 20 69 6e 20 61 64 64 69 74 69 6f 6e 20 74  gs in addition t
bd80: 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54 68 65 20  o numbers.  The 
bd90: 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73  minimum value is
bda0: 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20 74   determined.by t
bdb0: 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72  he usual sort or
bdc0: 64 65 72 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  der.  Note that 
bdd0: 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20  <b>min()</b> is 
bde0: 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
bdf0: 6e 20 77 68 65 6e 0a 69 74 20 68 61 73 20 32 20  n when.it has 2 
be00: 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
be10: 73 20 62 75 74 20 63 6f 6e 76 65 72 74 73 20 74  s but converts t
be20: 6f 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  o an aggregate f
be30: 75 6e 63 74 69 6f 6e 20 69 66 20 67 69 76 65 6e  unction if given
be40: 0a 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61  .only a single a
be50: 72 67 75 6d 65 6e 74 2e 3c 2f 74 64 3e 0a 3c 2f  rgument.</td>.</
be60: 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  tr>..<tr>.<td va
be70: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
be80: 3d 22 72 69 67 68 74 22 3e 6e 75 6c 6c 69 66 28  ="right">nullif(
be90: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69  <i>X</i>,<i>Y</i
bea0: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
beb0: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
bec0: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
bed0: 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  nt if the argume
bee0: 6e 74 73 20 61 72 65 20 64 69 66 66 65 72 65 6e  nts are differen
bef0: 74 2c 20 0a 6f 74 68 65 72 77 69 73 65 20 72 65  t, .otherwise re
bf00: 74 75 72 6e 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a  turn NULL.</td>.
bf10: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
bf20: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
bf30: 67 6e 3d 22 72 69 67 68 74 22 3e 71 75 6f 74 65  gn="right">quote
bf40: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
bf50: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
bf60: 3e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65  >This routine re
bf70: 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 77  turns a string w
bf80: 68 69 63 68 20 69 73 20 74 68 65 20 76 61 6c 75  hich is the valu
bf90: 65 20 6f 66 0a 69 74 73 20 61 72 67 75 6d 65 6e  e of.its argumen
bfa0: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69  t suitable for i
bfb0: 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e  nclusion into an
bfc0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
bfd0: 65 6e 74 2e 0a 53 74 72 69 6e 67 73 20 61 72 65  ent..Strings are
bfe0: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 73   surrounded by s
bff0: 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69 74  ingle-quotes wit
c000: 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e 74  h escapes on int
c010: 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 61 73 20  erior quotes.as 
c020: 6e 65 65 64 65 64 2e 20 20 42 4c 4f 42 73 20 61  needed.  BLOBs a
c030: 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65  re encoded as he
c040: 78 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61  xadecimal litera
c050: 6c 73 2e 0a 54 68 65 20 63 75 72 72 65 6e 74 20  ls..The current 
c060: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
c070: 66 20 56 41 43 55 55 4d 20 75 73 65 73 20 74 68  f VACUUM uses th
c080: 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
c090: 65 20 66 75 6e 63 74 69 6f 6e 0a 69 73 20 61 6c  e function.is al
c0a0: 73 6f 20 75 73 65 66 75 6c 20 77 68 65 6e 20 77  so useful when w
c0b0: 72 69 74 69 6e 67 20 74 72 69 67 67 65 72 73 20  riting triggers 
c0c0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 75 6e 64  to implement und
c0d0: 6f 2f 72 65 64 6f 20 66 75 6e 63 74 69 6f 6e 61  o/redo functiona
c0e0: 6c 69 74 79 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72  lity..</td>.</tr
c0f0: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
c100: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
c110: 72 69 67 68 74 22 3e 72 61 6e 64 6f 6d 28 2a 29  right">random(*)
c120: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
c130: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20  ="top">Return a 
c140: 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 62  random integer b
c150: 65 74 77 65 65 6e 20 2d 32 31 34 37 34 38 33 36  etween -21474836
c160: 34 38 20 61 6e 64 0a 2b 32 31 34 37 34 38 33 36  48 and.+21474836
c170: 34 37 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  47.</td>.</tr>..
c180: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
c190: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
c1a0: 68 74 22 3e 72 6f 75 6e 64 28 3c 69 3e 58 3c 2f  ht">round(<i>X</
c1b0: 69 3e 29 3c 62 72 3e 72 6f 75 6e 64 28 3c 69 3e  i>)<br>round(<i>
c1c0: 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c  X</i>,<i>Y</i>)<
c1d0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
c1e0: 22 74 6f 70 22 3e 52 6f 75 6e 64 20 6f 66 66 20  "top">Round off 
c1f0: 74 68 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58 3c  the number <i>X<
c200: 2f 69 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e 20  /i> to <i>Y</i> 
c210: 64 69 67 69 74 73 20 74 6f 20 74 68 65 0a 72 69  digits to the.ri
c220: 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d  ght of the decim
c230: 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66 20 74 68  al point.  If th
c240: 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d  e <i>Y</i> argum
c250: 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
c260: 30 20 69 73 20 0a 61 73 73 75 6d 65 64 2e 3c 2f  0 is .assumed.</
c270: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
c280: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
c290: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73   align="right">s
c2a0: 6f 75 6e 64 65 78 28 3c 69 3e 58 3c 2f 69 3e 29  oundex(<i>X</i>)
c2b0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
c2c0: 3d 22 74 6f 70 22 3e 43 6f 6d 70 75 74 65 20 74  ="top">Compute t
c2d0: 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64  he soundex encod
c2e0: 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72 69 6e  ing of the strin
c2f0: 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 54 68 65 20  g <i>X</i>..The 
c300: 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73  string "?000" is
c310: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
c320: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c   argument is NUL
c330: 4c 2e 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  L..This function
c340: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
c350: 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
c360: 6c 74 2e 0a 49 74 20 69 73 20 6f 6e 6c 79 20 61  lt..It is only a
c370: 76 61 69 6c 61 62 6c 65 20 74 68 65 20 2d 44 53  vailable the -DS
c380: 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 3d 31 20  QLITE_SOUNDEX=1 
c390: 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 0a  compiler option.
c3a0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c  is used when SQL
c3b0: 69 74 65 20 69 73 20 62 75 69 6c 74 2e 3c 2f 74  ite is built.</t
c3c0: 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c  d>.</tr>..<tr>.<
c3d0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
c3e0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 71  align="right">sq
c3f0: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 2a 29 3c  lite_version(*)<
c400: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
c410: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
c420: 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20   version string 
c430: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
c440: 69 62 72 61 72 79 0a 74 68 61 74 20 69 73 20 72  ibrary.that is r
c450: 75 6e 6e 69 6e 67 2e 20 20 45 78 61 6d 70 6c 65  unning.  Example
c460: 3a 20 20 22 32 2e 38 2e 30 22 3c 2f 74 64 3e 0a  :  "2.8.0"</td>.
c470: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
c480: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
c490: 67 6e 3d 22 72 69 67 68 74 22 3e 73 75 62 73 74  gn="right">subst
c4a0: 72 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c  r(<i>X</i>,<i>Y<
c4b0: 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 3c 2f 74  /i>,<i>Z</i>)</t
c4c0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
c4d0: 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 73 75 62  op">Return a sub
c4e0: 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20  string of input 
c4f0: 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20  string <i>X</i> 
c500: 74 68 61 74 20 62 65 67 69 6e 73 0a 77 69 74 68  that begins.with
c510: 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74 68   the <i>Y</i>-th
c520: 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 20 77   character and w
c530: 68 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f 69 3e  hich is <i>Z</i>
c540: 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
c550: 2e 0a 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  ..The left-most 
c560: 63 68 61 72 61 63 74 65 72 20 6f 66 20 3c 69 3e  character of <i>
c570: 58 3c 2f 69 3e 20 69 73 20 6e 75 6d 62 65 72 20  X</i> is number 
c580: 31 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e 20  1.  If <i>Y</i> 
c590: 69 73 20 6e 65 67 61 74 69 76 65 0a 74 68 65 20  is negative.the 
c5a0: 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63  the first charac
c5b0: 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74  ter of the subst
c5c0: 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79  ring is found by
c5d0: 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74   counting from t
c5e0: 68 65 0a 72 69 67 68 74 20 72 61 74 68 65 72 20  he.right rather 
c5f0: 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20  than the left.  
c600: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6e  If SQLite is con
c610: 66 69 67 75 72 65 64 20 74 6f 20 73 75 70 70 6f  figured to suppo
c620: 72 74 20 55 54 46 2d 38 2c 0a 74 68 65 6e 20 63  rt UTF-8,.then c
c630: 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63 65  haracters indice
c640: 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75 61  s refer to actua
c650: 6c 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  l UTF-8 characte
c660: 72 73 2c 20 6e 6f 74 20 62 79 74 65 73 2e 3c 2f  rs, not bytes.</
c670: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
c680: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
c690: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 74   align="right">t
c6a0: 79 70 65 6f 66 28 3c 69 3e 58 3c 2f 69 3e 29 3c  ypeof(<i>X</i>)<
c6b0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
c6c0: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
c6d0: 20 74 79 70 65 20 6f 66 20 74 68 65 20 65 78 70   type of the exp
c6e0: 72 65 73 73 69 6f 6e 20 3c 69 3e 58 3c 2f 69 3e  ression <i>X</i>
c6f0: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 0a 72 65 74  .  The only .ret
c700: 75 72 6e 20 76 61 6c 75 65 73 20 61 72 65 20 22  urn values are "
c710: 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72 22  null", "integer"
c720: 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78 74 22  , "real", "text"
c730: 2c 20 61 6e 64 20 22 62 6c 6f 62 22 2e 0a 53 51  , and "blob"..SQ
c740: 4c 69 74 65 27 73 20 74 79 70 65 20 68 61 6e 64  Lite's type hand
c750: 6c 69 6e 67 20 69 73 20 0a 65 78 70 6c 61 69 6e  ling is .explain
c760: 65 64 20 69 6e 20 3c 61 20 68 72 65 66 3d 22 64  ed in <a href="d
c770: 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22 3e 44  atatype3.html">D
c780: 61 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c 69  atatypes in SQLi
c790: 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f 61 3e  te Version 3</a>
c7a0: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
c7b0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
c7c0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
c7d0: 22 3e 75 70 70 65 72 28 3c 69 3e 58 3c 2f 69 3e  ">upper(<i>X</i>
c7e0: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
c7f0: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 61  n="top">Return a
c800: 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73   copy of input s
c810: 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 63  tring <i>X</i> c
c820: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 0a  onverted to all.
c830: 75 70 70 65 72 2d 63 61 73 65 20 6c 65 74 74 65  upper-case lette
c840: 72 73 2e 20 20 54 68 65 20 69 6d 70 6c 65 6d 65  rs.  The impleme
c850: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ntation of this 
c860: 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68  function uses th
c870: 65 20 43 20 6c 69 62 72 61 72 79 0a 72 6f 75 74  e C library.rout
c880: 69 6e 65 20 3c 62 3e 74 6f 75 70 70 65 72 28 29  ine <b>toupper()
c890: 3c 2f 62 3e 20 77 68 69 63 68 20 6d 65 61 6e 73  </b> which means
c8a0: 20 69 74 20 6d 61 79 20 6e 6f 74 20 77 6f 72 6b   it may not work
c8b0: 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 0a 55   correctly on .U
c8c0: 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 3c 2f 74  TF-8 strings.</t
c8d0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  d>.</tr>.</table
c8e0: 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65  >..<p>.The aggre
c8f0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
c900: 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
c910: 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
c920: 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  ult.  Additional
c930: 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  .aggregate funct
c940: 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
c950: 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75  C may be added u
c960: 73 69 6e 67 20 74 68 65 20 0a 3c 61 20 68 72 65  sing the .<a hre
c970: 66 3d 22 63 61 70 69 33 72 65 66 2e 68 74 6d 6c  f="capi3ref.html
c980: 23 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  #sqlite3_create_
c990: 66 75 6e 63 74 69 6f 6e 22 3e 73 71 6c 69 74 65  function">sqlite
c9a0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
c9b0: 6e 28 29 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e  n()</a>.API.</p>
c9c0: 0a 0a 3c 70 3e 0a 49 6e 20 61 6e 79 20 61 67 67  ..<p>.In any agg
c9d0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
c9e0: 74 68 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e  that takes a sin
c9f0: 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68  gle argument, th
ca00: 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20  at argument.can 
ca10: 62 65 20 70 72 65 63 65 65 64 65 64 20 62 79 20  be preceeded by 
ca20: 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54  the keyword DIST
ca30: 49 4e 43 54 2e 20 20 49 6e 20 73 75 63 68 20 63  INCT.  In such c
ca40: 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a  ases, duplicate.
ca50: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c  elements are fil
ca60: 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65 69  tered before bei
ca70: 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74  ng passed into t
ca80: 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
ca90: 63 74 69 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d 70  ction..For examp
caa0: 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  le, the function
cab0: 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   "count(distinct
cac0: 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e   X)" will return
cad0: 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64   the number.of d
cae0: 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f  istinct values o
caf0: 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65  f column X inste
cb00: 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20  ad of the total 
cb10: 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75  number of non-nu
cb20: 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c  ll.values in col
cb30: 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61  umn X..</p>..<ta
cb40: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
cb50: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72  lpadding=10>.<tr
cb60: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
cb70: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
cb80: 20 77 69 64 74 68 3d 31 32 30 3e 61 76 67 28 3c   width=120>avg(<
cb90: 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74  i>X</i>)</td>.<t
cba0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
cbb0: 65 74 75 72 6e 20 74 68 65 20 61 76 65 72 61 67  eturn the averag
cbc0: 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e  e value of all n
cbd0: 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e  on-NULL <i>X</i>
cbe0: 20 77 69 74 68 69 6e 20 61 0a 67 72 6f 75 70 2e   within a.group.
cbf0: 20 20 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f    String and BLO
cc00: 42 20 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f  B values that do
cc10: 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e   not look like n
cc20: 75 6d 62 65 72 73 20 61 72 65 0a 69 6e 74 65 72  umbers are.inter
cc30: 70 72 65 74 65 64 20 61 73 20 30 2e 0a 54 68 65  preted as 0..The
cc40: 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28 29   result of avg()
cc50: 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
cc60: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
cc70: 65 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 69 6e  e even if all.in
cc80: 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72  puts are integer
cc90: 73 2e 20 3c 2f 70 3e 3c 2f 74 64 3e 0a 3c 2f 74  s. </p></td>.</t
cca0: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
ccb0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
ccc0: 22 72 69 67 68 74 22 3e 63 6f 75 6e 74 28 3c 69  "right">count(<i
ccd0: 3e 58 3c 2f 69 3e 29 3c 62 72 3e 63 6f 75 6e 74  >X</i>)<br>count
cce0: 28 2a 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  (*)</td>.<td val
ccf0: 69 67 6e 3d 22 74 6f 70 22 3e 54 68 65 20 66 69  ign="top">The fi
cd00: 72 73 74 20 66 6f 72 6d 20 72 65 74 75 72 6e 20  rst form return 
cd10: 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e  a count of the n
cd20: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 74  umber of times.t
cd30: 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20  hat <i>X</i> is 
cd40: 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72  not NULL in a gr
cd50: 6f 75 70 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  oup.  The second
cd60: 20 66 6f 72 6d 20 28 77 69 74 68 20 6e 6f 20 61   form (with no a
cd70: 72 67 75 6d 65 6e 74 29 0a 72 65 74 75 72 6e 73  rgument).returns
cd80: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
cd90: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
cda0: 20 67 72 6f 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74   group.</td>.</t
cdb0: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
cdc0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
cdd0: 22 72 69 67 68 74 22 3e 6d 61 78 28 3c 69 3e 58  "right">max(<i>X
cde0: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
cdf0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75  align="top">Retu
ce00: 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76  rn the maximum v
ce10: 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
ce20: 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
ce30: 0a 54 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20  .The usual sort 
ce40: 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f  order is used to
ce50: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6d   determine the m
ce60: 61 78 69 6d 75 6d 2e 3c 2f 74 64 3e 0a 3c 2f 74  aximum.</td>.</t
ce70: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
ce80: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
ce90: 22 72 69 67 68 74 22 3e 6d 69 6e 28 3c 69 3e 58  "right">min(<i>X
cea0: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
ceb0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75  align="top">Retu
cec0: 72 6e 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e  rn the minimum n
ced0: 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66  on-NULL value of
cee0: 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
cef0: 68 65 20 67 72 6f 75 70 2e 0a 54 68 65 20 75 73  he group..The us
cf00: 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20 69  ual sort order i
cf10: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
cf20: 69 6e 65 20 74 68 65 20 6d 69 6e 69 6d 75 6d 2e  ine the minimum.
cf30: 20 20 4e 55 4c 4c 20 69 73 20 6f 6e 6c 79 20 72    NULL is only r
cf40: 65 74 75 72 6e 65 64 0a 69 66 20 61 6c 6c 20 76  eturned.if all v
cf50: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
cf60: 75 70 20 61 72 65 20 4e 55 4c 4c 2e 3c 2f 74 64  up are NULL.</td
cf70: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
cf80: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
cf90: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 75 6d  lign="right">sum
cfa0: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 3e 74 6f  (<i>X</i>)<br>to
cfb0: 74 61 6c 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74  tal(<i>X</i>)</t
cfc0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
cfd0: 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20 6e  op">Return the n
cfe0: 75 6d 65 72 69 63 20 73 75 6d 20 6f 66 20 61 6c  umeric sum of al
cff0: 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
d000: 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
d010: 20 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20     If there are 
d020: 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
d030: 74 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28  t rows then sum(
d040: 29 20 72 65 74 75 72 6e 73 0a 20 20 20 4e 55 4c  ) returns.   NUL
d050: 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65  L but total() re
d060: 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 20 4e 55  turns 0.0..   NU
d070: 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c  LL is not normal
d080: 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65 73  ly a helpful res
d090: 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d 20  ult for the sum 
d0a0: 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 20 62 75  of no rows.   bu
d0b0: 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  t the SQL standa
d0c0: 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61  rd requires it a
d0d0: 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20  nd most other.  
d0e0: 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
d0f0: 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
d100: 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
d110: 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
d120: 20 69 6e 20 74 68 65 0a 20 20 20 73 61 6d 65 20   in the.   same 
d130: 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  way in order to 
d140: 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20  be compatible.  
d150: 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72   The non-standar
d160: 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69  d total() functi
d170: 6f 6e 0a 20 20 20 69 73 20 70 72 6f 76 69 64 65  on.   is provide
d180: 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e  d as a convenien
d190: 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72  t way to work ar
d1a0: 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e  ound this design
d1b0: 20 70 72 6f 62 6c 65 6d 0a 20 20 20 69 6e 20 74   problem.   in t
d1c0: 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
d1d0: 3c 2f 70 3e 0a 0a 20 20 20 3c 70 3e 54 68 65 20  </p>..   <p>The 
d1e0: 72 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28  result of total(
d1f0: 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
d200: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
d210: 75 65 2e 0a 20 20 20 54 68 65 20 72 65 73 75 6c  ue..   The resul
d220: 74 20 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e  t of sum() is an
d230: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
d240: 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  f all non-NULL i
d250: 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65  nputs are intege
d260: 72 73 2e 0a 20 20 20 49 66 20 61 6e 79 20 69 6e  rs..   If any in
d270: 70 75 74 20 74 6f 20 73 75 6d 28 29 20 69 73 20  put to sum() is 
d280: 6e 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67  neither an integ
d290: 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 20  er or a NULL.   
d2a0: 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72  then sum() retur
d2b0: 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ns a floating po
d2c0: 69 6e 74 20 76 61 6c 75 65 0a 20 20 20 77 68 69  int value.   whi
d2d0: 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20 61  ch might be an a
d2e0: 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20  pproximation to 
d2f0: 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70  the true sum.</p
d300: 3e 0a 0a 20 20 20 3c 70 3e 53 75 6d 28 29 20 77  >..   <p>Sum() w
d310: 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e  ill throw an "in
d320: 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20  teger overflow" 
d330: 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c  exception if all
d340: 20 69 6e 70 75 74 73 0a 20 20 20 61 72 65 20 69   inputs.   are i
d350: 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a  ntegers or NULL.
d360: 20 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65     and an intege
d370: 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  r overflow occur
d380: 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64  s at any point d
d390: 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74  uring the comput
d3a0: 61 74 69 6f 6e 2e 0a 20 20 20 54 6f 74 61 6c 28  ation..   Total(
d3b0: 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61  ) never throws a
d3c0: 6e 20 65 78 63 65 70 74 69 6f 6e 2e 3c 2f 70 3e  n exception.</p>
d3d0: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
d3e0: 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45  }...Section INSE
d3f0: 52 54 20 69 6e 73 65 72 74 0a 0a 53 79 6e 74 61  RT insert..Synta
d400: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
d410: 7d 20 7b 0a 49 4e 53 45 52 54 20 5b 4f 52 20 3c  } {.INSERT [OR <
d420: 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74  conflict-algorit
d430: 68 6d 3e 5d 20 49 4e 54 4f 20 5b 3c 64 61 74 61  hm>] INTO [<data
d440: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
d450: 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 3c 63 6f  able-name> [(<co
d460: 6c 75 6d 6e 2d 6c 69 73 74 3e 29 5d 20 56 41 4c  lumn-list>)] VAL
d470: 55 45 53 28 3c 76 61 6c 75 65 2d 6c 69 73 74 3e  UES(<value-list>
d480: 29 20 7c 0a 49 4e 53 45 52 54 20 5b 4f 52 20 3c  ) |.INSERT [OR <
d490: 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74  conflict-algorit
d4a0: 68 6d 3e 5d 20 49 4e 54 4f 20 5b 3c 64 61 74 61  hm>] INTO [<data
d4b0: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
d4c0: 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 3c 63 6f  able-name> [(<co
d4d0: 6c 75 6d 6e 2d 6c 69 73 74 3e 29 5d 20 3c 73 65  lumn-list>)] <se
d4e0: 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e 0a  lect-statement>.
d4f0: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
d500: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
d510: 74 20 63 6f 6d 65 73 20 69 6e 20 74 77 6f 20 62  t comes in two b
d520: 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 54 68 65  asic forms.  The
d530: 20 66 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74   first form.(wit
d540: 68 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b  h the "VALUES" k
d550: 65 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20  eyword) creates 
d560: 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77  a single new row
d570: 20 69 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20   in an existing 
d580: 74 61 62 6c 65 2e 0a 49 66 20 6e 6f 20 63 6f 6c  table..If no col
d590: 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63  umn-list is spec
d5a0: 69 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e  ified then the n
d5b0: 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
d5c0: 6d 75 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65  must.be the same
d5d0: 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   as the number o
d5e0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
d5f0: 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20 63 6f   table.  If a co
d600: 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70 65  lumn-list.is spe
d610: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
d620: 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
d630: 73 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65  s must match the
d640: 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69   number of.speci
d650: 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 43  fied columns.  C
d660: 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
d670: 62 6c 65 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  ble that do not 
d680: 61 70 70 65 61 72 20 69 6e 20 74 68 65 0a 63 6f  appear in the.co
d690: 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 66 69  lumn list are fi
d6a0: 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 64 65  lled with the de
d6b0: 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f 72 20  fault value, or 
d6c0: 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 74  with NULL if not
d6d0: 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69  .default value i
d6e0: 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c 2f 70  s specified..</p
d6f0: 3e 0a 0a 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64  >..<p>The second
d700: 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53   form of the INS
d710: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 61  ERT statement ta
d720: 6b 65 73 20 69 74 20 64 61 74 61 20 66 72 6f 6d  kes it data from
d730: 20 61 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a.SELECT statem
d740: 65 6e 74 2e 20 20 54 68 65 20 6e 75 6d 62 65 72  ent.  The number
d750: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
d760: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
d770: 0a 53 45 4c 45 43 54 20 6d 75 73 74 20 65 78 61  .SELECT must exa
d780: 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 6e  ctly match the n
d790: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
d7a0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 66   in the table if
d7b0: 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20  .no column list 
d7c0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 6f 72  is specified, or
d7d0: 20 69 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74   it must match t
d7e0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
d7f0: 75 6d 6e 73 0a 6e 61 6d 65 20 69 6e 20 74 68 65  umns.name in the
d800: 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e 20 20 41   column list.  A
d810: 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 6d 61   new entry is ma
d820: 64 65 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a  de in the table.
d830: 66 6f 72 20 65 76 65 72 79 20 72 6f 77 20 6f 66  for every row of
d840: 20 74 68 65 20 53 45 4c 45 43 54 20 72 65 73 75   the SELECT resu
d850: 6c 74 2e 20 20 54 68 65 20 53 45 4c 45 43 54 20  lt.  The SELECT 
d860: 6d 61 79 20 62 65 20 73 69 6d 70 6c 65 0a 6f 72  may be simple.or
d870: 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 49 66 20 74   compound.  If t
d880: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
d890: 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
d8a0: 20 42 59 20 63 6c 61 75 73 65 2c 0a 74 68 65 20   BY clause,.the 
d8b0: 4f 52 44 45 52 20 42 59 20 69 73 20 69 67 6e 6f  ORDER BY is igno
d8c0: 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  red.</p>..<p>The
d8d0: 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69   optional confli
d8e0: 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73  ct-clause allows
d8f0: 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69   the specificati
d900: 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61  on of an alterna
d910: 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20  tive.constraint 
d920: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
d930: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  ion algorithm to
d940: 20 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73   use during this
d950: 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65   one command..Se
d960: 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69  e the section ti
d970: 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63  tled.<a href="#c
d980: 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46  onflict">ON CONF
d990: 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64  LICT</a> for add
d9a0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d9b0: 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69  ion..For compati
d9c0: 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
d9d0: 4c 2c 20 74 68 65 20 70 61 72 73 65 72 20 61 6c  L, the parser al
d9e0: 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20  lows the use of 
d9f0: 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f  the.single keywo
da00: 72 64 20 3c 61 20 68 72 65 66 3d 22 23 72 65 70  rd <a href="#rep
da10: 6c 61 63 65 22 3e 52 45 50 4c 41 43 45 3c 2f 61  lace">REPLACE</a
da20: 3e 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  > as an alias fo
da30: 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50  r "INSERT OR REP
da40: 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 0a  LACE"..</p>.}...
da50: 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46  Section {ON CONF
da60: 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e  LICT clause} con
da70: 66 6c 69 63 74 0a 0a 53 79 6e 74 61 78 20 7b 63  flict..Syntax {c
da80: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 7d 20  onflict-clause} 
da90: 7b 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 3c 63  {.ON CONFLICT <c
daa0: 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68  onflict-algorith
dab0: 6d 3e 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74 2d 61  m>.} {conflict-a
dac0: 6c 67 6f 72 69 74 68 6d 7d 20 7b 0a 52 4f 4c 4c  lgorithm} {.ROLL
dad0: 42 41 43 4b 20 7c 20 41 42 4f 52 54 20 7c 20 46  BACK | ABORT | F
dae0: 41 49 4c 20 7c 20 49 47 4e 4f 52 45 20 7c 20 52  AIL | IGNORE | R
daf0: 45 50 4c 41 43 45 0a 7d 0a 0a 70 75 74 73 20 7b  EPLACE.}..puts {
db00: 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
db10: 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
db20: 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
db30: 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
db40: 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
db50: 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
db60: 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
db70: 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
db80: 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
db90: 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
dba0: 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
dbb0: 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
dbc0: 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
dbd0: 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
dbe0: 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
dbf0: 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
dc00: 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66  .<p>The syntax f
dc10: 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  or the ON CONFLI
dc20: 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20  CT clause is as 
dc30: 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a  shown above for.
dc40: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
dc50: 20 63 6f 6d 6d 61 6e 64 2e 20 20 46 6f 72 20 74   command.  For t
dc60: 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50  he INSERT and.UP
dc70: 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74  DATE commands, t
dc80: 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20  he keywords "ON 
dc90: 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65  CONFLICT" are re
dca0: 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22 2c 20  placed by "OR", 
dcb0: 74 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74  to make.the synt
dcc0: 61 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74  ax seem more nat
dcd0: 75 72 61 6c 2e 20 20 46 6f 72 20 65 78 61 6d 70  ural.  For examp
dce0: 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22  le, instead of."
dcf0: 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49  INSERT ON CONFLI
dd00: 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61  CT IGNORE" we ha
dd10: 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47  ve "INSERT OR IG
dd20: 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f  NORE"..The keywo
dd30: 72 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74  rds change but t
dd40: 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68  he meaning of th
dd50: 65 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20  e clause is the 
dd60: 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e  same.either way.
dd70: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
dd80: 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
dd90: 73 70 65 63 69 66 69 65 73 20 61 6e 20 61 6c 67  specifies an alg
dda0: 6f 72 69 74 68 6d 20 75 73 65 64 20 74 6f 20 72  orithm used to r
ddb0: 65 73 6f 6c 76 65 0a 63 6f 6e 73 74 72 61 69 6e  esolve.constrain
ddc0: 74 20 63 6f 6e 66 6c 69 63 74 73 2e 20 20 54 68  t conflicts.  Th
ddd0: 65 72 65 20 61 72 65 20 66 69 76 65 20 63 68 6f  ere are five cho
dde0: 69 63 65 73 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20  ices: ROLLBACK, 
ddf0: 41 42 4f 52 54 2c 0a 46 41 49 4c 2c 20 49 47 4e  ABORT,.FAIL, IGN
de00: 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45  ORE, and REPLACE
de10: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 61 6c  . The default al
de20: 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
de30: 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20  .  This.is what 
de40: 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a  they mean:</p>..
de50: 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c  <dl>.<dt><b>ROLL
de60: 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BACK</b></dt>.<d
de70: 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73  d><p>When a cons
de80: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
de90: 20 6f 63 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65   occurs, an imme
dea0: 64 69 61 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f  diate ROLLBACK.o
deb0: 63 63 75 72 73 2c 20 74 68 75 73 20 65 6e 64 69  ccurs, thus endi
dec0: 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ng the current t
ded0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20  ransaction, and 
dee0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72  the command abor
def0: 74 73 0a 77 69 74 68 20 61 20 72 65 74 75 72 6e  ts.with a return
df00: 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
df10: 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 49 66 20  CONSTRAINT.  If 
df20: 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
df30: 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20  s.active (other 
df40: 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  than the implied
df50: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61   transaction tha
df60: 74 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20  t is created on 
df70: 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74  every.command) t
df80: 68 65 6e 20 74 68 69 73 20 61 6c 67 6f 72 69 74  hen this algorit
df90: 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  hm works the sam
dfa0: 65 20 61 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c  e as ABORT.</p><
dfb0: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f  /dd>..<dt><b>ABO
dfc0: 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RT</b></dt>.<dd>
dfd0: 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72  <p>When a constr
dfe0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
dff0: 63 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61  ccurs, the comma
e000: 6e 64 20 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79  nd backs out.any
e010: 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 69   prior changes i
e020: 74 20 6d 69 67 68 74 20 68 61 76 65 20 6d 61 64  t might have mad
e030: 65 20 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74  e and aborts wit
e040: 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 0a  h a return code.
e050: 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  of SQLITE_CONSTR
e060: 41 49 4e 54 2e 20 20 42 75 74 20 6e 6f 20 52 4f  AINT.  But no RO
e070: 4c 4c 42 41 43 4b 20 69 73 20 65 78 65 63 75 74  LLBACK is execut
e080: 65 64 20 73 6f 20 63 68 61 6e 67 65 73 0a 66 72  ed so changes.fr
e090: 6f 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64  om prior command
e0a0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
e0b0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72  e transaction.ar
e0c0: 65 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 68  e preserved.  Th
e0d0: 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  is is the defaul
e0e0: 74 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c  t behavior.</p><
e0f0: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
e100: 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
e110: 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  p>When a constra
e120: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
e130: 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e  curs, the comman
e140: 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 0a  d aborts with a.
e150: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
e160: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20  TE_CONSTRAINT.  
e170: 42 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 20  But any changes 
e180: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
e190: 74 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61 6e 64  that.the command
e1a0: 20 6d 61 64 65 20 70 72 69 6f 72 20 74 6f 20 65   made prior to e
e1b0: 6e 63 6f 75 6e 74 65 72 69 6e 67 20 74 68 65 20  ncountering the 
e1c0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
e1d0: 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72 76  tion.are preserv
e1e0: 65 64 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 62  ed and are not b
e1f0: 61 63 6b 65 64 20 6f 75 74 2e 20 20 46 6f 72 20  acked out.  For 
e200: 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55  example, if an U
e210: 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20  PDATE.statement 
e220: 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f  encountered a co
e230: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
e240: 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20  on on the 100th 
e250: 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65  row that.it atte
e260: 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20  mpts to update, 
e270: 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39  then the first 9
e280: 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72  9 row changes ar
e290: 65 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20  e preserved.but 
e2a0: 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20  changes to rows 
e2b0: 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e  100 and beyond n
e2c0: 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c  ever occur.</p><
e2d0: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e  /dd>..<dt><b>IGN
e2e0: 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ORE</b></dt>.<dd
e2f0: 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74  ><p>When a const
e300: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
e310: 6f 63 63 75 72 73 2c 20 74 68 65 20 6f 6e 65 20  occurs, the one 
e320: 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  row that contain
e330: 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  s.the constraint
e340: 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f   violation is no
e350: 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 63 68  t inserted or ch
e360: 61 6e 67 65 64 2e 20 20 42 75 74 20 74 68 65 20  anged.  But the 
e370: 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65  command.continue
e380: 73 20 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d  s executing norm
e390: 61 6c 6c 79 2e 20 20 4f 74 68 65 72 20 72 6f 77  ally.  Other row
e3a0: 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  s before and aft
e3b0: 65 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  er the row that.
e3c0: 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f  contained the co
e3d0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
e3e0: 6f 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  on continue to b
e3f0: 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  e inserted or up
e400: 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20  dated.normally. 
e410: 20 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74   No error is ret
e420: 75 72 6e 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  urned.</p></dd>.
e430: 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c  .<dt><b>REPLACE<
e440: 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
e450: 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f  When a UNIQUE co
e460: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
e470: 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 70  on occurs, the p
e480: 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73  re-existing rows
e490: 0a 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e  .that are causin
e4a0: 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  g the constraint
e4b0: 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72   violation are r
e4c0: 65 6d 6f 76 65 64 20 70 72 69 6f 72 20 74 6f 20  emoved prior to 
e4d0: 69 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75 70 64  inserting.or upd
e4e0: 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  ating the curren
e4f0: 74 20 72 6f 77 2e 20 20 54 68 75 73 20 74 68 65  t row.  Thus the
e500: 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
e510: 65 20 61 6c 77 61 79 73 20 6f 63 63 75 72 73 2e  e always occurs.
e520: 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  .The command con
e530: 74 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67  tinues executing
e540: 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65   normally.  No e
e550: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
e560: 2e 0a 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ..If a NOT NULL 
e570: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
e580: 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
e590: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 72   NULL value is r
e5a0: 65 70 6c 61 63 65 64 0a 62 79 20 74 68 65 20 64  eplaced.by the d
e5b0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
e5c0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49   that column.  I
e5d0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73  f the column has
e5e0: 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75   no default.valu
e5f0: 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52  e, then the ABOR
e600: 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
e610: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65  sed.</p>..<p>Whe
e620: 6e 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20  n this conflict 
e630: 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74  resolution strat
e640: 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73  egy deletes rows
e650: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74   in order to.sat
e660: 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e  isfy a constrain
e670: 74 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 69  t, it does not i
e680: 6e 76 6f 6b 65 20 64 65 6c 65 74 65 20 74 72 69  nvoke delete tri
e690: 67 67 65 72 73 20 6f 6e 20 74 68 6f 73 65 0a 72  ggers on those.r
e6a0: 6f 77 73 2e 20 20 42 75 74 20 74 68 61 74 20 6d  ows.  But that m
e6b0: 61 79 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66  ay change in a f
e6c0: 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f  uture release.</
e6d0: 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65  p>.</dl>..<p>The
e6e0: 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
e6f0: 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63  fied in the OR c
e700: 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45 52  lause of a INSER
e710: 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
e720: 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
e730: 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
e740: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
e750: 0a 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d  .If no algorithm
e760: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
e770: 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52  ywhere, the ABOR
e780: 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75  T algorithm is u
e790: 73 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74  sed.</p>.}..Sect
e7a0: 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e  ion REINDEX rein
e7b0: 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  dex..Syntax {sql
e7c0: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20  -statement} {.  
e7d0: 52 45 49 4e 44 45 58 20 3c 63 6f 6c 6c 61 74 69  REINDEX <collati
e7e0: 6f 6e 20 6e 61 6d 65 3e 0a 7d 0a 53 79 6e 74 61  on name>.}.Synta
e7f0: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
e800: 7d 20 7b 0a 20 20 52 45 49 4e 44 45 58 20 5b 3c  } {.  REINDEX [<
e810: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
e820: 5d 20 3c 74 61 62 6c 65 2f 69 6e 64 65 78 2d 6e  ] <table/index-n
e830: 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ame>.}..puts {.<
e840: 70 3e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f  p>The REINDEX co
e850: 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  mmand is used to
e860: 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72   delete and recr
e870: 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f  eate indices fro
e880: 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20  m scratch..This 
e890: 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74  is useful when t
e8a0: 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
e8b0: 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
e8c0: 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65  uence has change
e8d0: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 74  d..</p>..<p>In t
e8e0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 61  he first form, a
e8f0: 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c  ll indices in al
e900: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
e910: 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68  ases that use th
e920: 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f  e.named collatio
e930: 6e 20 73 65 71 75 65 6e 63 65 20 61 72 65 20 72  n sequence are r
e940: 65 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 65  ecreated. In the
e950: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69 66   second form, if
e960: 20 0a 3c 69 3e 5b 64 61 74 61 62 61 73 65 2d 6e   .<i>[database-n
e970: 61 6d 65 2e 5d 74 61 62 6c 65 2f 69 6e 64 65 78  ame.]table/index
e980: 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e 74 69  -name</i> identi
e990: 66 69 65 73 20 61 20 74 61 62 6c 65 2c 20 74 68  fies a table, th
e9a0: 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 61  en all indices.a
e9b0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
e9c0: 68 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62  he table are reb
e9d0: 75 69 6c 74 2e 20 49 66 20 61 6e 20 69 6e 64 65  uilt. If an inde
e9e0: 78 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 2c  x is identified,
e9f0: 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73 20   then only.this 
ea00: 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 20 69  specific index i
ea10: 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72 65  s deleted and re
ea20: 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  created..</p>..<
ea30: 70 3e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62  p>If no <i>datab
ea40: 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20  ase-name</i> is 
ea50: 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68  specified and th
ea60: 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68 20  ere exists both 
ea70: 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78  a table or.index
ea80: 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e   and a collation
ea90: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
eaa0: 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c   specified name,
eab0: 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61 73   then indices as
eac0: 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74 68  sociated.with th
ead0: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
eae0: 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72 65  ence only are re
eaf0: 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68 69  constructed. Thi
eb00: 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79 20  s ambiguity may 
eb10: 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79 20  be.dispelled by 
eb20: 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e  always specifyin
eb30: 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65 2d  g a <i>database-
eb40: 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65  name</i> when re
eb50: 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63 69  indexing a.speci
eb60: 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
eb70: 65 78 2e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 52  ex..}..Section R
eb80: 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 0a 0a  EPLACE replace..
eb90: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
eba0: 65 6d 65 6e 74 7d 20 7b 0a 52 45 50 4c 41 43 45  ement} {.REPLACE
ebb0: 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65   INTO [<database
ebc0: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
ebd0: 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d  -name> [( <colum
ebe0: 6e 2d 6c 69 73 74 3e 20 29 5d 20 56 41 4c 55 45  n-list> )] VALUE
ebf0: 53 20 28 20 3c 76 61 6c 75 65 2d 6c 69 73 74 3e  S ( <value-list>
ec00: 20 29 20 7c 0a 52 45 50 4c 41 43 45 20 49 4e 54   ) |.REPLACE INT
ec10: 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  O [<database-nam
ec20: 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d  e> .] <table-nam
ec30: 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  e> [( <column-li
ec40: 73 74 3e 20 29 5d 20 3c 73 65 6c 65 63 74 2d 73  st> )] <select-s
ec50: 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74  tatement>.}..put
ec60: 73 20 7b 0a 3c 70 3e 54 68 65 20 52 45 50 4c 41  s {.<p>The REPLA
ec70: 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  CE command is an
ec80: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22   alias for the "
ec90: 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
eca0: 45 22 20 76 61 72 69 61 6e 74 0a 6f 66 20 74 68  E" variant.of th
ecb0: 65 20 3c 61 20 68 72 65 66 3d 22 23 69 6e 73 65  e <a href="#inse
ecc0: 72 74 22 3e 49 4e 53 45 52 54 3c 2f 61 3e 20 63  rt">INSERT</a> c
ecd0: 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 61 6c  ommand.  This al
ece0: 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64 20  ias is provided 
ecf0: 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69 74  for.compatibilit
ed00: 79 20 77 69 74 68 20 4d 79 53 51 4c 2e 20 20 53  y with MySQL.  S
ed10: 65 65 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d  ee the .<a href=
ed20: 22 23 69 6e 73 65 72 74 22 3e 49 4e 53 45 52 54  "#insert">INSERT
ed30: 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20 64 6f 63  </a> command doc
ed40: 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  umentation for a
ed50: 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f 72 6d  dditional.inform
ed60: 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 7d 0a 0a  ation.</p>  .}..
ed70: 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54 20  .Section SELECT 
ed80: 73 65 6c 65 63 74 0a 0a 53 79 6e 74 61 78 20 7b  select..Syntax {
ed90: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
eda0: 0a 53 45 4c 45 43 54 20 5b 41 4c 4c 20 7c 20 44  .SELECT [ALL | D
edb0: 49 53 54 49 4e 43 54 5d 20 3c 72 65 73 75 6c 74  ISTINCT] <result
edc0: 3e 20 5b 46 52 4f 4d 20 3c 74 61 62 6c 65 2d 6c  > [FROM <table-l
edd0: 69 73 74 3e 5d 0a 5b 57 48 45 52 45 20 3c 65 78  ist>].[WHERE <ex
ede0: 70 72 3e 5d 0a 5b 47 52 4f 55 50 20 42 59 20 3c  pr>].[GROUP BY <
edf0: 65 78 70 72 2d 6c 69 73 74 3e 5d 0a 5b 48 41 56  expr-list>].[HAV
ee00: 49 4e 47 20 3c 65 78 70 72 3e 5d 0a 5b 3c 63 6f  ING <expr>].[<co
ee10: 6d 70 6f 75 6e 64 2d 6f 70 3e 20 3c 73 65 6c 65  mpound-op> <sele
ee20: 63 74 3e 5d 2a 0a 5b 4f 52 44 45 52 20 42 59 20  ct>]*.[ORDER BY 
ee30: 3c 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74 3e  <sort-expr-list>
ee40: 5d 0a 5b 4c 49 4d 49 54 20 3c 69 6e 74 65 67 65  ].[LIMIT <intege
ee50: 72 3e 20 5b 4c 50 20 4f 46 46 53 45 54 20 7c 20  r> [LP OFFSET | 
ee60: 2c 20 52 50 20 3c 69 6e 74 65 67 65 72 3e 5d 5d  , RP <integer>]]
ee70: 0a 7d 20 7b 72 65 73 75 6c 74 7d 20 7b 0a 3c 72  .} {result} {.<r
ee80: 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 3e 20 5b 2c  esult-column> [,
ee90: 20 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 3e   <result-column>
eea0: 5d 2a 0a 7d 20 7b 72 65 73 75 6c 74 2d 63 6f 6c  ]*.} {result-col
eeb0: 75 6d 6e 7d 20 7b 0a 53 54 41 52 20 7c 20 3c 74  umn} {.STAR | <t
eec0: 61 62 6c 65 2d 6e 61 6d 65 3e 20 2e 20 53 54 41  able-name> . STA
eed0: 52 20 7c 20 3c 65 78 70 72 3e 20 5b 20 5b 41 53  R | <expr> [ [AS
eee0: 5d 20 3c 73 74 72 69 6e 67 3e 20 5d 0a 7d 20 7b  ] <string> ].} {
eef0: 74 61 62 6c 65 2d 6c 69 73 74 7d 20 7b 0a 3c 74  table-list} {.<t
ef00: 61 62 6c 65 3e 20 5b 3c 6a 6f 69 6e 2d 6f 70 3e  able> [<join-op>
ef10: 20 3c 74 61 62 6c 65 3e 20 3c 6a 6f 69 6e 2d 61   <table> <join-a
ef20: 72 67 73 3e 5d 2a 0a 7d 20 7b 74 61 62 6c 65 7d  rgs>]*.} {table}
ef30: 20 7b 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20   {.<table-name> 
ef40: 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 20 7c 0a 28  [AS <alias>] |.(
ef50: 20 3c 73 65 6c 65 63 74 3e 20 29 20 5b 41 53 20   <select> ) [AS 
ef60: 3c 61 6c 69 61 73 3e 5d 0a 7d 20 7b 6a 6f 69 6e  <alias>].} {join
ef70: 2d 6f 70 7d 20 7b 0a 2c 20 7c 20 5b 4e 41 54 55  -op} {., | [NATU
ef80: 52 41 4c 5d 20 5b 4c 45 46 54 20 7c 20 52 49 47  RAL] [LEFT | RIG
ef90: 48 54 20 7c 20 46 55 4c 4c 5d 20 5b 4f 55 54 45  HT | FULL] [OUTE
efa0: 52 20 7c 20 49 4e 4e 45 52 20 7c 20 43 52 4f 53  R | INNER | CROS
efb0: 53 5d 20 4a 4f 49 4e 0a 7d 20 7b 6a 6f 69 6e 2d  S] JOIN.} {join-
efc0: 61 72 67 73 7d 20 7b 0a 5b 4f 4e 20 3c 65 78 70  args} {.[ON <exp
efd0: 72 3e 5d 20 5b 55 53 49 4e 47 20 28 20 3c 69 64  r>] [USING ( <id
efe0: 2d 6c 69 73 74 3e 20 29 5d 0a 7d 20 7b 73 6f 72  -list> )].} {sor
eff0: 74 2d 65 78 70 72 2d 6c 69 73 74 7d 20 7b 0a 3c  t-expr-list} {.<
f000: 65 78 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f 72 64  expr> [<sort-ord
f010: 65 72 3e 5d 20 5b 2c 20 3c 65 78 70 72 3e 20 5b  er>] [, <expr> [
f020: 3c 73 6f 72 74 2d 6f 72 64 65 72 3e 5d 5d 2a 0a  <sort-order>]]*.
f030: 7d 20 7b 73 6f 72 74 2d 6f 72 64 65 72 7d 20 7b  } {sort-order} {
f040: 0a 5b 20 43 4f 4c 4c 41 54 45 20 3c 63 6f 6c 6c  .[ COLLATE <coll
f050: 61 74 69 6f 6e 2d 6e 61 6d 65 3e 20 5d 20 5b 20  ation-name> ] [ 
f060: 41 53 43 20 7c 20 44 45 53 43 20 5d 0a 7d 20 7b  ASC | DESC ].} {
f070: 63 6f 6d 70 6f 75 6e 64 5f 6f 70 7d 20 7b 0a 55  compound_op} {.U
f080: 4e 49 4f 4e 20 7c 20 55 4e 49 4f 4e 20 41 4c 4c  NION | UNION ALL
f090: 20 7c 20 49 4e 54 45 52 53 45 43 54 20 7c 20 45   | INTERSECT | E
f0a0: 58 43 45 50 54 0a 7d 0a 0a 70 75 74 73 20 7b 0a  XCEPT.}..puts {.
f0b0: 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
f0c0: 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
f0d0: 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
f0e0: 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
f0f0: 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
f100: 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
f110: 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
f120: 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
f130: 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
f140: 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 20 6e   columns.  The n
f150: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f160: 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74 20 69   in the.result i
f170: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
f180: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  he expression li
f190: 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  st in between th
f1a0: 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f  e.SELECT and FRO
f1b0: 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 6e 79  M keywords.  Any
f1c0: 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65   arbitrary expre
f1d0: 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ssion can be use
f1e0: 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e 20 20  d.as a result.  
f1f0: 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72  If a result expr
f200: 65 73 73 69 6f 6e 20 69 73 20 7d 0a 70 75 74 73  ession is }.puts
f210: 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d 20 74   "[Operator *] t
f220: 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
f230: 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 72  of all tables ar
f240: 65 20 73 75 62 73 74 69 74 75 74 65 64 22 0a 70  e substituted".p
f250: 75 74 73 20 7b 66 6f 72 20 74 68 61 74 20 6f 6e  uts {for that on
f260: 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 49  e expression.  I
f270: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
f280: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 7d   is the name of}
f290: 0a 70 75 74 73 20 22 61 20 74 61 62 6c 65 20 66  .puts "a table f
f2a0: 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70 65 72  ollowed by [Oper
f2b0: 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20 74 68  ator .*] then th
f2c0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 6c 20  e result is all 
f2d0: 63 6f 6c 75 6d 6e 73 22 0a 70 75 74 73 20 7b 69  columns".puts {i
f2e0: 6e 20 74 68 61 74 20 6f 6e 65 20 74 61 62 6c 65  n that one table
f2f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44 49  .</p>..<p>The DI
f300: 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 63  STINCT keyword c
f310: 61 75 73 65 73 20 61 20 73 75 62 73 65 74 20 6f  auses a subset o
f320: 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 74 6f  f result rows to
f330: 20 62 65 20 72 65 74 75 72 6e 65 64 2c 20 0a 69   be returned, .i
f340: 6e 20 77 68 69 63 68 20 65 61 63 68 20 72 65 73  n which each res
f350: 75 6c 74 20 72 6f 77 20 69 73 20 64 69 66 66 65  ult row is diffe
f360: 72 65 6e 74 2e 20 20 4e 55 4c 4c 20 76 61 6c 75  rent.  NULL valu
f370: 65 73 20 61 72 65 20 6e 6f 74 20 74 72 65 61 74  es are not treat
f380: 65 64 20 61 73 20 0a 64 69 73 74 69 6e 63 74 20  ed as .distinct 
f390: 66 72 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 2e  from each other.
f3a0: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62 65    The default be
f3b0: 68 61 76 69 6f 72 20 69 73 20 74 68 61 74 20 61  havior is that a
f3c0: 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 20 0a  ll result rows .
f3d0: 62 65 20 72 65 74 75 72 6e 65 64 2c 20 77 68 69  be returned, whi
f3e0: 63 68 20 63 61 6e 20 62 65 20 6d 61 64 65 20 65  ch can be made e
f3f0: 78 70 6c 69 63 69 74 20 77 69 74 68 20 74 68 65  xplicit with the
f400: 20 6b 65 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70   keyword ALL.</p
f410: 3e 0a 0a 3c 70 3e 54 68 65 20 71 75 65 72 79 20  >..<p>The query 
f420: 69 73 20 65 78 65 63 75 74 65 64 20 61 67 61 69  is executed agai
f430: 6e 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  nst one or more 
f440: 74 61 62 6c 65 73 20 73 70 65 63 69 66 69 65 64  tables specified
f450: 20 61 66 74 65 72 0a 74 68 65 20 46 52 4f 4d 20   after.the FROM 
f460: 6b 65 79 77 6f 72 64 2e 20 20 49 66 20 6d 75 6c  keyword.  If mul
f470: 74 69 70 6c 65 20 74 61 62 6c 65 73 20 6e 61 6d  tiple tables nam
f480: 65 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64  es are separated
f490: 20 62 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e   by commas,.then
f4a0: 20 74 68 65 20 71 75 65 72 79 20 69 73 20 61 67   the query is ag
f4b0: 61 69 6e 73 74 20 74 68 65 20 63 72 6f 73 73 20  ainst the cross 
f4c0: 6a 6f 69 6e 20 6f 66 20 74 68 65 20 76 61 72 69  join of the vari
f4d0: 6f 75 73 20 74 61 62 6c 65 73 2e 0a 54 68 65 20  ous tables..The 
f4e0: 66 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69 6e  full SQL-92 join
f4f0: 20 73 79 6e 74 61 78 20 63 61 6e 20 61 6c 73 6f   syntax can also
f500: 20 62 65 20 75 73 65 64 20 74 6f 20 73 70 65 63   be used to spec
f510: 69 66 79 20 6a 6f 69 6e 73 2e 0a 41 20 73 75 62  ify joins..A sub
f520: 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65 6e 74  -query.in parent
f530: 68 65 73 65 73 20 6d 61 79 20 62 65 20 73 75 62  heses may be sub
f540: 73 74 69 74 75 74 65 64 20 66 6f 72 20 61 6e 79  stituted for any
f550: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74   table name in t
f560: 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a  he FROM clause..
f570: 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f 4d 20  The entire FROM 
f580: 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20 6f 6d  clause may be om
f590: 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63 68 20  itted, in which 
f5a0: 63 61 73 65 20 74 68 65 20 72 65 73 75 6c 74 20  case the result 
f5b0: 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20  is a.single row 
f5c0: 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68  consisting of th
f5d0: 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  e values of the 
f5e0: 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e  expression list.
f5f0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 57 48  .</p>..<p>The WH
f600: 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62  ERE clause can b
f610: 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  e used to limit 
f620: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
f630: 77 73 20 6f 76 65 72 0a 77 68 69 63 68 20 74 68  ws over.which th
f640: 65 20 71 75 65 72 79 20 6f 70 65 72 61 74 65 73  e query operates
f650: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 47 52  .</p>..<p>The GR
f660: 4f 55 50 20 42 59 20 63 6c 61 75 73 65 73 20 63  OUP BY clauses c
f670: 61 75 73 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  auses one or mor
f680: 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 72 65  e rows of the re
f690: 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f 6d 62 69  sult to.be combi
f6a0: 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c  ned into a singl
f6b0: 65 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 2e  e row of output.
f6c0: 20 20 54 68 69 73 20 69 73 20 65 73 70 65 63 69    This is especi
f6d0: 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77 68 65 6e  ally useful.when
f6e0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74   the result cont
f6f0: 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
f700: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 65  unctions.  The e
f710: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 0a 74 68  xpressions in.th
f720: 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
f730: 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d  e do <em>not</em
f740: 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70  > have to be exp
f750: 72 65 73 73 69 6f 6e 73 20 74 68 61 74 0a 61 70  ressions that.ap
f760: 70 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75  pear in the resu
f770: 6c 74 2e 20 20 54 68 65 20 48 41 56 49 4e 47 20  lt.  The HAVING 
f780: 63 6c 61 75 73 65 20 69 73 20 73 69 6d 69 6c 61  clause is simila
f790: 72 20 74 6f 20 57 48 45 52 45 20 65 78 63 65 70  r to WHERE excep
f7a0: 74 0a 74 68 61 74 20 48 41 56 49 4e 47 20 61 70  t.that HAVING ap
f7b0: 70 6c 69 65 73 20 61 66 74 65 72 20 67 72 6f 75  plies after grou
f7c0: 70 69 6e 67 20 68 61 73 20 6f 63 63 75 72 72 65  ping has occurre
f7d0: 64 2e 20 20 54 68 65 20 48 41 56 49 4e 47 20 65  d.  The HAVING e
f7e0: 78 70 72 65 73 73 69 6f 6e 0a 6d 61 79 20 72 65  xpression.may re
f7f0: 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65  fer to values, e
f800: 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66 75  ven aggregate fu
f810: 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72  nctions, that ar
f820: 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73  e not in the res
f830: 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ult.</p>..<p>The
f840: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
f850: 20 63 61 75 73 65 73 20 74 68 65 20 6f 75 74 70   causes the outp
f860: 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20 73 6f  ut rows to be so
f870: 72 74 65 64 2e 20 20 0a 54 68 65 20 61 72 67 75  rted.  .The argu
f880: 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52 20 42 59  ment to ORDER BY
f890: 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 65 78   is a list of ex
f8a0: 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61  pressions that a
f8b0: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 0a 6b  re used as the.k
f8c0: 65 79 20 66 6f 72 20 74 68 65 20 73 6f 72 74 2e  ey for the sort.
f8d0: 20 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e    The expression
f8e0: 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  s do not have to
f8f0: 20 62 65 20 70 61 72 74 20 6f 66 20 74 68 65 0a   be part of the.
f900: 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73 69 6d  result for a sim
f910: 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75 74 20  ple SELECT, but 
f920: 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  in a compound SE
f930: 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74 0a 65  LECT each sort.e
f940: 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20 65  xpression must e
f950: 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f 6e 65  xactly match one
f960: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
f970: 6f 6c 75 6d 6e 73 2e 20 20 45 61 63 68 0a 73 6f  olumns.  Each.so
f980: 72 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  rt expression ma
f990: 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  y be optionally 
f9a0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 43 4f  followed by a CO
f9b0: 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64 20 61 6e  LLATE keyword an
f9c0: 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  d.the name of a 
f9d0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
f9e0: 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f 72 64 65  on used for orde
f9f0: 72 69 6e 67 20 74 65 78 74 20 61 6e 64 2f 6f 72  ring text and/or
fa00: 0a 6b 65 79 77 6f 72 64 73 20 41 53 43 20 6f 72  .keywords ASC or
fa10: 20 44 45 53 43 20 74 6f 20 73 70 65 63 69 66 79   DESC to specify
fa20: 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72 2e   the sort order.
fa30: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d  </p>..<p>The LIM
fa40: 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65 73  IT clause places
fa50: 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
fa60: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
fa70: 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 69   rows.returned i
fa80: 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 41  n the result.  A
fa90: 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20   negative LIMIT 
faa0: 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75 70 70  indicates no upp
fab0: 65 72 20 62 6f 75 6e 64 2e 0a 54 68 65 20 6f 70  er bound..The op
fac0: 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66 6f  tional OFFSET fo
fad0: 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73 70  llowing LIMIT sp
fae0: 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61 6e 79  ecifies how many
faf0: 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20 61 74  .rows to skip at
fb00: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
fb10: 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
fb20: 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  ..In a compound 
fb30: 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d 49 54  query, the LIMIT
fb40: 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c 79   clause may only
fb50: 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 0a 66   appear on the.f
fb60: 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74 61 74  inal SELECT stat
fb70: 65 6d 65 6e 74 2e 0a 54 68 65 20 6c 69 6d 69 74  ement..The limit
fb80: 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74   is applied to t
fb90: 68 65 20 65 6e 74 69 72 65 20 71 75 65 72 79 20  he entire query 
fba0: 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64 69 76  not.to the indiv
fbb0: 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73 74 61  idual SELECT sta
fbc0: 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68 20  tement to which 
fbd0: 69 74 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a  it is attached..
fbe0: 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74 68 65  Note that if the
fbf0: 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64 20   OFFSET keyword 
fc00: 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c  is used in the L
fc10: 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
fc20: 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73 20 74  n the.limit is t
fc30: 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65 72 20  he first number 
fc40: 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74 20 69  and the offset i
fc50: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d  s the second num
fc60: 62 65 72 2e 20 20 49 66 20 61 0a 63 6f 6d 6d 61  ber.  If a.comma
fc70: 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64   is used instead
fc80: 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b   of the OFFSET k
fc90: 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65  eyword, then the
fca0: 20 6f 66 66 73 65 74 20 69 73 20 74 68 65 0a 66   offset is the.f
fcb0: 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64 20  irst number and 
fcc0: 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74 68 65  the limit is the
fcd0: 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20   second number. 
fce0: 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a 63 6f   This seeming.co
fcf0: 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20 69 6e  ntradition is in
fd00: 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20 6d  tentional - it m
fd10: 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69  aximizes compati
fd20: 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65 67 61  bility with lega
fd30: 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73 65 20  cy.SQL database 
fd40: 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a 3c  systems..</p>..<
fd50: 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  p>A compound SEL
fd60: 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20 66 72  ECT is formed fr
fd70: 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 73  om two or more s
fd80: 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 63 6f  imple SELECTs co
fd90: 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65 20 6f  nnected.by one o
fda0: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20  f the operators 
fdb0: 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c  UNION, UNION ALL
fdc0: 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72 20  , INTERSECT, or 
fdd0: 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20 63 6f  EXCEPT.  In.a co
fde0: 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61  mpound SELECT, a
fdf0: 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65  ll the constitue
fe00: 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20  nt SELECTs must 
fe10: 73 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d 65  specify the.same
fe20: 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
fe30: 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 72  t columns.  Ther
fe40: 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61 20  e may be only a 
fe50: 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42 59 0a  single ORDER BY.
fe60: 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65 6e  clause at the en
fe70: 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  d of the compoun
fe80: 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65 20 55  d SELECT.  The U
fe90: 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20 41  NION and UNION A
fea0: 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f 6d  LL.operators com
feb0: 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  bine the results
fec0: 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 73 20   of the SELECTs 
fed0: 74 6f 20 74 68 65 20 72 69 67 68 74 20 61 6e 64  to the right and
fee0: 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73 69 6e   left into.a sin
fef0: 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e 20 20  gle big table.  
ff00: 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
ff10: 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e 20  s that in UNION 
ff20: 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 0a  all result rows.
ff30: 61 72 65 20 64 69 73 74 69 6e 63 74 20 77 68 65  are distinct whe
ff40: 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c 20  re in UNION ALL 
ff50: 74 68 65 72 65 20 6d 61 79 20 62 65 20 64 75 70  there may be dup
ff60: 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49 4e 54  licates..The INT
ff70: 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
ff80: 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65 72 73  takes the inters
ff90: 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  ection of the re
ffa0: 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65 66  sults of the.lef
ffb0: 74 20 61 6e 64 20 72 69 67 68 74 20 53 45 4c 45  t and right SELE
ffc0: 43 54 73 2e 20 20 45 58 43 45 50 54 20 74 61 6b  CTs.  EXCEPT tak
ffd0: 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  es the result of
ffe0: 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61 66 74   left SELECT aft
fff0: 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65 20  er.removing the 
10000 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 72  results of the r
10010 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20 57 68  ight SELECT.  Wh
10020 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65  en three or more
10030 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f 6e   SELECTs.are con
10040 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
10050 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72 6f  mpound, they gro
10060 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  up from left to 
10070 72 69 67 68 74 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53  right.</p>.}...S
10080 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75 70  ection UPDATE up
10090 64 61 74 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71  date..Syntax {sq
100a0 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 55  l-statement} {.U
100b0 50 44 41 54 45 20 5b 20 4f 52 20 3c 63 6f 6e 66  PDATE [ OR <conf
100c0 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 20  lict-algorithm> 
100d0 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  ] [<database-nam
100e0 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d  e> .] <table-nam
100f0 65 3e 0a 53 45 54 20 3c 61 73 73 69 67 6e 6d 65  e>.SET <assignme
10100 6e 74 3e 20 5b 2c 20 3c 61 73 73 69 67 6e 6d 65  nt> [, <assignme
10110 6e 74 3e 5d 2a 0a 5b 57 48 45 52 45 20 3c 65 78  nt>]*.[WHERE <ex
10120 70 72 3e 5d 0a 7d 20 7b 61 73 73 69 67 6e 6d 65  pr>].} {assignme
10130 6e 74 7d 20 7b 0a 3c 63 6f 6c 75 6d 6e 2d 6e 61  nt} {.<column-na
10140 6d 65 3e 20 3d 20 3c 65 78 70 72 3e 0a 7d 0a 0a  me> = <expr>.}..
10150 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 55 50  puts {.<p>The UP
10160 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
10170 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65  s used to change
10180 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 63 6f   the value of co
10190 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c 65 63 74  lumns in .select
101a0 65 64 20 72 6f 77 73 20 6f 66 20 61 20 74 61 62  ed rows of a tab
101b0 6c 65 2e 20 20 45 61 63 68 20 61 73 73 69 67 6e  le.  Each assign
101c0 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50 44 41 54  ment in an UPDAT
101d0 45 20 73 70 65 63 69 66 69 65 73 0a 61 20 63 6f  E specifies.a co
101e0 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65  lumn name to the
101f0 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71 75   left of the equ
10200 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 6e 20  als sign and an 
10210 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73  arbitrary expres
10220 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72 69 67 68  sion.to the righ
10230 74 2e 20 20 54 68 65 20 65 78 70 72 65 73 73 69  t.  The expressi
10240 6f 6e 73 20 6d 61 79 20 75 73 65 20 74 68 65 20  ons may use the 
10250 76 61 6c 75 65 73 20 6f 66 20 6f 74 68 65 72 20  values of other 
10260 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c 20 65 78 70  columns..All exp
10270 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61  ressions are eva
10280 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e  luated before an
10290 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72  y assignments ar
102a0 65 20 6d 61 64 65 2e 0a 41 20 57 48 45 52 45 20  e made..A WHERE 
102b0 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73  clause can be us
102c0 65 64 20 74 6f 20 72 65 73 74 72 69 63 74 20 77  ed to restrict w
102d0 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 75 70  hich rows are up
102e0 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  dated.</p>..<p>T
102f0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
10300 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
10310 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
10320 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
10330 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
10340 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
10350 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
10360 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
10370 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a  is one command..
10380 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
10390 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22  titled.<a href="
103a0 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f  #conflict">ON CO
103b0 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61  NFLICT</a> for a
103c0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
103d0 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53  ation.</p>.}...S
103e0 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61  ection VACUUM va
103f0 63 75 75 6d 0a 0a 53 79 6e 74 61 78 20 7b 73 71  cuum..Syntax {sq
10400 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 56  l-statement} {.V
10410 41 43 55 55 4d 20 5b 3c 69 6e 64 65 78 2d 6f 72  ACUUM [<index-or
10420 2d 74 61 62 6c 65 2d 6e 61 6d 65 3e 5d 0a 7d 0a  -table-name>].}.
10430 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 56  .puts {.<p>The V
10440 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69 73  ACUUM command is
10450 20 61 6e 20 53 51 4c 69 74 65 20 65 78 74 65 6e   an SQLite exten
10460 73 69 6f 6e 20 6d 6f 64 65 6c 65 64 20 61 66 74  sion modeled aft
10470 65 72 20 61 20 73 69 6d 69 6c 61 72 0a 63 6f 6d  er a similar.com
10480 6d 61 6e 64 20 66 6f 75 6e 64 20 69 6e 20 50 6f  mand found in Po
10490 73 74 67 72 65 53 51 4c 2e 20 20 49 66 20 56 41  stgreSQL.  If VA
104a0 43 55 55 4d 20 69 73 20 69 6e 76 6f 6b 65 64 20  CUUM is invoked 
104b0 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 6f 66  with the name of
104c0 20 61 0a 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a.table or inde
104d0 78 20 74 68 65 6e 20 69 74 20 69 73 20 73 75 70  x then it is sup
104e0 70 6f 73 65 20 74 6f 20 63 6c 65 61 6e 20 75 70  pose to clean up
104f0 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65   the named table
10500 20 6f 72 20 69 6e 64 65 78 2e 0a 49 6e 20 76 65   or index..In ve
10510 72 73 69 6f 6e 20 31 2e 30 20 6f 66 20 53 51 4c  rsion 1.0 of SQL
10520 69 74 65 2c 20 74 68 65 20 56 41 43 55 55 4d 20  ite, the VACUUM 
10530 63 6f 6d 6d 61 6e 64 20 77 6f 75 6c 64 20 69 6e  command would in
10540 76 6f 6b 65 20 0a 3c 62 3e 67 64 62 6d 5f 72 65  voke .<b>gdbm_re
10550 6f 72 67 61 6e 69 7a 65 28 29 3c 2f 62 3e 20 74  organize()</b> t
10560 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 62  o clean up the b
10570 61 63 6b 65 6e 64 20 64 61 74 61 62 61 73 65 20  ackend database 
10580 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 56  file.</p>..<p>.V
10590 41 43 55 55 4d 20 62 65 63 61 6d 65 20 61 20 6e  ACUUM became a n
105a0 6f 2d 6f 70 20 77 68 65 6e 20 74 68 65 20 47 44  o-op when the GD
105b0 42 4d 20 62 61 63 6b 65 6e 64 20 77 61 73 20 72  BM backend was r
105c0 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 53 51 4c 49  emoved from.SQLI
105d0 54 45 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e  TE in version 2.
105e0 30 2e 30 2e 0a 56 41 43 55 55 4d 20 77 61 73 20  0.0..VACUUM was 
105f0 72 65 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e  reimplemented in
10600 20 76 65 72 73 69 6f 6e 20 32 2e 38 2e 31 2e 0a   version 2.8.1..
10610 54 68 65 20 69 6e 64 65 78 20 6f 72 20 74 61 62  The index or tab
10620 6c 65 20 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74  le name argument
10630 20 69 73 20 6e 6f 77 20 69 67 6e 6f 72 65 64 2e   is now ignored.
10640 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61  .</p>..<p>When a
10650 6e 20 6f 62 6a 65 63 74 20 28 74 61 62 6c 65 2c  n object (table,
10660 20 69 6e 64 65 78 2c 20 6f 72 20 74 72 69 67 67   index, or trigg
10670 65 72 29 20 69 73 20 64 72 6f 70 70 65 64 20 66  er) is dropped f
10680 72 6f 6d 20 74 68 65 20 0a 64 61 74 61 62 61 73  rom the .databas
10690 65 2c 20 69 74 20 6c 65 61 76 65 73 20 62 65 68  e, it leaves beh
106a0 69 6e 64 20 65 6d 70 74 79 20 73 70 61 63 65 2e  ind empty space.
106b0 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65    This makes the
106c0 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20   database .file 
106d0 6c 61 72 67 65 72 20 74 68 61 6e 20 69 74 20 6e  larger than it n
106e0 65 65 64 73 20 74 6f 20 62 65 2c 20 62 75 74 20  eeds to be, but 
106f0 63 61 6e 20 73 70 65 65 64 20 75 70 20 69 6e 73  can speed up ins
10700 65 72 74 73 2e 20 20 49 6e 20 74 69 6d 65 20 0a  erts.  In time .
10710 69 6e 73 65 72 74 73 20 61 6e 64 20 64 65 6c 65  inserts and dele
10720 74 65 73 20 63 61 6e 20 6c 65 61 76 65 20 74 68  tes can leave th
10730 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
10740 73 74 72 75 63 74 75 72 65 20 66 72 61 67 6d 65  structure fragme
10750 6e 74 65 64 2c 20 0a 77 68 69 63 68 20 73 6c 6f  nted, .which slo
10760 77 73 20 64 6f 77 6e 20 64 69 73 6b 20 61 63 63  ws down disk acc
10770 65 73 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ess to the datab
10780 61 73 65 20 63 6f 6e 74 65 6e 74 73 2e 0a 0a 54  ase contents...T
10790 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
107a0 64 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d 61 69  d cleans.the mai
107b0 6e 20 64 61 74 61 62 61 73 65 20 62 79 20 63 6f  n database by co
107c0 70 79 69 6e 67 20 69 74 73 20 63 6f 6e 74 65 6e  pying its conten
107d0 74 73 20 74 6f 20 61 20 74 65 6d 70 6f 72 61 72  ts to a temporar
107e0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
107f0 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67 20 74  and .reloading t
10800 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61  he original data
10810 62 61 73 65 20 66 69 6c 65 20 66 72 6f 6d 20 74  base file from t
10820 68 65 20 63 6f 70 79 2e 20 20 54 68 69 73 20 65  he copy.  This e
10830 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72 65 65 20  liminates .free 
10840 70 61 67 65 73 2c 20 20 61 6c 69 67 6e 73 20 74  pages,  aligns t
10850 61 62 6c 65 20 64 61 74 61 20 74 6f 20 62 65 20  able data to be 
10860 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e 64 20  contiguous, and 
10870 6f 74 68 65 72 77 69 73 65 20 63 6c 65 61 6e 73  otherwise cleans
10880 20 0a 75 70 20 74 68 65 20 64 61 74 61 62 61 73   .up the databas
10890 65 20 66 69 6c 65 20 73 74 72 75 63 74 75 72 65  e file structure
108a0 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  . It is not poss
108b0 69 62 6c 65 20 74 6f 20 70 65 72 66 6f 72 6d 20  ible to perform 
108c0 74 68 65 20 73 61 6d 65 0a 70 72 6f 63 65 73 73  the same.process
108d0 20 6f 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   on an attached 
108e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f  database file.</
108f0 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 63 6f 6d 6d  p>..<p>This comm
10900 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  and will fail if
10910 20 74 68 65 72 65 20 69 73 20 61 6e 20 61 63 74   there is an act
10920 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ive transaction.
10930 20 20 54 68 69 73 20 0a 63 6f 6d 6d 61 6e 64 20    This .command 
10940 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e  has no effect on
10950 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61   an in-memory da
10960 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
10970 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72  As of SQLite ver
10980 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74  sion 3.1, an alt
10990 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69 6e  ernative to usin
109a0 67 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  g the VACUUM com
109b0 6d 61 6e 64 0a 69 73 20 61 75 74 6f 2d 76 61 63  mand.is auto-vac
109c0 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65  uum mode, enable
109d0 64 20 75 73 69 6e 67 20 74 68 65 20 0a 3c 61 20  d using the .<a 
109e0 68 72 65 66 3d 22 70 72 61 67 6d 61 2e 68 74 6d  href="pragma.htm
109f0 6c 23 70 72 61 67 6d 61 5f 61 75 74 6f 5f 76 61  l#pragma_auto_va
10a00 63 75 75 6d 22 3e 61 75 74 6f 5f 76 61 63 75 75  cuum">auto_vacuu
10a10 6d 20 70 72 61 67 6d 61 3c 2f 61 3e 2e 3c 2f 70  m pragma</a>.</p
10a20 3e 0a 7d 0a 0a 23 20 41 20 6c 69 73 74 20 6f 66  >.}..# A list of
10a30 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61 73   keywords.  A as
10a40 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61 66  terisk occurs af
10a50 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64 20  ter the keyword 
10a60 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74 68  if it is on.# th
10a70 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74 2e  e fallback list.
10a80 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c  .#.set keyword_l
10a90 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20  ist [lsort {.   
10aa0 41 42 4f 52 54 2a 0a 20 20 20 41 46 54 45 52 2a  ABORT*.   AFTER*
10ab0 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52  .   ALL.   ALTER
10ac0 0a 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20  .   AND.   AS.  
10ad0 20 41 53 43 2a 0a 20 20 20 41 54 54 41 43 48 2a   ASC*.   ATTACH*
10ae0 0a 20 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .   AUTOINCREMEN
10af0 54 0a 20 20 20 42 45 46 4f 52 45 2a 0a 20 20 20  T.   BEFORE*.   
10b00 42 45 47 49 4e 2a 0a 20 20 20 42 45 54 57 45 45  BEGIN*.   BETWEE
10b10 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43 41  N.   BY.   CASCA
10b20 44 45 2a 0a 20 20 20 43 41 53 45 0a 20 20 20 43  DE*.   CASE.   C
10b30 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a  HECK.   COLLATE.
10b40 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e     COMMIT.   CON
10b50 46 4c 49 43 54 2a 0a 20 20 20 43 4f 4e 53 54 52  FLICT*.   CONSTR
10b60 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20  AINT.   CREATE. 
10b70 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45    CROSS.   CURRE
10b80 4e 54 5f 44 41 54 45 2a 0a 20 20 20 43 55 52 52  NT_DATE*.   CURR
10b90 45 4e 54 5f 54 49 4d 45 2a 0a 20 20 20 43 55 52  ENT_TIME*.   CUR
10ba0 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2a 0a  RENT_TIMESTAMP*.
10bb0 20 20 20 44 41 54 41 42 41 53 45 2a 0a 20 20 20     DATABASE*.   
10bc0 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52  DEFAULT.   DEFER
10bd0 52 45 44 2a 0a 20 20 20 44 45 46 45 52 52 41 42  RED*.   DEFERRAB
10be0 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
10bf0 44 45 53 43 2a 0a 20 20 20 44 45 54 41 43 48 2a  DESC*.   DETACH*
10c00 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20  .   DISTINCT.   
10c10 44 52 4f 50 0a 20 20 20 45 4e 44 2a 0a 20 20 20  DROP.   END*.   
10c20 45 41 43 48 2a 0a 20 20 20 45 4c 53 45 0a 20 20  EACH*.   ELSE.  
10c30 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50   ESCAPE.   EXCEP
10c40 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 2a 0a  T.   EXCLUSIVE*.
10c50 20 20 20 45 58 50 4c 41 49 4e 2a 0a 20 20 20 46     EXPLAIN*.   F
10c60 41 49 4c 2a 0a 20 20 20 46 4f 52 2a 0a 20 20 20  AIL*.   FOR*.   
10c70 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a  FOREIGN.   FROM.
10c80 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 2a     FULL.   GLOB*
10c90 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41 56  .   GROUP.   HAV
10ca0 49 4e 47 0a 20 20 20 49 47 4e 4f 52 45 2a 0a 20  ING.   IGNORE*. 
10cb0 20 20 49 4d 4d 45 44 49 41 54 45 2a 0a 20 20 20    IMMEDIATE*.   
10cc0 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49  IN.   INDEX.   I
10cd0 4e 49 54 49 41 4c 4c 59 2a 0a 20 20 20 49 4e 4e  NITIALLY*.   INN
10ce0 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20  ER.   INSERT.   
10cf0 49 4e 53 54 45 41 44 2a 0a 20 20 20 49 4e 54 45  INSTEAD*.   INTE
10d00 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20  RSECT.   INTO.  
10d10 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20   IS.   ISNULL.  
10d20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 2a 0a 20 20   JOIN.   KEY*.  
10d30 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 2a 0a 20   LEFT.   LIKE*. 
10d40 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48    LIMIT.   MATCH
10d50 2a 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20  *.   NATURAL.   
10d60 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20  NOT.   NOTNULL. 
10d70 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 2a 0a 20 20    NULL.   OF*.  
10d80 20 4f 46 46 53 45 54 2a 0a 20 20 20 4f 4e 0a 20   OFFSET*.   ON. 
10d90 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20    OR.   ORDER.  
10da0 20 4f 55 54 45 52 0a 20 20 20 50 52 41 47 4d 41   OUTER.   PRAGMA
10db0 2a 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20  *.   PRIMARY.   
10dc0 52 41 49 53 45 2a 0a 20 20 20 52 45 46 45 52 45  RAISE*.   REFERE
10dd0 4e 43 45 53 0a 20 20 20 52 45 49 4e 44 45 58 2a  NCES.   REINDEX*
10de0 0a 20 20 20 52 45 4e 41 4d 45 2a 0a 20 20 20 52  .   RENAME*.   R
10df0 45 50 4c 41 43 45 2a 0a 20 20 20 52 45 53 54 52  EPLACE*.   RESTR
10e00 49 43 54 2a 0a 20 20 20 52 49 47 48 54 0a 20 20  ICT*.   RIGHT.  
10e10 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57   ROLLBACK.   ROW
10e20 2a 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53  *.   SELECT.   S
10e30 45 54 0a 20 20 20 53 54 41 54 45 4d 45 4e 54 2a  ET.   STATEMENT*
10e40 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d  .   TABLE.   TEM
10e50 50 2a 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 2a  P*.   TEMPORARY*
10e60 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20  .   THEN.   TO. 
10e70 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20    TRANSACTION.  
10e80 20 54 52 49 47 47 45 52 2a 0a 20 20 20 55 4e 49   TRIGGER*.   UNI
10e90 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
10ea0 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
10eb0 20 20 20 56 41 43 55 55 4d 2a 0a 20 20 20 56 41     VACUUM*.   VA
10ec0 4c 55 45 53 0a 20 20 20 56 49 45 57 2a 0a 20 20  LUES.   VIEW*.  
10ed0 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d   WHEN.   WHERE.}
10ee0 5d 0a 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 53 51  ]....Section {SQ
10ef0 4c 69 74 65 20 6b 65 79 77 6f 72 64 73 7d 20 6b  Lite keywords} k
10f00 65 79 77 6f 72 64 73 0a 0a 70 75 74 73 20 7b 0a  eywords..puts {.
10f10 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64  <p>The SQL stand
10f20 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61 20  ard specifies a 
10f30 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b  huge number of k
10f40 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61  eywords which ma
10f50 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73  y not.be used as
10f60 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61   the names of ta
10f70 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63  bles, indices, c
10f80 6f 6c 75 6d 6e 73 2c 20 6f 72 20 64 61 74 61 62  olumns, or datab
10f90 61 73 65 73 2e 20 20 54 68 65 0a 6c 69 73 74 20  ases.  The.list 
10fa0 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20  is so long that 
10fb0 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72  few people can r
10fc0 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c  emember them all
10fd0 2e 20 20 46 6f 72 20 6d 6f 73 74 20 53 51 4c 0a  .  For most SQL.
10fe0 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73  code, your safes
10ff0 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65  t bet is to neve
11000 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73  r use any Englis
11010 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 20  h language word 
11020 61 73 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20 61  as the.name of a
11030 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62   user-defined ob
11040 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ject.</p>..<p>If
11050 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65   you want to use
11060 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20   a keyword as a 
11070 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74  name, you need t
11080 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65  o quote it.  The
11090 72 65 0a 61 72 65 20 74 68 72 65 65 20 77 61 79  re.are three way
110a0 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79  s of quoting key
110b0 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a  words in SQLite:
110c0 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b  </p>..<p>.<block
110d0 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
110e0 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
110f0 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64  top"><b>'keyword
11100 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  '</b></td><td wi
11110 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09  dth="20"></td>..
11120 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e  <td>A keyword in
11130 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69   single quotes i
11140 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
11150 20 61 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e   a literal strin
11160 67 0a 20 20 20 20 20 20 20 20 69 66 20 69 74 20  g.        if it 
11170 6f 63 63 75 72 73 20 69 6e 20 61 20 63 6f 6e 74  occurs in a cont
11180 65 78 74 20 77 68 65 72 65 20 61 20 73 74 72 69  ext where a stri
11190 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 61 6c  ng literal is al
111a0 6c 6f 77 65 64 2c 20 6f 74 68 65 72 77 69 73 65  lowed, otherwise
111b0 0a 09 69 74 20 69 73 20 75 6e 64 65 72 73 74 6f  ..it is understo
111c0 6f 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66  od as an identif
111d0 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ier.</td></tr>.<
111e0 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
111f0 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64  top"><b>"keyword
11200 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  "</b></td><td></
11210 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f  td>..<td>A keywo
11220 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  rd in double-quo
11230 74 65 73 20 69 73 20 69 6e 74 65 72 70 72 65 74  tes is interpret
11240 65 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66  ed as an identif
11250 69 65 72 20 69 66 0a 20 20 20 20 20 20 20 20 69  ier if.        i
11260 74 20 6d 61 74 63 68 65 73 20 61 20 6b 6e 6f 77  t matches a know
11270 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 4f  n identifier.  O
11280 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 69  therwise it is i
11290 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 0a  nterpreted as a.
112a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
112b0 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
112c0 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
112d0 6e 3d 22 74 6f 70 22 3e 3c 62 3e 5b 6b 65 79 77  n="top"><b>[keyw
112e0 6f 72 64 5d 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  ord]</b></td><td
112f0 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65  ></td>..<td>A ke
11300 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
11310 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
11320 73 20 69 73 20 61 6c 77 61 79 73 20 75 6e 64 65  s is always unde
11330 72 73 74 6f 6f 64 20 61 73 0a 20 20 20 20 20 20  rstood as.      
11340 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e    an identifier.
11350 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74    This is not st
11360 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69  andard SQL.  Thi
11370 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e  s quoting mechan
11380 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75  ism.        is u
11390 73 65 64 20 62 79 20 4d 53 20 41 63 63 65 73 73  sed by MS Access
113a0 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20   and SQL Server 
113b0 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20  and is included 
113c0 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20  in SQLite for.  
113d0 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c        compatibil
113e0 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ity.</td></tr>.<
113f0 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
11400 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 51  uote>.</p>..<p>Q
11410 75 6f 74 65 64 20 6b 65 79 77 6f 72 64 73 20 61  uoted keywords a
11420 72 65 20 75 6e 61 65 73 74 68 65 74 69 63 2e 0a  re unaesthetic..
11430 54 6f 20 68 65 6c 70 20 79 6f 75 20 61 76 6f 69  To help you avoi
11440 64 20 74 68 65 6d 2c 20 53 51 4c 69 74 65 20 61  d them, SQLite a
11450 6c 6c 6f 77 73 20 6d 61 6e 79 20 6b 65 79 77 6f  llows many keywo
11460 72 64 73 20 74 6f 20 62 65 20 75 73 65 64 20 75  rds to be used u
11470 6e 71 75 6f 74 65 64 0a 61 73 20 74 68 65 20 6e  nquoted.as the n
11480 61 6d 65 73 20 6f 66 20 64 61 74 61 62 61 73 65  ames of database
11490 73 2c 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63  s, tables, indic
114a0 65 73 2c 20 74 72 69 67 67 65 72 73 2c 20 76 69  es, triggers, vi
114b0 65 77 73 2c 20 61 6e 64 2f 6f 72 20 63 6f 6c 75  ews, and/or colu
114c0 6d 6e 73 2e 0a 49 6e 20 74 68 65 20 6c 69 73 74  mns..In the list
114d0 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 74 68 61   of keywords tha
114e0 74 20 66 6f 6c 6c 6f 77 73 2c 20 74 68 6f 73 65  t follows, those
114f0 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
11500 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72 73  d as identifiers
11510 0a 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 61 6e  .are shown in an
11520 20 69 74 61 6c 69 63 20 66 6f 6e 74 2e 20 20 4b   italic font.  K
11530 65 79 77 6f 72 64 73 20 74 68 61 74 20 6d 75 73  eywords that mus
11540 74 20 62 65 20 71 75 6f 74 65 64 20 69 6e 20 6f  t be quoted in o
11550 72 64 65 72 20 74 6f 20 62 65 0a 75 73 65 64 20  rder to be.used 
11560 61 73 20 69 64 65 6e 74 69 66 69 65 72 73 20 61  as identifiers a
11570 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6f 6c 64  re shown in bold
11580 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  .</p>..<p>.SQLit
11590 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f  e adds new keywo
115a0 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f  rds from time to
115b0 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61   time when it ta
115c0 6b 65 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  ke on new featur
115d0 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
115e0 74 20 79 6f 75 20 63 6f 64 65 20 66 72 6f 6d 20  t you code from 
115f0 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20  being broken by 
11600 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65  future enhanceme
11610 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a  nts, you should.
11620 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61  normally quote a
11630 6e 79 20 69 6e 64 65 6e 74 69 66 69 65 72 20 74  ny indentifier t
11640 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73  hat is an Englis
11650 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c  h language word,
11660 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20   even if.you do 
11670 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70  not have to..</p
11680 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c 6f  >..<p>.The follo
11690 77 69 6e 67 20 61 72 65 20 74 68 65 20 6b 65 79  wing are the key
116a0 77 6f 72 64 73 20 63 75 72 72 65 6e 74 6c 79 20  words currently 
116b0 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 53 51  recognized by SQ
116c0 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  Lite:.</p>..<blo
116d0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
116e0 77 69 64 74 68 3d 22 31 30 30 25 22 3e 0a 3c 74  width="100%">.<t
116f0 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65  r>.<td align="le
11700 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ft" valign="top"
11710 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 7d 0a   width="20%">.}.
11720 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20  .set n [llength 
11730 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73  $keyword_list].s
11740 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52  et nCol 5.set nR
11750 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e  ow [expr {($n+$n
11760 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73  Col-1)/$nCol}].s
11770 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77  et i 0.foreach w
11780 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  ord $keyword_lis
11790 74 20 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e  t {.  if {[strin
117a0 67 20 69 6e 64 65 78 20 24 77 6f 72 64 20 65 6e  g index $word en
117b0 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20 20 20 20 73  d]=="*"} {.    s
117c0 65 74 20 77 6f 72 64 20 5b 73 74 72 69 6e 67 20  et word [string 
117d0 72 61 6e 67 65 20 24 77 6f 72 64 20 30 20 65 6e  range $word 0 en
117e0 64 2d 31 5d 0a 20 20 20 20 73 65 74 20 66 6f 6e  d-1].    set fon
117f0 74 20 69 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20  t i.  } else {. 
11800 20 20 20 73 65 74 20 66 6f 6e 74 20 62 0a 20 20     set font b.  
11810 7d 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f  }.  if {$i==$nRo
11820 77 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 22 3c  w} {.    puts "<
11830 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c  /td><td valign=\
11840 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c  "top\" align=\"l
11850 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30  eft\" width=\"20
11860 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20  %\">".    set i 
11870 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  1.  } else {.   
11880 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 70 75   incr i.  }.  pu
11890 74 73 20 22 3c 24 66 6f 6e 74 3e 24 77 6f 72 64  ts "<$font>$word
118a0 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22 0a 7d 0a  </$font><br>".}.
118b0 0a 70 75 74 73 20 7b 0a 3c 2f 74 64 3e 3c 2f 74  .puts {.</td></t
118c0 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  r></table></bloc
118d0 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53 70 65  kquote>..<h2>Spe
118e0 63 69 61 6c 20 6e 61 6d 65 73 3c 2f 68 32 3e 0a  cial names</h2>.
118f0 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
11900 67 20 61 72 65 20 6e 6f 74 20 6b 65 79 77 6f 72  g are not keywor
11910 64 73 20 69 6e 20 53 51 4c 69 74 65 2c 20 62 75  ds in SQLite, bu
11920 74 20 61 72 65 20 75 73 65 64 20 61 73 20 6e 61  t are used as na
11930 6d 65 73 20 6f 66 20 0a 73 79 73 74 65 6d 20 6f  mes of .system o
11940 62 6a 65 63 74 73 2e 20 20 54 68 65 79 20 63 61  bjects.  They ca
11950 6e 20 62 65 20 75 73 65 64 20 61 73 20 61 6e 20  n be used as an 
11960 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 61  identifier for a
11970 20 64 69 66 66 65 72 65 6e 74 20 0a 74 79 70 65   different .type
11980 20 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a   of object.</p>.
11990 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 62 3e  .<blockquote><b>
119a0 0a 20 20 5f 52 4f 57 49 44 5f 3c 62 72 3e 0a 20  .  _ROWID_<br>. 
119b0 20 4d 41 49 4e 3c 62 72 3e 0a 20 20 4f 49 44 3c   MAIN<br>.  OID<
119c0 62 72 3e 0a 20 20 52 4f 57 49 44 3c 62 72 3e 0a  br>.  ROWID<br>.
119d0 20 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 3c    SQLITE_MASTER<
119e0 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 53 45 51  br>.  SQLITE_SEQ
119f0 55 45 4e 43 45 3c 62 72 3e 0a 20 20 53 51 4c 49  UENCE<br>.  SQLI
11a00 54 45 5f 54 45 4d 50 5f 4d 41 53 54 45 52 3c 62  TE_TEMP_MASTER<b
11a10 72 3e 0a 20 20 54 45 4d 50 3c 62 72 3e 0a 3c 2f  r>.  TEMP<br>.</
11a20 62 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  b></blockquote>.
11a30 7d 0a 0a 66 6f 6f 74 65 72 20 24 72 63 73 69 64  }..footer $rcsid
11a40 0a 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  .if {[string len
11a50 67 74 68 20 24 6f 75 74 70 75 74 64 69 72 5d 7d  gth $outputdir]}
11a60 20 7b 0a 20 20 66 6f 6f 74 65 72 20 24 72 63 73   {.  footer $rcs
11a70 69 64 0a 7d 0a                                   id.}.