/ Hex Artifact Content
Login

Artifact ccbd38d9597117841b130287a19534b14dbf8990:


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 39 20 32 30  g.tcl,v 1.119 20
0060: 30 37 2f 30 31 2f 32 39 20 31 35 3a 35 30 3a 30  07/01/29 15:50:0
0070: 36 20 64 72 68 20 45 78 70 20 24 7d 0a 73 6f 75  6 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 61 6e 64 6f 6d 68 65 78 28  ight">randomhex(
cf30: 3c 69 3e 4e 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>N</i>)</td>.<
cf40: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
cf50: 52 65 74 75 72 6e 20 61 20 70 73 65 75 64 6f 2d  Return a pseudo-
cf60: 72 61 6e 64 6f 6d 20 68 65 78 61 64 65 63 69 6d  random hexadecim
cf70: 61 6c 20 73 74 72 69 6e 67 20 74 68 61 74 20 69  al string that i
cf80: 73 0a 3c 69 3e 4e 3c 2f 69 3e 20 63 68 61 72 61  s.<i>N</i> chara
cf90: 63 74 65 72 73 20 69 6e 20 6c 65 6e 67 74 68 2e  cters in length.
cfa0: 20 20 3c 69 3e 4e 3c 2f 69 3e 20 73 68 6f 75 6c    <i>N</i> shoul
cfb0: 64 20 62 65 20 61 6e 20 65 76 65 6e 20 69 6e 74  d be an even int
cfc0: 65 67 65 72 20 62 65 74 77 65 65 6e 0a 32 20 61  eger between.2 a
cfd0: 6e 64 20 31 30 30 30 2e 20 20 54 68 65 20 69 6e  nd 1000.  The in
cfe0: 74 65 6e 64 65 64 20 75 73 65 20 6f 66 20 74 68  tended use of th
cff0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  is function is t
d000: 6f 20 67 65 6e 65 72 61 74 65 0a 75 6e 69 76 65  o generate.unive
d010: 72 73 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64  rsally unique id
d020: 65 6e 74 69 66 69 65 72 73 20 28 55 55 49 44 29  entifiers (UUID)
d030: 2e 20 20 46 6f 72 20 74 68 61 74 20 70 75 72 70  .  For that purp
d040: 6f 73 65 2c 20 69 74 20 69 73 20 72 65 63 6f 6d  ose, it is recom
d050: 6d 65 6e 64 65 64 0a 74 68 61 74 20 3c 69 3e 4e  mended.that <i>N
d060: 3c 2f 69 3e 20 62 65 20 61 74 20 6c 65 61 73 74  </i> be at least
d070: 20 33 32 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a   32.</td>.</tr>.
d080: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
d090: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
d0a0: 67 68 74 22 3e 72 6f 75 6e 64 28 3c 69 3e 58 3c  ght">round(<i>X<
d0b0: 2f 69 3e 29 3c 62 72 3e 72 6f 75 6e 64 28 3c 69  /i>)<br>round(<i
d0c0: 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29  >X</i>,<i>Y</i>)
d0d0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d0e0: 3d 22 74 6f 70 22 3e 52 6f 75 6e 64 20 6f 66 66  ="top">Round off
d0f0: 20 74 68 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58   the number <i>X
d100: 3c 2f 69 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e  </i> to <i>Y</i>
d110: 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 0a 72   digits to the.r
d120: 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69  ight of the deci
d130: 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66 20 74  mal point.  If t
d140: 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75  he <i>Y</i> argu
d150: 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
d160: 20 30 20 69 73 20 0a 61 73 73 75 6d 65 64 2e 3c   0 is .assumed.<
d170: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
d180: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
d190: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
d1a0: 73 6f 75 6e 64 65 78 28 3c 69 3e 58 3c 2f 69 3e  soundex(<i>X</i>
d1b0: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
d1c0: 6e 3d 22 74 6f 70 22 3e 43 6f 6d 70 75 74 65 20  n="top">Compute 
d1d0: 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f  the soundex enco
d1e0: 64 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72 69  ding of the stri
d1f0: 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 54 68 65  ng <i>X</i>..The
d200: 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69   string "?000" i
d210: 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  s returned if th
d220: 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55  e argument is NU
d230: 4c 4c 2e 0a 54 68 69 73 20 66 75 6e 63 74 69 6f  LL..This functio
d240: 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  n is omitted fro
d250: 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61  m SQLite by defa
d260: 75 6c 74 2e 0a 49 74 20 69 73 20 6f 6e 6c 79 20  ult..It is only 
d270: 61 76 61 69 6c 61 62 6c 65 20 74 68 65 20 2d 44  available the -D
d280: 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 3d 31  SQLITE_SOUNDEX=1
d290: 20 63 6f 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e   compiler option
d2a0: 0a 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51  .is used when SQ
d2b0: 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 3c 2f  Lite is built.</
d2c0: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
d2d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
d2e0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73   align="right">s
d2f0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 2a 29  qlite_version(*)
d300: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d310: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68  ="top">Return th
d320: 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
d330: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
d340: 6c 69 62 72 61 72 79 0a 74 68 61 74 20 69 73 20  library.that is 
d350: 72 75 6e 6e 69 6e 67 2e 20 20 45 78 61 6d 70 6c  running.  Exampl
d360: 65 3a 20 20 22 32 2e 38 2e 30 22 3c 2f 74 64 3e  e:  "2.8.0"</td>
d370: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
d380: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
d390: 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 75 62 73  ign="right">subs
d3a0: 74 72 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  tr(<i>X</i>,<i>Y
d3b0: 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 3c 2f  </i>,<i>Z</i>)</
d3c0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
d3d0: 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 73 75  top">Return a su
d3e0: 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75 74  bstring of input
d3f0: 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e   string <i>X</i>
d400: 20 74 68 61 74 20 62 65 67 69 6e 73 0a 77 69 74   that begins.wit
d410: 68 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74  h the <i>Y</i>-t
d420: 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 20  h character and 
d430: 77 68 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f 69  which is <i>Z</i
d440: 3e 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  > characters lon
d450: 67 2e 0a 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74  g..The left-most
d460: 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 3c 69   character of <i
d470: 3e 58 3c 2f 69 3e 20 69 73 20 6e 75 6d 62 65 72  >X</i> is number
d480: 20 31 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e   1.  If <i>Y</i>
d490: 20 69 73 20 6e 65 67 61 74 69 76 65 0a 74 68 65   is negative.the
d4a0: 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
d4b0: 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
d4c0: 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
d4d0: 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
d4e0: 74 68 65 0a 72 69 67 68 74 20 72 61 74 68 65 72  the.right rather
d4f0: 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20   than the left. 
d500: 20 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   If SQLite is co
d510: 6e 66 69 67 75 72 65 64 20 74 6f 20 73 75 70 70  nfigured to supp
d520: 6f 72 74 20 55 54 46 2d 38 2c 0a 74 68 65 6e 20  ort UTF-8,.then 
d530: 63 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63  characters indic
d540: 65 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75  es refer to actu
d550: 61 6c 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  al UTF-8 charact
d560: 65 72 73 2c 20 6e 6f 74 20 62 79 74 65 73 2e 3c  ers, not bytes.<
d570: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
d580: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
d590: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
d5a0: 74 79 70 65 6f 66 28 3c 69 3e 58 3c 2f 69 3e 29  typeof(<i>X</i>)
d5b0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
d5c0: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68  ="top">Return th
d5d0: 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 65 78  e type of the ex
d5e0: 70 72 65 73 73 69 6f 6e 20 3c 69 3e 58 3c 2f 69  pression <i>X</i
d5f0: 3e 2e 20 20 54 68 65 20 6f 6e 6c 79 20 0a 72 65  >.  The only .re
d600: 74 75 72 6e 20 76 61 6c 75 65 73 20 61 72 65 20  turn values are 
d610: 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72  "null", "integer
d620: 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78 74  ", "real", "text
d630: 22 2c 20 61 6e 64 20 22 62 6c 6f 62 22 2e 0a 53  ", and "blob"..S
d640: 51 4c 69 74 65 27 73 20 74 79 70 65 20 68 61 6e  QLite's type han
d650: 64 6c 69 6e 67 20 69 73 20 0a 65 78 70 6c 61 69  dling is .explai
d660: 6e 65 64 20 69 6e 20 3c 61 20 68 72 65 66 3d 22  ned in <a href="
d670: 64 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22 3e  datatype3.html">
d680: 44 61 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c  Datatypes in SQL
d690: 69 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f 61  ite Version 3</a
d6a0: 3e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c  >.</td>.</tr>..<
d6b0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
d6c0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
d6d0: 74 22 3e 75 70 70 65 72 28 3c 69 3e 58 3c 2f 69  t">upper(<i>X</i
d6e0: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
d6f0: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
d700: 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20  a copy of input 
d710: 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20  string <i>X</i> 
d720: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c  converted to all
d730: 0a 75 70 70 65 72 2d 63 61 73 65 20 6c 65 74 74  .upper-case lett
d740: 65 72 73 2e 20 20 54 68 65 20 69 6d 70 6c 65 6d  ers.  The implem
d750: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  entation of this
d760: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74   function uses t
d770: 68 65 20 43 20 6c 69 62 72 61 72 79 0a 72 6f 75  he C library.rou
d780: 74 69 6e 65 20 3c 62 3e 74 6f 75 70 70 65 72 28  tine <b>toupper(
d790: 29 3c 2f 62 3e 20 77 68 69 63 68 20 6d 65 61 6e  )</b> which mean
d7a0: 73 20 69 74 20 6d 61 79 20 6e 6f 74 20 77 6f 72  s it may not wor
d7b0: 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 0a  k correctly on .
d7c0: 55 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 3c 2f  UTF-8 strings.</
d7d0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
d7e0: 65 3e 0a 0a 3c 62 3e 44 61 74 65 20 41 6e 64 20  e>..<b>Date And 
d7f0: 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73 3c 2f  Time Functions</
d800: 62 3e 0a 0a 3c 70 3e 44 61 74 65 20 61 6e 64 20  b>..<p>Date and 
d810: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  time functions a
d820: 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 69 6e  re documented in
d830: 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68   the .<a href="h
d840: 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
d850: 2e 6f 72 67 2f 63 76 73 74 72 61 63 2f 77 69 6b  .org/cvstrac/wik
d860: 69 3f 70 3d 44 61 74 65 41 6e 64 54 69 6d 65 46  i?p=DateAndTimeF
d870: 75 6e 63 74 69 6f 6e 73 22 3e 0a 53 51 4c 69 74  unctions">.SQLit
d880: 65 20 57 69 6b 69 3c 2f 61 3e 2e 3c 2f 70 3e 0a  e Wiki</a>.</p>.
d890: 0a 3c 61 20 6e 61 6d 65 3d 22 61 67 67 72 65 67  .<a name="aggreg
d8a0: 61 74 65 66 75 6e 63 74 69 6f 6e 73 22 3e 3c 2f  atefunctions"></
d8b0: 61 3e 0a 3c 62 3e 41 67 67 72 65 67 61 74 65 20  a>.<b>Aggregate 
d8c0: 46 75 6e 63 74 69 6f 6e 73 3c 2f 62 3e 0a 0a 3c  Functions</b>..<
d8d0: 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65  p>.The aggregate
d8e0: 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
d8f0: 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
d900: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
d910: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67    Additional.agg
d920: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
d930: 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61   written in C ma
d940: 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67  y be added using
d950: 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 63   the .<a href="c
d960: 61 70 69 33 72 65 66 2e 68 74 6d 6c 23 73 71 6c  api3ref.html#sql
d970: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
d980: 74 69 6f 6e 22 3e 73 71 6c 69 74 65 33 5f 63 72  tion">sqlite3_cr
d990: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 3c  eate_function()<
d9a0: 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70  /a>.API.</p>..<p
d9b0: 3e 0a 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  >.In any aggrega
d9c0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
d9d0: 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
d9e0: 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
d9f0: 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
da00: 72 65 63 65 65 64 65 64 20 62 79 20 74 68 65 20  receeded by the 
da10: 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54  keyword DISTINCT
da20: 2e 20 20 49 6e 20 73 75 63 68 20 63 61 73 65 73  .  In such cases
da30: 2c 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d  , duplicate.elem
da40: 65 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65  ents are filtere
da50: 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70  d before being p
da60: 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61  assed into the a
da70: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
da80: 6e 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  n..For example, 
da90: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f  the function "co
daa0: 75 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29 22  unt(distinct X)"
dab0: 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 65   will return the
dac0: 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74 69   number.of disti
dad0: 6e 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  nct values of co
dae0: 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20 6f  lumn X instead o
daf0: 66 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  f the total numb
db00: 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76  er of non-null.v
db10: 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20  alues in column 
db20: 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  X..</p>..<table 
db30: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
db40: 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74  ding=10>.<tr>.<t
db50: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
db60: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
db70: 74 68 3d 31 32 30 3e 61 76 67 28 3c 69 3e 58 3c  th=120>avg(<i>X<
db80: 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  /i>)</td>.<td va
db90: 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72  lign="top">Retur
dba0: 6e 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61  n the average va
dbb0: 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e  lue of all non-N
dbc0: 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74  ULL <i>X</i> wit
dbd0: 68 69 6e 20 61 0a 67 72 6f 75 70 2e 20 20 53 74  hin a.group.  St
dbe0: 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76 61  ring and BLOB va
dbf0: 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  lues that do not
dc00: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65   look like numbe
dc10: 72 73 20 61 72 65 0a 69 6e 74 65 72 70 72 65 74  rs are.interpret
dc20: 65 64 20 61 73 20 30 2e 0a 54 68 65 20 72 65 73  ed as 0..The res
dc30: 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
dc40: 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e  always a floatin
dc50: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 65 76  g point value ev
dc60: 65 6e 20 69 66 20 61 6c 6c 0a 69 6e 70 75 74 73  en if all.inputs
dc70: 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 20 3c   are integers. <
dc80: 2f 70 3e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  /p></td>.</tr>..
dc90: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
dca0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
dcb0: 68 74 22 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c 2f  ht">count(<i>X</
dcc0: 69 3e 29 3c 62 72 3e 63 6f 75 6e 74 28 2a 29 3c  i>)<br>count(*)<
dcd0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
dce0: 22 74 6f 70 22 3e 54 68 65 20 66 69 72 73 74 20  "top">The first 
dcf0: 66 6f 72 6d 20 72 65 74 75 72 6e 20 61 20 63 6f  form return a co
dd00: 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  unt of the numbe
dd10: 72 20 6f 66 20 74 69 6d 65 73 0a 74 68 61 74 20  r of times.that 
dd20: 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
dd30: 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
dd40: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
dd50: 6d 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d  m (with no argum
dd60: 65 6e 74 29 0a 72 65 74 75 72 6e 73 20 74 68 65  ent).returns the
dd70: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
dd80: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
dd90: 75 70 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  up.</td>.</tr>..
dda0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
ddb0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
ddc0: 68 74 22 3e 6d 61 78 28 3c 69 3e 58 3c 2f 69 3e  ht">max(<i>X</i>
ddd0: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
dde0: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
ddf0: 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
de00: 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
de10: 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 54 68 65  n the group..The
de20: 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65   usual sort orde
de30: 72 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  r is used to det
de40: 65 72 6d 69 6e 65 20 74 68 65 20 6d 61 78 69 6d  ermine the maxim
de50: 75 6d 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  um.</td>.</tr>..
de60: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
de70: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
de80: 68 74 22 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e  ht">min(<i>X</i>
de90: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
dea0: 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74  n="top">Return t
deb0: 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e  he minimum non-N
dec0: 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  ULL value of all
ded0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
dee0: 72 6f 75 70 2e 0a 54 68 65 20 75 73 75 61 6c 20  roup..The usual 
def0: 73 6f 72 74 20 6f 72 64 65 72 20 69 73 20 75 73  sort order is us
df00: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
df10: 74 68 65 20 6d 69 6e 69 6d 75 6d 2e 20 20 4e 55  the minimum.  NU
df20: 4c 4c 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72  LL is only retur
df30: 6e 65 64 0a 69 66 20 61 6c 6c 20 76 61 6c 75 65  ned.if all value
df40: 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 20 61  s in the group a
df50: 72 65 20 4e 55 4c 4c 2e 3c 2f 74 64 3e 0a 3c 2f  re NULL.</td>.</
df60: 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61  tr>..<tr>.<td va
df70: 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
df80: 3d 22 72 69 67 68 74 22 3e 73 75 6d 28 3c 69 3e  ="right">sum(<i>
df90: 58 3c 2f 69 3e 29 3c 62 72 3e 74 6f 74 61 6c 28  X</i>)<br>total(
dfa0: 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>X</i>)</td>.<
dfb0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
dfc0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65 72  Return the numer
dfd0: 69 63 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f  ic sum of all no
dfe0: 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  n-NULL values in
dff0: 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 20 49   the group..   I
e000: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
e010: 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f  on-NULL input ro
e020: 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65  ws then sum() re
e030: 74 75 72 6e 73 0a 20 20 20 4e 55 4c 4c 20 62 75  turns.   NULL bu
e040: 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e  t total() return
e050: 73 20 30 2e 30 2e 0a 20 20 20 4e 55 4c 4c 20 69  s 0.0..   NULL i
e060: 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61  s not normally a
e070: 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20   helpful result 
e080: 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e  for the sum of n
e090: 6f 20 72 6f 77 73 0a 20 20 20 62 75 74 20 74 68  o rows.   but th
e0a0: 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72  e SQL standard r
e0b0: 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d  equires it and m
e0c0: 6f 73 74 20 6f 74 68 65 72 0a 20 20 20 53 51 4c  ost other.   SQL
e0d0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
e0e0: 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28  s implement sum(
e0f0: 29 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51  ) that way so SQ
e100: 4c 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20  Lite does it in 
e110: 74 68 65 0a 20 20 20 73 61 6d 65 20 77 61 79 20  the.   same way 
e120: 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63  in order to be c
e130: 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65  ompatible.   The
e140: 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f   non-standard to
e150: 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  tal() function. 
e160: 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61 73    is provided as
e170: 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61   a convenient wa
e180: 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64  y to work around
e190: 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72 6f   this design pro
e1a0: 62 6c 65 6d 0a 20 20 20 69 6e 20 74 68 65 20 53  blem.   in the S
e1b0: 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e  QL language.</p>
e1c0: 0a 0a 20 20 20 3c 70 3e 54 68 65 20 72 65 73 75  ..   <p>The resu
e1d0: 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73  lt of total() is
e1e0: 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
e1f0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
e200: 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66     The result of
e210: 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74   sum() is an int
e220: 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c  eger value if al
e230: 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  l non-NULL input
e240: 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
e250: 20 20 20 49 66 20 61 6e 79 20 69 6e 70 75 74 20     If any input 
e260: 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74  to sum() is neit
e270: 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  her an integer o
e280: 72 20 61 20 4e 55 4c 4c 0a 20 20 20 74 68 65 6e  r a NULL.   then
e290: 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
e2a0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
e2b0: 76 61 6c 75 65 0a 20 20 20 77 68 69 63 68 20 6d  value.   which m
e2c0: 69 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f  ight be an appro
e2d0: 78 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20  ximation to the 
e2e0: 74 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20  true sum.</p>.. 
e2f0: 20 20 3c 70 3e 53 75 6d 28 29 20 77 69 6c 6c 20    <p>Sum() will 
e300: 74 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65  throw an "intege
e310: 72 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65  r overflow" exce
e320: 70 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70  ption if all inp
e330: 75 74 73 0a 20 20 20 61 72 65 20 69 6e 74 65 67  uts.   are integ
e340: 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 20 61  ers or NULL.   a
e350: 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76  nd an integer ov
e360: 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20 61 74  erflow occurs at
e370: 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72 69 6e   any point durin
e380: 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  g the computatio
e390: 6e 2e 0a 20 20 20 54 6f 74 61 6c 28 29 20 6e 65  n..   Total() ne
e3a0: 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 65 78  ver throws an ex
e3b0: 63 65 70 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f 74  ception.</p>.</t
e3c0: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 7d 0a 0a 0a  r>.</table>.}...
e3d0: 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69  Section INSERT i
e3e0: 6e 73 65 72 74 0a 0a 53 79 6e 74 61 78 20 7b 73  nsert..Syntax {s
e3f0: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
e400: 49 4e 53 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66  INSERT [OR <conf
e410: 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d  lict-algorithm>]
e420: 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65   INTO [<database
e430: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
e440: 2d 6e 61 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e  -name> [(<column
e450: 2d 6c 69 73 74 3e 29 5d 20 56 41 4c 55 45 53 28  -list>)] VALUES(
e460: 3c 76 61 6c 75 65 2d 6c 69 73 74 3e 29 20 7c 0a  <value-list>) |.
e470: 49 4e 53 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66  INSERT [OR <conf
e480: 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d  lict-algorithm>]
e490: 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65   INTO [<database
e4a0: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
e4b0: 2d 6e 61 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e  -name> [(<column
e4c0: 2d 6c 69 73 74 3e 29 5d 20 3c 73 65 6c 65 63 74  -list>)] <select
e4d0: 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70  -statement>.}..p
e4e0: 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 49 4e 53  uts {.<p>The INS
e4f0: 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  ERT statement co
e500: 6d 65 73 20 69 6e 20 74 77 6f 20 62 61 73 69 63  mes in two basic
e510: 20 66 6f 72 6d 73 2e 20 20 54 68 65 20 66 69 72   forms.  The fir
e520: 73 74 20 66 6f 72 6d 0a 28 77 69 74 68 20 74 68  st form.(with th
e530: 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f  e "VALUES" keywo
e540: 72 64 29 20 63 72 65 61 74 65 73 20 61 20 73 69  rd) creates a si
e550: 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e 20  ngle new row in 
e560: 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
e570: 65 2e 0a 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d  e..If no column-
e580: 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
e590: 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  d then the numbe
e5a0: 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75 73 74  r of values must
e5b0: 0a 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20  .be the same as 
e5c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
e5d0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
e5e0: 6c 65 2e 20 20 49 66 20 61 20 63 6f 6c 75 6d 6e  le.  If a column
e5f0: 2d 6c 69 73 74 0a 69 73 20 73 70 65 63 69 66 69  -list.is specifi
e600: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ed, then the num
e610: 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75  ber of values mu
e620: 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  st match the num
e630: 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65 64  ber of.specified
e640: 20 63 6f 6c 75 6d 6e 73 2e 20 20 43 6f 6c 75 6d   columns.  Colum
e650: 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
e660: 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65  that do not appe
e670: 61 72 20 69 6e 20 74 68 65 0a 63 6f 6c 75 6d 6e  ar in the.column
e680: 20 6c 69 73 74 20 61 72 65 20 66 69 6c 6c 65 64   list are filled
e690: 20 77 69 74 68 20 74 68 65 20 64 65 66 61 75 6c   with the defaul
e6a0: 74 20 76 61 6c 75 65 2c 20 6f 72 20 77 69 74 68  t value, or with
e6b0: 20 4e 55 4c 4c 20 69 66 20 6e 6f 74 0a 64 65 66   NULL if not.def
e6c0: 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70  ault value is sp
e6d0: 65 63 69 66 69 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  ecified..</p>..<
e6e0: 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  p>The second for
e6f0: 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
e700: 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73 20  statement takes 
e710: 69 74 20 64 61 74 61 20 66 72 6f 6d 20 61 0a 53  it data from a.S
e720: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
e730: 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20    The number of 
e740: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
e750: 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c  esult of the.SEL
e760: 45 43 54 20 6d 75 73 74 20 65 78 61 63 74 6c 79  ECT must exactly
e770: 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65   match the numbe
e780: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
e790: 74 68 65 20 74 61 62 6c 65 20 69 66 0a 6e 6f 20  the table if.no 
e7a0: 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 69 73 20 73  column list is s
e7b0: 70 65 63 69 66 69 65 64 2c 20 6f 72 20 69 74 20  pecified, or it 
e7c0: 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e  must match the n
e7d0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
e7e0: 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 63 6f 6c  .name in the col
e7f0: 75 6d 6e 20 6c 69 73 74 2e 20 20 41 20 6e 65 77  umn list.  A new
e800: 20 65 6e 74 72 79 20 69 73 20 6d 61 64 65 20 69   entry is made i
e810: 6e 20 74 68 65 20 74 61 62 6c 65 0a 66 6f 72 20  n the table.for 
e820: 65 76 65 72 79 20 72 6f 77 20 6f 66 20 74 68 65  every row of the
e830: 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74 2e 20   SELECT result. 
e840: 20 54 68 65 20 53 45 4c 45 43 54 20 6d 61 79 20   The SELECT may 
e850: 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20 63 6f 6d  be simple.or com
e860: 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  pound.</p>..<p>T
e870: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
e880: 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
e890: 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
e8a0: 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
e8b0: 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
e8c0: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
e8d0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
e8e0: 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
e8f0: 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a  is one command..
e900: 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
e910: 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22  titled.<a href="
e920: 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f  #conflict">ON CO
e930: 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61  NFLICT</a> for a
e940: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e950: 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61  ation..For compa
e960: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79  tibility with My
e970: 53 51 4c 2c 20 74 68 65 20 70 61 72 73 65 72 20  SQL, the parser 
e980: 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f  allows the use o
e990: 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79  f the.single key
e9a0: 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 23 72  word <a href="#r
e9b0: 65 70 6c 61 63 65 22 3e 52 45 50 4c 41 43 45 3c  eplace">REPLACE<
e9c0: 2f 61 3e 20 61 73 20 61 6e 20 61 6c 69 61 73 20  /a> as an alias 
e9d0: 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20 52  for "INSERT OR R
e9e0: 45 50 4c 41 43 45 22 2e 0a 3c 2f 70 3e 0a 7d 0a  EPLACE"..</p>.}.
e9f0: 0a 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f  ..Section {ON CO
ea00: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
ea10: 6f 6e 66 6c 69 63 74 0a 0a 53 79 6e 74 61 78 20  onflict..Syntax 
ea20: 7b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  {conflict-clause
ea30: 7d 20 7b 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  } {.ON CONFLICT 
ea40: 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69  <conflict-algori
ea50: 74 68 6d 3e 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74  thm>.} {conflict
ea60: 2d 61 6c 67 6f 72 69 74 68 6d 7d 20 7b 0a 52 4f  -algorithm} {.RO
ea70: 4c 4c 42 41 43 4b 20 7c 20 41 42 4f 52 54 20 7c  LLBACK | ABORT |
ea80: 20 46 41 49 4c 20 7c 20 49 47 4e 4f 52 45 20 7c   FAIL | IGNORE |
ea90: 20 52 45 50 4c 41 43 45 0a 7d 0a 0a 70 75 74 73   REPLACE.}..puts
eaa0: 20 7b 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e   {.<p>The ON CON
eab0: 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20  FLICT clause is 
eac0: 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65 20 53  not a separate S
ead0: 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20  QL command.  It 
eae0: 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72  is a.non-standar
eaf0: 64 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 61  d clause that ca
eb00: 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79  n appear in many
eb10: 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61   other SQL comma
eb20: 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e  nds..It is given
eb30: 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e   its own section
eb40: 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e   in this documen
eb50: 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20  t because it is 
eb60: 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e  not.part of stan
eb70: 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65  dard SQL and the
eb80: 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74  refore might not
eb90: 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70   be familiar.</p
eba0: 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78  >..<p>The syntax
ebb0: 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46   for the ON CONF
ebc0: 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61  LICT clause is a
ebd0: 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f  s shown above fo
ebe0: 72 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42  r.the CREATE TAB
ebf0: 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 46 6f 72  LE command.  For
ec00: 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a   the INSERT and.
ec10: 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c  UPDATE commands,
ec20: 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f   the keywords "O
ec30: 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20  N CONFLICT" are 
ec40: 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22  replaced by "OR"
ec50: 2c 20 74 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79  , to make.the sy
ec60: 6e 74 61 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e  ntax seem more n
ec70: 61 74 75 72 61 6c 2e 20 20 46 6f 72 20 65 78 61  atural.  For exa
ec80: 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20 6f 66  mple, instead of
ec90: 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46  ."INSERT ON CONF
eca0: 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77 65 20  LICT IGNORE" we 
ecb0: 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f 52 20  have "INSERT OR 
ecc0: 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79  IGNORE"..The key
ecd0: 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62 75 74  words change but
ece0: 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20   the meaning of 
ecf0: 74 68 65 20 63 6c 61 75 73 65 20 69 73 20 74 68  the clause is th
ed00: 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20 77 61  e same.either wa
ed10: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f  y.</p>..<p>The O
ed20: 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
ed30: 65 20 73 70 65 63 69 66 69 65 73 20 61 6e 20 61  e specifies an a
ed40: 6c 67 6f 72 69 74 68 6d 20 75 73 65 64 20 74 6f  lgorithm used to
ed50: 20 72 65 73 6f 6c 76 65 0a 63 6f 6e 73 74 72 61   resolve.constra
ed60: 69 6e 74 20 63 6f 6e 66 6c 69 63 74 73 2e 20 20  int conflicts.  
ed70: 54 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63  There are five c
ed80: 68 6f 69 63 65 73 3a 20 52 4f 4c 4c 42 41 43 4b  hoices: ROLLBACK
ed90: 2c 20 41 42 4f 52 54 2c 0a 46 41 49 4c 2c 20 49  , ABORT,.FAIL, I
eda0: 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50 4c 41  GNORE, and REPLA
edb0: 43 45 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  CE. The default 
edc0: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
edd0: 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61  RT.  This.is wha
ede0: 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e  t they mean:</p>
edf0: 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f  ..<dl>.<dt><b>RO
ee00: 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a  LLBACK</b></dt>.
ee10: 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f  <dd><p>When a co
ee20: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
ee30: 6f 6e 20 6f 63 63 75 72 73 2c 20 61 6e 20 69 6d  on occurs, an im
ee40: 6d 65 64 69 61 74 65 20 52 4f 4c 4c 42 41 43 4b  mediate ROLLBACK
ee50: 0a 6f 63 63 75 72 73 2c 20 74 68 75 73 20 65 6e  .occurs, thus en
ee60: 64 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  ding the current
ee70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e   transaction, an
ee80: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62  d the command ab
ee90: 6f 72 74 73 0a 77 69 74 68 20 61 20 72 65 74 75  orts.with a retu
eea0: 72 6e 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  rn code of SQLIT
eeb0: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 49  E_CONSTRAINT.  I
eec0: 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  f no transaction
eed0: 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68 65   is.active (othe
eee0: 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c 69  r than the impli
eef0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  ed transaction t
ef00: 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 6f  hat is created o
ef10: 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29  n every.command)
ef20: 20 74 68 65 6e 20 74 68 69 73 20 61 6c 67 6f 72   then this algor
ef30: 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65 20 73  ithm works the s
ef40: 61 6d 65 20 61 73 20 41 42 4f 52 54 2e 3c 2f 70  ame as ABORT.</p
ef50: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41  ></dd>..<dt><b>A
ef60: 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BORT</b></dt>.<d
ef70: 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73  d><p>When a cons
ef80: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
ef90: 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63 6f 6d   occurs, the com
efa0: 6d 61 6e 64 20 62 61 63 6b 73 20 6f 75 74 0a 61  mand backs out.a
efb0: 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
efc0: 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 6d   it might have m
efd0: 61 64 65 20 61 6e 64 20 61 62 6f 72 74 73 20 77  ade and aborts w
efe0: 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64  ith a return cod
eff0: 65 0a 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53  e.of SQLITE_CONS
f000: 54 52 41 49 4e 54 2e 20 20 42 75 74 20 6e 6f 20  TRAINT.  But no 
f010: 52 4f 4c 4c 42 41 43 4b 20 69 73 20 65 78 65 63  ROLLBACK is exec
f020: 75 74 65 64 20 73 6f 20 63 68 61 6e 67 65 73 0a  uted so changes.
f030: 66 72 6f 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61  from prior comma
f040: 6e 64 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  nds within the s
f050: 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ame transaction.
f060: 61 72 65 20 70 72 65 73 65 72 76 65 64 2e 20 20  are preserved.  
f070: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
f080: 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70  ult behavior.</p
f090: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46  ></dd>..<dt><b>F
f0a0: 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  AIL</b></dt>.<dd
f0b0: 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74  ><p>When a const
f0c0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
f0d0: 6f 63 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d  occurs, the comm
f0e0: 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68 20  and aborts with 
f0f0: 61 0a 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a.return code SQ
f100: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e  LITE_CONSTRAINT.
f110: 20 20 42 75 74 20 61 6e 79 20 63 68 61 6e 67 65    But any change
f120: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
f130: 65 20 74 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61  e that.the comma
f140: 6e 64 20 6d 61 64 65 20 70 72 69 6f 72 20 74 6f  nd made prior to
f150: 20 65 6e 63 6f 75 6e 74 65 72 69 6e 67 20 74 68   encountering th
f160: 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
f170: 6c 61 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65  lation.are prese
f180: 72 76 65 64 20 61 6e 64 20 61 72 65 20 6e 6f 74  rved and are not
f190: 20 62 61 63 6b 65 64 20 6f 75 74 2e 20 20 46 6f   backed out.  Fo
f1a0: 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e  r example, if an
f1b0: 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e   UPDATE.statemen
f1c0: 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 61 20  t encountered a 
f1d0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f1e0: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30 30 74  tion on the 100t
f1f0: 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20 61 74  h row that.it at
f200: 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61 74 65  tempts to update
f210: 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
f220: 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65 73 20   99 row changes 
f230: 61 72 65 20 70 72 65 73 65 72 76 65 64 0a 62 75  are preserved.bu
f240: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 6f 77  t changes to row
f250: 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f 6e 64  s 100 and beyond
f260: 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70   never occur.</p
f270: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49  ></dd>..<dt><b>I
f280: 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  GNORE</b></dt>.<
f290: 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e  dd><p>When a con
f2a0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
f2b0: 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 6f 6e  n occurs, the on
f2c0: 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e 74 61  e row that conta
f2d0: 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72 61 69  ins.the constrai
f2e0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20  nt violation is 
f2f0: 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
f300: 63 68 61 6e 67 65 64 2e 20 20 42 75 74 20 74 68  changed.  But th
f310: 65 20 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74 69 6e  e command.contin
f320: 75 65 73 20 65 78 65 63 75 74 69 6e 67 20 6e 6f  ues executing no
f330: 72 6d 61 6c 6c 79 2e 20 20 4f 74 68 65 72 20 72  rmally.  Other r
f340: 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64 20 61  ows before and a
f350: 66 74 65 72 20 74 68 65 20 72 6f 77 20 74 68 61  fter the row tha
f360: 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68 65 20  t.contained the 
f370: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f380: 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  tion continue to
f390: 20 62 65 20 69 6e 73 65 72 74 65 64 20 6f 72 20   be inserted or 
f3a0: 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79  updated.normally
f3b0: 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73 20 72  .  No error is r
f3c0: 65 74 75 72 6e 65 64 2e 3c 2f 70 3e 3c 2f 64 64  eturned.</p></dd
f3d0: 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43  >..<dt><b>REPLAC
f3e0: 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  E</b></dt>.<dd><
f3f0: 70 3e 57 68 65 6e 20 61 20 55 4e 49 51 55 45 20  p>When a UNIQUE 
f400: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
f410: 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
f420: 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f   pre-existing ro
f430: 77 73 0a 74 68 61 74 20 61 72 65 20 63 61 75 73  ws.that are caus
f440: 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ing the constrai
f450: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
f460: 20 72 65 6d 6f 76 65 64 20 70 72 69 6f 72 20 74   removed prior t
f470: 6f 20 69 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75  o inserting.or u
f480: 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72  pdating the curr
f490: 65 6e 74 20 72 6f 77 2e 20 20 54 68 75 73 20 74  ent row.  Thus t
f4a0: 68 65 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64  he insert or upd
f4b0: 61 74 65 20 61 6c 77 61 79 73 20 6f 63 63 75 72  ate always occur
f4c0: 73 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63  s..The command c
f4d0: 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75 74 69  ontinues executi
f4e0: 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f  ng normally.  No
f4f0: 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
f500: 65 64 2e 0a 49 66 20 61 20 4e 4f 54 20 4e 55 4c  ed..If a NOT NUL
f510: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  L constraint vio
f520: 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
f530: 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73  he NULL value is
f540: 20 72 65 70 6c 61 63 65 64 0a 62 79 20 74 68 65   replaced.by the
f550: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
f560: 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20  or that column. 
f570: 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68   If the column h
f580: 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61  as no default.va
f590: 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 41 42  lue, then the AB
f5a0: 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORT algorithm is
f5b0: 20 75 73 65 64 2e 20 20 49 66 20 61 20 43 48 45   used.  If a CHE
f5c0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  CK constraint vi
f5d0: 6f 6c 61 74 69 6f 6e 0a 6f 63 63 75 72 73 20 74  olation.occurs t
f5e0: 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45 20 61  hen the IGNORE a
f5f0: 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
f600: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74  .</p>..<p>When t
f610: 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  his conflict res
f620: 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
f630: 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e   deletes rows in
f640: 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66   order to.satisf
f650: 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  y a constraint, 
f660: 69 74 20 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f  it does not invo
f670: 6b 65 20 64 65 6c 65 74 65 20 74 72 69 67 67 65  ke delete trigge
f680: 72 73 20 6f 6e 20 74 68 6f 73 65 0a 72 6f 77 73  rs on those.rows
f690: 2e 20 20 54 68 69 73 20 62 65 68 61 76 69 6f 72  .  This behavior
f6a0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e   might change in
f6b0: 20 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73   a future releas
f6c0: 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70  e.</p>.</dl>..<p
f6d0: 3e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  >The algorithm s
f6e0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
f6f0: 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 20 49  OR clause of a I
f700: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a  NSERT or UPDATE.
f710: 6f 76 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c  overrides any al
f720: 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65  gorithm specifie
f730: 64 20 69 6e 20 61 20 43 52 45 41 54 45 20 54 41  d in a CREATE TA
f740: 42 4c 45 2e 0a 49 66 20 6e 6f 20 61 6c 67 6f 72  BLE..If no algor
f750: 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
f760: 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20  d anywhere, the 
f770: 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
f780: 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 7d 0a 0a  is used.</p>.}..
f790: 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
f7a0: 72 65 69 6e 64 65 78 0a 0a 53 79 6e 74 61 78 20  reindex..Syntax 
f7b0: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
f7c0: 7b 0a 20 20 52 45 49 4e 44 45 58 20 3c 63 6f 6c  {.  REINDEX <col
f7d0: 6c 61 74 69 6f 6e 20 6e 61 6d 65 3e 0a 7d 0a 53  lation name>.}.S
f7e0: 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65  yntax {sql-state
f7f0: 6d 65 6e 74 7d 20 7b 0a 20 20 52 45 49 4e 44 45  ment} {.  REINDE
f800: 58 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  X [<database-nam
f810: 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2f 69 6e 64  e> .] <table/ind
f820: 65 78 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73  ex-name>.}..puts
f830: 20 7b 0a 3c 70 3e 54 68 65 20 52 45 49 4e 44 45   {.<p>The REINDE
f840: 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  X command is use
f850: 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20  d to delete and 
f860: 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65 73  recreate indices
f870: 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54   from scratch..T
f880: 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77 68  his is useful wh
f890: 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  en the definitio
f8a0: 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  n of a collation
f8b0: 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63 68   sequence has ch
f8c0: 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  anged..</p>..<p>
f8d0: 49 6e 20 74 68 65 20 66 69 72 73 74 20 66 6f 72  In the first for
f8e0: 6d 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  m, all indices i
f8f0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
f900: 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73  atabases that us
f910: 65 20 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c  e the.named coll
f920: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61  ation sequence a
f930: 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 49 6e  re recreated. In
f940: 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   the second form
f950: 2c 20 69 66 20 0a 3c 69 3e 5b 64 61 74 61 62 61  , if .<i>[databa
f960: 73 65 2d 6e 61 6d 65 2e 5d 74 61 62 6c 65 2f 69  se-name.]table/i
f970: 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64  ndex-name</i> id
f980: 65 6e 74 69 66 69 65 73 20 61 20 74 61 62 6c 65  entifies a table
f990: 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63  , then all indic
f9a0: 65 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  es.associated wi
f9b0: 74 68 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  th the table are
f9c0: 20 72 65 62 75 69 6c 74 2e 20 49 66 20 61 6e 20   rebuilt. If an 
f9d0: 69 6e 64 65 78 20 69 73 20 69 64 65 6e 74 69 66  index is identif
f9e0: 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 0a 74  ied, then only.t
f9f0: 68 69 73 20 73 70 65 63 69 66 69 63 20 69 6e 64  his specific ind
fa00: 65 78 20 69 73 20 64 65 6c 65 74 65 64 20 61 6e  ex is deleted an
fa10: 64 20 72 65 63 72 65 61 74 65 64 2e 0a 3c 2f 70  d recreated..</p
fa20: 3e 0a 0a 3c 70 3e 49 66 20 6e 6f 20 3c 69 3e 64  >..<p>If no <i>d
fa30: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
fa40: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
fa50: 64 20 74 68 65 72 65 20 65 78 69 73 74 73 20 62  d there exists b
fa60: 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72 0a 69  oth a table or.i
fa70: 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61  ndex and a colla
fa80: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 66  tion sequence of
fa90: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
faa0: 61 6d 65 2c 20 74 68 65 6e 20 69 6e 64 69 63 65  ame, then indice
fab0: 73 20 61 73 73 6f 63 69 61 74 65 64 0a 77 69 74  s associated.wit
fac0: 68 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  h the collation 
fad0: 73 65 71 75 65 6e 63 65 20 6f 6e 6c 79 20 61 72  sequence only ar
fae0: 65 20 72 65 63 6f 6e 73 74 72 75 63 74 65 64 2e  e reconstructed.
faf0: 20 54 68 69 73 20 61 6d 62 69 67 75 69 74 79 20   This ambiguity 
fb00: 6d 61 79 20 62 65 0a 64 69 73 70 65 6c 6c 65 64  may be.dispelled
fb10: 20 62 79 20 61 6c 77 61 79 73 20 73 70 65 63 69   by always speci
fb20: 66 79 69 6e 67 20 61 20 3c 69 3e 64 61 74 61 62  fying a <i>datab
fb30: 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65  ase-name</i> whe
fb40: 6e 20 72 65 69 6e 64 65 78 69 6e 67 20 61 0a 73  n reindexing a.s
fb50: 70 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72  pecific table or
fb60: 20 69 6e 64 65 78 2e 0a 7d 0a 0a 53 65 63 74 69   index..}..Secti
fb70: 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
fb80: 63 65 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  ce..Syntax {sql-
fb90: 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 52 45 50  statement} {.REP
fba0: 4c 41 43 45 20 49 4e 54 4f 20 5b 3c 64 61 74 61  LACE INTO [<data
fbb0: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
fbc0: 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63  able-name> [( <c
fbd0: 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d 20 56  olumn-list> )] V
fbe0: 41 4c 55 45 53 20 28 20 3c 76 61 6c 75 65 2d 6c  ALUES ( <value-l
fbf0: 69 73 74 3e 20 29 20 7c 0a 52 45 50 4c 41 43 45  ist> ) |.REPLACE
fc00: 20 49 4e 54 4f 20 5b 3c 64 61 74 61 62 61 73 65   INTO [<database
fc10: 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
fc20: 2d 6e 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d  -name> [( <colum
fc30: 6e 2d 6c 69 73 74 3e 20 29 5d 20 3c 73 65 6c 65  n-list> )] <sele
fc40: 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a  ct-statement>.}.
fc50: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 52  .puts {.<p>The R
fc60: 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69  EPLACE command i
fc70: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
fc80: 68 65 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45  he "INSERT OR RE
fc90: 50 4c 41 43 45 22 20 76 61 72 69 61 6e 74 0a 6f  PLACE" variant.o
fca0: 66 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  f the <a href="#
fcb0: 69 6e 73 65 72 74 22 3e 49 4e 53 45 52 54 3c 2f  insert">INSERT</
fcc0: 61 3e 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69  a> command.  Thi
fcd0: 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69  s alias is provi
fce0: 64 65 64 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62  ded for.compatib
fcf0: 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c  ility with MySQL
fd00: 2e 20 20 53 65 65 20 74 68 65 20 0a 3c 61 20 68  .  See the .<a h
fd10: 72 65 66 3d 22 23 69 6e 73 65 72 74 22 3e 49 4e  ref="#insert">IN
fd20: 53 45 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64  SERT</a> command
fd30: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
fd40: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 69 6e  or additional.in
fd50: 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20  formation.</p>  
fd60: 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20 53 45 4c  .}...Section SEL
fd70: 45 43 54 20 73 65 6c 65 63 74 0a 0a 53 79 6e 74  ECT select..Synt
fd80: 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e  ax {sql-statemen
fd90: 74 7d 20 7b 0a 53 45 4c 45 43 54 20 5b 41 4c 4c  t} {.SELECT [ALL
fda0: 20 7c 20 44 49 53 54 49 4e 43 54 5d 20 3c 72 65   | DISTINCT] <re
fdb0: 73 75 6c 74 3e 20 5b 46 52 4f 4d 20 3c 74 61 62  sult> [FROM <tab
fdc0: 6c 65 2d 6c 69 73 74 3e 5d 0a 5b 57 48 45 52 45  le-list>].[WHERE
fdd0: 20 3c 65 78 70 72 3e 5d 0a 5b 47 52 4f 55 50 20   <expr>].[GROUP 
fde0: 42 59 20 3c 65 78 70 72 2d 6c 69 73 74 3e 5d 0a  BY <expr-list>].
fdf0: 5b 48 41 56 49 4e 47 20 3c 65 78 70 72 3e 5d 0a  [HAVING <expr>].
fe00: 5b 3c 63 6f 6d 70 6f 75 6e 64 2d 6f 70 3e 20 3c  [<compound-op> <
fe10: 73 65 6c 65 63 74 3e 5d 2a 0a 5b 4f 52 44 45 52  select>]*.[ORDER
fe20: 20 42 59 20 3c 73 6f 72 74 2d 65 78 70 72 2d 6c   BY <sort-expr-l
fe30: 69 73 74 3e 5d 0a 5b 4c 49 4d 49 54 20 3c 69 6e  ist>].[LIMIT <in
fe40: 74 65 67 65 72 3e 20 5b 4c 50 20 4f 46 46 53 45  teger> [LP OFFSE
fe50: 54 20 7c 20 2c 20 52 50 20 3c 69 6e 74 65 67 65  T | , RP <intege
fe60: 72 3e 5d 5d 0a 7d 20 7b 72 65 73 75 6c 74 7d 20  r>]].} {result} 
fe70: 7b 0a 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e  {.<result-column
fe80: 3e 20 5b 2c 20 3c 72 65 73 75 6c 74 2d 63 6f 6c  > [, <result-col
fe90: 75 6d 6e 3e 5d 2a 0a 7d 20 7b 72 65 73 75 6c 74  umn>]*.} {result
fea0: 2d 63 6f 6c 75 6d 6e 7d 20 7b 0a 53 54 41 52 20  -column} {.STAR 
feb0: 7c 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 2e  | <table-name> .
fec0: 20 53 54 41 52 20 7c 20 3c 65 78 70 72 3e 20 5b   STAR | <expr> [
fed0: 20 5b 41 53 5d 20 3c 73 74 72 69 6e 67 3e 20 5d   [AS] <string> ]
fee0: 0a 7d 20 7b 74 61 62 6c 65 2d 6c 69 73 74 7d 20  .} {table-list} 
fef0: 7b 0a 3c 74 61 62 6c 65 3e 20 5b 3c 6a 6f 69 6e  {.<table> [<join
ff00: 2d 6f 70 3e 20 3c 74 61 62 6c 65 3e 20 3c 6a 6f  -op> <table> <jo
ff10: 69 6e 2d 61 72 67 73 3e 5d 2a 0a 7d 20 7b 74 61  in-args>]*.} {ta
ff20: 62 6c 65 7d 20 7b 0a 3c 74 61 62 6c 65 2d 6e 61  ble} {.<table-na
ff30: 6d 65 3e 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d  me> [AS <alias>]
ff40: 20 7c 0a 28 20 3c 73 65 6c 65 63 74 3e 20 29 20   |.( <select> ) 
ff50: 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 0a 7d 20 7b  [AS <alias>].} {
ff60: 6a 6f 69 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c 20 5b  join-op} {., | [
ff70: 4e 41 54 55 52 41 4c 5d 20 5b 4c 45 46 54 20 7c  NATURAL] [LEFT |
ff80: 20 52 49 47 48 54 20 7c 20 46 55 4c 4c 5d 20 5b   RIGHT | FULL] [
ff90: 4f 55 54 45 52 20 7c 20 49 4e 4e 45 52 20 7c 20  OUTER | INNER | 
ffa0: 43 52 4f 53 53 5d 20 4a 4f 49 4e 0a 7d 20 7b 6a  CROSS] JOIN.} {j
ffb0: 6f 69 6e 2d 61 72 67 73 7d 20 7b 0a 5b 4f 4e 20  oin-args} {.[ON 
ffc0: 3c 65 78 70 72 3e 5d 20 5b 55 53 49 4e 47 20 28  <expr>] [USING (
ffd0: 20 3c 69 64 2d 6c 69 73 74 3e 20 29 5d 0a 7d 20   <id-list> )].} 
ffe0: 7b 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74 7d  {sort-expr-list}
fff0: 20 7b 0a 3c 65 78 70 72 3e 20 5b 3c 73 6f 72 74   {.<expr> [<sort
10000 2d 6f 72 64 65 72 3e 5d 20 5b 2c 20 3c 65 78 70  -order>] [, <exp
10010 72 3e 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e  r> [<sort-order>
10020 5d 5d 2a 0a 7d 20 7b 73 6f 72 74 2d 6f 72 64 65  ]]*.} {sort-orde
10030 72 7d 20 7b 0a 5b 20 43 4f 4c 4c 41 54 45 20 3c  r} {.[ COLLATE <
10040 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 20  collation-name> 
10050 5d 20 5b 20 41 53 43 20 7c 20 44 45 53 43 20 5d  ] [ ASC | DESC ]
10060 0a 7d 20 7b 63 6f 6d 70 6f 75 6e 64 5f 6f 70 7d  .} {compound_op}
10070 20 7b 0a 55 4e 49 4f 4e 20 7c 20 55 4e 49 4f 4e   {.UNION | UNION
10080 20 41 4c 4c 20 7c 20 49 4e 54 45 52 53 45 43 54   ALL | INTERSECT
10090 20 7c 20 45 58 43 45 50 54 0a 7d 0a 0a 70 75 74   | EXCEPT.}..put
100a0 73 20 7b 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  s {.<p>The SELEC
100b0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
100c0 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
100d0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
100e0 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
100f0 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
10100 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
10110 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
10120 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
10130 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54  r of columns.  T
10140 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
10150 75 6d 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75  umns in the.resu
10160 6c 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20  lt is specified 
10170 62 79 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  by the expressio
10180 6e 20 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65  n list in betwee
10190 6e 20 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64  n the.SELECT and
101a0 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20   FROM keywords. 
101b0 20 41 6e 79 20 61 72 62 69 74 72 61 72 79 20 65   Any arbitrary e
101c0 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
101d0 20 75 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c   used.as a resul
101e0 74 2e 20 20 49 66 20 61 20 72 65 73 75 6c 74 20  t.  If a result 
101f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a  expression is }.
10200 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20  puts "[Operator 
10210 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75  *] then all colu
10220 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  mns of all table
10230 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
10240 64 22 0a 70 75 74 73 20 7b 66 6f 72 20 74 68 61  d".puts {for tha
10250 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
10260 2e 20 20 49 66 20 74 68 65 20 65 78 70 72 65 73  .  If the expres
10270 73 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65  sion is the name
10280 20 6f 66 7d 0a 70 75 74 73 20 22 61 20 74 61 62   of}.puts "a tab
10290 6c 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b  le followed by [
102a0 4f 70 65 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65  Operator .*] the
102b0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
102c0 61 6c 6c 20 63 6f 6c 75 6d 6e 73 22 0a 70 75 74  all columns".put
102d0 73 20 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20 74  s {in that one t
102e0 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  able.</p>..<p>Th
102f0 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  e DISTINCT keywo
10300 72 64 20 63 61 75 73 65 73 20 61 20 73 75 62 73  rd causes a subs
10310 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
10320 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  s to be returned
10330 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61 63 68  , .in which each
10340 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 64   result row is d
10350 69 66 66 65 72 65 6e 74 2e 20 20 4e 55 4c 4c 20  ifferent.  NULL 
10360 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 74  values are not t
10370 72 65 61 74 65 64 20 61 73 20 0a 64 69 73 74 69  reated as .disti
10380 6e 63 74 20 66 72 6f 6d 20 65 61 63 68 20 6f 74  nct from each ot
10390 68 65 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  her.  The defaul
103a0 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68  t behavior is th
103b0 61 74 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f  at all result ro
103c0 77 73 20 0a 62 65 20 72 65 74 75 72 6e 65 64 2c  ws .be returned,
103d0 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 6d 61   which can be ma
103e0 64 65 20 65 78 70 6c 69 63 69 74 20 77 69 74 68  de explicit with
103f0 20 74 68 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c   the keyword ALL
10400 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 71 75  .</p>..<p>The qu
10410 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
10420 61 67 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d  against one or m
10430 6f 72 65 20 74 61 62 6c 65 73 20 73 70 65 63 69  ore tables speci
10440 66 69 65 64 20 61 66 74 65 72 0a 74 68 65 20 46  fied after.the F
10450 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 20 49 66  ROM keyword.  If
10460 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73   multiple tables
10470 20 6e 61 6d 65 73 20 61 72 65 20 73 65 70 61 72   names are separ
10480 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a  ated by commas,.
10490 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 69  then the query i
104a0 73 20 61 67 61 69 6e 73 74 20 74 68 65 20 63 72  s against the cr
104b0 6f 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20  oss join of the 
104c0 76 61 72 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a  various tables..
104d0 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32 20  The full SQL-92 
104e0 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61 6e 20  join syntax can 
104f0 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
10500 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a 41  specify joins..A
10510 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20 70 61   sub-query.in pa
10520 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 62 65  rentheses may be
10530 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f 72   substituted for
10540 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65 20   any table name 
10550 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
10560 73 65 2e 0a 54 68 65 20 65 6e 74 69 72 65 20 46  se..The entire F
10570 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61 79 20 62  ROM clause may b
10580 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77 68  e omitted, in wh
10590 69 63 68 20 63 61 73 65 20 74 68 65 20 72 65 73  ich case the res
105a0 75 6c 74 20 69 73 20 61 0a 73 69 6e 67 6c 65 20  ult is a.single 
105b0 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  row consisting o
105c0 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  f the values of 
105d0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  the expression l
105e0 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ist..</p>..<p>Th
105f0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  e WHERE clause c
10600 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69  an be used to li
10610 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
10620 66 20 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63  f rows over.whic
10630 68 20 74 68 65 20 71 75 65 72 79 20 6f 70 65 72  h the query oper
10640 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ates.</p>..<p>Th
10650 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
10660 65 73 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72  es causes one or
10670 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68   more rows of th
10680 65 20 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63  e result to.be c
10690 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73  ombined into a s
106a0 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74  ingle row of out
106b0 70 75 74 2e 20 20 54 68 69 73 20 69 73 20 65 73  put.  This is es
106c0 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a  pecially useful.
106d0 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  when the result 
106e0 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
106f0 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54  te functions.  T
10700 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  he expressions i
10710 6e 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n.the GROUP BY c
10720 6c 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74  lause do <em>not
10730 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65  </em> have to be
10740 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
10750 74 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t.appear in the 
10760 72 65 73 75 6c 74 2e 20 20 54 68 65 20 48 41 56  result.  The HAV
10770 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 69  ING clause is si
10780 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20 65  milar to WHERE e
10790 78 63 65 70 74 0a 74 68 61 74 20 48 41 56 49 4e  xcept.that HAVIN
107a0 47 20 61 70 70 6c 69 65 73 20 61 66 74 65 72 20  G applies after 
107b0 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63 63  grouping has occ
107c0 75 72 72 65 64 2e 20 20 54 68 65 20 48 41 56 49  urred.  The HAVI
107d0 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61  NG expression.ma
107e0 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65  y refer to value
107f0 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74  s, even aggregat
10800 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61  e functions, tha
10810 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65  t are not in the
10820 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70   result.</p>..<p
10830 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  >The ORDER BY cl
10840 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20  ause causes the 
10850 6f 75 74 70 75 74 20 72 6f 77 73 20 74 6f 20 62  output rows to b
10860 65 20 73 6f 72 74 65 64 2e 20 20 0a 54 68 65 20  e sorted.  .The 
10870 61 72 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45  argument to ORDE
10880 52 20 42 59 20 69 73 20 61 20 6c 69 73 74 20 6f  R BY is a list o
10890 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  f expressions th
108a0 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
108b0 68 65 0a 6b 65 79 20 66 6f 72 20 74 68 65 20 73  he.key for the s
108c0 6f 72 74 2e 20 20 54 68 65 20 65 78 70 72 65 73  ort.  The expres
108d0 73 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76  sions do not hav
108e0 65 20 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20  e to be part of 
108f0 74 68 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61  the.result for a
10900 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20   simple SELECT, 
10910 62 75 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  but in a compoun
10920 64 20 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f  d SELECT each so
10930 72 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75  rt.expression mu
10940 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  st exactly match
10950 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75   one of the resu
10960 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 61 63  lt columns.  Eac
10970 68 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69 6f  h.sort expressio
10980 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61  n may be optiona
10990 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  lly followed by 
109a0 61 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72  a COLLATE keywor
109b0 64 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f  d and.the name o
109c0 66 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  f a collating fu
109d0 6e 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20  nction used for 
109e0 6f 72 64 65 72 69 6e 67 20 74 65 78 74 20 61 6e  ordering text an
109f0 64 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41 53  d/or.keywords AS
10a00 43 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70 65  C or DESC to spe
10a10 63 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f 72  cify the sort or
10a20 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  der.</p>..<p>The
10a30 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 70 6c   LIMIT clause pl
10a40 61 63 65 73 20 61 6e 20 75 70 70 65 72 20 62 6f  aces an upper bo
10a50 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
10a60 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e  r of rows.return
10a70 65 64 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ed in the result
10a80 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 4c 49  .  A negative LI
10a90 4d 49 54 20 69 6e 64 69 63 61 74 65 73 20 6e 6f  MIT indicates no
10aa0 20 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a 54 68   upper bound..Th
10ab0 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45  e optional OFFSE
10ac0 54 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49  T following LIMI
10ad0 54 20 73 70 65 63 69 66 69 65 73 20 68 6f 77 20  T specifies how 
10ae0 6d 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69  many.rows to ski
10af0 70 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  p at the beginni
10b00 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ng of the result
10b10 20 73 65 74 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f   set..In a compo
10b20 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65 20 4c  und query, the L
10b30 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20  IMIT clause may 
10b40 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74  only appear on t
10b50 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54 20  he.final SELECT 
10b60 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6c  statement..The l
10b70 69 6d 69 74 20 69 73 20 61 70 70 6c 69 65 64 20  imit is applied 
10b80 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 71 75  to the entire qu
10b90 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69  ery not.to the i
10ba0 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43 54  ndividual SELECT
10bb0 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 77 68   statement to wh
10bc0 69 63 68 20 69 74 20 69 73 20 61 74 74 61 63 68  ich it is attach
10bd0 65 64 2e 0a 4e 6f 74 65 20 74 68 61 74 20 69 66  ed..Note that if
10be0 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79 77   the OFFSET keyw
10bf0 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e 20 74  ord is used in t
10c00 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c  he LIMIT clause,
10c10 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20   then the.limit 
10c20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 75 6d  is the first num
10c30 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66 66 73  ber and the offs
10c40 65 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64  et is the second
10c50 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 61 0a 63   number.  If a.c
10c60 6f 6d 6d 61 20 69 73 20 75 73 65 64 20 69 6e 73  omma is used ins
10c70 74 65 61 64 20 6f 66 20 74 68 65 20 4f 46 46 53  tead of the OFFS
10c80 45 54 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e  ET keyword, then
10c90 20 74 68 65 20 6f 66 66 73 65 74 20 69 73 20 74   the offset is t
10ca0 68 65 0a 66 69 72 73 74 20 6e 75 6d 62 65 72 20  he.first number 
10cb0 61 6e 64 20 74 68 65 20 6c 69 6d 69 74 20 69 73  and the limit is
10cc0 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62   the second numb
10cd0 65 72 2e 20 20 54 68 69 73 20 73 65 65 6d 69 6e  er.  This seemin
10ce0 67 0a 63 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69  g.contradition i
10cf0 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20  s intentional - 
10d00 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d  it maximizes com
10d10 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
10d20 6c 65 67 61 63 79 0a 53 51 4c 20 64 61 74 61 62  legacy.SQL datab
10d30 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70  ase systems..</p
10d40 3e 0a 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64  >..<p>A compound
10d50 20 53 45 4c 45 43 54 20 69 73 20 66 6f 72 6d 65   SELECT is forme
10d60 64 20 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f  d from two or mo
10d70 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  re simple SELECT
10d80 73 20 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f  s connected.by o
10d90 6e 65 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74  ne of the operat
10da0 6f 72 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  ors UNION, UNION
10db0 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c   ALL, INTERSECT,
10dc0 20 6f 72 20 45 58 43 45 50 54 2e 20 20 49 6e 0a   or EXCEPT.  In.
10dd0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
10de0 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74  T, all the const
10df0 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d  ituent SELECTs m
10e00 75 73 74 20 73 70 65 63 69 66 79 20 74 68 65 0a  ust specify the.
10e10 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 72  same number of r
10e20 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20  esult columns.  
10e30 54 68 65 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c  There may be onl
10e40 79 20 61 20 73 69 6e 67 6c 65 20 4f 52 44 45 52  y a single ORDER
10e50 20 42 59 0a 63 6c 61 75 73 65 20 61 74 20 74 68   BY.clause at th
10e60 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d  e end of the com
10e70 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 20 54  pound SELECT.  T
10e80 68 65 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49  he UNION and UNI
10e90 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73  ON ALL.operators
10ea0 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 72 65 73   combine the res
10eb0 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45  ults of the SELE
10ec0 43 54 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  CTs to the right
10ed0 20 61 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61   and left into.a
10ee0 20 73 69 6e 67 6c 65 20 62 69 67 20 74 61 62 6c   single big tabl
10ef0 65 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  e.  The differen
10f00 63 65 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e  ce is that in UN
10f10 49 4f 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72  ION all result r
10f20 6f 77 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74  ows.are distinct
10f30 20 77 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20   where in UNION 
10f40 41 4c 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65  ALL there may be
10f50 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 54 68 65   duplicates..The
10f60 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
10f70 74 6f 72 20 74 61 6b 65 73 20 74 68 65 20 69 6e  tor takes the in
10f80 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
10f90 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
10fa0 0a 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20  .left and right 
10fb0 53 45 4c 45 43 54 73 2e 20 20 45 58 43 45 50 54  SELECTs.  EXCEPT
10fc0 20 74 61 6b 65 73 20 74 68 65 20 72 65 73 75 6c   takes the resul
10fd0 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45 43 54  t of left SELECT
10fe0 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20   after.removing 
10ff0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
11000 68 65 20 72 69 67 68 74 20 53 45 4c 45 43 54 2e  he right SELECT.
11010 20 20 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20    When three or 
11020 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a 61 72 65  more SELECTs.are
11030 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
11040 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79  a compound, they
11050 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74   group from left
11060 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 7d   to right.</p>.}
11070 0a 0a 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54  ...Section UPDAT
11080 45 20 75 70 64 61 74 65 0a 0a 53 79 6e 74 61 78  E update..Syntax
11090 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
110a0 20 7b 0a 55 50 44 41 54 45 20 5b 20 4f 52 20 3c   {.UPDATE [ OR <
110b0 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74  conflict-algorit
110c0 68 6d 3e 20 5d 20 5b 3c 64 61 74 61 62 61 73 65  hm> ] [<database
110d0 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
110e0 2d 6e 61 6d 65 3e 0a 53 45 54 20 3c 61 73 73 69  -name>.SET <assi
110f0 67 6e 6d 65 6e 74 3e 20 5b 2c 20 3c 61 73 73 69  gnment> [, <assi
11100 67 6e 6d 65 6e 74 3e 5d 2a 0a 5b 57 48 45 52 45  gnment>]*.[WHERE
11110 20 3c 65 78 70 72 3e 5d 0a 7d 20 7b 61 73 73 69   <expr>].} {assi
11120 67 6e 6d 65 6e 74 7d 20 7b 0a 3c 63 6f 6c 75 6d  gnment} {.<colum
11130 6e 2d 6e 61 6d 65 3e 20 3d 20 3c 65 78 70 72 3e  n-name> = <expr>
11140 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68  .}..puts {.<p>Th
11150 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
11160 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 63 68  nt is used to ch
11170 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f  ange the value o
11180 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65  f columns in .se
11190 6c 65 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61  lected rows of a
111a0 20 74 61 62 6c 65 2e 20 20 45 61 63 68 20 61 73   table.  Each as
111b0 73 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55  signment in an U
111c0 50 44 41 54 45 20 73 70 65 63 69 66 69 65 73 0a  PDATE specifies.
111d0 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f  a column name to
111e0 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
111f0 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64   equals sign and
11200 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 65 78   an arbitrary ex
11210 70 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20  pression.to the 
11220 72 69 67 68 74 2e 20 20 54 68 65 20 65 78 70 72  right.  The expr
11230 65 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20  essions may use 
11240 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74  the values of ot
11250 68 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c  her columns..All
11260 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
11270 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72   evaluated befor
11280 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74  e any assignment
11290 73 20 61 72 65 20 6d 61 64 65 2e 0a 41 20 57 48  s are made..A WH
112a0 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62  ERE clause can b
112b0 65 20 75 73 65 64 20 74 6f 20 72 65 73 74 72 69  e used to restri
112c0 63 74 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  ct which rows ar
112d0 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a  e updated.</p>..
112e0 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
112f0 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
11300 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69  allows the speci
11310 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61  fication of an a
11320 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74  lternative.const
11330 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
11340 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
11350 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
11360 67 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61  g this one comma
11370 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
11380 69 6f 6e 20 74 69 74 6c 65 64 0a 3c 61 20 68 72  ion titled.<a hr
11390 65 66 3d 22 23 63 6f 6e 66 6c 69 63 74 22 3e 4f  ef="#conflict">O
113a0 4e 20 43 4f 4e 46 4c 49 43 54 3c 2f 61 3e 20 66  N CONFLICT</a> f
113b0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
113c0 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 7d  formation.</p>.}
113d0 0a 0a 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55  ...Section VACUU
113e0 4d 20 76 61 63 75 75 6d 0a 0a 53 79 6e 74 61 78  M vacuum..Syntax
113f0 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
11400 20 7b 0a 56 41 43 55 55 4d 20 5b 3c 69 6e 64 65   {.VACUUM [<inde
11410 78 2d 6f 72 2d 74 61 62 6c 65 2d 6e 61 6d 65 3e  x-or-table-name>
11420 5d 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54  ].}..puts {.<p>T
11430 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
11440 64 20 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65  d is an SQLite e
11450 78 74 65 6e 73 69 6f 6e 20 6d 6f 64 65 6c 65 64  xtension modeled
11460 20 61 66 74 65 72 20 61 20 73 69 6d 69 6c 61 72   after a similar
11470 0a 63 6f 6d 6d 61 6e 64 20 66 6f 75 6e 64 20 69  .command found i
11480 6e 20 50 6f 73 74 67 72 65 53 51 4c 2e 20 20 49  n PostgreSQL.  I
11490 66 20 56 41 43 55 55 4d 20 69 73 20 69 6e 76 6f  f VACUUM is invo
114a0 6b 65 64 20 77 69 74 68 20 74 68 65 20 6e 61 6d  ked with the nam
114b0 65 20 6f 66 20 61 0a 74 61 62 6c 65 20 6f 72 20  e of a.table or 
114c0 69 6e 64 65 78 20 74 68 65 6e 20 69 74 20 69 73  index then it is
114d0 20 73 75 70 70 6f 73 65 20 74 6f 20 63 6c 65 61   suppose to clea
114e0 6e 20 75 70 20 74 68 65 20 6e 61 6d 65 64 20 74  n up the named t
114f0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 49  able or index..I
11500 6e 20 76 65 72 73 69 6f 6e 20 31 2e 30 20 6f 66  n version 1.0 of
11510 20 53 51 4c 69 74 65 2c 20 74 68 65 20 56 41 43   SQLite, the VAC
11520 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 6f 75 6c  UUM command woul
11530 64 20 69 6e 76 6f 6b 65 20 0a 3c 62 3e 67 64 62  d invoke .<b>gdb
11540 6d 5f 72 65 6f 72 67 61 6e 69 7a 65 28 29 3c 2f  m_reorganize()</
11550 62 3e 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74  b> to clean up t
11560 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62  he backend datab
11570 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
11580 70 3e 0a 56 41 43 55 55 4d 20 62 65 63 61 6d 65  p>.VACUUM became
11590 20 61 20 6e 6f 2d 6f 70 20 77 68 65 6e 20 74 68   a no-op when th
115a0 65 20 47 44 42 4d 20 62 61 63 6b 65 6e 64 20 77  e GDBM backend w
115b0 61 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a  as removed from.
115c0 53 51 4c 49 54 45 20 69 6e 20 76 65 72 73 69 6f  SQLITE in versio
115d0 6e 20 32 2e 30 2e 30 2e 0a 56 41 43 55 55 4d 20  n 2.0.0..VACUUM 
115e0 77 61 73 20 72 65 69 6d 70 6c 65 6d 65 6e 74 65  was reimplemente
115f0 64 20 69 6e 20 76 65 72 73 69 6f 6e 20 32 2e 38  d in version 2.8
11600 2e 31 2e 0a 54 68 65 20 69 6e 64 65 78 20 6f 72  .1..The index or
11610 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 72 67 75   table name argu
11620 6d 65 6e 74 20 69 73 20 6e 6f 77 20 69 67 6e 6f  ment is now igno
11630 72 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 68  red..</p>..<p>Wh
11640 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20 28 74 61  en an object (ta
11650 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20 74  ble, index, or t
11660 72 69 67 67 65 72 29 20 69 73 20 64 72 6f 70 70  rigger) is dropp
11670 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 64 61 74  ed from the .dat
11680 61 62 61 73 65 2c 20 69 74 20 6c 65 61 76 65 73  abase, it leaves
11690 20 62 65 68 69 6e 64 20 65 6d 70 74 79 20 73 70   behind empty sp
116a0 61 63 65 2e 20 20 54 68 69 73 20 6d 61 6b 65 73  ace.  This makes
116b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66   the database .f
116c0 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20  ile larger than 
116d0 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 2c 20  it needs to be, 
116e0 62 75 74 20 63 61 6e 20 73 70 65 65 64 20 75 70  but can speed up
116f0 20 69 6e 73 65 72 74 73 2e 20 20 49 6e 20 74 69   inserts.  In ti
11700 6d 65 20 0a 69 6e 73 65 72 74 73 20 61 6e 64 20  me .inserts and 
11710 64 65 6c 65 74 65 73 20 63 61 6e 20 6c 65 61 76  deletes can leav
11720 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
11730 69 6c 65 20 73 74 72 75 63 74 75 72 65 20 66 72  ile structure fr
11740 61 67 6d 65 6e 74 65 64 2c 20 0a 77 68 69 63 68  agmented, .which
11750 20 73 6c 6f 77 73 20 64 6f 77 6e 20 64 69 73 6b   slows down disk
11760 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 64   access to the d
11770 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 73  atabase contents
11780 2e 0a 0a 54 68 65 20 56 41 43 55 55 4d 20 63 6f  ...The VACUUM co
11790 6d 6d 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65  mmand cleans.the
117a0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 62   main database b
117b0 79 20 63 6f 70 79 69 6e 67 20 69 74 73 20 63 6f  y copying its co
117c0 6e 74 65 6e 74 73 20 74 6f 20 61 20 74 65 6d 70  ntents to a temp
117d0 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
117e0 69 6c 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69  ile and .reloadi
117f0 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  ng the original 
11800 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 72  database file fr
11810 6f 6d 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68  om the copy.  Th
11820 69 73 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66  is eliminates .f
11830 72 65 65 20 70 61 67 65 73 2c 20 20 61 6c 69 67  ree pages,  alig
11840 6e 73 20 74 61 62 6c 65 20 64 61 74 61 20 74 6f  ns table data to
11850 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20   be contiguous, 
11860 61 6e 64 20 6f 74 68 65 72 77 69 73 65 20 63 6c  and otherwise cl
11870 65 61 6e 73 20 0a 75 70 20 74 68 65 20 64 61 74  eans .up the dat
11880 61 62 61 73 65 20 66 69 6c 65 20 73 74 72 75 63  abase file struc
11890 74 75 72 65 2e 20 49 74 20 69 73 20 6e 6f 74 20  ture. It is not 
118a0 70 6f 73 73 69 62 6c 65 20 74 6f 20 70 65 72 66  possible to perf
118b0 6f 72 6d 20 74 68 65 20 73 61 6d 65 0a 70 72 6f  orm the same.pro
118c0 63 65 73 73 20 6f 6e 20 61 6e 20 61 74 74 61 63  cess on an attac
118d0 68 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c  hed database fil
118e0 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20  e.</p>..<p>This 
118f0 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
11900 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  l if there is an
11910 20 61 63 74 69 76 65 20 74 72 61 6e 73 61 63 74   active transact
11920 69 6f 6e 2e 20 20 54 68 69 73 20 0a 63 6f 6d 6d  ion.  This .comm
11930 61 6e 64 20 68 61 73 20 6e 6f 20 65 66 66 65 63  and has no effec
11940 74 20 6f 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  t on an in-memor
11950 79 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  y database.</p>.
11960 0a 3c 70 3e 41 73 20 6f 66 20 53 51 4c 69 74 65  .<p>As of SQLite
11970 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e   version 3.1, an
11980 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
11990 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
119a0 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f   command.is auto
119b0 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
119c0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20  abled using the 
119d0 0a 3c 61 20 68 72 65 66 3d 22 70 72 61 67 6d 61  .<a href="pragma
119e0 2e 68 74 6d 6c 23 70 72 61 67 6d 61 5f 61 75 74  .html#pragma_aut
119f0 6f 5f 76 61 63 75 75 6d 22 3e 61 75 74 6f 5f 76  o_vacuum">auto_v
11a00 61 63 75 75 6d 20 70 72 61 67 6d 61 3c 2f 61 3e  acuum pragma</a>
11a10 2e 3c 2f 70 3e 0a 7d 0a 0a 23 20 41 20 6c 69 73  .</p>.}..# A lis
11a20 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20  t of keywords.  
11a30 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72  A asterisk occur
11a40 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77  s after the keyw
11a50 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a  ord if it is on.
11a60 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c  # the fallback l
11a70 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f  ist..#.set keywo
11a80 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b  rd_list [lsort {
11a90 0a 20 20 20 41 42 4f 52 54 2a 0a 20 20 20 41 46  .   ABORT*.   AF
11aa0 54 45 52 2a 0a 20 20 20 41 4c 4c 0a 20 20 20 41  TER*.   ALL.   A
11ab0 4c 54 45 52 0a 20 20 20 41 4e 44 0a 20 20 20 41  LTER.   AND.   A
11ac0 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54 54  S.   ASC*.   ATT
11ad0 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43 52  ACH*.   AUTOINCR
11ae0 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 2a  EMENT.   BEFORE*
11af0 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42 45  .   BEGIN*.   BE
11b00 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43  TWEEN.   BY.   C
11b10 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53 45 0a  ASCADE*.   CASE.
11b20 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c     CHECK.   COLL
11b30 41 54 45 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20  ATE.   COMMIT.  
11b40 20 43 4f 4e 46 4c 49 43 54 2a 0a 20 20 20 43 4f   CONFLICT*.   CO
11b50 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41  NSTRAINT.   CREA
11b60 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43  TE.   CROSS.   C
11b70 55 52 52 45 4e 54 5f 44 41 54 45 2a 0a 20 20 20  URRENT_DATE*.   
11b80 43 55 52 52 45 4e 54 5f 54 49 4d 45 2a 0a 20 20  CURRENT_TIME*.  
11b90 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
11ba0 4d 50 2a 0a 20 20 20 44 41 54 41 42 41 53 45 2a  MP*.   DATABASE*
11bb0 0a 20 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44  .   DEFAULT.   D
11bc0 45 46 45 52 52 45 44 2a 0a 20 20 20 44 45 46 45  EFERRED*.   DEFE
11bd0 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45  RRABLE.   DELETE
11be0 0a 20 20 20 44 45 53 43 2a 0a 20 20 20 44 45 54  .   DESC*.   DET
11bf0 41 43 48 2a 0a 20 20 20 44 49 53 54 49 4e 43 54  ACH*.   DISTINCT
11c00 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 2a  .   DROP.   END*
11c10 0a 20 20 20 45 41 43 48 2a 0a 20 20 20 45 4c 53  .   EACH*.   ELS
11c20 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20 45  E.   ESCAPE.   E
11c30 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49  XCEPT.   EXCLUSI
11c40 56 45 2a 0a 20 20 20 45 58 50 4c 41 49 4e 2a 0a  VE*.   EXPLAIN*.
11c50 20 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f 52 2a     FAIL*.   FOR*
11c60 0a 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46  .   FOREIGN.   F
11c70 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47  ROM.   FULL.   G
11c80 4c 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a 20 20  LOB*.   GROUP.  
11c90 20 48 41 56 49 4e 47 0a 20 20 20 49 47 4e 4f 52   HAVING.   IGNOR
11ca0 45 2a 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 2a  E*.   IMMEDIATE*
11cb0 0a 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a  .   IN.   INDEX.
11cc0 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a 20 20     INITIALLY*.  
11cd0 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54   INNER.   INSERT
11ce0 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20 20 20  .   INSTEAD*.   
11cf0 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
11d00 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
11d10 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
11d20 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b  *.   LEFT.   LIK
11d30 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d  E*.   LIMIT.   M
11d40 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52 41 4c  ATCH*.   NATURAL
11d50 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55  .   NOT.   NOTNU
11d60 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46  LL.   NULL.   OF
11d70 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20 20 20  *.   OFFSET*.   
11d80 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45  ON.   OR.   ORDE
11d90 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 52  R.   OUTER.   PR
11da0 41 47 4d 41 2a 0a 20 20 20 50 52 49 4d 41 52 59  AGMA*.   PRIMARY
11db0 0a 20 20 20 52 41 49 53 45 2a 0a 20 20 20 52 45  .   RAISE*.   RE
11dc0 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 49 4e  FERENCES.   REIN
11dd0 44 45 58 2a 0a 20 20 20 52 45 4e 41 4d 45 2a 0a  DEX*.   RENAME*.
11de0 20 20 20 52 45 50 4c 41 43 45 2a 0a 20 20 20 52     REPLACE*.   R
11df0 45 53 54 52 49 43 54 2a 0a 20 20 20 52 49 47 48  ESTRICT*.   RIGH
11e00 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20  T.   ROLLBACK.  
11e10 20 52 4f 57 2a 0a 20 20 20 53 45 4c 45 43 54 0a   ROW*.   SELECT.
11e20 20 20 20 53 45 54 0a 20 20 20 53 54 41 54 45 4d     SET.   STATEM
11e30 45 4e 54 2a 0a 20 20 20 54 41 42 4c 45 0a 20 20  ENT*.   TABLE.  
11e40 20 54 45 4d 50 2a 0a 20 20 20 54 45 4d 50 4f 52   TEMP*.   TEMPOR
11e50 41 52 59 2a 0a 20 20 20 54 48 45 4e 0a 20 20 20  ARY*.   THEN.   
11e60 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f  TO.   TRANSACTIO
11e70 4e 0a 20 20 20 54 52 49 47 47 45 52 2a 0a 20 20  N.   TRIGGER*.  
11e80 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45   UNION.   UNIQUE
11e90 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55 53  .   UPDATE.   US
11ea0 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 2a 0a 20  ING.   VACUUM*. 
11eb0 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57    VALUES.   VIEW
11ec0 2a 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45  *.   WHEN.   WHE
11ed0 52 45 0a 7d 5d 0a 0a 0a 0a 53 65 63 74 69 6f 6e  RE.}]....Section
11ee0 20 7b 53 51 4c 69 74 65 20 6b 65 79 77 6f 72 64   {SQLite keyword
11ef0 73 7d 20 6b 65 79 77 6f 72 64 73 0a 0a 70 75 74  s} keywords..put
11f00 73 20 7b 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73  s {.<p>The SQL s
11f10 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65  tandard specifie
11f20 73 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20  s a huge number 
11f30 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63  of keywords whic
11f40 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65  h may not.be use
11f50 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d as the names o
11f60 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65  f tables, indice
11f70 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 6f 72 20 64  s, columns, or d
11f80 61 74 61 62 61 73 65 73 2e 20 20 54 68 65 0a 6c  atabases.  The.l
11f90 69 73 74 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74  ist is so long t
11fa0 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63  hat few people c
11fb0 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d  an remember them
11fc0 20 61 6c 6c 2e 20 20 46 6f 72 20 6d 6f 73 74 20   all.  For most 
11fd0 53 51 4c 0a 63 6f 64 65 2c 20 79 6f 75 72 20 73  SQL.code, your s
11fe0 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20  afest bet is to 
11ff0 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e  never use any En
12000 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77  glish language w
12010 6f 72 64 20 61 73 20 74 68 65 0a 6e 61 6d 65 20  ord as the.name 
12020 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  of a user-define
12030 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  d object.</p>..<
12040 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f  p>If you want to
12050 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61   use a keyword a
12060 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65  s a name, you ne
12070 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20  ed to quote it. 
12080 20 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65   There.are three
12090 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67   ways of quoting
120a0 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
120b0 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62  ite:</p>..<p>.<b
120c0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
120d0 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  e>.<tr>.<td vali
120e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79  gn="top"><b>'key
120f0 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word'</b></td><t
12100 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
12110 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72  d>..<td>A keywor
12120 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  d in single quot
12130 65 73 20 69 73 20 69 6e 74 65 72 70 72 65 74 65  es is interprete
12140 64 20 61 73 20 61 20 6c 69 74 65 72 61 6c 20 73  d as a literal s
12150 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 69 66  tring.        if
12160 20 69 74 20 6f 63 63 75 72 73 20 69 6e 20 61 20   it occurs in a 
12170 63 6f 6e 74 65 78 74 20 77 68 65 72 65 20 61 20  context where a 
12180 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69  string literal i
12190 73 20 61 6c 6c 6f 77 65 64 2c 20 6f 74 68 65 72  s allowed, other
121a0 77 69 73 65 0a 09 69 74 20 69 73 20 75 6e 64 65  wise..it is unde
121b0 72 73 74 6f 6f 64 20 61 73 20 61 6e 20 69 64 65  rstood as an ide
121c0 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74  ntifier.</td></t
121d0 72 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  r>.<tr>.<td vali
121e0 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79  gn="top"><b>"key
121f0 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word"</b></td><t
12200 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b  d></td>..<td>A k
12210 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
12220 2d 71 75 6f 74 65 73 20 69 73 20 69 6e 74 65 72  -quotes is inter
12230 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 64 65  preted as an ide
12240 6e 74 69 66 69 65 72 20 69 66 0a 20 20 20 20 20  ntifier if.     
12250 20 20 20 69 74 20 6d 61 74 63 68 65 73 20 61 20     it matches a 
12260 6b 6e 6f 77 6e 20 69 64 65 6e 74 69 66 69 65 72  known identifier
12270 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
12280 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
12290 73 20 61 0a 20 20 20 20 20 20 20 20 73 74 72 69  s a.        stri
122a0 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e  ng literal.</td>
122b0 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74 64 20 76  </tr>.<tr>.<td v
122c0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 5b  align="top"><b>[
122d0 6b 65 79 77 6f 72 64 5d 3c 2f 62 3e 3c 2f 74 64  keyword]</b></td
122e0 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
122f0 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73  A keyword enclos
12300 65 64 20 69 6e 20 73 71 75 61 72 65 20 62 72 61  ed in square bra
12310 63 6b 65 74 73 20 69 73 20 61 6c 77 61 79 73 20  ckets is always 
12320 75 6e 64 65 72 73 74 6f 6f 64 20 61 73 0a 20 20  understood as.  
12330 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66        an identif
12340 69 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ier.  This is no
12350 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20  t standard SQL. 
12360 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65   This quoting me
12370 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20  chanism.        
12380 69 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63  is used by MS Ac
12390 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72  cess and SQL Ser
123a0 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75  ver and is inclu
123b0 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f  ded in SQLite fo
123c0 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74  r.        compat
123d0 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74  ibility.</td></t
123e0 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
123f0 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a  ockquote>.</p>..
12400 3c 70 3e 51 75 6f 74 65 64 20 6b 65 79 77 6f 72  <p>Quoted keywor
12410 64 73 20 61 72 65 20 75 6e 61 65 73 74 68 65 74  ds are unaesthet
12420 69 63 2e 0a 54 6f 20 68 65 6c 70 20 79 6f 75 20  ic..To help you 
12430 61 76 6f 69 64 20 74 68 65 6d 2c 20 53 51 4c 69  avoid them, SQLi
12440 74 65 20 61 6c 6c 6f 77 73 20 6d 61 6e 79 20 6b  te allows many k
12450 65 79 77 6f 72 64 73 20 74 6f 20 62 65 20 75 73  eywords to be us
12460 65 64 20 75 6e 71 75 6f 74 65 64 0a 61 73 20 74  ed unquoted.as t
12470 68 65 20 6e 61 6d 65 73 20 6f 66 20 64 61 74 61  he names of data
12480 62 61 73 65 73 2c 20 74 61 62 6c 65 73 2c 20 69  bases, tables, i
12490 6e 64 69 63 65 73 2c 20 74 72 69 67 67 65 72 73  ndices, triggers
124a0 2c 20 76 69 65 77 73 2c 20 61 6e 64 2f 6f 72 20  , views, and/or 
124b0 63 6f 6c 75 6d 6e 73 2e 0a 49 6e 20 74 68 65 20  columns..In the 
124c0 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73  list of keywords
124d0 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 2c 20 74   that follows, t
124e0 68 6f 73 65 20 74 68 61 74 20 63 61 6e 20 62 65  hose that can be
124f0 20 75 73 65 64 20 61 73 20 69 64 65 6e 74 69 66   used as identif
12500 69 65 72 73 0a 61 72 65 20 73 68 6f 77 6e 20 69  iers.are shown i
12510 6e 20 61 6e 20 69 74 61 6c 69 63 20 66 6f 6e 74  n an italic font
12520 2e 20 20 4b 65 79 77 6f 72 64 73 20 74 68 61 74  .  Keywords that
12530 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64 20   must be quoted 
12540 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 0a 75  in order to be.u
12550 73 65 64 20 61 73 20 69 64 65 6e 74 69 66 69 65  sed as identifie
12560 72 73 20 61 72 65 20 73 68 6f 77 6e 20 69 6e 20  rs are shown in 
12570 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  bold.</p>..<p>.S
12580 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b  QLite adds new k
12590 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d  eywords from tim
125a0 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69  e to time when i
125b0 74 20 74 61 6b 65 20 6f 6e 20 6e 65 77 20 66 65  t take on new fe
125c0 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72  atures..So to pr
125d0 65 76 65 6e 74 20 79 6f 75 20 63 6f 64 65 20 66  event you code f
125e0 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e  rom being broken
125f0 20 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e   by future enhan
12600 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f  cements, you sho
12610 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f  uld.normally quo
12620 74 65 20 61 6e 79 20 69 6e 64 65 6e 74 69 66 69  te any indentifi
12630 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e  er that is an En
12640 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77  glish language w
12650 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75  ord, even if.you
12660 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e   do not have to.
12670 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66  .</p>..<p>.The f
12680 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
12690 20 6b 65 79 77 6f 72 64 73 20 63 75 72 72 65 6e   keywords curren
126a0 74 6c 79 20 72 65 63 6f 67 6e 69 7a 65 64 20 62  tly recognized b
126b0 79 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a  y SQLite:.</p>..
126c0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
126d0 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22  ble width="100%"
126e0 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
126f0 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e 3d 22  ="left" valign="
12700 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30 25 22  top" width="20%"
12710 3e 0a 7d 0a 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e  >.}..set n [llen
12720 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
12730 74 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65  t].set nCol 5.se
12740 74 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24  t nRow [expr {($
12750 6e 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c  n+$nCol-1)/$nCol
12760 7d 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61  }].set i 0.forea
12770 63 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64  ch word $keyword
12780 5f 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 5b 73  _list {.  if {[s
12790 74 72 69 6e 67 20 69 6e 64 65 78 20 24 77 6f 72  tring index $wor
127a0 64 20 65 6e 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20  d end]=="*"} {. 
127b0 20 20 20 73 65 74 20 77 6f 72 64 20 5b 73 74 72     set word [str
127c0 69 6e 67 20 72 61 6e 67 65 20 24 77 6f 72 64 20  ing range $word 
127d0 30 20 65 6e 64 2d 31 5d 0a 20 20 20 20 73 65 74  0 end-1].    set
127e0 20 66 6f 6e 74 20 69 0a 20 20 7d 20 65 6c 73 65   font i.  } else
127f0 20 7b 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20   {.    set font 
12800 62 0a 20 20 7d 0a 20 20 69 66 20 7b 24 69 3d 3d  b.  }.  if {$i==
12810 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 70 75 74  $nRow} {.    put
12820 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69  s "</td><td vali
12830 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e  gn=\"top\" align
12840 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d  =\"left\" width=
12850 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65  \"20%\">".    se
12860 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b  t i 1.  } else {
12870 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a  .    incr i.  }.
12880 20 20 70 75 74 73 20 22 3c 24 66 6f 6e 74 3e 24    puts "<$font>$
12890 77 6f 72 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e  word</$font><br>
128a0 22 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 2f 74 64  ".}..puts {.</td
128b0 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f  ></tr></table></
128c0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32  blockquote>..<h2
128d0 3e 53 70 65 63 69 61 6c 20 6e 61 6d 65 73 3c 2f  >Special names</
128e0 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h2>..<p>The foll
128f0 6f 77 69 6e 67 20 61 72 65 20 6e 6f 74 20 6b 65  owing are not ke
12900 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65  ywords in SQLite
12910 2c 20 62 75 74 20 61 72 65 20 75 73 65 64 20 61  , but are used a
12920 73 20 6e 61 6d 65 73 20 6f 66 20 0a 73 79 73 74  s names of .syst
12930 65 6d 20 6f 62 6a 65 63 74 73 2e 20 20 54 68 65  em objects.  The
12940 79 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 73  y can be used as
12950 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 66   an identifier f
12960 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 0a  or a different .
12970 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 2e 3c  type of object.<
12980 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
12990 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c 62  ><b>.  _ROWID_<b
129a0 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20 20  r>.  MAIN<br>.  
129b0 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44 3c  OID<br>.  ROWID<
129c0 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41 53  br>.  SQLITE_MAS
129d0 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45  TER<br>.  SQLITE
129e0 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20 20  _SEQUENCE<br>.  
129f0 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53 54  SQLITE_TEMP_MAST
12a00 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62 72  ER<br>.  TEMP<br
12a10 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  >.</b></blockquo
12a20 74 65 3e 0a 7d 0a 0a 66 6f 6f 74 65 72 20 24 72  te>.}..footer $r
12a30 63 73 69 64 0a 69 66 20 7b 5b 73 74 72 69 6e 67  csid.if {[string
12a40 20 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74 64   length $outputd
12a50 69 72 5d 7d 20 7b 0a 20 20 66 6f 6f 74 65 72 20  ir]} {.  footer 
12a60 24 72 63 73 69 64 0a 7d 0a                       $rcsid.}.