/ Hex Artifact Content
Login

Artifact fb1070256c211a3dec735e1273c506c1f8db7556:


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 38 20 32 30  g.tcl,v 1.118 20
0060: 30 36 2f 30 39 2f 32 33 20 32 30 3a 34 36 3a 32  06/09/23 20:46:2
0070: 33 20 64 72 68 20 45 78 70 20 24 7d 0a 73 6f 75  3 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 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
05e0: 42 4c 45 7d 20 63 72 65 61 74 65 76 74 61 62 7d  BLE} createvtab}
05f0: 0a 20 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45  .  {{CREATE INDE
0600: 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 7d 0a  X} createindex}.
0610: 20 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d    {VACUUM vacuum
0620: 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45  }.  {{DROP TABLE
0630: 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20 7b  } droptable}.  {
0640: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f  {DROP INDEX} dro
0650: 70 69 6e 64 65 78 7d 0a 20 20 7b 49 4e 53 45 52  pindex}.  {INSER
0660: 54 20 69 6e 73 65 72 74 7d 0a 20 20 7b 52 45 50  T insert}.  {REP
0670: 4c 41 43 45 20 72 65 70 6c 61 63 65 7d 0a 20 20  LACE replace}.  
0680: 7b 44 45 4c 45 54 45 20 64 65 6c 65 74 65 7d 0a  {DELETE delete}.
0690: 20 20 7b 55 50 44 41 54 45 20 75 70 64 61 74 65    {UPDATE update
06a0: 7d 0a 20 20 7b 53 45 4c 45 43 54 20 73 65 6c 65  }.  {SELECT sele
06b0: 63 74 7d 0a 20 20 7b 63 6f 6d 6d 65 6e 74 20 63  ct}.  {comment c
06c0: 6f 6d 6d 65 6e 74 7d 0a 20 20 7b 43 4f 50 59 20  omment}.  {COPY 
06d0: 63 6f 70 79 7d 0a 20 20 7b 45 58 50 4c 41 49 4e  copy}.  {EXPLAIN
06e0: 20 65 78 70 6c 61 69 6e 7d 0a 20 20 7b 65 78 70   explain}.  {exp
06f0: 72 65 73 73 69 6f 6e 20 65 78 70 72 7d 0a 20 20  ression expr}.  
0700: 7b 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54  {{BEGIN TRANSACT
0710: 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e  ION} transaction
0720: 7d 0a 20 20 7b 7b 43 4f 4d 4d 49 54 20 54 52 41  }.  {{COMMIT TRA
0730: 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61  NSACTION} transa
0740: 63 74 69 6f 6e 7d 0a 20 20 7b 7b 45 4e 44 20 54  ction}.  {{END T
0750: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0760: 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 52 4f 4c  saction}.  {{ROL
0770: 4c 42 41 43 4b 20 54 52 41 4e 53 41 43 54 49 4f  LBACK TRANSACTIO
0780: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a  N} transaction}.
0790: 20 20 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61    {PRAGMA pragma
07a0: 2e 68 74 6d 6c 7d 0a 20 20 7b 7b 4f 4e 20 43 4f  .html}.  {{ON CO
07b0: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
07c0: 6f 6e 66 6c 69 63 74 7d 0a 20 20 7b 7b 43 52 45  onflict}.  {{CRE
07d0: 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74 65  ATE VIEW} create
07e0: 76 69 65 77 7d 0a 20 20 7b 7b 44 52 4f 50 20 56  view}.  {{DROP V
07f0: 49 45 57 7d 20 64 72 6f 70 76 69 65 77 7d 0a 20  IEW} dropview}. 
0800: 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45   {{CREATE TRIGGE
0810: 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72  R} createtrigger
0820: 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 52 49 47 47  }.  {{DROP TRIGG
0830: 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72 7d  ER} droptrigger}
0840: 0a 20 20 7b 7b 41 54 54 41 43 48 20 44 41 54 41  .  {{ATTACH DATA
0850: 42 41 53 45 7d 20 61 74 74 61 63 68 7d 0a 20 20  BASE} attach}.  
0860: 7b 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53  {{DETACH DATABAS
0870: 45 7d 20 64 65 74 61 63 68 7d 0a 20 20 7b 52 45  E} detach}.  {RE
0880: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0890: 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20   {{ALTER TABLE} 
08a0: 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 7b 7b  altertable}.  {{
08b0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
08c0: 7d 0a 7d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68  }.}] {.  foreach
08d0: 20 7b 73 5f 74 69 74 6c 65 20 73 5f 74 61 67 7d   {s_title s_tag}
08e0: 20 24 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 70   $section {}.  p
08f0: 75 74 73 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66  uts "<li><a href
0900: 3d 5c 22 5b 73 6c 69 6e 6b 20 24 73 5f 74 61 67  =\"[slink $s_tag
0910: 5d 5c 22 3e 24 73 5f 74 69 74 6c 65 3c 2f 61 3e  ]\">$s_title</a>
0920: 3c 2f 6c 69 3e 22 0a 7d 0a 70 75 74 73 20 7b 3c  </li>".}.puts {<
0930: 2f 75 6c 3e 3c 2f 70 3e 0a 0a 3c 70 3e 44 65 74  /ul></p>..<p>Det
0940: 61 69 6c 73 20 6f 6e 20 74 68 65 20 69 6d 70 6c  ails on the impl
0950: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 65 61  ementation of ea
0960: 63 68 20 63 6f 6d 6d 61 6e 64 20 61 72 65 20 70  ch command are p
0970: 72 6f 76 69 64 65 64 20 69 6e 0a 74 68 65 20 73  rovided in.the s
0980: 65 71 75 65 6c 2e 3c 2f 70 3e 0a 7d 0a 0a 70 72  equel.</p>.}..pr
0990: 6f 63 20 4f 70 65 72 61 74 6f 72 20 7b 6e 61 6d  oc Operator {nam
09a0: 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c  e} {.  return "<
09b0: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63  font color=\"#2c
09c0: 32 63 66 30 5c 22 3e 3c 62 69 67 3e 24 6e 61 6d  2cf0\"><big>$nam
09d0: 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 22 0a  e</big></font>".
09e0: 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65 72 6d 69 6e  }.proc Nontermin
09f0: 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65  al {name} {.  re
0a00: 74 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e 74 20 63  turn "<i><font c
0a10: 6f 6c 6f 72 3d 5c 22 23 66 66 33 34 33 34 5c 22  olor=\"#ff3434\"
0a20: 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 3c 2f 69  >$name</font></i
0a30: 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65 79 77 6f 72  >".}.proc Keywor
0a40: 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  d {name} {.  ret
0a50: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0a60: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 24 6e 61  =\"#2c2cf0\">$na
0a70: 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f  me</font>".}.pro
0a80: 63 20 45 78 61 6d 70 6c 65 20 7b 74 65 78 74 7d  c Example {text}
0a90: 20 7b 0a 20 20 70 75 74 73 20 22 3c 62 6c 6f 63   {.  puts "<bloc
0aa0: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 24 74 65 78  kquote><pre>$tex
0ab0: 74 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  t</pre></blockqu
0ac0: 6f 74 65 3e 22 0a 7d 0a 0a 70 72 6f 63 20 53 65  ote>".}..proc Se
0ad0: 63 74 69 6f 6e 20 7b 6e 61 6d 65 20 6c 61 62 65  ction {name labe
0ae0: 6c 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 6f 75  l} {.  global ou
0af0: 74 70 75 74 64 69 72 0a 0a 20 20 69 66 20 7b 5b  tputdir..  if {[
0b00: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6f  string length $o
0b10: 75 74 70 75 74 64 69 72 5d 21 3d 30 7d 20 7b 0a  utputdir]!=0} {.
0b20: 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
0b30: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20   [info commands 
0b40: 70 75 74 73 5f 73 74 61 6e 64 61 72 64 5d 5d 3e  puts_standard]]>
0b50: 30 7d 20 7b 0a 20 20 20 20 20 20 66 6f 6f 74 65  0} {.      foote
0b60: 72 20 24 3a 3a 72 63 73 69 64 0a 20 20 20 20 7d  r $::rcsid.    }
0b70: 0a 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e  ..    if {[strin
0b80: 67 20 6c 65 6e 67 74 68 20 24 6c 61 62 65 6c 5d  g length $label]
0b90: 3e 30 7d 20 7b 0a 20 20 20 20 20 20 72 65 6e 61  >0} {.      rena
0ba0: 6d 65 20 70 75 74 73 20 70 75 74 73 5f 73 74 61  me puts puts_sta
0bb0: 6e 64 61 72 64 0a 20 20 20 20 20 20 70 72 6f 63  ndard.      proc
0bc0: 20 70 75 74 73 20 7b 73 74 72 7d 20 7b 0a 20 20   puts {str} {.  
0bd0: 20 20 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c        regsub -al
0be0: 6c 20 7b 68 72 65 66 3d 22 23 28 5b 61 2d 7a 5d  l {href="#([a-z]
0bf0: 2b 29 22 7d 20 24 73 74 72 20 7b 68 72 65 66 3d  +)"} $str {href=
0c00: 22 6c 61 6e 67 5f 5c 31 2e 68 74 6d 6c 22 7d 20  "lang_\1.html"} 
0c10: 73 74 72 0a 20 20 20 20 20 20 20 20 70 75 74 73  str.        puts
0c20: 5f 73 74 61 6e 64 61 72 64 20 24 3a 3a 73 65 63  _standard $::sec
0c30: 74 69 6f 6e 5f 66 69 6c 65 20 24 73 74 72 0a 20  tion_file $str. 
0c40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 6e       }.      ren
0c50: 61 6d 65 20 66 6f 6f 74 65 72 20 66 6f 6f 74 65  ame footer foote
0c60: 72 5f 73 74 61 6e 64 61 72 64 0a 20 20 20 20 20  r_standard.     
0c70: 20 70 72 6f 63 20 66 6f 6f 74 65 72 20 7b 69 64   proc footer {id
0c80: 7d 20 7b 0a 20 20 20 20 20 20 20 20 66 6f 6f 74  } {.        foot
0c90: 65 72 5f 73 74 61 6e 64 61 72 64 20 24 69 64 0a  er_standard $id.
0ca0: 20 20 20 20 20 20 20 20 72 65 6e 61 6d 65 20 66          rename f
0cb0: 6f 6f 74 65 72 20 22 22 0a 20 20 20 20 20 20 20  ooter "".       
0cc0: 20 72 65 6e 61 6d 65 20 70 75 74 73 20 22 22 0a   rename puts "".
0cd0: 20 20 20 20 20 20 20 20 72 65 6e 61 6d 65 20 70          rename p
0ce0: 75 74 73 5f 73 74 61 6e 64 61 72 64 20 70 75 74  uts_standard put
0cf0: 73 0a 20 20 20 20 20 20 20 20 72 65 6e 61 6d 65  s.        rename
0d00: 20 66 6f 6f 74 65 72 5f 73 74 61 6e 64 61 72 64   footer_standard
0d10: 20 66 6f 6f 74 65 72 0a 20 20 20 20 20 20 7d 20   footer.      } 
0d20: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 73 65 63  .      set ::sec
0d30: 74 69 6f 6e 5f 66 69 6c 65 20 5b 6f 70 65 6e 20  tion_file [open 
0d40: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6f 75 74 70  [file join $outp
0d50: 75 74 64 69 72 20 6c 61 6e 67 5f 24 6c 61 62 65  utdir lang_$labe
0d60: 6c 2e 68 74 6d 6c 5d 20 77 5d 0a 20 20 20 20 20  l.html] w].     
0d70: 20 68 65 61 64 65 72 20 22 51 75 65 72 79 20 4c   header "Query L
0d80: 61 6e 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f  anguage Understo
0d90: 6f 64 20 62 79 20 53 51 4c 69 74 65 3a 20 24 6e  od by SQLite: $n
0da0: 61 6d 65 22 0a 20 20 20 20 20 20 70 75 74 73 20  ame".      puts 
0db0: 22 3c 68 31 3e 53 51 4c 20 41 73 20 55 6e 64 65  "<h1>SQL As Unde
0dc0: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0dd0: 3c 2f 68 31 3e 22 0a 20 20 20 20 20 20 70 75 74  </h1>".      put
0de0: 73 20 22 3c 61 20 68 72 65 66 3d 5c 22 6c 61 6e  s "<a href=\"lan
0df0: 67 2e 68 74 6d 6c 5c 22 3e 5c 5b 43 6f 6e 74 65  g.html\">\[Conte
0e00: 6e 74 73 5c 5d 3c 2f 61 3e 22 0a 20 20 20 20 20  nts\]</a>".     
0e10: 20 70 75 74 73 20 22 3c 68 32 3e 24 6e 61 6d 65   puts "<h2>$name
0e20: 3c 2f 68 32 3e 22 0a 20 20 20 20 20 20 72 65 74  </h2>".      ret
0e30: 75 72 6e 20 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  urn .    }.  }. 
0e40: 20 70 75 74 73 20 22 5c 6e 3c 68 72 20 2f 3e 22   puts "\n<hr />"
0e50: 0a 20 20 69 66 20 7b 24 6c 61 62 65 6c 21 3d 22  .  if {$label!="
0e60: 22 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 22 3c  "} {.    puts "<
0e70: 61 20 6e 61 6d 65 3d 5c 22 24 6c 61 62 65 6c 5c  a name=\"$label\
0e80: 22 3e 3c 2f 61 3e 22 0a 20 20 7d 0a 20 20 70 75  "></a>".  }.  pu
0e90: 74 73 20 22 3c 68 31 3e 24 6e 61 6d 65 3c 2f 68  ts "<h1>$name</h
0ea0: 31 3e 5c 6e 22 0a 7d 0a 0a 53 65 63 74 69 6f 6e  1>\n".}..Section
0eb0: 20 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 61   {ALTER TABLE} a
0ec0: 6c 74 65 72 74 61 62 6c 65 0a 0a 53 79 6e 74 61  ltertable..Synta
0ed0: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
0ee0: 7d 20 7b 0a 41 4c 54 45 52 20 54 41 42 4c 45 20  } {.ALTER TABLE 
0ef0: 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e  [<database-name>
0f00: 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e   .] <table-name>
0f10: 20 3c 61 6c 74 65 72 61 74 69 6f 6e 3e 0a 7d 20   <alteration>.} 
0f20: 7b 61 6c 74 65 72 61 74 69 6f 6e 7d 20 7b 0a 52  {alteration} {.R
0f30: 45 4e 41 4d 45 20 54 4f 20 3c 6e 65 77 2d 74 61  ENAME TO <new-ta
0f40: 62 6c 65 2d 6e 61 6d 65 3e 0a 7d 20 7b 61 6c 74  ble-name>.} {alt
0f50: 65 72 61 74 69 6f 6e 7d 20 7b 0a 41 44 44 20 5b  eration} {.ADD [
0f60: 43 4f 4c 55 4d 4e 5d 20 3c 63 6f 6c 75 6d 6e 2d  COLUMN] <column-
0f70: 64 65 66 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  def>.}..puts {.<
0f80: 70 3e 53 51 4c 69 74 65 27 73 20 76 65 72 73 69  p>SQLite's versi
0f90: 6f 6e 20 6f 66 20 74 68 65 20 41 4c 54 45 52 20  on of the ALTER 
0fa0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 61 6c  TABLE command al
0fb0: 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
0fc0: 20 0a 72 65 6e 61 6d 65 20 6f 72 20 61 64 64 20   .rename or add 
0fd0: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20  a new column to 
0fe0: 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
0ff0: 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  e. It is not pos
1000: 73 69 62 6c 65 0a 74 6f 20 72 65 6d 6f 76 65 20  sible.to remove 
1010: 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 61 20  a column from a 
1020: 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  table..</p>..<p>
1030: 54 68 65 20 52 45 4e 41 4d 45 20 54 4f 20 73 79  The RENAME TO sy
1040: 6e 74 61 78 20 69 73 20 75 73 65 64 20 74 6f 20  ntax is used to 
1050: 72 65 6e 61 6d 65 20 74 68 65 20 74 61 62 6c 65  rename the table
1060: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 0a   identified by .
1070: 3c 69 3e 5b 64 61 74 61 62 61 73 65 2d 6e 61 6d  <i>[database-nam
1080: 65 2e 5d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  e.]table-name</i
1090: 3e 20 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c  > to <i>new-tabl
10a0: 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 54 68 69 73  e-name</i>. This
10b0: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
10c0: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
10d0: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
10e0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
10f0: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1100: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1110: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1120: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  abase.</p>..<p>I
1130: 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
1140: 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74 72  g renamed has tr
1150: 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63 65  iggers or indice
1160: 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72 65  s, then these re
1170: 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74 6f  main.attached to
1180: 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65 72   the table after
1190: 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65 6e   it has been ren
11a0: 61 6d 65 64 2e 20 48 6f 77 65 76 65 72 2c 20 69  amed. However, i
11b0: 66 20 74 68 65 72 65 20 61 72 65 0a 61 6e 79 20  f there are.any 
11c0: 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e 73  view definitions
11d0: 2c 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  , or statements 
11e0: 65 78 65 63 75 74 65 64 20 62 79 20 74 72 69 67  executed by trig
11f0: 67 65 72 73 20 74 68 61 74 20 72 65 66 65 72 20  gers that refer 
1200: 74 6f 0a 74 68 65 20 74 61 62 6c 65 20 62 65 69  to.the table bei
1210: 6e 67 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 73  ng renamed, thes
1220: 65 20 61 72 65 20 6e 6f 74 20 61 75 74 6f 6d 61  e are not automa
1230: 74 69 63 61 6c 6c 79 20 6d 6f 64 69 66 69 65 64  tically modified
1240: 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 0a   to use the new.
1250: 74 61 62 6c 65 20 6e 61 6d 65 2e 20 49 66 20 74  table name. If t
1260: 68 69 73 20 69 73 20 72 65 71 75 69 72 65 64 2c  his is required,
1270: 20 74 68 65 20 74 72 69 67 67 65 72 73 20 6f 72   the triggers or
1280: 20 76 69 65 77 20 64 65 66 69 6e 69 74 69 6f 6e   view definition
1290: 73 20 6d 75 73 74 20 62 65 0a 64 72 6f 70 70 65  s must be.droppe
12a0: 64 20 61 6e 64 20 72 65 63 72 65 61 74 65 64 20  d and recreated 
12b0: 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20 74  to use the new t
12c0: 61 62 6c 65 20 6e 61 6d 65 20 62 79 20 68 61 6e  able name by han
12d0: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  d..</p>..<p>The 
12e0: 41 44 44 20 5b 43 4f 4c 55 4d 4e 5d 20 73 79 6e  ADD [COLUMN] syn
12f0: 74 61 78 20 69 73 20 75 73 65 64 20 74 6f 20 61  tax is used to a
1300: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
1310: 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  to an existing t
1320: 61 62 6c 65 2e 0a 54 68 65 20 6e 65 77 20 63 6f  able..The new co
1330: 6c 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20 61  lumn is always a
1340: 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65  ppended to the e
1350: 6e 64 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f  nd of the list o
1360: 66 20 65 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d  f existing colum
1370: 6e 73 2e 0a 3c 69 3e 43 6f 6c 75 6d 6e 2d 64 65  ns..<i>Column-de
1380: 66 3c 2f 69 3e 20 6d 61 79 20 74 61 6b 65 20 61  f</i> may take a
1390: 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73 20  ny of the forms 
13a0: 70 65 72 6d 69 73 73 61 62 6c 65 20 69 6e 20 61  permissable in a
13b0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 0a 73   CREATE TABLE .s
13c0: 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68 20 74  tatement, with t
13d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73  he following res
13e0: 74 72 69 63 74 69 6f 6e 73 3a 0a 3c 75 6c 3e 0a  trictions:.<ul>.
13f0: 3c 6c 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  <li>The column m
1400: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52  ay not have a PR
1410: 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49  IMARY KEY or UNI
1420: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c  QUE constraint.<
1430: 2f 6c 69 3e 0a 3c 6c 69 3e 54 68 65 20 63 6f 6c  /li>.<li>The col
1440: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
1450: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
1460: 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   of CURRENT_TIME
1470: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 0a  , CURRENT_DATE .
1480: 20 20 20 20 6f 72 20 43 55 52 52 45 4e 54 5f 54      or CURRENT_T
1490: 49 4d 45 53 54 41 4d 50 2e 3c 2f 6c 69 3e 0a 3c  IMESTAMP.</li>.<
14a0: 6c 69 3e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c  li>If a NOT NULL
14b0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73   constraint is s
14c0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74  pecified, then t
14d0: 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68  he column must h
14e0: 61 76 65 20 61 0a 20 20 20 20 64 65 66 61 75 6c  ave a.    defaul
14f0: 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20 74 68  t value other th
1500: 61 6e 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a  an NULL..</ul>..
1510: 3c 70 3e 54 68 65 20 65 78 65 63 75 74 69 6f 6e  <p>The execution
1520: 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54   time of the ALT
1530: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1540: 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20   is independent 
1550: 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  of.the amount of
1560: 20 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62   data in the tab
1570: 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54  le.  The ALTER T
1580: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  ABLE command run
1590: 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20  s as quickly.on 
15a0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20  a table with 10 
15b0: 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20  million rows as 
15c0: 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62  it does on a tab
15d0: 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c  le with 1 row..<
15e0: 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44  /p>..<p>After AD
15f0: 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65  D COLUMN has bee
1600: 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62  n run on a datab
1610: 61 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61  ase, that databa
1620: 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72  se will not.be r
1630: 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74  eadable by SQLit
1640: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
1650: 61 6e 64 20 65 61 72 6c 69 65 72 20 75 6e 74 69  and earlier unti
1660: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 69  l the database.i
1670: 73 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  s <a href="lang_
1680: 76 61 63 75 75 6d 2e 68 74 6d 6c 22 3e 56 41 43  vacuum.html">VAC
1690: 55 55 4d 3c 2f 61 3e 65 64 2e 3c 2f 70 3e 0a 7d  UUM</a>ed.</p>.}
16a0: 0a 0a 53 65 63 74 69 6f 6e 20 7b 41 4e 41 4c 59  ..Section {ANALY
16b0: 5a 45 7d 20 61 6e 61 6c 79 7a 65 0a 0a 53 79 6e  ZE} analyze..Syn
16c0: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
16d0: 6e 74 7d 20 7b 0a 20 20 41 4e 41 4c 59 5a 45 0a  nt} {.  ANALYZE.
16e0: 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  }.Syntax {sql-st
16f0: 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20 41 4e 41  atement} {.  ANA
1700: 4c 59 5a 45 20 3c 64 61 74 61 62 61 73 65 2d 6e  LYZE <database-n
1710: 61 6d 65 3e 0a 7d 0a 53 79 6e 74 61 78 20 7b 73  ame>.}.Syntax {s
1720: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
1730: 20 20 41 4e 41 4c 59 5a 45 20 5b 3c 64 61 74 61    ANALYZE [<data
1740: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
1750: 61 62 6c 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75  able-name>.}..pu
1760: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 41 4e 41 4c  ts {.<p>The ANAL
1770: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
1780: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
1790: 62 6f 75 74 20 69 6e 64 69 63 65 73 20 61 6e 64  bout indices and
17a0: 20 73 74 6f 72 65 73 20 74 68 65 6d 0a 69 6e 20   stores them.in 
17b0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 73  a special tables
17c0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
17d0: 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72 79   where the query
17e0: 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 20 75   optimizer can u
17f0: 73 65 0a 74 68 65 6d 20 74 6f 20 68 65 6c 70 20  se.them to help 
1800: 6d 61 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65  make better inde
1810: 78 20 63 68 6f 69 63 65 73 2e 0a 49 66 20 6e 6f  x choices..If no
1820: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67   arguments are g
1830: 69 76 65 6e 2c 20 61 6c 6c 20 69 6e 64 69 63 65  iven, all indice
1840: 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
1850: 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a  d databases are.
1860: 61 6e 61 6c 79 7a 65 64 2e 20 20 49 66 20 61 20  analyzed.  If a 
1870: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69 73  database name is
1880: 20 67 69 76 65 6e 20 61 73 20 74 68 65 20 61 72   given as the ar
1890: 67 75 6d 65 6e 74 2c 20 61 6c 6c 20 69 6e 64 69  gument, all indi
18a0: 63 65 73 0a 69 6e 20 74 68 61 74 20 6f 6e 65 20  ces.in that one 
18b0: 64 61 74 61 62 61 73 65 20 61 72 65 20 61 6e 61  database are ana
18c0: 6c 79 7a 65 64 2e 20 20 49 66 20 74 68 65 20 61  lyzed.  If the a
18d0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62  rgument is a tab
18e0: 6c 65 20 6e 61 6d 65 2c 0a 74 68 65 6e 20 6f 6e  le name,.then on
18f0: 6c 79 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63  ly indices assoc
1900: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
1910: 6f 6e 65 20 74 61 62 6c 65 20 61 72 65 20 61 6e  one table are an
1920: 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  alyzed.</p>..<p>
1930: 54 68 65 20 69 6e 69 74 69 61 6c 20 69 6d 70 6c  The initial impl
1940: 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74 6f 72 65  ementation store
1950: 73 20 61 6c 6c 20 73 74 61 74 69 73 74 69 63 73  s all statistics
1960: 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 74 61 62   in a single.tab
1970: 6c 65 20 6e 61 6d 65 64 20 3c 62 3e 73 71 6c 69  le named <b>sqli
1980: 74 65 5f 73 74 61 74 31 3c 2f 62 3e 2e 20 20 46  te_stat1</b>.  F
1990: 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e  uture enhancemen
19a0: 74 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64  ts may create.ad
19b0: 64 69 74 69 6f 6e 61 6c 20 74 61 62 6c 65 73 20  ditional tables 
19c0: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61  with the same na
19d0: 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65 70  me pattern excep
19e0: 74 20 77 69 74 68 20 74 68 65 20 22 31 22 0a 63  t with the "1".c
19f0: 68 61 6e 67 65 64 20 74 6f 20 61 20 64 69 66 66  hanged to a diff
1a00: 65 72 65 6e 74 20 64 69 67 69 74 2e 20 20 54 68  erent digit.  Th
1a10: 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  e <b>sqlite_stat
1a20: 31 3c 2f 62 3e 20 74 61 62 6c 65 20 63 61 6e 6e  1</b> table cann
1a30: 6f 74 0a 62 65 20 3c 61 20 68 72 65 66 3d 22 23  ot.be <a href="#
1a40: 64 72 6f 70 74 61 62 6c 65 22 3e 44 52 4f 50 3c  droptable">DROP<
1a50: 2f 61 3e 70 65 64 2c 0a 62 75 74 20 61 6c 6c 20  /a>ped,.but all 
1a60: 74 68 65 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20  the content can 
1a70: 62 65 20 3c 61 20 68 72 65 66 3d 22 23 64 65 6c  be <a href="#del
1a80: 65 74 65 22 3e 44 45 4c 45 54 45 3c 2f 61 3e 64  ete">DELETE</a>d
1a90: 20 77 68 69 63 68 20 68 61 73 20 74 68 65 0a 73   which has the.s
1aa0: 61 6d 65 20 65 66 66 65 63 74 2e 3c 2f 70 3e 0a  ame effect.</p>.
1ab0: 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41  }..Section {ATTA
1ac0: 43 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74  CH DATABASE} att
1ad0: 61 63 68 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ach..Syntax {sql
1ae0: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 41 54  -statement} {.AT
1af0: 54 41 43 48 20 5b 44 41 54 41 42 41 53 45 5d 20  TACH [DATABASE] 
1b00: 3c 64 61 74 61 62 61 73 65 2d 66 69 6c 65 6e 61  <database-filena
1b10: 6d 65 3e 20 41 53 20 3c 64 61 74 61 62 61 73 65  me> AS <database
1b20: 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b  -name>.}..puts {
1b30: 0a 3c 70 3e 54 68 65 20 41 54 54 41 43 48 20 44  .<p>The ATTACH D
1b40: 41 54 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e  ATABASE statemen
1b50: 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64  t adds another d
1b60: 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f  atabase .file to
1b70: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74   the current dat
1b80: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1b90: 2e 20 20 49 66 20 74 68 65 20 66 69 6c 65 6e 61  .  If the filena
1ba0: 6d 65 20 63 6f 6e 74 61 69 6e 73 20 0a 70 75 6e  me contains .pun
1bb0: 63 74 75 61 74 69 6f 6e 20 63 68 61 72 61 63 74  ctuation charact
1bc0: 65 72 73 20 69 74 20 6d 75 73 74 20 62 65 20 71  ers it must be q
1bd0: 75 6f 74 65 64 2e 20 20 54 68 65 20 6e 61 6d 65  uoted.  The name
1be0: 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74  s 'main' and .'t
1bf0: 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74 68  emp' refer to th
1c00: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1c10: 61 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65  and the database
1c20: 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f   used for .tempo
1c30: 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 54 68  rary tables.  Th
1c40: 65 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 64 65  ese cannot be de
1c50: 74 61 63 68 65 64 2e 20 20 41 74 74 61 63 68 65  tached.  Attache
1c60: 64 20 64 61 74 61 62 61 73 65 73 20 0a 61 72 65  d databases .are
1c70: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
1c80: 68 65 20 3c 61 20 68 72 65 66 3d 22 23 64 65 74  he <a href="#det
1c90: 61 63 68 22 3e 44 45 54 41 43 48 20 44 41 54 41  ach">DETACH DATA
1ca0: 42 41 53 45 3c 2f 61 3e 20 0a 73 74 61 74 65 6d  BASE</a> .statem
1cb0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75  ent.</p>..<p>You
1cc0: 20 63 61 6e 20 72 65 61 64 20 66 72 6f 6d 20 61   can read from a
1cd0: 6e 64 20 77 72 69 74 65 20 74 6f 20 61 6e 20 61  nd write to an a
1ce0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1cf0: 20 61 6e 64 20 79 6f 75 0a 63 61 6e 20 6d 6f 64   and you.can mod
1d00: 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20 6f  ify the schema o
1d10: 66 20 74 68 65 20 61 74 74 61 63 68 65 64 20 64  f the attached d
1d20: 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 69  atabase.  This i
1d30: 73 20 61 20 6e 65 77 0a 66 65 61 74 75 72 65 20  s a new.feature 
1d40: 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  of SQLite versio
1d50: 6e 20 33 2e 30 2e 20 20 49 6e 20 53 51 4c 69 74  n 3.0.  In SQLit
1d60: 65 20 32 2e 38 2c 20 73 63 68 65 6d 61 20 63 68  e 2.8, schema ch
1d70: 61 6e 67 65 73 0a 74 6f 20 61 74 74 61 63 68 65  anges.to attache
1d80: 64 20 64 61 74 61 62 61 73 65 73 20 77 65 72 65  d databases were
1d90: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 3c 2f 70   not allowed.</p
1da0: 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e 6f 74  >..<p>You cannot
1db0: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74 61   create a new ta
1dc0: 62 6c 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ble with the sam
1dd0: 65 20 6e 61 6d 65 20 61 73 20 61 20 74 61 62 6c  e name as a tabl
1de0: 65 20 69 6e 20 0a 61 6e 20 61 74 74 61 63 68 65  e in .an attache
1df0: 64 20 64 61 74 61 62 61 73 65 2c 20 62 75 74 20  d database, but 
1e00: 79 6f 75 20 63 61 6e 20 61 74 74 61 63 68 20 61  you can attach a
1e10: 20 64 61 74 61 62 61 73 65 20 77 68 69 63 68 20   database which 
1e20: 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c 65 73 20  contains.tables 
1e30: 77 68 6f 73 65 20 6e 61 6d 65 73 20 61 72 65 20  whose names are 
1e40: 64 75 70 6c 69 63 61 74 65 73 20 6f 66 20 74 61  duplicates of ta
1e50: 62 6c 65 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  bles in the main
1e60: 20 64 61 74 61 62 61 73 65 2e 20 20 49 74 20 69   database.  It i
1e70: 73 20 0a 61 6c 73 6f 20 70 65 72 6d 69 73 73 69  s .also permissi
1e80: 62 6c 65 20 74 6f 20 61 74 74 61 63 68 20 74 68  ble to attach th
1e90: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
1ea0: 66 69 6c 65 20 6d 75 6c 74 69 70 6c 65 20 74 69  file multiple ti
1eb0: 6d 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 61 62  mes.</p>..<p>Tab
1ec0: 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61 63 68  les in an attach
1ed0: 65 64 20 64 61 74 61 62 61 73 65 20 63 61 6e 20  ed database can 
1ee0: 62 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 75  be referred to u
1ef0: 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61 78 20  sing the syntax 
1f00: 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d  .<i>database-nam
1f10: 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  e.table-name</i>
1f20: 2e 20 20 49 66 20 61 6e 20 61 74 74 61 63 68 65  .  If an attache
1f30: 64 20 74 61 62 6c 65 20 64 6f 65 73 6e 27 74 20  d table doesn't 
1f40: 68 61 76 65 20 0a 61 20 64 75 70 6c 69 63 61 74  have .a duplicat
1f50: 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  e table name in 
1f60: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1f70: 65 2c 20 69 74 20 64 6f 65 73 6e 27 74 20 72 65  e, it doesn't re
1f80: 71 75 69 72 65 20 61 20 0a 64 61 74 61 62 61 73  quire a .databas
1f90: 65 20 6e 61 6d 65 20 70 72 65 66 69 78 2e 20 20  e name prefix.  
1fa0: 57 68 65 6e 20 61 20 64 61 74 61 62 61 73 65 20  When a database 
1fb0: 69 73 20 61 74 74 61 63 68 65 64 2c 20 61 6c 6c  is attached, all
1fc0: 20 6f 66 20 69 74 73 20 0a 74 61 62 6c 65 73 20   of its .tables 
1fd0: 77 68 69 63 68 20 64 6f 6e 27 74 20 68 61 76 65  which don't have
1fe0: 20 64 75 70 6c 69 63 61 74 65 20 6e 61 6d 65 73   duplicate names
1ff0: 20 62 65 63 6f 6d 65 20 74 68 65 20 64 65 66 61   become the defa
2000: 75 6c 74 20 74 61 62 6c 65 0a 6f 66 20 74 68 61  ult table.of tha
2010: 74 20 6e 61 6d 65 2e 20 20 41 6e 79 20 74 61 62  t name.  Any tab
2020: 6c 65 73 20 6f 66 20 74 68 61 74 20 6e 61 6d 65  les of that name
2030: 20 61 74 74 61 63 68 65 64 20 61 66 74 65 72 77   attached afterw
2040: 61 72 64 73 20 72 65 71 75 69 72 65 20 74 68 65  ards require the
2050: 20 74 61 62 6c 65 20 0a 70 72 65 66 69 78 2e 20   table .prefix. 
2060: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 74  If the default t
2070: 61 62 6c 65 20 6f 66 20 61 20 67 69 76 65 6e 20  able of a given 
2080: 6e 61 6d 65 20 69 73 20 64 65 74 61 63 68 65 64  name is detached
2090: 2c 20 74 68 65 6e 20 0a 74 68 65 20 6c 61 73 74  , then .the last
20a0: 20 74 61 62 6c 65 20 6f 66 20 74 68 61 74 20 6e   table of that n
20b0: 61 6d 65 20 61 74 74 61 63 68 65 64 20 62 65 63  ame attached bec
20c0: 6f 6d 65 73 20 74 68 65 20 6e 65 77 20 64 65 66  omes the new def
20d0: 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  ault.</p>..<p>.T
20e0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f  ransactions invo
20f0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61  lving multiple a
2100: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2110: 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73  s are atomic,.as
2120: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
2130: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
2140: 20 6e 6f 74 20 22 3a 6d 65 6d 6f 72 79 3a 22 2e   not ":memory:".
2150: 20 20 49 66 20 74 68 65 20 6d 61 69 6e 0a 64 61    If the main.da
2160: 74 61 62 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f  tabase is ":memo
2170: 72 79 3a 22 20 74 68 65 6e 20 0a 74 72 61 6e 73  ry:" then .trans
2180: 61 63 74 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65  actions continue
2190: 20 74 6f 20 62 65 20 61 74 6f 6d 69 63 20 77 69   to be atomic wi
21a0: 74 68 69 6e 20 65 61 63 68 20 69 6e 64 69 76 69  thin each indivi
21b0: 64 75 61 6c 0a 64 61 74 61 62 61 73 65 20 66 69  dual.database fi
21c0: 6c 65 2e 20 42 75 74 20 69 66 20 74 68 65 20 68  le. But if the h
21d0: 6f 73 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61  ost computer cra
21e0: 73 68 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64  shes in the midd
21f0: 6c 65 0a 6f 66 20 61 20 43 4f 4d 4d 49 54 20 77  le.of a COMMIT w
2200: 68 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65  here two or more
2210: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
2220: 61 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d  are updated,.som
2230: 65 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73  e of those files
2240: 20 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63   might get the c
2250: 68 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68  hanges where oth
2260: 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 0a 41  ers.might not..A
2270: 74 6f 6d 69 63 20 63 6f 6d 6d 69 74 20 6f 66 20  tomic commit of 
2280: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2290: 65 73 20 69 73 20 61 20 6e 65 77 20 66 65 61 74  es is a new feat
22a0: 75 72 65 20 6f 66 20 53 51 4c 69 74 65 20 76 65  ure of SQLite ve
22b0: 72 73 69 6f 6e 20 33 2e 30 2e 0a 49 6e 20 53 51  rsion 3.0..In SQ
22c0: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 32 2e 38  Lite version 2.8
22d0: 2c 20 61 6c 6c 20 63 6f 6d 6d 69 74 73 20 74 6f  , all commits to
22e0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
22f0: 73 65 73 20 62 65 68 61 76 65 64 20 61 73 20 69  ses behaved as i
2300: 66 0a 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f.the main datab
2310: 61 73 65 20 77 65 72 65 20 22 3a 6d 65 6d 6f 72  ase were ":memor
2320: 79 3a 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  y:"..</p>..<p>Th
2330: 65 72 65 20 69 73 20 61 20 63 6f 6d 70 69 6c 65  ere is a compile
2340: 2d 74 69 6d 65 20 6c 69 6d 69 74 20 6f 66 20 31  -time limit of 1
2350: 30 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  0 attached datab
2360: 61 73 65 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 7d  ase files.</p>.}
2370: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47 49  ...Section {BEGI
2380: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
2390: 72 61 6e 73 61 63 74 69 6f 6e 0a 0a 53 79 6e 74  ransaction..Synt
23a0: 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e  ax {sql-statemen
23b0: 74 7d 20 7b 0a 42 45 47 49 4e 20 5b 20 44 45 46  t} {.BEGIN [ DEF
23c0: 45 52 52 45 44 20 7c 20 49 4d 4d 45 44 49 41 54  ERRED | IMMEDIAT
23d0: 45 20 7c 20 45 58 43 4c 55 53 49 56 45 20 5d 20  E | EXCLUSIVE ] 
23e0: 5b 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e  [TRANSACTION [<n
23f0: 61 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78 20  ame>]].}.Syntax 
2400: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
2410: 7b 0a 45 4e 44 20 5b 54 52 41 4e 53 41 43 54 49  {.END [TRANSACTI
2420: 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53  ON [<name>]].}.S
2430: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
2440: 6d 65 6e 74 7d 20 7b 0a 43 4f 4d 4d 49 54 20 5b  ment} {.COMMIT [
2450: 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61  TRANSACTION [<na
2460: 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b  me>]].}.Syntax {
2470: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
2480: 0a 52 4f 4c 4c 42 41 43 4b 20 5b 54 52 41 4e 53  .ROLLBACK [TRANS
2490: 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d  ACTION [<name>]]
24a0: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 42 65  .}..puts {.<p>Be
24b0: 67 69 6e 6e 69 6e 67 20 69 6e 20 76 65 72 73 69  ginning in versi
24c0: 6f 6e 20 32 2e 30 2c 20 53 51 4c 69 74 65 20 73  on 2.0, SQLite s
24d0: 75 70 70 6f 72 74 73 20 74 72 61 6e 73 61 63 74  upports transact
24e0: 69 6f 6e 73 20 77 69 74 68 0a 72 6f 6c 6c 62 61  ions with.rollba
24f0: 63 6b 20 61 6e 64 20 61 74 6f 6d 69 63 20 63 6f  ck and atomic co
2500: 6d 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mmit.</p>..<p>Th
2510: 65 20 6f 70 74 69 6f 6e 61 6c 20 74 72 61 6e 73  e optional trans
2520: 61 63 74 69 6f 6e 20 6e 61 6d 65 20 69 73 20 69  action name is i
2530: 67 6e 6f 72 65 64 2e 20 53 51 4c 69 74 65 20 63  gnored. SQLite c
2540: 75 72 72 65 6e 74 6c 79 20 0a 64 6f 65 73 20 6e  urrently .does n
2550: 6f 74 20 61 6c 6c 6f 77 20 6e 65 73 74 65 64 20  ot allow nested 
2560: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 3c 2f 70  transactions.</p
2570: 3e 0a 0a 3c 70 3e 0a 4e 6f 20 63 68 61 6e 67 65  >..<p>.No change
2580: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
2590: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78   the database ex
25a0: 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72  cept within a tr
25b0: 61 6e 73 61 63 74 69 6f 6e 2e 0a 41 6e 79 20 63  ansaction..Any c
25c0: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e  ommand that chan
25d0: 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ges the database
25e0: 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79   (basically, any
25f0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68   SQL command.oth
2600: 65 72 20 74 68 61 6e 20 53 45 4c 45 43 54 29 20  er than SELECT) 
2610: 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
2620: 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ly start a trans
2630: 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73  action if.one is
2640: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20   not already in 
2650: 65 66 66 65 63 74 2e 20 20 41 75 74 6f 6d 61 74  effect.  Automat
2660: 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74  ically started t
2670: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20  ransactions.are 
2680: 63 6f 6d 6d 69 74 74 65 64 20 61 74 20 74 68 65  committed at the
2690: 20 63 6f 6e 63 6c 75 73 69 6f 6e 20 6f 66 20 74   conclusion of t
26a0: 68 65 20 63 6f 6d 6d 61 6e 64 2e 0a 3c 2f 70 3e  he command..</p>
26b0: 0a 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f  ..<p>.Transactio
26c0: 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72 74 65  ns can be starte
26d0: 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e 67  d manually using
26e0: 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d 61   the BEGIN.comma
26f0: 6e 64 2e 20 20 53 75 63 68 20 74 72 61 6e 73 61  nd.  Such transa
2700: 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70  ctions usually p
2710: 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74 68 65  ersist until the
2720: 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20   next.COMMIT or 
2730: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
2740: 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73 61 63  .  But a transac
2750: 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a  tion will also .
2760: 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68 65 20  ROLLBACK if the 
2770: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
2780: 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72 72 6f  ed or if an erro
2790: 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74 68 65  r occurs.and the
27a0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69   ROLLBACK confli
27b0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
27c0: 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65 63 69  gorithm is speci
27d0: 66 69 65 64 2e 0a 53 65 65 20 74 68 65 20 64 6f  fied..See the do
27e0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74  cumentation on t
27f0: 68 65 20 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e  he <a href="#con
2800: 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49  flict">ON CONFLI
2810: 43 54 3c 2f 61 3e 0a 63 6c 61 75 73 65 20 66 6f  CT</a>.clause fo
2820: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
2830: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
2840: 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66  he ROLLBACK.conf
2850: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
2860: 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a  algorithm..</p>.
2870: 0a 3c 70 3e 0a 49 6e 20 53 51 4c 69 74 65 20 76  .<p>.In SQLite v
2880: 65 72 73 69 6f 6e 20 33 2e 30 2e 38 20 61 6e 64  ersion 3.0.8 and
2890: 20 6c 61 74 65 72 2c 20 74 72 61 6e 73 61 63 74   later, transact
28a0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65  ions can be defe
28b0: 72 72 65 64 2c 0a 69 6d 6d 65 64 69 61 74 65 2c  rred,.immediate,
28c0: 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20   or exclusive.  
28d0: 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74  Deferred means t
28e0: 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65  hat no locks are
28f0: 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65   acquired.on the
2900: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
2910: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2920: 66 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20  first accessed. 
2930: 20 54 68 75 73 20 77 69 74 68 20 61 0a 64 65 66   Thus with a.def
2940: 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f  erred transactio
2950: 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74 61  n, the BEGIN sta
2960: 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64 6f  tement itself do
2970: 65 73 20 6e 6f 74 68 69 6e 67 2e 20 20 4c 6f 63  es nothing.  Loc
2980: 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69  ks.are not acqui
2990: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69  red until the fi
29a0: 72 73 74 20 72 65 61 64 20 6f 72 20 77 72 69 74  rst read or writ
29b0: 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  e operation.  Th
29c0: 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70 65  e first read.ope
29d0: 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20 61  ration against a
29e0: 20 64 61 74 61 62 61 73 65 20 63 72 65 61 74 65   database create
29f0: 73 20 61 20 53 48 41 52 45 44 20 6c 6f 63 6b 20  s a SHARED lock 
2a00: 61 6e 64 20 74 68 65 20 66 69 72 73 74 0a 77 72  and the first.wr
2a10: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 63 72  ite operation cr
2a20: 65 61 74 65 73 20 61 20 52 45 53 45 52 56 45 44  eates a RESERVED
2a30: 20 6c 6f 63 6b 2e 20 20 20 42 65 63 61 75 73 65   lock.   Because
2a40: 20 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e   the acquisition
2a50: 20 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66   of.locks is def
2a60: 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79  erred until they
2a70: 20 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20   are needed, it 
2a80: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2a90: 20 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20   another.thread 
2aa0: 6f 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64  or process could
2ab0: 20 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61   create a separa
2ac0: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
2ad0: 6e 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20  nd write to.the 
2ae0: 64 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74  database after t
2af0: 68 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20  he BEGIN on the 
2b00: 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68  current thread h
2b10: 61 73 20 65 78 65 63 75 74 65 64 2e 0a 49 66 20  as executed..If 
2b20: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
2b30: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
2b40: 65 6e 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b  en RESERVED lock
2b50: 73 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f  s.are acquired o
2b60: 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20  n all databases 
2b70: 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42  as soon as the B
2b80: 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a  EGIN command is.
2b90: 65 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75  executed, withou
2ba0: 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68  t waiting for th
2bb0: 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65  e.database to be
2bc0: 20 75 73 65 64 2e 20 20 41 66 74 65 72 20 61 20   used.  After a 
2bd0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
2be0: 20 79 6f 75 20 61 72 65 20 67 75 61 72 61 6e 74   you are guarant
2bf0: 65 65 64 20 74 68 61 74 0a 6e 6f 20 6f 74 68 65  eed that.no othe
2c00: 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r thread or proc
2c10: 65 73 73 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  ess will be able
2c20: 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65   to write to the
2c30: 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20   database or.do 
2c40: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
2c50: 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55  E or BEGIN EXCLU
2c60: 53 49 56 45 2e 20 20 4f 74 68 65 72 20 70 72 6f  SIVE.  Other pro
2c70: 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69  cesses can conti
2c80: 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d  nue.to read from
2c90: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 68   the database, h
2ca0: 6f 77 65 76 65 72 2e 20 20 41 6e 20 65 78 63 6c  owever.  An excl
2cb0: 75 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f  usive transactio
2cc0: 6e 20 63 61 75 73 65 73 0a 45 58 43 4c 55 53 49  n causes.EXCLUSI
2cd0: 56 45 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61  VE locks to be a
2ce0: 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64  cquired on all d
2cf0: 61 74 61 62 61 73 65 73 2e 20 20 41 66 74 65 72  atabases.  After
2d00: 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49   a BEGIN.EXCLUSI
2d10: 56 45 2c 20 79 6f 75 20 61 72 65 20 67 75 61 72  VE, you are guar
2d20: 61 6e 74 65 65 64 20 74 68 61 74 20 6e 6f 20 6f  anteed that no o
2d30: 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70  ther thread or p
2d40: 72 6f 63 65 73 73 20 77 69 6c 6c 0a 62 65 20 61  rocess will.be a
2d50: 62 6c 65 20 74 6f 20 72 65 61 64 20 6f 72 20 77  ble to read or w
2d60: 72 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73  rite the databas
2d70: 65 20 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e  e until the tran
2d80: 73 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c  saction is.compl
2d90: 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41  ete..</p>..<p>.A
2da0: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
2db0: 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 53  the meaning of S
2dc0: 48 41 52 45 44 2c 20 52 45 53 45 52 56 45 44 2c  HARED, RESERVED,
2dd0: 20 61 6e 64 20 45 58 43 4c 55 53 49 56 45 20 6c   and EXCLUSIVE l
2de0: 6f 63 6b 73 0a 69 73 20 61 76 61 69 6c 61 62 6c  ocks.is availabl
2df0: 65 20 3c 61 20 68 72 65 66 3d 22 6c 6f 63 6b 69  e <a href="locki
2e00: 6e 67 76 33 2e 68 74 6d 6c 22 3e 73 65 70 61 72  ngv3.html">separ
2e10: 61 74 65 6c 79 3c 2f 61 3e 2e 0a 3c 2f 70 3e 0a  ately</a>..</p>.
2e20: 0a 3c 70 3e 0a 54 68 65 20 64 65 66 61 75 6c 74  .<p>.The default
2e30: 20 62 65 68 61 76 69 6f 72 20 66 6f 72 20 53 51   behavior for SQ
2e40: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 30  Lite version 3.0
2e50: 2e 38 20 69 73 20 61 0a 64 65 66 65 72 72 65 64  .8 is a.deferred
2e60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 46   transaction.  F
2e70: 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  or SQLite versio
2e80: 6e 20 33 2e 30 2e 30 20 74 68 72 6f 75 67 68 20  n 3.0.0 through 
2e90: 33 2e 30 2e 37 2c 0a 64 65 66 65 72 72 65 64 20  3.0.7,.deferred 
2ea0: 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b 69 6e 64  is the only kind
2eb0: 20 6f 66 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   of transaction 
2ec0: 61 76 61 69 6c 61 62 6c 65 2e 20 20 46 6f 72 20  available.  For 
2ed0: 53 51 4c 69 74 65 0a 76 65 72 73 69 6f 6e 20 32  SQLite.version 2
2ee0: 2e 38 20 61 6e 64 20 65 61 72 6c 69 65 72 2c 20  .8 and earlier, 
2ef0: 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  all transactions
2f00: 20 61 72 65 20 65 78 63 6c 75 73 69 76 65 2e 0a   are exclusive..
2f10: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 43 4f  </p>..<p>.The CO
2f20: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  MMIT command doe
2f30: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 70  s not actually p
2f40: 65 72 66 6f 72 6d 20 61 20 63 6f 6d 6d 69 74 20  erform a commit 
2f50: 75 6e 74 69 6c 20 61 6c 6c 0a 70 65 6e 64 69 6e  until all.pendin
2f60: 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 20 66  g SQL commands f
2f70: 69 6e 69 73 68 2e 20 20 54 68 75 73 20 69 66 20  inish.  Thus if 
2f80: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 53 45 4c 45  two or more SELE
2f90: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72  CT statements.ar
2fa0: 65 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  e in the middle 
2fb0: 6f 66 20 70 72 6f 63 65 73 73 69 6e 67 20 61 6e  of processing an
2fc0: 64 20 61 20 43 4f 4d 4d 49 54 20 69 73 20 65 78  d a COMMIT is ex
2fd0: 65 63 75 74 65 64 2c 20 74 68 65 20 63 6f 6d 6d  ecuted, the comm
2fe0: 69 74 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  it.will not actu
2ff0: 61 6c 6c 79 20 6f 63 63 75 72 20 75 6e 74 69 6c  ally occur until
3000: 20 61 6c 6c 20 53 45 4c 45 43 54 20 73 74 61 74   all SELECT stat
3010: 65 6d 65 6e 74 73 20 66 69 6e 69 73 68 2e 0a 3c  ements finish..<
3020: 2f 70 3e 0a 0a 3c 70 3e 0a 41 6e 20 61 74 74 65  /p>..<p>.An atte
3030: 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43  mpt to execute C
3040: 4f 4d 4d 49 54 20 6d 69 67 68 74 20 72 65 73 75  OMMIT might resu
3050: 6c 74 20 69 6e 20 61 6e 20 53 51 4c 49 54 45 5f  lt in an SQLITE_
3060: 42 55 53 59 20 72 65 74 75 72 6e 20 63 6f 64 65  BUSY return code
3070: 2e 0a 54 68 69 73 20 69 6e 64 69 63 61 74 65 73  ..This indicates
3080: 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 74 68   that another th
3090: 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20  read or process 
30a0: 68 61 64 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  had a read lock 
30b0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  on the database.
30c0: 74 68 61 74 20 70 72 65 76 65 6e 74 65 64 20 74  that prevented t
30d0: 68 65 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d  he database from
30e0: 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20   being updated. 
30f0: 20 57 68 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69   When COMMIT fai
3100: 6c 73 20 69 6e 20 74 68 69 73 0a 77 61 79 2c 20  ls in this.way, 
3110: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
3120: 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 20 61  remains active a
3130: 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61  nd the COMMIT ca
3140: 6e 20 62 65 20 72 65 74 72 69 65 64 20 6c 61 74  n be retried lat
3150: 65 72 0a 61 66 74 65 72 20 74 68 65 20 72 65 61  er.after the rea
3160: 64 65 72 20 68 61 73 20 68 61 64 20 61 20 63 68  der has had a ch
3170: 61 6e 63 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c  ance to clear..<
3180: 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20  /p>.}...Section 
3190: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 0a  comment comment.
31a0: 0a 53 79 6e 74 61 78 20 7b 63 6f 6d 6d 65 6e 74  .Syntax {comment
31b0: 7d 20 7b 3c 53 51 4c 2d 63 6f 6d 6d 65 6e 74 3e  } {<SQL-comment>
31c0: 20 7c 20 3c 43 2d 63 6f 6d 6d 65 6e 74 3e 0a 7d   | <C-comment>.}
31d0: 20 7b 53 51 4c 2d 63 6f 6d 6d 65 6e 74 7d 20 7b   {SQL-comment} {
31e0: 2d 2d 20 3c 73 69 6e 67 6c 65 2d 6c 69 6e 65 3e  -- <single-line>
31f0: 0a 7d 20 7b 43 2d 63 6f 6d 6d 65 6e 74 7d 20 7b  .} {C-comment} {
3200: 2f 53 54 41 52 20 3c 6d 75 6c 74 69 70 6c 65 2d  /STAR <multiple-
3210: 6c 69 6e 65 73 3e 20 5b 53 54 41 52 2f 5d 0a 7d  lines> [STAR/].}
3220: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 20 43 6f 6d  ..puts {.<p> Com
3230: 6d 65 6e 74 73 20 61 72 65 6e 27 74 20 53 51 4c  ments aren't SQL
3240: 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63   commands, but c
3250: 61 6e 20 6f 63 63 75 72 20 69 6e 20 53 51 4c 20  an occur in SQL 
3260: 71 75 65 72 69 65 73 2e 20 54 68 65 79 20 61 72  queries. They ar
3270: 65 20 0a 74 72 65 61 74 65 64 20 61 73 20 77 68  e .treated as wh
3280: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
3290: 70 61 72 73 65 72 2e 20 20 54 68 65 79 20 63 61  parser.  They ca
32a0: 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65 72 65  n begin anywhere
32b0: 20 77 68 69 74 65 73 70 61 63 65 20 0a 63 61 6e   whitespace .can
32c0: 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63 6c 75   be found, inclu
32d0: 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72  ding inside expr
32e0: 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73 70 61  essions that spa
32f0: 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73  n multiple lines
3300: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 53 51 4c 20  ..</p>..<p> SQL 
3310: 63 6f 6d 6d 65 6e 74 73 20 6f 6e 6c 79 20 65 78  comments only ex
3320: 74 65 6e 64 20 74 6f 20 74 68 65 20 65 6e 64 20  tend to the end 
3330: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c  of the current l
3340: 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 43 20  ine.</p>..<p> C 
3350: 63 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 73 70 61  comments can spa
3360: 6e 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20  n any number of 
3370: 6c 69 6e 65 73 2e 20 20 49 66 20 74 68 65 72 65  lines.  If there
3380: 20 69 73 20 6e 6f 20 74 65 72 6d 69 6e 61 74 69   is no terminati
3390: 6e 67 0a 64 65 6c 69 6d 69 74 65 72 2c 20 74 68  ng.delimiter, th
33a0: 65 79 20 65 78 74 65 6e 64 20 74 6f 20 74 68 65  ey extend to the
33b0: 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 70 75   end of the inpu
33c0: 74 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  t.  This is not 
33d0: 74 72 65 61 74 65 64 20 61 73 0a 61 6e 20 65 72  treated as.an er
33e0: 72 6f 72 2e 20 20 41 20 6e 65 77 20 53 51 4c 20  ror.  A new SQL 
33f0: 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65  statement can be
3400: 67 69 6e 20 6f 6e 20 61 20 6c 69 6e 65 20 61 66  gin on a line af
3410: 74 65 72 20 61 20 6d 75 6c 74 69 6c 69 6e 65 0a  ter a multiline.
3420: 63 6f 6d 6d 65 6e 74 20 65 6e 64 73 2e 20 20 43  comment ends.  C
3430: 20 63 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65   comments can be
3440: 20 65 6d 62 65 64 64 65 64 20 61 6e 79 77 68 65   embedded anywhe
3450: 72 65 20 77 68 69 74 65 73 70 61 63 65 20 63 61  re whitespace ca
3460: 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69  n occur,.includi
3470: 6e 67 20 69 6e 73 69 64 65 20 65 78 70 72 65 73  ng inside expres
3480: 73 69 6f 6e 73 2c 20 61 6e 64 20 69 6e 20 74 68  sions, and in th
3490: 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74 68 65  e middle of othe
34a0: 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
34b0: 2e 0a 43 20 63 6f 6d 6d 65 6e 74 73 20 64 6f 20  ..C comments do 
34c0: 6e 6f 74 20 6e 65 73 74 2e 20 20 53 51 4c 20 63  not nest.  SQL c
34d0: 6f 6d 6d 65 6e 74 73 20 69 6e 73 69 64 65 20 61  omments inside a
34e0: 20 43 20 63 6f 6d 6d 65 6e 74 20 77 69 6c 6c 20   C comment will 
34f0: 62 65 20 69 67 6e 6f 72 65 64 2e 0a 3c 2f 70 3e  be ignored..</p>
3500: 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 43 4f 50  .}...Section COP
3510: 59 20 63 6f 70 79 0a 0a 53 79 6e 74 61 78 20 7b  Y copy..Syntax {
3520: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
3530: 0a 43 4f 50 59 20 5b 20 4f 52 20 3c 63 6f 6e 66  .COPY [ OR <conf
3540: 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 20  lict-algorithm> 
3550: 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  ] [<database-nam
3560: 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d  e> .] <table-nam
3570: 65 3e 20 46 52 4f 4d 20 3c 66 69 6c 65 6e 61 6d  e> FROM <filenam
3580: 65 3e 0a 5b 20 55 53 49 4e 47 20 44 45 4c 49 4d  e>.[ USING DELIM
3590: 49 54 45 52 53 20 3c 64 65 6c 69 6d 3e 20 5d 0a  ITERS <delim> ].
35a0: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65  }..puts {.<p>The
35b0: 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 20 69 73   COPY command is
35c0: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 53 51   available in SQ
35d0: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 32 2e 38  Lite version 2.8
35e0: 20 61 6e 64 20 65 61 72 6c 69 65 72 2e 0a 54 68   and earlier..Th
35f0: 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64 20 68  e COPY command h
3600: 61 73 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20  as been removed 
3610: 66 72 6f 6d 20 53 51 4c 69 74 65 20 76 65 72 73  from SQLite vers
3620: 69 6f 6e 20 33 2e 30 20 64 75 65 20 74 6f 0a 63  ion 3.0 due to.c
3630: 6f 6d 70 6c 69 63 61 74 69 6f 6e 73 20 69 6e 20  omplications in 
3640: 74 72 79 69 6e 67 20 74 6f 20 73 75 70 70 6f 72  trying to suppor
3650: 74 20 69 74 20 69 6e 20 61 20 6d 69 78 65 64 20  t it in a mixed 
3660: 55 54 46 2d 38 2f 31 36 20 65 6e 76 69 72 6f 6e  UTF-8/16 environ
3670: 6d 65 6e 74 2e 0a 49 6e 20 76 65 72 73 69 6f 6e  ment..In version
3680: 20 33 2e 30 2c 20 74 68 65 20 3c 61 20 68 72 65   3.0, the <a hre
3690: 66 3d 22 73 71 6c 69 74 65 2e 68 74 6d 6c 22 3e  f="sqlite.html">
36a0: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
36b0: 6c 6c 3c 2f 61 3e 0a 63 6f 6e 74 61 69 6e 73 20  ll</a>.contains 
36c0: 61 20 6e 65 77 20 63 6f 6d 6d 61 6e 64 20 3c 62  a new command <b
36d0: 3e 2e 69 6d 70 6f 72 74 3c 2f 62 3e 20 74 68 61  >.import</b> tha
36e0: 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 73  t can be used as
36f0: 20 61 20 73 75 62 73 74 69 74 75 74 65 0a 66 6f   a substitute.fo
3700: 72 20 43 4f 50 59 2e 0a 3c 2f 70 3e 0a 0a 3c 70  r COPY..</p>..<p
3710: 3e 54 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e  >The COPY comman
3720: 64 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69 6f  d is an extensio
3730: 6e 20 75 73 65 64 20 74 6f 20 6c 6f 61 64 20 6c  n used to load l
3740: 61 72 67 65 20 61 6d 6f 75 6e 74 73 20 6f 66 0a  arge amounts of.
3750: 64 61 74 61 20 69 6e 74 6f 20 61 20 74 61 62 6c  data into a tabl
3760: 65 2e 20 20 49 74 20 69 73 20 6d 6f 64 65 6c 65  e.  It is modele
3770: 64 20 61 66 74 65 72 20 61 20 73 69 6d 69 6c 61  d after a simila
3780: 72 20 63 6f 6d 6d 61 6e 64 20 66 6f 75 6e 64 0a  r command found.
3790: 69 6e 20 50 6f 73 74 67 72 65 53 51 4c 2e 20 20  in PostgreSQL.  
37a0: 49 6e 20 66 61 63 74 2c 20 74 68 65 20 53 51 4c  In fact, the SQL
37b0: 69 74 65 20 43 4f 50 59 20 63 6f 6d 6d 61 6e 64  ite COPY command
37c0: 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
37d0: 0a 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20  .designed to be 
37e0: 61 62 6c 65 20 74 6f 20 72 65 61 64 20 74 68 65  able to read the
37f0: 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65 20 50   output of the P
3800: 6f 73 74 67 72 65 53 51 4c 20 64 75 6d 70 0a 75  ostgreSQL dump.u
3810: 74 69 6c 69 74 79 20 3c 62 3e 70 67 5f 64 75 6d  tility <b>pg_dum
3820: 70 3c 2f 62 3e 20 73 6f 20 74 68 61 74 20 64 61  p</b> so that da
3830: 74 61 20 63 61 6e 20 62 65 20 65 61 73 69 6c 79  ta can be easily
3840: 20 74 72 61 6e 73 66 65 72 72 65 64 20 66 72 6f   transferred fro
3850: 6d 0a 50 6f 73 74 67 72 65 53 51 4c 20 69 6e 74  m.PostgreSQL int
3860: 6f 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  o SQLite.</p>..<
3870: 70 3e 54 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  p>The table-name
3880: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
3890: 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
38a0: 65 20 77 68 69 63 68 20 69 73 20 74 6f 0a 62 65  e which is to.be
38b0: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 64 61 74   filled with dat
38c0: 61 2e 20 20 54 68 65 20 66 69 6c 65 6e 61 6d 65  a.  The filename
38d0: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
38e0: 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 0a  identifier that.
38f0: 6e 61 6d 65 73 20 61 20 66 69 6c 65 20 66 72 6f  names a file fro
3900: 6d 20 77 68 69 63 68 20 64 61 74 61 20 77 69 6c  m which data wil
3910: 6c 20 62 65 20 72 65 61 64 2e 20 20 54 68 65 20  l be read.  The 
3920: 66 69 6c 65 6e 61 6d 65 20 63 61 6e 20 62 65 0a  filename can be.
3930: 74 68 65 20 3c 62 3e 53 54 44 49 4e 3c 2f 62 3e  the <b>STDIN</b>
3940: 20 74 6f 20 72 65 61 64 20 64 61 74 61 20 66 72   to read data fr
3950: 6f 6d 20 73 74 61 6e 64 61 72 64 20 69 6e 70 75  om standard inpu
3960: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  t.</p>..<p>Each 
3970: 6c 69 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75  line of the inpu
3980: 74 20 66 69 6c 65 20 69 73 20 63 6f 6e 76 65 72  t file is conver
3990: 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c  ted into a singl
39a0: 65 20 72 65 63 6f 72 64 0a 69 6e 20 74 68 65 20  e record.in the 
39b0: 74 61 62 6c 65 2e 20 20 43 6f 6c 75 6d 6e 73 20  table.  Columns 
39c0: 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62 79  are separated by
39d0: 20 74 61 62 73 2e 20 20 49 66 20 61 20 74 61 62   tabs.  If a tab
39e0: 20 6f 63 63 75 72 73 20 61 73 0a 64 61 74 61 20   occurs as.data 
39f0: 77 69 74 68 69 6e 20 61 20 63 6f 6c 75 6d 6e 2c  within a column,
3a00: 20 74 68 65 6e 20 74 68 61 74 20 74 61 62 20 69   then that tab i
3a10: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
3a20: 62 61 73 6b 73 6c 61 73 68 20 22 5c 22 0a 63 68  baskslash "\".ch
3a30: 61 72 61 63 74 65 72 2e 20 20 41 20 62 61 73 6b  aracter.  A bask
3a40: 73 6c 61 73 68 20 69 6e 20 74 68 65 20 64 61 74  slash in the dat
3a50: 61 20 61 70 70 65 61 72 73 20 61 73 20 74 77 6f  a appears as two
3a60: 20 62 61 63 6b 73 6c 61 73 68 65 73 20 69 6e 0a   backslashes in.
3a70: 61 20 72 6f 77 2e 20 20 54 68 65 20 6f 70 74 69  a row.  The opti
3a80: 6f 6e 61 6c 20 55 53 49 4e 47 20 44 45 4c 49 4d  onal USING DELIM
3a90: 49 54 45 52 53 20 63 6c 61 75 73 65 20 63 61 6e  ITERS clause can
3aa0: 20 73 70 65 63 69 66 79 20 61 20 64 65 6c 69 6d   specify a delim
3ab0: 69 74 65 72 0a 6f 74 68 65 72 20 74 68 61 6e 20  iter.other than 
3ac0: 74 61 62 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  tab.</p>..<p>If 
3ad0: 61 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73 69 73 74  a column consist
3ae0: 73 20 6f 66 20 74 68 65 20 63 68 61 72 61 63 74  s of the charact
3af0: 65 72 20 22 5c 4e 22 2c 20 74 68 61 74 20 63 6f  er "\N", that co
3b00: 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65 64 0a 77  lumn is filled.w
3b10: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 4e 55  ith the value NU
3b20: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  LL.</p>..<p>The 
3b30: 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63  optional conflic
3b40: 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20  t-clause allows 
3b50: 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69 6f  the specificatio
3b60: 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74  n of an alternat
3b70: 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  ive.constraint c
3b80: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
3b90: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  on algorithm to 
3ba0: 75 73 65 20 66 6f 72 20 74 68 69 73 20 6f 6e 65  use for this one
3bb0: 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68   command..See th
3bc0: 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64  e section titled
3bd0: 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c  .<a href="#confl
3be0: 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54  ict">ON CONFLICT
3bf0: 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69 74 69 6f  </a> for additio
3c00: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
3c10: 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68  </p>..<p>When th
3c20: 65 20 69 6e 70 75 74 20 64 61 74 61 20 73 6f 75  e input data sou
3c30: 72 63 65 20 69 73 20 53 54 44 49 4e 2c 20 74 68  rce is STDIN, th
3c40: 65 20 69 6e 70 75 74 20 63 61 6e 20 62 65 20 74  e input can be t
3c50: 65 72 6d 69 6e 61 74 65 64 0a 62 79 20 61 20 6c  erminated.by a l
3c60: 69 6e 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ine that contain
3c70: 73 20 6f 6e 6c 79 20 61 20 62 61 73 6b 73 6c 61  s only a basksla
3c80: 73 68 20 61 6e 64 20 61 20 64 6f 74 3a 7d 0a 70  sh and a dot:}.p
3c90: 75 74 73 20 22 5c 22 5b 4f 70 65 72 61 74 6f 72  uts "\"[Operator
3ca0: 20 5c 5c 2e 5d 5c 22 2e 3c 2f 70 3e 22 0a 0a 0a   \\.]\".</p>"...
3cb0: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
3cc0: 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e 64  INDEX} createind
3cd0: 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  ex..Syntax {sql-
3ce0: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 52 45  statement} {.CRE
3cf0: 41 54 45 20 5b 55 4e 49 51 55 45 5d 20 49 4e 44  ATE [UNIQUE] IND
3d00: 45 58 20 5b 49 46 20 4e 4f 54 20 45 58 49 53 54  EX [IF NOT EXIST
3d10: 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  S] [<database-na
3d20: 6d 65 3e 20 2e 5d 20 3c 69 6e 64 65 78 2d 6e 61  me> .] <index-na
3d30: 6d 65 3e 20 0a 4f 4e 20 3c 74 61 62 6c 65 2d 6e  me> .ON <table-n
3d40: 61 6d 65 3e 20 28 20 3c 63 6f 6c 75 6d 6e 2d 6e  ame> ( <column-n
3d50: 61 6d 65 3e 20 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d  ame> [, <column-
3d60: 6e 61 6d 65 3e 5d 2a 20 29 0a 7d 20 7b 63 6f 6c  name>]* ).} {col
3d70: 75 6d 6e 2d 6e 61 6d 65 7d 20 7b 0a 3c 6e 61 6d  umn-name} {.<nam
3d80: 65 3e 20 5b 20 43 4f 4c 4c 41 54 45 20 3c 63 6f  e> [ COLLATE <co
3d90: 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 5d 20 5b  llation-name>] [
3da0: 20 41 53 43 20 7c 20 44 45 53 43 20 5d 0a 7d 0a   ASC | DESC ].}.
3db0: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 43  .puts {.<p>The C
3dc0: 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d  REATE INDEX comm
3dd0: 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  and consists of 
3de0: 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52  the keywords "CR
3df0: 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c  EATE INDEX" foll
3e00: 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61 6d 65  owed.by the name
3e10: 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e 64 65   of the new inde
3e20: 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22  x, the keyword "
3e30: 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66  ON", the name of
3e40: 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a 63 72   a previously.cr
3e50: 65 61 74 65 64 20 74 61 62 6c 65 20 74 68 61 74  eated table that
3e60: 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65 78 65   is to be indexe
3e70: 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e 74 68  d, and a parenth
3e80: 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e  esized list of n
3e90: 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20  ames of.columns 
3ea0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  in the table tha
3eb0: 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74  t are used for t
3ec0: 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 45 61  he index key..Ea
3ed0: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63  ch column name c
3ee0: 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  an be followed b
3ef0: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41 53  y one of the "AS
3f00: 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65 79  C" or "DESC" key
3f10: 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61 74  words.to indicat
3f20: 65 20 73 6f 72 74 20 6f 72 64 65 72 2c 20 62 75  e sort order, bu
3f30: 74 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72  t the sort order
3f40: 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20 74   is ignored in t
3f50: 68 65 20 63 75 72 72 65 6e 74 0a 69 6d 70 6c 65  he current.imple
3f60: 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 53 6f 72 74  mentation.  Sort
3f70: 69 6e 67 20 69 73 20 61 6c 77 61 79 73 20 64 6f  ing is always do
3f80: 6e 65 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  ne in ascending 
3f90: 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  order.</p>..<p>T
3fa0: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
3fb0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68  e following each
3fc0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66   column name def
3fd0: 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
3fe0: 0a 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66  .sequence used f
3ff0: 6f 72 20 74 65 78 74 20 65 6e 74 69 72 65 73 20  or text entires 
4000: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20  in that column. 
4010: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
4020: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
4030: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
4040: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
4050: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
4060: 6e 20 69 6e 20 74 68 65 0a 43 52 45 41 54 45 20  n in the.CREATE 
4070: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
4080: 20 20 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61    Or if no colla
4090: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
40a0: 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e   otherwise defin
40b0: 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e  ed,.the built-in
40c0: 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
40d0: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
40e0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72  ed.</p>..<p>Ther
40f0: 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61  e are no arbitra
4100: 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65  ry limits on the
4110: 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63   number of indic
4120: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61  es that can be.a
4130: 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e  ttached to a sin
4140: 67 6c 65 20 74 61 62 6c 65 2c 20 6e 6f 72 20 6f  gle table, nor o
4150: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
4160: 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e  columns in an in
4170: 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  dex.</p>..<p>If 
4180: 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f  the UNIQUE keywo
4190: 72 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65  rd appears betwe
41a0: 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e  en CREATE and IN
41b0: 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61  DEX then duplica
41c0: 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te.index entries
41d0: 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
41e0: 2e 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74  .  Any attempt t
41f0: 6f 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69  o insert a dupli
4200: 63 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20  cate entry.will 
4210: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72  result in an err
4220: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  or.</p>..<p>The 
4230: 65 78 61 63 74 20 74 65 78 74 0a 6f 66 20 65 61  exact text.of ea
4240: 63 68 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ch CREATE INDEX 
4250: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f  statement is sto
4260: 72 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73 71  red in the <b>sq
4270: 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a  lite_master</b>.
4280: 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d  or <b>sqlite_tem
4290: 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62  p_master</b> tab
42a0: 6c 65 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  le, depending on
42b0: 20 77 68 65 74 68 65 72 20 74 68 65 20 74 61 62   whether the tab
42c0: 6c 65 0a 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le.being indexed
42d0: 20 69 73 20 74 65 6d 70 6f 72 61 72 79 2e 20 20   is temporary.  
42e0: 45 76 65 72 79 20 74 69 6d 65 20 74 68 65 20 64  Every time the d
42f0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
4300: 64 2c 0a 61 6c 6c 20 43 52 45 41 54 45 20 49 4e  d,.all CREATE IN
4310: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  DEX statements.a
4320: 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  re read from the
4330: 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65   <b>sqlite_maste
4340: 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e 64 20  r</b> table and 
4350: 75 73 65 64 20 74 6f 20 72 65 67 65 6e 65 72 61  used to regenera
4360: 74 65 0a 53 51 4c 69 74 65 27 73 20 69 6e 74 65  te.SQLite's inte
4370: 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
4380: 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78  ion of the index
4390: 20 6c 61 79 6f 75 74 2e 3c 2f 70 3e 0a 0a 3c 70   layout.</p>..<p
43a0: 3e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  >If the optional
43b0: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
43c0: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
43d0: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
43e0: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
43f0: 20 6e 61 6d 65 20 61 6c 65 61 64 79 20 65 78 69   name aleady exi
4400: 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63  sts, then this c
4410: 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61  ommand becomes a
4420: 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e   no-op.</p>..<p>
4430: 49 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f  Indexes are remo
4440: 76 65 64 20 77 69 74 68 20 74 68 65 20 3c 61 20  ved with the <a 
4450: 68 72 65 66 3d 22 23 64 72 6f 70 69 6e 64 65 78  href="#dropindex
4460: 22 3e 44 52 4f 50 20 49 4e 44 45 58 3c 2f 61 3e  ">DROP INDEX</a>
4470: 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 7d   .command.</p>.}
4480: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ...Section {CREA
4490: 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  TE TABLE} {creat
44a0: 65 74 61 62 6c 65 7d 0a 0a 53 79 6e 74 61 78 20  etable}..Syntax 
44b0: 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a  {sql-command} {.
44c0: 43 52 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54  CREATE [TEMP | T
44d0: 45 4d 50 4f 52 41 52 59 5d 20 54 41 42 4c 45 20  EMPORARY] TABLE 
44e0: 5b 49 46 20 4e 4f 54 20 45 58 49 53 54 53 5d 20  [IF NOT EXISTS] 
44f0: 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e  [<database-name>
4500: 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e   .] <table-name>
4510: 20 28 0a 20 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66   (.  <column-def
4520: 3e 20 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66  > [, <column-def
4530: 3e 5d 2a 0a 20 20 5b 2c 20 3c 63 6f 6e 73 74 72  >]*.  [, <constr
4540: 61 69 6e 74 3e 5d 2a 0a 29 0a 7d 20 7b 73 71 6c  aint>]*.).} {sql
4550: 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43 52 45 41  -command} {.CREA
4560: 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f  TE [TEMP | TEMPO
4570: 52 41 52 59 5d 20 54 41 42 4c 45 20 5b 3c 64 61  RARY] TABLE [<da
4580: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 2e 5d 20 3c  tabase-name>.] <
4590: 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 41 53 20 3c  table-name> AS <
45a0: 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74  select-statement
45b0: 3e 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 64 65 66 7d  >.} {column-def}
45c0: 20 7b 0a 3c 6e 61 6d 65 3e 20 5b 3c 74 79 70 65   {.<name> [<type
45d0: 3e 5d 20 5b 5b 43 4f 4e 53 54 52 41 49 4e 54 20  >] [[CONSTRAINT 
45e0: 3c 6e 61 6d 65 3e 5d 20 3c 63 6f 6c 75 6d 6e 2d  <name>] <column-
45f0: 63 6f 6e 73 74 72 61 69 6e 74 3e 5d 2a 0a 7d 20  constraint>]*.} 
4600: 7b 74 79 70 65 7d 20 7b 0a 3c 74 79 70 65 6e 61  {type} {.<typena
4610: 6d 65 3e 20 7c 0a 3c 74 79 70 65 6e 61 6d 65 3e  me> |.<typename>
4620: 20 28 20 3c 6e 75 6d 62 65 72 3e 20 29 20 7c 0a   ( <number> ) |.
4630: 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20 3c 6e 75  <typename> ( <nu
4640: 6d 62 65 72 3e 20 2c 20 3c 6e 75 6d 62 65 72 3e  mber> , <number>
4650: 20 29 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d 63 6f 6e   ).} {column-con
4660: 73 74 72 61 69 6e 74 7d 20 7b 0a 4e 4f 54 20 4e  straint} {.NOT N
4670: 55 4c 4c 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d  ULL [ <conflict-
4680: 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 50 52 49 4d  clause> ] |.PRIM
4690: 41 52 59 20 4b 45 59 20 5b 3c 73 6f 72 74 2d 6f  ARY KEY [<sort-o
46a0: 72 64 65 72 3e 5d 20 5b 20 3c 63 6f 6e 66 6c 69  rder>] [ <confli
46b0: 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 5b 41 55  ct-clause> ] [AU
46c0: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20 7c 0a 55  TOINCREMENT] |.U
46d0: 4e 49 51 55 45 20 5b 20 3c 63 6f 6e 66 6c 69 63  NIQUE [ <conflic
46e0: 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 43 48  t-clause> ] |.CH
46f0: 45 43 4b 20 28 20 3c 65 78 70 72 3e 20 29 20 7c  ECK ( <expr> ) |
4700: 0a 44 45 46 41 55 4c 54 20 3c 76 61 6c 75 65 3e  .DEFAULT <value>
4710: 20 7c 0a 43 4f 4c 4c 41 54 45 20 3c 63 6f 6c 6c   |.COLLATE <coll
4720: 61 74 69 6f 6e 2d 6e 61 6d 65 3e 0a 7d 20 7b 63  ation-name>.} {c
4730: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0a 50 52 49  onstraint} {.PRI
4740: 4d 41 52 59 20 4b 45 59 20 28 20 3c 63 6f 6c 75  MARY KEY ( <colu
4750: 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b 20 3c 63 6f  mn-list> ) [ <co
4760: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d  nflict-clause> ]
4770: 20 7c 0a 55 4e 49 51 55 45 20 28 20 3c 63 6f 6c   |.UNIQUE ( <col
4780: 75 6d 6e 2d 6c 69 73 74 3e 20 29 20 5b 20 3c 63  umn-list> ) [ <c
4790: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20  onflict-clause> 
47a0: 5d 20 7c 0a 43 48 45 43 4b 20 28 20 3c 65 78 70  ] |.CHECK ( <exp
47b0: 72 3e 20 29 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74  r> ).} {conflict
47c0: 2d 63 6c 61 75 73 65 7d 20 7b 0a 4f 4e 20 43 4f  -clause} {.ON CO
47d0: 4e 46 4c 49 43 54 20 3c 63 6f 6e 66 6c 69 63 74  NFLICT <conflict
47e0: 2d 61 6c 67 6f 72 69 74 68 6d 3e 0a 7d 0a 0a 70  -algorithm>.}..p
47f0: 75 74 73 20 7b 0a 3c 70 3e 41 20 43 52 45 41 54  uts {.<p>A CREAT
4800: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
4810: 74 20 69 73 20 62 61 73 69 63 61 6c 6c 79 20 74  t is basically t
4820: 68 65 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45  he keywords "CRE
4830: 41 54 45 20 54 41 42 4c 45 22 0a 66 6f 6c 6c 6f  ATE TABLE".follo
4840: 77 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20  wed by the name 
4850: 6f 66 20 61 20 6e 65 77 20 74 61 62 6c 65 20 61  of a new table a
4860: 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  nd a parenthesiz
4870: 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  ed list of colum
4880: 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 73 20 61 6e  n.definitions an
4890: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  d constraints.  
48a0: 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 63  The table name c
48b0: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  an be either an 
48c0: 69 64 65 6e 74 69 66 69 65 72 0a 6f 72 20 61 20  identifier.or a 
48d0: 73 74 72 69 6e 67 2e 20 20 54 61 62 6c 65 73 20  string.  Tables 
48e0: 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67 69 6e  names that begin
48f0: 20 77 69 74 68 20 22 3c 62 3e 73 71 6c 69 74 65   with "<b>sqlite
4900: 5f 3c 2f 62 3e 22 20 61 72 65 20 72 65 73 65 72  _</b>" are reser
4910: 76 65 64 0a 66 6f 72 20 75 73 65 20 62 79 20 74  ved.for use by t
4920: 68 65 20 65 6e 67 69 6e 65 2e 3c 2f 70 3e 0a 0a  he engine.</p>..
4930: 3c 70 3e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  <p>Each column d
4940: 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 74 68 65  efinition is the
4950: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   name of the col
4960: 75 6d 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  umn followed by 
4970: 74 68 65 0a 64 61 74 61 74 79 70 65 20 66 6f 72  the.datatype for
4980: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 74 68   that column, th
4990: 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  en one or more o
49a0: 70 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 20 63  ptional column c
49b0: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 54 68 65 20  onstraints..The 
49c0: 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
49d0: 20 63 6f 6c 75 6d 6e 20 64 6f 65 73 20 6e 6f 74   column does not
49e0: 20 72 65 73 74 72 69 63 74 20 77 68 61 74 20 64   restrict what d
49f0: 61 74 61 20 6d 61 79 20 62 65 20 70 75 74 0a 69  ata may be put.i
4a00: 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 53  n that column..S
4a10: 65 65 20 3c 61 20 68 72 65 66 3d 22 64 61 74 61  ee <a href="data
4a20: 74 79 70 65 33 2e 68 74 6d 6c 22 3e 44 61 74 61  type3.html">Data
4a30: 74 79 70 65 73 20 49 6e 20 53 51 4c 69 74 65 20  types In SQLite 
4a40: 56 65 72 73 69 6f 6e 20 33 3c 2f 61 3e 20 66 6f  Version 3</a> fo
4a50: 72 0a 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r.additional inf
4a60: 6f 72 6d 61 74 69 6f 6e 2e 0a 54 68 65 20 55 4e  ormation..The UN
4a70: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
4a80: 63 61 75 73 65 73 20 61 6e 20 69 6e 64 65 78 20  causes an index 
4a90: 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e  to be created on
4aa0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a 63   the specified.c
4ab0: 6f 6c 75 6d 6e 73 2e 20 20 54 68 69 73 20 69 6e  olumns.  This in
4ac0: 64 65 78 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  dex must contain
4ad0: 20 75 6e 69 71 75 65 20 6b 65 79 73 2e 0a 54 68   unique keys..Th
4ae0: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
4af0: 20 73 70 65 63 69 66 69 65 73 20 77 68 61 74 20   specifies what 
4b00: 74 65 78 74 20 3c 61 20 68 72 65 66 3d 22 64 61  text <a href="da
4b10: 74 61 74 79 70 65 33 2e 68 74 6d 6c 23 63 6f 6c  tatype3.html#col
4b20: 6c 61 74 69 6f 6e 22 3e 0a 63 6f 6c 6c 61 74 69  lation">.collati
4b30: 6e 67 20 66 75 6e 63 74 69 6f 6e 3c 2f 61 3e 20  ng function</a> 
4b40: 74 6f 20 75 73 65 20 77 68 65 6e 20 63 6f 6d 70  to use when comp
4b50: 61 72 69 6e 67 20 74 65 78 74 20 65 6e 74 72 69  aring text entri
4b60: 65 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  es for the colum
4b70: 6e 2e 20 20 0a 54 68 65 20 62 75 69 6c 74 2d 69  n.  .The built-i
4b80: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
4b90: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  ng function is u
4ba0: 73 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  sed by default..
4bb0: 3c 70 3e 0a 54 68 65 20 44 45 46 41 55 4c 54 20  <p>.The DEFAULT 
4bc0: 63 6f 6e 73 74 72 61 69 6e 74 20 73 70 65 63 69  constraint speci
4bd0: 66 69 65 73 20 61 20 64 65 66 61 75 6c 74 20 76  fies a default v
4be0: 61 6c 75 65 20 74 6f 20 75 73 65 20 77 68 65 6e  alue to use when
4bf0: 20 64 6f 69 6e 67 20 61 6e 20 49 4e 53 45 52 54   doing an INSERT
4c00: 2e 0a 54 68 65 20 76 61 6c 75 65 20 6d 61 79 20  ..The value may 
4c10: 62 65 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  be NULL, a strin
4c20: 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 61 20  g constant or a 
4c30: 6e 75 6d 62 65 72 2e 20 53 74 61 72 74 69 6e 67  number. Starting
4c40: 20 77 69 74 68 20 76 65 72 73 69 6f 6e 0a 33 2e   with version.3.
4c50: 31 2e 30 2c 20 74 68 65 20 64 65 66 61 75 6c 74  1.0, the default
4c60: 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20   value may also 
4c70: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70  be one of the sp
4c80: 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70  ecial case-indep
4c90: 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72 64 73 20  endant.keywords 
4ca0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
4cb0: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55  RRENT_DATE or CU
4cc0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e  RRENT_TIMESTAMP.
4cd0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
4ce0: 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67 20  .NULL, a string 
4cf0: 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75 6d 62  constant or numb
4d00: 65 72 2c 20 69 74 20 69 73 20 6c 69 74 65 72 61  er, it is litera
4d10: 6c 6c 79 20 69 6e 73 65 72 74 65 64 20 69 6e 74  lly inserted int
4d20: 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 77 68 65  o the column.whe
4d30: 6e 65 76 65 72 20 61 6e 20 49 4e 53 45 52 54 20  never an INSERT 
4d40: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64  statement that d
4d50: 6f 65 73 20 6e 6f 74 20 73 70 65 63 69 66 79 20  oes not specify 
4d60: 61 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  a value for the 
4d70: 63 6f 6c 75 6d 6e 20 69 73 0a 65 78 65 63 75 74  column is.execut
4d80: 65 64 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  ed. If the value
4d90: 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   is CURRENT_TIME
4da0: 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f  , CURRENT_DATE o
4db0: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
4dc0: 41 4d 50 2c 20 74 68 65 6e 0a 74 68 65 20 63 75  AMP, then.the cu
4dd0: 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20 61  rrent UTC date a
4de0: 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73 20 69 6e  nd/or time is in
4df0: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
4e00: 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 0a 43 55 52  columns. For.CUR
4e10: 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 20 66  RENT_TIME, the f
4e20: 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d 4d 3a 53  ormat is HH:MM:S
4e30: 53 2e 20 46 6f 72 20 43 55 52 52 45 4e 54 5f 44  S. For CURRENT_D
4e40: 41 54 45 2c 20 59 59 59 59 2d 4d 4d 2d 44 44 2e  ATE, YYYY-MM-DD.
4e50: 20 54 68 65 20 66 6f 72 6d 61 74 0a 66 6f 72 20   The format.for 
4e60: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
4e70: 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44  P is "YYYY-MM-DD
4e80: 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 70 3e   HH:MM:SS"..</p>
4e90: 0a 0a 3c 70 3e 53 70 65 63 69 66 79 69 6e 67 20  ..<p>Specifying 
4ea0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6e 6f  a PRIMARY KEY no
4eb0: 72 6d 61 6c 6c 79 20 6a 75 73 74 20 63 72 65 61  rmally just crea
4ec0: 74 65 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64  tes a UNIQUE ind
4ed0: 65 78 0a 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex.on the corres
4ee0: 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  ponding columns.
4ef0: 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 70 72    However, if pr
4f00: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 6f 6e 20  imary key is on 
4f10: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 0a  a single column.
4f20: 74 68 61 74 20 68 61 73 20 64 61 74 61 74 79 70  that has datatyp
4f30: 65 20 49 4e 54 45 47 45 52 2c 20 74 68 65 6e 20  e INTEGER, then 
4f40: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 75  that column is u
4f50: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 0a 61  sed internally.a
4f60: 73 20 74 68 65 20 61 63 74 75 61 6c 20 6b 65 79  s the actual key
4f70: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 20 66   of the B-Tree f
4f80: 6f 72 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  or the table.  T
4f90: 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74  his means that t
4fa0: 68 65 20 63 6f 6c 75 6d 6e 0a 6d 61 79 20 6f 6e  he column.may on
4fb0: 6c 79 20 68 6f 6c 64 20 75 6e 69 71 75 65 20 69  ly hold unique i
4fc0: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 20  nteger values.  
4fd0: 28 45 78 63 65 70 74 20 66 6f 72 20 74 68 69 73  (Except for this
4fe0: 20 6f 6e 65 20 63 61 73 65 2c 0a 53 51 4c 69 74   one case,.SQLit
4ff0: 65 20 69 67 6e 6f 72 65 73 20 74 68 65 20 64 61  e ignores the da
5000: 74 61 74 79 70 65 20 73 70 65 63 69 66 69 63 61  tatype specifica
5010: 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  tion of columns 
5020: 61 6e 64 20 61 6c 6c 6f 77 73 0a 61 6e 79 20 6b  and allows.any k
5030: 69 6e 64 20 6f 66 20 64 61 74 61 20 74 6f 20 62  ind of data to b
5040: 65 20 70 75 74 20 69 6e 20 61 20 63 6f 6c 75 6d  e put in a colum
5050: 6e 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  n regardless of 
5060: 69 74 73 20 64 65 63 6c 61 72 65 64 0a 64 61 74  its declared.dat
5070: 61 74 79 70 65 2e 29 20 20 49 66 20 61 20 74 61  atype.)  If a ta
5080: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  ble does not hav
5090: 65 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  e an INTEGER PRI
50a0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2c  MARY KEY column,
50b0: 0a 74 68 65 6e 20 74 68 65 20 42 2d 54 72 65 65  .then the B-Tree
50c0: 20 6b 65 79 20 77 69 6c 6c 20 62 65 20 61 20 61   key will be a a
50d0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
50e0: 65 72 61 74 65 64 20 69 6e 74 65 67 65 72 2e 20  erated integer. 
50f0: 20 54 68 65 0a 42 2d 54 72 65 65 20 6b 65 79 20   The.B-Tree key 
5100: 66 6f 72 20 61 20 72 6f 77 20 63 61 6e 20 61 6c  for a row can al
5110: 77 61 79 73 20 62 65 20 61 63 63 65 73 73 65 64  ways be accessed
5120: 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68   using one of th
5130: 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 73 20  e.special names 
5140: 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 20  "<b>ROWID</b>", 
5150: 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72  "<b>OID</b>", or
5160: 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e   "<b>_ROWID_</b>
5170: 22 2e 0a 54 68 69 73 20 69 73 20 74 72 75 65 20  "..This is true 
5180: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
5190: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
51a0: 72 65 20 69 73 20 61 6e 20 49 4e 54 45 47 45 52  re is an INTEGER
51b0: 0a 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 41  .PRIMARY KEY.  A
51c0: 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  n INTEGER PRIMAR
51d0: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 63 61 6e  Y KEY column can
51e0: 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65 20 74 68   also include th
51f0: 65 0a 6b 65 79 77 6f 72 64 20 41 55 54 4f 49 4e  e.keyword AUTOIN
5200: 43 52 45 4d 45 4e 54 2e 20 20 54 68 65 20 41 55  CREMENT.  The AU
5210: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 6b 65 79 77  TOINCREMENT keyw
5220: 6f 72 64 20 6d 6f 64 69 66 69 65 64 20 74 68 65  ord modified the
5230: 20 77 61 79 0a 74 68 61 74 20 42 2d 54 72 65 65   way.that B-Tree
5240: 20 6b 65 79 73 20 61 72 65 20 61 75 74 6f 6d 61   keys are automa
5250: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
5260: 64 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 20 64  d.  Additional d
5270: 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61 74  etail.on automat
5280: 69 63 20 42 2d 54 72 65 65 20 6b 65 79 20 67 65  ic B-Tree key ge
5290: 6e 65 72 61 74 69 6f 6e 20 69 73 20 61 76 61 69  neration is avai
52a0: 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66 3d 22 61  lable.<a href="a
52b0: 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70  utoinc.html">sep
52c0: 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e  arately</a>.</p>
52d0: 0a 0a 3c 70 3e 41 63 63 6f 72 64 69 6e 67 20 74  ..<p>According t
52e0: 6f 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  o the SQL standa
52f0: 72 64 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20  rd, PRIMARY KEY 
5300: 73 68 6f 75 6c 64 20 69 6d 70 6c 79 20 4e 4f 54  should imply NOT
5310: 20 4e 55 4c 4c 2e 0a 55 6e 66 6f 72 74 75 6e 61   NULL..Unfortuna
5320: 74 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 6c  tely, due to a l
5330: 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20 63 6f 64  ong-standing cod
5340: 69 6e 67 20 6f 76 65 72 73 69 67 68 74 2c 20 74  ing oversight, t
5350: 68 69 73 20 69 73 20 6e 6f 74 20 0a 74 68 65 20  his is not .the 
5360: 63 61 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20  case in SQLite. 
5370: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 4e   SQLite allows N
5380: 55 4c 4c 20 76 61 6c 75 65 73 0a 69 6e 20 61 20  ULL values.in a 
5390: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
53a0: 6d 6e 2e 20 20 57 65 20 63 6f 75 6c 64 20 63 68  mn.  We could ch
53b0: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ange SQLite to c
53c0: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74  onform to the.st
53d0: 61 6e 64 61 72 64 20 28 61 6e 64 20 77 65 20 6d  andard (and we m
53e0: 69 67 68 74 20 64 6f 20 73 6f 20 69 6e 20 74 68  ight do so in th
53f0: 65 20 66 75 74 75 72 65 29 2c 20 62 75 74 20 62  e future), but b
5400: 79 20 74 68 65 20 74 69 6d 65 20 74 68 65 0a 6f  y the time the.o
5410: 76 65 72 73 69 67 68 74 20 77 61 73 20 64 69 73  versight was dis
5420: 63 6f 76 65 72 65 64 2c 20 53 51 4c 69 74 65 20  covered, SQLite 
5430: 77 61 73 20 69 6e 20 73 75 63 68 20 77 69 64 65  was in such wide
5440: 20 75 73 65 20 74 68 61 74 20 77 65 20 66 65 61   use that we fea
5450: 72 65 64 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67  red.breaking leg
5460: 61 63 79 20 63 6f 64 65 20 69 66 20 77 65 20 66  acy code if we f
5470: 69 78 65 64 20 74 68 65 20 70 72 6f 62 6c 65 6d  ixed the problem
5480: 2e 20 20 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65  .  So for now we
5490: 20 68 61 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20   have.chosen to 
54a0: 63 6f 6e 74 61 69 6e 20 61 6c 6c 6f 77 69 6e 67  contain allowing
54b0: 20 4e 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52   NULLs in PRIMAR
54c0: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44  Y KEY columns..D
54d0: 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64  evelopers should
54e0: 20 62 65 20 61 77 61 72 65 2c 20 68 6f 77 65 76   be aware, howev
54f0: 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20  er, that we may 
5500: 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f  change SQLite to
5510: 0a 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20  .conform to the 
5520: 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 20  SQL standard in 
5530: 66 75 74 75 72 65 20 61 6e 64 20 73 68 6f 75 6c  future and shoul
5540: 64 20 64 65 73 69 67 6e 20 6e 65 77 20 70 72 6f  d design new pro
5550: 67 72 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67 6c  grams.accordingl
5560: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68  y.</p>..<p>If th
5570: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
5580: 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20  PORARY" keyword 
5590: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
55a0: 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22  n "CREATE".and "
55b0: 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20  TABLE" then the 
55c0: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 63 72  table that is cr
55d0: 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69  eated is only vi
55e0: 73 69 62 6c 65 0a 77 69 74 68 69 6e 20 74 68 61  sible.within tha
55f0: 74 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  t same database 
5600: 63 6f 6e 6e 65 63 74 69 6f 6e 0a 61 6e 64 20 69  connection.and i
5610: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
5620: 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65  deleted when.the
5630: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
5640: 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 20  tion is closed. 
5650: 20 41 6e 79 20 69 6e 64 69 63 65 73 20 63 72 65   Any indices cre
5660: 61 74 65 64 20 6f 6e 20 61 20 74 65 6d 70 6f 72  ated on a tempor
5670: 61 72 79 20 74 61 62 6c 65 0a 61 72 65 20 61 6c  ary table.are al
5680: 73 6f 20 74 65 6d 70 6f 72 61 72 79 2e 20 20 54  so temporary.  T
5690: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
56a0: 61 6e 64 20 69 6e 64 69 63 65 73 20 61 72 65 20  and indices are 
56b0: 73 74 6f 72 65 64 20 69 6e 20 61 0a 73 65 70 61  stored in a.sepa
56c0: 72 61 74 65 20 66 69 6c 65 20 64 69 73 74 69 6e  rate file distin
56d0: 63 74 20 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e  ct from the main
56e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
56f0: 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20 61 20 26 6c  /p>..<p> If a &l
5700: 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26  t;database-name&
5710: 67 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64  gt; is specified
5720: 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
5730: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a   is created in .
5740: 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61  the named databa
5750: 73 65 2e 20 49 74 20 69 73 20 61 6e 20 65 72 72  se. It is an err
5760: 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f  or to specify bo
5770: 74 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73  th a &lt;databas
5780: 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74  e-name&gt;.and t
5790: 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c  he TEMP keyword,
57a0: 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b   unless the &lt;
57b0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
57c0: 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 49 66 20  ; is "temp". If 
57d0: 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no.database name
57e0: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61   is specified, a
57f0: 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77  nd the TEMP keyw
5800: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
5810: 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65 20 69 73  nt,.the table is
5820: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
5830: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f  main database.</
5840: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f  p>..<p>The optio
5850: 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
5860: 75 73 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  use following ea
5870: 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 0a 61 6c  ch constraint.al
5880: 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
5890: 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
58a0: 65 72 6e 61 74 69 76 65 20 64 65 66 61 75 6c 74  ernative default
58b0: 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
58c0: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
58d0: 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 74 68  algorithm for th
58e0: 61 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 54  at constraint..T
58f0: 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 61 62  he default is ab
5900: 6f 72 74 20 41 42 4f 52 54 2e 20 20 44 69 66 66  ort ABORT.  Diff
5910: 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  erent constraint
5920: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
5930: 65 0a 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65  e.table may have
5940: 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61 75   different defau
5950: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
5960: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
5970: 73 2e 0a 49 66 20 61 6e 20 43 4f 50 59 2c 20 49  s..If an COPY, I
5980: 4e 53 45 52 54 2c 20 6f 72 20 55 50 44 41 54 45  NSERT, or UPDATE
5990: 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69   command specifi
59a0: 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 63  es a different c
59b0: 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69  onflict.resoluti
59c0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2c 20 74 68  on algorithm, th
59d0: 65 6e 20 74 68 61 74 20 61 6c 67 6f 72 69 74 68  en that algorith
59e0: 6d 20 69 73 20 75 73 65 64 20 69 6e 20 70 6c 61  m is used in pla
59f0: 63 65 20 6f 66 20 74 68 65 0a 64 65 66 61 75 6c  ce of the.defaul
5a00: 74 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  t algorithm spec
5a10: 69 66 69 65 64 20 69 6e 20 74 68 65 20 43 52 45  ified in the CRE
5a20: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
5a30: 65 6e 74 2e 0a 53 65 65 20 74 68 65 20 73 65 63  ent..See the sec
5a40: 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68  tion titled.<a h
5a50: 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e  ref="#conflict">
5a60: 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20  ON CONFLICT</a> 
5a70: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
5a80: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  nformation.</p>.
5a90: 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72  .<p>CHECK constr
5aa0: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
5ab0: 74 65 64 20 61 73 20 6f 66 20 76 65 72 73 69 6f  ted as of versio
5ac0: 6e 20 33 2e 33 2e 30 2e 20 20 50 72 69 6f 72 0a  n 3.3.0.  Prior.
5ad0: 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  to version 3.3.0
5ae0: 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  , CHECK constrai
5af0: 6e 74 73 20 77 65 72 65 20 70 61 72 73 65 64 20  nts were parsed 
5b00: 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64  but not enforced
5b10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
5b20: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
5b30: 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e   limits on the n
5b40: 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73  umber.of columns
5b50: 20 6f 72 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65   or on the numbe
5b60: 72 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  r of constraints
5b70: 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 54 68 65   in a table..The
5b80: 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66   total amount of
5b90: 20 64 61 74 61 20 69 6e 20 61 20 73 69 6e 67 6c   data in a singl
5ba0: 65 20 72 6f 77 20 69 73 20 6c 69 6d 69 74 65 64  e row is limited
5bb0: 20 74 6f 20 61 62 6f 75 74 0a 31 20 6d 65 67 61   to about.1 mega
5bc0: 62 79 74 65 73 20 69 6e 20 76 65 72 73 69 6f 6e  bytes in version
5bd0: 20 32 2e 38 2e 20 20 49 6e 20 76 65 72 73 69 6f   2.8.  In versio
5be0: 6e 20 33 2e 30 20 74 68 65 72 65 20 69 73 20 6e  n 3.0 there is n
5bf0: 6f 20 61 72 62 69 74 72 61 72 79 0a 6c 69 6d 69  o arbitrary.limi
5c00: 74 20 6f 6e 20 74 68 65 20 61 6d 6f 75 6e 74 20  t on the amount 
5c10: 6f 66 20 64 61 74 61 20 69 6e 20 61 20 72 6f 77  of data in a row
5c20: 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 54 68 65 20 43  .</p>...<p>The C
5c30: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 66  REATE TABLE AS f
5c40: 6f 72 6d 20 64 65 66 69 6e 65 73 20 74 68 65 20  orm defines the 
5c50: 74 61 62 6c 65 20 74 6f 20 62 65 0a 74 68 65 20  table to be.the 
5c60: 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
5c70: 71 75 65 72 79 2e 20 20 54 68 65 20 6e 61 6d 65  query.  The name
5c80: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63  s of the table c
5c90: 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 6e  olumns are.the n
5ca0: 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75  ames of the colu
5cb0: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
5cc0: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 65  t.</p>..<p>The e
5cd0: 78 61 63 74 20 74 65 78 74 0a 6f 66 20 65 61 63  xact text.of eac
5ce0: 68 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  h CREATE TABLE s
5cf0: 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72  tatement is stor
5d00: 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73 71 6c  ed in the <b>sql
5d10: 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 74  ite_master</b>.t
5d20: 61 62 6c 65 2e 20 20 45 76 65 72 79 20 74 69 6d  able.  Every tim
5d30: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
5d40: 73 20 6f 70 65 6e 65 64 2c 20 61 6c 6c 20 43 52  s opened, all CR
5d50: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
5d60: 6d 65 6e 74 73 0a 61 72 65 20 72 65 61 64 20 66  ments.are read f
5d70: 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71 6c 69 74  rom the <b>sqlit
5d80: 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62  e_master</b> tab
5d90: 6c 65 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  le and used to r
5da0: 65 67 65 6e 65 72 61 74 65 0a 53 51 4c 69 74 65  egenerate.SQLite
5db0: 27 73 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  's internal repr
5dc0: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
5dd0: 65 20 74 61 62 6c 65 20 6c 61 79 6f 75 74 2e 0a  e table layout..
5de0: 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  If the original 
5df0: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 61 20 43 52  command was a CR
5e00: 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 74 68  EATE TABLE AS th
5e10: 65 6e 20 74 68 65 6e 20 61 6e 20 65 71 75 69 76  en then an equiv
5e20: 61 6c 65 6e 74 0a 43 52 45 41 54 45 20 54 41 42  alent.CREATE TAB
5e30: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
5e40: 73 79 6e 74 68 65 73 69 7a 65 64 20 61 6e 64 20  synthesized and 
5e50: 73 74 6f 72 65 20 69 6e 20 3c 62 3e 73 71 6c 69  store in <b>sqli
5e60: 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 69 6e  te_master</b>.in
5e70: 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 6f 72   place of the or
5e80: 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 2e 0a  iginal command..
5e90: 54 68 65 20 74 65 78 74 20 6f 66 20 43 52 45 41  The text of CREA
5ea0: 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
5eb0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72  LE statements ar
5ec0: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 0a  e stored in the.
5ed0: 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  <b>sqlite_temp_m
5ee0: 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65 2e  aster</b> table.
5ef0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65  .</p>..<p>If the
5f00: 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54   optional IF NOT
5f10: 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
5f20: 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e  s present and an
5f30: 6f 74 68 65 72 20 74 61 62 6c 65 0a 77 69 74 68  other table.with
5f40: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
5f50: 6c 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  leady exists, th
5f60: 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  en this command 
5f70: 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
5f80: 3c 2f 70 3e 0a 0a 3c 70 3e 54 61 62 6c 65 73 20  </p>..<p>Tables 
5f90: 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e  are removed usin
5fa0: 67 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  g the <a href="#
5fb0: 64 72 6f 70 74 61 62 6c 65 22 3e 44 52 4f 50 20  droptable">DROP 
5fc0: 54 41 42 4c 45 3c 2f 61 3e 20 0a 73 74 61 74 65  TABLE</a> .state
5fd0: 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 7d 0a 0a 0a  ment.  </p>.}...
5fe0: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
5ff0: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
6000: 72 69 67 67 65 72 0a 0a 53 79 6e 74 61 78 20 7b  rigger..Syntax {
6010: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
6020: 0a 43 52 45 41 54 45 20 5b 54 45 4d 50 20 7c 20  .CREATE [TEMP | 
6030: 54 45 4d 50 4f 52 41 52 59 5d 20 54 52 49 47 47  TEMPORARY] TRIGG
6040: 45 52 20 5b 49 46 20 4e 4f 54 20 45 58 49 53 54  ER [IF NOT EXIST
6050: 53 5d 20 3c 74 72 69 67 67 65 72 2d 6e 61 6d 65  S] <trigger-name
6060: 3e 20 5b 20 42 45 46 4f 52 45 20 7c 20 41 46 54  > [ BEFORE | AFT
6070: 45 52 20 5d 0a 3c 64 61 74 61 62 61 73 65 2d 65  ER ].<database-e
6080: 76 65 6e 74 3e 20 4f 4e 20 5b 3c 64 61 74 61 62  vent> ON [<datab
6090: 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61  ase-name> .] <ta
60a0: 62 6c 65 2d 6e 61 6d 65 3e 0a 3c 74 72 69 67 67  ble-name>.<trigg
60b0: 65 72 2d 61 63 74 69 6f 6e 3e 0a 7d 0a 0a 53 79  er-action>.}..Sy
60c0: 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
60d0: 65 6e 74 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54  ent} {.CREATE [T
60e0: 45 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d  EMP | TEMPORARY]
60f0: 20 54 52 49 47 47 45 52 20 5b 49 46 20 4e 4f 54   TRIGGER [IF NOT
6100: 20 45 58 49 53 54 53 5d 20 3c 74 72 69 67 67 65   EXISTS] <trigge
6110: 72 2d 6e 61 6d 65 3e 20 49 4e 53 54 45 41 44 20  r-name> INSTEAD 
6120: 4f 46 0a 3c 64 61 74 61 62 61 73 65 2d 65 76 65  OF.<database-eve
6130: 6e 74 3e 20 4f 4e 20 5b 3c 64 61 74 61 62 61 73  nt> ON [<databas
6140: 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 76 69 65 77  e-name> .] <view
6150: 2d 6e 61 6d 65 3e 0a 3c 74 72 69 67 67 65 72 2d  -name>.<trigger-
6160: 61 63 74 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74 61  action>.}..Synta
6170: 78 20 7b 64 61 74 61 62 61 73 65 2d 65 76 65 6e  x {database-even
6180: 74 7d 20 7b 0a 44 45 4c 45 54 45 20 7c 20 0a 49  t} {.DELETE | .I
6190: 4e 53 45 52 54 20 7c 20 0a 55 50 44 41 54 45 20  NSERT | .UPDATE 
61a0: 7c 20 0a 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  | .UPDATE OF <co
61b0: 6c 75 6d 6e 2d 6c 69 73 74 3e 0a 7d 0a 0a 53 79  lumn-list>.}..Sy
61c0: 6e 74 61 78 20 7b 74 72 69 67 67 65 72 2d 61 63  ntax {trigger-ac
61d0: 74 69 6f 6e 7d 20 7b 0a 5b 20 46 4f 52 20 45 41  tion} {.[ FOR EA
61e0: 43 48 20 52 4f 57 20 7c 20 46 4f 52 20 45 41 43  CH ROW | FOR EAC
61f0: 48 20 53 54 41 54 45 4d 45 4e 54 20 5d 20 5b 20  H STATEMENT ] [ 
6200: 57 48 45 4e 20 3c 65 78 70 72 65 73 73 69 6f 6e  WHEN <expression
6210: 3e 20 5d 20 0a 42 45 47 49 4e 20 0a 20 20 3c 74  > ] .BEGIN .  <t
6220: 72 69 67 67 65 72 2d 73 74 65 70 3e 20 3b 20 5b  rigger-step> ; [
6230: 20 3c 74 72 69 67 67 65 72 2d 73 74 65 70 3e 20   <trigger-step> 
6240: 3b 20 5d 2a 0a 45 4e 44 0a 7d 0a 0a 53 79 6e 74  ; ]*.END.}..Synt
6250: 61 78 20 7b 74 72 69 67 67 65 72 2d 73 74 65 70  ax {trigger-step
6260: 7d 20 7b 0a 3c 75 70 64 61 74 65 2d 73 74 61 74  } {.<update-stat
6270: 65 6d 65 6e 74 3e 20 7c 20 3c 69 6e 73 65 72 74  ement> | <insert
6280: 2d 73 74 61 74 65 6d 65 6e 74 3e 20 7c 20 0a 3c  -statement> | .<
6290: 64 65 6c 65 74 65 2d 73 74 61 74 65 6d 65 6e 74  delete-statement
62a0: 3e 20 7c 20 3c 73 65 6c 65 63 74 2d 73 74 61 74  > | <select-stat
62b0: 65 6d 65 6e 74 3e 20 0a 7d 0a 0a 70 75 74 73 20  ement> .}..puts 
62c0: 7b 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20  {.<p>The CREATE 
62d0: 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e  TRIGGER statemen
62e0: 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  t is used to add
62f0: 20 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65   triggers to the
6300: 20 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   .database schem
6310: 61 2e 20 54 72 69 67 67 65 72 73 20 61 72 65 20  a. Triggers are 
6320: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
6330: 6f 6e 73 20 28 74 68 65 20 3c 69 3e 74 72 69 67  ons (the <i>trig
6340: 67 65 72 2d 61 63 74 69 6f 6e 3c 2f 69 3e 29 20  ger-action</i>) 
6350: 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61  .that are automa
6360: 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72 6d 65  tically performe
6370: 64 20 77 68 65 6e 20 61 20 73 70 65 63 69 66 69  d when a specifi
6380: 65 64 20 64 61 74 61 62 61 73 65 20 65 76 65 6e  ed database even
6390: 74 20 28 74 68 65 0a 3c 69 3e 64 61 74 61 62 61  t (the.<i>databa
63a0: 73 65 2d 65 76 65 6e 74 3c 2f 69 3e 29 20 6f 63  se-event</i>) oc
63b0: 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e  curs.  </p>..<p>
63c0: 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  A trigger may be
63d0: 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66 69   specified to fi
63e0: 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 44 45  re whenever a DE
63f0: 4c 45 54 45 2c 20 49 4e 53 45 52 54 20 6f 72 20  LETE, INSERT or 
6400: 55 50 44 41 54 45 20 6f 66 20 61 0a 70 61 72 74  UPDATE of a.part
6410: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
6420: 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72  table occurs, or
6430: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 55 50 44   whenever an UPD
6440: 41 54 45 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  ATE of one or mo
6450: 72 65 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c  re.specified col
6460: 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 20  umns of a table 
6470: 61 72 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e  are updated.</p>
6480: 0a 0a 3c 70 3e 41 74 20 74 68 69 73 20 74 69 6d  ..<p>At this tim
6490: 65 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  e SQLite support
64a0: 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20  s only FOR EACH 
64b0: 52 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f  ROW triggers, no
64c0: 74 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45  t FOR EACH.STATE
64d0: 4d 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20 48  MENT triggers. H
64e0: 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20  ence explicitly 
64f0: 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45  specifying FOR E
6500: 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f  ACH ROW is optio
6510: 6e 61 6c 2e 20 20 46 4f 52 0a 45 41 43 48 20 52  nal.  FOR.EACH R
6520: 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  OW implies that 
6530: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
6540: 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
6550: 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70 73  <i>trigger-steps
6560: 3c 2f 69 3e 20 0a 6d 61 79 20 62 65 20 65 78 65  </i> .may be exe
6570: 63 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67  cuted (depending
6580: 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61   on the WHEN cla
6590: 75 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61  use) for each da
65a0: 74 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67  tabase row being
65b0: 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74  .inserted, updat
65c0: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
65d0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
65e0: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
65f0: 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  er to fire.</p>.
6600: 0a 3c 70 3e 42 6f 74 68 20 74 68 65 20 57 48 45  .<p>Both the WHE
6610: 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  N clause and the
6620: 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70   <i>trigger-step
6630: 73 3c 2f 69 3e 20 6d 61 79 20 61 63 63 65 73 73  s</i> may access
6640: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68   elements of .th
6650: 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65  e row being inse
6660: 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72  rted, deleted or
6670: 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72   updated using r
6680: 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65  eferences of the
6690: 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63   form ."NEW.<i>c
66a0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20  olumn-name</i>" 
66b0: 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75  and "OLD.<i>colu
66c0: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68  mn-name</i>", wh
66d0: 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  ere.<i>column-na
66e0: 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61  me</i> is the na
66f0: 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66  me of a column f
6700: 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68  rom the table th
6710: 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69  at the trigger.i
6720: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
6730: 68 2e 20 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72  h. OLD and NEW r
6740: 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e  eferences may on
6750: 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 72  ly be used in tr
6760: 69 67 67 65 72 73 20 6f 6e 0a 3c 69 3e 74 72 69  iggers on.<i>tri
6770: 67 67 65 72 2d 65 76 65 6e 74 3c 2f 69 3e 73 20  gger-event</i>s 
6780: 66 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61  for which they a
6790: 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20  re relevant, as 
67a0: 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
67b0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
67c0: 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
67d0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
67e0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
67f0: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49  " width=120><i>I
6800: 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  NSERT</i></td>.<
6810: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
6820: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61  NEW references a
6830: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
6840: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
6850: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
6860: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
6870: 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c  0><i>UPDATE</i><
6880: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
6890: 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c  "top">NEW and OL
68a0: 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  D references are
68b0: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
68c0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
68d0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
68e0: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
68f0: 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74  <i>DELETE</i></t
6900: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
6910: 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63  op">OLD referenc
6920: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
6930: 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  >.</tr>.</table>
6940: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 57  .</p>..<p>If a W
6950: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
6960: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
6970: 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
6980: 66 69 65 64 20 61 73 20 3c 69 3e 74 72 69 67 67  fied as <i>trigg
6990: 65 72 2d 73 74 65 70 73 3c 2f 69 3e 20 61 72 65  er-steps</i> are
69a0: 20 6f 6e 6c 79 20 65 78 65 63 75 74 65 64 20 66   only executed f
69b0: 6f 72 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  or rows for whic
69c0: 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73  h the WHEN claus
69d0: 65 20 69 73 20 74 72 75 65 2e 20 49 66 20 6e 6f  e is true. If no
69e0: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
69f0: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
6a00: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  L statements are
6a10: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c   executed for al
6a20: 6c 20 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  l rows.</p>..<p>
6a30: 54 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 69  The specified <i
6a40: 3e 74 72 69 67 67 65 72 2d 74 69 6d 65 3c 2f 69  >trigger-time</i
6a50: 3e 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  > determines whe
6a60: 6e 20 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72  n the <i>trigger
6a70: 2d 73 74 65 70 73 3c 2f 69 3e 0a 77 69 6c 6c 20  -steps</i>.will 
6a80: 62 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61  be executed rela
6a90: 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65  tive to the inse
6aa0: 72 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74  rtion, modificat
6ab0: 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f  ion or removal o
6ac0: 66 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64  f the.associated
6ad0: 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e   row.</p>..<p>An
6ae0: 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
6af0: 75 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69  use may be speci
6b00: 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
6b10: 61 6e 20 55 50 44 41 54 45 20 6f 72 20 49 4e 53  an UPDATE or INS
6b20: 45 52 54 0a 3c 69 3e 74 72 69 67 67 65 72 2d 73  ERT.<i>trigger-s
6b30: 74 65 70 3c 2f 69 3e 2e 20 48 6f 77 65 76 65 72  tep</i>. However
6b40: 20 69 66 20 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49   if an ON CONFLI
6b50: 43 54 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  CT clause is spe
6b60: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
6b70: 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74  f .the statement
6b80: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
6b90: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
6ba0: 65 6e 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 74  en this conflict
6bb0: 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69 63 79   handling.policy
6bc0: 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64   is used instead
6bd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65  .</p>..<p>Trigge
6be0: 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  rs are automatic
6bf0: 61 6c 6c 79 20 64 72 6f 70 70 65 64 20 77 68 65  ally dropped whe
6c00: 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  n the table that
6c10: 20 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63   they are .assoc
6c20: 69 61 74 65 64 20 77 69 74 68 20 69 73 20 64 72  iated with is dr
6c30: 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  opped.</p>..<p>T
6c40: 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 20 63  riggers may be c
6c50: 72 65 61 74 65 64 20 6f 6e 20 76 69 65 77 73 2c  reated on views,
6c60: 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69   as well as ordi
6c70: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 20  nary tables, by 
6c80: 73 70 65 63 69 66 79 69 6e 67 0a 49 4e 53 54 45  specifying.INSTE
6c90: 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45  AD OF in the CRE
6ca0: 41 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74  ATE TRIGGER stat
6cb0: 65 6d 65 6e 74 2e 20 49 66 20 6f 6e 65 20 6f 72  ement. If one or
6cc0: 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c   more ON INSERT,
6cd0: 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e   ON DELETE.or ON
6ce0: 20 55 50 44 41 54 45 20 74 72 69 67 67 65 72 73   UPDATE triggers
6cf0: 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20   are defined on 
6d00: 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20  a view, then it 
6d10: 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20  is not an error 
6d20: 74 6f 20 65 78 65 63 75 74 65 0a 61 6e 20 49 4e  to execute.an IN
6d30: 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20  SERT, DELETE or 
6d40: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
6d50: 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 72 65   on the view, re
6d60: 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 72  spectively. Ther
6d70: 65 61 66 74 65 72 2c 0a 65 78 65 63 75 74 69 6e  eafter,.executin
6d80: 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c  g an INSERT, DEL
6d90: 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e  ETE or UPDATE on
6da0: 20 74 68 65 20 76 69 65 77 20 63 61 75 73 65 73   the view causes
6db0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
6dc0: 20 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69    triggers to fi
6dd0: 72 65 2e 20 54 68 65 20 72 65 61 6c 20 74 61 62  re. The real tab
6de0: 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74  les underlying t
6df0: 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20  he view are not 
6e00: 6d 6f 64 69 66 69 65 64 0a 20 20 28 65 78 63 65  modified.  (exce
6e10: 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c  pt possibly expl
6e20: 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69  icitly, by a tri
6e30: 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f  gger program).</
6e40: 70 3e 0a 0a 3c 70 3e 3c 62 3e 45 78 61 6d 70 6c  p>..<p><b>Exampl
6e50: 65 3a 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41  e:</b></p>..<p>A
6e60: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73  ssuming that cus
6e70: 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72  tomer records ar
6e80: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
6e90: 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c  "customers" tabl
6ea0: 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65  e, and.that orde
6eb0: 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74  r records are st
6ec0: 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64  ored in the "ord
6ed0: 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20  ers" table, the 
6ee0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67 65  following trigge
6ef0: 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20 61  r.ensures that a
6f00: 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72  ll associated or
6f10: 64 65 72 73 20 61 72 65 20 72 65 64 69 72 65 63  ders are redirec
6f20: 74 65 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f  ted when a custo
6f30: 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20  mer changes.his 
6f40: 6f 72 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c  or her address:<
6f50: 2f 70 3e 0a 7d 0a 45 78 61 6d 70 6c 65 20 7b 0a  /p>.}.Example {.
6f60: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 75  CREATE TRIGGER u
6f70: 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61  pdate_customer_a
6f80: 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f 46  ddress UPDATE OF
6f90: 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73 74   address ON cust
6fa0: 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a 20  omers .  BEGIN. 
6fb0: 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72 73     UPDATE orders
6fc0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 6e   SET address = n
6fd0: 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52 45  ew.address WHERE
6fe0: 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d   customer_name =
6ff0: 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44   old.name;.  END
7000: 3b 0a 7d 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 69  ;.}.puts {.<p>Wi
7010: 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72 20  th this trigger 
7020: 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63 75  installed, execu
7030: 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d 65  ting the stateme
7040: 6e 74 3a 3c 2f 70 3e 0a 7d 0a 0a 45 78 61 6d 70  nt:</p>.}..Examp
7050: 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74  le {.UPDATE cust
7060: 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72 65 73  omers SET addres
7070: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
7080: 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a   WHERE name = 'J
7090: 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 0a 70 75  ack Jones';.}.pu
70a0: 74 73 20 7b 0a 3c 70 3e 63 61 75 73 65 73 20 74  ts {.<p>causes t
70b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20  he following to 
70c0: 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  be automatically
70d0: 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 7d   executed:</p>.}
70e0: 0a 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  .Example {.UPDAT
70f0: 45 20 6f 72 64 65 72 73 20 53 45 54 20 61 64 64  E orders SET add
7100: 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20 53  ress = '1 Main S
7110: 74 2e 27 20 57 48 45 52 45 20 63 75 73 74 6f 6d  t.' WHERE custom
7120: 65 72 5f 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20  er_name = 'Jack 
7130: 4a 6f 6e 65 73 27 3b 0a 7d 0a 0a 70 75 74 73 20  Jones';.}..puts 
7140: 7b 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 63  {.<p>Note that c
7150: 75 72 72 65 6e 74 6c 79 2c 20 74 72 69 67 67 65  urrently, trigge
7160: 72 73 20 6d 61 79 20 62 65 68 61 76 65 20 6f 64  rs may behave od
7170: 64 6c 79 20 77 68 65 6e 20 63 72 65 61 74 65 64  dly when created
7180: 20 6f 6e 20 74 61 62 6c 65 73 0a 20 20 77 69 74   on tables.  wit
7190: 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
71a0: 59 20 4b 45 59 20 66 69 65 6c 64 73 2e 20 49 66  Y KEY fields. If
71b0: 20 61 20 42 45 46 4f 52 45 20 74 72 69 67 67 65   a BEFORE trigge
71c0: 72 20 70 72 6f 67 72 61 6d 20 6d 6f 64 69 66 69  r program modifi
71d0: 65 73 20 74 68 65 20 0a 20 20 49 4e 54 45 47 45  es the .  INTEGE
71e0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 69  R PRIMARY KEY fi
71f0: 65 6c 64 20 6f 66 20 61 20 72 6f 77 20 74 68 61  eld of a row tha
7200: 74 20 77 69 6c 6c 20 62 65 20 73 75 62 73 65 71  t will be subseq
7210: 75 65 6e 74 6c 79 20 75 70 64 61 74 65 64 20 62  uently updated b
7220: 79 20 74 68 65 0a 20 20 73 74 61 74 65 6d 65 6e  y the.  statemen
7230: 74 20 74 68 61 74 20 63 61 75 73 65 73 20 74 68  t that causes th
7240: 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72  e trigger to fir
7250: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61  e, then the upda
7260: 74 65 20 6d 61 79 20 6e 6f 74 20 6f 63 63 75 72  te may not occur
7270: 2e 20 0a 20 20 54 68 65 20 77 6f 72 6b 61 72 6f  . .  The workaro
7280: 75 6e 64 20 69 73 20 74 6f 20 64 65 63 6c 61 72  und is to declar
7290: 65 20 74 68 65 20 74 61 62 6c 65 20 77 69 74 68  e the table with
72a0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
72b0: 6f 6c 75 6d 6e 20 69 6e 73 74 65 61 64 0a 20 20  olumn instead.  
72c0: 6f 66 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52  of an INTEGER PR
72d0: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
72e0: 2e 3c 2f 70 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a  .</p>.}..puts {.
72f0: 3c 70 3e 41 20 73 70 65 63 69 61 6c 20 53 51 4c  <p>A special SQL
7300: 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53 45 28   function RAISE(
7310: 29 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69  ) may be used wi
7320: 74 68 69 6e 20 61 20 74 72 69 67 67 65 72 2d 70  thin a trigger-p
7330: 72 6f 67 72 61 6d 2c 20 77 69 74 68 20 74 68 65  rogram, with the
7340: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61   following synta
7350: 78 3c 2f 70 3e 20 0a 7d 0a 53 79 6e 74 61 78 20  x</p> .}.Syntax 
7360: 7b 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 7d  {raise-function}
7370: 20 7b 0a 52 41 49 53 45 20 28 20 41 42 4f 52 54   {.RAISE ( ABORT
7380: 2c 20 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65  , <error-message
7390: 3e 20 29 20 7c 20 0a 52 41 49 53 45 20 28 20 46  > ) | .RAISE ( F
73a0: 41 49 4c 2c 20 3c 65 72 72 6f 72 2d 6d 65 73 73  AIL, <error-mess
73b0: 61 67 65 3e 20 29 20 7c 20 0a 52 41 49 53 45 20  age> ) | .RAISE 
73c0: 28 20 52 4f 4c 4c 42 41 43 4b 2c 20 3c 65 72 72  ( ROLLBACK, <err
73d0: 6f 72 2d 6d 65 73 73 61 67 65 3e 20 29 20 7c 20  or-message> ) | 
73e0: 0a 52 41 49 53 45 20 28 20 49 47 4e 4f 52 45 20  .RAISE ( IGNORE 
73f0: 29 0a 7d 0a 70 75 74 73 20 7b 0a 3c 70 3e 57 68  ).}.puts {.<p>Wh
7400: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69  en one of the fi
7410: 72 73 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20  rst three forms 
7420: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
7430: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
7440: 20 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20   execution, the 
7450: 73 70 65 63 69 66 69 65 64 20 4f 4e 20 43 4f 4e  specified ON CON
7460: 46 4c 49 43 54 20 70 72 6f 63 65 73 73 69 6e 67  FLICT processing
7470: 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 28 65   is performed (e
7480: 69 74 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49  ither ABORT, FAI
7490: 4c 20 6f 72 20 0a 20 52 4f 4c 4c 42 41 43 4b 29  L or . ROLLBACK)
74a0: 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
74b0: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
74c0: 73 2e 20 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  s. An error code
74d0: 20 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54   of SQLITE_CONST
74e0: 52 41 49 4e 54 20 69 73 20 72 65 74 75 72 6e 65  RAINT is returne
74f0: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2c 20 61  d to the user, a
7500: 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73 70  long with the sp
7510: 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65  ecified error me
7520: 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57  ssage.</p>..<p>W
7530: 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45  hen RAISE(IGNORE
7540: 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65  ) is called, the
7550: 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68   remainder of th
7560: 65 20 63 75 72 72 65 6e 74 20 74 72 69 67 67 65  e current trigge
7570: 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73  r program,.the s
7580: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61  tatement that ca
7590: 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72  used the trigger
75a0: 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63   program to exec
75b0: 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73  ute and any subs
75c0: 65 71 75 65 6e 74 0a 20 20 20 20 74 72 69 67 67  equent.    trigg
75d0: 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74  er programs that
75e0: 20 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20 65   would of been e
75f0: 78 65 63 75 74 65 64 20 61 72 65 20 61 62 61 6e  xecuted are aban
7600: 64 6f 6e 65 64 2e 20 4e 6f 20 64 61 74 61 62 61  doned. No databa
7610: 73 65 0a 20 20 20 20 63 68 61 6e 67 65 73 20 61  se.    changes a
7620: 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  re rolled back. 
7630: 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   If the statemen
7640: 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  t that caused th
7650: 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
7660: 6d 0a 20 20 20 20 74 6f 20 65 78 65 63 75 74 65  m.    to execute
7670: 20 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20   is itself part 
7680: 6f 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  of a trigger pro
7690: 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20  gram, then that 
76a0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
76b0: 20 20 20 20 72 65 73 75 6d 65 73 20 65 78 65 63      resumes exec
76c0: 75 74 69 6f 6e 20 61 74 20 74 68 65 20 62 65 67  ution at the beg
76d0: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 6e 65  inning of the ne
76e0: 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 3c  xt step..</p>..<
76f0: 70 3e 54 72 69 67 67 65 72 73 20 61 72 65 20 72  p>Triggers are r
7700: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
7710: 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74   <a href="#dropt
7720: 72 69 67 67 65 72 22 3e 44 52 4f 50 20 54 52 49  rigger">DROP TRI
7730: 47 47 45 52 3c 2f 61 3e 0a 73 74 61 74 65 6d 65  GGER</a>.stateme
7740: 6e 74 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74  nt.</p>.}...Sect
7750: 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57  ion {CREATE VIEW
7760: 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 0a 0a  } {createview}..
7770: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d  Syntax {sql-comm
7780: 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54  and} {.CREATE [T
7790: 45 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d  EMP | TEMPORARY]
77a0: 20 56 49 45 57 20 5b 49 46 20 4e 4f 54 20 45 58   VIEW [IF NOT EX
77b0: 49 53 54 53 5d 20 5b 3c 64 61 74 61 62 61 73 65  ISTS] [<database
77c0: 2d 6e 61 6d 65 3e 2e 5d 20 3c 76 69 65 77 2d 6e  -name>.] <view-n
77d0: 61 6d 65 3e 20 41 53 20 3c 73 65 6c 65 63 74 2d  ame> AS <select-
77e0: 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75  statement>.}..pu
77f0: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 43 52 45 41  ts {.<p>The CREA
7800: 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20  TE VIEW command 
7810: 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74  assigns a name t
7820: 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64  o a pre-packaged
7830: 20 0a 3c 61 20 68 72 65 66 3d 22 23 73 65 6c 65   .<a href="#sele
7840: 63 74 22 3e 53 45 4c 45 43 54 3c 2f 61 3e 0a 73  ct">SELECT</a>.s
7850: 74 61 74 65 6d 65 6e 74 2e 20 20 4f 6e 63 65 20  tatement.  Once 
7860: 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61  the view is crea
7870: 74 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75  ted, it can be u
7880: 73 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  sed in the FROM 
7890: 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65  clause.of anothe
78a0: 72 20 53 45 4c 45 43 54 20 69 6e 20 70 6c 61 63  r SELECT in plac
78b0: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
78c0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74  e..</p>..<p>If t
78d0: 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45  he "TEMP" or "TE
78e0: 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64  MPORARY" keyword
78f0: 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65   occurs in betwe
7900: 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20  en "CREATE".and 
7910: 22 56 49 45 57 22 20 74 68 65 6e 20 74 68 65 20  "VIEW" then the 
7920: 76 69 65 77 20 74 68 61 74 20 69 73 20 63 72 65  view that is cre
7930: 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73  ated is only vis
7940: 69 62 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f 63  ible to the.proc
7950: 65 73 73 20 74 68 61 74 20 6f 70 65 6e 65 64 20  ess that opened 
7960: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
7970: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
7980: 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74  y deleted when.t
7990: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
79a0: 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  losed.</p>..<p> 
79b0: 49 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73  If a &lt;databas
79c0: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70  e-name&gt; is sp
79d0: 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
79e0: 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65  e view is create
79f0: 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20  d in .the named 
7a00: 64 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20  database. It is 
7a10: 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63  an error to spec
7a20: 69 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64  ify both a &lt;d
7a30: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
7a40: 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65  .and the TEMP ke
7a50: 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68  yword, unless th
7a60: 65 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  e &lt;database-n
7a70: 61 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70  ame&gt; is "temp
7a80: 22 2e 20 49 66 20 6e 6f 0a 64 61 74 61 62 61 73  ". If no.databas
7a90: 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  e name is specif
7aa0: 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d  ied, and the TEM
7ab0: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
7ac0: 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 74 61   present,.the ta
7ad0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
7ae0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
7af0: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75  ase.</p>..<p>You
7b00: 20 63 61 6e 6e 6f 74 20 43 4f 50 59 2c 20 44 45   cannot COPY, DE
7b10: 4c 45 54 45 2c 20 49 4e 53 45 52 54 20 6f 72 20  LETE, INSERT or 
7b20: 55 50 44 41 54 45 20 61 20 76 69 65 77 2e 20 20  UPDATE a view.  
7b30: 56 69 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f  Views are read-o
7b40: 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20  nly .in SQLite. 
7b50: 20 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e   However, in man
7b60: 79 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20  y cases you can 
7b70: 75 73 65 20 61 20 3c 61 20 68 72 65 66 3d 22 23  use a <a href="#
7b80: 63 72 65 61 74 65 74 72 69 67 67 65 72 22 3e 0a  createtrigger">.
7b90: 54 52 49 47 47 45 52 3c 2f 61 3e 20 6f 6e 20 74  TRIGGER</a> on t
7ba0: 68 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d  he view to accom
7bb0: 70 6c 69 73 68 20 74 68 65 20 73 61 6d 65 20 74  plish the same t
7bc0: 68 69 6e 67 2e 20 20 56 69 65 77 73 20 61 72 65  hing.  Views are
7bd0: 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74   removed .with t
7be0: 68 65 20 3c 61 20 68 72 65 66 3d 22 23 64 72 6f  he <a href="#dro
7bf0: 70 76 69 65 77 22 3e 44 52 4f 50 20 56 49 45 57  pview">DROP VIEW
7c00: 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f  </a> .command.</
7c10: 70 3e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 43  p>.}..Section {C
7c20: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
7c30: 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62  BLE} {createvtab
7c40: 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63  }..Syntax {sql-c
7c50: 6f 6d 6d 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45  ommand} {.CREATE
7c60: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 5b   VIRTUAL TABLE [
7c70: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
7c80: 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20  .] <table-name> 
7c90: 55 53 49 4e 47 20 3c 6d 6f 64 75 6c 65 2d 6e 61  USING <module-na
7ca0: 6d 65 3e 20 5b 28 20 3c 61 72 67 75 6d 65 6e 74  me> [( <argument
7cb0: 73 3e 20 29 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a  s> )].}..puts {.
7cc0: 3c 70 3e 41 20 76 69 72 74 75 61 6c 20 74 61 62  <p>A virtual tab
7cd0: 6c 65 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  le is an interfa
7ce0: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
7cf0: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
7d00: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
7d10: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
7d20: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
7d30: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
7d40: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
7d50: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
7d60: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
7d70: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
7d80: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
7d90: 20 77 69 74 68 20 61 20 76 69 72 74 75 61 6c 20   with a virtual 
7da0: 74 61 62 6c 65 20 74 68 61 74 20 63 61 6e 20 62  table that can b
7db0: 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f  e done.with an o
7dc0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65  rdinary table, e
7dd0: 78 63 65 70 74 20 74 68 61 74 20 79 6f 75 20 63  xcept that you c
7de0: 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74 72 69  annot create tri
7df0: 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75  ggers on a.virtu
7e00: 61 6c 20 74 61 62 6c 65 2e 20 20 53 6f 6d 65 20  al table.  Some 
7e10: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
7e20: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69  plementations mi
7e30: 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74  ght impose addit
7e40: 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f  ional.restrictio
7e50: 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ns.  For example
7e60: 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74  , many virtual t
7e70: 61 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f  ables are read-o
7e80: 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  nly.</p>..<p>The
7e90: 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65   &lt;module-name
7ea0: 26 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65  &gt; is the name
7eb0: 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   of an object th
7ec0: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68  at implements.th
7ed0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
7ee0: 20 20 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65    The &lt;module
7ef0: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
7f00: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
7f10: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
7f20: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
7f30: 20 75 73 69 6e 67 0a 3c 61 20 68 72 65 66 3d 22   using.<a href="
7f40: 63 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71  capi3ref.html#sq
7f50: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
7f60: 75 6c 65 22 3e 73 71 6c 69 74 65 33 5f 63 72 65  ule">sqlite3_cre
7f70: 61 74 65 5f 6d 6f 64 75 6c 65 3c 2f 61 3e 0a 70  ate_module</a>.p
7f80: 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20  rior to issuing 
7f90: 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
7fa0: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
7fb0: 6e 74 2e 0a 54 68 65 20 6d 6f 64 75 6c 65 20 74  nt..The module t
7fc0: 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  akes zero or mor
7fd0: 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65  e comma-separate
7fe0: 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 54 68 65  d arguments..The
7ff0: 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62   arguments can b
8000: 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79  e just about any
8010: 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73   text as long as
8020: 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64   it has balanced
8030: 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54  .parentheses.  T
8040: 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74  he argument synt
8050: 61 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  ax is sufficient
8060: 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20  ly general that 
8070: 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61  the.arguments ca
8080: 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70  n be made to app
8090: 65 61 72 20 61 73 20 63 6f 6c 75 6d 6e 20 64 65  ear as column de
80a0: 66 69 6e 69 74 69 6f 6e 73 20 69 6e 20 61 20 74  finitions in a t
80b0: 72 61 64 69 74 69 6f 6e 61 6c 0a 3c 61 20 68 72  raditional.<a hr
80c0: 65 66 3d 22 23 63 72 65 61 74 65 74 61 62 6c 65  ef="#createtable
80d0: 22 3e 43 52 45 41 54 45 20 54 41 42 4c 45 3c 2f  ">CREATE TABLE</
80e0: 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a  a> statement.  .
80f0: 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74 68  SQLite passes th
8100: 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  e module argumen
8110: 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74  ts directly.to t
8120: 68 65 20 6d 6f 64 75 6c 65 20 77 69 74 68 6f 75  he module withou
8130: 74 20 61 6e 79 20 69 6e 74 65 72 70 72 65 74 61  t any interpreta
8140: 74 69 6f 6e 2e 20 20 49 74 20 69 73 20 74 68 65  tion.  It is the
8150: 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a   responsibility.
8160: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
8170: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
8180: 70 61 72 73 65 20 61 6e 64 20 69 6e 74 65 72 70  parse and interp
8190: 72 65 74 20 69 74 73 20 6f 77 6e 20 61 72 67 75  ret its own argu
81a0: 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  ments.</p>..<p>A
81b0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
81c0: 73 20 64 65 73 74 72 6f 79 65 64 20 75 73 69 6e  s destroyed usin
81d0: 67 20 74 68 65 20 6f 72 64 69 6e 61 72 79 0a 3c  g the ordinary.<
81e0: 61 20 68 72 65 66 3d 22 23 64 72 6f 70 74 61 62  a href="#droptab
81f0: 6c 65 22 3e 44 52 4f 50 20 54 41 42 4c 45 3c 2f  le">DROP TABLE</
8200: 61 3e 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  a> statement.  T
8210: 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20  here is no.DROP 
8220: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
8230: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 7d 0a 0a  atement.</p>.}..
8240: 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64  Section DELETE d
8250: 65 6c 65 74 65 0a 0a 53 79 6e 74 61 78 20 7b 73  elete..Syntax {s
8260: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
8270: 44 45 4c 45 54 45 20 46 52 4f 4d 20 5b 3c 64 61  DELETE FROM [<da
8280: 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20  tabase-name> .] 
8290: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 57 48  <table-name> [WH
82a0: 45 52 45 20 3c 65 78 70 72 3e 5d 0a 7d 0a 0a 70  ERE <expr>].}..p
82b0: 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44 45 4c  uts {.<p>The DEL
82c0: 45 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  ETE command is u
82d0: 73 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 72 65  sed to remove re
82e0: 63 6f 72 64 73 20 66 72 6f 6d 20 61 20 74 61 62  cords from a tab
82f0: 6c 65 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20  le..The command 
8300: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
8310: 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65  "DELETE FROM" ke
8320: 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20  ywords followed 
8330: 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by.the name of t
8340: 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 68  he table from wh
8350: 69 63 68 20 72 65 63 6f 72 64 73 20 61 72 65 20  ich records are 
8360: 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c  to be removed..<
8370: 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68 6f 75 74 20  /p>..<p>Without 
8380: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20  a WHERE clause, 
8390: 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65 20  all rows of the 
83a0: 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f 76 65  table are remove
83b0: 64 2e 0a 49 66 20 61 20 57 48 45 52 45 20 63 6c  d..If a WHERE cl
83c0: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
83d0: 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73  , then only thos
83e0: 65 20 72 6f 77 73 20 74 68 61 74 20 6d 61 74 63  e rows that matc
83f0: 68 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  h.the expression
8400: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c 2f 70   are removed.</p
8410: 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44  >.}...Section {D
8420: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  ETACH DATABASE} 
8430: 64 65 74 61 63 68 0a 0a 53 79 6e 74 61 78 20 7b  detach..Syntax {
8440: 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44  sql-command} {.D
8450: 45 54 41 43 48 20 5b 44 41 54 41 42 41 53 45 5d  ETACH [DATABASE]
8460: 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e   <database-name>
8470: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68  .}..puts {.<p>Th
8480: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74  is statement det
8490: 61 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f  aches an additio
84a0: 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e  nal database con
84b0: 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73  nection previous
84c0: 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69  ly .attached usi
84d0: 6e 67 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  ng the <a href="
84e0: 23 61 74 74 61 63 68 22 3e 41 54 54 41 43 48 20  #attach">ATTACH 
84f0: 44 41 54 41 42 41 53 45 3c 2f 61 3e 20 73 74 61  DATABASE</a> sta
8500: 74 65 6d 65 6e 74 2e 20 20 49 74 0a 69 73 20 70  tement.  It.is p
8510: 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20  ossible to have 
8520: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
8530: 65 20 66 69 6c 65 20 61 74 74 61 63 68 65 64 20  e file attached 
8540: 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75  multiple times u
8550: 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20  sing .different 
8560: 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63  names, and detac
8570: 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74  hing one connect
8580: 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69  ion to a file wi
8590: 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74  ll leave the .ot
85a0: 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e  hers intact.</p>
85b0: 0a 0a 3c 70 3e 54 68 69 73 20 73 74 61 74 65 6d  ..<p>This statem
85c0: 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  ent will fail if
85d0: 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68   SQLite is in th
85e0: 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
85f0: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d  ansaction.</p>.}
8600: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ...Section {DROP
8610: 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65   INDEX} dropinde
8620: 78 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63  x..Syntax {sql-c
8630: 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 49  ommand} {.DROP I
8640: 4e 44 45 58 20 5b 49 46 20 45 58 49 53 54 53 5d  NDEX [IF EXISTS]
8650: 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65   [<database-name
8660: 3e 20 2e 5d 20 3c 69 6e 64 65 78 2d 6e 61 6d 65  > .] <index-name
8670: 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  >.}..puts {.<p>T
8680: 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74  he DROP INDEX st
8690: 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20  atement removes 
86a0: 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a 77  an index added.w
86b0: 69 74 68 20 74 68 65 20 3c 61 20 68 72 65 66 3d  ith the <a href=
86c0: 22 23 63 72 65 61 74 65 69 6e 64 65 78 22 3e 0a  "#createindex">.
86d0: 43 52 45 41 54 45 20 49 4e 44 45 58 3c 2f 61 3e  CREATE INDEX</a>
86e0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
86f0: 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 69 73 20   index named is 
8700: 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
8710: 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73 6b  ed from.the disk
8720: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79 20  .  The only way 
8730: 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20 69  to recover the i
8740: 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e 74  ndex is to reent
8750: 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61  er the.appropria
8760: 74 65 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  te CREATE INDEX 
8770: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
8780: 3e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20  >The DROP INDEX 
8790: 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e  statement does n
87a0: 6f 74 20 72 65 64 75 63 65 20 74 68 65 20 73 69  ot reduce the si
87b0: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
87c0: 73 65 20 0a 66 69 6c 65 20 69 6e 20 74 68 65 20  se .file in the 
87d0: 64 65 66 61 75 6c 74 20 6d 6f 64 65 2e 0a 45 6d  default mode..Em
87e0: 70 74 79 20 73 70 61 63 65 20 69 6e 20 74 68 65  pty space in the
87f0: 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 74   database is ret
8800: 61 69 6e 65 64 20 66 6f 72 20 6c 61 74 65 72 20  ained for later 
8810: 49 4e 53 45 52 54 73 2e 20 20 54 6f 20 0a 72 65  INSERTs.  To .re
8820: 6d 6f 76 65 20 66 72 65 65 20 73 70 61 63 65 20  move free space 
8830: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  in the database,
8840: 20 75 73 65 20 74 68 65 20 3c 61 20 68 72 65 66   use the <a href
8850: 3d 22 23 76 61 63 75 75 6d 22 3e 56 41 43 55 55  ="#vacuum">VACUU
8860: 4d 3c 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 20  M</a> .command. 
8870: 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 6d   If AUTOVACUUM m
8880: 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 20 66  ode is enabled f
8890: 6f 72 20 61 20 64 61 74 61 62 61 73 65 20 74 68  or a database th
88a0: 65 6e 20 73 70 61 63 65 0a 77 69 6c 6c 20 62 65  en space.will be
88b0: 20 66 72 65 65 64 20 61 75 74 6f 6d 61 74 69 63   freed automatic
88c0: 61 6c 6c 79 20 62 79 20 44 52 4f 50 20 49 4e 44  ally by DROP IND
88d0: 45 58 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74  EX.</p>.}...Sect
88e0: 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d  ion {DROP TABLE}
88f0: 20 64 72 6f 70 74 61 62 6c 65 0a 0a 53 79 6e 74   droptable..Synt
8900: 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d  ax {sql-command}
8910: 20 7b 0a 44 52 4f 50 20 54 41 42 4c 45 20 5b 49   {.DROP TABLE [I
8920: 46 20 45 58 49 53 54 53 5d 20 5b 3c 64 61 74 61  F EXISTS] [<data
8930: 62 61 73 65 2d 6e 61 6d 65 3e 2e 5d 20 3c 74 61  base-name>.] <ta
8940: 62 6c 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74  ble-name>.}..put
8950: 73 20 7b 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20  s {.<p>The DROP 
8960: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
8970: 72 65 6d 6f 76 65 73 20 61 20 74 61 62 6c 65 20  removes a table 
8980: 61 64 64 65 64 20 77 69 74 68 20 74 68 65 20 3c  added with the <
8990: 61 20 68 72 65 66 3d 0a 22 23 63 72 65 61 74 65  a href=."#create
89a0: 74 61 62 6c 65 22 3e 43 52 45 41 54 45 20 54 41  table">CREATE TA
89b0: 42 4c 45 3c 2f 61 3e 20 73 74 61 74 65 6d 65 6e  BLE</a> statemen
89c0: 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
89d0: 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61  cified is the.ta
89e0: 62 6c 65 20 6e 61 6d 65 2e 20 20 49 74 20 69 73  ble name.  It is
89f0: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
8a00: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ved from the dat
8a10: 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64  abase schema and
8a20: 20 74 68 65 20 0a 64 69 73 6b 20 66 69 6c 65 2e   the .disk file.
8a30: 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20    The table can 
8a40: 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64  not be recovered
8a50: 2e 20 20 41 6c 6c 20 69 6e 64 69 63 65 73 20 61  .  All indices a
8a60: 73 73 6f 63 69 61 74 65 64 20 0a 77 69 74 68 20  ssociated .with 
8a70: 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c  the table are al
8a80: 73 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a  so deleted.</p>.
8a90: 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 54 41 42  .<p>The DROP TAB
8aa0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  LE statement doe
8ab0: 73 20 6e 6f 74 20 72 65 64 75 63 65 20 74 68 65  s not reduce the
8ac0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
8ad0: 61 62 61 73 65 20 0a 66 69 6c 65 20 69 6e 20 74  abase .file in t
8ae0: 68 65 20 64 65 66 61 75 6c 74 20 6d 6f 64 65 2e  he default mode.
8af0: 20 20 45 6d 70 74 79 20 73 70 61 63 65 20 69 6e    Empty space in
8b00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
8b10: 20 72 65 74 61 69 6e 65 64 20 66 6f 72 0a 6c 61   retained for.la
8b20: 74 65 72 20 49 4e 53 45 52 54 73 2e 20 20 54 6f  ter INSERTs.  To
8b30: 20 0a 72 65 6d 6f 76 65 20 66 72 65 65 20 73 70   .remove free sp
8b40: 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  ace in the datab
8b50: 61 73 65 2c 20 75 73 65 20 74 68 65 20 3c 61 20  ase, use the <a 
8b60: 68 72 65 66 3d 22 23 76 61 63 75 75 6d 22 3e 56  href="#vacuum">V
8b70: 41 43 55 55 4d 3c 2f 61 3e 20 0a 63 6f 6d 6d 61  ACUUM</a> .comma
8b80: 6e 64 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55  nd.  If AUTOVACU
8b90: 55 4d 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c  UM mode is enabl
8ba0: 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ed for a databas
8bb0: 65 20 74 68 65 6e 20 73 70 61 63 65 0a 77 69 6c  e then space.wil
8bc0: 6c 20 62 65 20 66 72 65 65 64 20 61 75 74 6f 6d  l be freed autom
8bd0: 61 74 69 63 61 6c 6c 79 20 62 79 20 44 52 4f 50  atically by DROP
8be0: 20 54 41 42 4c 45 2e 3c 2f 70 3e 0a 0a 3c 70 3e   TABLE.</p>..<p>
8bf0: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20  The optional IF 
8c00: 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 73 75  EXISTS clause su
8c10: 70 70 72 65 73 73 65 73 20 74 68 65 20 65 72 72  ppresses the err
8c20: 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f  or that would no
8c30: 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66  rmally.result if
8c40: 20 74 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20   the table does 
8c50: 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 7d  not exist.</p>.}
8c60: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ...Section {DROP
8c70: 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74 72   TRIGGER} droptr
8c80: 69 67 67 65 72 0a 53 79 6e 74 61 78 20 7b 73 71  igger.Syntax {sq
8c90: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 44  l-statement} {.D
8ca0: 52 4f 50 20 54 52 49 47 47 45 52 20 5b 49 46 20  ROP TRIGGER [IF 
8cb0: 45 58 49 53 54 53 5d 20 5b 3c 64 61 74 61 62 61  EXISTS] [<databa
8cc0: 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 72 69  se-name> .] <tri
8cd0: 67 67 65 72 2d 6e 61 6d 65 3e 0a 7d 0a 70 75 74  gger-name>.}.put
8ce0: 73 20 7b 20 0a 3c 70 3e 54 68 65 20 44 52 4f 50  s { .<p>The DROP
8cf0: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
8d00: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
8d10: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
8d20: 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 23 63  the .<a href="#c
8d30: 72 65 61 74 65 74 72 69 67 67 65 72 22 3e 43 52  reatetrigger">CR
8d40: 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 61 3e  EATE TRIGGER</a>
8d50: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
8d60: 20 74 72 69 67 67 65 72 20 69 73 20 0a 64 65 6c   trigger is .del
8d70: 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  eted from the da
8d80: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 4e  tabase schema. N
8d90: 6f 74 65 20 74 68 61 74 20 74 72 69 67 67 65 72  ote that trigger
8da0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
8db0: 6c 6c 79 20 0a 64 72 6f 70 70 65 64 20 77 68 65  lly .dropped whe
8dc0: 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  n the associated
8dd0: 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65   table is droppe
8de0: 64 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69  d.</p>.}...Secti
8df0: 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64  on {DROP VIEW} d
8e00: 72 6f 70 76 69 65 77 0a 0a 53 79 6e 74 61 78 20  ropview..Syntax 
8e10: 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a  {sql-command} {.
8e20: 44 52 4f 50 20 56 49 45 57 20 5b 49 46 20 45 58  DROP VIEW [IF EX
8e30: 49 53 54 53 5d 20 3c 76 69 65 77 2d 6e 61 6d 65  ISTS] <view-name
8e40: 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  >.}..puts {.<p>T
8e50: 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
8e60: 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
8e70: 20 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79   view created by
8e80: 20 74 68 65 20 3c 61 20 68 72 65 66 3d 0a 22 23   the <a href=."#
8e90: 63 72 65 61 74 65 76 69 65 77 22 3e 43 52 45 41  createview">CREA
8ea0: 54 45 20 56 49 45 57 3c 2f 61 3e 20 73 74 61 74  TE VIEW</a> stat
8eb0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65  ement.  The name
8ec0: 20 73 70 65 63 69 66 69 65 64 20 69 73 20 74 68   specified is th
8ed0: 65 20 0a 76 69 65 77 20 6e 61 6d 65 2e 20 20 49  e .view name.  I
8ee0: 74 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f  t is removed fro
8ef0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  m the database s
8f00: 63 68 65 6d 61 2c 20 62 75 74 20 6e 6f 20 61 63  chema, but no ac
8f10: 74 75 61 6c 20 64 61 74 61 20 0a 69 6e 20 74 68  tual data .in th
8f20: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73  e underlying bas
8f30: 65 20 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69  e tables is modi
8f40: 66 69 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a 0a 53 65  fied.</p>.}...Se
8f50: 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78  ction EXPLAIN ex
8f60: 70 6c 61 69 6e 0a 0a 53 79 6e 74 61 78 20 7b 73  plain..Syntax {s
8f70: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
8f80: 45 58 50 4c 41 49 4e 20 3c 73 71 6c 2d 73 74 61  EXPLAIN <sql-sta
8f90: 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20  tement>.}..puts 
8fa0: 7b 0a 3c 70 3e 54 68 65 20 45 58 50 4c 41 49 4e  {.<p>The EXPLAIN
8fb0: 20 63 6f 6d 6d 61 6e 64 20 6d 6f 64 69 66 69 65   command modifie
8fc0: 72 20 69 73 20 61 20 6e 6f 6e 2d 73 74 61 6e 64  r is a non-stand
8fd0: 61 72 64 20 65 78 74 65 6e 73 69 6f 6e 2e 20 20  ard extension.  
8fe0: 54 68 65 0a 69 64 65 61 20 63 6f 6d 65 73 20 66  The.idea comes f
8ff0: 72 6f 6d 20 61 20 73 69 6d 69 6c 61 72 20 63 6f  rom a similar co
9000: 6d 6d 61 6e 64 20 66 6f 75 6e 64 20 69 6e 20 50  mmand found in P
9010: 6f 73 74 67 72 65 53 51 4c 2c 20 62 75 74 20 74  ostgreSQL, but t
9020: 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 69 73 20  he operation.is 
9030: 63 6f 6d 70 6c 65 74 65 6c 79 20 64 69 66 66 65  completely diffe
9040: 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  rent.</p>..<p>If
9050: 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
9060: 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 66  word appears bef
9070: 6f 72 65 20 61 6e 79 20 6f 74 68 65 72 20 53 51  ore any other SQ
9080: 4c 69 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  Lite SQL command
9090: 0a 74 68 65 6e 20 69 6e 73 74 65 61 64 20 6f 66  .then instead of
90a0: 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
90b0: 69 6e 67 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2c  ing the command,
90c0: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
90d0: 61 72 79 20 77 69 6c 6c 0a 72 65 70 6f 72 74 20  ary will.report 
90e0: 62 61 63 6b 20 74 68 65 20 73 65 71 75 65 6e 63  back the sequenc
90f0: 65 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63  e of virtual mac
9100: 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  hine instruction
9110: 73 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 0a  s it would have.
9120: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
9130: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20  the command had 
9140: 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
9150: 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
9160: 73 65 6e 74 2e 0a 46 6f 72 20 61 64 64 69 74 69  sent..For additi
9170: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
9180: 20 61 62 6f 75 74 20 76 69 72 74 75 61 6c 20 6d   about virtual m
9190: 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69  achine instructi
91a0: 6f 6e 73 20 73 65 65 0a 74 68 65 20 3c 61 20 68  ons see.the <a h
91b0: 72 65 66 3d 22 61 72 63 68 2e 68 74 6d 6c 22 3e  ref="arch.html">
91c0: 61 72 63 68 69 74 65 63 74 75 72 65 20 64 65 73  architecture des
91d0: 63 72 69 70 74 69 6f 6e 3c 2f 61 3e 20 6f 72 20  cription</a> or 
91e0: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
91f0: 6e 0a 6f 6e 20 3c 61 20 68 72 65 66 3d 22 6f 70  n.on <a href="op
9200: 63 6f 64 65 2e 68 74 6d 6c 22 3e 61 76 61 69 6c  code.html">avail
9210: 61 62 6c 65 20 6f 70 63 6f 64 65 73 3c 2f 61 3e  able opcodes</a>
9220: 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
9230: 20 6d 61 63 68 69 6e 65 2e 3c 2f 70 3e 0a 7d 0a   machine.</p>.}.
9240: 0a 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  ..Section expres
9250: 73 69 6f 6e 20 65 78 70 72 0a 0a 53 79 6e 74 61  sion expr..Synta
9260: 78 20 7b 65 78 70 72 7d 20 7b 0a 3c 65 78 70 72  x {expr} {.<expr
9270: 3e 20 3c 62 69 6e 61 72 79 2d 6f 70 3e 20 3c 65  > <binary-op> <e
9280: 78 70 72 3e 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e  xpr> |.<expr> [N
9290: 4f 54 5d 20 3c 6c 69 6b 65 2d 6f 70 3e 20 3c 65  OT] <like-op> <e
92a0: 78 70 72 3e 20 5b 45 53 43 41 50 45 20 3c 65 78  xpr> [ESCAPE <ex
92b0: 70 72 3e 5d 20 7c 0a 3c 75 6e 61 72 79 2d 6f 70  pr>] |.<unary-op
92c0: 3e 20 3c 65 78 70 72 3e 20 7c 0a 28 20 3c 65 78  > <expr> |.( <ex
92d0: 70 72 3e 20 29 20 7c 0a 3c 63 6f 6c 75 6d 6e 2d  pr> ) |.<column-
92e0: 6e 61 6d 65 3e 20 7c 0a 3c 74 61 62 6c 65 2d 6e  name> |.<table-n
92f0: 61 6d 65 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d 6e  ame> . <column-n
9300: 61 6d 65 3e 20 7c 0a 3c 64 61 74 61 62 61 73 65  ame> |.<database
9310: 2d 6e 61 6d 65 3e 20 2e 20 3c 74 61 62 6c 65 2d  -name> . <table-
9320: 6e 61 6d 65 3e 20 2e 20 3c 63 6f 6c 75 6d 6e 2d  name> . <column-
9330: 6e 61 6d 65 3e 20 7c 0a 3c 6c 69 74 65 72 61 6c  name> |.<literal
9340: 2d 76 61 6c 75 65 3e 20 7c 0a 3c 70 61 72 61 6d  -value> |.<param
9350: 65 74 65 72 3e 20 7c 0a 3c 66 75 6e 63 74 69 6f  eter> |.<functio
9360: 6e 2d 6e 61 6d 65 3e 20 28 20 3c 65 78 70 72 2d  n-name> ( <expr-
9370: 6c 69 73 74 3e 20 7c 20 53 54 41 52 20 29 20 7c  list> | STAR ) |
9380: 0a 3c 65 78 70 72 3e 20 49 53 4e 55 4c 4c 20 7c  .<expr> ISNULL |
9390: 0a 3c 65 78 70 72 3e 20 4e 4f 54 4e 55 4c 4c 20  .<expr> NOTNULL 
93a0: 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20 42  |.<expr> [NOT] B
93b0: 45 54 57 45 45 4e 20 3c 65 78 70 72 3e 20 41 4e  ETWEEN <expr> AN
93c0: 44 20 3c 65 78 70 72 3e 20 7c 0a 3c 65 78 70 72  D <expr> |.<expr
93d0: 3e 20 5b 4e 4f 54 5d 20 49 4e 20 28 20 3c 76 61  > [NOT] IN ( <va
93e0: 6c 75 65 2d 6c 69 73 74 3e 20 29 20 7c 0a 3c 65  lue-list> ) |.<e
93f0: 78 70 72 3e 20 5b 4e 4f 54 5d 20 49 4e 20 28 20  xpr> [NOT] IN ( 
9400: 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e  <select-statemen
9410: 74 3e 20 29 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e  t> ) |.<expr> [N
9420: 4f 54 5d 20 49 4e 20 5b 3c 64 61 74 61 62 61 73  OT] IN [<databas
9430: 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
9440: 65 2d 6e 61 6d 65 3e 20 7c 0a 5b 45 58 49 53 54  e-name> |.[EXIST
9450: 53 5d 20 28 20 3c 73 65 6c 65 63 74 2d 73 74 61  S] ( <select-sta
9460: 74 65 6d 65 6e 74 3e 20 29 20 7c 0a 43 41 53 45  tement> ) |.CASE
9470: 20 5b 3c 65 78 70 72 3e 5d 20 4c 50 20 57 48 45   [<expr>] LP WHE
9480: 4e 20 3c 65 78 70 72 3e 20 54 48 45 4e 20 3c 65  N <expr> THEN <e
9490: 78 70 72 3e 20 52 50 50 4c 55 53 20 5b 45 4c 53  xpr> RPPLUS [ELS
94a0: 45 20 3c 65 78 70 72 3e 5d 20 45 4e 44 20 7c 0a  E <expr>] END |.
94b0: 43 41 53 54 20 28 20 3c 65 78 70 72 3e 20 41 53  CAST ( <expr> AS
94c0: 20 3c 74 79 70 65 3e 20 29 0a 7d 20 7b 6c 69 6b   <type> ).} {lik
94d0: 65 2d 6f 70 7d 20 7b 0a 4c 49 4b 45 20 7c 20 47  e-op} {.LIKE | G
94e0: 4c 4f 42 20 7c 20 52 45 47 45 58 50 20 7c 20 4d  LOB | REGEXP | M
94f0: 41 54 43 48 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ATCH.}..puts {.<
9500: 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69  p>This section i
9510: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
9520: 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f   the others.  Mo
9530: 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e  st other section
9540: 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65  s of.this docume
9550: 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61  nt talks about a
9560: 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20   particular SQL 
9570: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73  command.  This s
9580: 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20  ection does.not 
9590: 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61  talk about a sta
95a0: 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20  ndalone command 
95b0: 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72 65  but about "expre
95c0: 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72  ssions" which ar
95d0: 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73  e .subcomponents
95e0: 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
95f0: 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 70  ommands.</p>..<p
9600: 3e 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  >SQLite understa
9610: 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
9620: 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
9630: 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
9640: 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
9650: 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
9660: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
9670: 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
9680: 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
9690: 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
96a0: 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
96b0: 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
96c0: 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
96d0: 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
96e0: 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
96f0: 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
9700: 20 3c 2f 62 69 67 3e 49 4e 0a 41 4e 44 20 20 20   </big>IN.AND   
9710: 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  .OR</font>.</pre
9720: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
9730: 3c 70 3e 53 75 70 70 6f 72 74 65 64 20 75 6e 61  <p>Supported una
9740: 72 79 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65  ry operators are
9750: 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c   these:</p>..<bl
9760: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c  ockquote><pre>.<
9770: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32  font color="#2c2
9780: 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20 2b  cf0"><big>-    +
9790: 20 20 20 20 21 20 20 20 20 7e 20 20 20 20 4e 4f      !    ~    NO
97a0: 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c  T</big></font>.<
97b0: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
97c0: 65 3e 0a 0a 3c 70 3e 54 68 65 20 75 6e 61 72 79  e>..<p>The unary
97d0: 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61   operator [Opera
97e0: 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f  tor +] is a no-o
97f0: 70 2e 20 20 49 74 20 63 61 6e 20 62 65 20 61 70  p.  It can be ap
9800: 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73  plied.to strings
9810: 2c 20 6e 75 6d 62 65 72 73 2c 20 6f 72 20 62 6c  , numbers, or bl
9820: 6f 62 73 20 61 6e 64 20 69 74 20 61 6c 77 61 79  obs and it alway
9830: 73 20 67 69 76 65 73 20 61 73 20 69 74 73 20 72  s gives as its r
9840: 65 73 75 6c 74 20 74 68 65 0a 76 61 6c 75 65 20  esult the.value 
9850: 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c  of the operand.<
9860: 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  /p>..<p>Note tha
9870: 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  t there are two 
9880: 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68  variations of th
9890: 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74  e equals and not
98a0: 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72   equals.operator
98b0: 73 2e 20 20 45 71 75 61 6c 73 20 63 61 6e 20 62  s.  Equals can b
98c0: 65 20 65 69 74 68 65 72 7d 0a 70 75 74 73 20 22  e either}.puts "
98d0: 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20  [Operator =] or 
98e0: 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 54  [Operator ==]..T
98f0: 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
9900: 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
9910: 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
9920: 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
9930: 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 54 68 65  {&lt;&gt;}]..The
9940: 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f   [Operator ||] o
9950: 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e  perator is \"con
9960: 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20  catenate\" - it 
9970: 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74  joins together.t
9980: 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f  he two strings o
9990: 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a  f its operands..
99a0: 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70  The operator [Op
99b0: 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74  erator %] output
99c0: 73 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  s the remainder 
99d0: 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65  of its left .ope
99e0: 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20  rand modulo its 
99f0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f  right operand.</
9a00: 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73 75 6c  p>..<p>The resul
9a10: 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20  t of any binary 
9a20: 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 6e 75  operator is a nu
9a30: 6d 65 72 69 63 20 76 61 6c 75 65 2c 20 65 78 63  meric value, exc
9a40: 65 70 74 0a 66 6f 72 20 74 68 65 20 5b 4f 70 65  ept.for the [Ope
9a50: 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74  rator ||] concat
9a60: 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  enation operator
9a70: 20 77 68 69 63 68 20 67 69 76 65 73 20 61 20 73   which gives a s
9a80: 74 72 69 6e 67 0a 72 65 73 75 6c 74 2e 3c 2f 70  tring.result.</p
9a90: 3e 22 0a 0a 70 75 74 73 20 7b 0a 0a 3c 61 20 6e  >"..puts {..<a n
9aa0: 61 6d 65 3d 22 6c 69 74 65 72 61 6c 5f 76 61 6c  ame="literal_val
9ab0: 75 65 22 3e 3c 2f 61 3e 0a 3c 70 3e 0a 41 20 6c  ue"></a>.<p>.A l
9ac0: 69 74 65 72 61 6c 20 76 61 6c 75 65 20 69 73 20  iteral value is 
9ad0: 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65  an integer numbe
9ae0: 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 20  r or a floating 
9af0: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 53 63  point number..Sc
9b00: 69 65 6e 74 69 66 69 63 20 6e 6f 74 61 74 69 6f  ientific notatio
9b10: 6e 20 69 73 20 73 75 70 70 6f 72 74 65 64 2e 20  n is supported. 
9b20: 20 54 68 65 20 22 2e 22 20 63 68 61 72 61 63 74   The "." charact
9b30: 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73 65  er is always use
9b40: 64 0a 61 73 20 74 68 65 20 64 65 63 69 6d 61 6c  d.as the decimal
9b50: 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66 20 74   point even if t
9b60: 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e  he locale settin
9b70: 67 20 73 70 65 63 69 66 69 65 73 20 22 2c 22 20  g specifies "," 
9b80: 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20 2d 20  for.this role - 
9b90: 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22 20 66  the use of "," f
9ba0: 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70  or the decimal p
9bb0: 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73 75 6c  oint would resul
9bc0: 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63 20 61  t in.syntactic a
9bd0: 6d 62 69 67 75 69 74 79 2e 20 20 41 20 73 74 72  mbiguity.  A str
9be0: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  ing constant is 
9bf0: 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73  formed by enclos
9c00: 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20 69  ing the.string i
9c10: 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  n single quotes 
9c20: 28 27 29 2e 20 20 41 20 73 69 6e 67 6c 65 20 71  (').  A single q
9c30: 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68 65 20  uote within the 
9c40: 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e  string can.be en
9c50: 63 6f 64 65 64 20 62 79 20 70 75 74 74 69 6e 67  coded by putting
9c60: 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74   two single quot
9c70: 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20 61 73  es in a row - as
9c80: 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74   in Pascal..C-st
9c90: 79 6c 65 20 65 73 63 61 70 65 73 20 75 73 69 6e  yle escapes usin
9ca0: 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73 68 20  g the backslash 
9cb0: 63 68 61 72 61 63 74 65 72 20 61 72 65 20 6e 6f  character are no
9cc0: 74 20 73 75 70 70 6f 72 74 65 64 20 62 65 63 61  t supported beca
9cd0: 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e 6f 74  use.they are not
9ce0: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 0a 42   standard SQL..B
9cf0: 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72 65  LOB literals are
9d00: 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 73   string literals
9d10: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78 61   containing hexa
9d20: 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e 64  decimal data and
9d30: 0a 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73  .preceded by a s
9d40: 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58 22  ingle "x" or "X"
9d50: 20 63 68 61 72 61 63 74 65 72 2e 20 20 46 6f 72   character.  For
9d60: 20 65 78 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c   example:</p>..<
9d70: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
9d80: 0a 58 27 35 33 35 31 34 36 39 37 34 36 35 27 0a  .X'53514697465'.
9d90: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
9da0: 74 65 3e 0a 0a 3c 70 3e 0a 41 20 6c 69 74 65 72  te>..<p>.A liter
9db0: 61 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73  al value can als
9dc0: 6f 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22  o be the token "
9dd0: 4e 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  NULL"..</p>..<p>
9de0: 0a 41 20 70 61 72 61 6d 65 74 65 72 20 73 70 65  .A parameter spe
9df0: 63 69 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f  cifies a placeho
9e00: 6c 64 65 72 20 69 6e 20 74 68 65 20 65 78 70 72  lder in the expr
9e10: 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 6c 69 74  ession for a lit
9e20: 65 72 61 6c 0a 76 61 6c 75 65 20 74 68 61 74 20  eral.value that 
9e30: 69 73 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20  is filled in at 
9e40: 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68  runtime using th
9e50: 65 0a 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33  e.<a href="capi3
9e60: 72 65 66 2e 68 74 6d 6c 23 73 71 6c 69 74 65 33  ref.html#sqlite3
9e70: 5f 62 69 6e 64 5f 69 6e 74 22 3e 73 71 6c 69 74  _bind_int">sqlit
9e80: 65 33 5f 62 69 6e 64 3c 2f 61 3e 20 41 50 49 2e  e3_bind</a> API.
9e90: 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20  .Parameters can 
9ea0: 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72  take several for
9eb0: 6d 73 3a 0a 3c 2f 70 0a 0a 3c 62 6c 6f 63 6b 71  ms:.</p..<blockq
9ec0: 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74  uote>.<table>.<t
9ed0: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
9ee0: 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
9ef0: 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e  "><b>?</b><i>NNN
9f00: 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
9f10: 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
9f20: 64 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72  d>A question mar
9f30: 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  k followed by a 
9f40: 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69  number <i>NNN</i
9f50: 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  > holds a spot f
9f60: 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61  or the.NNN-th pa
9f70: 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75  rameter.  NNN mu
9f80: 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  st be between 1 
9f90: 61 6e 64 20 39 39 39 2e 3c 2f 74 64 3e 0a 3c 2f  and 999.</td>.</
9fa0: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
9fb0: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
9fc0: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
9fd0: 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
9fe0: 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20  20"></td>.<td>A 
9ff0: 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
a000: 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
a010: 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 68  ed by a number h
a020: 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 0a  olds a spot for.
a030: 74 68 65 20 6e 65 78 74 20 75 6e 75 73 65 64 20  the next unused 
a040: 70 61 72 61 6d 65 74 65 72 2e 3c 2f 74 64 3e 0a  parameter.</td>.
a050: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
a060: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
a070: 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f  ign="top"><b>:</
a080: 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
a090: 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
a0a0: 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 63 6f 6c  ></td>.<td>A col
a0b0: 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  on followed by a
a0c0: 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
a0d0: 65 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66  e holds a spot f
a0e0: 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d  or a named.param
a0f0: 65 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61  eter with the na
a100: 6d 65 20 41 41 41 41 2e 20 20 4e 61 6d 65 64 20  me AAAA.  Named 
a110: 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61  parameters are a
a120: 6c 73 6f 20 6e 75 6d 62 65 72 65 64 2e 0a 54 68  lso numbered..Th
a130: 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65  e number assigne
a140: 64 20 69 73 20 74 68 65 20 6e 65 78 74 20 75 6e  d is the next un
a150: 75 73 65 64 20 6e 75 6d 62 65 72 2e 20 20 54 6f  used number.  To
a160: 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
a170: 2c 0a 69 74 20 69 73 20 62 65 73 74 20 74 6f 20  ,.it is best to 
a180: 61 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d  avoid mixing nam
a190: 65 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 20  ed and numbered 
a1a0: 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e  parameters.</td>
a1b0: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20  .</tr>.<tr>.<td 
a1c0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61  align="right" va
a1d0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c  lign="top"><b>@<
a1e0: 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f  /b><i>AAAA</i></
a1f0: 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
a200: 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 6e 20 22  "></td>.<td>An "
a210: 61 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65  at" sign works e
a220: 78 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f  xactly like a co
a230: 6c 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  lon.</td>.</tr>.
a240: 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
a250: 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
a260: 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41  op"><b>$</b><i>A
a270: 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
a280: 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
a290: 0a 3c 74 64 3e 41 20 64 6f 6c 6c 61 72 2d 73 69  .<td>A dollar-si
a2a0: 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  gn followed by a
a2b0: 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  n identifier nam
a2c0: 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73  e also holds a s
a2d0: 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a  pot for a named.
a2e0: 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74  parameter with t
a2f0: 68 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 54  he name AAAA.  T
a300: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61  he identifier na
a310: 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20  me in this case 
a320: 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20  can include.one 
a330: 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 61 6e 63  or more occuranc
a340: 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61  es of "::" and a
a350: 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64   suffix enclosed
a360: 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74   in "(...)" cont
a370: 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20  aining.any text 
a380: 61 74 20 61 6c 6c 2e 20 20 54 68 69 73 20 73 79  at all.  This sy
a390: 6e 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d  ntax is the form
a3a0: 20 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e   of a variable n
a3b0: 61 6d 65 20 69 6e 20 74 68 65 20 54 63 6c 0a 70  ame in the Tcl.p
a3c0: 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
a3d0: 61 67 65 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  age.</td>.</tr>.
a3e0: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
a3f0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 50 61 72 61 6d  quote>..<p>Param
a400: 65 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e  eters that are n
a410: 6f 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75  ot assigned valu
a420: 65 73 20 75 73 69 6e 67 0a 3c 61 20 68 72 65 66  es using.<a href
a430: 3d 22 63 61 70 69 33 72 65 66 2e 68 74 6d 6c 23  ="capi3ref.html#
a440: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
a450: 22 3e 73 71 6c 69 74 65 33 5f 62 69 6e 64 3c 2f  ">sqlite3_bind</
a460: 61 3e 20 61 72 65 20 74 72 65 61 74 65 64 0a 61  a> are treated.a
a470: 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 61 20  s NULL.</p>..<a 
a480: 6e 61 6d 65 3d 22 6c 69 6b 65 22 3e 3c 2f 61 3e  name="like"></a>
a490: 0a 3c 70 3e 54 68 65 20 4c 49 4b 45 20 6f 70 65  .<p>The LIKE ope
a4a0: 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61 74  rator does a pat
a4b0: 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f  tern matching co
a4c0: 6d 70 61 72 69 73 6f 6e 2e 20 54 68 65 20 6f 70  mparison. The op
a4d0: 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67  erand.to the rig
a4e0: 68 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ht contains the 
a4f0: 70 61 74 74 65 72 6e 2c 20 74 68 65 20 6c 65 66  pattern, the lef
a500: 74 20 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 63  t hand operand c
a510: 6f 6e 74 61 69 6e 73 20 74 68 65 0a 73 74 72 69  ontains the.stri
a520: 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
a530: 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e  nst the pattern.
a540: 20 0a 7d 0a 70 75 74 73 20 22 41 20 70 65 72 63   .}.puts "A perc
a550: 65 6e 74 20 73 79 6d 62 6f 6c 20 5b 4f 70 65 72  ent symbol [Oper
a560: 61 74 6f 72 20 25 5d 20 69 6e 20 74 68 65 20 70  ator %] in the p
a570: 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61  attern matches a
a580: 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20 7a  ny.sequence of z
a590: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61 72  ero or more char
a5a0: 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73 74  acters in the st
a5b0: 72 69 6e 67 2e 20 20 41 6e 20 75 6e 64 65 72 73  ring.  An unders
a5c0: 63 6f 72 65 0a 5b 4f 70 65 72 61 74 6f 72 20 5f  core.[Operator _
a5d0: 5d 20 69 6e 20 74 68 65 20 70 61 74 74 65 72 6e  ] in the pattern
a5e0: 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69 6e   matches any sin
a5f0: 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 69 6e  gle character in
a600: 20 74 68 65 0a 73 74 72 69 6e 67 2e 20 20 41 6e   the.string.  An
a610: 79 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65  y other characte
a620: 72 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66  r matches itself
a630: 20 6f 72 20 69 74 27 73 20 6c 6f 77 65 72 2f 75   or it's lower/u
a640: 70 70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61  pper case.equiva
a650: 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d  lent (i.e. case-
a660: 69 6e 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63  insensitive matc
a670: 68 69 6e 67 29 2e 20 20 28 41 20 62 75 67 3a 20  hing).  (A bug: 
a680: 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65  SQLite only.unde
a690: 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f  rstands upper/lo
a6a0: 77 65 72 20 63 61 73 65 20 66 6f 72 20 37 2d 62  wer case for 7-b
a6b0: 69 74 20 4c 61 74 69 6e 20 63 68 61 72 61 63 74  it Latin charact
a6c0: 65 72 73 2e 20 20 48 65 6e 63 65 20 74 68 65 0a  ers.  Hence the.
a6d0: 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LIKE operator is
a6e0: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
a6f0: 66 6f 72 20 38 2d 62 69 74 20 69 73 6f 38 38 35  for 8-bit iso885
a700: 39 20 63 68 61 72 61 63 74 65 72 73 20 6f 72 20  9 characters or 
a710: 55 54 46 2d 38 0a 63 68 61 72 61 63 74 65 72 73  UTF-8.characters
a720: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
a730: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c  the expression <
a740: 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26  b>'a'&nbsp;LIKE&
a750: 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20  nbsp;'A'</b>.is 
a760: 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65  TRUE but <b>'&ae
a770: 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26  lig;'&nbsp;LIKE&
a780: 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f  nbsp;'&AElig;'</
a790: 62 3e 20 69 73 20 46 41 4c 53 45 2e 29 2e 3c 2f  b> is FALSE.).</
a7a0: 70 3e 22 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 49  p>"..puts {.<p>I
a7b0: 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
a7c0: 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
a7d0: 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
a7e0: 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c  e expression.fol
a7f0: 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50  lowing the ESCAP
a800: 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65  E keyword must e
a810: 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72  valuate to a str
a820: 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  ing consisting o
a830: 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61  f.a single chara
a840: 63 74 65 72 2e 20 54 68 69 73 20 63 68 61 72 61  cter. This chara
a850: 63 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64  cter may be used
a860: 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74   in the LIKE pat
a870: 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20  tern.to include 
a880: 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20  literal percent 
a890: 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68  or underscore ch
a8a0: 61 72 61 63 74 65 72 73 2e 20 54 68 65 20 65 73  aracters. The es
a8b0: 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66  cape.character f
a8c0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72  ollowed by a per
a8d0: 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64  cent symbol, und
a8e0: 65 72 73 63 6f 72 65 20 6f 72 20 69 74 73 65 6c  erscore or itsel
a8f0: 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65  f matches a.lite
a900: 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62  ral percent symb
a910: 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 6f  ol, underscore o
a920: 72 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  r escape charact
a930: 65 72 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  er in the string
a940: 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  ,.respectively. 
a950: 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f  The infix LIKE o
a960: 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65  perator is imple
a970: 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
a980: 67 20 74 68 65 0a 75 73 65 72 20 66 75 6e 63 74  g the.user funct
a990: 69 6f 6e 20 3c 61 20 68 72 65 66 3d 22 23 6c 69  ion <a href="#li
a9a0: 6b 65 46 75 6e 63 22 3e 20 6c 69 6b 65 28 3c 69  keFunc"> like(<i
a9b0: 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29  >X</i>,<i>Y</i>)
a9c0: 3c 2f 61 3e 2e 3c 2f 70 3e 0a 7d 0a 0a 70 75 74  </a>.</p>.}..put
a9d0: 73 20 7b 0a 54 68 65 20 4c 49 4b 45 20 6f 70 65  s {.The LIKE ope
a9e0: 72 61 74 6f 72 20 69 73 20 6e 6f 74 20 63 61 73  rator is not cas
a9f0: 65 20 73 65 6e 73 69 74 69 76 65 20 61 6e 64 20  e sensitive and 
aa00: 77 69 6c 6c 20 6d 61 74 63 68 20 75 70 70 65 72  will match upper
aa10: 20 63 61 73 65 0a 63 68 61 72 61 63 74 65 72 73   case.characters
aa20: 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 67 61   on one side aga
aa30: 69 6e 73 74 20 6c 6f 77 65 72 20 63 61 73 65 20  inst lower case 
aa40: 63 68 61 72 61 63 74 65 72 73 20 6f 6e 20 74 68  characters on th
aa50: 65 20 6f 74 68 65 72 2e 20 20 0a 28 41 20 62 75  e other.  .(A bu
aa60: 67 3a 20 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75  g: SQLite only u
aa70: 6e 64 65 72 73 74 61 6e 64 73 20 75 70 70 65 72  nderstands upper
aa80: 2f 6c 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20  /lower case for 
aa90: 37 2d 62 69 74 20 4c 61 74 69 6e 0a 63 68 61 72  7-bit Latin.char
aaa0: 61 63 74 65 72 73 2e 20 20 48 65 6e 63 65 20 74  acters.  Hence t
aab0: 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
aac0: 20 69 73 20 63 61 73 65 20 73 65 6e 73 69 74 69   is case sensiti
aad0: 76 65 20 66 6f 72 20 38 2d 62 69 74 0a 69 73 6f  ve for 8-bit.iso
aae0: 38 38 35 39 20 63 68 61 72 61 63 74 65 72 73 20  8859 characters 
aaf0: 6f 72 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  or UTF-8 charact
ab00: 65 72 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ers.  For exampl
ab10: 65 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  e, the expressio
ab20: 6e 0a 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49  n.<b>'a'&nbsp;LI
ab30: 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 20  KE&nbsp;'A'</b> 
ab40: 69 73 20 54 52 55 45 20 62 75 74 0a 3c 62 3e 27  is TRUE but.<b>'
ab50: 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49  &aelig;'&nbsp;LI
ab60: 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b  KE&nbsp;'&AElig;
ab70: 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29  '</b> is FALSE.)
ab80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e  .</p>..<p>The in
ab90: 66 69 78 20 4c 49 4b 45 0a 6f 70 65 72 61 74 6f  fix LIKE.operato
aba0: 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  r is implemented
abb0: 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20   by calling the 
abc0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 3c 61  user function <a
abd0: 20 68 72 65 66 3d 22 23 6c 69 6b 65 46 75 6e 63   href="#likeFunc
abe0: 22 3e 0a 6c 69 6b 65 28 3c 69 3e 58 3c 2f 69 3e  ">.like(<i>X</i>
abf0: 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e 2e 20  ,<i>Y</i>)</a>. 
ac00: 20 49 66 20 61 6e 20 45 53 43 41 50 45 20 63 6c   If an ESCAPE cl
ac10: 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c  ause is present,
ac20: 20 69 74 20 61 64 64 73 0a 61 20 74 68 69 72 64   it adds.a third
ac30: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68   parameter to th
ac40: 65 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e  e function call.
ac50: 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   If the function
ac60: 61 6c 69 74 79 20 6f 66 20 4c 49 4b 45 20 63 61  ality of LIKE ca
ac70: 6e 20 62 65 0a 6f 76 65 72 72 69 64 64 65 6e 20  n be.overridden 
ac80: 62 79 20 64 65 66 69 6e 69 6e 67 20 61 6e 20 61  by defining an a
ac90: 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
aca0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
acb0: 0a 6c 69 6b 65 28 29 20 53 51 4c 20 66 75 6e 63  .like() SQL func
acc0: 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a  tion.</p>.</p>..
acd0: 3c 61 20 6e 61 6d 65 3d 22 67 6c 6f 62 22 3e 3c  <a name="glob"><
ace0: 2f 61 3e 0a 3c 70 3e 54 68 65 20 47 4c 4f 42 20  /a>.<p>The GLOB 
acf0: 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
ad00: 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
ad10: 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
ad20: 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
ad30: 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
ad40: 61 72 64 73 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f  ards.  Also, GLO
ad50: 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74  B is case.sensit
ad60: 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45  ive, unlike LIKE
ad70: 2e 20 20 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64  .  Both GLOB and
ad80: 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65   LIKE may be pre
ad90: 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54  ceded by.the NOT
ada0: 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65   keyword to inve
adb0: 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20  rt the sense of 
adc0: 74 68 65 20 74 65 73 74 2e 20 20 54 68 65 20 69  the test.  The i
add0: 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61  nfix GLOB .opera
ade0: 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
adf0: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
ae00: 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e user function 
ae10: 3c 61 20 68 72 65 66 3d 22 23 67 6c 6f 62 46 75  <a href="#globFu
ae20: 6e 63 22 3e 0a 67 6c 6f 62 28 3c 69 3e 58 3c 2f  nc">.glob(<i>X</
ae30: 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61 3e  i>,<i>Y</i>)</a>
ae40: 20 61 6e 64 20 63 61 6e 20 62 65 20 6d 6f 64 69   and can be modi
ae50: 66 69 65 64 20 62 79 20 6f 76 65 72 72 69 64 69  fied by overridi
ae60: 6e 67 0a 74 68 61 74 20 66 75 6e 63 74 69 6f 6e  ng.that function
ae70: 2e 3c 2f 70 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22  .</p>..<a name="
ae80: 72 65 67 65 78 70 22 3e 3c 2f 61 3e 0a 3c 70 3e  regexp"></a>.<p>
ae90: 54 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61  The REGEXP opera
aea0: 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c  tor is a special
aeb0: 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
aec0: 72 65 67 65 78 70 28 29 0a 75 73 65 72 20 66 75  regexp().user fu
aed0: 6e 63 74 69 6f 6e 2e 20 20 4e 6f 20 72 65 67 65  nction.  No rege
aee0: 78 70 28 29 20 75 73 65 72 20 66 75 6e 63 74 69  xp() user functi
aef0: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
af00: 20 64 65 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20   default.and so 
af10: 75 73 65 20 6f 66 20 74 68 65 20 52 45 47 45 58  use of the REGEX
af20: 50 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20  P operator will 
af30: 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20  normally result 
af40: 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73  in an.error mess
af50: 61 67 65 2e 20 20 49 66 20 61 20 75 73 65 72 2d  age.  If a user-
af60: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
af70: 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70 22 0a   named "regexp".
af80: 69 73 20 61 64 64 65 64 20 61 74 20 72 75 6e 2d  is added at run-
af90: 74 69 6d 65 2c 20 74 68 61 74 20 66 75 6e 63 74  time, that funct
afa0: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c  ion will be call
afb0: 65 64 20 69 6e 20 6f 72 64 65 72 0a 74 6f 20 69  ed in order.to i
afc0: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 52 45 47  mplement the REG
afd0: 45 58 50 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70  EXP operator.</p
afe0: 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22 6d 61 74 63  >..<a name="matc
aff0: 68 22 3e 3c 2f 61 3e 0a 3c 70 3e 54 68 65 20 4d  h"></a>.<p>The M
b000: 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73  ATCH operator is
b010: 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
b020: 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28  x for the match(
b030: 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  ).user function.
b040: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61    The default ma
b050: 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  tch() function i
b060: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61  mplementation.ra
b070: 69 73 65 73 20 61 6e 64 20 65 78 63 65 70 74 69  ises and excepti
b080: 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65  on and is not re
b090: 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20  ally useful for 
b0a0: 61 6e 79 74 68 69 6e 67 2e 0a 42 75 74 20 65 78  anything..But ex
b0b0: 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65  tensions can ove
b0c0: 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28  rride the match(
b0d0: 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
b0e0: 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67  more.helpful log
b0f0: 69 63 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f  ic.</p>..<p>A co
b100: 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65  lumn name can be
b110: 20 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d 65   any of the name
b120: 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65  s defined in the
b130: 20 43 52 45 41 54 45 20 54 41 42 4c 45 0a 73 74   CREATE TABLE.st
b140: 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f  atement or one o
b150: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
b160: 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69  special identifi
b170: 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f  ers: "<b>ROWID</
b180: 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e  b>",."<b>OID</b>
b190: 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44  ", or "<b>_ROWID
b1a0: 5f 3c 2f 62 3e 22 2e 0a 54 68 65 73 65 20 73 70  _</b>"..These sp
b1b0: 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
b1c0: 73 20 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74  s all describe t
b1d0: 68 65 0a 75 6e 69 71 75 65 20 72 61 6e 64 6f 6d  he.unique random
b1e0: 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74 68   integer key (th
b1f0: 65 20 22 72 6f 77 20 6b 65 79 22 29 20 61 73 73  e "row key") ass
b200: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65  ociated with eve
b210: 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79  ry .row of every
b220: 20 74 61 62 6c 65 2e 0a 54 68 65 20 73 70 65 63   table..The spec
b230: 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
b240: 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74 68  only refer to th
b250: 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68 65  e row key if the
b260: 20 43 52 45 41 54 45 20 54 41 42 4c 45 0a 73 74   CREATE TABLE.st
b270: 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
b280: 20 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63   define a real c
b290: 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73  olumn with the s
b2a0: 61 6d 65 20 6e 61 6d 65 2e 20 20 52 6f 77 20 6b  ame name.  Row k
b2b0: 65 79 73 0a 61 63 74 20 6c 69 6b 65 20 72 65 61  eys.act like rea
b2c0: 64 2d 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 73 2e 20  d-only columns. 
b2d0: 20 41 20 72 6f 77 20 6b 65 79 20 63 61 6e 20 62   A row key can b
b2e0: 65 20 75 73 65 64 20 61 6e 79 77 68 65 72 65 20  e used anywhere 
b2f0: 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e  a regular.column
b300: 20 63 61 6e 20 62 65 20 75 73 65 64 2c 20 65 78   can be used, ex
b310: 63 65 70 74 20 74 68 61 74 20 79 6f 75 20 63 61  cept that you ca
b320: 6e 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20  nnot change the 
b330: 76 61 6c 75 65 0a 6f 66 20 61 20 72 6f 77 20 6b  value.of a row k
b340: 65 79 20 69 6e 20 61 6e 20 55 50 44 41 54 45 20  ey in an UPDATE 
b350: 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  or INSERT statem
b360: 65 6e 74 2e 0a 22 53 45 4c 45 43 54 20 2a 20 2e  ent.."SELECT * .
b370: 2e 2e 22 20 64 6f 65 73 20 6e 6f 74 20 72 65 74  .." does not ret
b380: 75 72 6e 20 74 68 65 20 72 6f 77 20 6b 65 79 2e  urn the row key.
b390: 3c 2f 70 3e 0a 0a 3c 70 3e 53 45 4c 45 43 54 20  </p>..<p>SELECT 
b3a0: 73 74 61 74 65 6d 65 6e 74 73 20 63 61 6e 20 61  statements can a
b3b0: 70 70 65 61 72 20 69 6e 20 65 78 70 72 65 73 73  ppear in express
b3c0: 69 6f 6e 73 20 61 73 20 65 69 74 68 65 72 20 74  ions as either t
b3d0: 68 65 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70  he.right-hand op
b3e0: 65 72 61 6e 64 20 6f 66 20 74 68 65 20 49 4e 20  erand of the IN 
b3f0: 6f 70 65 72 61 74 6f 72 2c 20 61 73 20 61 20 73  operator, as a s
b400: 63 61 6c 61 72 20 71 75 61 6e 74 69 74 79 2c 20  calar quantity, 
b410: 6f 72 0a 61 73 20 74 68 65 20 6f 70 65 72 61 6e  or.as the operan
b420: 64 20 6f 66 20 61 6e 20 45 58 49 53 54 53 20 6f  d of an EXISTS o
b430: 70 65 72 61 74 6f 72 2e 0a 41 73 20 61 20 73 63  perator..As a sc
b440: 61 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6f 72  alar quantity or
b450: 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20   the operand of 
b460: 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 0a  an IN operator,.
b470: 74 68 65 20 53 45 4c 45 43 54 20 73 68 6f 75 6c  the SELECT shoul
b480: 64 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 73 69  d have only a si
b490: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 69  ngle column in i
b4a0: 74 73 0a 72 65 73 75 6c 74 2e 20 20 43 6f 6d 70  ts.result.  Comp
b4b0: 6f 75 6e 64 20 53 45 4c 45 43 54 73 20 28 63 6f  ound SELECTs (co
b4c0: 6e 6e 65 63 74 65 64 20 77 69 74 68 20 6b 65 79  nnected with key
b4d0: 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e  words like UNION
b4e0: 20 6f 72 0a 45 58 43 45 50 54 29 20 61 72 65 20   or.EXCEPT) are 
b4f0: 61 6c 6c 6f 77 65 64 2e 0a 57 69 74 68 20 74 68  allowed..With th
b500: 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
b510: 72 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  r, the columns i
b520: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
b530: 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 61   of the SELECT a
b540: 72 65 0a 69 67 6e 6f 72 65 64 20 61 6e 64 20 74  re.ignored and t
b550: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65  he expression re
b560: 74 75 72 6e 73 20 54 52 55 45 20 69 66 20 6f 6e  turns TRUE if on
b570: 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 65  e or more rows e
b580: 78 69 73 74 0a 61 6e 64 20 46 41 4c 53 45 20 69  xist.and FALSE i
b590: 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
b5a0: 20 69 73 20 65 6d 70 74 79 2e 0a 49 66 20 6e 6f   is empty..If no
b5b0: 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 53 45   terms in the SE
b5c0: 4c 45 43 54 20 65 78 70 72 65 73 73 69 6f 6e 20  LECT expression 
b5d0: 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 20 69  refer to value i
b5e0: 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e 67  n the containing
b5f0: 0a 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65  .query, then the
b600: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
b610: 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70 72  valuated once pr
b620: 69 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65 72  ior to any other
b630: 0a 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64 20  .processing and 
b640: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 72 65  the result is re
b650: 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72  used as necessar
b660: 79 2e 20 20 49 66 20 74 68 65 20 53 45 4c 45 43  y.  If the SELEC
b670: 54 20 65 78 70 72 65 73 73 69 6f 6e 0a 64 6f 65  T expression.doe
b680: 73 20 63 6f 6e 74 61 69 6e 20 76 61 72 69 61 62  s contain variab
b690: 6c 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 75 74  les from the out
b6a0: 65 72 20 71 75 65 72 79 2c 20 74 68 65 6e 20 74  er query, then t
b6b0: 68 65 20 53 45 4c 45 43 54 20 69 73 20 72 65 65  he SELECT is ree
b6c0: 76 61 6c 75 61 74 65 64 0a 65 76 65 72 79 20 74  valuated.every t
b6d0: 69 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64  ime it is needed
b6e0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61  .</p>..<p>When a
b6f0: 20 53 45 4c 45 43 54 20 69 73 20 74 68 65 20 72   SELECT is the r
b700: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66 20  ight operand of 
b710: 74 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c  the IN operator,
b720: 20 74 68 65 20 49 4e 0a 6f 70 65 72 61 74 6f 72   the IN.operator
b730: 20 72 65 74 75 72 6e 73 20 54 52 55 45 20 69 66   returns TRUE if
b740: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
b750: 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  he left operand 
b760: 69 73 20 61 6e 79 20 6f 66 0a 74 68 65 20 76 61  is any of.the va
b770: 6c 75 65 73 20 67 65 6e 65 72 61 74 65 64 20 62  lues generated b
b780: 79 20 74 68 65 20 73 65 6c 65 63 74 2e 20 20 54  y the select.  T
b790: 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d  he IN operator m
b7a0: 61 79 20 62 65 20 70 72 65 63 65 64 65 64 0a 62  ay be preceded.b
b7b0: 79 20 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72  y the NOT keywor
b7c0: 64 20 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20  d to invert the 
b7d0: 73 65 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73  sense of the tes
b7e0: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20  t.</p>..<p>When 
b7f0: 61 20 53 45 4c 45 43 54 20 61 70 70 65 61 72 73  a SELECT appears
b800: 20 77 69 74 68 69 6e 20 61 6e 20 65 78 70 72 65   within an expre
b810: 73 73 69 6f 6e 20 62 75 74 20 69 73 20 6e 6f 74  ssion but is not
b820: 20 74 68 65 20 72 69 67 68 74 0a 6f 70 65 72 61   the right.opera
b830: 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72  nd of an IN oper
b840: 61 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 20 66  ator, then the f
b850: 69 72 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20  irst row of the 
b860: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45  result of the.SE
b870: 4c 45 43 54 20 62 65 63 6f 6d 65 73 20 74 68 65  LECT becomes the
b880: 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e 20 74   value used in t
b890: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  he expression.  
b8a0: 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 79 69  If the SELECT yi
b8b0: 65 6c 64 73 0a 6d 6f 72 65 20 74 68 61 6e 20 6f  elds.more than o
b8c0: 6e 65 20 72 65 73 75 6c 74 20 72 6f 77 2c 20 61  ne result row, a
b8d0: 6c 6c 20 72 6f 77 73 20 61 66 74 65 72 20 74 68  ll rows after th
b8e0: 65 20 66 69 72 73 74 20 61 72 65 20 69 67 6e 6f  e first are igno
b8f0: 72 65 64 2e 20 20 49 66 0a 74 68 65 20 53 45 4c  red.  If.the SEL
b900: 45 43 54 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f  ECT yields no ro
b910: 77 73 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ws, then the val
b920: 75 65 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ue of the SELECT
b930: 20 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c   is NULL.</p>..<
b940: 70 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73  p>A CAST express
b950: 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 65 20  ion changes the 
b960: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
b970: 3c 65 78 70 72 3e 20 69 6e 74 6f 20 74 68 65 0a  <expr> into the.
b980: 74 79 70 65 20 73 70 65 63 69 66 69 65 64 20 62  type specified b
b990: 79 20 26 6c 74 3b 74 79 70 65 26 67 74 3b 2e 20  y &lt;type&gt;. 
b9a0: 0a 26 6c 74 3b 74 79 70 65 26 67 74 3b 20 63 61  .&lt;type&gt; ca
b9b0: 6e 20 62 65 20 61 6e 79 20 6e 6f 6e 2d 65 6d 70  n be any non-emp
b9c0: 74 79 20 74 79 70 65 20 6e 61 6d 65 20 74 68 61  ty type name tha
b9d0: 74 20 69 73 20 76 61 6c 69 64 0a 66 6f 72 20 74  t is valid.for t
b9e0: 68 65 20 74 79 70 65 20 69 6e 20 61 20 63 6f 6c  he type in a col
b9f0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  umn definition o
ba00: 66 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  f a CREATE TABLE
ba10: 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a   statement.</p>.
ba20: 0a 3c 70 3e 42 6f 74 68 20 73 69 6d 70 6c 65 20  .<p>Both simple 
ba30: 61 6e 64 20 61 67 67 72 65 67 61 74 65 20 66 75  and aggregate fu
ba40: 6e 63 74 69 6f 6e 73 20 61 72 65 20 73 75 70 70  nctions are supp
ba50: 6f 72 74 65 64 2e 20 20 41 20 73 69 6d 70 6c 65  orted.  A simple
ba60: 0a 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 62 65  .function can be
ba70: 20 75 73 65 64 20 69 6e 20 61 6e 79 20 65 78 70   used in any exp
ba80: 72 65 73 73 69 6f 6e 2e 20 20 53 69 6d 70 6c 65  ression.  Simple
ba90: 20 66 75 6e 63 74 69 6f 6e 73 20 72 65 74 75 72   functions retur
baa0: 6e 0a 61 20 72 65 73 75 6c 74 20 69 6d 6d 65 64  n.a result immed
bab0: 69 61 74 65 6c 79 20 62 61 73 65 64 20 6f 6e 20  iately based on 
bac0: 74 68 65 69 72 20 69 6e 70 75 74 73 2e 20 20 41  their inputs.  A
bad0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
bae0: 6e 73 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  ns.may only be u
baf0: 73 65 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sed in a SELECT 
bb00: 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 67 67 72  statement.  Aggr
bb10: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
bb20: 63 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72 65  compute.their re
bb30: 73 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c 20  sult across all 
bb40: 72 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75  rows of the resu
bb50: 6c 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 61 20  lt set.</p>..<a 
bb60: 6e 61 6d 65 3d 22 63 6f 72 65 66 75 6e 63 74 69  name="corefuncti
bb70: 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 62 3e 43 6f 72  ons"></a>.<b>Cor
bb80: 65 20 46 75 6e 63 74 69 6f 6e 73 3c 2f 62 3e 0a  e Functions</b>.
bb90: 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e  .<p>The core fun
bba0: 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c  ctions shown bel
bbb0: 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ow are available
bbc0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 64   by default.  Ad
bbd0: 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f  ditional.functio
bbe0: 6e 73 20 6d 61 79 20 62 65 20 77 72 69 74 74 65  ns may be writte
bbf0: 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64  n in C and added
bc00: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
bc10: 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68   engine using.th
bc20: 65 20 3c 61 20 68 72 65 66 3d 22 63 61 70 69 33  e <a href="capi3
bc30: 72 65 66 2e 68 74 6d 6c 23 63 66 75 6e 63 22 3e  ref.html#cfunc">
bc40: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
bc50: 75 6e 63 74 69 6f 6e 28 29 3c 2f 61 3e 0a 41 50  unction()</a>.AP
bc60: 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  I.</p>..<table b
bc70: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
bc80: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64  ing=10>.<tr>.<td
bc90: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
bca0: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
bcb0: 68 3d 31 32 30 3e 61 62 73 28 3c 69 3e 58 3c 2f  h=120>abs(<i>X</
bcc0: 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  i>)</td>.<td val
bcd0: 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e  ign="top">Return
bce0: 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
bcf0: 6c 75 65 20 6f 66 20 61 72 67 75 6d 65 6e 74 20  lue of argument 
bd00: 3c 69 3e 58 3c 2f 69 3e 2e 3c 2f 74 64 3e 0a 3c  <i>X</i>.</td>.<
bd10: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
bd20: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
bd30: 6e 3d 22 72 69 67 68 74 22 3e 63 6f 61 6c 65 73  n="right">coales
bd40: 63 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  ce(<i>X</i>,<i>Y
bd50: 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c  </i>,...)</td>.<
bd60: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
bd70: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
bd80: 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
bd90: 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49  ULL argument.  I
bda0: 66 0a 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20  f.all arguments 
bdb0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55  are NULL then NU
bdc0: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  LL is returned. 
bdd0: 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
bde0: 74 20 6c 65 61 73 74 20 0a 32 20 61 72 67 75 6d  t least .2 argum
bdf0: 65 6e 74 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ents.</td>.</tr>
be00: 0a 0a 3c 74 72 3e 0a 3c 61 20 6e 61 6d 65 3d 22  ..<tr>.<a name="
be10: 67 6c 6f 62 46 75 6e 63 22 3e 3c 2f 61 3e 0a 3c  globFunc"></a>.<
be20: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
be30: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 67 6c  align="right">gl
be40: 6f 62 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  ob(<i>X</i>,<i>Y
be50: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
be60: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 54 68 69 73  align="top">This
be70: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
be80: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
be90: 68 65 0a 22 3c 62 3e 58 20 47 4c 4f 42 20 59 3c  he."<b>X GLOB Y<
bea0: 2f 62 3e 22 20 73 79 6e 74 61 78 20 6f 66 20 53  /b>" syntax of S
beb0: 51 4c 69 74 65 2e 20 20 54 68 65 0a 3c 61 20 68  QLite.  The.<a h
bec0: 72 65 66 3d 22 63 61 70 69 33 72 65 66 2e 68 74  ref="capi3ref.ht
bed0: 6d 6c 23 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ml#sqlite3_creat
bee0: 65 5f 66 75 6e 63 74 69 6f 6e 22 3e 73 71 6c 69  e_function">sqli
bef0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
bf00: 69 6f 6e 28 29 3c 2f 61 3e 20 0a 69 6e 74 65 72  ion()</a> .inter
bf10: 66 61 63 65 20 63 61 6e 0a 62 65 20 75 73 65 64  face can.be used
bf20: 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69   to override thi
bf30: 73 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  s function and t
bf40: 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
bf50: 65 20 6f 70 65 72 61 74 69 6f 6e 0a 6f 66 20 74  e operation.of t
bf60: 68 65 20 3c 61 20 68 72 65 66 3d 22 23 67 6c 6f  he <a href="#glo
bf70: 62 46 75 6e 63 22 3e 47 4c 4f 42 3c 2f 61 3e 20  bFunc">GLOB</a> 
bf80: 6f 70 65 72 61 74 6f 72 2e 3c 2f 74 64 3e 0a 3c  operator.</td>.<
bf90: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
bfa0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
bfb0: 6e 3d 22 72 69 67 68 74 22 3e 69 66 6e 75 6c 6c  n="right">ifnull
bfc0: 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f  (<i>X</i>,<i>Y</
bfd0: 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  i>)</td>.<td val
bfe0: 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e  ign="top">Return
bff0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66   a copy of the f
c000: 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
c010: 67 75 6d 65 6e 74 2e 20 20 49 66 0a 62 6f 74 68  gument.  If.both
c020: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e   arguments are N
c030: 55 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c 20 69 73  ULL then NULL is
c040: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
c050: 62 65 68 61 76 65 73 20 74 68 65 20 73 61 6d 65  behaves the same
c060: 20 61 73 20 0a 3c 62 3e 63 6f 61 6c 65 73 63 65   as .<b>coalesce
c070: 28 29 3c 2f 62 3e 20 61 62 6f 76 65 2e 3c 2f 74  ()</b> above.</t
c080: 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c  d>.</tr>..<tr>.<
c090: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
c0a0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6c 61  align="right">la
c0b0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
c0c0: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
c0d0: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
c0e0: 68 65 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20  he ROWID of the 
c0f0: 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20  last row insert 
c100: 66 72 6f 6d 20 74 68 69 73 0a 63 6f 6e 6e 65 63  from this.connec
c110: 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61  tion to the data
c120: 62 61 73 65 2e 20 20 54 68 69 73 20 69 73 20 74  base.  This is t
c130: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 74 68  he same value th
c140: 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
c150: 72 6e 65 64 0a 66 72 6f 6d 20 74 68 65 20 3c 62  rned.from the <b
c160: 3e 73 71 6c 69 74 65 5f 6c 61 73 74 5f 69 6e 73  >sqlite_last_ins
c170: 65 72 74 5f 72 6f 77 69 64 28 29 3c 2f 62 3e 20  ert_rowid()</b> 
c180: 41 50 49 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 74  API function.</t
c190: 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c  d>.</tr>..<tr>.<
c1a0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
c1b0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6c 65  align="right">le
c1c0: 6e 67 74 68 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f  ngth(<i>X</i>)</
c1d0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
c1e0: 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20  top">Return the 
c1f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 6f 66  string length of
c200: 20 3c 69 3e 58 3c 2f 69 3e 20 69 6e 20 63 68 61   <i>X</i> in cha
c210: 72 61 63 74 65 72 73 2e 0a 49 66 20 53 51 4c 69  racters..If SQLi
c220: 74 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  te is configured
c230: 20 74 6f 20 73 75 70 70 6f 72 74 20 55 54 46 2d   to support UTF-
c240: 38 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  8, then the numb
c250: 65 72 20 6f 66 20 55 54 46 2d 38 0a 63 68 61 72  er of UTF-8.char
c260: 61 63 74 65 72 73 20 69 73 20 72 65 74 75 72 6e  acters is return
c270: 65 64 2c 20 6e 6f 74 20 74 68 65 20 6e 75 6d 62  ed, not the numb
c280: 65 72 20 6f 66 20 62 79 74 65 73 2e 3c 2f 74 64  er of bytes.</td
c290: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 61  >.</tr>..<tr>.<a
c2a0: 20 6e 61 6d 65 3d 22 6c 69 6b 65 46 75 6e 63 22   name="likeFunc"
c2b0: 3e 3c 2f 61 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  ></a>.<td valign
c2c0: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
c2d0: 67 68 74 22 3e 6c 69 6b 65 28 3c 69 3e 58 3c 2f  ght">like(<i>X</
c2e0: 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 20 5b 2c 3c 69  i>,<i>Y</i> [,<i
c2f0: 3e 5a 3c 2f 69 3e 5d 29 3c 2f 74 64 3e 0a 3c 74  >Z</i>])</td>.<t
c300: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a  d valign="top">.
c310: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
c320: 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
c330: 6e 74 20 74 68 65 20 22 3c 62 3e 58 20 4c 49 4b  nt the "<b>X LIK
c340: 45 20 59 20 5b 45 53 43 41 50 45 20 5a 5d 3c 2f  E Y [ESCAPE Z]</
c350: 62 3e 22 0a 73 79 6e 74 61 78 20 6f 66 20 53 51  b>".syntax of SQ
c360: 4c 2e 20 49 66 20 74 68 65 20 6f 70 74 69 6f 6e  L. If the option
c370: 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  al ESCAPE clause
c380: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65   is present, the
c390: 6e 20 74 68 65 0a 75 73 65 72 2d 66 75 6e 63 74  n the.user-funct
c3a0: 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64 20 77  ion is invoked w
c3b0: 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d 65  ith three argume
c3c0: 6e 74 73 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  nts. Otherwise, 
c3d0: 69 74 20 69 73 0a 69 6e 76 6f 6b 65 64 20 77 69  it is.invoked wi
c3e0: 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
c3f0: 20 6f 6e 6c 79 2e 20 54 68 65 20 0a 3c 61 20 68   only. The .<a h
c400: 72 65 66 3d 22 63 61 70 69 33 72 65 66 2e 68 74  ref="capi3ref.ht
c410: 6d 6c 23 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ml#sqlite3_creat
c420: 65 5f 66 75 6e 63 74 69 6f 6e 22 3e 0a 73 71 6c  e_function">.sql
c430: 69 74 65 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  ite_create_funct
c440: 69 6f 6e 28 29 3c 2f 61 3e 20 69 6e 74 65 72 66  ion()</a> interf
c450: 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64 20  ace can be used 
c460: 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  to override this
c470: 0a 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68  .function and th
c480: 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65  ereby change the
c490: 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68   operation of th
c4a0: 65 20 3c 61 0a 68 72 65 66 3d 20 22 23 6c 69 6b  e <a.href= "#lik
c4b0: 65 22 3e 4c 49 4b 45 3c 2f 61 3e 20 6f 70 65 72  e">LIKE</a> oper
c4c0: 61 74 6f 72 2e 20 57 68 65 6e 20 64 6f 69 6e 67  ator. When doing
c4d0: 20 74 68 69 73 2c 20 69 74 20 6d 61 79 20 62 65   this, it may be
c4e0: 20 69 6d 70 6f 72 74 61 6e 74 0a 74 6f 20 6f 76   important.to ov
c4f0: 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20  erride both the 
c500: 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72  two and three ar
c510: 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  gument versions 
c520: 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 66  of the like() .f
c530: 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69  unction. Otherwi
c540: 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f  se, different co
c550: 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64  de may be called
c560: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
c570: 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e.LIKE operator 
c580: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
c590: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45  ther or not an E
c5a0: 53 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73  SCAPE clause was
c5b0: 20 0a 73 70 65 63 69 66 69 65 64 2e 3c 2f 74 64   .specified.</td
c5c0: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
c5d0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
c5e0: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6c 6f 61  lign="right">loa
c5f0: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 3c 69 3e 58  d_extension(<i>X
c600: 3c 2f 69 3e 29 3c 62 72 3e 0a 6c 6f 61 64 5f 65  </i>)<br>.load_e
c610: 78 74 65 6e 73 69 6f 6e 28 3c 69 3e 58 3c 2f 69  xtension(<i>X</i
c620: 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e  >,<i>Y</i>)</td>
c630: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
c640: 22 3e 4c 6f 61 64 20 53 51 4c 69 74 65 20 65 78  ">Load SQLite ex
c650: 74 65 6e 73 69 6f 6e 73 20 6f 75 74 20 6f 66 20  tensions out of 
c660: 74 68 65 20 73 68 61 72 65 64 20 6c 69 62 72 61  the shared libra
c670: 72 79 0a 66 69 6c 65 20 6e 61 6d 65 64 20 3c 69  ry.file named <i
c680: 3e 58 3c 2f 69 3e 20 75 73 69 6e 67 20 74 68 65  >X</i> using the
c690: 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 3c 69 3e   entry point <i>
c6a0: 59 3c 2f 69 3e 2e 20 20 54 68 65 20 72 65 73 75  Y</i>.  The resu
c6b0: 6c 74 0a 69 73 20 61 20 4e 55 4c 4c 2e 20 20 49  lt.is a NULL.  I
c6c0: 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d  f <i>Y</i> is om
c6d0: 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20 64  itted then the d
c6e0: 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70 6f 69  efault entry poi
c6f0: 6e 74 0a 6f 66 20 3c 62 3e 73 71 6c 69 74 65 33  nt.of <b>sqlite3
c700: 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 3c  _extension_init<
c710: 2f 62 3e 20 69 73 20 75 73 65 64 2e 20 20 54 68  /b> is used.  Th
c720: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73  is function rais
c730: 65 73 0a 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  es.an exception 
c740: 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
c750: 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61 64 20 6f   fails to load o
c760: 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72  r initialize cor
c770: 72 65 63 74 6c 79 2e 0a 3c 2f 74 72 3e 0a 0a 3c  rectly..</tr>..<
c780: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
c790: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
c7a0: 74 22 3e 6c 6f 77 65 72 28 3c 69 3e 58 3c 2f 69  t">lower(<i>X</i
c7b0: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
c7c0: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
c7d0: 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67  a copy of string
c7e0: 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 6c 6c 20 61   <i>X</i> will a
c7f0: 6c 6c 20 63 68 61 72 61 63 74 65 72 73 0a 63 6f  ll characters.co
c800: 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72  nverted to lower
c810: 20 63 61 73 65 2e 20 20 54 68 65 20 43 20 6c 69   case.  The C li
c820: 62 72 61 72 79 20 3c 62 3e 74 6f 6c 6f 77 65 72  brary <b>tolower
c830: 28 29 3c 2f 62 3e 20 72 6f 75 74 69 6e 65 20 69  ()</b> routine i
c840: 73 20 75 73 65 64 0a 66 6f 72 20 74 68 65 20 63  s used.for the c
c850: 6f 6e 76 65 72 73 69 6f 6e 2c 20 77 68 69 63 68  onversion, which
c860: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 69 73   means that this
c870: 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
c880: 6e 6f 74 0a 77 6f 72 6b 20 63 6f 72 72 65 63 74  not.work correct
c890: 6c 79 20 6f 6e 20 55 54 46 2d 38 20 63 68 61 72  ly on UTF-8 char
c8a0: 61 63 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74  acters.</td>.</t
c8b0: 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  r>..<tr>.<td val
c8c0: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
c8d0: 22 72 69 67 68 74 22 3e 6d 61 78 28 3c 69 3e 58  "right">max(<i>X
c8e0: 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e 2e  </i>,<i>Y</i>,..
c8f0: 2e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  .)</td>.<td vali
c900: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
c910: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
c920: 68 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61  h the maximum va
c930: 6c 75 65 2e 20 20 41 72 67 75 6d 65 6e 74 73 0a  lue.  Arguments.
c940: 6d 61 79 20 62 65 20 73 74 72 69 6e 67 73 20 69  may be strings i
c950: 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 6e 75  n addition to nu
c960: 6d 62 65 72 73 2e 20 20 54 68 65 20 6d 61 78 69  mbers.  The maxi
c970: 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 64 65 74  mum value is det
c980: 65 72 6d 69 6e 65 64 0a 62 79 20 74 68 65 20 75  ermined.by the u
c990: 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e  sual sort order.
c9a0: 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
c9b0: 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  ax()</b> is a si
c9c0: 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
c9d0: 65 6e 0a 69 74 20 68 61 73 20 32 20 6f 72 20 6d  en.it has 2 or m
c9e0: 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
c9f0: 74 20 63 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e  t converts to an
ca00: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
ca10: 69 6f 6e 20 69 66 20 67 69 76 65 6e 0a 6f 6e 6c  ion if given.onl
ca20: 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
ca30: 65 6e 74 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ent.</td>.</tr>.
ca40: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
ca50: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
ca60: 67 68 74 22 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69  ght">min(<i>X</i
ca70: 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e 2e 2e 29 3c  >,<i>Y</i>,...)<
ca80: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
ca90: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
caa0: 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
cab0: 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65  he minimum value
cac0: 2e 20 20 41 72 67 75 6d 65 6e 74 73 0a 6d 61 79  .  Arguments.may
cad0: 20 62 65 20 73 74 72 69 6e 67 73 20 69 6e 20 61   be strings in a
cae0: 64 64 69 74 69 6f 6e 20 74 6f 20 6e 75 6d 62 65  ddition to numbe
caf0: 72 73 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d  rs.  The minimum
cb00: 20 76 61 6c 75 65 20 69 73 20 64 65 74 65 72 6d   value is determ
cb10: 69 6e 65 64 0a 62 79 20 74 68 65 20 75 73 75 61  ined.by the usua
cb20: 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 4e  l sort order.  N
cb30: 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
cb40: 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
cb50: 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
cb60: 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
cb70: 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 63   arguments but c
cb80: 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e 20 61 67  onverts to an ag
cb90: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
cba0: 20 69 66 20 67 69 76 65 6e 0a 6f 6e 6c 79 20 61   if given.only a
cbb0: 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
cbc0: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
cbd0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
cbe0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
cbf0: 22 3e 6e 75 6c 6c 69 66 28 3c 69 3e 58 3c 2f 69  ">nullif(<i>X</i
cc00: 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e  >,<i>Y</i>)</td>
cc10: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
cc20: 22 3e 52 65 74 75 72 6e 20 74 68 65 20 66 69 72  ">Return the fir
cc30: 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66 20 74  st argument if t
cc40: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
cc50: 20 64 69 66 66 65 72 65 6e 74 2c 20 0a 6f 74 68   different, .oth
cc60: 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 4e 55  erwise return NU
cc70: 4c 4c 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  LL.</td>.</tr>..
cc80: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
cc90: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
cca0: 68 74 22 3e 71 75 6f 74 65 28 3c 69 3e 58 3c 2f  ht">quote(<i>X</
ccb0: 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  i>)</td>.<td val
ccc0: 69 67 6e 3d 22 74 6f 70 22 3e 54 68 69 73 20 72  ign="top">This r
ccd0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 61  outine returns a
cce0: 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
ccf0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 69 74   the value of.it
cd00: 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61  s argument suita
cd10: 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f  ble for inclusio
cd20: 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 20 53  n into another S
cd30: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 53 74  QL statement..St
cd40: 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75  rings are surrou
cd50: 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71  nded by single-q
cd60: 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70  uotes with escap
cd70: 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71  es on interior q
cd80: 75 6f 74 65 73 0a 61 73 20 6e 65 65 64 65 64 2e  uotes.as needed.
cd90: 20 20 42 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f    BLOBs are enco
cda0: 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69 6d  ded as hexadecim
cdb0: 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 54 68 65  al literals..The
cdc0: 20 63 75 72 72 65 6e 74 20 69 6d 70 6c 65 6d 65   current impleme
cdd0: 6e 74 61 74 69 6f 6e 20 6f 66 20 56 41 43 55 55  ntation of VACUU
cde0: 4d 20 75 73 65 73 20 74 68 69 73 20 66 75 6e 63  M uses this func
cdf0: 74 69 6f 6e 2e 20 20 54 68 65 20 66 75 6e 63 74  tion.  The funct
ce00: 69 6f 6e 0a 69 73 20 61 6c 73 6f 20 75 73 65 66  ion.is also usef
ce10: 75 6c 20 77 68 65 6e 20 77 72 69 74 69 6e 67 20  ul when writing 
ce20: 74 72 69 67 67 65 72 73 20 74 6f 20 69 6d 70 6c  triggers to impl
ce30: 65 6d 65 6e 74 20 75 6e 64 6f 2f 72 65 64 6f 20  ement undo/redo 
ce40: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a 3c  functionality..<
ce50: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
ce60: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
ce70: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
ce80: 72 61 6e 64 6f 6d 28 2a 29 3c 2f 74 64 3e 0a 3c  random(*)</td>.<
ce90: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
cea0: 52 65 74 75 72 6e 20 61 20 70 73 65 75 64 6f 2d  Return a pseudo-
ceb0: 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 62  random integer.b
cec0: 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30  etween -92233720
ced0: 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20  36854775808 and 
cee0: 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  +922337203685477
cef0: 35 38 30 37 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  5807.</td>.</tr>
cf00: 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  ..<tr>.<td valig
cf10: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
cf20: 69 67 68 74 22 3e 72 6f 75 6e 64 28 3c 69 3e 58  ight">round(<i>X
cf30: 3c 2f 69 3e 29 3c 62 72 3e 72 6f 75 6e 64 28 3c  </i>)<br>round(<
cf40: 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e  i>X</i>,<i>Y</i>
cf50: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
cf60: 6e 3d 22 74 6f 70 22 3e 52 6f 75 6e 64 20 6f 66  n="top">Round of
cf70: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 3c 69 3e  f the number <i>
cf80: 58 3c 2f 69 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69  X</i> to <i>Y</i
cf90: 3e 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 0a  > digits to the.
cfa0: 72 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63  right of the dec
cfb0: 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66 20  imal point.  If 
cfc0: 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67  the <i>Y</i> arg
cfd0: 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
cfe0: 2c 20 30 20 69 73 20 0a 61 73 73 75 6d 65 64 2e  , 0 is .assumed.
cff0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
d000: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
d010: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
d020: 3e 73 6f 75 6e 64 65 78 28 3c 69 3e 58 3c 2f 69  >soundex(<i>X</i
d030: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
d040: 67 6e 3d 22 74 6f 70 22 3e 43 6f 6d 70 75 74 65  gn="top">Compute
d050: 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63   the soundex enc
d060: 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72  oding of the str
d070: 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 54 68  ing <i>X</i>..Th
d080: 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20  e string "?000" 
d090: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
d0a0: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e  he argument is N
d0b0: 55 4c 4c 2e 0a 54 68 69 73 20 66 75 6e 63 74 69  ULL..This functi
d0c0: 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  on is omitted fr
d0d0: 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65 66  om SQLite by def
d0e0: 61 75 6c 74 2e 0a 49 74 20 69 73 20 6f 6e 6c 79  ault..It is only
d0f0: 20 61 76 61 69 6c 61 62 6c 65 20 74 68 65 20 2d   available the -
d100: 44 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 3d  DSQLITE_SOUNDEX=
d110: 31 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f  1 compiler optio
d120: 6e 0a 69 73 20 75 73 65 64 20 77 68 65 6e 20 53  n.is used when S
d130: 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 3c  QLite is built.<
d140: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
d150: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
d160: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
d170: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 2a  sqlite_version(*
d180: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
d190: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
d1a0: 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e  he version strin
d1b0: 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  g for the SQLite
d1c0: 20 6c 69 62 72 61 72 79 0a 74 68 61 74 20 69 73   library.that is
d1d0: 20 72 75 6e 6e 69 6e 67 2e 20 20 45 78 61 6d 70   running.  Examp
d1e0: 6c 65 3a 20 20 22 32 2e 38 2e 30 22 3c 2f 74 64  le:  "2.8.0"</td
d1f0: 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74  >.</tr>..<tr>.<t
d200: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
d210: 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 75 62  lign="right">sub
d220: 73 74 72 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e  str(<i>X</i>,<i>
d230: 59 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 3c  Y</i>,<i>Z</i>)<
d240: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
d250: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 73  "top">Return a s
d260: 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75  ubstring of inpu
d270: 74 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69  t string <i>X</i
d280: 3e 20 74 68 61 74 20 62 65 67 69 6e 73 0a 77 69  > that begins.wi
d290: 74 68 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d  th the <i>Y</i>-
d2a0: 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64  th character and
d2b0: 20 77 68 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f   which is <i>Z</
d2c0: 69 3e 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  i> characters lo
d2d0: 6e 67 2e 0a 54 68 65 20 6c 65 66 74 2d 6d 6f 73  ng..The left-mos
d2e0: 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 3c  t character of <
d2f0: 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 75 6d 62 65  i>X</i> is numbe
d300: 72 20 31 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69  r 1.  If <i>Y</i
d310: 3e 20 69 73 20 6e 65 67 61 74 69 76 65 0a 74 68  > is negative.th
d320: 65 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  e the first char
d330: 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62  acter of the sub
d340: 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20  string is found 
d350: 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d  by counting from
d360: 20 74 68 65 0a 72 69 67 68 74 20 72 61 74 68 65   the.right rathe
d370: 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e  r than the left.
d380: 20 20 49 66 20 53 51 4c 69 74 65 20 69 73 20 63    If SQLite is c
d390: 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 73 75 70  onfigured to sup
d3a0: 70 6f 72 74 20 55 54 46 2d 38 2c 0a 74 68 65 6e  port UTF-8,.then
d3b0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 64 69   characters indi
d3c0: 63 65 73 20 72 65 66 65 72 20 74 6f 20 61 63 74  ces refer to act
d3d0: 75 61 6c 20 55 54 46 2d 38 20 63 68 61 72 61 63  ual UTF-8 charac
d3e0: 74 65 72 73 2c 20 6e 6f 74 20 62 79 74 65 73 2e  ters, not bytes.
d3f0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
d400: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
d410: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
d420: 3e 74 79 70 65 6f 66 28 3c 69 3e 58 3c 2f 69 3e  >typeof(<i>X</i>
d430: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
d440: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
d450: 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 65  he type of the e
d460: 78 70 72 65 73 73 69 6f 6e 20 3c 69 3e 58 3c 2f  xpression <i>X</
d470: 69 3e 2e 20 20 54 68 65 20 6f 6e 6c 79 20 0a 72  i>.  The only .r
d480: 65 74 75 72 6e 20 76 61 6c 75 65 73 20 61 72 65  eturn values are
d490: 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65   "null", "intege
d4a0: 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78  r", "real", "tex
d4b0: 74 22 2c 20 61 6e 64 20 22 62 6c 6f 62 22 2e 0a  t", and "blob"..
d4c0: 53 51 4c 69 74 65 27 73 20 74 79 70 65 20 68 61  SQLite's type ha
d4d0: 6e 64 6c 69 6e 67 20 69 73 20 0a 65 78 70 6c 61  ndling is .expla
d4e0: 69 6e 65 64 20 69 6e 20 3c 61 20 68 72 65 66 3d  ined in <a href=
d4f0: 22 64 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22  "datatype3.html"
d500: 3e 44 61 74 61 74 79 70 65 73 20 69 6e 20 53 51  >Datatypes in SQ
d510: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f  Lite Version 3</
d520: 61 3e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  a>.</td>.</tr>..
d530: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
d540: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
d550: 68 74 22 3e 75 70 70 65 72 28 3c 69 3e 58 3c 2f  ht">upper(<i>X</
d560: 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  i>)</td>.<td val
d570: 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e  ign="top">Return
d580: 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74   a copy of input
d590: 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e   string <i>X</i>
d5a0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c   converted to al
d5b0: 6c 0a 75 70 70 65 72 2d 63 61 73 65 20 6c 65 74  l.upper-case let
d5c0: 74 65 72 73 2e 20 20 54 68 65 20 69 6d 70 6c 65  ters.  The imple
d5d0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 69  mentation of thi
d5e0: 73 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20  s function uses 
d5f0: 74 68 65 20 43 20 6c 69 62 72 61 72 79 0a 72 6f  the C library.ro
d600: 75 74 69 6e 65 20 3c 62 3e 74 6f 75 70 70 65 72  utine <b>toupper
d610: 28 29 3c 2f 62 3e 20 77 68 69 63 68 20 6d 65 61  ()</b> which mea
d620: 6e 73 20 69 74 20 6d 61 79 20 6e 6f 74 20 77 6f  ns it may not wo
d630: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20  rk correctly on 
d640: 0a 55 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 3c  .UTF-8 strings.<
d650: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62  /td>.</tr>.</tab
d660: 6c 65 3e 0a 0a 3c 62 3e 44 61 74 65 20 41 6e 64  le>..<b>Date And
d670: 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73 3c   Time Functions<
d680: 2f 62 3e 0a 0a 3c 70 3e 44 61 74 65 20 61 6e 64  /b>..<p>Date and
d690: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
d6a0: 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 69  are documented i
d6b0: 6e 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22  n the .<a href="
d6c0: 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74  http://www.sqlit
d6d0: 65 2e 6f 72 67 2f 63 76 73 74 72 61 63 2f 77 69  e.org/cvstrac/wi
d6e0: 6b 69 3f 70 3d 44 61 74 65 41 6e 64 54 69 6d 65  ki?p=DateAndTime
d6f0: 46 75 6e 63 74 69 6f 6e 73 22 3e 0a 53 51 4c 69  Functions">.SQLi
d700: 74 65 20 57 69 6b 69 3c 2f 61 3e 2e 3c 2f 70 3e  te Wiki</a>.</p>
d710: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 61 67 67 72 65  ..<a name="aggre
d720: 67 61 74 65 66 75 6e 63 74 69 6f 6e 73 22 3e 3c  gatefunctions"><
d730: 2f 61 3e 0a 3c 62 3e 41 67 67 72 65 67 61 74 65  /a>.<b>Aggregate
d740: 20 46 75 6e 63 74 69 6f 6e 73 3c 2f 62 3e 0a 0a   Functions</b>..
d750: 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74  <p>.The aggregat
d760: 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
d770: 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
d780: 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
d790: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67  .  Additional.ag
d7a0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
d7b0: 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d  s written in C m
d7c0: 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e  ay be added usin
d7d0: 67 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22  g the .<a href="
d7e0: 63 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71  capi3ref.html#sq
d7f0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
d800: 63 74 69 6f 6e 22 3e 73 71 6c 69 74 65 33 5f 63  ction">sqlite3_c
d810: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
d820: 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c  </a>.API.</p>..<
d830: 70 3e 0a 49 6e 20 61 6e 79 20 61 67 67 72 65 67  p>.In any aggreg
d840: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  ate function tha
d850: 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65  t takes a single
d860: 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20   argument, that 
d870: 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20  argument.can be 
d880: 70 72 65 63 65 65 64 65 64 20 62 79 20 74 68 65  preceeded by the
d890: 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43   keyword DISTINC
d8a0: 54 2e 20 20 49 6e 20 73 75 63 68 20 63 61 73 65  T.  In such case
d8b0: 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65  s, duplicate.ele
d8c0: 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72  ments are filter
d8d0: 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20  ed before being 
d8e0: 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20  passed into the 
d8f0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
d900: 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c  on..For example,
d910: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63   the function "c
d920: 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29  ount(distinct X)
d930: 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68  " will return th
d940: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74  e number.of dist
d950: 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63  inct values of c
d960: 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20  olumn X instead 
d970: 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  of the total num
d980: 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a  ber of non-null.
d990: 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e  values in column
d9a0: 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65   X..</p>..<table
d9b0: 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
d9c0: 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c  dding=10>.<tr>.<
d9d0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
d9e0: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
d9f0: 64 74 68 3d 31 32 30 3e 61 76 67 28 3c 69 3e 58  dth=120>avg(<i>X
da00: 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  </i>)</td>.<td v
da10: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75  align="top">Retu
da20: 72 6e 20 74 68 65 20 61 76 65 72 61 67 65 20 76  rn the average v
da30: 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d  alue of all non-
da40: 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69  NULL <i>X</i> wi
da50: 74 68 69 6e 20 61 0a 67 72 6f 75 70 2e 20 20 53  thin a.group.  S
da60: 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76  tring and BLOB v
da70: 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  alues that do no
da80: 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62  t look like numb
da90: 65 72 73 20 61 72 65 0a 69 6e 74 65 72 70 72 65  ers are.interpre
daa0: 74 65 64 20 61 73 20 30 2e 0a 54 68 65 20 72 65  ted as 0..The re
dab0: 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
dac0: 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
dad0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 65  ng point value e
dae0: 76 65 6e 20 69 66 20 61 6c 6c 0a 69 6e 70 75 74  ven if all.input
daf0: 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 20  s are integers. 
db00: 3c 2f 70 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  </p></td>.</tr>.
db10: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
db20: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
db30: 67 68 74 22 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c  ght">count(<i>X<
db40: 2f 69 3e 29 3c 62 72 3e 63 6f 75 6e 74 28 2a 29  /i>)<br>count(*)
db50: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
db60: 3d 22 74 6f 70 22 3e 54 68 65 20 66 69 72 73 74  ="top">The first
db70: 20 66 6f 72 6d 20 72 65 74 75 72 6e 20 61 20 63   form return a c
db80: 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62  ount of the numb
db90: 65 72 20 6f 66 20 74 69 6d 65 73 0a 74 68 61 74  er of times.that
dba0: 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74   <i>X</i> is not
dbb0: 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70   NULL in a group
dbc0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
dbd0: 72 6d 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75  rm (with no argu
dbe0: 6d 65 6e 74 29 0a 72 65 74 75 72 6e 73 20 74 68  ment).returns th
dbf0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
dc00: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72  f rows in the gr
dc10: 6f 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  oup.</td>.</tr>.
dc20: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
dc30: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
dc40: 67 68 74 22 3e 6d 61 78 28 3c 69 3e 58 3c 2f 69  ght">max(<i>X</i
dc50: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
dc60: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
dc70: 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  the maximum valu
dc80: 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
dc90: 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 54 68  in the group..Th
dca0: 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72 64  e usual sort ord
dcb0: 65 72 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  er is used to de
dcc0: 74 65 72 6d 69 6e 65 20 74 68 65 20 6d 61 78 69  termine the maxi
dcd0: 6d 75 6d 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  mum.</td>.</tr>.
dce0: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
dcf0: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
dd00: 67 68 74 22 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69  ght">min(<i>X</i
dd10: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
dd20: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
dd30: 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d  the minimum non-
dd40: 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c  NULL value of al
dd50: 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
dd60: 67 72 6f 75 70 2e 0a 54 68 65 20 75 73 75 61 6c  group..The usual
dd70: 20 73 6f 72 74 20 6f 72 64 65 72 20 69 73 20 75   sort order is u
dd80: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
dd90: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 2e 20 20 4e   the minimum.  N
dda0: 55 4c 4c 20 69 73 20 6f 6e 6c 79 20 72 65 74 75  ULL is only retu
ddb0: 72 6e 65 64 0a 69 66 20 61 6c 6c 20 76 61 6c 75  rned.if all valu
ddc0: 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 20  es in the group 
ddd0: 61 72 65 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a 3c  are NULL.</td>.<
dde0: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
ddf0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
de00: 6e 3d 22 72 69 67 68 74 22 3e 73 75 6d 28 3c 69  n="right">sum(<i
de10: 3e 58 3c 2f 69 3e 29 3c 62 72 3e 74 6f 74 61 6c  >X</i>)<br>total
de20: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
de30: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
de40: 3e 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65  >Return the nume
de50: 72 69 63 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e  ric sum of all n
de60: 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
de70: 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 20  n the group..   
de80: 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
de90: 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72  non-NULL input r
dea0: 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72  ows then sum() r
deb0: 65 74 75 72 6e 73 0a 20 20 20 4e 55 4c 4c 20 62  eturns.   NULL b
dec0: 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72  ut total() retur
ded0: 6e 73 20 30 2e 30 2e 0a 20 20 20 4e 55 4c 4c 20  ns 0.0..   NULL 
dee0: 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  is not normally 
def0: 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74  a helpful result
df00: 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20   for the sum of 
df10: 6e 6f 20 72 6f 77 73 0a 20 20 20 62 75 74 20 74  no rows.   but t
df20: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
df30: 72 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20  requires it and 
df40: 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20 20 53 51  most other.   SQ
df50: 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
df60: 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d  es implement sum
df70: 28 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53  () that way so S
df80: 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e  QLite does it in
df90: 20 74 68 65 0a 20 20 20 73 61 6d 65 20 77 61 79   the.   same way
dfa0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be 
dfb0: 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68  compatible.   Th
dfc0: 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74  e non-standard t
dfd0: 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a  otal() function.
dfe0: 20 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61     is provided a
dff0: 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77  s a convenient w
e000: 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  ay to work aroun
e010: 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72  d this design pr
e020: 6f 62 6c 65 6d 0a 20 20 20 69 6e 20 74 68 65 20  oblem.   in the 
e030: 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
e040: 3e 0a 0a 20 20 20 3c 70 3e 54 68 65 20 72 65 73  >..   <p>The res
e050: 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69  ult of total() i
e060: 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
e070: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
e080: 0a 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  .   The result o
e090: 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e  f sum() is an in
e0a0: 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
e0b0: 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  ll non-NULL inpu
e0c0: 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
e0d0: 0a 20 20 20 49 66 20 61 6e 79 20 69 6e 70 75 74  .   If any input
e0e0: 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
e0f0: 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
e100: 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 20 74 68 65  or a NULL.   the
e110: 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20  n sum() returns 
e120: 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
e130: 20 76 61 6c 75 65 0a 20 20 20 77 68 69 63 68 20   value.   which 
e140: 6d 69 67 68 74 20 62 65 20 61 6e 20 61 70 70 72  might be an appr
e150: 6f 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65  oximation to the
e160: 20 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a   true sum.</p>..
e170: 20 20 20 3c 70 3e 53 75 6d 28 29 20 77 69 6c 6c     <p>Sum() will
e180: 20 74 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67   throw an "integ
e190: 65 72 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63  er overflow" exc
e1a0: 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e  eption if all in
e1b0: 70 75 74 73 0a 20 20 20 61 72 65 20 69 6e 74 65  puts.   are inte
e1c0: 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 20  gers or NULL.   
e1d0: 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  and an integer o
e1e0: 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61  verflow occurs a
e1f0: 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69  t any point duri
e200: 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  ng the computati
e210: 6f 6e 2e 0a 20 20 20 54 6f 74 61 6c 28 29 20 6e  on..   Total() n
e220: 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 65  ever throws an e
e230: 78 63 65 70 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f  xception.</p>.</
e240: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 7d 0a 0a  tr>.</table>.}..
e250: 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20  .Section INSERT 
e260: 69 6e 73 65 72 74 0a 0a 53 79 6e 74 61 78 20 7b  insert..Syntax {
e270: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
e280: 0a 49 4e 53 45 52 54 20 5b 4f 52 20 3c 63 6f 6e  .INSERT [OR <con
e290: 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e  flict-algorithm>
e2a0: 5d 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73  ] INTO [<databas
e2b0: 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
e2c0: 65 2d 6e 61 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d  e-name> [(<colum
e2d0: 6e 2d 6c 69 73 74 3e 29 5d 20 56 41 4c 55 45 53  n-list>)] VALUES
e2e0: 28 3c 76 61 6c 75 65 2d 6c 69 73 74 3e 29 20 7c  (<value-list>) |
e2f0: 0a 49 4e 53 45 52 54 20 5b 4f 52 20 3c 63 6f 6e  .INSERT [OR <con
e300: 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e  flict-algorithm>
e310: 5d 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73  ] INTO [<databas
e320: 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
e330: 65 2d 6e 61 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d  e-name> [(<colum
e340: 6e 2d 6c 69 73 74 3e 29 5d 20 3c 73 65 6c 65 63  n-list>)] <selec
e350: 74 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a  t-statement>.}..
e360: 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 49 4e  puts {.<p>The IN
e370: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63  SERT statement c
e380: 6f 6d 65 73 20 69 6e 20 74 77 6f 20 62 61 73 69  omes in two basi
e390: 63 20 66 6f 72 6d 73 2e 20 20 54 68 65 20 66 69  c forms.  The fi
e3a0: 72 73 74 20 66 6f 72 6d 0a 28 77 69 74 68 20 74  rst form.(with t
e3b0: 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77  he "VALUES" keyw
e3c0: 6f 72 64 29 20 63 72 65 61 74 65 73 20 61 20 73  ord) creates a s
e3d0: 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e  ingle new row in
e3e0: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62   an existing tab
e3f0: 6c 65 2e 0a 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e  le..If no column
e400: 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69  -list is specifi
e410: 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  ed then the numb
e420: 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73  er of values mus
e430: 74 0a 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t.be the same as
e440: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
e450: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
e460: 62 6c 65 2e 20 20 49 66 20 61 20 63 6f 6c 75 6d  ble.  If a colum
e470: 6e 2d 6c 69 73 74 0a 69 73 20 73 70 65 63 69 66  n-list.is specif
e480: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  ied, then the nu
e490: 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d  mber of values m
e4a0: 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75  ust match the nu
e4b0: 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65  mber of.specifie
e4c0: 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 43 6f 6c 75  d columns.  Colu
e4d0: 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
e4e0: 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70   that do not app
e4f0: 65 61 72 20 69 6e 20 74 68 65 0a 63 6f 6c 75 6d  ear in the.colum
e500: 6e 20 6c 69 73 74 20 61 72 65 20 66 69 6c 6c 65  n list are fille
e510: 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61 75  d with the defau
e520: 6c 74 20 76 61 6c 75 65 2c 20 6f 72 20 77 69 74  lt value, or wit
e530: 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 74 0a 64 65  h NULL if not.de
e540: 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73  fault value is s
e550: 70 65 63 69 66 69 65 64 2e 0a 3c 2f 70 3e 0a 0a  pecified..</p>..
e560: 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  <p>The second fo
e570: 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
e580: 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73   statement takes
e590: 20 69 74 20 64 61 74 61 20 66 72 6f 6d 20 61 0a   it data from a.
e5a0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
e5b0: 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
e5c0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
e5d0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45  result of the.SE
e5e0: 4c 45 43 54 20 6d 75 73 74 20 65 78 61 63 74 6c  LECT must exactl
e5f0: 79 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  y match the numb
e600: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
e610: 20 74 68 65 20 74 61 62 6c 65 20 69 66 0a 6e 6f   the table if.no
e620: 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 69 73 20   column list is 
e630: 73 70 65 63 69 66 69 65 64 2c 20 6f 72 20 69 74  specified, or it
e640: 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20   must match the 
e650: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
e660: 73 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 63 6f  s.name in the co
e670: 6c 75 6d 6e 20 6c 69 73 74 2e 20 20 41 20 6e 65  lumn list.  A ne
e680: 77 20 65 6e 74 72 79 20 69 73 20 6d 61 64 65 20  w entry is made 
e690: 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 66 6f 72  in the table.for
e6a0: 20 65 76 65 72 79 20 72 6f 77 20 6f 66 20 74 68   every row of th
e6b0: 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74 2e  e SELECT result.
e6c0: 20 20 54 68 65 20 53 45 4c 45 43 54 20 6d 61 79    The SELECT may
e6d0: 20 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20 63 6f   be simple.or co
e6e0: 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mpound.</p>..<p>
e6f0: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e  The optional con
e700: 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c  flict-clause all
e710: 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63  ows the specific
e720: 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65  ation of an alte
e730: 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69  rnative.constrai
e740: 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
e750: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
e760: 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
e770: 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e  his one command.
e780: 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e  .See the section
e790: 20 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d   titled.<a href=
e7a0: 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43  "#conflict">ON C
e7b0: 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20  ONFLICT</a> for 
e7c0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
e7d0: 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70  mation..For comp
e7e0: 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
e7f0: 79 53 51 4c 2c 20 74 68 65 20 70 61 72 73 65 72  ySQL, the parser
e800: 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20   allows the use 
e810: 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65  of the.single ke
e820: 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 23  yword <a href="#
e830: 72 65 70 6c 61 63 65 22 3e 52 45 50 4c 41 43 45  replace">REPLACE
e840: 3c 2f 61 3e 20 61 73 20 61 6e 20 61 6c 69 61 73  </a> as an alias
e850: 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20   for "INSERT OR 
e860: 52 45 50 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 7d  REPLACE"..</p>.}
e870: 0a 0a 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43  ...Section {ON C
e880: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20  ONFLICT clause} 
e890: 63 6f 6e 66 6c 69 63 74 0a 0a 53 79 6e 74 61 78  conflict..Syntax
e8a0: 20 7b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   {conflict-claus
e8b0: 65 7d 20 7b 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54  e} {.ON CONFLICT
e8c0: 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72   <conflict-algor
e8d0: 69 74 68 6d 3e 0a 7d 20 7b 63 6f 6e 66 6c 69 63  ithm>.} {conflic
e8e0: 74 2d 61 6c 67 6f 72 69 74 68 6d 7d 20 7b 0a 52  t-algorithm} {.R
e8f0: 4f 4c 4c 42 41 43 4b 20 7c 20 41 42 4f 52 54 20  OLLBACK | ABORT 
e900: 7c 20 46 41 49 4c 20 7c 20 49 47 4e 4f 52 45 20  | FAIL | IGNORE 
e910: 7c 20 52 45 50 4c 41 43 45 0a 7d 0a 0a 70 75 74  | REPLACE.}..put
e920: 73 20 7b 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f  s {.<p>The ON CO
e930: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
e940: 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65 20   not a separate 
e950: 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74  SQL command.  It
e960: 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61   is a.non-standa
e970: 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  rd clause that c
e980: 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e  an appear in man
e990: 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d  y other SQL comm
e9a0: 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65  ands..It is give
e9b0: 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f  n its own sectio
e9c0: 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65  n in this docume
e9d0: 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  nt because it is
e9e0: 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61   not.part of sta
e9f0: 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68  ndard SQL and th
ea00: 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f  erefore might no
ea10: 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f  t be familiar.</
ea20: 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61  p>..<p>The synta
ea30: 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e  x for the ON CON
ea40: 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20  FLICT clause is 
ea50: 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66  as shown above f
ea60: 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54 41  or.the CREATE TA
ea70: 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 46 6f  BLE command.  Fo
ea80: 72 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64  r the INSERT and
ea90: 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73  .UPDATE commands
eaa0: 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  , the keywords "
eab0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65  ON CONFLICT" are
eac0: 20 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52   replaced by "OR
ead0: 22 2c 20 74 6f 20 6d 61 6b 65 0a 74 68 65 20 73  ", to make.the s
eae0: 79 6e 74 61 78 20 73 65 65 6d 20 6d 6f 72 65 20  yntax seem more 
eaf0: 6e 61 74 75 72 61 6c 2e 20 20 46 6f 72 20 65 78  natural.  For ex
eb00: 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f  ample, instead o
eb10: 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e  f."INSERT ON CON
eb20: 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65  FLICT IGNORE" we
eb30: 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52   have "INSERT OR
eb40: 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65   IGNORE"..The ke
eb50: 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75  ywords change bu
eb60: 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66  t the meaning of
eb70: 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20 74   the clause is t
eb80: 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77  he same.either w
eb90: 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ay.</p>..<p>The 
eba0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
ebb0: 73 65 20 73 70 65 63 69 66 69 65 73 20 61 6e 20  se specifies an 
ebc0: 61 6c 67 6f 72 69 74 68 6d 20 75 73 65 64 20 74  algorithm used t
ebd0: 6f 20 72 65 73 6f 6c 76 65 0a 63 6f 6e 73 74 72  o resolve.constr
ebe0: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 73 2e 20  aint conflicts. 
ebf0: 20 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20   There are five 
ec00: 63 68 6f 69 63 65 73 3a 20 52 4f 4c 4c 42 41 43  choices: ROLLBAC
ec10: 4b 2c 20 41 42 4f 52 54 2c 0a 46 41 49 4c 2c 20  K, ABORT,.FAIL, 
ec20: 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c  IGNORE, and REPL
ec30: 41 43 45 2e 20 54 68 65 20 64 65 66 61 75 6c 74  ACE. The default
ec40: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42   algorithm is AB
ec50: 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68  ORT.  This.is wh
ec60: 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70  at they mean:</p
ec70: 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52  >..<dl>.<dt><b>R
ec80: 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e  OLLBACK</b></dt>
ec90: 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63  .<dd><p>When a c
eca0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
ecb0: 69 6f 6e 20 6f 63 63 75 72 73 2c 20 61 6e 20 69  ion occurs, an i
ecc0: 6d 6d 65 64 69 61 74 65 20 52 4f 4c 4c 42 41 43  mmediate ROLLBAC
ecd0: 4b 0a 6f 63 63 75 72 73 2c 20 74 68 75 73 20 65  K.occurs, thus e
ece0: 6e 64 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  nding the curren
ecf0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61  t transaction, a
ed00: 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61  nd the command a
ed10: 62 6f 72 74 73 0a 77 69 74 68 20 61 20 72 65 74  borts.with a ret
ed20: 75 72 6e 20 63 6f 64 65 20 6f 66 20 53 51 4c 49  urn code of SQLI
ed30: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20  TE_CONSTRAINT.  
ed40: 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f  If no transactio
ed50: 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68  n is.active (oth
ed60: 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c  er than the impl
ed70: 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ied transaction 
ed80: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
ed90: 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64  on every.command
eda0: 29 20 74 68 65 6e 20 74 68 69 73 20 61 6c 67 6f  ) then this algo
edb0: 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20  rithm works the 
edc0: 73 61 6d 65 20 61 73 20 41 42 4f 52 54 2e 3c 2f  same as ABORT.</
edd0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
ede0: 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  ABORT</b></dt>.<
edf0: 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e  dd><p>When a con
ee00: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
ee10: 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63 6f  n occurs, the co
ee20: 6d 6d 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 0a  mmand backs out.
ee30: 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
ee40: 73 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  s it might have 
ee50: 6d 61 64 65 20 61 6e 64 20 61 62 6f 72 74 73 20  made and aborts 
ee60: 77 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f  with a return co
ee70: 64 65 0a 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e  de.of SQLITE_CON
ee80: 53 54 52 41 49 4e 54 2e 20 20 42 75 74 20 6e 6f  STRAINT.  But no
ee90: 20 52 4f 4c 4c 42 41 43 4b 20 69 73 20 65 78 65   ROLLBACK is exe
eea0: 63 75 74 65 64 20 73 6f 20 63 68 61 6e 67 65 73  cuted so changes
eeb0: 0a 66 72 6f 6d 20 70 72 69 6f 72 20 63 6f 6d 6d  .from prior comm
eec0: 61 6e 64 73 20 77 69 74 68 69 6e 20 74 68 65 20  ands within the 
eed0: 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  same transaction
eee0: 0a 61 72 65 20 70 72 65 73 65 72 76 65 64 2e 20  .are preserved. 
eef0: 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66   This is the def
ef00: 61 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 3c 2f  ault behavior.</
ef10: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
ef20: 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  FAIL</b></dt>.<d
ef30: 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73  d><p>When a cons
ef40: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
ef50: 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63 6f 6d   occurs, the com
ef60: 6d 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68  mand aborts with
ef70: 20 61 0a 72 65 74 75 72 6e 20 63 6f 64 65 20 53   a.return code S
ef80: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
ef90: 2e 20 20 42 75 74 20 61 6e 79 20 63 68 61 6e 67  .  But any chang
efa0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
efb0: 73 65 20 74 68 61 74 0a 74 68 65 20 63 6f 6d 6d  se that.the comm
efc0: 61 6e 64 20 6d 61 64 65 20 70 72 69 6f 72 20 74  and made prior t
efd0: 6f 20 65 6e 63 6f 75 6e 74 65 72 69 6e 67 20 74  o encountering t
efe0: 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
eff0: 6f 6c 61 74 69 6f 6e 0a 61 72 65 20 70 72 65 73  olation.are pres
f000: 65 72 76 65 64 20 61 6e 64 20 61 72 65 20 6e 6f  erved and are no
f010: 74 20 62 61 63 6b 65 64 20 6f 75 74 2e 20 20 46  t backed out.  F
f020: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61  or example, if a
f030: 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65  n UPDATE.stateme
f040: 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61  nt encountered a
f050: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
f060: 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30  ation on the 100
f070: 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61  th row that.it a
f080: 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74  ttempts to updat
f090: 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  e, then the firs
f0a0: 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73  t 99 row changes
f0b0: 20 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62   are preserved.b
f0c0: 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f  ut changes to ro
f0d0: 77 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e  ws 100 and beyon
f0e0: 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f  d never occur.</
f0f0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
f100: 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a  IGNORE</b></dt>.
f110: 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f  <dd><p>When a co
f120: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
f130: 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 6f  on occurs, the o
f140: 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74  ne row that cont
f150: 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61  ains.the constra
f160: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73  int violation is
f170: 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
f180: 20 63 68 61 6e 67 65 64 2e 20 20 42 75 74 20 74   changed.  But t
f190: 68 65 20 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74 69  he command.conti
f1a0: 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67 20 6e  nues executing n
f1b0: 6f 72 6d 61 6c 6c 79 2e 20 20 4f 74 68 65 72 20  ormally.  Other 
f1c0: 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20  rows before and 
f1d0: 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68  after the row th
f1e0: 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65  at.contained the
f1f0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
f200: 61 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65 20 74  ation continue t
f210: 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 6f 72  o be inserted or
f220: 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c   updated.normall
f230: 79 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73 20  y.  No error is 
f240: 72 65 74 75 72 6e 65 64 2e 3c 2f 70 3e 3c 2f 64  returned.</p></d
f250: 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41  d>..<dt><b>REPLA
f260: 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  CE</b></dt>.<dd>
f270: 3c 70 3e 57 68 65 6e 20 61 20 55 4e 49 51 55 45  <p>When a UNIQUE
f280: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
f290: 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
f2a0: 65 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72  e pre-existing r
f2b0: 6f 77 73 0a 74 68 61 74 20 61 72 65 20 63 61 75  ows.that are cau
f2c0: 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61  sing the constra
f2d0: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
f2e0: 65 20 72 65 6d 6f 76 65 64 20 70 72 69 6f 72 20  e removed prior 
f2f0: 74 6f 20 69 6e 73 65 72 74 69 6e 67 0a 6f 72 20  to inserting.or 
f300: 75 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72  updating the cur
f310: 72 65 6e 74 20 72 6f 77 2e 20 20 54 68 75 73 20  rent row.  Thus 
f320: 74 68 65 20 69 6e 73 65 72 74 20 6f 72 20 75 70  the insert or up
f330: 64 61 74 65 20 61 6c 77 61 79 73 20 6f 63 63 75  date always occu
f340: 72 73 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20  rs..The command 
f350: 63 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75 74  continues execut
f360: 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e  ing normally.  N
f370: 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  o error is retur
f380: 6e 65 64 2e 0a 49 66 20 61 20 4e 4f 54 20 4e 55  ned..If a NOT NU
f390: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  LL constraint vi
f3a0: 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
f3b0: 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  the NULL value i
f3c0: 73 20 72 65 70 6c 61 63 65 64 0a 62 79 20 74 68  s replaced.by th
f3d0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
f3e0: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e  for that column.
f3f0: 20 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20    If the column 
f400: 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76  has no default.v
f410: 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41  alue, then the A
f420: 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69  BORT algorithm i
f430: 73 20 75 73 65 64 2e 20 20 49 66 20 61 20 43 48  s used.  If a CH
f440: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ECK constraint v
f450: 69 6f 6c 61 74 69 6f 6e 0a 6f 63 63 75 72 73 20  iolation.occurs 
f460: 74 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20  then the IGNORE 
f470: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
f480: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20  d.</p>..<p>When 
f490: 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 72 65  this conflict re
f4a0: 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
f4b0: 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69  y deletes rows i
f4c0: 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73  n order to.satis
f4d0: 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c  fy a constraint,
f4e0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 69 6e 76   it does not inv
f4f0: 6f 6b 65 20 64 65 6c 65 74 65 20 74 72 69 67 67  oke delete trigg
f500: 65 72 73 20 6f 6e 20 74 68 6f 73 65 0a 72 6f 77  ers on those.row
f510: 73 2e 20 20 54 68 69 73 20 62 65 68 61 76 69 6f  s.  This behavio
f520: 72 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 69  r might change i
f530: 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65 61  n a future relea
f540: 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c  se.</p>.</dl>..<
f550: 70 3e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20  p>The algorithm 
f560: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
f570: 20 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 20   OR clause of a 
f580: 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
f590: 0a 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61  .overrides any a
f5a0: 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
f5b0: 65 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  ed in a CREATE T
f5c0: 41 42 4c 45 2e 0a 49 66 20 6e 6f 20 61 6c 67 6f  ABLE..If no algo
f5d0: 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69  rithm is specifi
f5e0: 65 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65  ed anywhere, the
f5f0: 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d   ABORT algorithm
f600: 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 7d 0a   is used.</p>.}.
f610: 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58  .Section REINDEX
f620: 20 72 65 69 6e 64 65 78 0a 0a 53 79 6e 74 61 78   reindex..Syntax
f630: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
f640: 20 7b 0a 20 20 52 45 49 4e 44 45 58 20 3c 63 6f   {.  REINDEX <co
f650: 6c 6c 61 74 69 6f 6e 20 6e 61 6d 65 3e 0a 7d 0a  llation name>.}.
f660: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
f670: 65 6d 65 6e 74 7d 20 7b 0a 20 20 52 45 49 4e 44  ement} {.  REIND
f680: 45 58 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  EX [<database-na
f690: 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2f 69 6e  me> .] <table/in
f6a0: 64 65 78 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74  dex-name>.}..put
f6b0: 73 20 7b 0a 3c 70 3e 54 68 65 20 52 45 49 4e 44  s {.<p>The REIND
f6c0: 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  EX command is us
f6d0: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64  ed to delete and
f6e0: 20 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65   recreate indice
f6f0: 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a  s from scratch..
f700: 54 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77  This is useful w
f710: 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69  hen the definiti
f720: 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f  on of a collatio
f730: 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63  n sequence has c
f740: 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  hanged..</p>..<p
f750: 3e 49 6e 20 74 68 65 20 66 69 72 73 74 20 66 6f  >In the first fo
f760: 72 6d 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20  rm, all indices 
f770: 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  in all attached 
f780: 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75  databases that u
f790: 73 65 20 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c  se the.named col
f7a0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
f7b0: 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 49  are recreated. I
f7c0: 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
f7d0: 6d 2c 20 69 66 20 0a 3c 69 3e 5b 64 61 74 61 62  m, if .<i>[datab
f7e0: 61 73 65 2d 6e 61 6d 65 2e 5d 74 61 62 6c 65 2f  ase-name.]table/
f7f0: 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69  index-name</i> i
f800: 64 65 6e 74 69 66 69 65 73 20 61 20 74 61 62 6c  dentifies a tabl
f810: 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  e, then all indi
f820: 63 65 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77  ces.associated w
f830: 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 61 72  ith the table ar
f840: 65 20 72 65 62 75 69 6c 74 2e 20 49 66 20 61 6e  e rebuilt. If an
f850: 20 69 6e 64 65 78 20 69 73 20 69 64 65 6e 74 69   index is identi
f860: 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 0a  fied, then only.
f870: 74 68 69 73 20 73 70 65 63 69 66 69 63 20 69 6e  this specific in
f880: 64 65 78 20 69 73 20 64 65 6c 65 74 65 64 20 61  dex is deleted a
f890: 6e 64 20 72 65 63 72 65 61 74 65 64 2e 0a 3c 2f  nd recreated..</
f8a0: 70 3e 0a 0a 3c 70 3e 49 66 20 6e 6f 20 3c 69 3e  p>..<p>If no <i>
f8b0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
f8c0: 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  > is specified a
f8d0: 6e 64 20 74 68 65 72 65 20 65 78 69 73 74 73 20  nd there exists 
f8e0: 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72 0a  both a table or.
f8f0: 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c  index and a coll
f900: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f  ation sequence o
f910: 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
f920: 6e 61 6d 65 2c 20 74 68 65 6e 20 69 6e 64 69 63  name, then indic
f930: 65 73 20 61 73 73 6f 63 69 61 74 65 64 0a 77 69  es associated.wi
f940: 74 68 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  th the collation
f950: 20 73 65 71 75 65 6e 63 65 20 6f 6e 6c 79 20 61   sequence only a
f960: 72 65 20 72 65 63 6f 6e 73 74 72 75 63 74 65 64  re reconstructed
f970: 2e 20 54 68 69 73 20 61 6d 62 69 67 75 69 74 79  . This ambiguity
f980: 20 6d 61 79 20 62 65 0a 64 69 73 70 65 6c 6c 65   may be.dispelle
f990: 64 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63  d by always spec
f9a0: 69 66 79 69 6e 67 20 61 20 3c 69 3e 64 61 74 61  ifying a <i>data
f9b0: 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68  base-name</i> wh
f9c0: 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20 61 0a  en reindexing a.
f9d0: 73 70 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f  specific table o
f9e0: 72 20 69 6e 64 65 78 2e 0a 7d 0a 0a 53 65 63 74  r index..}..Sect
f9f0: 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c  ion REPLACE repl
fa00: 61 63 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  ace..Syntax {sql
fa10: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 52 45  -statement} {.RE
fa20: 50 4c 41 43 45 20 49 4e 54 4f 20 5b 3c 64 61 74  PLACE INTO [<dat
fa30: 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c  abase-name> .] <
fa40: 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20 3c  table-name> [( <
fa50: 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d 20  column-list> )] 
fa60: 56 41 4c 55 45 53 20 28 20 3c 76 61 6c 75 65 2d  VALUES ( <value-
fa70: 6c 69 73 74 3e 20 29 20 7c 0a 52 45 50 4c 41 43  list> ) |.REPLAC
fa80: 45 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73  E INTO [<databas
fa90: 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
faa0: 65 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75  e-name> [( <colu
fab0: 6d 6e 2d 6c 69 73 74 3e 20 29 5d 20 3c 73 65 6c  mn-list> )] <sel
fac0: 65 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d  ect-statement>.}
fad0: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20  ..puts {.<p>The 
fae0: 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20  REPLACE command 
faf0: 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
fb00: 74 68 65 20 22 49 4e 53 45 52 54 20 4f 52 20 52  the "INSERT OR R
fb10: 45 50 4c 41 43 45 22 20 76 61 72 69 61 6e 74 0a  EPLACE" variant.
fb20: 6f 66 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  of the <a href="
fb30: 23 69 6e 73 65 72 74 22 3e 49 4e 53 45 52 54 3c  #insert">INSERT<
fb40: 2f 61 3e 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68  /a> command.  Th
fb50: 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76  is alias is prov
fb60: 69 64 65 64 20 66 6f 72 0a 63 6f 6d 70 61 74 69  ided for.compati
fb70: 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
fb80: 4c 2e 20 20 53 65 65 20 74 68 65 20 0a 3c 61 20  L.  See the .<a 
fb90: 68 72 65 66 3d 22 23 69 6e 73 65 72 74 22 3e 49  href="#insert">I
fba0: 4e 53 45 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e  NSERT</a> comman
fbb0: 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  d documentation 
fbc0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 69  for additional.i
fbd0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20  nformation.</p> 
fbe0: 20 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 53 45   .}...Section SE
fbf0: 4c 45 43 54 20 73 65 6c 65 63 74 0a 0a 53 79 6e  LECT select..Syn
fc00: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
fc10: 6e 74 7d 20 7b 0a 53 45 4c 45 43 54 20 5b 41 4c  nt} {.SELECT [AL
fc20: 4c 20 7c 20 44 49 53 54 49 4e 43 54 5d 20 3c 72  L | DISTINCT] <r
fc30: 65 73 75 6c 74 3e 20 5b 46 52 4f 4d 20 3c 74 61  esult> [FROM <ta
fc40: 62 6c 65 2d 6c 69 73 74 3e 5d 0a 5b 57 48 45 52  ble-list>].[WHER
fc50: 45 20 3c 65 78 70 72 3e 5d 0a 5b 47 52 4f 55 50  E <expr>].[GROUP
fc60: 20 42 59 20 3c 65 78 70 72 2d 6c 69 73 74 3e 5d   BY <expr-list>]
fc70: 0a 5b 48 41 56 49 4e 47 20 3c 65 78 70 72 3e 5d  .[HAVING <expr>]
fc80: 0a 5b 3c 63 6f 6d 70 6f 75 6e 64 2d 6f 70 3e 20  .[<compound-op> 
fc90: 3c 73 65 6c 65 63 74 3e 5d 2a 0a 5b 4f 52 44 45  <select>]*.[ORDE
fca0: 52 20 42 59 20 3c 73 6f 72 74 2d 65 78 70 72 2d  R BY <sort-expr-
fcb0: 6c 69 73 74 3e 5d 0a 5b 4c 49 4d 49 54 20 3c 69  list>].[LIMIT <i
fcc0: 6e 74 65 67 65 72 3e 20 5b 4c 50 20 4f 46 46 53  nteger> [LP OFFS
fcd0: 45 54 20 7c 20 2c 20 52 50 20 3c 69 6e 74 65 67  ET | , RP <integ
fce0: 65 72 3e 5d 5d 0a 7d 20 7b 72 65 73 75 6c 74 7d  er>]].} {result}
fcf0: 20 7b 0a 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d   {.<result-colum
fd00: 6e 3e 20 5b 2c 20 3c 72 65 73 75 6c 74 2d 63 6f  n> [, <result-co
fd10: 6c 75 6d 6e 3e 5d 2a 0a 7d 20 7b 72 65 73 75 6c  lumn>]*.} {resul
fd20: 74 2d 63 6f 6c 75 6d 6e 7d 20 7b 0a 53 54 41 52  t-column} {.STAR
fd30: 20 7c 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20   | <table-name> 
fd40: 2e 20 53 54 41 52 20 7c 20 3c 65 78 70 72 3e 20  . STAR | <expr> 
fd50: 5b 20 5b 41 53 5d 20 3c 73 74 72 69 6e 67 3e 20  [ [AS] <string> 
fd60: 5d 0a 7d 20 7b 74 61 62 6c 65 2d 6c 69 73 74 7d  ].} {table-list}
fd70: 20 7b 0a 3c 74 61 62 6c 65 3e 20 5b 3c 6a 6f 69   {.<table> [<joi
fd80: 6e 2d 6f 70 3e 20 3c 74 61 62 6c 65 3e 20 3c 6a  n-op> <table> <j
fd90: 6f 69 6e 2d 61 72 67 73 3e 5d 2a 0a 7d 20 7b 74  oin-args>]*.} {t
fda0: 61 62 6c 65 7d 20 7b 0a 3c 74 61 62 6c 65 2d 6e  able} {.<table-n
fdb0: 61 6d 65 3e 20 5b 41 53 20 3c 61 6c 69 61 73 3e  ame> [AS <alias>
fdc0: 5d 20 7c 0a 28 20 3c 73 65 6c 65 63 74 3e 20 29  ] |.( <select> )
fdd0: 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 0a 7d 20   [AS <alias>].} 
fde0: 7b 6a 6f 69 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c 20  {join-op} {., | 
fdf0: 5b 4e 41 54 55 52 41 4c 5d 20 5b 4c 45 46 54 20  [NATURAL] [LEFT 
fe00: 7c 20 52 49 47 48 54 20 7c 20 46 55 4c 4c 5d 20  | RIGHT | FULL] 
fe10: 5b 4f 55 54 45 52 20 7c 20 49 4e 4e 45 52 20 7c  [OUTER | INNER |
fe20: 20 43 52 4f 53 53 5d 20 4a 4f 49 4e 0a 7d 20 7b   CROSS] JOIN.} {
fe30: 6a 6f 69 6e 2d 61 72 67 73 7d 20 7b 0a 5b 4f 4e  join-args} {.[ON
fe40: 20 3c 65 78 70 72 3e 5d 20 5b 55 53 49 4e 47 20   <expr>] [USING 
fe50: 28 20 3c 69 64 2d 6c 69 73 74 3e 20 29 5d 0a 7d  ( <id-list> )].}
fe60: 20 7b 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74   {sort-expr-list
fe70: 7d 20 7b 0a 3c 65 78 70 72 3e 20 5b 3c 73 6f 72  } {.<expr> [<sor
fe80: 74 2d 6f 72 64 65 72 3e 5d 20 5b 2c 20 3c 65 78  t-order>] [, <ex
fe90: 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72  pr> [<sort-order
fea0: 3e 5d 5d 2a 0a 7d 20 7b 73 6f 72 74 2d 6f 72 64  >]]*.} {sort-ord
feb0: 65 72 7d 20 7b 0a 5b 20 43 4f 4c 4c 41 54 45 20  er} {.[ COLLATE 
fec0: 3c 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e  <collation-name>
fed0: 20 5d 20 5b 20 41 53 43 20 7c 20 44 45 53 43 20   ] [ ASC | DESC 
fee0: 5d 0a 7d 20 7b 63 6f 6d 70 6f 75 6e 64 5f 6f 70  ].} {compound_op
fef0: 7d 20 7b 0a 55 4e 49 4f 4e 20 7c 20 55 4e 49 4f  } {.UNION | UNIO
ff00: 4e 20 41 4c 4c 20 7c 20 49 4e 54 45 52 53 45 43  N ALL | INTERSEC
ff10: 54 20 7c 20 45 58 43 45 50 54 0a 7d 0a 0a 70 75  T | EXCEPT.}..pu
ff20: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 53 45 4c 45  ts {.<p>The SELE
ff30: 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
ff40: 75 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68  used to query th
ff50: 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
ff60: 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c  .result of a SEL
ff70: 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d  ECT is zero or m
ff80: 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61  ore rows of data
ff90: 20 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a   where each row.
ffa0: 68 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62  has a fixed numb
ffb0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20  er of columns.  
ffc0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
ffd0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 72 65 73  lumns in the.res
ffe0: 75 6c 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ult is specified
fff0: 20 62 79 20 74 68 65 20 65 78 70 72 65 73 73 69   by the expressi
10000 6f 6e 20 6c 69 73 74 20 69 6e 20 62 65 74 77 65  on list in betwe
10010 65 6e 20 74 68 65 0a 53 45 4c 45 43 54 20 61 6e  en the.SELECT an
10020 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e  d FROM keywords.
10030 20 20 41 6e 79 20 61 72 62 69 74 72 61 72 79 20    Any arbitrary 
10040 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62  expression can b
10050 65 20 75 73 65 64 0a 61 73 20 61 20 72 65 73 75  e used.as a resu
10060 6c 74 2e 20 20 49 66 20 61 20 72 65 73 75 6c 74  lt.  If a result
10070 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 7d   expression is }
10080 0a 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  .puts "[Operator
10090 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c   *] then all col
100a0 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  umns of all tabl
100b0 65 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  es are substitut
100c0 65 64 22 0a 70 75 74 73 20 7b 66 6f 72 20 74 68  ed".puts {for th
100d0 61 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f  at one expressio
100e0 6e 2e 20 20 49 66 20 74 68 65 20 65 78 70 72 65  n.  If the expre
100f0 73 73 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d  ssion is the nam
10100 65 20 6f 66 7d 0a 70 75 74 73 20 22 61 20 74 61  e of}.puts "a ta
10110 62 6c 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ble followed by 
10120 5b 4f 70 65 72 61 74 6f 72 20 2e 2a 5d 20 74 68  [Operator .*] th
10130 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
10140 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 22 0a 70 75   all columns".pu
10150 74 73 20 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20  ts {in that one 
10160 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  table.</p>..<p>T
10170 68 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  he DISTINCT keyw
10180 6f 72 64 20 63 61 75 73 65 73 20 61 20 73 75 62  ord causes a sub
10190 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  set of result ro
101a0 77 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65  ws to be returne
101b0 64 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61 63  d, .in which eac
101c0 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  h result row is 
101d0 64 69 66 66 65 72 65 6e 74 2e 20 20 4e 55 4c 4c  different.  NULL
101e0 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74 20   values are not 
101f0 74 72 65 61 74 65 64 20 61 73 20 0a 64 69 73 74  treated as .dist
10200 69 6e 63 74 20 66 72 6f 6d 20 65 61 63 68 20 6f  inct from each o
10210 74 68 65 72 2e 20 20 54 68 65 20 64 65 66 61 75  ther.  The defau
10220 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 74  lt behavior is t
10230 68 61 74 20 61 6c 6c 20 72 65 73 75 6c 74 20 72  hat all result r
10240 6f 77 73 20 0a 62 65 20 72 65 74 75 72 6e 65 64  ows .be returned
10250 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 6d  , which can be m
10260 61 64 65 20 65 78 70 6c 69 63 69 74 20 77 69 74  ade explicit wit
10270 68 20 74 68 65 20 6b 65 79 77 6f 72 64 20 41 4c  h the keyword AL
10280 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 71  L.</p>..<p>The q
10290 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64  uery is executed
102a0 20 61 67 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20   against one or 
102b0 6d 6f 72 65 20 74 61 62 6c 65 73 20 73 70 65 63  more tables spec
102c0 69 66 69 65 64 20 61 66 74 65 72 0a 74 68 65 20  ified after.the 
102d0 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 20 49  FROM keyword.  I
102e0 66 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65  f multiple table
102f0 73 20 6e 61 6d 65 73 20 61 72 65 20 73 65 70 61  s names are sepa
10300 72 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c  rated by commas,
10310 0a 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20  .then the query 
10320 69 73 20 61 67 61 69 6e 73 74 20 74 68 65 20 63  is against the c
10330 72 6f 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65  ross join of the
10340 20 76 61 72 69 6f 75 73 20 74 61 62 6c 65 73 2e   various tables.
10350 0a 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32  .The full SQL-92
10360 20 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61 6e   join syntax can
10370 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
10380 20 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a   specify joins..
10390 41 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20 70  A sub-query.in p
103a0 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 62  arentheses may b
103b0 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f  e substituted fo
103c0 72 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65  r any table name
103d0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
103e0 75 73 65 2e 0a 54 68 65 20 65 6e 74 69 72 65 20  use..The entire 
103f0 46 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61 79 20  FROM clause may 
10400 62 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77  be omitted, in w
10410 68 69 63 68 20 63 61 73 65 20 74 68 65 20 72 65  hich case the re
10420 73 75 6c 74 20 69 73 20 61 0a 73 69 6e 67 6c 65  sult is a.single
10430 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 20   row consisting 
10440 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  of the values of
10450 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
10460 6c 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  list..</p>..<p>T
10470 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
10480 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c  can be used to l
10490 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
104a0 6f 66 20 72 6f 77 73 20 6f 76 65 72 0a 77 68 69  of rows over.whi
104b0 63 68 20 74 68 65 20 71 75 65 72 79 20 6f 70 65  ch the query ope
104c0 72 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  rates.</p>..<p>T
104d0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
104e0 73 65 73 20 63 61 75 73 65 73 20 6f 6e 65 20 6f  ses causes one o
104f0 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74  r more rows of t
10500 68 65 20 72 65 73 75 6c 74 20 74 6f 0a 62 65 20  he result to.be 
10510 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20  combined into a 
10520 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75  single row of ou
10530 74 70 75 74 2e 20 20 54 68 69 73 20 69 73 20 65  tput.  This is e
10540 73 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c  specially useful
10550 0a 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74  .when the result
10560 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
10570 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  ate functions.  
10580 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  The expressions 
10590 69 6e 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20  in.the GROUP BY 
105a0 63 6c 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f  clause do <em>no
105b0 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62  t</em> have to b
105c0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  e expressions th
105d0 61 74 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65  at.appear in the
105e0 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20 48 41   result.  The HA
105f0 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
10600 69 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20  imilar to WHERE 
10610 65 78 63 65 70 74 0a 74 68 61 74 20 48 41 56 49  except.that HAVI
10620 4e 47 20 61 70 70 6c 69 65 73 20 61 66 74 65 72  NG applies after
10630 20 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63   grouping has oc
10640 63 75 72 72 65 64 2e 20 20 54 68 65 20 48 41 56  curred.  The HAV
10650 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d  ING expression.m
10660 61 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75  ay refer to valu
10670 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61  es, even aggrega
10680 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  te functions, th
10690 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68  at are not in th
106a0 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c  e result.</p>..<
106b0 70 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  p>The ORDER BY c
106c0 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65  lause causes the
106d0 20 6f 75 74 70 75 74 20 72 6f 77 73 20 74 6f 20   output rows to 
106e0 62 65 20 73 6f 72 74 65 64 2e 20 20 0a 54 68 65  be sorted.  .The
106f0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44   argument to ORD
10700 45 52 20 42 59 20 69 73 20 61 20 6c 69 73 74 20  ER BY is a list 
10710 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  of expressions t
10720 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
10730 74 68 65 0a 6b 65 79 20 66 6f 72 20 74 68 65 20  the.key for the 
10740 73 6f 72 74 2e 20 20 54 68 65 20 65 78 70 72 65  sort.  The expre
10750 73 73 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61  ssions do not ha
10760 76 65 20 74 6f 20 62 65 20 70 61 72 74 20 6f 66  ve to be part of
10770 20 74 68 65 0a 72 65 73 75 6c 74 20 66 6f 72 20   the.result for 
10780 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c  a simple SELECT,
10790 20 62 75 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75   but in a compou
107a0 6e 64 20 53 45 4c 45 43 54 20 65 61 63 68 20 73  nd SELECT each s
107b0 6f 72 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d  ort.expression m
107c0 75 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63  ust exactly matc
107d0 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73  h one of the res
107e0 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 61  ult columns.  Ea
107f0 63 68 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69  ch.sort expressi
10800 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e  on may be option
10810 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
10820 20 61 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f   a COLLATE keywo
10830 72 64 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20  rd and.the name 
10840 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  of a collating f
10850 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72  unction used for
10860 20 6f 72 64 65 72 69 6e 67 20 74 65 78 74 20 61   ordering text a
10870 6e 64 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41  nd/or.keywords A
10880 53 43 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70  SC or DESC to sp
10890 65 63 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f  ecify the sort o
108a0 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  rder.</p>..<p>Th
108b0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 70  e LIMIT clause p
108c0 6c 61 63 65 73 20 61 6e 20 75 70 70 65 72 20 62  laces an upper b
108d0 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62  ound on the numb
108e0 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72  er of rows.retur
108f0 6e 65 64 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ned in the resul
10900 74 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 4c  t.  A negative L
10910 49 4d 49 54 20 69 6e 64 69 63 61 74 65 73 20 6e  IMIT indicates n
10920 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a 54  o upper bound..T
10930 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53  he optional OFFS
10940 45 54 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d  ET following LIM
10950 49 54 20 73 70 65 63 69 66 69 65 73 20 68 6f 77  IT specifies how
10960 20 6d 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b   many.rows to sk
10970 69 70 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  ip at the beginn
10980 69 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ing of the resul
10990 74 20 73 65 74 2e 0a 49 6e 20 61 20 63 6f 6d 70  t set..In a comp
109a0 6f 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65 20  ound query, the 
109b0 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79  LIMIT clause may
109c0 20 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e 20   only appear on 
109d0 74 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54  the.final SELECT
109e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20   statement..The 
109f0 6c 69 6d 69 74 20 69 73 20 61 70 70 6c 69 65 64  limit is applied
10a00 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 71   to the entire q
10a10 75 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20  uery not.to the 
10a20 69 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43  individual SELEC
10a30 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 77  T statement to w
10a40 68 69 63 68 20 69 74 20 69 73 20 61 74 74 61 63  hich it is attac
10a50 68 65 64 2e 0a 4e 6f 74 65 20 74 68 61 74 20 69  hed..Note that i
10a60 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79  f the OFFSET key
10a70 77 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e 20  word is used in 
10a80 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
10a90 2c 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69 74  , then the.limit
10aa0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 75   is the first nu
10ab0 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66 66  mber and the off
10ac0 73 65 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e  set is the secon
10ad0 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 61 0a  d number.  If a.
10ae0 63 6f 6d 6d 61 20 69 73 20 75 73 65 64 20 69 6e  comma is used in
10af0 73 74 65 61 64 20 6f 66 20 74 68 65 20 4f 46 46  stead of the OFF
10b00 53 45 54 20 6b 65 79 77 6f 72 64 2c 20 74 68 65  SET keyword, the
10b10 6e 20 74 68 65 20 6f 66 66 73 65 74 20 69 73 20  n the offset is 
10b20 74 68 65 0a 66 69 72 73 74 20 6e 75 6d 62 65 72  the.first number
10b30 20 61 6e 64 20 74 68 65 20 6c 69 6d 69 74 20 69   and the limit i
10b40 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d  s the second num
10b50 62 65 72 2e 20 20 54 68 69 73 20 73 65 65 6d 69  ber.  This seemi
10b60 6e 67 0a 63 6f 6e 74 72 61 64 69 74 69 6f 6e 20  ng.contradition 
10b70 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d  is intentional -
10b80 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f   it maximizes co
10b90 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
10ba0 20 6c 65 67 61 63 79 0a 53 51 4c 20 64 61 74 61   legacy.SQL data
10bb0 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 3c 2f  base systems..</
10bc0 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e  p>..<p>A compoun
10bd0 64 20 53 45 4c 45 43 54 20 69 73 20 66 6f 72 6d  d SELECT is form
10be0 65 64 20 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d  ed from two or m
10bf0 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  ore simple SELEC
10c00 54 73 20 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20  Ts connected.by 
10c10 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65 72 61  one of the opera
10c20 74 6f 72 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f  tors UNION, UNIO
10c30 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54  N ALL, INTERSECT
10c40 2c 20 6f 72 20 45 58 43 45 50 54 2e 20 20 49 6e  , or EXCEPT.  In
10c50 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  .a compound SELE
10c60 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73  CT, all the cons
10c70 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20  tituent SELECTs 
10c80 6d 75 73 74 20 73 70 65 63 69 66 79 20 74 68 65  must specify the
10c90 0a 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20  .same number of 
10ca0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20  result columns. 
10cb0 20 54 68 65 72 65 20 6d 61 79 20 62 65 20 6f 6e   There may be on
10cc0 6c 79 20 61 20 73 69 6e 67 6c 65 20 4f 52 44 45  ly a single ORDE
10cd0 52 20 42 59 0a 63 6c 61 75 73 65 20 61 74 20 74  R BY.clause at t
10ce0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 6f  he end of the co
10cf0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 20  mpound SELECT.  
10d00 54 68 65 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e  The UNION and UN
10d10 49 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72  ION ALL.operator
10d20 73 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 72 65  s combine the re
10d30 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c  sults of the SEL
10d40 45 43 54 73 20 74 6f 20 74 68 65 20 72 69 67 68  ECTs to the righ
10d50 74 20 61 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a  t and left into.
10d60 61 20 73 69 6e 67 6c 65 20 62 69 67 20 74 61 62  a single big tab
10d70 6c 65 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  le.  The differe
10d80 6e 63 65 20 69 73 20 74 68 61 74 20 69 6e 20 55  nce is that in U
10d90 4e 49 4f 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20  NION all result 
10da0 72 6f 77 73 0a 61 72 65 20 64 69 73 74 69 6e 63  rows.are distinc
10db0 74 20 77 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e  t where in UNION
10dc0 20 41 4c 4c 20 74 68 65 72 65 20 6d 61 79 20 62   ALL there may b
10dd0 65 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 54 68  e duplicates..Th
10de0 65 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72  e INTERSECT oper
10df0 61 74 6f 72 20 74 61 6b 65 73 20 74 68 65 20 69  ator takes the i
10e00 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74  ntersection of t
10e10 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
10e20 65 0a 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e.left and right
10e30 20 53 45 4c 45 43 54 73 2e 20 20 45 58 43 45 50   SELECTs.  EXCEP
10e40 54 20 74 61 6b 65 73 20 74 68 65 20 72 65 73 75  T takes the resu
10e50 6c 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45 43  lt of left SELEC
10e60 54 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67  T after.removing
10e70 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
10e80 74 68 65 20 72 69 67 68 74 20 53 45 4c 45 43 54  the right SELECT
10e90 2e 20 20 57 68 65 6e 20 74 68 72 65 65 20 6f 72  .  When three or
10ea0 20 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a 61 72   more SELECTs.ar
10eb0 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f  e connected into
10ec0 20 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65   a compound, the
10ed0 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66  y group from lef
10ee0 74 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a  t to right.</p>.
10ef0 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 55 50 44 41  }...Section UPDA
10f00 54 45 20 75 70 64 61 74 65 0a 0a 53 79 6e 74 61  TE update..Synta
10f10 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
10f20 7d 20 7b 0a 55 50 44 41 54 45 20 5b 20 4f 52 20  } {.UPDATE [ OR 
10f30 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69  <conflict-algori
10f40 74 68 6d 3e 20 5d 20 5b 3c 64 61 74 61 62 61 73  thm> ] [<databas
10f50 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
10f60 65 2d 6e 61 6d 65 3e 0a 53 45 54 20 3c 61 73 73  e-name>.SET <ass
10f70 69 67 6e 6d 65 6e 74 3e 20 5b 2c 20 3c 61 73 73  ignment> [, <ass
10f80 69 67 6e 6d 65 6e 74 3e 5d 2a 0a 5b 57 48 45 52  ignment>]*.[WHER
10f90 45 20 3c 65 78 70 72 3e 5d 0a 7d 20 7b 61 73 73  E <expr>].} {ass
10fa0 69 67 6e 6d 65 6e 74 7d 20 7b 0a 3c 63 6f 6c 75  ignment} {.<colu
10fb0 6d 6e 2d 6e 61 6d 65 3e 20 3d 20 3c 65 78 70 72  mn-name> = <expr
10fc0 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  >.}..puts {.<p>T
10fd0 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
10fe0 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 63  ent is used to c
10ff0 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20  hange the value 
11000 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73  of columns in .s
11010 65 6c 65 63 74 65 64 20 72 6f 77 73 20 6f 66 20  elected rows of 
11020 61 20 74 61 62 6c 65 2e 20 20 45 61 63 68 20 61  a table.  Each a
11030 73 73 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20  ssignment in an 
11040 55 50 44 41 54 45 20 73 70 65 63 69 66 69 65 73  UPDATE specifies
11050 0a 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74  .a column name t
11060 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68  o the left of th
11070 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e  e equals sign an
11080 64 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 65  d an arbitrary e
11090 78 70 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65  xpression.to the
110a0 20 72 69 67 68 74 2e 20 20 54 68 65 20 65 78 70   right.  The exp
110b0 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65  ressions may use
110c0 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f   the values of o
110d0 74 68 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c  ther columns..Al
110e0 6c 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  l expressions ar
110f0 65 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f  e evaluated befo
11100 72 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e  re any assignmen
11110 74 73 20 61 72 65 20 6d 61 64 65 2e 0a 41 20 57  ts are made..A W
11120 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20  HERE clause can 
11130 62 65 20 75 73 65 64 20 74 6f 20 72 65 73 74 72  be used to restr
11140 69 63 74 20 77 68 69 63 68 20 72 6f 77 73 20 61  ict which rows a
11150 72 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a  re updated.</p>.
11160 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
11170 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65   conflict-clause
11180 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63   allows the spec
11190 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20  ification of an 
111a0 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73  alternative.cons
111b0 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
111c0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
111d0 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
111e0 6e 67 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d  ng this one comm
111f0 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63  and..See the sec
11200 74 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68  tion titled.<a h
11210 72 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e  ref="#conflict">
11220 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20  ON CONFLICT</a> 
11230 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
11240 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  nformation.</p>.
11250 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 56 41 43 55  }...Section VACU
11260 55 4d 20 76 61 63 75 75 6d 0a 0a 53 79 6e 74 61  UM vacuum..Synta
11270 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
11280 7d 20 7b 0a 56 41 43 55 55 4d 20 5b 3c 69 6e 64  } {.VACUUM [<ind
11290 65 78 2d 6f 72 2d 74 61 62 6c 65 2d 6e 61 6d 65  ex-or-table-name
112a0 3e 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  >].}..puts {.<p>
112b0 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
112c0 6e 64 20 69 73 20 61 6e 20 53 51 4c 69 74 65 20  nd is an SQLite 
112d0 65 78 74 65 6e 73 69 6f 6e 20 6d 6f 64 65 6c 65  extension modele
112e0 64 20 61 66 74 65 72 20 61 20 73 69 6d 69 6c 61  d after a simila
112f0 72 0a 63 6f 6d 6d 61 6e 64 20 66 6f 75 6e 64 20  r.command found 
11300 69 6e 20 50 6f 73 74 67 72 65 53 51 4c 2e 20 20  in PostgreSQL.  
11310 49 66 20 56 41 43 55 55 4d 20 69 73 20 69 6e 76  If VACUUM is inv
11320 6f 6b 65 64 20 77 69 74 68 20 74 68 65 20 6e 61  oked with the na
11330 6d 65 20 6f 66 20 61 0a 74 61 62 6c 65 20 6f 72  me of a.table or
11340 20 69 6e 64 65 78 20 74 68 65 6e 20 69 74 20 69   index then it i
11350 73 20 73 75 70 70 6f 73 65 20 74 6f 20 63 6c 65  s suppose to cle
11360 61 6e 20 75 70 20 74 68 65 20 6e 61 6d 65 64 20  an up the named 
11370 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
11380 49 6e 20 76 65 72 73 69 6f 6e 20 31 2e 30 20 6f  In version 1.0 o
11390 66 20 53 51 4c 69 74 65 2c 20 74 68 65 20 56 41  f SQLite, the VA
113a0 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 75  CUUM command wou
113b0 6c 64 20 69 6e 76 6f 6b 65 20 0a 3c 62 3e 67 64  ld invoke .<b>gd
113c0 62 6d 5f 72 65 6f 72 67 61 6e 69 7a 65 28 29 3c  bm_reorganize()<
113d0 2f 62 3e 20 74 6f 20 63 6c 65 61 6e 20 75 70 20  /b> to clean up 
113e0 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61  the backend data
113f0 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
11400 3c 70 3e 0a 56 41 43 55 55 4d 20 62 65 63 61 6d  <p>.VACUUM becam
11410 65 20 61 20 6e 6f 2d 6f 70 20 77 68 65 6e 20 74  e a no-op when t
11420 68 65 20 47 44 42 4d 20 62 61 63 6b 65 6e 64 20  he GDBM backend 
11430 77 61 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  was removed from
11440 0a 53 51 4c 49 54 45 20 69 6e 20 76 65 72 73 69  .SQLITE in versi
11450 6f 6e 20 32 2e 30 2e 30 2e 0a 56 41 43 55 55 4d  on 2.0.0..VACUUM
11460 20 77 61 73 20 72 65 69 6d 70 6c 65 6d 65 6e 74   was reimplement
11470 65 64 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e  ed in version 2.
11480 38 2e 31 2e 0a 54 68 65 20 69 6e 64 65 78 20 6f  8.1..The index o
11490 72 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 72 67  r table name arg
114a0 75 6d 65 6e 74 20 69 73 20 6e 6f 77 20 69 67 6e  ument is now ign
114b0 6f 72 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57  ored..</p>..<p>W
114c0 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20 28 74  hen an object (t
114d0 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20  able, index, or 
114e0 74 72 69 67 67 65 72 29 20 69 73 20 64 72 6f 70  trigger) is drop
114f0 70 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 64 61  ped from the .da
11500 74 61 62 61 73 65 2c 20 69 74 20 6c 65 61 76 65  tabase, it leave
11510 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 20 73  s behind empty s
11520 70 61 63 65 2e 20 20 54 68 69 73 20 6d 61 6b 65  pace.  This make
11530 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  s the database .
11540 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e  file larger than
11550 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 2c   it needs to be,
11560 20 62 75 74 20 63 61 6e 20 73 70 65 65 64 20 75   but can speed u
11570 70 20 69 6e 73 65 72 74 73 2e 20 20 49 6e 20 74  p inserts.  In t
11580 69 6d 65 20 0a 69 6e 73 65 72 74 73 20 61 6e 64  ime .inserts and
11590 20 64 65 6c 65 74 65 73 20 63 61 6e 20 6c 65 61   deletes can lea
115a0 76 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ve the database 
115b0 66 69 6c 65 20 73 74 72 75 63 74 75 72 65 20 66  file structure f
115c0 72 61 67 6d 65 6e 74 65 64 2c 20 0a 77 68 69 63  ragmented, .whic
115d0 68 20 73 6c 6f 77 73 20 64 6f 77 6e 20 64 69 73  h slows down dis
115e0 6b 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  k access to the 
115f0 64 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74  database content
11600 73 2e 0a 0a 54 68 65 20 56 41 43 55 55 4d 20 63  s...The VACUUM c
11610 6f 6d 6d 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68  ommand cleans.th
11620 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
11630 62 79 20 63 6f 70 79 69 6e 67 20 69 74 73 20 63  by copying its c
11640 6f 6e 74 65 6e 74 73 20 74 6f 20 61 20 74 65 6d  ontents to a tem
11650 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20  porary database 
11660 66 69 6c 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64  file and .reload
11670 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
11680 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
11690 72 6f 6d 20 74 68 65 20 63 6f 70 79 2e 20 20 54  rom the copy.  T
116a0 68 69 73 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a  his eliminates .
116b0 66 72 65 65 20 70 61 67 65 73 2c 20 20 61 6c 69  free pages,  ali
116c0 67 6e 73 20 74 61 62 6c 65 20 64 61 74 61 20 74  gns table data t
116d0 6f 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c  o be contiguous,
116e0 20 61 6e 64 20 6f 74 68 65 72 77 69 73 65 20 63   and otherwise c
116f0 6c 65 61 6e 73 20 0a 75 70 20 74 68 65 20 64 61  leans .up the da
11700 74 61 62 61 73 65 20 66 69 6c 65 20 73 74 72 75  tabase file stru
11710 63 74 75 72 65 2e 20 49 74 20 69 73 20 6e 6f 74  cture. It is not
11720 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 70 65 72   possible to per
11730 66 6f 72 6d 20 74 68 65 20 73 61 6d 65 0a 70 72  form the same.pr
11740 6f 63 65 73 73 20 6f 6e 20 61 6e 20 61 74 74 61  ocess on an atta
11750 63 68 65 64 20 64 61 74 61 62 61 73 65 20 66 69  ched database fi
11760 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73  le.</p>..<p>This
11770 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61   command will fa
11780 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61  il if there is a
11790 6e 20 61 63 74 69 76 65 20 74 72 61 6e 73 61 63  n active transac
117a0 74 69 6f 6e 2e 20 20 54 68 69 73 20 0a 63 6f 6d  tion.  This .com
117b0 6d 61 6e 64 20 68 61 73 20 6e 6f 20 65 66 66 65  mand has no effe
117c0 63 74 20 6f 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f  ct on an in-memo
117d0 72 79 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  ry database.</p>
117e0 0a 0a 3c 70 3e 41 73 20 6f 66 20 53 51 4c 69 74  ..<p>As of SQLit
117f0 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61  e version 3.1, a
11800 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f  n alternative to
11810 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55   using the VACUU
11820 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74  M command.is aut
11830 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65  o-vacuum mode, e
11840 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
11850 20 0a 3c 61 20 68 72 65 66 3d 22 70 72 61 67 6d   .<a href="pragm
11860 61 2e 68 74 6d 6c 23 70 72 61 67 6d 61 5f 61 75  a.html#pragma_au
11870 74 6f 5f 76 61 63 75 75 6d 22 3e 61 75 74 6f 5f  to_vacuum">auto_
11880 76 61 63 75 75 6d 20 70 72 61 67 6d 61 3c 2f 61  vacuum pragma</a
11890 3e 2e 3c 2f 70 3e 0a 7d 0a 0a 23 20 41 20 6c 69  >.</p>.}..# A li
118a0 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20  st of keywords. 
118b0 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75   A asterisk occu
118c0 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79  rs after the key
118d0 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e  word if it is on
118e0 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20  .# the fallback 
118f0 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77  list..#.set keyw
11900 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20  ord_list [lsort 
11910 7b 0a 20 20 20 41 42 4f 52 54 2a 0a 20 20 20 41  {.   ABORT*.   A
11920 46 54 45 52 2a 0a 20 20 20 41 4c 4c 0a 20 20 20  FTER*.   ALL.   
11930 41 4c 54 45 52 0a 20 20 20 41 4e 44 0a 20 20 20  ALTER.   AND.   
11940 41 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54  AS.   ASC*.   AT
11950 54 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43  TACH*.   AUTOINC
11960 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45  REMENT.   BEFORE
11970 2a 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42  *.   BEGIN*.   B
11980 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20  ETWEEN.   BY.   
11990 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53 45  CASCADE*.   CASE
119a0 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c  .   CHECK.   COL
119b0 4c 41 54 45 0a 20 20 20 43 4f 4d 4d 49 54 0a 20  LATE.   COMMIT. 
119c0 20 20 43 4f 4e 46 4c 49 43 54 2a 0a 20 20 20 43    CONFLICT*.   C
119d0 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45  ONSTRAINT.   CRE
119e0 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20  ATE.   CROSS.   
119f0 43 55 52 52 45 4e 54 5f 44 41 54 45 2a 0a 20 20  CURRENT_DATE*.  
11a00 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2a 0a 20   CURRENT_TIME*. 
11a10 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54    CURRENT_TIMEST
11a20 41 4d 50 2a 0a 20 20 20 44 41 54 41 42 41 53 45  AMP*.   DATABASE
11a30 2a 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20  *.   DEFAULT.   
11a40 44 45 46 45 52 52 45 44 2a 0a 20 20 20 44 45 46  DEFERRED*.   DEF
11a50 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54  ERRABLE.   DELET
11a60 45 0a 20 20 20 44 45 53 43 2a 0a 20 20 20 44 45  E.   DESC*.   DE
11a70 54 41 43 48 2a 0a 20 20 20 44 49 53 54 49 4e 43  TACH*.   DISTINC
11a80 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44  T.   DROP.   END
11a90 2a 0a 20 20 20 45 41 43 48 2a 0a 20 20 20 45 4c  *.   EACH*.   EL
11aa0 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20  SE.   ESCAPE.   
11ab0 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53  EXCEPT.   EXCLUS
11ac0 49 56 45 2a 0a 20 20 20 45 58 50 4c 41 49 4e 2a  IVE*.   EXPLAIN*
11ad0 0a 20 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f 52  .   FAIL*.   FOR
11ae0 2a 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20  *.   FOREIGN.   
11af0 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20  FROM.   FULL.   
11b00 47 4c 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a 20  GLOB*.   GROUP. 
11b10 20 20 48 41 56 49 4e 47 0a 20 20 20 49 47 4e 4f    HAVING.   IGNO
11b20 52 45 2a 0a 20 20 20 49 4d 4d 45 44 49 41 54 45  RE*.   IMMEDIATE
11b30 2a 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58  *.   IN.   INDEX
11b40 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a 20  .   INITIALLY*. 
11b50 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
11b60 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20 20  T.   INSTEAD*.  
11b70 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e   INTERSECT.   IN
11b80 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55  TO.   IS.   ISNU
11b90 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45  LL.   JOIN.   KE
11ba0 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49  Y*.   LEFT.   LI
11bb0 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20  KE*.   LIMIT.   
11bc0 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52 41  MATCH*.   NATURA
11bd0 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e  L.   NOT.   NOTN
11be0 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f  ULL.   NULL.   O
11bf0 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20 20  F*.   OFFSET*.  
11c00 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
11c10 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
11c20 52 41 47 4d 41 2a 0a 20 20 20 50 52 49 4d 41 52  RAGMA*.   PRIMAR
11c30 59 0a 20 20 20 52 41 49 53 45 2a 0a 20 20 20 52  Y.   RAISE*.   R
11c40 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 49  EFERENCES.   REI
11c50 4e 44 45 58 2a 0a 20 20 20 52 45 4e 41 4d 45 2a  NDEX*.   RENAME*
11c60 0a 20 20 20 52 45 50 4c 41 43 45 2a 0a 20 20 20  .   REPLACE*.   
11c70 52 45 53 54 52 49 43 54 2a 0a 20 20 20 52 49 47  RESTRICT*.   RIG
11c80 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20  HT.   ROLLBACK. 
11c90 20 20 52 4f 57 2a 0a 20 20 20 53 45 4c 45 43 54    ROW*.   SELECT
11ca0 0a 20 20 20 53 45 54 0a 20 20 20 53 54 41 54 45  .   SET.   STATE
11cb0 4d 45 4e 54 2a 0a 20 20 20 54 41 42 4c 45 0a 20  MENT*.   TABLE. 
11cc0 20 20 54 45 4d 50 2a 0a 20 20 20 54 45 4d 50 4f    TEMP*.   TEMPO
11cd0 52 41 52 59 2a 0a 20 20 20 54 48 45 4e 0a 20 20  RARY*.   THEN.  
11ce0 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49   TO.   TRANSACTI
11cf0 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 2a 0a 20  ON.   TRIGGER*. 
11d00 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55    UNION.   UNIQU
11d10 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55  E.   UPDATE.   U
11d20 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 2a 0a  SING.   VACUUM*.
11d30 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45     VALUES.   VIE
11d40 57 2a 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48  W*.   WHEN.   WH
11d50 45 52 45 0a 7d 5d 0a 0a 0a 0a 53 65 63 74 69 6f  ERE.}]....Sectio
11d60 6e 20 7b 53 51 4c 69 74 65 20 6b 65 79 77 6f 72  n {SQLite keywor
11d70 64 73 7d 20 6b 65 79 77 6f 72 64 73 0a 0a 70 75  ds} keywords..pu
11d80 74 73 20 7b 0a 3c 70 3e 54 68 65 20 53 51 4c 20  ts {.<p>The SQL 
11d90 73 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69  standard specifi
11da0 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72  es a huge number
11db0 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69   of keywords whi
11dc0 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73  ch may not.be us
11dd0 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20  ed as the names 
11de0 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63  of tables, indic
11df0 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20  es, columns, or 
11e00 64 61 74 61 62 61 73 65 73 2e 20 20 54 68 65 0a  databases.  The.
11e10 6c 69 73 74 20 69 73 20 73 6f 20 6c 6f 6e 67 20  list is so long 
11e20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20  that few people 
11e30 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65  can remember the
11e40 6d 20 61 6c 6c 2e 20 20 46 6f 72 20 6d 6f 73 74  m all.  For most
11e50 20 53 51 4c 0a 63 6f 64 65 2c 20 79 6f 75 72 20   SQL.code, your 
11e60 73 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f  safest bet is to
11e70 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45   never use any E
11e80 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
11e90 77 6f 72 64 20 61 73 20 74 68 65 0a 6e 61 6d 65  word as the.name
11ea0 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e   of a user-defin
11eb0 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a  ed object.</p>..
11ec0 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74  <p>If you want t
11ed0 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20  o use a keyword 
11ee0 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e  as a name, you n
11ef0 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e  eed to quote it.
11f00 20 20 54 68 65 72 65 0a 61 72 65 20 74 68 72 65    There.are thre
11f10 65 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e  e ways of quotin
11f20 67 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51  g keywords in SQ
11f30 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  Lite:</p>..<p>.<
11f40 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
11f50 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  le>.<tr>.<td val
11f60 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65  ign="top"><b>'ke
11f70 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c  yword'</b></td><
11f80 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
11f90 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f  td>..<td>A keywo
11fa0 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  rd in single quo
11fb0 74 65 73 20 69 73 20 69 6e 74 65 72 70 72 65 74  tes is interpret
11fc0 65 64 20 61 73 20 61 20 6c 69 74 65 72 61 6c 20  ed as a literal 
11fd0 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 69  string.        i
11fe0 66 20 69 74 20 6f 63 63 75 72 73 20 69 6e 20 61  f it occurs in a
11ff0 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 20 61   context where a
12000 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20   string literal 
12010 69 73 20 61 6c 6c 6f 77 65 64 2c 20 6f 74 68 65  is allowed, othe
12020 72 77 69 73 65 0a 09 69 74 20 69 73 20 75 6e 64  rwise..it is und
12030 65 72 73 74 6f 6f 64 20 61 73 20 61 6e 20 69 64  erstood as an id
12040 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f  entifier.</td></
12050 74 72 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
12060 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65  ign="top"><b>"ke
12070 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c  yword"</b></td><
12080 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20  td></td>..<td>A 
12090 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
120a0 65 2d 71 75 6f 74 65 73 20 69 73 20 69 6e 74 65  e-quotes is inte
120b0 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 64  rpreted as an id
120c0 65 6e 74 69 66 69 65 72 20 69 66 0a 20 20 20 20  entifier if.    
120d0 20 20 20 20 69 74 20 6d 61 74 63 68 65 73 20 61      it matches a
120e0 20 6b 6e 6f 77 6e 20 69 64 65 6e 74 69 66 69 65   known identifie
120f0 72 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  r.  Otherwise it
12100 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20   is interpreted 
12110 61 73 20 61 0a 20 20 20 20 20 20 20 20 73 74 72  as a.        str
12120 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64  ing literal.</td
12130 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74 64 20  ></tr>.<tr>.<td 
12140 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
12150 5b 6b 65 79 77 6f 72 64 5d 3c 2f 62 3e 3c 2f 74  [keyword]</b></t
12160 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
12170 3e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  >A keyword enclo
12180 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62 72  sed in square br
12190 61 63 6b 65 74 73 20 69 73 20 61 6c 77 61 79 73  ackets is always
121a0 20 75 6e 64 65 72 73 74 6f 6f 64 20 61 73 0a 20   understood as. 
121b0 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69         an identi
121c0 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e  fier.  This is n
121d0 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
121e0 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d    This quoting m
121f0 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20  echanism.       
12200 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20 41   is used by MS A
12210 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65  ccess and SQL Se
12220 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c  rver and is incl
12230 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66  uded in SQLite f
12240 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  or.        compa
12250 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f  tibility.</td></
12260 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
12270 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a  lockquote>.</p>.
12280 0a 3c 70 3e 51 75 6f 74 65 64 20 6b 65 79 77 6f  .<p>Quoted keywo
12290 72 64 73 20 61 72 65 20 75 6e 61 65 73 74 68 65  rds are unaesthe
122a0 74 69 63 2e 0a 54 6f 20 68 65 6c 70 20 79 6f 75  tic..To help you
122b0 20 61 76 6f 69 64 20 74 68 65 6d 2c 20 53 51 4c   avoid them, SQL
122c0 69 74 65 20 61 6c 6c 6f 77 73 20 6d 61 6e 79 20  ite allows many 
122d0 6b 65 79 77 6f 72 64 73 20 74 6f 20 62 65 20 75  keywords to be u
122e0 73 65 64 20 75 6e 71 75 6f 74 65 64 0a 61 73 20  sed unquoted.as 
122f0 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 64 61 74  the names of dat
12300 61 62 61 73 65 73 2c 20 74 61 62 6c 65 73 2c 20  abases, tables, 
12310 69 6e 64 69 63 65 73 2c 20 74 72 69 67 67 65 72  indices, trigger
12320 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 2f 6f 72  s, views, and/or
12330 20 63 6f 6c 75 6d 6e 73 2e 0a 49 6e 20 74 68 65   columns..In the
12340 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
12350 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 2c 20  s that follows, 
12360 74 68 6f 73 65 20 74 68 61 74 20 63 61 6e 20 62  those that can b
12370 65 20 75 73 65 64 20 61 73 20 69 64 65 6e 74 69  e used as identi
12380 66 69 65 72 73 0a 61 72 65 20 73 68 6f 77 6e 20  fiers.are shown 
12390 69 6e 20 61 6e 20 69 74 61 6c 69 63 20 66 6f 6e  in an italic fon
123a0 74 2e 20 20 4b 65 79 77 6f 72 64 73 20 74 68 61  t.  Keywords tha
123b0 74 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64  t must be quoted
123c0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 0a   in order to be.
123d0 75 73 65 64 20 61 73 20 69 64 65 6e 74 69 66 69  used as identifi
123e0 65 72 73 20 61 72 65 20 73 68 6f 77 6e 20 69 6e  ers are shown in
123f0 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a   bold.</p>..<p>.
12400 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
12410 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69  keywords from ti
12420 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20  me to time when 
12430 69 74 20 74 61 6b 65 20 6f 6e 20 6e 65 77 20 66  it take on new f
12440 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70  eatures..So to p
12450 72 65 76 65 6e 74 20 79 6f 75 20 63 6f 64 65 20  revent you code 
12460 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65  from being broke
12470 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e 68 61  n by future enha
12480 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68  ncements, you sh
12490 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75  ould.normally qu
124a0 6f 74 65 20 61 6e 79 20 69 6e 64 65 6e 74 69 66  ote any indentif
124b0 69 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45  ier that is an E
124c0 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
124d0 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f  word, even if.yo
124e0 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f  u do not have to
124f0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
12500 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
12510 65 20 6b 65 79 77 6f 72 64 73 20 63 75 72 72 65  e keywords curre
12520 6e 74 6c 79 20 72 65 63 6f 67 6e 69 7a 65 64 20  ntly recognized 
12530 62 79 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a  by SQLite:.</p>.
12540 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
12550 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
12560 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ">.<tr>.<td alig
12570 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d  n="left" valign=
12580 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25  "top" width="20%
12590 22 3e 0a 7d 0a 0a 73 65 74 20 6e 20 5b 6c 6c 65  ">.}..set n [lle
125a0 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69  ngth $keyword_li
125b0 73 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73  st].set nCol 5.s
125c0 65 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28  et nRow [expr {(
125d0 24 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f  $n+$nCol-1)/$nCo
125e0 6c 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65  l}].set i 0.fore
125f0 61 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72  ach word $keywor
12600 64 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 5b  d_list {.  if {[
12610 73 74 72 69 6e 67 20 69 6e 64 65 78 20 24 77 6f  string index $wo
12620 72 64 20 65 6e 64 5d 3d 3d 22 2a 22 7d 20 7b 0a  rd end]=="*"} {.
12630 20 20 20 20 73 65 74 20 77 6f 72 64 20 5b 73 74      set word [st
12640 72 69 6e 67 20 72 61 6e 67 65 20 24 77 6f 72 64  ring range $word
12650 20 30 20 65 6e 64 2d 31 5d 0a 20 20 20 20 73 65   0 end-1].    se
12660 74 20 66 6f 6e 74 20 69 0a 20 20 7d 20 65 6c 73  t font i.  } els
12670 65 20 7b 0a 20 20 20 20 73 65 74 20 66 6f 6e 74  e {.    set font
12680 20 62 0a 20 20 7d 0a 20 20 69 66 20 7b 24 69 3d   b.  }.  if {$i=
12690 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 70 75  =$nRow} {.    pu
126a0 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  ts "</td><td val
126b0 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67  ign=\"top\" alig
126c0 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68  n=\"left\" width
126d0 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73  =\"20%\">".    s
126e0 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20  et i 1.  } else 
126f0 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d  {.    incr i.  }
12700 0a 20 20 70 75 74 73 20 22 3c 24 66 6f 6e 74 3e  .  puts "<$font>
12710 24 77 6f 72 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72  $word</$font><br
12720 3e 22 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 2f 74  >".}..puts {.</t
12730 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c  d></tr></table><
12740 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68  /blockquote>..<h
12750 32 3e 53 70 65 63 69 61 6c 20 6e 61 6d 65 73 3c  2>Special names<
12760 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h2>..<p>The fol
12770 6c 6f 77 69 6e 67 20 61 72 65 20 6e 6f 74 20 6b  lowing are not k
12780 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
12790 65 2c 20 62 75 74 20 61 72 65 20 75 73 65 64 20  e, but are used 
127a0 61 73 20 6e 61 6d 65 73 20 6f 66 20 0a 73 79 73  as names of .sys
127b0 74 65 6d 20 6f 62 6a 65 63 74 73 2e 20 20 54 68  tem objects.  Th
127c0 65 79 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ey can be used a
127d0 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
127e0 66 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74 20  for a different 
127f0 0a 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 2e  .type of object.
12800 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
12810 65 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c  e><b>.  _ROWID_<
12820 62 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20  br>.  MAIN<br>. 
12830 20 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44   OID<br>.  ROWID
12840 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41  <br>.  SQLITE_MA
12850 53 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54  STER<br>.  SQLIT
12860 45 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20  E_SEQUENCE<br>. 
12870 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53   SQLITE_TEMP_MAS
12880 54 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62  TER<br>.  TEMP<b
12890 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75  r>.</b></blockqu
128a0 6f 74 65 3e 0a 7d 0a 0a 66 6f 6f 74 65 72 20 24  ote>.}..footer $
128b0 72 63 73 69 64 0a 69 66 20 7b 5b 73 74 72 69 6e  rcsid.if {[strin
128c0 67 20 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74  g length $output
128d0 64 69 72 5d 7d 20 7b 0a 20 20 66 6f 6f 74 65 72  dir]} {.  footer
128e0 20 24 72 63 73 69 64 0a 7d 0a                     $rcsid.}.