/ Hex Artifact Content
Login

Artifact 8c3d0bda030f110c754b5edbad75eddf5dbe2ed1:


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 73 71 6c 69 74 65 2e 68  ate the sqlite.h
0030: 74 6d 6c 20 66 69 6c 65 2e 0a 23 0a 73 65 74 20  tml file..#.set 
0040: 72 63 73 69 64 20 7b 24 49 64 3a 20 6c 61 6e 67  rcsid {$Id: lang
0050: 2e 74 63 6c 2c 76 20 31 2e 34 31 20 32 30 30 32  .tcl,v 1.41 2002
0060: 2f 30 36 2f 32 35 20 30 31 3a 30 39 3a 31 33 20  /06/25 01:09:13 
0070: 64 72 68 20 45 78 70 20 24 7d 0a 0a 70 75 74 73  drh Exp $}..puts
0080: 20 7b 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 0a   {<html>.<head>.
0090: 20 20 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c    <title>Query L
00a0: 61 6e 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f  anguage Understo
00b0: 6f 64 20 42 79 20 53 51 4c 69 74 65 3c 2f 74 69  od By SQLite</ti
00c0: 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 0a 3c 62 6f  tle>.</head>.<bo
00d0: 64 79 20 62 67 63 6f 6c 6f 72 3d 77 68 69 74 65  dy bgcolor=white
00e0: 3e 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65 6e 74  >.<h1 align=cent
00f0: 65 72 3e 0a 53 51 4c 20 41 73 20 55 6e 64 65 72  er>.SQL As Under
0100: 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65 0a  stood By SQLite.
0110: 3c 2f 68 31 3e 7d 0a 70 75 74 73 20 22 3c 70 20  </h1>}.puts "<p 
0120: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 28 54  align=center>.(T
0130: 68 69 73 20 70 61 67 65 20 77 61 73 20 6c 61 73  his page was las
0140: 74 20 6d 6f 64 69 66 69 65 64 20 6f 6e 20 5b 6c  t modified on [l
0150: 72 61 6e 67 65 20 24 72 63 73 69 64 20 33 20 34  range $rcsid 3 4
0160: 5d 20 55 54 43 29 0a 3c 2f 70 3e 22 0a 0a 70 75  ] UTC).</p>"..pu
0170: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 53 51 4c 69  ts {.<p>The SQLi
0180: 74 65 20 6c 69 62 72 61 72 79 20 75 6e 64 65 72  te library under
0190: 73 74 61 6e 64 73 20 6d 6f 73 74 20 6f 66 20 74  stands most of t
01a0: 68 65 20 73 74 61 6e 64 61 72 64 20 53 51 4c 0a  he standard SQL.
01b0: 6c 61 6e 67 75 61 67 65 2e 20 20 42 75 74 20 69  language.  But i
01c0: 74 20 64 6f 65 73 20 6f 6d 69 74 20 73 6f 6d 65  t does omit some
01d0: 20 66 65 61 74 75 72 65 73 20 77 68 69 6c 65 20   features while 
01e0: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
01f0: 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66 65  .adding a few fe
0200: 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f 77  atures of its ow
0210: 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65 6e  n.  This documen
0220: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64 65  t attempts to.de
0230: 73 63 72 69 62 65 20 70 65 72 63 69 73 65 6c 79  scribe percisely
0240: 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20 74   what parts of t
0250: 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  he SQL language 
0260: 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64 20  SQLite does.and 
0270: 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
0280: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6c 6c  .</p>..<p>In all
0290: 20 6f 66 20 74 68 65 20 73 79 6e 74 61 78 20 64   of the syntax d
02a0: 69 61 67 72 61 6d 73 20 74 68 61 74 20 66 6f 6c  iagrams that fol
02b0: 6c 6f 77 2c 20 6c 69 74 65 72 61 6c 20 74 65 78  low, literal tex
02c0: 74 20 69 73 20 73 68 6f 77 6e 20 69 6e 0a 62 6f  t is shown in.bo
02d0: 6c 64 20 62 6c 75 65 2e 20 20 4e 6f 6e 2d 74 65  ld blue.  Non-te
02e0: 72 6d 69 6e 61 6c 20 73 79 6d 62 6f 6c 73 20 61  rminal symbols a
02f0: 72 65 20 73 68 6f 77 6e 20 69 6e 20 69 74 61 6c  re shown in ital
0300: 69 63 20 72 65 64 2e 20 20 4f 70 65 72 61 74 6f  ic red.  Operato
0310: 72 73 0a 74 68 61 74 20 61 72 65 20 70 61 72 74  rs.that are part
0320: 20 6f 66 20 74 68 65 20 73 79 6e 74 61 63 74 69   of the syntacti
0330: 63 20 6d 61 72 6b 75 70 20 69 74 73 65 6c 66 20  c markup itself 
0340: 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6c 61  are shown in bla
0350: 63 6b 20 72 6f 6d 61 6e 2e 3c 2f 70 3e 0a 0a 3c  ck roman.</p>..<
0360: 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  p>This document 
0370: 69 73 20 6a 75 73 74 20 61 6e 20 6f 76 65 72 76  is just an overv
0380: 69 65 77 20 6f 66 20 74 68 65 20 53 51 4c 20 73  iew of the SQL s
0390: 79 6e 74 61 78 20 69 6d 70 6c 65 6d 65 6e 74 65  yntax implemente
03a0: 64 0a 62 79 20 53 51 4c 69 74 65 2e 20 20 4d 61  d.by SQLite.  Ma
03b0: 6e 79 20 6c 6f 77 2d 6c 65 76 65 6c 20 70 72 6f  ny low-level pro
03c0: 64 75 63 74 69 6f 6e 73 20 61 72 65 20 6f 6d 69  ductions are omi
03d0: 74 74 65 64 2e 20 20 46 6f 72 20 64 65 74 61 69  tted.  For detai
03e0: 6c 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  led information.
03f0: 6f 6e 20 74 68 65 20 6c 61 6e 67 75 61 67 65 20  on the language 
0400: 74 68 61 74 20 53 51 4c 69 74 65 20 75 6e 64 65  that SQLite unde
0410: 72 73 74 61 6e 64 73 2c 20 72 65 66 65 72 20 74  rstands, refer t
0420: 6f 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64  o the source cod
0430: 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 53 51 4c 69  e.</p>...<p>SQLi
0440: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  te implements th
0450: 65 20 66 6f 6c 6c 6f 77 20 73 79 6e 74 61 78 3a  e follow syntax:
0460: 3c 2f 70 3e 0a 3c 70 3e 3c 75 6c 3e 0a 7d 0a 0a  </p>.<p><ul>.}..
0470: 66 6f 72 65 61 63 68 20 7b 73 65 63 74 69 6f 6e  foreach {section
0480: 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20  } [lsort -index 
0490: 30 20 2d 64 69 63 74 69 6f 6e 61 72 79 20 7b 0a  0 -dictionary {.
04a0: 20 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45    {{CREATE TABLE
04b0: 7d 20 63 72 65 61 74 65 74 61 62 6c 65 7d 0a 20  } createtable}. 
04c0: 20 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d   {{CREATE INDEX}
04d0: 20 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20   createindex}.  
04e0: 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d 0a  {VACUUM vacuum}.
04f0: 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20    {{DROP TABLE} 
0500: 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20 7b 7b 44  droptable}.  {{D
0510: 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69  ROP INDEX} dropi
0520: 6e 64 65 78 7d 0a 20 20 7b 49 4e 53 45 52 54 20  ndex}.  {INSERT 
0530: 69 6e 73 65 72 74 7d 0a 20 20 7b 52 45 50 4c 41  insert}.  {REPLA
0540: 43 45 20 72 65 70 6c 61 63 65 7d 0a 20 20 7b 44  CE replace}.  {D
0550: 45 4c 45 54 45 20 64 65 6c 65 74 65 7d 0a 20 20  ELETE delete}.  
0560: 7b 55 50 44 41 54 45 20 75 70 64 61 74 65 7d 0a  {UPDATE update}.
0570: 20 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74    {SELECT select
0580: 7d 0a 20 20 7b 43 4f 50 59 20 63 6f 70 79 7d 0a  }.  {COPY copy}.
0590: 20 20 7b 45 58 50 4c 41 49 4e 20 65 78 70 6c 61    {EXPLAIN expla
05a0: 69 6e 7d 0a 20 20 7b 65 78 70 72 65 73 73 69 6f  in}.  {expressio
05b0: 6e 20 65 78 70 72 7d 0a 20 20 7b 7b 42 45 47 49  n expr}.  {{BEGI
05c0: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
05d0: 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 50  ransaction}.  {P
05e0: 52 41 47 4d 41 20 70 72 61 67 6d 61 7d 0a 20 20  RAGMA pragma}.  
05f0: 7b 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  {{ON CONFLICT cl
0600: 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a  ause} conflict}.
0610: 20 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d    {{CREATE VIEW}
0620: 20 63 72 65 61 74 65 76 69 65 77 7d 0a 20 20 7b   createview}.  {
0630: 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70  {DROP VIEW} drop
0640: 76 69 65 77 7d 0a 20 20 7b 7b 43 52 45 41 54 45  view}.  {{CREATE
0650: 20 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65   TRIGGER} create
0660: 74 72 69 67 67 65 72 7d 0a 20 20 7b 7b 44 52 4f  trigger}.  {{DRO
0670: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
0680: 72 69 67 67 65 72 7d 0a 7d 5d 20 7b 0a 20 20 70  rigger}.}] {.  p
0690: 75 74 73 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66  uts "<li><a href
06a0: 3d 5c 22 23 5b 6c 69 6e 64 65 78 20 24 73 65 63  =\"#[lindex $sec
06b0: 74 69 6f 6e 20 31 5d 5c 22 3e 5b 6c 69 6e 64 65  tion 1]\">[linde
06c0: 78 20 24 73 65 63 74 69 6f 6e 20 30 5d 3c 2f 61  x $section 0]</a
06d0: 3e 3c 2f 6c 69 3e 22 0a 7d 0a 70 75 74 73 20 7b  ></li>".}.puts {
06e0: 3c 2f 75 6c 3e 3c 2f 70 3e 0a 0a 3c 70 3e 44 65  </ul></p>..<p>De
06f0: 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 69 6d 70  tails on the imp
0700: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 65  lementation of e
0710: 61 63 68 20 63 6f 6d 6d 61 6e 64 20 61 72 65 20  ach command are 
0720: 70 72 6f 76 69 64 65 64 20 69 6e 0a 74 68 65 20  provided in.the 
0730: 73 65 71 75 65 6c 2e 3c 2f 70 3e 0a 7d 0a 0a 70  sequel.</p>.}..p
0740: 72 6f 63 20 53 79 6e 74 61 78 20 7b 61 72 67 73  roc Syntax {args
0750: 7d 20 7b 0a 20 20 70 75 74 73 20 7b 3c 74 61 62  } {.  puts {<tab
0760: 6c 65 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  le cellpadding="
0770: 31 30 22 3e 7d 0a 20 20 66 6f 72 65 61 63 68 20  10">}.  foreach 
0780: 7b 72 75 6c 65 20 62 6f 64 79 7d 20 24 61 72 67  {rule body} $arg
0790: 73 20 7b 0a 20 20 20 20 70 75 74 73 20 22 3c 74  s {.    puts "<t
07a0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 5c 22 72 69  r><td align=\"ri
07b0: 67 68 74 5c 22 20 76 61 6c 69 67 6e 3d 5c 22 74  ght\" valign=\"t
07c0: 6f 70 5c 22 3e 22 0a 20 20 20 20 70 75 74 73 20  op\">".    puts 
07d0: 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  "<i><font color=
07e0: 5c 22 23 66 66 33 34 33 34 5c 22 3e 24 72 75 6c  \"#ff3434\">$rul
07f0: 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 26 6e 62 73  e</font></i>&nbs
0800: 70 3b 3a 3a 3d 3c 2f 74 64 3e 22 0a 20 20 20 20  p;::=</td>".    
0810: 72 65 67 73 75 62 20 2d 61 6c 6c 20 3c 20 24 62  regsub -all < $b
0820: 6f 64 79 20 7b 25 4c 54 7d 20 62 6f 64 79 0a 20  ody {%LT} body. 
0830: 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 3e     regsub -all >
0840: 20 24 62 6f 64 79 20 7b 25 47 54 7d 20 62 6f 64   $body {%GT} bod
0850: 79 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c  y.    regsub -al
0860: 6c 20 25 4c 54 20 24 62 6f 64 79 20 7b 3c 2f 66  l %LT $body {</f
0870: 6f 6e 74 3e 3c 2f 62 3e 3c 69 3e 3c 66 6f 6e 74  ont></b><i><font
0880: 20 63 6f 6c 6f 72 3d 22 23 66 66 33 34 33 34 22   color="#ff3434"
0890: 3e 7d 20 62 6f 64 79 0a 20 20 20 20 72 65 67 73  >} body.    regs
08a0: 75 62 20 2d 61 6c 6c 20 25 47 54 20 24 62 6f 64  ub -all %GT $bod
08b0: 79 20 7b 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 3c 62  y {</font></i><b
08c0: 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  ><font color="#2
08d0: 63 32 63 66 30 22 3e 7d 20 62 6f 64 79 0a 20 20  c2cf0">} body.  
08e0: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b    regsub -all {[
08f0: 5d 7c 5b 2a 3f 5d 7d 20 24 62 6f 64 79 20 7b 3c  ]|[*?]} $body {<
0900: 2f 66 6f 6e 74 3e 3c 2f 62 3e 26 3c 62 3e 3c 66  /font></b>&<b><f
0910: 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63  ont color="#2c2c
0920: 66 30 22 3e 7d 20 62 6f 64 79 0a 20 20 20 20 72  f0">} body.    r
0930: 65 67 73 75 62 20 2d 61 6c 6c 20 22 5c 6e 22 20  egsub -all "\n" 
0940: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 62 6f  [string trim $bo
0950: 64 79 5d 20 22 3c 62 72 3e 5c 6e 22 20 62 6f 64  dy] "<br>\n" bod
0960: 79 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c  y.    regsub -al
0970: 6c 20 22 5c 6e 20 20 2a 22 20 24 62 6f 64 79 20  l "\n  *" $body 
0980: 22 5c 6e 5c 5c 26 6e 62 73 70 3b 5c 5c 26 6e 62  "\n\\&nbsp;\\&nb
0990: 73 70 3b 5c 5c 26 6e 62 73 70 3b 5c 5c 26 6e 62  sp;\\&nbsp;\\&nb
09a0: 73 70 3b 22 20 62 6f 64 79 0a 20 20 20 20 72 65  sp;" body.    re
09b0: 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 7c 2c 2e 2a  gsub -all {[|,.*
09c0: 28 29 5d 7d 20 24 62 6f 64 79 20 7b 3c 62 69 67  ()]} $body {<big
09d0: 3e 26 3c 2f 62 69 67 3e 7d 20 62 6f 64 79 0a 20  >&</big>} body. 
09e0: 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b     regsub -all {
09f0: 20 3d 20 7d 20 24 62 6f 64 79 20 7b 20 3c 62 69   = } $body { <bi
0a00: 67 3e 3d 3c 2f 62 69 67 3e 20 7d 20 62 6f 64 79  g>=</big> } body
0a10: 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  .    regsub -all
0a20: 20 7b 53 54 41 52 7d 20 24 62 6f 64 79 20 7b 3c   {STAR} $body {<
0a30: 62 69 67 3e 2a 3c 2f 62 69 67 3e 7d 20 62 6f 64  big>*</big>} bod
0a40: 79 0a 20 20 20 20 70 75 74 73 20 22 3c 74 64 3e  y.    puts "<td>
0a50: 3c 62 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c  <b><font color=\
0a60: 22 23 32 63 32 63 66 30 5c 22 3e 24 62 6f 64 79  "#2c2cf0\">$body
0a70: 3c 2f 66 6f 6e 74 3e 3c 2f 62 3e 3c 2f 74 64 3e  </font></b></td>
0a80: 3c 2f 74 72 3e 22 0a 20 20 7d 0a 20 20 70 75 74  </tr>".  }.  put
0a90: 73 20 7b 3c 2f 74 61 62 6c 65 3e 7d 0a 7d 0a 70  s {</table>}.}.p
0aa0: 72 6f 63 20 4f 70 65 72 61 74 6f 72 20 7b 6e 61  roc Operator {na
0ab0: 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22  me} {.  return "
0ac0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32  <font color=\"#2
0ad0: 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e 24 6e 61  c2cf0\"><big>$na
0ae0: 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 22  me</big></font>"
0af0: 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65 72 6d 69  .}.proc Nontermi
0b00: 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72  nal {name} {.  r
0b10: 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e 74 20  eturn "<i><font 
0b20: 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34 33 34 5c  color=\"#ff3434\
0b30: 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 3c 2f  ">$name</font></
0b40: 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65 79 77 6f  i>".}.proc Keywo
0b50: 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65  rd {name} {.  re
0b60: 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f  turn "<font colo
0b70: 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 24 6e  r=\"#2c2cf0\">$n
0b80: 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 20 0a  ame</font>".}. .
0b90: 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e  .proc Section {n
0ba0: 61 6d 65 20 7b 6c 61 62 65 6c 20 7b 7d 7d 7d 20  ame {label {}}} 
0bb0: 7b 0a 20 20 70 75 74 73 20 22 5c 6e 3c 68 72 20  {.  puts "\n<hr 
0bc0: 2f 3e 22 0a 20 20 69 66 20 7b 24 6c 61 62 65 6c  />".  if {$label
0bd0: 21 3d 22 22 7d 20 7b 0a 20 20 20 20 70 75 74 73  !=""} {.    puts
0be0: 20 22 3c 61 20 6e 61 6d 65 3d 5c 22 24 6c 61 62   "<a name=\"$lab
0bf0: 65 6c 5c 22 3e 22 0a 20 20 7d 0a 20 20 70 75 74  el\">".  }.  put
0c00: 73 20 22 3c 68 31 3e 24 6e 61 6d 65 3c 2f 68 31  s "<h1>$name</h1
0c10: 3e 5c 6e 22 0a 7d 0a 0a 70 72 6f 63 20 45 78 61  >\n".}..proc Exa
0c20: 6d 70 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20  mple {text} {.  
0c30: 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74  puts "<blockquot
0c40: 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72  e><pre>$text</pr
0c50: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22  e></blockquote>"
0c60: 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47  .}..Section {BEG
0c70: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20  IN TRANSACTION} 
0c80: 63 72 65 61 74 65 69 6e 64 65 78 0a 0a 53 79 6e  createindex..Syn
0c90: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
0ca0: 6e 74 7d 20 7b 0a 42 45 47 49 4e 20 5b 54 52 41  nt} {.BEGIN [TRA
0cb0: 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e  NSACTION [<name>
0cc0: 5d 5d 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ]] [ON CONFLICT 
0cd0: 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69  <conflict-algori
0ce0: 74 68 6d 3e 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b  thm>].}.Syntax {
0cf0: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
0d00: 0a 45 4e 44 20 5b 54 52 41 4e 53 41 43 54 49 4f  .END [TRANSACTIO
0d10: 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79  N [<name>]].}.Sy
0d20: 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
0d30: 65 6e 74 7d 20 7b 0a 43 4f 4d 4d 49 54 20 5b 54  ent} {.COMMIT [T
0d40: 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d  RANSACTION [<nam
0d50: 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b 73  e>]].}.Syntax {s
0d60: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
0d70: 52 4f 4c 4c 42 41 43 4b 20 5b 54 52 41 4e 53 41  ROLLBACK [TRANSA
0d80: 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a  CTION [<name>]].
0d90: 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 42 65 67  }..puts {.<p>Beg
0da0: 69 6e 6e 69 6e 67 20 69 6e 20 76 65 72 73 69 6f  inning in versio
0db0: 6e 20 32 2e 30 2c 20 53 51 4c 69 74 65 20 73 75  n 2.0, SQLite su
0dc0: 70 70 6f 72 74 73 20 74 72 61 6e 73 61 63 74 69  pports transacti
0dd0: 6f 6e 73 20 77 69 74 68 0a 72 6f 6c 6c 62 61 63  ons with.rollbac
0de0: 6b 20 61 6e 64 20 61 74 6f 6d 69 63 20 63 6f 6d  k and atomic com
0df0: 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 4e 6f  mit.</p>..<p>.No
0e00: 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
0e10: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
0e20: 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74 68  base except with
0e30: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
0e40: 2e 0a 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68  ..Any command th
0e50: 61 74 20 63 68 61 6e 67 65 73 20 74 68 65 20 64  at changes the d
0e60: 61 74 61 62 61 73 65 20 28 62 61 73 69 63 61 6c  atabase (basical
0e70: 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d  ly, any SQL comm
0e80: 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 53  and.other than S
0e90: 45 4c 45 43 54 29 20 77 69 6c 6c 20 61 75 74 6f  ELECT) will auto
0ea0: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 73  matically starts
0eb0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
0ec0: 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72  f.one is not alr
0ed0: 65 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20  eady in effect. 
0ee0: 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73   Automatically s
0ef0: 74 61 72 65 64 20 74 72 61 6e 73 61 63 74 69 6f  tared transactio
0f00: 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64  ns.are committed
0f10: 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69   at the conclusi
0f20: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e  on of the comman
0f30: 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61  d..</p>..<p>.Tra
0f40: 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  nsactions can be
0f50: 20 73 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c   started manuall
0f60: 79 20 75 73 69 6e 67 20 74 68 65 20 42 45 47 49  y using the BEGI
0f70: 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 53 75 63 68 20  N.command. Such 
0f80: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75  transactions usu
0f90: 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74  ally persist unt
0fa0: 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d  il the next.COMM
0fb0: 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63  IT or ROLLBACK c
0fc0: 6f 6d 6d 61 6e 64 2e 20 42 75 74 20 61 20 74 72  ommand. But a tr
0fd0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
0fe0: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
0ff0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
1000: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
1010: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
1020: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
1030: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
1040: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
1050: 73 70 65 63 69 66 69 65 64 2e 0a 53 65 65 20 74  specified..See t
1060: 68 65 20 64 6f 63 75 6d 65 6e 74 69 6f 6e 20 6f  he documention o
1070: 6e 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23  n the <a href="#
1080: 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e  conflict">ON CON
1090: 46 4c 49 43 54 3c 2f 61 3e 0a 63 6c 61 75 73 65  FLICT</a>.clause
10a0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
10b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
10c0: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
10d0: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
10e0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
10f0: 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 70 74 69  p>..<p>.The opti
1100: 6f 6e 61 6c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  onal ON CONFLICT
1110: 20 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65   clause at the e
1120: 6e 64 20 6f 66 20 61 20 42 45 47 49 4e 20 73 74  nd of a BEGIN st
1130: 61 74 65 6d 65 6e 74 0a 63 61 6e 20 62 65 20 75  atement.can be u
1140: 73 65 64 20 74 6f 20 63 68 61 6e 67 65 64 20 74  sed to changed t
1150: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c  he default confl
1160: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
1170: 6c 67 6f 72 69 74 68 6d 2e 0a 54 68 65 20 6e 6f  lgorithm..The no
1180: 72 6d 61 6c 20 64 65 66 61 75 6c 74 20 69 73 20  rmal default is 
1190: 41 42 4f 52 54 2e 20 20 49 66 20 61 6e 20 61 6c  ABORT.  If an al
11a0: 74 65 72 6e 61 74 69 76 65 20 69 73 20 73 70 65  ternative is spe
11b0: 63 69 66 69 65 64 20 62 79 0a 74 68 65 20 4f 4e  cified by.the ON
11c0: 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
11d0: 20 6f 66 20 61 20 42 45 47 49 4e 2c 20 74 68 65   of a BEGIN, the
11e0: 6e 20 74 68 61 74 20 61 6c 74 65 72 6e 61 74 69  n that alternati
11f0: 76 65 20 69 73 20 75 73 65 64 0a 61 73 20 74 68  ve is used.as th
1200: 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 61 6c  e default for al
1210: 6c 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 69  l commands withi
1220: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
1230: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0a  n.  The default.
1240: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 6f 76 65  algorithm is ove
1250: 72 72 69 64 64 65 6e 20 62 79 20 4f 4e 20 43 4f  rridden by ON CO
1260: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 73 20 6f  NFLICT clauses o
1270: 6e 20 69 6e 64 69 76 69 64 75 61 6c 0a 63 6f 6e  n individual.con
1280: 73 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20  straints within 
1290: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
12a0: 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
12b0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 6e 64 20   statements.and 
12c0: 62 79 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  by the OR clause
12d0: 73 20 6f 6e 20 43 4f 50 59 2c 20 49 4e 53 45 52  s on COPY, INSER
12e0: 54 2c 20 61 6e 64 20 55 50 44 41 54 45 20 63 6f  T, and UPDATE co
12f0: 6d 6d 61 6e 64 73 2e 0a 3c 2f 70 3e 0a 7d 0a 0a  mmands..</p>.}..
1300: 53 65 63 74 69 6f 6e 20 43 4f 50 59 20 63 6f 70  Section COPY cop
1310: 79 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  y..Syntax {sql-s
1320: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 4f 50 59  tatement} {.COPY
1330: 20 5b 20 4f 52 20 3c 63 6f 6e 66 6c 69 63 74 2d   [ OR <conflict-
1340: 61 6c 67 6f 72 69 74 68 6d 3e 20 5d 20 3c 74 61  algorithm> ] <ta
1350: 62 6c 65 2d 6e 61 6d 65 3e 20 46 52 4f 4d 20 3c  ble-name> FROM <
1360: 66 69 6c 65 6e 61 6d 65 3e 0a 5b 20 55 53 49 4e  filename>.[ USIN
1370: 47 20 44 45 4c 49 4d 49 54 45 52 53 20 3c 64 65  G DELIMITERS <de
1380: 6c 69 6d 3e 20 5d 0a 7d 0a 0a 0a 70 75 74 73 20  lim> ].}...puts 
1390: 7b 0a 3c 70 3e 54 68 65 20 43 4f 50 59 20 63 6f  {.<p>The COPY co
13a0: 6d 6d 61 6e 64 20 69 73 20 61 6e 20 65 78 74 65  mmand is an exte
13b0: 6e 73 69 6f 6e 20 75 73 65 64 20 74 6f 20 6c 6f  nsion used to lo
13c0: 61 64 20 6c 61 72 67 65 20 61 6d 6f 75 6e 74 73  ad large amounts
13d0: 20 6f 66 0a 64 61 74 61 20 69 6e 74 6f 20 61 20   of.data into a 
13e0: 74 61 62 6c 65 2e 20 20 49 74 20 69 73 20 6d 6f  table.  It is mo
13f0: 64 65 6c 65 64 20 61 66 74 65 72 20 61 20 73 69  deled after a si
1400: 6d 69 6c 61 72 20 63 6f 6d 6d 61 6e 64 20 66 6f  milar command fo
1410: 75 6e 64 0a 69 6e 20 50 6f 73 74 67 72 65 53 51  und.in PostgreSQ
1420: 4c 2e 20 20 49 6e 20 66 61 63 74 2c 20 74 68 65  L.  In fact, the
1430: 20 53 51 4c 69 74 65 20 43 4f 50 59 20 63 6f 6d   SQLite COPY com
1440: 6d 61 6e 64 20 69 73 20 73 70 65 63 69 66 69 63  mand is specific
1450: 61 6c 6c 79 0a 64 65 73 69 67 6e 65 64 20 74 6f  ally.designed to
1460: 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64   be able to read
1470: 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74   the output of t
1480: 68 65 20 50 6f 73 74 67 72 65 53 51 4c 20 64 75  he PostgreSQL du
1490: 6d 70 0a 75 74 69 6c 69 74 79 20 3c 62 3e 70 67  mp.utility <b>pg
14a0: 5f 64 75 6d 70 3c 2f 62 3e 20 73 6f 20 74 68 61  _dump</b> so tha
14b0: 74 20 64 61 74 61 20 63 61 6e 20 62 65 20 65 61  t data can be ea
14c0: 73 69 6c 79 20 74 72 61 6e 73 66 65 72 72 65 64  sily transferred
14d0: 20 66 72 6f 6d 0a 50 6f 73 74 67 72 65 53 51 4c   from.PostgreSQL
14e0: 20 69 6e 74 6f 20 53 51 4c 69 74 65 2e 3c 70 3e   into SQLite.<p>
14f0: 0a 0a 3c 70 3e 54 68 65 20 74 61 62 6c 65 2d 6e  ..<p>The table-n
1500: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
1510: 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  of an existing t
1520: 61 62 6c 65 20 77 68 69 63 68 20 69 73 20 74 6f  able which is to
1530: 0a 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20  .be filled with 
1540: 64 61 74 61 2e 20 20 54 68 65 20 66 69 6c 65 6e  data.  The filen
1550: 61 6d 65 20 69 73 20 61 20 73 74 72 69 6e 67 20  ame is a string 
1560: 6f 72 20 69 64 65 6e 74 69 66 69 65 72 20 74 68  or identifier th
1570: 61 74 0a 6e 61 6d 65 73 20 61 20 66 69 6c 65 20  at.names a file 
1580: 66 72 6f 6d 20 77 68 69 63 68 20 64 61 74 61 20  from which data 
1590: 77 69 6c 6c 20 62 65 20 72 65 61 64 2e 20 20 54  will be read.  T
15a0: 68 65 20 66 69 6c 65 6e 61 6d 65 20 63 61 6e 20  he filename can 
15b0: 62 65 0a 74 68 65 20 3c 62 3e 53 54 44 49 4e 3c  be.the <b>STDIN<
15c0: 2f 62 3e 20 74 6f 20 72 65 61 64 20 64 61 74 61  /b> to read data
15d0: 20 66 72 6f 6d 20 73 74 61 6e 64 61 72 64 20 69   from standard i
15e0: 6e 70 75 74 2e 3c 70 3e 0a 0a 3c 70 3e 45 61 63  nput.<p>..<p>Eac
15f0: 68 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 69 6e  h line of the in
1600: 70 75 74 20 66 69 6c 65 20 69 73 20 63 6f 6e 76  put file is conv
1610: 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  erted into a sin
1620: 67 6c 65 20 72 65 63 6f 72 64 0a 69 6e 20 74 68  gle record.in th
1630: 65 20 74 61 62 6c 65 2e 20 20 43 6f 6c 75 6d 6e  e table.  Column
1640: 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20  s are separated 
1650: 62 79 20 74 61 62 73 2e 20 20 49 66 20 61 20 74  by tabs.  If a t
1660: 61 62 20 6f 63 63 75 72 73 20 61 73 0a 64 61 74  ab occurs as.dat
1670: 61 20 77 69 74 68 69 6e 20 61 20 63 6f 6c 75 6d  a within a colum
1680: 6e 2c 20 74 68 65 6e 20 74 68 61 74 20 74 61 62  n, then that tab
1690: 20 69 73 20 70 72 65 63 65 64 65 64 20 62 79 20   is preceded by 
16a0: 61 20 62 61 73 6b 73 6c 61 73 68 20 22 5c 22 0a  a baskslash "\".
16b0: 63 68 61 72 61 63 74 65 72 2e 20 20 41 20 62 61  character.  A ba
16c0: 73 6b 73 6c 61 73 68 20 69 6e 20 74 68 65 20 64  skslash in the d
16d0: 61 74 61 20 61 70 70 65 61 72 73 20 61 73 20 74  ata appears as t
16e0: 77 6f 20 62 61 63 6b 73 6c 61 73 68 65 73 20 69  wo backslashes i
16f0: 6e 0a 61 20 72 6f 77 2e 20 20 54 68 65 20 6f 70  n.a row.  The op
1700: 74 69 6f 6e 61 6c 20 55 53 49 4e 47 20 44 45 4c  tional USING DEL
1710: 49 4d 49 54 45 52 53 20 63 6c 61 75 73 65 20 63  IMITERS clause c
1720: 61 6e 20 73 70 65 63 69 66 79 20 61 20 64 65 6c  an specify a del
1730: 69 6d 69 74 65 72 0a 6f 74 68 65 72 20 74 68 61  imiter.other tha
1740: 6e 20 74 61 62 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  n tab.</p>..<p>I
1750: 66 20 61 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73 69  f a column consi
1760: 73 74 73 20 6f 66 20 74 68 65 20 63 68 61 72 61  sts of the chara
1770: 63 74 65 72 20 22 5c 4e 22 2c 20 74 68 61 74 20  cter "\N", that 
1780: 63 6f 6c 75 6d 6e 20 69 73 20 66 69 6c 6c 65 64  column is filled
1790: 0a 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20  .with the value 
17a0: 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  NULL.</p>..<p>Th
17b0: 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c  e optional confl
17c0: 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77  ict-clause allow
17d0: 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74  s the specificat
17e0: 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e  ion of an altern
17f0: 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74  ative.constraint
1800: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1810: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74  tion algorithm t
1820: 6f 20 75 73 65 20 66 6f 72 20 74 68 69 73 20 6f  o use for this o
1830: 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20  ne command..See 
1840: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
1850: 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e  ed.<a href="#con
1860: 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49  flict">ON CONFLI
1870: 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64 69 74  CT</a> for addit
1880: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1890: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20  n.</p>..<p>When 
18a0: 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 73  the input data s
18b0: 6f 75 72 63 65 20 69 73 20 53 54 44 49 4e 2c 20  ource is STDIN, 
18c0: 74 68 65 20 69 6e 70 75 74 20 63 61 6e 20 62 65  the input can be
18d0: 20 74 65 72 6d 69 6e 61 74 65 64 0a 62 79 20 61   terminated.by a
18e0: 20 6c 69 6e 65 20 74 68 61 74 20 63 6f 6e 74 61   line that conta
18f0: 69 6e 73 20 6f 6e 6c 79 20 61 20 62 61 73 6b 73  ins only a basks
1900: 6c 61 73 68 20 61 6e 64 20 61 20 64 6f 74 3a 7d  lash and a dot:}
1910: 0a 70 75 74 73 20 22 5c 22 5b 4f 70 65 72 61 74  .puts "\"[Operat
1920: 6f 72 20 5c 5c 2e 5d 5c 22 2e 3c 2f 70 3e 22 0a  or \\.]\".</p>".
1930: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
1940: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
1950: 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  dex..Syntax {sql
1960: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 52  -statement} {.CR
1970: 45 41 54 45 20 5b 55 4e 49 51 55 45 5d 20 49 4e  EATE [UNIQUE] IN
1980: 44 45 58 20 3c 69 6e 64 65 78 2d 6e 61 6d 65 3e  DEX <index-name>
1990: 20 0a 4f 4e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65   .ON <table-name
19a0: 3e 20 28 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  > ( <column-name
19b0: 3e 20 5b 2c 20 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d  > [, <column-nam
19c0: 65 3e 5d 2a 20 29 0a 5b 20 4f 4e 20 43 4f 4e 46  e>]* ).[ ON CONF
19d0: 4c 49 43 54 20 3c 63 6f 6e 66 6c 69 63 74 2d 61  LICT <conflict-a
19e0: 6c 67 6f 72 69 74 68 6d 3e 20 5d 0a 7d 20 7b 63  lgorithm> ].} {c
19f0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 7d 20 7b 0a 3c 6e  olumn-name} {.<n
1a00: 61 6d 65 3e 20 5b 20 41 53 43 20 7c 20 44 45 53  ame> [ ASC | DES
1a10: 43 20 5d 0a 7d 0a 0a 0a 70 75 74 73 20 7b 0a 3c  C ].}...puts {.<
1a20: 70 3e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44  p>The CREATE IND
1a30: 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69  EX command consi
1a40: 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f  sts of the keywo
1a50: 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45  rds "CREATE INDE
1a60: 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74  X" followed.by t
1a70: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
1a80: 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65  ew index, the ke
1a90: 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20  yword "ON", the 
1aa0: 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f  name of a previo
1ab0: 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62  usly.created tab
1ac0: 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65  le that is to be
1ad0: 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20   indexed, and a 
1ae0: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
1af0: 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63  st of names of.c
1b00: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
1b10: 62 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65  ble that are use
1b20: 64 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20  d for the index 
1b30: 6b 65 79 2e 0a 45 61 63 68 20 63 6f 6c 75 6d 6e  key..Each column
1b40: 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c   name can be fol
1b50: 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66 20  lowed by one of 
1b60: 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44 45  the "ASC" or "DE
1b70: 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20  SC" keywords.to 
1b80: 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f 72  indicate sort or
1b90: 64 65 72 2c 20 62 75 74 20 74 68 65 20 73 6f 72  der, but the sor
1ba0: 74 20 6f 72 64 65 72 20 69 73 20 69 67 6e 6f 72  t order is ignor
1bb0: 65 64 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ed in the curren
1bc0: 74 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t.implementation
1bd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  .</p>..<p>There 
1be0: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
1bf0: 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65 20 6e   limits on the n
1c00: 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63 65 73  umber of indices
1c10: 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61 74 74   that can be.att
1c20: 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c  ached to a singl
1c30: 65 20 74 61 62 6c 65 2c 20 6e 6f 72 20 6f 6e 20  e table, nor on 
1c40: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1c50: 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65  lumns in an inde
1c60: 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68  x.</p>..<p>If th
1c70: 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72 64  e UNIQUE keyword
1c80: 20 61 70 70 65 61 72 73 20 62 65 74 77 65 65 6e   appears between
1c90: 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44 45   CREATE and INDE
1ca0: 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65  X then duplicate
1cb0: 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 61  .index entries a
1cc0: 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20  re not allowed. 
1cd0: 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   Any attempt to 
1ce0: 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69 63 61  insert a duplica
1cf0: 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65  te entry.will re
1d00: 73 75 6c 74 20 69 6e 20 61 20 72 6f 6c 6c 62 61  sult in a rollba
1d10: 63 6b 20 61 6e 64 20 61 6e 20 65 72 72 6f 72 20  ck and an error 
1d20: 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70  message.</p>..<p
1d30: 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  >The optional co
1d40: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c  nflict-clause al
1d50: 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
1d60: 63 61 74 69 6f 6e 20 6f 66 20 61 6c 20 61 6c 74  cation of al alt
1d70: 65 72 6e 61 74 69 76 65 0a 64 65 66 61 75 6c 74  ernative.default
1d80: 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66   constraint conf
1d90: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1da0: 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 74 68  algorithm for th
1db0: 69 73 20 69 6e 64 65 78 2e 0a 54 68 69 73 20 6f  is index..This o
1dc0: 6e 6c 79 20 6d 61 6b 65 73 20 73 65 6e 73 65 20  nly makes sense 
1dd0: 69 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65  if the UNIQUE ke
1de0: 79 77 6f 72 64 20 69 73 20 75 73 65 64 20 73 69  yword is used si
1df0: 6e 63 65 20 6f 74 68 65 72 77 69 73 65 0a 74 68  nce otherwise.th
1e00: 65 72 65 20 61 72 65 20 6e 6f 74 20 63 6f 6e 73  ere are not cons
1e10: 74 72 61 69 6e 74 73 20 6f 6e 20 74 68 65 20 69  traints on the i
1e20: 6e 64 65 78 2e 20 20 54 68 65 20 64 65 66 61 75  ndex.  The defau
1e30: 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 0a  lt algorithm is.
1e40: 41 42 4f 52 54 2e 20 20 49 66 20 61 20 43 4f 50  ABORT.  If a COP
1e50: 59 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20 55 50  Y, INSERT, or UP
1e60: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 73  DATE statement s
1e70: 70 65 63 69 66 69 65 73 20 61 20 70 61 72 74 69  pecifies a parti
1e80: 63 75 6c 61 72 0a 63 6f 6e 66 6c 69 63 74 20 72  cular.conflict r
1e90: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
1ea0: 74 68 6d 2c 20 74 68 61 74 20 61 6c 67 6f 72 69  thm, that algori
1eb0: 74 68 6d 20 69 73 20 75 73 65 64 20 69 6e 20 70  thm is used in p
1ec0: 6c 61 63 65 20 6f 66 0a 74 68 65 20 64 65 66 61  lace of.the defa
1ed0: 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  ult algorithm sp
1ee0: 65 63 69 66 69 65 64 20 68 65 72 65 2e 0a 53 65  ecified here..Se
1ef0: 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69  e the section ti
1f00: 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63  tled.<a href="#c
1f10: 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46  onflict">ON CONF
1f20: 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64  LICT</a> for add
1f30: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
1f40: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ion.</p>..<p>The
1f50: 20 65 78 61 63 74 20 74 65 78 74 0a 6f 66 20 65   exact text.of e
1f60: 61 63 68 20 43 52 45 41 54 45 20 49 4e 44 45 58  ach CREATE INDEX
1f70: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
1f80: 6f 72 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73  ored in the <b>s
1f90: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e  qlite_master</b>
1fa0: 0a 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f 74 65  .or <b>sqlite_te
1fb0: 6d 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61  mp_master</b> ta
1fc0: 62 6c 65 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  ble, depending o
1fd0: 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 74 61  n whether the ta
1fe0: 62 6c 65 0a 62 65 69 6e 67 20 69 6e 64 65 78 65  ble.being indexe
1ff0: 64 20 69 73 20 74 65 6d 70 6f 72 61 72 79 2e 20  d is temporary. 
2000: 20 45 76 65 72 79 74 69 6d 65 20 74 68 65 20 64   Everytime the d
2010: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
2020: 64 2c 0a 61 6c 6c 20 43 52 45 41 54 45 20 49 4e  d,.all CREATE IN
2030: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  DEX statements.a
2040: 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  re read from the
2050: 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65   <b>sqlite_maste
2060: 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e 64 20  r</b> table and 
2070: 75 73 65 64 20 74 6f 20 72 65 67 65 6e 65 72 61  used to regenera
2080: 74 65 0a 53 51 4c 69 74 65 27 73 20 69 6e 74 65  te.SQLite's inte
2090: 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
20a0: 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78  ion of the index
20b0: 20 6c 61 79 6f 75 74 2e 3c 2f 70 3e 0a 7d 0a 0a   layout.</p>.}..
20c0: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
20d0: 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74   TABLE} {createt
20e0: 61 62 6c 65 7d 0a 0a 53 79 6e 74 61 78 20 7b 73  able}..Syntax {s
20f0: 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43 52  ql-command} {.CR
2100: 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d  EATE [TEMP | TEM
2110: 50 4f 52 41 52 59 5d 20 54 41 42 4c 45 20 3c 74  PORARY] TABLE <t
2120: 61 62 6c 65 2d 6e 61 6d 65 3e 20 28 0a 20 20 3c  able-name> (.  <
2130: 63 6f 6c 75 6d 6e 2d 64 65 66 3e 20 5b 2c 20 3c  column-def> [, <
2140: 63 6f 6c 75 6d 6e 2d 64 65 66 3e 5d 2a 0a 20 20  column-def>]*.  
2150: 5b 2c 20 3c 63 6f 6e 73 74 72 61 69 6e 74 3e 5d  [, <constraint>]
2160: 2a 0a 29 0a 7d 20 7b 73 71 6c 2d 63 6f 6d 6d 61  *.).} {sql-comma
2170: 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45  nd} {.CREATE [TE
2180: 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20  MP | TEMPORARY] 
2190: 54 41 42 4c 45 20 3c 74 61 62 6c 65 2d 6e 61 6d  TABLE <table-nam
21a0: 65 3e 20 41 53 20 3c 73 65 6c 65 63 74 2d 73 74  e> AS <select-st
21b0: 61 74 65 6d 65 6e 74 3e 0a 7d 20 7b 63 6f 6c 75  atement>.} {colu
21c0: 6d 6e 2d 64 65 66 7d 20 7b 0a 3c 6e 61 6d 65 3e  mn-def} {.<name>
21d0: 20 5b 3c 74 79 70 65 3e 5d 20 5b 3c 63 6f 6c 75   [<type>] [<colu
21e0: 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 3e 5d 2a  mn-constraint>]*
21f0: 0a 7d 20 7b 74 79 70 65 7d 20 7b 0a 3c 74 79 70  .} {type} {.<typ
2200: 65 6e 61 6d 65 3e 20 7c 0a 3c 74 79 70 65 6e 61  ename> |.<typena
2210: 6d 65 3e 20 28 20 3c 6e 75 6d 62 65 72 3e 20 29  me> ( <number> )
2220: 20 7c 0a 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20   |.<typename> ( 
2230: 3c 6e 75 6d 62 65 72 3e 20 2c 20 3c 6e 75 6d 62  <number> , <numb
2240: 65 72 3e 20 29 0a 7d 20 7b 63 6f 6c 75 6d 6e 2d  er> ).} {column-
2250: 63 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0a 4e 4f  constraint} {.NO
2260: 54 20 4e 55 4c 4c 20 5b 20 3c 63 6f 6e 66 6c 69  T NULL [ <confli
2270: 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a 50  ct-clause> ] |.P
2280: 52 49 4d 41 52 59 20 4b 45 59 20 5b 3c 73 6f 72  RIMARY KEY [<sor
2290: 74 2d 6f 72 64 65 72 3e 5d 20 5b 20 3c 63 6f 6e  t-order>] [ <con
22a0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20  flict-clause> ] 
22b0: 7c 0a 55 4e 49 51 55 45 20 5b 20 3c 63 6f 6e 66  |.UNIQUE [ <conf
22c0: 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c  lict-clause> ] |
22d0: 0a 43 48 45 43 4b 20 28 20 3c 65 78 70 72 3e 20  .CHECK ( <expr> 
22e0: 29 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c  ) [ <conflict-cl
22f0: 61 75 73 65 3e 20 5d 20 7c 0a 44 45 46 41 55 4c  ause> ] |.DEFAUL
2300: 54 20 3c 76 61 6c 75 65 3e 0a 7d 20 7b 63 6f 6e  T <value>.} {con
2310: 73 74 72 61 69 6e 74 7d 20 7b 0a 50 52 49 4d 41  straint} {.PRIMA
2320: 52 59 20 4b 45 59 20 28 20 3c 6e 61 6d 65 3e 20  RY KEY ( <name> 
2330: 5b 2c 20 3c 6e 61 6d 65 3e 5d 2a 20 29 20 5b 20  [, <name>]* ) [ 
2340: 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  <conflict-clause
2350: 3e 20 5d 7c 0a 55 4e 49 51 55 45 20 28 20 3c 6e  > ]|.UNIQUE ( <n
2360: 61 6d 65 3e 20 5b 2c 20 3c 6e 61 6d 65 3e 5d 2a  ame> [, <name>]*
2370: 20 29 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63   ) [ <conflict-c
2380: 6c 61 75 73 65 3e 20 5d 20 7c 0a 43 48 45 43 4b  lause> ] |.CHECK
2390: 20 28 20 3c 65 78 70 72 3e 20 29 20 5b 20 3c 63   ( <expr> ) [ <c
23a0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20  onflict-clause> 
23b0: 5d 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74 2d 63 6c  ].} {conflict-cl
23c0: 61 75 73 65 7d 20 7b 0a 4f 4e 20 43 4f 4e 46 4c  ause} {.ON CONFL
23d0: 49 43 54 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c  ICT <conflict-al
23e0: 67 6f 72 69 74 68 6d 3e 0a 7d 0a 0a 70 75 74 73  gorithm>.}..puts
23f0: 20 7b 0a 3c 70 3e 41 20 43 52 45 41 54 45 20 54   {.<p>A CREATE T
2400: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
2410: 73 20 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20  s basically the 
2420: 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45  keywords "CREATE
2430: 20 54 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64   TABLE".followed
2440: 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
2450: 61 20 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20  a new table and 
2460: 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
2470: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64  list of column.d
2480: 65 66 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63  efinitions and c
2490: 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65  onstraints.  The
24a0: 20 74 61 62 6c 65 20 6e 61 6d 65 20 63 61 6e 20   table name can 
24b0: 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 64 65  be either an ide
24c0: 6e 74 69 66 69 65 72 0a 6f 72 20 61 20 73 74 72  ntifier.or a str
24d0: 69 6e 67 2e 20 20 54 61 62 6c 65 73 20 6e 61 6d  ing.  Tables nam
24e0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
24f0: 74 68 20 22 3c 62 3e 73 71 6c 69 74 65 5f 3c 2f  th "<b>sqlite_</
2500: 62 3e 22 20 61 72 65 20 72 65 73 65 72 76 65 64  b>" are reserved
2510: 0a 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20  .for use by the 
2520: 65 6e 67 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  engine.</p>..<p>
2530: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
2540: 6e 69 74 69 6f 6e 20 69 73 20 74 68 65 20 6e 61  nition is the na
2550: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
2560: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
2570: 0a 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68  .datatype for th
2580: 61 74 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20  at column, then 
2590: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
25a0: 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73  onal column cons
25b0: 74 72 61 69 6e 74 73 2e 0a 54 68 65 20 64 61 74  traints..The dat
25c0: 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 63 6f  atype for the co
25d0: 6c 75 6d 6e 20 69 73 20 28 75 73 75 61 6c 6c 79  lumn is (usually
25e0: 29 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 6d 61  ) ignored and ma
25f0: 79 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 41 6c  y be omitted..Al
2600: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  l information is
2610: 20 73 74 6f 72 65 64 20 61 73 20 6e 75 6c 6c 2d   stored as null-
2620: 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69 6e  terminated strin
2630: 67 73 2e 0a 54 68 65 20 55 4e 49 51 55 45 20 63  gs..The UNIQUE c
2640: 6f 6e 73 74 72 61 69 6e 74 20 63 61 75 73 65 73  onstraint causes
2650: 20 61 6e 20 69 6e 64 65 78 20 74 6f 20 62 65 20   an index to be 
2660: 63 72 65 61 74 65 64 20 6f 6e 20 74 68 65 20 73  created on the s
2670: 70 65 63 69 66 69 65 64 0a 63 6f 6c 75 6d 6e 73  pecified.columns
2680: 2e 20 20 54 68 69 73 20 69 6e 64 65 78 20 6d 75  .  This index mu
2690: 73 74 20 63 6f 6e 74 61 69 6e 20 75 6e 69 71 75  st contain uniqu
26a0: 65 20 6b 65 79 73 2e 0a 54 68 65 20 44 45 46 41  e keys..The DEFA
26b0: 55 4c 54 20 63 6f 6e 73 74 72 61 69 6e 74 0a 73  ULT constraint.s
26c0: 70 65 63 69 66 69 65 73 20 61 20 64 65 66 61 75  pecifies a defau
26d0: 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20  lt value to use 
26e0: 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 49 4e  when doing an IN
26f0: 53 45 52 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 53  SERT..</p>..<p>S
2700: 70 65 63 69 66 79 69 6e 67 20 61 20 50 52 49 4d  pecifying a PRIM
2710: 41 52 59 20 4b 45 59 20 6e 6f 72 6d 61 6c 6c 79  ARY KEY normally
2720: 20 6a 75 73 74 20 63 72 65 61 74 65 73 20 61 20   just creates a 
2730: 55 4e 49 51 55 45 20 69 6e 64 65 78 0a 6f 6e 20  UNIQUE index.on 
2740: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e  the primary key.
2750: 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 70 72    However, if pr
2760: 69 6d 61 72 79 20 6b 65 79 20 69 73 20 6f 6e 20  imary key is on 
2770: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 0a  a single column.
2780: 74 68 61 74 20 68 61 73 20 64 61 74 61 74 79 70  that has datatyp
2790: 65 20 49 4e 54 45 47 45 52 2c 20 74 68 65 6e 20  e INTEGER, then 
27a0: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 75  that column is u
27b0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 0a 61  sed internally.a
27c0: 73 20 74 68 65 20 61 63 74 75 61 6c 20 6b 65 79  s the actual key
27d0: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 20 66   of the B-Tree f
27e0: 6f 72 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  or the table.  T
27f0: 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74  his means that t
2800: 68 65 20 63 6f 6c 75 6d 6e 0a 6d 61 79 20 6f 6e  he column.may on
2810: 6c 79 20 68 6f 6c 64 20 75 6e 69 71 75 65 20 69  ly hold unique i
2820: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 20  nteger values.  
2830: 28 45 78 63 65 70 74 20 66 6f 72 20 74 68 69 73  (Except for this
2840: 20 6f 6e 65 20 63 61 73 65 2c 0a 53 51 4c 69 74   one case,.SQLit
2850: 65 20 69 67 6e 6f 72 65 73 20 74 68 65 20 64 61  e ignores the da
2860: 74 61 74 79 70 65 20 73 70 65 63 69 66 69 63 61  tatype specifica
2870: 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  tion of columns 
2880: 61 6e 64 20 61 6c 6c 6f 77 73 0a 61 6e 79 20 6b  and allows.any k
2890: 69 6e 64 20 6f 66 20 64 61 74 61 20 74 6f 20 62  ind of data to b
28a0: 65 20 70 75 74 20 69 6e 20 61 20 63 6f 6c 75 6d  e put in a colum
28b0: 6e 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  n regardless of 
28c0: 69 74 73 20 64 65 63 6c 61 72 65 64 0a 64 61 74  its declared.dat
28d0: 61 74 79 70 65 2e 29 20 20 49 66 20 61 20 74 61  atype.)  If a ta
28e0: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  ble does not hav
28f0: 65 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49  e an INTEGER PRI
2900: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2c  MARY KEY column,
2910: 0a 74 68 65 6e 20 74 68 65 20 42 2d 54 72 65 65  .then the B-Tree
2920: 20 6b 65 79 20 77 69 6c 6c 20 62 65 20 61 20 61   key will be a a
2930: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
2940: 65 72 61 74 65 64 20 69 6e 74 65 67 65 72 2e 20  erated integer. 
2950: 20 54 68 65 0a 42 2d 54 72 65 65 20 6b 65 79 20   The.B-Tree key 
2960: 66 6f 72 20 61 20 72 6f 77 20 63 61 6e 20 61 6c  for a row can al
2970: 77 61 79 73 20 62 65 20 61 63 63 65 73 73 65 64  ways be accessed
2980: 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68   using one of th
2990: 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 73 20  e.special names 
29a0: 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 20  "<b>ROWID</b>", 
29b0: 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72  "<b>OID</b>", or
29c0: 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e   "<b>_ROWID_</b>
29d0: 22 2e 0a 54 68 69 73 20 69 73 20 74 72 75 65 20  "..This is true 
29e0: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
29f0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
2a00: 72 65 20 69 73 20 61 6e 20 49 4e 54 45 47 45 52  re is an INTEGER
2a10: 0a 50 52 49 4d 41 52 59 20 4b 45 59 2e 3c 2f 70  .PRIMARY KEY.</p
2a20: 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 22 54 45  >..<p>If the "TE
2a30: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
2a40: 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  Y" keyword occur
2a50: 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52  s in between "CR
2a60: 45 41 54 45 22 0a 61 6e 64 20 22 54 41 42 4c 45  EATE".and "TABLE
2a70: 22 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  " then the table
2a80: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
2a90: 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65   is only visible
2aa0: 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20   to the.process 
2ab0: 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20  that opened the 
2ac0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20  database and is 
2ad0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
2ae0: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
2af0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
2b00: 64 2e 20 20 41 6e 79 20 69 6e 64 69 63 65 73 20  d.  Any indices 
2b10: 63 72 65 61 74 65 64 20 6f 6e 20 61 20 74 65 6d  created on a tem
2b20: 70 6f 72 61 72 79 20 74 61 62 6c 65 0a 61 72 65  porary table.are
2b30: 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61 72 79 2e   also temporary.
2b40: 20 20 54 65 6d 70 6f 72 61 72 79 20 74 61 62 6c    Temporary tabl
2b50: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 61  es and indices a
2b60: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 73  re stored in a.s
2b70: 65 70 61 72 61 74 65 20 66 69 6c 65 20 64 69 73  eparate file dis
2b80: 74 69 6e 63 74 20 66 72 6f 6d 20 74 68 65 20 6d  tinct from the m
2b90: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2ba0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f  e.</p>..<p>The o
2bb0: 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74  ptional conflict
2bc0: 2d 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 69 6e  -clause followin
2bd0: 67 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e  g each constrain
2be0: 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65  t.allows the spe
2bf0: 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e  cification of an
2c00: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64 65 66   alternative def
2c10: 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69 6e 74 20  ault.constraint 
2c20: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
2c30: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f  ion algorithm fo
2c40: 72 20 74 68 61 74 20 63 6f 6e 73 74 72 61 69 6e  r that constrain
2c50: 74 2e 0a 54 68 65 20 64 65 66 61 75 6c 74 20 69  t..The default i
2c60: 73 20 61 62 6f 72 74 20 41 42 4f 52 54 2e 20 20  s abort ABORT.  
2c70: 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72  Different constr
2c80: 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  aints within the
2c90: 20 73 61 6d 65 0a 74 61 62 6c 65 20 6d 61 79 20   same.table may 
2ca0: 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64  have different d
2cb0: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
2cc0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
2cd0: 69 74 68 6d 73 2e 0a 49 66 20 61 6e 20 43 4f 50  ithms..If an COP
2ce0: 59 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20 55 50  Y, INSERT, or UP
2cf0: 44 41 54 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65  DATE command spe
2d00: 63 69 66 69 65 73 20 61 20 64 69 66 66 65 72 65  cifies a differe
2d10: 6e 74 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f  nt conflict.reso
2d20: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
2d30: 2c 20 74 68 65 6e 20 74 68 61 74 20 61 6c 67 6f  , then that algo
2d40: 72 69 74 68 6d 20 69 73 20 75 73 65 64 20 69 6e  rithm is used in
2d50: 20 70 6c 61 63 65 20 6f 66 20 74 68 65 0a 64 65   place of the.de
2d60: 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20  fault algorithm 
2d70: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
2d80: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
2d90: 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65  atement..See the
2da0: 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
2db0: 3c 61 20 68 72 65 66 3d 22 23 63 6f 6e 66 6c 69  <a href="#confli
2dc0: 63 74 22 3e 4f 4e 20 43 4f 4e 46 4c 49 43 54 3c  ct">ON CONFLICT<
2dd0: 2f 61 3e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  /a> for addition
2de0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c  al information.<
2df0: 2f 70 3e 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f  /p>..<p>CHECK co
2e00: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 67  nstraints are ig
2e10: 6e 6f 72 65 64 20 69 6e 20 74 68 65 20 63 75 72  nored in the cur
2e20: 72 65 6e 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  rent implementat
2e30: 69 6f 6e 2e 0a 53 75 70 70 6f 72 74 20 66 6f 72  ion..Support for
2e40: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
2e50: 74 73 20 6d 61 79 20 62 65 20 61 64 64 65 64 20  ts may be added 
2e60: 69 6e 20 74 68 65 20 66 75 74 75 72 65 2e 20 20  in the future.  
2e70: 41 73 20 6f 66 0a 76 65 72 73 69 6f 6e 20 32 2e  As of.version 2.
2e80: 33 2e 30 2c 20 4e 4f 54 20 4e 55 4c 4c 2c 20 50  3.0, NOT NULL, P
2e90: 52 49 4d 41 52 59 20 4b 45 59 2c 20 61 6e 64 20  RIMARY KEY, and 
2ea0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
2eb0: 74 73 20 61 6c 6c 0a 77 6f 72 6b 2e 3c 2f 70 3e  ts all.work.</p>
2ec0: 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e  ..<p>There are n
2ed0: 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69  o arbitrary limi
2ee0: 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72  ts on the number
2ef0: 0a 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 6f  .of columns or o
2f00: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
2f10: 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 61  constraints in a
2f20: 20 74 61 62 6c 65 2e 0a 54 68 65 20 74 6f 74 61   table..The tota
2f30: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61  l amount of data
2f40: 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77   in a single row
2f50: 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 61   is limited to a
2f60: 62 6f 75 74 0a 31 20 6d 65 67 61 62 79 74 65 73  bout.1 megabytes
2f70: 2e 20 20 28 54 68 69 73 20 6c 69 6d 69 74 20 63  .  (This limit c
2f80: 61 6e 20 62 65 20 69 6e 63 72 65 61 73 65 64 20  an be increased 
2f90: 74 6f 20 31 36 4d 42 20 62 79 20 63 68 61 6e 67  to 16MB by chang
2fa0: 69 6e 67 0a 61 20 73 69 6e 67 6c 65 20 23 64 65  ing.a single #de
2fb0: 66 69 6e 65 20 69 6e 20 74 68 65 20 73 6f 75 72  fine in the sour
2fc0: 63 65 20 63 6f 64 65 20 61 6e 64 20 72 65 63 6f  ce code and reco
2fd0: 6d 70 69 6c 69 6e 67 2e 29 3c 2f 70 3e 0a 0a 3c  mpiling.)</p>..<
2fe0: 70 3e 54 68 65 20 43 52 45 41 54 45 20 54 41 42  p>The CREATE TAB
2ff0: 4c 45 20 41 53 20 66 6f 72 6d 20 64 65 66 69 6e  LE AS form defin
3000: 65 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  es the table to 
3010: 62 65 0a 74 68 65 20 72 65 73 75 6c 74 20 73 65  be.the result se
3020: 74 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54  t of a query.  T
3030: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
3040: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 61 72  table columns ar
3050: 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  e.the names of t
3060: 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  he columns in th
3070: 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c  e result.</p>..<
3080: 70 3e 54 68 65 20 65 78 61 63 74 20 74 65 78 74  p>The exact text
3090: 0a 6f 66 20 65 61 63 68 20 43 52 45 41 54 45 20  .of each CREATE 
30a0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
30b0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
30c0: 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65   <b>sqlite_maste
30d0: 72 3c 2f 62 3e 0a 74 61 62 6c 65 2e 20 20 45 76  r</b>.table.  Ev
30e0: 65 72 79 74 69 6d 65 20 74 68 65 20 64 61 74 61  erytime the data
30f0: 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2c 20  base is opened, 
3100: 61 6c 6c 20 43 52 45 41 54 45 20 54 41 42 4c 45  all CREATE TABLE
3110: 20 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20   statements.are 
3120: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 3c 62  read from the <b
3130: 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f  >sqlite_master</
3140: 62 3e 20 74 61 62 6c 65 20 61 6e 64 20 75 73 65  b> table and use
3150: 64 20 74 6f 20 72 65 67 65 6e 65 72 61 74 65 0a  d to regenerate.
3160: 53 51 4c 69 74 65 27 73 20 69 6e 74 65 72 6e 61  SQLite's interna
3170: 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
3180: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6c 61   of the table la
3190: 79 6f 75 74 2e 0a 49 66 20 74 68 65 20 6f 72 69  yout..If the ori
31a0: 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 77 61  ginal command wa
31b0: 73 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  s a CREATE TABLE
31c0: 20 41 53 20 74 68 65 6e 20 74 68 65 6e 20 61 6e   AS then then an
31d0: 20 65 71 75 69 76 61 6c 65 6e 74 0a 43 52 45 41   equivalent.CREA
31e0: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
31f0: 6e 74 20 69 73 20 73 79 6e 74 68 65 73 69 7a 65  nt is synthesize
3200: 64 20 61 6e 64 20 73 74 6f 72 65 20 69 6e 20 3c  d and store in <
3210: 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c  b>sqlite_master<
3220: 2f 62 3e 0a 69 6e 20 70 6c 61 63 65 20 6f 66 20  /b>.in place of 
3230: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d  the original com
3240: 6d 61 6e 64 2e 0a 54 68 65 20 74 65 78 74 20 6f  mand..The text o
3250: 66 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  f CREATE TEMPORA
3260: 52 59 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  RY TABLE stateme
3270: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
3280: 6e 20 74 68 65 0a 3c 62 3e 73 71 6c 69 74 65 5f  n the.<b>sqlite_
3290: 74 65 6d 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20  temp_master</b> 
32a0: 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 7d 0a 53 65  table..</p>.}.Se
32b0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52  ction {CREATE TR
32c0: 49 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69  IGGER} createtri
32d0: 67 67 65 72 0a 0a 53 79 6e 74 61 78 20 7b 73 71  gger..Syntax {sq
32e0: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43  l-statement} {.C
32f0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 3c 74  REATE TRIGGER <t
3300: 72 69 67 67 65 72 2d 6e 61 6d 65 3e 20 5b 20 42  rigger-name> [ B
3310: 45 46 4f 52 45 20 7c 20 41 46 54 45 52 20 5d 0a  EFORE | AFTER ].
3320: 3c 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74 3e  <database-event>
3330: 20 4f 4e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e   ON <table-name>
3340: 0a 3c 74 72 69 67 67 65 72 2d 61 63 74 69 6f 6e  .<trigger-action
3350: 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  >.}..Syntax {sql
3360: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43 52  -statement} {.CR
3370: 45 41 54 45 20 54 52 49 47 47 45 52 20 3c 74 72  EATE TRIGGER <tr
3380: 69 67 67 65 72 2d 6e 61 6d 65 3e 20 49 4e 53 54  igger-name> INST
3390: 45 41 44 20 4f 46 0a 3c 64 61 74 61 62 61 73 65  EAD OF.<database
33a0: 2d 65 76 65 6e 74 3e 20 4f 4e 20 3c 76 69 65 77  -event> ON <view
33b0: 2d 6e 61 6d 65 3e 0a 3c 74 72 69 67 67 65 72 2d  -name>.<trigger-
33c0: 61 63 74 69 6f 6e 3e 0a 7d 0a 0a 53 79 6e 74 61  action>.}..Synta
33d0: 78 20 7b 64 61 74 61 62 61 73 65 2d 65 76 65 6e  x {database-even
33e0: 74 7d 20 7b 0a 44 45 4c 45 54 45 20 7c 20 0a 49  t} {.DELETE | .I
33f0: 4e 53 45 52 54 20 7c 20 0a 55 50 44 41 54 45 20  NSERT | .UPDATE 
3400: 7c 20 0a 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  | .UPDATE OF <co
3410: 6c 75 6d 6e 2d 6c 69 73 74 3e 0a 7d 0a 0a 53 79  lumn-list>.}..Sy
3420: 6e 74 61 78 20 7b 74 72 69 67 67 65 72 2d 61 63  ntax {trigger-ac
3430: 74 69 6f 6e 7d 20 7b 0a 5b 20 46 4f 52 20 45 41  tion} {.[ FOR EA
3440: 43 48 20 52 4f 57 20 5d 20 5b 20 57 48 45 4e 20  CH ROW ] [ WHEN 
3450: 3c 65 78 70 72 65 73 73 69 6f 6e 3e 20 5d 20 0a  <expression> ] .
3460: 42 45 47 49 4e 20 0a 20 20 3c 74 72 69 67 67 65  BEGIN .  <trigge
3470: 72 2d 73 74 65 70 3e 20 3b 20 5b 20 3c 74 72 69  r-step> ; [ <tri
3480: 67 67 65 72 2d 73 74 65 70 3e 20 3b 20 5d 2a 0a  gger-step> ; ]*.
3490: 45 4e 44 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 74  END.}..Syntax {t
34a0: 72 69 67 67 65 72 2d 73 74 65 70 7d 20 7b 0a 3c  rigger-step} {.<
34b0: 75 70 64 61 74 65 2d 73 74 61 74 65 6d 65 6e 74  update-statement
34c0: 3e 20 7c 20 3c 69 6e 73 65 72 74 2d 73 74 61 74  > | <insert-stat
34d0: 65 6d 65 6e 74 3e 20 7c 20 0a 3c 64 65 6c 65 74  ement> | .<delet
34e0: 65 2d 73 74 61 74 65 6d 65 6e 74 3e 20 7c 20 3c  e-statement> | <
34f0: 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65 6e 74  select-statement
3500: 3e 20 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  > .}..puts {.<p>
3510: 54 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  The CREATE TRIGG
3520: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ER statement is 
3530: 75 73 65 64 20 74 6f 20 61 64 64 20 74 72 69 67  used to add trig
3540: 67 65 72 73 20 74 6f 20 74 68 65 20 0a 64 61 74  gers to the .dat
3550: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 54 72  abase schema. Tr
3560: 69 67 67 65 72 73 20 61 72 65 20 64 61 74 61 62  iggers are datab
3570: 61 73 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 28  ase operations (
3580: 74 68 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 61  the <i>trigger-a
3590: 63 74 69 6f 6e 3c 2f 69 3e 29 20 0a 74 68 61 74  ction</i>) .that
35a0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
35b0: 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68 65  ly performed whe
35c0: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64 61  n a specified da
35d0: 74 61 62 61 73 65 20 65 76 65 6e 74 20 28 74 68  tabase event (th
35e0: 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 65 76  e.<i>database-ev
35f0: 65 6e 74 3c 2f 69 3e 29 20 6f 63 63 75 72 73 2e  ent</i>) occurs.
3600: 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 74 72 69    </p>..<p>A tri
3610: 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65 63  gger may be spec
3620: 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77 68  ified to fire wh
3630: 65 6e 65 76 65 72 20 61 20 44 45 4c 45 54 45 2c  enever a DELETE,
3640: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
3650: 45 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61  E of a.particula
3660: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
3670: 20 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e   occurs, or when
3680: 65 76 65 72 20 61 6e 20 55 50 44 41 54 45 20 6f  ever an UPDATE o
3690: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 73 70  f one or more.sp
36a0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20  ecified columns 
36b0: 6f 66 20 61 20 74 61 62 6c 65 20 61 72 65 20 75  of a table are u
36c0: 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  pdated.</p>..<p>
36d0: 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c  At this time SQL
36e0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c  ite supports onl
36f0: 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74  y FOR EACH ROW t
3700: 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52  riggers, not FOR
3710: 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20   EACH.STATEMENT 
3720: 74 72 69 67 67 65 72 73 2e 20 48 65 6e 63 65 20  triggers. Hence 
3730: 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69  explicitly speci
3740: 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52  fying FOR EACH R
3750: 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20  OW is optional. 
3760: 20 46 4f 52 0a 45 41 43 48 20 52 4f 57 20 69 6d   FOR.EACH ROW im
3770: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53  plies that the S
3780: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
3790: 65 63 69 66 69 65 64 20 61 73 20 3c 69 3e 74 72  ecified as <i>tr
37a0: 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e 20  igger-steps</i> 
37b0: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
37c0: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
37d0: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
37e0: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
37f0: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
3800: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
3810: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
3820: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
3830: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
3840: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42   fire.</p>..<p>B
3850: 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61  oth the WHEN cla
3860: 75 73 65 20 61 6e 64 20 74 68 65 20 3c 69 3e 74  use and the <i>t
3870: 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e  rigger-steps</i>
3880: 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d   may access elem
3890: 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77  ents of .the row
38a0: 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c   being inserted,
38b0: 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61   deleted or upda
38c0: 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65  ted using refere
38d0: 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  nces of the form
38e0: 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e   ."NEW.<i>column
38f0: 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22  -name</i>" and "
3900: 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  OLD.<i>column-na
3910: 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c  me</i>", where.<
3920: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
3930: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
3940: 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74   a column from t
3950: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
3960: 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73  e trigger.is ass
3970: 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 4f 4c  ociated with. OL
3980: 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65  D and NEW refere
3990: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  nces may only be
39a0: 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72   used in trigger
39b0: 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67 65 72 2d  s on.<i>trigger-
39c0: 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f 72 20 77  event</i>s for w
39d0: 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65  hich they are re
39e0: 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f  levant, as follo
39f0: 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  ws:</p>..<table 
3a00: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
3a10: 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74  ding=10>.<tr>.<t
3a20: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
3a30: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
3a40: 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54  th=120><i>INSERT
3a50: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
3a60: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72  lign="top">NEW r
3a70: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
3a80: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
3a90: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
3aa0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
3ab0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
3ac0: 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  UPDATE</i></td>.
3ad0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
3ae0: 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66  >NEW and OLD ref
3af0: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
3b00: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  d</td>.</tr>.<tr
3b10: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
3b20: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
3b30: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45   width=120><i>DE
3b40: 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  LETE</i></td>.<t
3b50: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f  d valign="top">O
3b60: 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  LD references ar
3b70: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
3b80: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e  r>.</table>.</p>
3b90: 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45 4e 20 63  ..<p>If a WHEN c
3ba0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
3bb0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
3bc0: 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
3bd0: 61 73 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74  as <i>trigger-st
3be0: 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f 6e 6c 79  eps</i> are only
3bf0: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f   executed for ro
3c00: 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
3c10: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
3c20: 74 72 75 65 2e 20 49 66 20 6e 6f 20 57 48 45 4e  true. If no WHEN
3c30: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
3c40: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
3c50: 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78 65 63  tements are exec
3c60: 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77  uted for all row
3c70: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  s.</p>..<p>The s
3c80: 70 65 63 69 66 69 65 64 20 3c 69 3e 74 72 69 67  pecified <i>trig
3c90: 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20 64 65 74  ger-time</i> det
3ca0: 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65  ermines when the
3cb0: 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70   <i>trigger-step
3cc0: 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65 20 65 78  s</i>.will be ex
3cd0: 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65 20  ecuted relative 
3ce0: 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f 6e  to the insertion
3cf0: 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 6f  , modification o
3d00: 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68 65  r removal of the
3d10: 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77 2e  .associated row.
3d20: 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 4f 4e 20 43  </p>..<p>An ON C
3d30: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6d  ONFLICT clause m
3d40: 61 79 20 62 65 20 73 70 65 63 69 66 69 65 64 20  ay be specified 
3d50: 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 55 50  as part of an UP
3d60: 44 41 54 45 20 6f 72 20 49 4e 53 45 52 54 0a 3c  DATE or INSERT.<
3d70: 69 3e 74 72 69 67 67 65 72 2d 73 74 65 70 3c 2f  i>trigger-step</
3d80: 69 3e 2e 20 48 6f 77 65 76 65 72 20 69 66 20 61  i>. However if a
3d90: 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  n ON CONFLICT cl
3da0: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
3db0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68  d as part of .th
3dc0: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
3dd0: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
3de0: 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 74 68  to fire, then th
3df0: 69 73 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  is conflict hand
3e00: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 69 73 20 75  ling.policy is u
3e10: 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e  sed instead.</p>
3e20: 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73 20 61 72  ..<p>Triggers ar
3e30: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
3e40: 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65  dropped when the
3e50: 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 79   table that they
3e60: 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64   are .associated
3e70: 20 77 69 74 68 20 69 73 20 64 72 6f 70 70 65 64   with is dropped
3e80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65  .</p>..<p>Trigge
3e90: 72 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  rs may be create
3ea0: 64 20 6f 6e 20 76 69 65 77 73 2c 20 61 73 20 77  d on views, as w
3eb0: 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20  ell as ordinary 
3ec0: 74 61 62 6c 65 73 2c 20 62 79 20 73 70 65 63 69  tables, by speci
3ed0: 66 79 69 6e 67 0a 49 4e 53 54 45 41 44 20 4f 46  fying.INSTEAD OF
3ee0: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
3ef0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
3f00: 2e 20 49 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  . If one or more
3f10: 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44   ON INSERT, ON D
3f20: 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41  ELETE.or ON UPDA
3f30: 54 45 20 74 72 69 67 67 65 72 73 20 61 72 65 20  TE triggers are 
3f40: 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76 69 65  defined on a vie
3f50: 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 6e 6f  w, then it is no
3f60: 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 65 78  t an error to ex
3f70: 65 63 75 74 65 0a 61 6e 20 49 4e 53 45 52 54 2c  ecute.an INSERT,
3f80: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
3f90: 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74  E statement on t
3fa0: 68 65 20 76 69 65 77 2c 20 72 65 73 70 65 63 74  he view, respect
3fb0: 69 76 65 6c 79 2e 20 54 68 65 72 65 61 66 74 65  ively. Thereafte
3fc0: 72 2c 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20  r,.executing an 
3fd0: 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f  INSERT, DELETE o
3fe0: 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20  r UPDATE on the 
3ff0: 76 69 65 77 20 63 61 75 73 65 73 20 74 68 65 20  view causes the 
4000: 61 73 73 6f 63 69 61 74 65 64 0a 20 20 74 72 69  associated.  tri
4010: 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 54  ggers to fire. T
4020: 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20 75  he real tables u
4030: 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76 69  nderlying the vi
4040: 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69 66  ew are not modif
4050: 69 65 64 0a 20 20 28 65 78 63 65 70 74 20 70 6f  ied.  (except po
4060: 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c  ssibly explicitl
4070: 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20  y, by a trigger 
4080: 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c  program).</p>..<
4090: 70 3e 3c 62 3e 45 78 61 6d 70 6c 65 3a 3c 2f 62  p><b>Example:</b
40a0: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 73 75 6d 69  ></p>..<p>Assumi
40b0: 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72  ng that customer
40c0: 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f   records are sto
40d0: 72 65 64 20 69 6e 20 74 68 65 20 22 63 75 73 74  red in the "cust
40e0: 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e  omers" table, an
40f0: 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72 65 63  d.that order rec
4100: 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20  ords are stored 
4110: 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73 22 20  in the "orders" 
4120: 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  table, the follo
4130: 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73  wing trigger.ens
4140: 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73  ures that all as
4150: 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72 73 20  sociated orders 
4160: 61 72 65 20 72 65 64 69 72 65 63 74 65 64 20 77  are redirected w
4170: 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63  hen a customer c
4180: 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65  hanges.his or he
4190: 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 7d  r address:</p>.}
41a0: 0a 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54  .Example {.CREAT
41b0: 45 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65  E TRIGGER update
41c0: 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73  _customer_addres
41d0: 73 20 55 50 44 41 54 45 20 4f 46 20 61 64 64 72  s UPDATE OF addr
41e0: 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65 72 73  ess ON customers
41f0: 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20 55 50   .  BEGIN.    UP
4200: 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54 20  DATE orders SET 
4210: 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e 61 64  address = new.ad
4220: 64 72 65 73 73 20 57 48 45 52 45 20 63 75 73 74  dress WHERE cust
4230: 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c 64 2e  omer_name = old.
4240: 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d 0a 70  name;.  END;.}.p
4250: 75 74 73 20 7b 0a 3c 70 3e 57 69 74 68 20 74 68  uts {.<p>With th
4260: 69 73 20 74 72 69 67 67 65 72 20 69 6e 73 74 61  is trigger insta
4270: 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e 67 20  lled, executing 
4280: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 3c 2f  the statement:</
4290: 70 3e 0a 7d 0a 0a 45 78 61 6d 70 6c 65 20 7b 0a  p>.}..Example {.
42a0: 55 50 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73  UPDATE customers
42b0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
42c0: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
42d0: 45 20 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a  E name = 'Jack J
42e0: 6f 6e 65 73 27 3b 0a 7d 0a 70 75 74 73 20 7b 0a  ones';.}.puts {.
42f0: 3c 70 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f  <p>causes the fo
4300: 6c 6c 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75  llowing to be au
4310: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63  tomatically exec
4320: 75 74 65 64 3a 3c 2f 70 3e 0a 7d 0a 45 78 61 6d  uted:</p>.}.Exam
4330: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64  ple {.UPDATE ord
4340: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
4350: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
4360: 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61  HERE customer_na
4370: 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73  me = 'Jack Jones
4380: 27 3b 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  ';.}..puts {.<p>
4390: 4e 6f 74 65 20 74 68 61 74 20 63 75 72 72 65 6e  Note that curren
43a0: 74 6c 79 2c 20 74 72 69 67 67 65 72 73 20 6d 61  tly, triggers ma
43b0: 79 20 62 65 68 61 76 65 20 6f 64 64 6c 79 20 77  y behave oddly w
43c0: 68 65 6e 20 63 72 65 61 74 65 64 20 6f 6e 20 74  hen created on t
43d0: 61 62 6c 65 73 0a 20 20 77 69 74 68 20 49 4e 54  ables.  with INT
43e0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
43f0: 20 66 69 65 6c 64 73 2e 20 49 66 20 61 20 42 45   fields. If a BE
4400: 46 4f 52 45 20 74 72 69 67 67 65 72 20 70 72 6f  FORE trigger pro
4410: 67 72 61 6d 20 6d 6f 64 69 66 69 65 73 20 74 68  gram modifies th
4420: 65 20 0a 20 20 49 4e 54 45 47 45 52 20 50 52 49  e .  INTEGER PRI
4430: 4d 41 52 59 20 4b 45 59 20 66 69 65 6c 64 20 6f  MARY KEY field o
4440: 66 20 61 20 72 6f 77 20 74 68 61 74 20 77 69 6c  f a row that wil
4450: 6c 20 62 65 20 73 75 62 73 65 71 75 65 6e 74 6c  l be subsequentl
4460: 79 20 75 70 64 61 74 65 64 20 62 79 20 74 68 65  y updated by the
4470: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  .  statement tha
4480: 74 20 63 61 75 73 65 73 20 74 68 65 20 74 72 69  t causes the tri
4490: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
44a0: 65 6e 20 74 68 65 20 75 70 64 61 74 65 20 6d 61  en the update ma
44b0: 79 20 6e 6f 74 20 6f 63 63 75 72 2e 20 0a 20 20  y not occur. .  
44c0: 54 68 65 20 77 6f 72 6b 61 72 6f 75 6e 64 20 69  The workaround i
44d0: 73 20 74 6f 20 64 65 63 6c 61 72 65 20 74 68 65  s to declare the
44e0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 50 52   table with a PR
44f0: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e  IMARY KEY column
4500: 20 69 6e 73 74 65 61 64 0a 20 20 6f 66 20 61 6e   instead.  of an
4510: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
4520: 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e   KEY column.</p>
4530: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 41 20  .}..puts {.<p>A 
4540: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
4550: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
4560: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
4570: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
4580: 6d 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  m, with the foll
4590: 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e  owing syntax</p>
45a0: 20 0a 7d 0a 53 79 6e 74 61 78 20 7b 72 61 69 73   .}.Syntax {rais
45b0: 65 2d 66 75 6e 63 74 69 6f 6e 7d 20 7b 0a 52 41  e-function} {.RA
45c0: 49 53 45 20 28 20 41 42 4f 52 54 2c 20 3c 65 72  ISE ( ABORT, <er
45d0: 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20 29 20 7c  ror-message> ) |
45e0: 20 0a 52 41 49 53 45 20 28 20 46 41 49 4c 2c 20   .RAISE ( FAIL, 
45f0: 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20  <error-message> 
4600: 29 20 7c 20 0a 52 41 49 53 45 20 28 20 52 4f 4c  ) | .RAISE ( ROL
4610: 4c 42 41 43 4b 2c 20 3c 65 72 72 6f 72 2d 6d 65  LBACK, <error-me
4620: 73 73 61 67 65 3e 20 29 20 7c 20 0a 52 41 49 53  ssage> ) | .RAIS
4630: 45 20 28 20 49 47 4e 4f 52 45 20 29 0a 7d 0a 70  E ( IGNORE ).}.p
4640: 75 74 73 20 7b 0a 3c 70 3e 57 68 65 6e 20 6f 6e  uts {.<p>When on
4650: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 74  e of the first t
4660: 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61  hree forms is ca
4670: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67  lled during trig
4680: 67 65 72 2d 70 72 6f 67 72 61 6d 20 65 78 65 63  ger-program exec
4690: 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69  ution, the speci
46a0: 66 69 65 64 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  fied ON CONFLICT
46b0: 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70   processing is p
46c0: 65 72 66 6f 72 6d 65 64 20 28 65 69 74 68 65 72  erformed (either
46d0: 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f 72 20   ABORT, FAIL or 
46e0: 0a 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20  . ROLLBACK) and 
46f0: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
4700: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 20 41 6e  y terminates. An
4710: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
4720: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
4730: 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
4740: 74 68 65 20 75 73 65 72 2c 20 61 6c 6f 6e 67 20  the user, along 
4750: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
4760: 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
4770: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 52  .</p>..<p>When R
4780: 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20  AISE(IGNORE) is 
4790: 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61  called, the rema
47a0: 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72  inder of the cur
47b0: 72 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f  rent trigger pro
47c0: 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d  gram,.the statem
47d0: 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20  ent that caused 
47e0: 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
47f0: 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61  ram to execute a
4800: 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  nd any subsequen
4810: 74 0a 20 20 20 20 74 72 69 67 67 65 72 20 70 72  t.    trigger pr
4820: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c  ograms that woul
4830: 64 20 6f 66 20 62 65 65 6e 20 65 78 65 63 75 74  d of been execut
4840: 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e 65 64  ed are abandoned
4850: 2e 20 4e 6f 20 64 61 74 61 62 61 73 65 0a 20 20  . No database.  
4860: 20 20 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f    changes are ro
4870: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 49 66 20 74  lled back.  If t
4880: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
4890: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
48a0: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 20 20 20  gger program.   
48b0: 20 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69   to execute is i
48c0: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
48d0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
48e0: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
48f0: 65 72 20 70 72 6f 67 72 61 6d 0a 20 20 20 20 72  er program.    r
4900: 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e  esumes execution
4910: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
4920: 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74  g of the next st
4930: 65 70 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74  ep..</p>.}..Sect
4940: 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45 57  ion {CREATE VIEW
4950: 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 0a 0a  } {createview}..
4960: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d  Syntax {sql-comm
4970: 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20 56 49  and} {.CREATE VI
4980: 45 57 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 20 41  EW <view-name> A
4990: 53 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d  S <select-statem
49a0: 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c  ent>.}..puts {.<
49b0: 70 3e 54 68 65 20 43 52 45 41 54 45 20 56 49 45  p>The CREATE VIE
49c0: 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e  W command assign
49d0: 73 20 61 20 6e 61 6d 65 20 74 6f 20 61 20 70 72  s a name to a pr
49e0: 65 2d 70 61 63 6b 61 67 65 64 20 53 45 4c 45 43  e-packaged SELEC
49f0: 54 0a 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 6e  T.statement.  On
4a00: 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20 63  ce the view is c
4a10: 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20 62  reated, it can b
4a20: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46 52  e used in the FR
4a30: 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e 6f  OM clause.of ano
4a40: 74 68 65 72 20 53 45 4c 45 43 54 20 69 6e 20 70  ther SELECT in p
4a50: 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
4a60: 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 59  name..</p>..<p>Y
4a70: 6f 75 20 63 61 6e 6e 6f 74 20 43 4f 50 59 2c 20  ou cannot COPY, 
4a80: 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
4a90: 20 61 20 76 69 65 77 2e 20 20 56 69 65 77 73 20   a view.  Views 
4aa0: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f  are read-only.</
4ab0: 70 3e 0a 7d 0a 0a 53 65 63 74 69 6f 6e 20 44 45  p>.}..Section DE
4ac0: 4c 45 54 45 20 64 65 6c 65 74 65 0a 0a 53 79 6e  LETE delete..Syn
4ad0: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
4ae0: 6e 74 7d 20 7b 0a 44 45 4c 45 54 45 20 46 52 4f  nt} {.DELETE FRO
4af0: 4d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b  M <table-name> [
4b00: 57 48 45 52 45 20 3c 65 78 70 72 3e 5d 0a 7d 0a  WHERE <expr>].}.
4b10: 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44  .puts {.<p>The D
4b20: 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73  ELETE command is
4b30: 20 75 73 65 64 20 74 6f 20 72 65 6d 6f 76 65 20   used to remove 
4b40: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 61 20 74  records from a t
4b50: 61 62 6c 65 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e  able..The comman
4b60: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
4b70: 65 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20  e "DELETE FROM" 
4b80: 6b 65 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65  keywords followe
4b90: 64 20 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66  d by.the name of
4ba0: 20 74 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20   the table from 
4bb0: 77 68 69 63 68 20 72 65 63 6f 72 64 73 20 61 72  which records ar
4bc0: 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e  e to be removed.
4bd0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68 6f 75  .</p>..<p>Withou
4be0: 74 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  t a WHERE clause
4bf0: 2c 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  , all rows of th
4c00: 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f  e table are remo
4c10: 76 65 64 2e 0a 49 66 20 61 20 57 48 45 52 45 20  ved..If a WHERE 
4c20: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
4c30: 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  ed, then only th
4c40: 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20 6d 61  ose rows that ma
4c50: 74 63 68 0a 74 68 65 20 65 78 70 72 65 73 73 69  tch.the expressi
4c60: 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c  on are removed.<
4c70: 2f 70 3e 0a 7d 0a 0a 0a 53 65 63 74 69 6f 6e 20  /p>.}...Section 
4c80: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f  {DROP INDEX} dro
4c90: 70 69 6e 64 65 78 0a 0a 53 79 6e 74 61 78 20 7b  pindex..Syntax {
4ca0: 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44  sql-command} {.D
4cb0: 52 4f 50 20 49 4e 44 45 58 20 3c 69 6e 64 65 78  ROP INDEX <index
4cc0: 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73 20 7b  -name>.}..puts {
4cd0: 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 49 4e 44  .<p>The DROP IND
4ce0: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  EX statement con
4cf0: 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79  sists of the key
4d00: 77 6f 72 64 73 20 22 44 52 4f 50 20 49 4e 44 45  words "DROP INDE
4d10: 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74  X" followed.by t
4d20: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69  he name of the i
4d30: 6e 64 65 78 2e 20 20 54 68 65 20 69 6e 64 65 78  ndex.  The index
4d40: 20 6e 61 6d 65 64 20 69 73 20 63 6f 6d 70 6c 65   named is comple
4d50: 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f  tely removed fro
4d60: 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65  m.the disk.  The
4d70: 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63   only way to rec
4d80: 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69  over the index i
4d90: 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65  s to reenter the
4da0: 0a 61 70 70 72 6f 70 72 69 61 74 65 20 43 52 45  .appropriate CRE
4db0: 41 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e  ATE INDEX comman
4dc0: 64 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74 69 6f  d.</p>.}..Sectio
4dd0: 6e 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64  n {DROP TABLE} d
4de0: 72 6f 70 74 61 62 6c 65 0a 0a 53 79 6e 74 61 78  roptable..Syntax
4df0: 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b   {sql-command} {
4e00: 0a 44 52 4f 50 20 54 41 42 4c 45 20 3c 74 61 62  .DROP TABLE <tab
4e10: 6c 65 2d 6e 61 6d 65 3e 0a 7d 0a 0a 70 75 74 73  le-name>.}..puts
4e20: 20 7b 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 54   {.<p>The DROP T
4e30: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 63  ABLE statement c
4e40: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b  onsists of the k
4e50: 65 79 77 6f 72 64 73 20 22 44 52 4f 50 20 54 41  eywords "DROP TA
4e60: 42 4c 45 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79  BLE" followed.by
4e70: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
4e80: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 74 61 62   table.  The tab
4e90: 6c 65 20 6e 61 6d 65 64 20 69 73 20 63 6f 6d 70  le named is comp
4ea0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
4eb0: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
4ec0: 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74  he table can not
4ed0: 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20   be recovered.  
4ee0: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 73 73 6f  All indices asso
4ef0: 63 69 61 74 65 64 20 77 69 74 68 0a 74 68 65 20  ciated with.the 
4f00: 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64  table are also d
4f10: 65 6c 65 74 65 64 2e 3c 2f 70 3e 7d 0a 0a 53 65  eleted.</p>}..Se
4f20: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47  ction {DROP TRIG
4f30: 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
4f40: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61  .Syntax {sql-sta
4f50: 74 65 6d 65 6e 74 7d 20 7b 0a 44 52 4f 50 20 54  tement} {.DROP T
4f60: 52 49 47 47 45 52 20 3c 74 72 69 67 67 65 72 2d  RIGGER <trigger-
4f70: 6e 61 6d 65 3e 0a 7d 0a 70 75 74 73 20 7b 20 0a  name>.}.puts { .
4f80: 20 20 3c 70 3e 55 73 65 64 20 74 6f 20 64 72 6f    <p>Used to dro
4f90: 70 20 61 20 74 72 69 67 67 65 72 20 66 72 6f 6d  p a trigger from
4fa0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
4fb0: 68 65 6d 61 2e 20 4e 6f 74 65 20 74 68 61 74 20  hema. Note that 
4fc0: 74 72 69 67 67 65 72 73 0a 20 20 61 72 65 20 61  triggers.  are a
4fd0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f  utomatically dro
4fe0: 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73  pped when the as
4ff0: 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69  sociated table i
5000: 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 7d  s dropped.</p>.}
5010: 0a 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  ..Section {DROP 
5020: 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 0a 0a  VIEW} dropview..
5030: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d  Syntax {sql-comm
5040: 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 56 49 45 57  and} {.DROP VIEW
5050: 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 0a 7d 0a 0a   <view-name>.}..
5060: 70 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 44 52  puts {.<p>The DR
5070: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
5080: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  t consists of th
5090: 65 20 6b 65 79 77 6f 72 64 73 20 22 44 52 4f 50  e keywords "DROP
50a0: 20 56 49 45 57 22 20 66 6f 6c 6c 6f 77 65 64 0a   VIEW" followed.
50b0: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
50c0: 68 65 20 76 69 65 77 2e 20 20 54 68 65 20 76 69  he view.  The vi
50d0: 65 77 20 6e 61 6d 65 64 20 69 73 20 72 65 6d 6f  ew named is remo
50e0: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ved from the dat
50f0: 61 62 61 73 65 2e 0a 42 75 74 20 6e 6f 20 61 63  abase..But no ac
5100: 74 75 61 6c 20 64 61 74 61 20 69 73 20 6d 6f 64  tual data is mod
5110: 69 66 69 65 64 2e 3c 2f 70 3e 7d 0a 0a 53 65 63  ified.</p>}..Sec
5120: 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78 70  tion EXPLAIN exp
5130: 6c 61 69 6e 0a 0a 53 79 6e 74 61 78 20 7b 73 71  lain..Syntax {sq
5140: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 45  l-statement} {.E
5150: 58 50 4c 41 49 4e 20 3c 73 71 6c 2d 73 74 61 74  XPLAIN <sql-stat
5160: 65 6d 65 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b  ement>.}..puts {
5170: 0a 3c 70 3e 54 68 65 20 45 58 50 4c 41 49 4e 20  .<p>The EXPLAIN 
5180: 63 6f 6d 6d 61 6e 64 20 6d 6f 64 69 66 69 65 72  command modifier
5190: 20 69 73 20 61 20 6e 6f 6e 2d 73 74 61 6e 64 61   is a non-standa
51a0: 72 64 20 65 78 74 65 6e 73 69 6f 6e 2e 20 20 54  rd extension.  T
51b0: 68 65 0a 69 64 65 61 20 63 6f 6d 65 73 20 66 72  he.idea comes fr
51c0: 6f 6d 20 61 20 73 69 6d 69 6c 61 72 20 63 6f 6d  om a similar com
51d0: 6d 61 6e 64 20 66 6f 75 6e 64 20 69 6e 20 50 6f  mand found in Po
51e0: 73 74 67 72 65 53 51 4c 2c 20 62 75 74 20 74 68  stgreSQL, but th
51f0: 65 20 6f 70 65 72 61 74 69 6f 6e 0a 69 73 20 63  e operation.is c
5200: 6f 6d 70 6c 65 74 65 6c 79 20 64 69 66 66 65 72  ompletely differ
5210: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  ent.</p>..<p>If 
5220: 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
5230: 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 66 6f  ord appears befo
5240: 72 65 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c  re any other SQL
5250: 69 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  ite SQL command.
5260: 74 68 65 6e 20 69 6e 73 74 65 61 64 20 6f 66 20  then instead of 
5270: 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 69  actually executi
5280: 6e 67 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2c 20  ng the command, 
5290: 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
52a0: 72 79 20 77 69 6c 6c 0a 72 65 70 6f 72 74 20 62  ry will.report b
52b0: 61 63 6b 20 74 68 65 20 73 65 71 75 65 6e 63 65  ack the sequence
52c0: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
52d0: 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
52e0: 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 0a 75   it would have.u
52f0: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74  sed to execute t
5300: 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20 74  he command had t
5310: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
5320: 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73  rd not been pres
5330: 65 6e 74 2e 0a 46 6f 72 20 61 64 64 69 74 69 6f  ent..For additio
5340: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  nal information 
5350: 61 62 6f 75 74 20 76 69 72 74 75 61 6c 20 6d 61  about virtual ma
5360: 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f  chine instructio
5370: 6e 73 20 73 65 65 0a 74 68 65 20 3c 61 20 68 72  ns see.the <a hr
5380: 65 66 3d 22 61 72 63 68 2e 68 74 6d 6c 22 3e 61  ef="arch.html">a
5390: 72 63 68 69 74 65 63 74 75 72 65 20 64 65 73 63  rchitecture desc
53a0: 72 69 70 74 69 6f 6e 3c 2f 61 3e 20 6f 72 20 74  ription</a> or t
53b0: 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  he documentation
53c0: 0a 6f 6e 20 3c 61 20 68 72 65 66 3d 22 6f 70 63  .on <a href="opc
53d0: 6f 64 65 2e 68 74 6d 6c 22 3e 61 76 61 69 6c 61  ode.html">availa
53e0: 62 6c 65 20 6f 70 63 6f 64 65 73 3c 2f 61 3e 20  ble opcodes</a> 
53f0: 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
5400: 6d 61 63 68 69 6e 65 2e 3c 2f 70 3e 0a 7d 0a 0a  machine.</p>.}..
5410: 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69  Section expressi
5420: 6f 6e 20 65 78 70 72 0a 0a 53 79 6e 74 61 78 20  on expr..Syntax 
5430: 7b 65 78 70 72 7d 20 7b 0a 3c 65 78 70 72 3e 20  {expr} {.<expr> 
5440: 3c 62 69 6e 61 72 79 2d 6f 70 3e 20 3c 65 78 70  <binary-op> <exp
5450: 72 3e 20 7c 0a 3c 65 78 70 72 3e 20 3c 6c 69 6b  r> |.<expr> <lik
5460: 65 2d 6f 70 3e 20 3c 65 78 70 72 3e 20 7c 0a 3c  e-op> <expr> |.<
5470: 75 6e 61 72 79 2d 6f 70 3e 20 3c 65 78 70 72 3e  unary-op> <expr>
5480: 20 7c 0a 28 20 3c 65 78 70 72 3e 20 29 20 7c 0a   |.( <expr> ) |.
5490: 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e 20 7c 0a  <column-name> |.
54a0: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 2e 20 3c  <table-name> . <
54b0: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3e 20 7c 0a 3c  column-name> |.<
54c0: 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 3e 20 7c  literal-value> |
54d0: 0a 3c 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 3e  .<function-name>
54e0: 20 28 20 3c 65 78 70 72 2d 6c 69 73 74 3e 20 7c   ( <expr-list> |
54f0: 20 53 54 41 52 20 29 20 7c 0a 3c 65 78 70 72 3e   STAR ) |.<expr>
5500: 20 49 53 4e 55 4c 4c 20 7c 0a 3c 65 78 70 72 3e   ISNULL |.<expr>
5510: 20 4e 4f 54 4e 55 4c 4c 20 7c 0a 3c 65 78 70 72   NOTNULL |.<expr
5520: 3e 20 5b 4e 4f 54 5d 20 42 45 54 57 45 45 4e 20  > [NOT] BETWEEN 
5530: 3c 65 78 70 72 3e 20 41 4e 44 20 3c 65 78 70 72  <expr> AND <expr
5540: 3e 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d  > |.<expr> [NOT]
5550: 20 49 4e 20 28 20 3c 76 61 6c 75 65 2d 6c 69 73   IN ( <value-lis
5560: 74 3e 20 29 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e  t> ) |.<expr> [N
5570: 4f 54 5d 20 49 4e 20 28 20 3c 73 65 6c 65 63 74  OT] IN ( <select
5580: 2d 73 74 61 74 65 6d 65 6e 74 3e 20 29 20 7c 0a  -statement> ) |.
5590: 28 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d  ( <select-statem
55a0: 65 6e 74 3e 20 29 20 7c 0a 43 41 53 45 20 5b 3c  ent> ) |.CASE [<
55b0: 65 78 70 72 3e 5d 20 28 20 57 48 45 4e 20 3c 65  expr>] ( WHEN <e
55c0: 78 70 72 3e 20 54 48 45 4e 20 3c 65 78 70 72 3e  xpr> THEN <expr>
55d0: 20 29 2b 20 5b 45 4c 53 45 20 3c 65 78 70 72 3e   )+ [ELSE <expr>
55e0: 5d 20 45 4e 44 0a 7d 20 7b 6c 69 6b 65 2d 6f 70  ] END.} {like-op
55f0: 7d 20 7b 0a 4c 49 4b 45 20 7c 20 47 4c 4f 42 20  } {.LIKE | GLOB 
5600: 7c 20 4e 4f 54 20 4c 49 4b 45 20 7c 20 4e 4f 54  | NOT LIKE | NOT
5610: 20 47 4c 4f 42 0a 7d 0a 0a 70 75 74 73 20 7b 0a   GLOB.}..puts {.
5620: 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e 20  <p>This section 
5630: 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  is different fro
5640: 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20 4d  m the others.  M
5650: 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69 6f  ost other sectio
5660: 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d  ns of.this docum
5670: 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74 20  ent talks about 
5680: 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51 4c  a particular SQL
5690: 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20   command.  This 
56a0: 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74  section does.not
56b0: 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73 74   talk about a st
56c0: 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64  andalone command
56d0: 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70 72   but about "expr
56e0: 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20 61  essions" which a
56f0: 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74  re .subcomponent
5700: 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63   of most other c
5710: 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 70  ommands.</p>..<p
5720: 3e 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  >SQLite understa
5730: 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
5740: 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
5750: 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
5760: 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
5770: 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
5780: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
5790: 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
57a0: 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
57b0: 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
57c0: 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
57d0: 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
57e0: 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
57f0: 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
5800: 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
5810: 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
5820: 20 3c 2f 62 69 67 3e 49 4e 0a 41 4e 44 20 20 20   </big>IN.AND   
5830: 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  .OR</font>.</pre
5840: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
5850: 3c 70 3e 53 75 70 70 6f 72 74 65 64 20 75 6e 61  <p>Supported una
5860: 72 79 20 6f 70 65 72 61 74 65 72 73 20 61 72 65  ry operaters are
5870: 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c   these:</p>..<bl
5880: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c  ockquote><pre>.<
5890: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32  font color="#2c2
58a0: 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20 20 20 2b  cf0"><big>-    +
58b0: 20 20 20 20 21 20 20 20 20 7e 3c 2f 62 69 67 3e      !    ~</big>
58c0: 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
58d0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
58e0: 41 6e 79 20 53 51 4c 69 74 65 20 76 61 6c 75 65  Any SQLite value
58f0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 73 20   can be used as 
5900: 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
5910: 73 73 69 6f 6e 2e 20 20 0a 46 6f 72 20 61 72 69  ssion.  .For ari
5920: 74 68 6d 65 74 69 63 20 6f 70 65 72 61 74 69 6f  thmetic operatio
5930: 6e 73 2c 20 69 6e 74 65 67 65 72 73 20 61 72 65  ns, integers are
5940: 20 74 72 65 61 74 65 64 20 61 73 20 69 6e 74 65   treated as inte
5950: 67 65 72 73 2e 0a 53 74 72 69 6e 67 73 20 61 72  gers..Strings ar
5960: 65 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65  e first converte
5970: 64 20 74 6f 20 72 65 61 6c 20 6e 75 6d 62 65 72  d to real number
5980: 73 20 75 73 69 6e 67 20 3c 62 3e 61 74 6f 66 28  s using <b>atof(
5990: 29 3c 2f 62 3e 2e 0a 46 6f 72 20 63 6f 6d 70 61  )</b>..For compa
59a0: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 2c  rison operators,
59b0: 20 6e 75 6d 62 65 72 73 20 63 6f 6d 70 61 72 65   numbers compare
59c0: 20 61 73 20 6e 75 6d 62 65 72 73 20 61 6e 64 20   as numbers and 
59d0: 73 74 72 69 6e 67 73 0a 63 6f 6d 70 61 72 65 20  strings.compare 
59e0: 61 73 20 73 74 72 69 6e 67 73 2e 20 20 46 6f 72  as strings.  For
59f0: 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73   string comparis
5a00: 6f 6e 73 2c 20 63 61 73 65 20 69 73 20 73 69 67  ons, case is sig
5a10: 6e 69 66 69 63 61 6e 74 0a 62 75 74 20 69 73 20  nificant.but is 
5a20: 6f 6e 6c 79 20 75 73 65 64 20 74 6f 20 62 72 65  only used to bre
5a30: 61 6b 20 61 20 74 69 65 2e 0a 4e 6f 74 65 20 74  ak a tie..Note t
5a40: 68 61 74 20 74 68 65 72 65 20 61 72 65 20 74 77  hat there are tw
5a50: 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20  o variations of 
5a60: 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e  the equals and n
5a70: 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74  ot equals.operat
5a80: 6f 72 73 2e 20 20 45 71 75 61 6c 73 20 63 61 6e  ors.  Equals can
5a90: 20 62 65 20 65 69 74 68 65 72 7d 0a 70 75 74 73   be either}.puts
5aa0: 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f   "[Operator =] o
5ab0: 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e  r [Operator ==].
5ac0: 0a 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20  .The non-equals 
5ad0: 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20  operator can be 
5ae0: 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72  either.[Operator
5af0: 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f   !=] or [Operato
5b00: 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 54  r {&lt;&gt;}]..T
5b10: 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d  he [Operator ||]
5b20: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63   operator is \"c
5b30: 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69  oncatenate\" - i
5b40: 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72  t joins together
5b50: 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73  .the two strings
5b60: 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73   of its operands
5b70: 2e 3c 2f 70 3e 22 0a 70 75 74 73 20 7b 0a 0a 3c  .</p>".puts {..<
5b80: 70 3e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  p>The LIKE opera
5b90: 74 6f 72 20 64 6f 65 73 20 61 20 77 69 6c 64 63  tor does a wildc
5ba0: 61 72 64 20 63 6f 6d 70 61 72 69 73 69 6f 6e 2e  ard comparision.
5bb0: 20 20 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f    The operand.to
5bc0: 20 74 68 65 20 72 69 67 68 74 20 63 6f 6e 74 61   the right conta
5bd0: 69 6e 73 20 74 68 65 20 77 69 6c 64 63 61 72 64  ins the wildcard
5be0: 73 2e 7d 0a 70 75 74 73 20 22 41 20 70 65 72 63  s.}.puts "A perc
5bf0: 65 6e 74 20 73 79 6d 62 6f 6c 20 5b 4f 70 65 72  ent symbol [Oper
5c00: 61 74 6f 72 20 25 5d 20 69 6e 20 74 68 65 20 72  ator %] in the r
5c10: 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 6d 61 74  ight operand.mat
5c20: 63 68 65 73 20 61 6e 79 20 73 65 71 75 65 6e 63  ches any sequenc
5c30: 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
5c40: 65 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e 20  e characters on 
5c50: 74 68 65 20 6c 65 66 74 2e 0a 41 6e 20 75 6e 64  the left..An und
5c60: 65 72 73 63 6f 72 65 20 5b 4f 70 65 72 61 74 6f  erscore [Operato
5c70: 72 20 5f 5d 20 6f 6e 20 74 68 65 20 72 69 67 68  r _] on the righ
5c80: 74 0a 6d 61 74 63 68 65 73 20 61 6e 79 20 73 69  t.matches any si
5c90: 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
5ca0: 6e 20 74 68 65 20 6c 65 66 74 2e 22 0a 70 75 74  n the left.".put
5cb0: 73 20 7b 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  s {The LIKE oper
5cc0: 61 74 6f 72 20 69 73 0a 6e 6f 74 20 63 61 73 65  ator is.not case
5cd0: 20 73 65 6e 73 69 74 69 76 65 20 61 6e 64 20 77   sensitive and w
5ce0: 69 6c 6c 20 6d 61 74 63 68 20 75 70 70 65 72 20  ill match upper 
5cf0: 63 61 73 65 20 63 68 61 72 61 63 74 65 72 73 20  case characters 
5d00: 6f 6e 20 6f 6e 65 0a 73 69 64 65 20 61 67 61 69  on one.side agai
5d10: 6e 73 74 20 6c 6f 77 65 72 20 63 61 73 65 20 63  nst lower case c
5d20: 68 61 72 61 63 74 65 72 73 20 6f 6e 20 74 68 65  haracters on the
5d30: 20 6f 74 68 65 72 2e 0a 28 41 20 62 75 67 3a 20   other..(A bug: 
5d40: 53 51 4c 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65  SQLite only unde
5d50: 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f  rstands upper/lo
5d60: 77 65 72 20 63 61 73 65 20 66 6f 72 20 37 2d 62  wer case for 7-b
5d70: 69 74 20 4c 61 74 69 6e 0a 63 68 61 72 61 63 74  it Latin.charact
5d80: 65 72 73 2e 20 20 48 65 6e 63 65 20 74 68 65 20  ers.  Hence the 
5d90: 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LIKE operator is
5da0: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
5db0: 66 6f 72 0a 38 2d 62 69 74 20 69 73 6f 38 38 35  for.8-bit iso885
5dc0: 39 20 63 68 61 72 61 63 74 65 72 73 20 6f 72 20  9 characters or 
5dd0: 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 73  UTF-8 characters
5de0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a  .  For example,.
5df0: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c  the expression <
5e00: 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26  b>'a'&nbsp;LIKE&
5e10: 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 20 69 73 20  nbsp;'A'</b> is 
5e20: 54 52 55 45 20 62 75 74 0a 3c 62 3e 27 26 61 65  TRUE but.<b>'&ae
5e30: 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26  lig;'&nbsp;LIKE&
5e40: 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f  nbsp;'&AElig;'</
5e50: 62 3e 20 69 73 20 46 41 4c 53 45 2e 29 0a 3c 2f  b> is FALSE.).</
5e60: 70 3e 0a 0a 3c 70 3e 54 68 65 20 47 4c 4f 42 20  p>..<p>The GLOB 
5e70: 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
5e80: 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
5e90: 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
5ea0: 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
5eb0: 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
5ec0: 61 72 64 73 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f  ards.  Also, GLO
5ed0: 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74  B is case.sensit
5ee0: 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45  ive, unlike LIKE
5ef0: 2e 20 20 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64  .  Both GLOB and
5f00: 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65   LIKE may be pre
5f10: 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54  ceded by.the NOT
5f20: 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65   keyword to inve
5f30: 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20  rt the sense of 
5f40: 74 68 65 20 74 65 73 74 2e 3c 2f 70 3e 0a 0a 3c  the test.</p>..<
5f50: 70 3e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  p>A column name 
5f60: 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
5f70: 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
5f80: 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41  in the CREATE TA
5f90: 42 4c 45 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72  BLE.statement or
5fa0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
5fb0: 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64  owing special id
5fc0: 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52  entifiers: "<b>R
5fd0: 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f  OWID</b>",."<b>O
5fe0: 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e  ID</b>", or "<b>
5ff0: 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 54 68  _ROWID_</b>"..Th
6000: 65 73 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ese special iden
6010: 74 69 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63  tifiers all desc
6020: 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20  ribe the.unique 
6030: 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 6b  random integer k
6040: 65 79 20 28 74 68 65 20 22 72 6f 77 20 6b 65 79  ey (the "row key
6050: 22 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ") associated wi
6060: 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66  th every .row of
6070: 20 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 54 68   every table..Th
6080: 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
6090: 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
60a0: 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
60b0: 69 66 20 74 68 65 20 43 52 45 41 54 45 20 54 41  if the CREATE TA
60c0: 42 4c 45 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f  BLE.statement do
60d0: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61 20  es not define a 
60e0: 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68  real column with
60f0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20   the same name. 
6100: 20 52 6f 77 20 6b 65 79 73 0a 61 63 74 20 6c 69   Row keys.act li
6110: 6b 65 20 72 65 61 64 2d 6f 6e 6c 79 20 63 6f 6c  ke read-only col
6120: 75 6d 6e 73 2e 20 20 41 20 72 6f 77 20 6b 65 79  umns.  A row key
6130: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79   can be used any
6140: 77 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a  where a regular.
6150: 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73  column can be us
6160: 65 64 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  ed, except that 
6170: 79 6f 75 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67  you cannot chang
6180: 65 20 74 68 65 20 76 61 6c 75 65 0a 6f 66 20 61  e the value.of a
6190: 20 72 6f 77 20 6b 65 79 20 69 6e 20 61 6e 20 55   row key in an U
61a0: 50 44 41 54 45 20 6f 72 20 49 4e 53 45 52 54 20  PDATE or INSERT 
61b0: 73 74 61 74 65 6d 65 6e 74 2e 0a 22 53 45 4c 45  statement.."SELE
61c0: 43 54 20 2a 20 2e 2e 2e 22 20 64 6f 65 73 20 6e  CT * ..." does n
61d0: 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f  ot return the ro
61e0: 77 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53  w key.</p>..<p>S
61f0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
6200: 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65   can appear in e
6210: 78 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69  xpressions as ei
6220: 74 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68  ther the.right-h
6230: 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74  and operand of t
6240: 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 6f  he IN operator o
6250: 72 20 61 73 20 61 20 73 63 61 6c 61 72 20 71 75  r as a scalar qu
6260: 61 6e 74 69 74 79 2e 0a 49 6e 20 62 6f 74 68 20  antity..In both 
6270: 63 61 73 65 73 2c 20 74 68 65 20 53 45 4c 45 43  cases, the SELEC
6280: 54 20 73 68 6f 75 6c 64 20 68 61 76 65 20 6f 6e  T should have on
6290: 6c 79 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  ly a single colu
62a0: 6d 6e 20 69 6e 20 69 74 73 0a 72 65 73 75 6c 74  mn in its.result
62b0: 2e 20 20 43 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  .  Compound SELE
62c0: 43 54 73 20 28 63 6f 6e 6e 65 63 74 65 64 20 77  CTs (connected w
62d0: 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b  ith keywords lik
62e0: 65 20 55 4e 49 4f 4e 20 6f 72 0a 45 58 43 45 50  e UNION or.EXCEP
62f0: 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 20  T) are allowed. 
6300: 20 41 6e 79 20 4f 52 44 45 52 20 42 59 20 63 6c   Any ORDER BY cl
6310: 61 75 73 65 20 6f 6e 20 74 68 65 20 73 65 6c 65  ause on the sele
6320: 63 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 41  ct is ignored..A
6330: 20 53 45 4c 45 43 54 20 69 6e 20 61 6e 20 65 78   SELECT in an ex
6340: 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
6350: 75 61 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72  uated once befor
6360: 65 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63  e any other proc
6370: 65 73 73 69 6e 67 0a 69 73 20 70 65 72 66 6f 72  essing.is perfor
6380: 6d 65 64 2c 20 73 6f 20 6e 6f 6e 65 20 6f 66 20  med, so none of 
6390: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
63a0: 77 69 74 68 69 6e 20 74 68 65 20 73 65 6c 65 63  within the selec
63b0: 74 20 69 74 73 65 6c 66 20 63 61 6e 0a 72 65 66  t itself can.ref
63c0: 65 72 20 74 6f 20 71 75 61 6e 74 69 74 69 65 73  er to quantities
63d0: 20 69 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 69   in the containi
63e0: 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 2e 3c 2f  ng expression.</
63f0: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45  p>..<p>When a SE
6400: 4c 45 43 54 20 69 73 20 74 68 65 20 72 69 67 68  LECT is the righ
6410: 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65  t operand of the
6420: 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68   IN operator, th
6430: 65 20 49 4e 0a 6f 70 65 72 61 74 6f 72 20 72 65  e IN.operator re
6440: 74 75 72 6e 73 20 54 52 55 45 20 69 66 20 74 68  turns TRUE if th
6450: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
6460: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20  left operand is 
6470: 61 6e 79 20 6f 66 0a 74 68 65 20 76 61 6c 75 65  any of.the value
6480: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
6490: 68 65 20 73 65 6c 65 63 74 2e 20 20 54 68 65 20  he select.  The 
64a0: 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d 61 79 20  IN operator may 
64b0: 62 65 20 70 72 65 63 65 64 65 64 0a 62 79 20 74  be preceded.by t
64c0: 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74  he NOT keyword t
64d0: 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e  o invert the sen
64e0: 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 3c  se of the test.<
64f0: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53  /p>..<p>When a S
6500: 45 4c 45 43 54 20 61 70 70 65 61 72 73 20 77 69  ELECT appears wi
6510: 74 68 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  thin an expressi
6520: 6f 6e 20 62 75 74 20 69 73 20 6e 6f 74 20 74 68  on but is not th
6530: 65 20 72 69 67 68 74 0a 6f 70 65 72 61 6e 64 20  e right.operand 
6540: 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f  of an IN operato
6550: 72 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  r, then the firs
6560: 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73  t row of the res
6570: 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43  ult of the.SELEC
6580: 54 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61  T becomes the va
6590: 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  lue used in the 
65a0: 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 49 66 20  expression.  If 
65b0: 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64  the SELECT yield
65c0: 73 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s.more than one 
65d0: 72 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20  result row, all 
65e0: 72 6f 77 73 20 61 66 74 65 72 20 74 68 65 20 66  rows after the f
65f0: 69 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64  irst are ignored
6600: 2e 20 20 49 66 0a 74 68 65 20 53 45 4c 45 43 54  .  If.the SELECT
6610: 20 79 65 69 6c 64 73 20 6e 6f 20 72 6f 77 73 2c   yeilds no rows,
6620: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
6630: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73  of the SELECT is
6640: 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42   NULL.</p>..<p>B
6650: 6f 74 68 20 73 69 6d 70 6c 65 20 61 6e 64 20 61  oth simple and a
6660: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
6670: 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
6680: 2e 20 20 41 20 73 69 6d 70 6c 65 0a 66 75 6e 63  .  A simple.func
6690: 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
66a0: 20 69 6e 20 61 6e 79 20 65 78 70 72 65 73 73 69   in any expressi
66b0: 6f 6e 2e 20 20 53 69 6d 70 6c 65 20 66 75 6e 63  on.  Simple func
66c0: 74 69 6f 6e 73 20 72 65 74 75 72 6e 0a 61 20 72  tions return.a r
66d0: 65 73 75 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c  esult immediatel
66e0: 79 20 62 61 73 65 64 20 6f 6e 20 74 68 65 69 72  y based on their
66f0: 20 69 6e 70 75 74 73 2e 20 20 41 67 67 72 65 67   inputs.  Aggreg
6700: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61  ate functions.ma
6710: 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69  y only be used i
6720: 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
6730: 6d 65 6e 74 2e 20 20 41 67 67 72 65 67 61 74 65  ment.  Aggregate
6740: 20 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75   functions compu
6750: 74 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20  te.their result 
6760: 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20  across all rows 
6770: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
6780: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66  t.</p>..<p>The f
6790: 6f 6c 6c 6f 77 69 6e 67 20 73 69 6d 70 6c 65 20  ollowing simple 
67a0: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 63 75  functions are cu
67b0: 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65  rrently supporte
67c0: 64 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  d:</p>..<table b
67d0: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
67e0: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64  ing=10>.<tr>.<td
67f0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
6800: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
6810: 68 3d 31 32 30 3e 61 62 73 28 3c 69 3e 58 3c 2f  h=120>abs(<i>X</
6820: 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  i>)</td>.<td val
6830: 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e  ign="top">Return
6840: 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
6850: 6c 75 65 20 6f 66 20 61 72 67 75 6d 65 6e 74 20  lue of argument 
6860: 3c 69 3e 58 3c 2f 69 3e 2e 3c 2f 74 64 3e 0a 3c  <i>X</i>.</td>.<
6870: 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76  /tr>..<tr>.<td v
6880: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
6890: 6e 3d 22 72 69 67 68 74 22 3e 63 6f 61 6c 65 73  n="right">coales
68a0: 63 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59  ce(<i>X</i>,<i>Y
68b0: 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e 0a 3c  </i>,...)</td>.<
68c0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
68d0: 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66  Return a copy of
68e0: 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
68f0: 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49  ULL argument.  I
6900: 66 0a 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20  f.all arguments 
6910: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55  are NULL then NU
6920: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 2e 3c  LL is returned.<
6930: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
6940: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6950: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
6960: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
6970: 64 28 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  d()</td>.<td val
6980: 69 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e  ign="top">Return
6990: 20 74 68 65 20 52 4f 57 49 44 20 6f 66 20 74 68   the ROWID of th
69a0: 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72  e last row inser
69b0: 74 20 66 72 6f 6d 20 74 68 69 73 0a 63 6f 6e 6e  t from this.conn
69c0: 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
69d0: 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 69 73  tabase.  This is
69e0: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
69f0: 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65  that would be re
6a00: 74 75 72 6e 65 64 0a 66 72 6f 6d 20 74 68 65 20  turned.from the 
6a10: 3c 62 3e 73 71 6c 69 74 65 5f 6c 61 73 74 5f 69  <b>sqlite_last_i
6a20: 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 3c 2f 62  nsert_rowid()</b
6a30: 3e 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 2e 3c  > API function.<
6a40: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  /td>.</tr>..<tr>
6a50: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6a60: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
6a70: 6c 65 6e 67 74 68 28 3c 69 3e 58 3c 2f 69 3e 29  length(<i>X</i>)
6a80: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
6a90: 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68  ="top">Return th
6aa0: 65 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  e string length 
6ab0: 6f 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 6e 20 63  of <i>X</i> in c
6ac0: 68 61 72 61 63 74 65 72 73 2e 0a 49 66 20 53 51  haracters..If SQ
6ad0: 4c 69 74 65 20 69 73 20 63 6f 6e 66 69 67 75 72  Lite is configur
6ae0: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 55 54  ed to support UT
6af0: 46 2d 38 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  F-8, then the nu
6b00: 6d 62 65 72 20 6f 66 20 55 54 46 2d 38 0a 63 68  mber of UTF-8.ch
6b10: 61 72 61 63 74 65 72 73 20 69 73 20 72 65 74 75  aracters is retu
6b20: 72 6e 65 64 2c 20 6e 6f 74 20 74 68 65 20 6e 75  rned, not the nu
6b30: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 2e 3c 2f  mber of bytes.</
6b40: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
6b50: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
6b60: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6c   align="right">l
6b70: 6f 77 65 72 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f  ower(<i>X</i>)</
6b80: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
6b90: 74 6f 70 22 3e 52 65 74 75 72 6e 20 61 20 63 6f  top">Return a co
6ba0: 70 79 20 6f 66 20 73 74 72 69 6e 67 20 3c 69 3e  py of string <i>
6bb0: 58 3c 2f 69 3e 20 77 69 6c 6c 20 61 6c 6c 20 63  X</i> will all c
6bc0: 68 61 72 61 63 74 65 72 73 0a 63 6f 6e 76 65 72  haracters.conver
6bd0: 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73  ted to lower cas
6be0: 65 2e 20 20 54 68 65 20 43 20 6c 69 62 72 61 72  e.  The C librar
6bf0: 79 20 3c 62 3e 74 6f 6c 6f 77 65 72 28 29 3c 2f  y <b>tolower()</
6c00: 62 3e 20 72 6f 75 74 69 6e 65 20 69 73 20 75 73  b> routine is us
6c10: 65 64 0a 66 6f 72 20 74 68 65 20 63 6f 6e 76 65  ed.for the conve
6c20: 72 73 69 6f 6e 2c 20 77 68 69 63 68 20 6d 65 61  rsion, which mea
6c30: 6e 73 20 74 68 61 74 20 74 68 69 73 20 66 75 6e  ns that this fun
6c40: 63 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 0a  ction might not.
6c50: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
6c60: 6e 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  n UTF-8 characte
6c70: 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a  rs.</td>.</tr>..
6c80: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
6c90: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
6ca0: 68 74 22 3e 6d 61 78 28 3c 69 3e 58 3c 2f 69 3e  ht">max(<i>X</i>
6cb0: 2c 3c 69 3e 59 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f  ,<i>Y</i>,...)</
6cc0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
6cd0: 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65 20  top">Return the 
6ce0: 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68  argument with th
6cf0: 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2e  e maximum value.
6d00: 20 20 41 72 67 75 6d 65 6e 74 73 0a 6d 61 79 20    Arguments.may 
6d10: 62 65 20 73 74 72 69 6e 67 73 20 69 6e 20 61 64  be strings in ad
6d20: 64 69 74 69 6f 6e 20 74 6f 20 6e 75 6d 62 65 72  dition to number
6d30: 73 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20  s.  The maximum 
6d40: 76 61 6c 75 65 20 69 73 20 64 65 74 65 72 6d 69  value is determi
6d50: 6e 65 64 0a 62 79 20 74 68 65 20 75 73 75 61 6c  ned.by the usual
6d60: 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 4e 6f   sort order.  No
6d70: 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29  te that <b>max()
6d80: 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
6d90: 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 69   function when.i
6da0: 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20  t has 2 or more 
6db0: 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 63 6f  arguments but co
6dc0: 6e 76 65 72 74 73 20 74 6f 20 61 6e 20 61 67 67  nverts to an agg
6dd0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
6de0: 69 66 20 67 69 76 65 6e 0a 6f 6e 6c 79 20 61 20  if given.only a 
6df0: 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e  single argument.
6e00: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72  </td>.</tr>..<tr
6e10: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
6e20: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
6e30: 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69  >min(<i>X</i>,<i
6e40: 3e 59 3c 2f 69 3e 2c 2e 2e 2e 29 3c 2f 74 64 3e  >Y</i>,...)</td>
6e50: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6e60: 22 3e 52 65 74 75 72 6e 20 74 68 65 20 61 72 67  ">Return the arg
6e70: 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d  ument with the m
6e80: 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20 41  inimum value.  A
6e90: 72 67 75 6d 65 6e 74 73 0a 6d 61 79 20 62 65 20  rguments.may be 
6ea0: 73 74 72 69 6e 67 73 20 69 6e 20 61 64 64 69 74  strings in addit
6eb0: 69 6f 6e 20 74 6f 20 6e 75 6d 62 65 72 73 2e 20  ion to numbers. 
6ec0: 20 54 68 65 20 6d 6d 69 6e 69 6d 75 6d 20 76 61   The mminimum va
6ed0: 6c 75 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  lue is determine
6ee0: 64 0a 62 79 20 74 68 65 20 75 73 75 61 6c 20 73  d.by the usual s
6ef0: 6f 72 74 20 6f 72 64 65 72 2e 20 20 4e 6f 74 65  ort order.  Note
6f00: 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c 2f   that <b>min()</
6f10: 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  b> is a simple f
6f20: 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 69 74 20  unction when.it 
6f30: 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72  has 2 or more ar
6f40: 67 75 6d 65 6e 74 73 20 62 75 74 20 63 6f 6e 76  guments but conv
6f50: 65 72 74 73 20 74 6f 20 61 6e 20 61 67 67 72 65  erts to an aggre
6f60: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 66  gate function if
6f70: 20 67 69 76 65 6e 0a 6f 6e 6c 79 20 61 20 73 69   given.only a si
6f80: 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 3c 2f  ngle argument.</
6f90: 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a  td>.</tr>..<tr>.
6fa0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
6fb0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 72   align="right">r
6fc0: 61 6e 64 6f 6d 28 2a 29 3c 2f 74 64 3e 0a 3c 74  andom(*)</td>.<t
6fd0: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52  d valign="top">R
6fe0: 65 74 75 72 6e 20 61 20 72 61 6e 64 6f 6d 20 69  eturn a random i
6ff0: 6e 74 65 67 65 72 20 62 65 74 77 65 65 6e 20 2d  nteger between -
7000: 32 31 34 37 34 38 33 36 34 38 20 61 6e 64 0a 2b  2147483648 and.+
7010: 32 31 34 37 34 38 33 36 34 37 2e 3c 2f 74 64 3e  2147483647.</td>
7020: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64  .</tr>..<tr>.<td
7030: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
7040: 69 67 6e 3d 22 72 69 67 68 74 22 3e 72 6f 75 6e  ign="right">roun
7050: 64 28 3c 69 3e 58 3c 2f 69 3e 29 3c 62 72 3e 72  d(<i>X</i>)<br>r
7060: 6f 75 6e 64 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69  ound(<i>X</i>,<i
7070: 3e 59 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c 74 64  >Y</i>)</td>.<td
7080: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 52 6f   valign="top">Ro
7090: 75 6e 64 20 6f 66 66 20 74 68 65 20 6e 75 6d 62  und off the numb
70a0: 65 72 20 3c 69 3e 58 3c 2f 69 3e 20 74 6f 20 3c  er <i>X</i> to <
70b0: 69 3e 59 3c 2f 69 3e 20 64 69 67 69 74 73 20 74  i>Y</i> digits t
70c0: 6f 20 74 68 65 0a 72 69 67 68 74 20 6f 66 20 74  o the.right of t
70d0: 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
70e0: 2e 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f  .  If the <i>Y</
70f0: 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  i> argument is o
7100: 6d 69 74 74 65 64 2c 20 30 20 69 73 20 0a 61 73  mitted, 0 is .as
7110: 73 75 6d 65 64 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  sumed.</td>.</tr
7120: 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
7130: 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
7140: 72 69 67 68 74 22 3e 73 75 62 73 74 72 28 3c 69  right">substr(<i
7150: 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 2c  >X</i>,<i>Y</i>,
7160: 3c 69 3e 5a 3c 2f 69 3e 29 3c 2f 74 64 3e 0a 3c  <i>Z</i>)</td>.<
7170: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
7180: 52 65 74 75 72 6e 20 61 20 73 75 62 73 74 72 69  Return a substri
7190: 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69  ng of input stri
71a0: 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 74 68 61 74  ng <i>X</i> that
71b0: 20 62 65 67 69 6e 73 0a 77 69 74 68 20 74 68 65   begins.with the
71c0: 20 3c 69 3e 59 3c 2f 69 3e 2d 74 68 20 63 68 61   <i>Y</i>-th cha
71d0: 72 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68  racter and which
71e0: 20 69 73 20 3c 69 3e 5a 3c 2f 69 3e 20 63 68 61   is <i>Z</i> cha
71f0: 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 54 68  racters long..Th
7200: 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72  e left-most char
7210: 61 63 74 65 72 20 6f 66 20 3c 69 3e 58 3c 2f 69  acter of <i>X</i
7220: 3e 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20 20  > is number 1.  
7230: 49 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6e  If <i>Y</i> is n
7240: 65 67 61 74 69 76 65 0a 74 68 65 20 74 68 65 20  egative.the the 
7250: 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  first character 
7260: 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e 67  of the substring
7270: 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75   is found by cou
7280: 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 72  nting from the.r
7290: 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61 6e  ight rather than
72a0: 20 74 68 65 20 6c 65 66 74 2e 20 20 49 66 20 53   the left.  If S
72b0: 51 4c 69 74 65 20 69 73 20 63 6f 6e 66 69 67 75  QLite is configu
72c0: 72 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 55  red to support U
72d0: 54 46 2d 38 2c 0a 74 68 65 6e 20 63 68 61 72 61  TF-8,.then chara
72e0: 63 74 65 72 73 20 69 6e 64 69 63 65 73 20 72 65  cters indices re
72f0: 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54  fer to actual UT
7300: 46 2d 38 20 63 68 61 72 61 63 74 65 72 73 2c 20  F-8 characters, 
7310: 6e 6f 74 20 62 79 74 65 73 2e 3c 2f 74 64 3e 0a  not bytes.</td>.
7320: 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 0a 3c 74 64 20  </tr>..<tr>.<td 
7330: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
7340: 67 6e 3d 22 72 69 67 68 74 22 3e 75 70 70 65 72  gn="right">upper
7350: 28 3c 69 3e 58 3c 2f 69 3e 29 3c 2f 74 64 3e 0a  (<i>X</i>)</td>.
7360: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
7370: 3e 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f  >Return a copy o
7380: 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 3c  f input string <
7390: 69 3e 58 3c 2f 69 3e 20 63 6f 6e 76 65 72 74 65  i>X</i> converte
73a0: 64 20 74 6f 20 61 6c 6c 0a 75 70 70 65 72 2d 63  d to all.upper-c
73b0: 61 73 65 20 6c 65 74 74 65 72 73 2e 20 20 54 68  ase letters.  Th
73c0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
73d0: 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f   of this functio
73e0: 6e 20 75 73 65 73 20 74 68 65 20 43 20 6c 69 62  n uses the C lib
73f0: 72 61 72 79 0a 72 6f 75 74 69 6e 65 20 3c 62 3e  rary.routine <b>
7400: 74 6f 75 70 70 65 72 28 29 3c 2f 62 3e 20 77 68  toupper()</b> wh
7410: 69 63 68 20 6d 65 61 6e 73 20 69 74 20 6d 61 79  ich means it may
7420: 20 6e 6f 74 20 77 6f 72 6b 20 63 6f 72 72 65 63   not work correc
7430: 74 6c 79 20 6f 6e 20 0a 55 54 46 2d 38 20 73 74  tly on .UTF-8 st
7440: 72 69 6e 67 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  rings.</td>.</tr
7450: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 0a  >.</table>..<p>.
7460: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 67  The following ag
7470: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
7480: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 3a  s are supported:
7490: 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f  .</p>..<table bo
74a0: 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69  rder=0 cellpaddi
74b0: 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20  ng=10>.<tr>.<td 
74c0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
74d0: 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68  gn="right" width
74e0: 3d 31 32 30 3e 61 76 67 28 3c 69 3e 58 3c 2f 69  =120>avg(<i>X</i
74f0: 3e 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  >)</td>.<td vali
7500: 67 6e 3d 22 74 6f 70 22 3e 52 65 74 75 72 6e 20  gn="top">Return 
7510: 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75  the average valu
7520: 65 20 6f 66 20 61 6c 6c 20 3c 69 3e 58 3c 2f 69  e of all <i>X</i
7530: 3e 20 77 69 74 68 69 6e 20 61 20 67 72 6f 75 70  > within a group
7540: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
7550: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
7560: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
7570: 22 3e 63 6f 75 6e 74 28 3c 69 3e 58 3c 2f 69 3e  ">count(<i>X</i>
7580: 29 3c 62 72 3e 63 6f 75 6e 74 28 2a 29 3c 2f 74  )<br>count(*)</t
7590: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
75a0: 6f 70 22 3e 54 68 65 20 66 69 72 73 74 20 66 6f  op">The first fo
75b0: 72 6d 20 72 65 74 75 72 6e 20 61 20 63 6f 75 6e  rm return a coun
75c0: 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
75d0: 6f 66 20 74 69 6d 65 73 0a 74 68 61 74 20 3c 69  of times.that <i
75e0: 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55  >X</i> is not NU
75f0: 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20  LL in a group.  
7600: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
7610: 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e  (with no argumen
7620: 74 29 0a 72 65 74 75 72 6e 73 20 74 68 65 20 74  t).returns the t
7630: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72  otal number of r
7640: 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ows in the group
7650: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
7660: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
7670: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
7680: 22 3e 6d 61 78 28 3c 69 3e 58 3c 2f 69 3e 29 3c  ">max(<i>X</i>)<
7690: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
76a0: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
76b0: 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f   maximum value o
76c0: 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
76d0: 74 68 65 20 67 72 6f 75 70 2e 0a 54 68 65 20 75  the group..The u
76e0: 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20  sual sort order 
76f0: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
7700: 6d 69 6e 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  mine the maximum
7710: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
7720: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
7730: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
7740: 22 3e 6d 69 6e 28 3c 69 3e 58 3c 2f 69 3e 29 3c  ">min(<i>X</i>)<
7750: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
7760: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
7770: 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 6f   minimum value o
7780: 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20  f all values in 
7790: 74 68 65 20 67 72 6f 75 70 2e 0a 54 68 65 20 75  the group..The u
77a0: 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20  sual sort order 
77b0: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
77c0: 6d 69 6e 65 20 74 68 65 20 6d 69 6e 69 6d 75 6d  mine the minimum
77d0: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  .</td>.</tr>..<t
77e0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
77f0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
7800: 22 3e 73 75 6d 28 3c 69 3e 58 3c 2f 69 3e 29 3c  ">sum(<i>X</i>)<
7810: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
7820: 22 74 6f 70 22 3e 52 65 74 75 72 6e 20 74 68 65  "top">Return the
7830: 20 6e 75 6d 65 72 69 63 20 73 75 6d 20 6f 66 20   numeric sum of 
7840: 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  all values in th
7850: 65 20 67 72 6f 75 70 2e 3c 2f 74 64 3e 0a 3c 2f  e group.</td>.</
7860: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 7d 0a 0a  tr>.</table>.}..
7870: 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20 69  Section INSERT i
7880: 6e 73 65 72 74 0a 0a 53 79 6e 74 61 78 20 7b 73  nsert..Syntax {s
7890: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
78a0: 49 4e 53 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66  INSERT [OR <conf
78b0: 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d  lict-algorithm>]
78c0: 20 49 4e 54 4f 20 3c 74 61 62 6c 65 2d 6e 61 6d   INTO <table-nam
78d0: 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  e> [(<column-lis
78e0: 74 3e 29 5d 20 56 41 4c 55 45 53 28 3c 76 61 6c  t>)] VALUES(<val
78f0: 75 65 2d 6c 69 73 74 3e 29 20 7c 0a 49 4e 53 45  ue-list>) |.INSE
7900: 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63 74  RT [OR <conflict
7910: 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49 4e 54  -algorithm>] INT
7920: 4f 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b  O <table-name> [
7930: 28 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 29 5d  (<column-list>)]
7940: 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65 6d 65   <select-stateme
7950: 6e 74 3e 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70  nt>.}..puts {.<p
7960: 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74  >The INSERT stat
7970: 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74  ement comes in t
7980: 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20  wo basic forms. 
7990: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 0a   The first form.
79a0: 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45  (with the "VALUE
79b0: 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61  S" keyword) crea
79c0: 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  tes a single new
79d0: 20 72 6f 77 20 69 6e 20 61 6e 20 65 78 69 73 74   row in an exist
79e0: 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66 20 6e 6f  ing table..If no
79f0: 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20   column-list is 
7a00: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74  specified then t
7a10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
7a20: 75 65 73 20 6d 75 73 74 0a 62 65 20 74 68 65 20  ues must.be the 
7a30: 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
7a40: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
7a50: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
7a60: 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73  a column-list.is
7a70: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
7a80: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
7a90: 61 6c 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68  alues must match
7aa0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73   the number of.s
7ab0: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
7ac0: 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  .  Columns of th
7ad0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20  e table that do 
7ae0: 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
7af0: 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72  e.column list ar
7b00: 65 20 66 69 6c 6c 20 77 69 74 68 20 74 68 65 20  e fill with the 
7b10: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f  default value, o
7b20: 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e  r with NULL if n
7b30: 6f 74 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ot.default value
7b40: 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c   is specified..<
7b50: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 65 63 6f  /p>..<p>The seco
7b60: 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  nd form of the I
7b70: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
7b80: 74 61 6b 65 73 20 69 74 20 64 61 74 61 20 66 72  takes it data fr
7b90: 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74 61 74  om a.SELECT stat
7ba0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 75 6d 62  ement.  The numb
7bb0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
7bc0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
7bd0: 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74 20 65  he.SELECT must e
7be0: 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
7bf0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
7c00: 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ns in the table 
7c10: 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c 69 73  if.no column lis
7c20: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
7c30: 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74 63 68  or it must match
7c40: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
7c50: 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20 69 6e 20 74  olumns.name in t
7c60: 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e 20  he column list. 
7c70: 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20   A new entry is 
7c80: 6d 61 64 65 20 69 6e 20 74 68 65 20 74 61 62 6c  made in the tabl
7c90: 65 0a 66 6f 72 20 65 76 65 72 79 20 72 6f 77 20  e.for every row 
7ca0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 72 65  of the SELECT re
7cb0: 73 75 6c 74 2e 20 20 54 68 65 20 53 45 4c 45 43  sult.  The SELEC
7cc0: 54 20 6d 61 79 20 62 65 20 73 69 6d 70 6c 65 0a  T may be simple.
7cd0: 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 49 66  or compound.  If
7ce0: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
7cf0: 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
7d00: 45 52 20 42 59 20 63 6c 61 75 73 65 2c 0a 74 68  ER BY clause,.th
7d10: 65 20 4f 52 44 45 52 20 42 59 20 69 73 20 69 67  e ORDER BY is ig
7d20: 6e 6f 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  nored.</p>..<p>T
7d30: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
7d40: 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
7d50: 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
7d60: 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
7d70: 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
7d80: 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
7d90: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
7da0: 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
7db0: 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a  is one command..
7dc0: 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
7dd0: 74 69 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22  titled.<a href="
7de0: 23 63 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f  #conflict">ON CO
7df0: 4e 46 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61  NFLICT</a> for a
7e00: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
7e10: 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61  ation..For compa
7e20: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79  tibility with My
7e30: 53 51 4c 2c 20 74 68 65 20 70 61 72 73 65 72 20  SQL, the parser 
7e40: 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f  allows the use o
7e50: 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79  f the.single key
7e60: 77 6f 72 64 20 22 52 45 50 4c 41 43 45 22 20 61  word "REPLACE" a
7e70: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 22  s an alias for "
7e80: 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
7e90: 45 22 2e 0a 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74  E"..</p>.}..Sect
7ea0: 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  ion {ON CONFLICT
7eb0: 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63   clause} conflic
7ec0: 74 0a 0a 53 79 6e 74 61 78 20 7b 63 6f 6e 66 6c  t..Syntax {confl
7ed0: 69 63 74 2d 63 6c 61 75 73 65 7d 20 7b 0a 4f 4e  ict-clause} {.ON
7ee0: 20 43 4f 4e 46 4c 49 43 54 20 3c 63 6f 6e 66 6c   CONFLICT <confl
7ef0: 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 0a 7d  ict-algorithm>.}
7f00: 20 7b 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72   {conflict-algor
7f10: 69 74 68 6d 7d 20 7b 0a 52 4f 4c 4c 42 41 43 4b  ithm} {.ROLLBACK
7f20: 20 7c 20 41 42 4f 52 54 20 7c 20 46 41 49 4c 20   | ABORT | FAIL 
7f30: 7c 20 49 47 4e 4f 52 45 20 7c 20 52 45 50 4c 41  | IGNORE | REPLA
7f40: 43 45 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  CE.}..puts {.<p>
7f50: 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
7f60: 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
7f70: 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
7f80: 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
7f90: 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
7fa0: 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
7fb0: 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
7fc0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
7fd0: 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
7fe0: 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
7ff0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
8000: 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
8010: 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
8020: 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
8030: 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
8040: 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
8050: 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20 74  The syntax for t
8060: 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  he ON CONFLICT c
8070: 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f 77  lause is as show
8080: 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65 20  n above for.the 
8090: 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43 52  CREATE TABLE, CR
80a0: 45 41 54 45 20 49 4e 44 45 58 2c 20 61 6e 64 20  EATE INDEX, and 
80b0: 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f  BEGIN TRANSACTIO
80c0: 4e 20 63 6f 6d 6d 61 6e 64 73 2e 0a 46 6f 72 20  N commands..For 
80d0: 74 68 65 20 43 4f 50 59 2c 20 49 4e 53 45 52 54  the COPY, INSERT
80e0: 2c 20 61 6e 64 20 55 50 44 41 54 45 20 63 6f 6d  , and UPDATE com
80f0: 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f  mands, the keywo
8100: 72 64 73 0a 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  rds."ON CONFLICT
8110: 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  " are replaced b
8120: 79 20 22 4f 52 22 2c 20 74 6f 20 6d 61 6b 65 20  y "OR", to make 
8130: 74 68 65 20 73 79 6e 74 61 78 20 73 65 65 6d 20  the syntax seem 
8140: 6d 6f 72 65 0a 6e 61 74 75 72 61 6c 2e 20 20 42  more.natural.  B
8150: 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
8160: 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
8170: 74 68 65 20 73 61 6d 65 20 65 69 74 68 65 72 20  the same either 
8180: 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
8190: 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
81a0: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 61 6e  use specifies an
81b0: 20 61 6c 67 6f 72 69 74 68 6d 20 75 73 65 64 20   algorithm used 
81c0: 74 6f 20 72 65 73 6f 6c 76 65 0a 63 6f 6e 73 74  to resolve.const
81d0: 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 73 2e  raint conflicts.
81e0: 20 20 54 68 65 72 65 20 61 72 65 20 66 69 76 65    There are five
81f0: 20 63 68 6f 69 63 65 73 3a 20 52 4f 4c 4c 42 41   choices: ROLLBA
8200: 43 4b 2c 20 41 42 4f 52 54 2c 0a 46 41 49 4c 2c  CK, ABORT,.FAIL,
8210: 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
8220: 4c 41 43 45 2e 20 54 68 65 20 64 65 66 61 75 6c  LACE. The defaul
8230: 74 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  t algorithm is A
8240: 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77  BORT.  This.is w
8250: 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f  hat they mean:</
8260: 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e  p>..<dl>.<dt><b>
8270: 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74  ROLLBACK</b></dt
8280: 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20  >.<dd><p>When a 
8290: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
82a0: 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 61 6e 20  tion occurs, an 
82b0: 69 6d 6d 65 64 69 61 74 65 20 52 4f 4c 4c 42 41  immediate ROLLBA
82c0: 43 4b 0a 6f 63 63 75 72 73 2c 20 74 68 75 73 20  CK.occurs, thus 
82d0: 65 6e 64 69 6e 67 20 74 68 65 20 63 75 72 72 65  ending the curre
82e0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  nt transaction, 
82f0: 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  and the command 
8300: 61 62 6f 72 74 73 0a 77 69 74 68 20 61 20 72 65  aborts.with a re
8310: 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 53 51 4c  turn code of SQL
8320: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20  ITE_CONSTRAINT. 
8330: 20 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69   If no transacti
8340: 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74  on is.active (ot
8350: 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70  her than the imp
8360: 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  lied transaction
8370: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
8380: 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e   on every.comman
8390: 64 29 20 74 68 65 6e 20 74 68 69 73 20 61 6c 67  d) then this alg
83a0: 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65  orithm works the
83b0: 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 2e 3c   same as ABORT.<
83c0: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
83d0: 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a  >ABORT</b></dt>.
83e0: 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f  <dd><p>When a co
83f0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
8400: 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63  on occurs, the c
8410: 6f 6d 6d 61 6e 64 20 62 61 63 6b 73 20 6f 75 74  ommand backs out
8420: 0a 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67  .any prior chang
8430: 65 73 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  es it might have
8440: 20 6d 61 64 65 20 61 6e 64 20 61 62 6f 72 74 73   made and aborts
8450: 20 77 69 74 68 20 61 20 72 65 74 75 72 6e 20 63   with a return c
8460: 6f 64 65 0a 6f 66 20 53 51 4c 49 54 45 5f 43 4f  ode.of SQLITE_CO
8470: 4e 53 54 52 41 49 4e 54 2e 20 20 42 75 74 20 6e  NSTRAINT.  But n
8480: 6f 20 52 4f 4c 4c 42 41 43 4b 20 69 73 20 65 78  o ROLLBACK is ex
8490: 65 63 75 74 65 64 20 73 6f 20 63 68 61 6e 67 65  ecuted so change
84a0: 73 0a 66 72 6f 6d 20 70 72 69 6f 72 20 63 6f 6d  s.from prior com
84b0: 6d 61 6e 64 73 20 77 69 74 68 69 6e 20 74 68 65  mands within the
84c0: 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
84d0: 6e 0a 61 72 65 20 70 72 65 73 65 72 76 65 64 2e  n.are preserved.
84e0: 20 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65    This is the de
84f0: 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 3c  fault behavior.<
8500: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
8510: 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  >FAIL</b></dt>.<
8520: 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e  dd><p>When a con
8530: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
8540: 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63 6f  n occurs, the co
8550: 6d 6d 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74  mmand aborts wit
8560: 68 20 61 0a 72 65 74 75 72 6e 20 63 6f 64 65 20  h a.return code 
8570: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
8580: 54 2e 20 20 42 75 74 20 61 6e 79 20 63 68 61 6e  T.  But any chan
8590: 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
85a0: 61 73 65 20 74 68 61 74 0a 74 68 65 20 63 6f 6d  ase that.the com
85b0: 6d 61 6e 64 20 6d 61 64 65 20 70 72 69 6f 72 20  mand made prior 
85c0: 74 6f 20 65 6e 63 6f 75 6e 74 65 72 69 6e 67 20  to encountering 
85d0: 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
85e0: 69 6f 6c 61 74 69 6f 6e 0a 61 72 65 20 70 72 65  iolation.are pre
85f0: 73 65 72 76 65 64 20 61 6e 64 20 61 72 65 20 6e  served and are n
8600: 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 2e 20 20  ot backed out.  
8610: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  For example, if 
8620: 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d  an UPDATE.statem
8630: 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ent encountered 
8640: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
8650: 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30  lation on the 10
8660: 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20  0th row that.it 
8670: 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61  attempts to upda
8680: 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  te, then the fir
8690: 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65  st 99 row change
86a0: 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64 0a  s are preserved.
86b0: 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  but changes to r
86c0: 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f  ows 100 and beyo
86d0: 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c  nd never occur.<
86e0: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
86f0: 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e  >IGNORE</b></dt>
8700: 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63  .<dd><p>When a c
8710: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
8720: 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
8730: 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e  one row that con
8740: 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72  tains.the constr
8750: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
8760: 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
8770: 72 20 63 68 61 6e 67 65 64 2e 20 20 42 75 74 20  r changed.  But 
8780: 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74  the command.cont
8790: 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67 20  inues executing 
87a0: 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4f 74 68 65 72  normally.  Other
87b0: 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64   rows before and
87c0: 20 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74   after the row t
87d0: 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68  hat.contained th
87e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
87f0: 6c 61 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65 20  lation continue 
8800: 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 6f  to be inserted o
8810: 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c  r updated.normal
8820: 6c 79 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73  ly.  No error is
8830: 20 72 65 74 75 72 6e 65 64 2e 3c 2f 70 3e 3c 2f   returned.</p></
8840: 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c  dd>..<dt><b>REPL
8850: 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACE</b></dt>.<dd
8860: 3e 3c 70 3e 57 68 65 6e 20 61 20 55 4e 49 51 55  ><p>When a UNIQU
8870: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
8880: 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
8890: 68 65 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  he pre-existing 
88a0: 72 6f 77 0a 74 68 61 74 20 69 73 20 63 61 75 73  row.that is caus
88b0: 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ing the constrai
88c0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20  nt violation is 
88d0: 72 65 6d 6f 76 65 64 20 70 72 69 6f 72 20 74 6f  removed prior to
88e0: 20 69 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75 70   inserting.or up
88f0: 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72 65  dating the curre
8900: 6e 74 20 72 6f 77 2e 20 20 54 68 75 73 20 74 68  nt row.  Thus th
8910: 65 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61  e insert or upda
8920: 74 65 20 61 6c 77 61 79 73 20 6f 63 63 75 72 73  te always occurs
8930: 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f  ..The command co
8940: 6e 74 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e  ntinues executin
8950: 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20  g normally.  No 
8960: 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
8970: 64 2e 3c 2f 70 3e 0a 3c 70 3e 49 66 20 61 20 4e  d.</p>.<p>If a N
8980: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
8990: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
89a0: 75 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76 61  urs, the NULL va
89b0: 6c 75 65 20 69 73 20 72 65 70 6c 61 63 65 64 0a  lue is replaced.
89c0: 62 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  by the default v
89d0: 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f  alue for that co
89e0: 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 20 63 6f  lumn.  If the co
89f0: 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61  lumn has no defa
8a00: 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20  ult.value, then 
8a10: 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69  the ABORT algori
8a20: 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
8a30: 0a 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70  .</dd>.</dl>..<p
8a40: 3e 0a 54 68 65 20 63 6f 6e 66 6c 69 63 74 20 72  >.The conflict r
8a50: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
8a60: 74 68 6d 20 63 61 6e 20 62 65 20 73 70 65 63 69  thm can be speci
8a70: 66 69 65 64 20 69 6e 20 74 68 72 65 65 20 70 6c  fied in three pl
8a80: 61 63 65 73 2c 0a 69 6e 20 6f 72 64 65 72 20 66  aces,.in order f
8a90: 72 6f 6d 20 6c 6f 77 65 73 74 20 74 6f 20 68 69  rom lowest to hi
8aa0: 67 68 65 73 74 20 70 72 65 63 65 64 65 6e 63 65  ghest precedence
8ab0: 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :.</p>..<ol>.<li
8ac0: 3e 3c 70 3e 0a 4f 6e 20 61 20 42 45 47 49 4e 20  ><p>.On a BEGIN 
8ad0: 54 52 41 4e 53 41 43 54 49 4f 4e 20 63 6f 6d 6d  TRANSACTION comm
8ae0: 61 6e 64 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  and..</p></li>..
8af0: 3c 6c 69 3e 3c 70 3e 0a 4f 6e 20 69 6e 64 69 76  <li><p>.On indiv
8b00: 69 64 75 61 6c 20 63 6f 6e 73 74 72 61 69 6e 74  idual constraint
8b10: 73 20 77 69 74 68 69 6e 20 61 20 43 52 45 41 54  s within a CREAT
8b20: 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
8b30: 45 20 49 4e 44 45 58 0a 73 74 61 74 65 6d 65 6e  E INDEX.statemen
8b40: 74 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  t..</p></li>..<l
8b50: 69 3e 3c 70 3e 0a 49 6e 20 74 68 65 20 4f 52 20  i><p>.In the OR 
8b60: 63 6c 61 75 73 65 20 6f 66 20 61 20 43 4f 50 59  clause of a COPY
8b70: 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20 55 50 44  , INSERT, or UPD
8b80: 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 3c 2f 70  ATE command..</p
8b90: 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  ></li>.</ol>..<p
8ba0: 3e 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  >The algorithm s
8bb0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
8bc0: 4f 52 20 63 6c 61 75 73 65 20 6f 66 20 61 20 43  OR clause of a C
8bd0: 4f 50 59 2c 20 49 4e 53 45 52 54 2c 20 6f 72 20  OPY, INSERT, or 
8be0: 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73  UPDATE.overrides
8bf0: 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73   any algorithm s
8c00: 70 65 63 69 66 69 65 64 20 62 79 20 61 20 43 52  pecified by a CR
8c10: 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
8c20: 45 41 54 45 20 49 4e 44 45 58 2e 0a 54 68 65 20  EATE INDEX..The 
8c30: 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
8c40: 69 65 64 20 77 69 74 68 69 6e 20 61 20 43 52 45  ied within a CRE
8c50: 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45  ATE TABLE or CRE
8c60: 41 54 45 20 49 4e 44 45 58 20 77 69 6c 6c 2c 20  ATE INDEX will, 
8c70: 69 6e 20 74 75 72 6e 2c 0a 6f 76 65 72 72 69 64  in turn,.overrid
8c80: 65 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20  e the algorithm 
8c90: 73 70 65 63 69 66 69 65 64 20 62 79 20 61 20 42  specified by a B
8ca0: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
8cb0: 20 63 6f 6d 6d 61 6e 64 2e 0a 49 66 20 6e 6f 20   command..If no 
8cc0: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
8cd0: 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
8ce0: 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
8cf0: 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
8d00: 3e 0a 0a 7d 0a 23 20 3c 70 3e 46 6f 72 20 61 64  >..}.# <p>For ad
8d10: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
8d20: 74 69 6f 6e 2c 20 73 65 65 20 0a 23 20 3c 61 20  tion, see .# <a 
8d30: 68 72 65 66 3d 22 63 6f 6e 66 6c 69 63 74 2e 68  href="conflict.h
8d40: 74 6d 6c 22 3e 63 6f 6e 66 6c 69 63 74 2e 68 74  tml">conflict.ht
8d50: 6d 6c 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 0a 53 65  ml</a>.</p>...Se
8d60: 63 74 69 6f 6e 20 50 52 41 47 4d 41 20 70 72 61  ction PRAGMA pra
8d70: 67 6d 61 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c  gma..Syntax {sql
8d80: 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 50 52  -statement} {.PR
8d90: 41 47 4d 41 20 3c 6e 61 6d 65 3e 20 3d 20 3c 76  AGMA <name> = <v
8da0: 61 6c 75 65 3e 20 7c 0a 50 52 41 47 4d 41 20 3c  alue> |.PRAGMA <
8db0: 66 75 6e 63 74 69 6f 6e 3e 28 3c 61 72 67 3e 29  function>(<arg>)
8dc0: 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 54 68  .}..puts {.<p>Th
8dd0: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
8de0: 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69   is used to modi
8df0: 66 79 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  fy the operation
8e00: 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20 6c   of the SQLite l
8e10: 69 62 72 61 72 79 2e 0a 54 68 65 20 70 72 61 67  ibrary..The prag
8e20: 6d 61 20 63 6f 6d 6d 61 6e 64 20 69 73 20 65 78  ma command is ex
8e30: 70 65 72 69 6d 65 6e 74 61 6c 20 61 6e 64 20 73  perimental and s
8e40: 70 65 63 69 66 69 63 20 70 72 61 67 6d 61 20 73  pecific pragma s
8e50: 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 0a 72 65  tatements may.re
8e60: 6d 6f 76 65 64 20 6f 72 20 61 64 64 65 64 20 69  moved or added i
8e70: 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  n future release
8e80: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 55 73  s of SQLite.  Us
8e90: 65 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 77  e this command.w
8ea0: 69 74 68 20 63 61 75 74 69 6f 6e 2e 3c 2f 70 3e  ith caution.</p>
8eb0: 0a 0a 3c 70 3e 54 68 65 20 63 75 72 72 65 6e 74  ..<p>The current
8ec0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8ed0: 73 75 70 70 6f 72 74 73 20 74 68 65 20 66 6f 6c  supports the fol
8ee0: 6c 6f 77 69 6e 67 20 70 72 61 67 6d 61 73 3a 3c  lowing pragmas:<
8ef0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
8f00: 3e 3c 62 3e 50 52 41 47 4d 41 20 63 61 63 68 65  ><b>PRAGMA cache
8f10: 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20 20 3c 62  _size;.       <b
8f20: 72 3e 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73  r>PRAGMA cache_s
8f30: 69 7a 65 20 3d 20 3c 2f 62 3e 3c 69 3e 4e 75 6d  ize = </b><i>Num
8f40: 62 65 72 2d 6f 66 2d 70 61 67 65 73 3c 2f 69 3e  ber-of-pages</i>
8f50: 3c 62 3e 3b 3c 2f 62 3e 3c 2f 70 3e 0a 20 20 20  <b>;</b></p>.   
8f60: 20 3c 70 3e 51 75 65 72 79 20 6f 72 20 63 68 61   <p>Query or cha
8f70: 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nge the maximum 
8f80: 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
8f90: 73 65 20 64 69 73 6b 20 70 61 67 65 73 20 74 68  se disk pages th
8fa0: 61 74 20 53 51 4c 69 74 65 0a 20 20 20 20 77 69  at SQLite.    wi
8fb0: 6c 6c 20 68 6f 6c 64 20 69 6e 20 6d 65 6d 6f 72  ll hold in memor
8fc0: 79 20 61 74 20 6f 6e 63 65 2e 20 20 45 61 63 68  y at once.  Each
8fd0: 20 70 61 67 65 20 75 73 65 73 20 61 62 6f 75 74   page uses about
8fe0: 20 31 2e 35 4b 20 6f 66 20 6d 65 6d 6f 72 79 2e   1.5K of memory.
8ff0: 0a 20 20 20 20 54 68 65 20 64 65 66 61 75 6c 74  .    The default
9000: 20 63 61 63 68 65 20 73 69 7a 65 20 69 73 20 32   cache size is 2
9010: 30 30 30 2e 20 20 49 66 20 79 6f 75 20 61 72 65  000.  If you are
9020: 20 64 6f 69 6e 67 20 55 50 44 41 54 45 73 20 6f   doing UPDATEs o
9030: 72 20 44 45 4c 45 54 45 73 0a 20 20 20 20 74 68  r DELETEs.    th
9040: 61 74 20 63 68 61 6e 67 65 20 6d 61 6e 79 20 72  at change many r
9050: 6f 77 73 20 6f 66 20 61 20 64 61 74 61 62 61 73  ows of a databas
9060: 65 20 61 6e 64 20 79 6f 75 20 64 6f 20 6e 6f 74  e and you do not
9070: 20 6d 69 6e 64 20 69 66 20 53 51 4c 69 74 65 0a   mind if SQLite.
9080: 20 20 20 20 75 73 65 73 20 6d 6f 72 65 20 6d 65      uses more me
9090: 6d 6f 72 79 2c 20 79 6f 75 20 63 61 6e 20 69 6e  mory, you can in
90a0: 63 72 65 61 73 65 20 74 68 65 20 63 61 63 68 65  crease the cache
90b0: 20 73 69 7a 65 20 66 6f 72 20 61 20 70 6f 73 73   size for a poss
90c0: 69 62 6c 65 20 73 70 65 65 64 0a 20 20 20 20 69  ible speed.    i
90d0: 6d 70 72 6f 76 65 6d 65 6e 74 2e 3c 2f 70 3e 0a  mprovement.</p>.
90e0: 20 20 20 20 3c 70 3e 57 68 65 6e 20 79 6f 75 20      <p>When you 
90f0: 63 68 61 6e 67 65 20 74 68 65 20 63 61 63 68 65  change the cache
9100: 20 73 69 7a 65 20 75 73 69 6e 67 20 74 68 65 20   size using the 
9110: 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d  cache_size pragm
9120: 61 2c 20 74 68 65 0a 20 20 20 20 63 68 61 6e 67  a, the.    chang
9130: 65 20 6f 6e 6c 79 20 65 6e 64 75 72 65 73 20 66  e only endures f
9140: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  or the current s
9150: 65 73 73 69 6f 6e 2e 20 20 54 68 65 20 63 61 63  ession.  The cac
9160: 68 65 20 73 69 7a 65 20 72 65 76 65 72 74 73 0a  he size reverts.
9170: 20 20 20 20 74 6f 20 74 68 65 20 64 65 66 61 75      to the defau
9180: 6c 74 20 76 61 6c 75 65 20 77 68 65 6e 20 74 68  lt value when th
9190: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
91a0: 6f 73 65 64 20 61 6e 64 20 72 65 6f 70 65 6e 65  osed and reopene
91b0: 64 2e 20 20 55 73 65 0a 20 20 20 20 74 68 65 20  d.  Use.    the 
91c0: 3c 62 3e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  <b>default_cache
91d0: 5f 73 69 7a 65 3c 2f 62 3e 20 70 72 61 67 6d 61  _size</b> pragma
91e0: 20 74 6f 20 63 68 65 63 6b 20 74 68 65 20 63 61   to check the ca
91f0: 63 68 65 20 73 69 7a 65 20 70 65 72 6d 61 6e 65  che size permane
9200: 6e 74 6c 79 0a 20 20 20 20 3c 2f 70 3e 3c 2f 6c  ntly.    </p></l
9210: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 50 52  i>..<li><p><b>PR
9220: 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67  AGMA count_chang
9230: 65 73 20 3d 20 4f 4e 3b 0a 20 20 20 20 20 20 20  es = ON;.       
9240: 3c 62 72 3e 50 52 41 47 4d 41 20 63 6f 75 6e 74  <br>PRAGMA count
9250: 5f 63 68 61 6e 67 65 73 20 3d 20 4f 46 46 3b 3c  _changes = OFF;<
9260: 2f 62 3e 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 57  /b></p>.    <p>W
9270: 68 65 6e 20 6f 6e 2c 20 74 68 65 20 43 4f 55 4e  hen on, the COUN
9280: 54 5f 43 48 41 4e 47 45 53 20 70 72 61 67 6d 61  T_CHANGES pragma
9290: 20 63 61 75 73 65 73 20 74 68 65 20 63 61 6c 6c   causes the call
92a0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f  back function to
92b0: 0a 20 20 20 20 62 65 20 69 6e 76 6f 6b 65 64 20  .    be invoked 
92c0: 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 44 45  once for each DE
92d0: 4c 45 54 45 2c 20 49 4e 53 45 52 54 2c 20 6f 72  LETE, INSERT, or
92e0: 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
92f0: 6e 2e 20 20 54 68 65 0a 20 20 20 20 61 72 67 75  n.  The.    argu
9300: 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 75 6d 62  ment is the numb
9310: 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
9320: 77 65 72 65 20 63 68 61 6e 67 65 64 2e 3c 2f 70  were changed.</p
9330: 3e 0a 20 20 20 20 3c 70 3e 54 68 69 73 20 70 72  >.    <p>This pr
9340: 61 67 6d 61 20 6d 61 79 20 62 65 20 72 65 6d 6f  agma may be remo
9350: 76 65 64 20 66 72 6f 6d 20 66 75 74 75 72 65 20  ved from future 
9360: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
9370: 74 65 2e 0a 20 20 20 20 43 6f 6e 73 69 64 65 72  te..    Consider
9380: 20 75 73 69 6e 67 20 74 68 65 20 3c 62 3e 73 71   using the <b>sq
9390: 6c 69 74 65 5f 63 68 61 6e 67 65 73 28 29 3c 2f  lite_changes()</
93a0: 62 3e 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20  b> API function 
93b0: 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 3c 2f 6c 69  instead.</p></li
93c0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 50 52 41  >..<li><p><b>PRA
93d0: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
93e0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20 20 3c  e_size;.       <
93f0: 62 72 3e 50 52 41 47 4d 41 20 64 65 66 61 75 6c  br>PRAGMA defaul
9400: 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 3c  t_cache_size = <
9410: 2f 62 3e 3c 69 3e 4e 75 6d 62 65 72 2d 6f 66 2d  /b><i>Number-of-
9420: 70 61 67 65 73 3c 2f 69 3e 3c 62 3e 3b 3c 2f 62  pages</i><b>;</b
9430: 3e 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 51 75 65  ></p>.    <p>Que
9440: 72 79 20 6f 72 20 63 68 61 6e 67 65 20 74 68 65  ry or change the
9450: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
9460: 6f 66 20 64 61 74 61 62 61 73 65 20 64 69 73 6b  of database disk
9470: 20 70 61 67 65 73 20 74 68 61 74 20 53 51 4c 69   pages that SQLi
9480: 74 65 0a 20 20 20 20 77 69 6c 6c 20 68 6f 6c 64  te.    will hold
9490: 20 69 6e 20 6d 65 6d 6f 72 79 20 61 74 20 6f 6e   in memory at on
94a0: 63 65 2e 20 20 45 61 63 68 20 70 61 67 65 20 75  ce.  Each page u
94b0: 73 65 73 20 61 62 6f 75 74 20 31 2e 35 4b 20 6f  ses about 1.5K o
94c0: 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 20 20 54 68  f memory..    Th
94d0: 69 73 20 70 72 61 67 6d 61 20 77 6f 72 6b 73 20  is pragma works 
94e0: 6c 69 6b 65 20 74 68 65 20 3c 62 3e 63 61 63 68  like the <b>cach
94f0: 65 5f 73 69 7a 65 3c 2f 62 3e 20 70 72 61 67 6d  e_size</b> pragm
9500: 61 20 77 69 74 68 20 74 68 65 20 61 64 64 69 74  a with the addit
9510: 69 6f 6e 0a 20 20 20 20 66 65 61 74 75 72 65 20  ion.    feature 
9520: 74 68 61 74 20 69 74 20 63 68 61 6e 67 65 73 20  that it changes 
9530: 74 68 65 20 63 61 63 68 65 20 73 69 7a 65 20 70  the cache size p
9540: 65 72 73 69 73 74 65 6e 74 6c 79 2e 20 20 57 69  ersistently.  Wi
9550: 74 68 20 74 68 69 73 20 70 72 61 67 6d 61 2c 0a  th this pragma,.
9560: 20 20 20 20 79 6f 75 20 63 61 6e 20 73 65 74 20      you can set 
9570: 74 68 65 20 63 61 63 68 65 20 73 69 7a 65 20 6f  the cache size o
9580: 6e 63 65 20 61 6e 64 20 74 68 61 74 20 73 65 74  nce and that set
9590: 74 69 6e 67 20 69 73 20 72 65 74 61 69 6e 65 64  ting is retained
95a0: 20 61 6e 64 20 72 65 75 73 65 64 0a 20 20 20 20   and reused.    
95b0: 65 76 65 72 79 74 69 6d 65 20 79 6f 75 20 72 65  everytime you re
95c0: 6f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  open the databas
95d0: 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  e.</p></li>..<li
95e0: 3e 3c 70 3e 3c 62 3e 50 52 41 47 4d 41 20 64 65  ><p><b>PRAGMA de
95f0: 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f 75  fault_synchronou
9600: 73 3b 0a 20 20 20 20 20 20 20 3c 62 72 3e 50 52  s;.       <br>PR
9610: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 73 79 6e  AGMA default_syn
9620: 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 4e 3b 0a 20  chronous = ON;. 
9630: 20 20 20 20 20 20 3c 62 72 3e 50 52 41 47 4d 41        <br>PRAGMA
9640: 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f   default_synchro
9650: 6e 6f 75 73 20 3d 20 4f 46 46 3b 3c 2f 62 3e 3c  nous = OFF;</b><
9660: 2f 70 3e 0a 20 20 20 20 3c 70 3e 51 75 65 72 79  /p>.    <p>Query
9670: 20 6f 72 20 63 68 61 6e 67 65 20 74 68 65 20 73   or change the s
9680: 65 74 74 69 6e 67 20 6f 66 20 74 68 65 20 22 73  etting of the "s
9690: 79 6e 63 68 72 6f 6e 6f 75 73 22 20 66 6c 61 67  ynchronous" flag
96a0: 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61   in.    the data
96b0: 62 61 73 65 2e 20 20 57 68 65 6e 20 73 79 6e 63  base.  When sync
96c0: 68 72 6f 6e 6f 75 73 20 69 73 20 6f 6e 20 28 74  hronous is on (t
96d0: 68 65 20 64 65 66 61 75 6c 74 29 2c 20 74 68 65  he default), the
96e0: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
96f0: 0a 20 20 20 20 65 6e 67 69 6e 65 20 77 69 6c 6c  .    engine will
9700: 20 70 61 75 73 65 20 61 74 20 63 72 69 74 69 63   pause at critic
9710: 61 6c 20 6d 6f 6d 65 6e 74 73 20 74 6f 20 6d 61  al moments to ma
9720: 6b 65 20 73 75 72 65 20 74 68 61 74 20 64 61 74  ke sure that dat
9730: 61 20 68 61 73 20 61 63 74 75 61 6c 6c 79 0a 20  a has actually. 
9740: 20 20 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f     be written to
9750: 20 74 68 65 20 64 69 73 6b 20 73 75 72 66 61 63   the disk surfac
9760: 65 2e 20 20 28 49 6e 20 6f 74 68 65 72 20 77 6f  e.  (In other wo
9770: 72 64 73 2c 20 69 74 20 69 6e 76 6f 6b 65 73 20  rds, it invokes 
9780: 74 68 65 0a 20 20 20 20 65 71 75 69 76 61 6c 65  the.    equivale
9790: 6e 74 20 6f 66 20 74 68 65 20 3c 62 3e 66 73 79  nt of the <b>fsy
97a0: 6e 63 28 29 3c 2f 62 3e 20 73 79 73 74 65 6d 20  nc()</b> system 
97b0: 63 61 6c 6c 2e 29 20 20 49 6e 20 73 79 6e 63 68  call.)  In synch
97c0: 72 6f 6e 6f 75 73 20 6d 6f 64 65 2c 0a 20 20 20  ronous mode,.   
97d0: 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62   an SQLite datab
97e0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 66 75  ase should be fu
97f0: 6c 6c 79 20 72 65 63 6f 76 65 72 61 62 6c 65 20  lly recoverable 
9800: 65 76 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  even if the oper
9810: 61 74 69 6e 67 0a 20 20 20 20 73 79 73 74 65 6d  ating.    system
9820: 20 63 72 61 73 68 65 73 20 6f 72 20 70 6f 77 65   crashes or powe
9830: 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  r is interrupted
9840: 20 75 6e 65 78 70 65 63 74 65 64 6c 79 2e 20 20   unexpectedly.  
9850: 54 68 65 20 70 65 6e 61 6c 74 79 20 66 6f 72 0a  The penalty for.
9860: 20 20 20 20 74 68 69 73 20 61 73 73 75 72 61 6e      this assuran
9870: 63 65 20 69 73 20 74 68 61 74 20 73 6f 6d 65 20  ce is that some 
9880: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
9890: 6f 6e 73 20 74 61 6b 65 20 6c 6f 6e 67 65 72 20  ons take longer 
98a0: 62 65 63 61 75 73 65 20 74 68 65 0a 20 20 20 20  because the.    
98b0: 65 6e 67 69 6e 65 20 68 61 73 20 74 6f 20 77 61  engine has to wa
98c0: 69 74 20 6f 6e 20 74 68 65 20 28 72 65 6c 61 74  it on the (relat
98d0: 69 76 65 6c 79 20 73 6c 6f 77 29 20 64 69 73 6b  ively slow) disk
98e0: 20 64 72 69 76 65 2e 20 20 54 68 65 20 61 6c 74   drive.  The alt
98f0: 65 72 6e 61 74 69 76 65 0a 20 20 20 20 69 73 20  ernative.    is 
9900: 74 6f 20 74 75 72 6e 20 73 79 6e 63 68 72 6f 6e  to turn synchron
9910: 6f 75 73 20 6f 66 66 2e 20 20 57 69 74 68 20 73  ous off.  With s
9920: 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 66 66 2c 20  ynchronous off, 
9930: 53 51 4c 69 74 65 20 63 6f 6e 74 69 6e 75 65 73  SQLite continues
9940: 0a 20 20 20 20 70 72 6f 63 65 73 73 69 6e 67 20  .    processing 
9950: 61 73 20 73 6f 6f 6e 20 61 73 20 69 74 20 68 61  as soon as it ha
9960: 73 20 68 61 6e 64 65 64 20 64 61 74 61 20 6f 66  s handed data of
9970: 66 20 74 6f 20 74 68 65 20 6f 70 65 72 61 74 69  f to the operati
9980: 6e 67 20 73 79 73 74 65 6d 2e 0a 20 20 20 20 49  ng system..    I
9990: 66 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  f the applicatio
99a0: 6e 20 72 75 6e 6e 69 6e 67 20 53 51 4c 69 74 65  n running SQLite
99b0: 20 63 72 61 73 68 65 73 2c 20 74 68 65 20 64 61   crashes, the da
99c0: 74 61 20 77 69 6c 6c 20 62 65 20 73 61 66 65 2c  ta will be safe,
99d0: 20 62 75 74 0a 20 20 20 20 74 68 65 20 64 61 74   but.    the dat
99e0: 61 62 61 73 65 20 63 6f 75 6c 64 20 28 69 6e 20  abase could (in 
99f0: 74 68 65 6f 72 79 29 20 62 65 63 6f 6d 65 20 63  theory) become c
9a00: 6f 72 72 75 70 74 65 64 20 69 66 20 74 68 65 20  orrupted if the 
9a10: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
9a20: 0a 20 20 20 20 63 72 61 73 68 65 73 20 6f 72 20  .    crashes or 
9a30: 74 68 65 20 63 6f 6d 70 75 74 65 72 20 73 75 64  the computer sud
9a40: 64 65 6e 6c 79 20 6c 6f 73 65 73 20 70 6f 77 65  denly loses powe
9a50: 72 2e 20 20 4f 6e 20 74 68 65 20 6f 74 68 65 72  r.  On the other
9a60: 20 68 61 6e 64 2c 20 73 6f 6d 65 0a 20 20 20 20   hand, some.    
9a70: 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 61  operations are a
9a80: 73 20 6d 75 63 68 20 61 73 20 35 30 20 6f 72 20  s much as 50 or 
9a90: 6d 6f 72 65 20 74 69 6d 65 73 20 66 61 73 74 65  more times faste
9aa0: 72 20 77 69 74 68 20 73 79 6e 63 68 72 6f 6e 6f  r with synchrono
9ab0: 75 73 20 6f 66 66 2e 0a 20 20 20 20 3c 2f 70 3e  us off..    </p>
9ac0: 0a 20 20 20 20 3c 70 3e 54 68 69 73 20 70 72 61  .    <p>This pra
9ad0: 67 6d 61 20 63 68 61 6e 67 65 73 20 74 68 65 20  gma changes the 
9ae0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6d 6f 64 65  synchronous mode
9af0: 20 70 65 72 73 69 73 74 65 6e 74 6c 79 2e 20 20   persistently.  
9b00: 4f 6e 63 65 20 63 68 61 6e 67 65 64 2c 0a 20 20  Once changed,.  
9b10: 20 20 74 68 65 20 6d 6f 64 65 20 73 74 61 79 73    the mode stays
9b20: 20 61 73 20 73 65 74 20 65 76 65 6e 20 69 66 20   as set even if 
9b30: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
9b40: 63 6c 6f 73 65 64 20 61 6e 64 20 72 65 6f 70 65  closed and reope
9b50: 6e 65 64 2e 20 20 54 68 65 0a 20 20 20 20 3c 62  ned.  The.    <b
9b60: 3e 73 79 6e 63 68 72 6f 6e 6f 75 73 3c 2f 62 3e  >synchronous</b>
9b70: 20 70 72 61 67 6d 61 20 64 6f 65 73 20 74 68 65   pragma does the
9b80: 20 73 61 6d 65 20 74 68 69 6e 67 20 62 75 74 20   same thing but 
9b90: 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 68 65  only applies the
9ba0: 20 73 65 74 74 69 6e 67 0a 20 20 20 20 74 6f 20   setting.    to 
9bb0: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 73 73  the current sess
9bc0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70  ion.</p>..<li><p
9bd0: 3e 3c 62 3e 50 52 41 47 4d 41 20 65 6d 70 74 79  ><b>PRAGMA empty
9be0: 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b  _result_callback
9bf0: 73 20 3d 20 4f 4e 3b 0a 20 20 20 20 20 20 20 3c  s = ON;.       <
9c00: 62 72 3e 50 52 41 47 4d 41 20 65 6d 70 74 79 5f  br>PRAGMA empty_
9c10: 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73  result_callbacks
9c20: 20 3d 20 4f 46 46 3b 3c 2f 62 3e 3c 2f 70 3e 0a   = OFF;</b></p>.
9c30: 20 20 20 20 3c 70 3e 57 68 65 6e 20 6f 6e 2c 20      <p>When on, 
9c40: 74 68 65 20 45 4d 50 54 59 5f 52 45 53 55 4c 54  the EMPTY_RESULT
9c50: 5f 43 41 4c 4c 42 41 43 4b 53 20 70 72 61 67 6d  _CALLBACKS pragm
9c60: 61 20 63 61 75 73 65 73 20 74 68 65 20 63 61 6c  a causes the cal
9c70: 6c 62 61 63 6b 0a 20 20 20 20 66 75 6e 63 74 69  lback.    functi
9c80: 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
9c90: 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 71   once for each q
9ca0: 75 65 72 79 20 74 68 61 74 20 68 61 73 20 61 6e  uery that has an
9cb0: 20 65 6d 70 74 79 20 72 65 73 75 6c 74 0a 20 20   empty result.  
9cc0: 20 20 73 65 74 2e 20 20 54 68 65 20 74 68 69 72    set.  The thir
9cd0: 64 20 22 3c 62 3e 61 72 67 76 3c 2f 62 3e 22 20  d "<b>argv</b>" 
9ce0: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 65  parameter to the
9cf0: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 73 65 74   callback is set
9d00: 20 74 6f 20 4e 55 4c 4c 0a 20 20 20 20 62 65 63   to NULL.    bec
9d10: 61 75 73 65 20 74 68 65 72 65 20 69 73 20 6e 6f  ause there is no
9d20: 20 64 61 74 61 20 74 6f 20 72 65 70 6f 72 74 2e   data to report.
9d30: 20 20 42 75 74 20 74 68 65 20 73 65 63 6f 6e 64    But the second
9d40: 20 22 3c 62 3e 61 72 67 63 3c 2f 62 3e 22 20 61   "<b>argc</b>" a
9d50: 6e 64 0a 20 20 20 20 66 6f 75 72 74 68 20 22 3c  nd.    fourth "<
9d60: 62 3e 63 6f 6c 75 6d 6e 4e 61 6d 65 73 3c 2f 62  b>columnNames</b
9d70: 3e 22 20 70 61 72 61 6d 65 74 65 72 73 20 61 72  >" parameters ar
9d80: 65 20 76 61 6c 69 64 20 61 6e 64 20 63 61 6e 20  e valid and can 
9d90: 62 65 20 75 73 65 64 20 74 6f 0a 20 20 20 20 64  be used to.    d
9da0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
9db0: 62 65 72 20 61 6e 64 20 6e 61 6d 65 73 20 6f 66  ber and names of
9dc0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61   the columns tha
9dd0: 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  t would have bee
9de0: 6e 20 69 6e 0a 20 20 20 20 74 68 65 20 72 65 73  n in.    the res
9df0: 75 6c 74 20 73 65 74 20 68 61 64 20 74 68 65 20  ult set had the 
9e00: 73 65 74 20 6e 6f 74 20 62 65 65 6e 20 65 6d 70  set not been emp
9e10: 74 79 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  ty.</p>..<li><p>
9e20: 3c 62 3e 50 52 41 47 4d 41 20 66 75 6c 6c 5f 63  <b>PRAGMA full_c
9e30: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 3d 20 4f 4e  olumn_names = ON
9e40: 3b 0a 20 20 20 20 20 20 20 3c 62 72 3e 50 52 41  ;.       <br>PRA
9e50: 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f  GMA full_column_
9e60: 6e 61 6d 65 73 20 3d 20 4f 46 46 3b 3c 2f 62 3e  names = OFF;</b>
9e70: 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 54 68 65 20  </p>.    <p>The 
9e80: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 72 65 70  column names rep
9e90: 6f 72 74 65 64 20 69 6e 20 61 6e 20 53 51 4c 69  orted in an SQLi
9ea0: 74 65 20 63 61 6c 6c 62 61 63 6b 20 61 72 65 20  te callback are 
9eb0: 6e 6f 72 6d 61 6c 6c 79 20 6a 75 73 74 0a 20 20  normally just.  
9ec0: 20 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    the name of th
9ed0: 65 20 63 6f 6c 75 6d 6e 20 69 74 73 65 6c 66 2c  e column itself,
9ee0: 20 65 78 63 65 70 74 20 66 6f 72 20 6a 6f 69 6e   except for join
9ef0: 73 20 77 68 65 6e 20 22 54 41 42 4c 45 2e 43 4f  s when "TABLE.CO
9f00: 4c 55 4d 4e 22 0a 20 20 20 20 69 73 20 75 73 65  LUMN".    is use
9f10: 64 2e 20 20 42 75 74 20 77 68 65 6e 20 66 75 6c  d.  But when ful
9f20: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 69  l_column_names i
9f30: 73 20 74 75 72 6e 65 64 20 6f 6e 2c 20 63 6f 6c  s turned on, col
9f40: 75 6d 6e 20 6e 61 6d 65 73 20 61 72 65 0a 20 20  umn names are.  
9f50: 20 20 61 6c 77 61 79 73 20 72 65 70 6f 72 74 65    always reporte
9f60: 64 20 61 73 20 22 54 41 42 4c 45 2e 43 4f 4c 55  d as "TABLE.COLU
9f70: 4d 4e 22 20 65 76 65 6e 20 66 6f 72 20 73 69 6d  MN" even for sim
9f80: 70 6c 65 20 71 75 65 72 69 65 73 2e 3c 2f 70 3e  ple queries.</p>
9f90: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  </li>..<li><p><b
9fa0: 3e 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e  >PRAGMA index_in
9fb0: 66 6f 28 3c 2f 62 3e 3c 69 3e 69 6e 64 65 78 2d  fo(</b><i>index-
9fc0: 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 29 3b 3c 2f 62  name</i><b>);</b
9fd0: 3e 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 46 6f 72  ></p>.    <p>For
9fe0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 74 68 61   each column tha
9ff0: 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65  t the named inde
a000: 78 20 72 65 66 65 72 65 6e 63 65 73 2c 20 69 6e  x references, in
a010: 76 6f 6b 65 20 74 68 65 20 0a 20 20 20 20 63 61  voke the .    ca
a020: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 0a  llback function.
a030: 20 20 20 20 6f 6e 63 65 20 77 69 74 68 20 69 6e      once with in
a040: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
a050: 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 69 6e 63  that column, inc
a060: 6c 75 64 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  luding the colum
a070: 6e 20 6e 61 6d 65 2c 0a 20 20 20 20 61 6e 64 20  n name,.    and 
a080: 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
a090: 72 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  r.</p>..<li><p><
a0a0: 62 3e 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c  b>PRAGMA index_l
a0b0: 69 73 74 28 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65  ist(</b><i>table
a0c0: 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 29 3b 3c 2f  -name</i><b>);</
a0d0: 62 3e 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 46 6f  b></p>.    <p>Fo
a0e0: 72 20 65 61 63 68 20 69 6e 64 65 78 20 6f 6e 20  r each index on 
a0f0: 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2c  the named table,
a100: 20 69 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   invoke the call
a110: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 0a 20 20  back function.  
a120: 20 20 6f 6e 63 65 20 77 69 74 68 20 69 6e 66 6f    once with info
a130: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
a140: 61 74 20 69 6e 64 65 78 2e 20 20 41 72 67 75 6d  at index.  Argum
a150: 65 6e 74 73 20 69 6e 63 6c 75 64 65 20 74 68 65  ents include the
a160: 0a 20 20 20 20 69 6e 64 65 78 20 6e 61 6d 65 20  .    index name 
a170: 61 6e 64 20 61 20 66 6c 61 67 20 74 6f 20 69 6e  and a flag to in
a180: 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20 6f  dicate whether o
a190: 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 20  r not the index 
a1a0: 6d 75 73 74 20 62 65 0a 20 20 20 20 75 6e 69 71  must be.    uniq
a1b0: 75 65 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  ue.</p>..<li><p>
a1c0: 3c 62 3e 50 52 41 47 4d 41 20 70 61 72 73 65 72  <b>PRAGMA parser
a1d0: 5f 74 72 61 63 65 20 3d 20 4f 4e 3b 3c 62 72 3e  _trace = ON;<br>
a1e0: 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74 72  PRAGMA parser_tr
a1f0: 61 63 65 20 3d 20 4f 46 46 3b 3c 2f 62 3e 3c 2f  ace = OFF;</b></
a200: 70 3e 0a 20 20 20 20 3c 70 3e 54 75 72 6e 20 74  p>.    <p>Turn t
a210: 72 61 63 69 6e 67 20 6f 66 20 74 68 65 20 53 51  racing of the SQ
a220: 4c 20 70 61 72 73 65 72 20 69 6e 73 69 64 65 20  L parser inside 
a230: 6f 66 20 74 68 65 0a 20 20 20 20 53 51 4c 69 74  of the.    SQLit
a240: 65 20 6c 69 62 72 61 72 79 20 6f 6e 20 61 6e 64  e library on and
a250: 20 6f 66 66 2e 20 20 54 68 69 73 20 69 73 20 75   off.  This is u
a260: 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
a270: 67 2e 0a 20 20 20 20 54 68 69 73 20 6f 6e 6c 79  g..    This only
a280: 20 77 6f 72 6b 73 20 69 66 20 74 68 65 20 6c 69   works if the li
a290: 62 72 61 72 79 20 69 73 20 63 6f 6d 70 69 6c 65  brary is compile
a2a0: 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 4e 44  d without the ND
a2b0: 45 42 55 47 20 6d 61 63 72 6f 2e 0a 20 20 20 20  EBUG macro..    
a2c0: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
a2d0: 70 3e 3c 62 3e 50 52 41 47 4d 41 20 69 6e 74 65  p><b>PRAGMA inte
a2e0: 67 72 69 74 79 5f 63 68 65 63 6b 3b 3c 2f 62 3e  grity_check;</b>
a2f0: 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 54 68 65 20  </p>.    <p>The 
a300: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 61 6e 20  command does an 
a310: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
a320: 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  of the entire da
a330: 74 61 62 61 73 65 2e 20 20 49 74 0a 20 20 20 20  tabase.  It.    
a340: 6c 6f 6f 6b 73 20 66 6f 72 20 6f 75 74 2d 6f 66  looks for out-of
a350: 2d 6f 72 64 65 72 20 72 65 63 6f 72 64 73 2c 20  -order records, 
a360: 6d 69 73 73 69 6e 67 20 70 61 67 65 73 2c 20 61  missing pages, a
a370: 6e 64 20 6d 61 6c 66 6f 72 6d 65 64 20 72 65 63  nd malformed rec
a380: 6f 72 64 73 2e 0a 20 20 20 20 49 66 20 61 6e 79  ords..    If any
a390: 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
a3a0: 75 6e 64 2c 20 74 68 65 6e 20 61 20 73 69 6e 67  und, then a sing
a3b0: 6c 65 20 73 74 72 69 6e 67 20 69 73 20 72 65 74  le string is ret
a3c0: 75 72 6e 65 64 20 77 68 69 63 68 20 69 73 0a 20  urned which is. 
a3d0: 20 20 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e     a description
a3e0: 20 6f 66 20 61 6c 6c 20 70 72 6f 62 6c 65 6d 73   of all problems
a3f0: 2e 20 20 49 66 20 65 76 65 72 79 74 68 69 6e 67  .  If everything
a400: 20 69 73 20 69 6e 20 6f 72 64 65 72 2c 20 22 6f   is in order, "o
a410: 6b 22 20 69 73 0a 20 20 20 20 72 65 74 75 72 6e  k" is.    return
a420: 65 64 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  ed.</p>..<li><p>
a430: 3c 62 3e 50 52 41 47 4d 41 20 73 79 6e 63 68 72  <b>PRAGMA synchr
a440: 6f 6e 6f 75 73 3b 0a 20 20 20 20 20 20 20 3c 62  onous;.       <b
a450: 72 3e 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f  r>PRAGMA synchro
a460: 6e 6f 75 73 20 3d 20 4f 4e 3b 0a 20 20 20 20 20  nous = ON;.     
a470: 20 20 3c 62 72 3e 50 52 41 47 4d 41 20 73 79 6e    <br>PRAGMA syn
a480: 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 3c  chronous = OFF;<
a490: 2f 62 3e 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 51  /b></p>.    <p>Q
a4a0: 75 65 72 79 20 6f 72 20 63 68 61 6e 67 65 20 74  uery or change t
a4b0: 68 65 20 73 65 74 74 69 6e 67 20 6f 66 20 74 68  he setting of th
a4c0: 65 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20  e "synchronous" 
a4d0: 66 6c 61 67 20 69 6e 0a 20 20 20 20 74 68 65 20  flag in.    the 
a4e0: 64 61 74 61 62 61 73 65 20 66 6f 72 20 74 68 65  database for the
a4f0: 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 74 68 65   duration of the
a500: 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73   current databas
a510: 65 20 63 6f 6e 6e 65 63 74 2e 0a 20 20 20 20 54  e connect..    T
a520: 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66  he synchronous f
a530: 6c 61 67 20 72 65 76 65 72 74 73 20 74 6f 20 69  lag reverts to i
a540: 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ts default value
a550: 20 77 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   when the databa
a560: 73 65 0a 20 20 20 20 69 73 20 63 6c 6f 73 65 64  se.    is closed
a570: 20 61 6e 64 20 72 65 6f 70 65 6e 65 64 2e 20 20   and reopened.  
a580: 46 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  For additional i
a590: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 74 68  nformation on th
a5a0: 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  e synchronous.  
a5b0: 20 20 66 6c 61 67 2c 20 73 65 65 20 74 68 65 20    flag, see the 
a5c0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
a5d0: 68 65 20 3c 62 3e 64 65 66 61 75 6c 74 5f 73 79  he <b>default_sy
a5e0: 6e 63 68 72 6f 6e 6f 75 73 3c 2f 62 3e 20 70 72  nchronous</b> pr
a5f0: 61 67 6d 61 2e 3c 2f 70 3e 0a 20 20 20 20 3c 2f  agma.</p>.    </
a600: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 50  li>..<li><p><b>P
a610: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
a620: 28 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 2d 6e 61  (</b><i>table-na
a630: 6d 65 3c 2f 69 3e 3c 62 3e 29 3b 3c 2f 62 3e 3c  me</i><b>);</b><
a640: 2f 70 3e 0a 20 20 20 20 3c 70 3e 46 6f 72 20 65  /p>.    <p>For e
a650: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
a660: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2c 20 69  e named table, i
a670: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
a680: 63 6b 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  ck function.    
a690: 6f 6e 63 65 20 77 69 74 68 20 69 6e 66 6f 72 6d  once with inform
a6a0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 61 74  ation about that
a6b0: 20 63 6f 6c 75 6d 6e 2c 20 69 6e 63 6c 75 64 69   column, includi
a6c0: 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ng the column na
a6d0: 6d 65 2c 0a 20 20 20 20 64 61 74 61 20 74 79 70  me,.    data typ
a6e0: 65 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  e, whether or no
a6f0: 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 6e  t the column can
a700: 20 62 65 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68   be NULL, and th
a710: 65 20 64 65 66 61 75 6c 74 0a 20 20 20 20 76 61  e default.    va
a720: 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  lue for the colu
a730: 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e  mn.</p>..<li><p>
a740: 3c 62 3e 50 52 41 47 4d 41 20 76 64 62 65 5f 74  <b>PRAGMA vdbe_t
a750: 72 61 63 65 20 3d 20 4f 4e 3b 3c 62 72 3e 50 52  race = ON;<br>PR
a760: 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65 20  AGMA vdbe_trace 
a770: 3d 20 4f 46 46 3b 3c 2f 62 3e 3c 2f 70 3e 0a 20  = OFF;</b></p>. 
a780: 20 20 20 3c 70 3e 54 75 72 6e 20 74 72 61 63 69     <p>Turn traci
a790: 6e 67 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ng of the virtua
a7a0: 6c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  l database engin
a7b0: 65 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 0a  e inside of the.
a7c0: 20 20 20 20 53 51 4c 69 74 65 20 6c 69 62 72 61      SQLite libra
a7d0: 72 79 20 6f 6e 20 61 6e 64 20 6f 66 66 2e 20 20  ry on and off.  
a7e0: 54 68 69 73 20 69 73 20 75 73 65 64 20 66 6f 72  This is used for
a7f0: 20 64 65 62 75 67 67 69 6e 67 2e 3c 2f 70 3e 3c   debugging.</p><
a800: 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e  /li>.</ul>..<p>N
a810: 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  o error message 
a820: 69 73 20 67 65 6e 65 72 61 74 65 64 20 69 66 20  is generated if 
a830: 61 6e 20 75 6e 6b 6e 6f 77 6e 20 70 72 61 67 6d  an unknown pragm
a840: 61 20 69 73 20 69 73 73 75 65 64 2e 0a 55 6e 6b  a is issued..Unk
a850: 6e 6f 77 6e 20 70 72 61 67 6d 61 73 20 61 72 65  nown pragmas are
a860: 20 69 67 6e 6f 72 65 64 2e 3c 2f 70 3e 0a 7d 0a   ignored.</p>.}.
a870: 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43 45  .Section REPLACE
a880: 20 72 65 70 6c 61 63 65 0a 0a 53 79 6e 74 61 78   replace..Syntax
a890: 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
a8a0: 20 7b 0a 52 45 50 4c 41 43 45 20 49 4e 54 4f 20   {.REPLACE INTO 
a8b0: 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b 28 20  <table-name> [( 
a8c0: 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 29 5d  <column-list> )]
a8d0: 20 56 41 4c 55 45 53 20 28 20 3c 76 61 6c 75 65   VALUES ( <value
a8e0: 2d 6c 69 73 74 3e 20 29 20 7c 0a 52 45 50 4c 41  -list> ) |.REPLA
a8f0: 43 45 20 49 4e 54 4f 20 3c 74 61 62 6c 65 2d 6e  CE INTO <table-n
a900: 61 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d 6e 2d  ame> [( <column-
a910: 6c 69 73 74 3e 20 29 5d 20 3c 73 65 6c 65 63 74  list> )] <select
a920: 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d 0a 0a 70  -statement>.}..p
a930: 75 74 73 20 7b 0a 3c 70 3e 54 68 65 20 52 45 50  uts {.<p>The REP
a940: 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  LACE command is 
a950: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
a960: 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c   "INSERT OR REPL
a970: 41 43 45 22 20 76 61 72 69 61 6e 74 0a 6f 66 20  ACE" variant.of 
a980: 74 68 65 20 3c 61 20 68 72 65 66 3d 22 23 69 6e  the <a href="#in
a990: 73 65 72 74 22 3e 49 4e 53 45 52 54 20 63 6f 6d  sert">INSERT com
a9a0: 6d 61 6e 64 3c 2f 61 3e 2e 20 20 54 68 69 73 20  mand</a>.  This 
a9b0: 61 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65  alias is provide
a9c0: 64 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c  d for.compatibil
a9d0: 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2e 20  ity with MySQL. 
a9e0: 20 53 65 65 20 74 68 65 20 0a 3c 61 20 68 72 65   See the .<a hre
a9f0: 66 3d 22 23 69 6e 73 65 72 74 22 3e 49 4e 53 45  f="#insert">INSE
aa00: 52 54 20 63 6f 6d 6d 61 6e 64 3c 2f 61 3e 20 64  RT command</a> d
aa10: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
aa20: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f   additional.info
aa30: 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 7d  rmation.</p>  .}
aa40: 0a 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54  ..Section SELECT
aa50: 20 73 65 6c 65 63 74 0a 0a 53 79 6e 74 61 78 20   select..Syntax 
aa60: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
aa70: 7b 0a 53 45 4c 45 43 54 20 3c 72 65 73 75 6c 74  {.SELECT <result
aa80: 3e 20 5b 46 52 4f 4d 20 3c 74 61 62 6c 65 2d 6c  > [FROM <table-l
aa90: 69 73 74 3e 5d 0a 5b 57 48 45 52 45 20 3c 65 78  ist>].[WHERE <ex
aaa0: 70 72 3e 5d 0a 5b 47 52 4f 55 50 20 42 59 20 3c  pr>].[GROUP BY <
aab0: 65 78 70 72 2d 6c 69 73 74 3e 5d 0a 5b 48 41 56  expr-list>].[HAV
aac0: 49 4e 47 20 3c 65 78 70 72 3e 5d 0a 5b 3c 63 6f  ING <expr>].[<co
aad0: 6d 70 6f 75 6e 64 2d 6f 70 3e 20 3c 73 65 6c 65  mpound-op> <sele
aae0: 63 74 3e 5d 2a 0a 5b 4f 52 44 45 52 20 42 59 20  ct>]*.[ORDER BY 
aaf0: 3c 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74 3e  <sort-expr-list>
ab00: 5d 0a 5b 4c 49 4d 49 54 20 3c 69 6e 74 65 67 65  ].[LIMIT <intege
ab10: 72 3e 20 5b 4f 46 46 53 45 54 20 3c 69 6e 74 65  r> [OFFSET <inte
ab20: 67 65 72 3e 5d 5d 0a 7d 20 7b 72 65 73 75 6c 74  ger>]].} {result
ab30: 7d 20 7b 0a 3c 72 65 73 75 6c 74 2d 63 6f 6c 75  } {.<result-colu
ab40: 6d 6e 3e 20 5b 2c 20 3c 72 65 73 75 6c 74 2d 63  mn> [, <result-c
ab50: 6f 6c 75 6d 6e 3e 5d 2a 0a 7d 20 7b 72 65 73 75  olumn>]*.} {resu
ab60: 6c 74 2d 63 6f 6c 75 6d 6e 7d 20 7b 0a 53 54 41  lt-column} {.STA
ab70: 52 20 7c 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  R | <table-name>
ab80: 20 2e 20 53 54 41 52 20 7c 20 3c 65 78 70 72 3e   . STAR | <expr>
ab90: 20 5b 20 5b 41 53 5d 20 3c 73 74 72 69 6e 67 3e   [ [AS] <string>
aba0: 20 5d 0a 7d 20 7b 74 61 62 6c 65 2d 6c 69 73 74   ].} {table-list
abb0: 7d 20 7b 0a 3c 74 61 62 6c 65 3e 20 5b 3c 6a 6f  } {.<table> [<jo
abc0: 69 6e 2d 6f 70 3e 20 3c 74 61 62 6c 65 3e 20 3c  in-op> <table> <
abd0: 6a 6f 69 6e 2d 61 72 67 73 3e 5d 2a 0a 7d 20 7b  join-args>]*.} {
abe0: 74 61 62 6c 65 7d 20 7b 0a 3c 74 61 62 6c 65 2d  table} {.<table-
abf0: 6e 61 6d 65 3e 20 5b 41 53 20 3c 61 6c 69 61 73  name> [AS <alias
ac00: 3e 5d 20 7c 0a 28 20 3c 73 65 6c 65 63 74 3e 20  >] |.( <select> 
ac10: 29 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 0a 7d  ) [AS <alias>].}
ac20: 20 7b 6a 6f 69 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c   {join-op} {., |
ac30: 20 5b 4e 41 54 55 52 41 4c 5d 20 5b 4c 45 46 54   [NATURAL] [LEFT
ac40: 20 7c 20 52 49 47 48 54 20 7c 20 46 55 4c 4c 5d   | RIGHT | FULL]
ac50: 20 5b 4f 55 54 45 52 20 7c 20 49 4e 4e 45 52 5d   [OUTER | INNER]
ac60: 20 4a 4f 49 4e 0a 7d 20 7b 6a 6f 69 6e 2d 61 72   JOIN.} {join-ar
ac70: 67 73 7d 20 7b 0a 5b 4f 4e 20 3c 65 78 70 72 3e  gs} {.[ON <expr>
ac80: 5d 20 5b 55 53 49 4e 47 20 28 20 3c 69 64 2d 6c  ] [USING ( <id-l
ac90: 69 73 74 3e 20 29 5d 0a 7d 20 7b 73 6f 72 74 2d  ist> )].} {sort-
aca0: 65 78 70 72 2d 6c 69 73 74 7d 20 7b 0a 3c 65 78  expr-list} {.<ex
acb0: 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72  pr> [<sort-order
acc0: 3e 5d 20 5b 2c 20 3c 65 78 70 72 3e 20 5b 3c 73  >] [, <expr> [<s
acd0: 6f 72 74 2d 6f 72 64 65 72 3e 5d 5d 2a 0a 7d 20  ort-order>]]*.} 
ace0: 7b 73 6f 72 74 2d 6f 72 64 65 72 7d 20 7b 0a 41  {sort-order} {.A
acf0: 53 43 20 7c 20 44 45 53 43 0a 7d 20 7b 63 6f 6d  SC | DESC.} {com
ad00: 70 6f 75 6e 64 5f 6f 70 7d 20 7b 0a 55 4e 49 4f  pound_op} {.UNIO
ad10: 4e 20 7c 20 55 4e 49 4f 4e 20 41 4c 4c 20 7c 20  N | UNION ALL | 
ad20: 49 4e 54 45 52 53 45 43 54 20 7c 20 45 58 43 45  INTERSECT | EXCE
ad30: 50 54 0a 7d 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e  PT.}..puts {.<p>
ad40: 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
ad50: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
ad60: 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
ad70: 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20  se.  The.result 
ad80: 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a  of a SELECT is z
ad90: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  ero or more rows
ada0: 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65   of data where e
adb0: 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69  ach row.has a fi
adc0: 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  xed number of co
add0: 6c 75 6d 6e 73 2e 20 20 54 68 65 20 6e 75 6d 62  lumns.  The numb
ade0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
adf0: 20 74 68 65 0a 72 65 73 75 6c 74 20 69 73 20 73   the.result is s
ae00: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
ae10: 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
ae20: 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 0a 53  in between the.S
ae30: 45 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b  ELECT and FROM k
ae40: 65 79 77 6f 72 64 73 2e 20 20 41 6e 79 20 61 72  eywords.  Any ar
ae50: 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
ae60: 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 0a 61  on can be used.a
ae70: 73 20 61 20 72 65 73 75 6c 74 2e 20 20 49 66 20  s a result.  If 
ae80: 61 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  a result express
ae90: 69 6f 6e 20 69 73 20 7d 0a 70 75 74 73 20 22 5b  ion is }.puts "[
aea0: 4f 70 65 72 61 74 6f 72 20 2a 5d 20 74 68 65 6e  Operator *] then
aeb0: 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   all columns of 
aec0: 61 6c 6c 20 74 61 62 6c 65 73 20 61 72 65 20 73  all tables are s
aed0: 75 62 73 74 69 74 75 74 65 64 22 0a 70 75 74 73  ubstituted".puts
aee0: 20 7b 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65   {for that one e
aef0: 78 70 72 65 73 73 69 6f 6e 2e 3c 2f 70 3e 0a 0a  xpression.</p>..
af00: 3c 70 3e 54 68 65 20 71 75 65 72 79 20 69 73 20  <p>The query is 
af10: 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 20 6f  executed again o
af20: 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
af30: 73 20 73 70 65 63 69 66 69 65 64 20 61 66 74 65  s specified afte
af40: 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f  r.the FROM keywo
af50: 72 64 2e 20 20 49 66 20 6d 75 6c 74 69 70 6c 65  rd.  If multiple
af60: 20 74 61 62 6c 65 73 20 6e 61 6d 65 73 20 61 72   tables names ar
af70: 65 20 73 65 70 61 72 61 74 65 64 20 62 79 20 63  e separated by c
af80: 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20 74 68 65 20  ommas,.then the 
af90: 71 75 65 72 79 20 69 73 20 61 67 61 69 6e 73 74  query is against
afa0: 20 74 68 65 20 63 72 6f 73 73 20 6a 6f 69 6e 20   the cross join 
afb0: 6f 66 20 74 68 65 20 76 61 72 69 6f 75 73 20 74  of the various t
afc0: 61 62 6c 65 73 2e 0a 54 68 65 20 66 75 6c 6c 20  ables..The full 
afd0: 53 51 4c 2d 39 32 20 6a 6f 69 6e 20 73 79 6e 74  SQL-92 join synt
afe0: 61 78 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ax can also be u
aff0: 73 65 64 20 74 6f 20 73 70 65 63 69 66 79 20 6a  sed to specify j
b000: 6f 69 6e 73 2e 0a 41 20 73 75 62 2d 71 75 65 72  oins..A sub-quer
b010: 79 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  y.in parentheses
b020: 20 6d 61 79 20 62 65 20 73 75 62 73 74 69 74 75   may be substitu
b030: 74 65 64 20 66 6f 72 20 61 6e 79 20 74 61 62 6c  ted for any tabl
b040: 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52  e name in the FR
b050: 4f 4d 20 63 6c 61 75 73 65 2e 0a 54 68 65 20 65  OM clause..The e
b060: 6e 74 69 72 65 20 46 52 4f 4d 20 63 6c 61 75 73  ntire FROM claus
b070: 65 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64  e may be omitted
b080: 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
b090: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 0a  the result is a.
b0a0: 73 69 6e 67 6c 65 20 72 6f 77 20 63 6f 6e 73 69  single row consi
b0b0: 73 74 69 6e 67 20 6f 66 20 74 68 65 20 76 61 6c  sting of the val
b0c0: 75 65 73 20 6f 66 20 74 68 65 20 65 78 70 72 65  ues of the expre
b0d0: 73 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c 2f 70 3e  ssion list..</p>
b0e0: 0a 0a 3c 70 3e 54 68 65 20 57 48 45 52 45 20 63  ..<p>The WHERE c
b0f0: 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65  lause can be use
b100: 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  d to limit the n
b110: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6f 76  umber of rows ov
b120: 65 72 0a 77 68 69 63 68 20 74 68 65 20 71 75 65  er.which the que
b130: 72 79 20 6f 70 65 72 61 74 65 73 2e 20 20 49 6e  ry operates.  In
b140: 20 74 68 65 20 63 75 72 72 65 6e 74 20 69 6d 70   the current imp
b150: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 0a 69 6e 64  lementation,.ind
b160: 69 63 65 73 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  ices will only b
b170: 65 20 75 73 65 64 20 74 6f 0a 6f 70 74 69 6d 69  e used to.optimi
b180: 7a 65 20 74 68 65 20 71 75 65 72 79 20 69 66 20  ze the query if 
b190: 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e  WHERE expression
b1a0: 20 63 6f 6e 74 61 69 6e 73 20 65 71 75 61 6c 69   contains equali
b1b0: 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 73 0a 63  ty comparisons.c
b1c0: 6f 6e 6e 65 63 74 65 64 20 62 79 20 74 68 65 20  onnected by the 
b1d0: 41 4e 44 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70  AND operator.</p
b1e0: 3e 0a 0a 3c 70 3e 54 68 65 20 47 52 4f 55 50 20  >..<p>The GROUP 
b1f0: 42 59 20 63 6c 61 75 73 65 73 20 63 61 75 73 65  BY clauses cause
b200: 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f  s one or more ro
b210: 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ws of the result
b220: 20 74 6f 0a 62 65 20 63 6f 6d 62 69 6e 65 64 20   to.be combined 
b230: 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 6f  into a single ro
b240: 77 20 6f 66 20 6f 75 74 70 75 74 2e 20 20 54 68  w of output.  Th
b250: 69 73 20 69 73 20 65 73 70 65 63 69 61 6c 6c 79  is is especially
b260: 20 75 73 65 66 75 6c 0a 77 68 65 6e 20 74 68 65   useful.when the
b270: 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   result contains
b280: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
b290: 69 6f 6e 73 2e 20 20 54 68 65 20 65 78 70 72 65  ions.  The expre
b2a0: 73 73 69 6f 6e 73 20 69 6e 0a 74 68 65 20 47 52  ssions in.the GR
b2b0: 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 64 6f  OUP BY clause do
b2c0: 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61   <em>not</em> ha
b2d0: 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73  ve to be express
b2e0: 69 6f 6e 73 20 74 68 61 74 0a 61 70 70 65 61 72  ions that.appear
b2f0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20   in the result. 
b300: 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
b310: 73 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  se is similar to
b320: 20 57 48 45 52 45 20 65 78 63 65 70 74 0a 74 68   WHERE except.th
b330: 61 74 20 48 41 56 49 4e 47 20 61 70 70 6c 69 65  at HAVING applie
b340: 73 20 61 66 74 65 72 20 67 72 6f 75 70 69 6e 67  s after grouping
b350: 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20 20   has occurred.  
b360: 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72 65  The HAVING expre
b370: 73 73 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72 20  ssion.may refer 
b380: 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20  to values, even 
b390: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
b3a0: 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f  ons, that are no
b3b0: 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  t in the result.
b3c0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 52 44  </p>..<p>The ORD
b3d0: 45 52 20 42 59 20 63 6c 61 75 73 65 20 63 61 75  ER BY clause cau
b3e0: 73 65 73 20 74 68 65 20 6f 75 74 70 75 74 20 72  ses the output r
b3f0: 6f 77 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64  ows to be sorted
b400: 2e 20 20 0a 54 68 65 20 61 72 67 75 6d 65 6e 74  .  .The argument
b410: 20 74 6f 20 4f 52 44 45 52 20 42 59 20 69 73 20   to ORDER BY is 
b420: 61 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  a list of expres
b430: 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 75  sions that are u
b440: 73 65 64 20 61 73 20 74 68 65 0a 6b 65 79 20 66  sed as the.key f
b450: 6f 72 20 74 68 65 20 73 6f 72 74 2e 20 20 54 68  or the sort.  Th
b460: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 64 6f  e expressions do
b470: 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20   not have to be 
b480: 70 61 72 74 20 6f 66 20 74 68 65 0a 72 65 73 75  part of the.resu
b490: 6c 74 20 66 6f 72 20 61 20 73 69 6d 70 6c 65 20  lt for a simple 
b4a0: 53 45 4c 45 43 54 2c 20 62 75 74 20 69 6e 20 61  SELECT, but in a
b4b0: 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
b4c0: 20 65 61 63 68 20 73 6f 72 74 0a 65 78 70 72 65   each sort.expre
b4d0: 73 73 69 6f 6e 20 6d 75 73 74 20 65 78 61 63 74  ssion must exact
b4e0: 6c 79 20 6d 61 74 63 68 20 6f 6e 65 20 6f 66 20  ly match one of 
b4f0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
b500: 6e 73 2e 20 20 45 61 63 68 0a 73 6f 72 74 20 65  ns.  Each.sort e
b510: 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
b520: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
b530: 6f 77 65 64 20 62 79 20 41 53 43 20 6f 72 20 44  owed by ASC or D
b540: 45 53 43 20 74 6f 20 73 70 65 63 69 66 79 0a 74  ESC to specify.t
b550: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 3c 2f  he sort order.</
b560: 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54  p>..<p>The LIMIT
b570: 20 63 6c 61 75 73 65 20 70 6c 61 63 65 73 20 61   clause places a
b580: 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
b590: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
b5a0: 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 69 6e 20  ows.returned in 
b5b0: 74 68 65 20 72 65 73 75 6c 74 2e 20 20 41 20 4c  the result.  A L
b5c0: 49 4d 49 54 20 6f 66 20 30 20 69 6e 64 69 63 61  IMIT of 0 indica
b5d0: 74 65 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75  tes no upper bou
b5e0: 6e 64 2e 0a 54 68 65 20 6f 70 74 69 6f 6e 61 6c  nd..The optional
b5f0: 20 4f 46 46 53 45 54 20 66 6f 6c 6c 6f 77 69 6e   OFFSET followin
b600: 67 20 4c 49 4d 49 54 20 73 70 65 63 69 66 69 65  g LIMIT specifie
b610: 73 20 68 6f 77 20 6d 61 6e 79 0a 72 6f 77 73 20  s how many.rows 
b620: 74 6f 20 73 6b 69 70 20 61 74 20 74 68 65 20 62  to skip at the b
b630: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
b640: 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 0a  result set.</p>.
b650: 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53  .<p>A compound S
b660: 45 4c 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20  ELECT is formed 
b670: 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65  from two or more
b680: 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20   simple SELECTs 
b690: 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65  connected.by one
b6a0: 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   of the operator
b6b0: 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  s UNION, UNION A
b6c0: 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f  LL, INTERSECT, o
b6d0: 72 20 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20  r EXCEPT.  In.a 
b6e0: 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
b6f0: 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74   all the constit
b700: 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73  uent SELECTs mus
b710: 74 20 73 70 65 63 69 66 79 20 74 68 65 0a 73 61  t specify the.sa
b720: 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  me number of res
b730: 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68  ult columns.  Th
b740: 65 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20  ere may be only 
b750: 61 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42  a single ORDER B
b760: 59 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20  Y.clause at the 
b770: 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f  end of the compo
b780: 75 6e 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65  und SELECT.  The
b790: 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e   UNION and UNION
b7a0: 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63   ALL.operators c
b7b0: 6f 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ombine the resul
b7c0: 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ts of the SELECT
b7d0: 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61  s to the right a
b7e0: 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73  nd left into.a s
b7f0: 69 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e  ingle big table.
b800: 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
b810: 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f   is that in UNIO
b820: 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77  N all result row
b830: 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20 77  s.are distinct w
b840: 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c  here in UNION AL
b850: 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 64  L there may be d
b860: 75 70 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49  uplicates..The I
b870: 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
b880: 72 20 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65  r takes the inte
b890: 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  rsection of the 
b8a0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c  results of the.l
b8b0: 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 53 45  eft and right SE
b8c0: 4c 45 43 54 73 2e 20 20 45 58 43 45 50 54 20 74  LECTs.  EXCEPT t
b8d0: 61 6b 65 73 20 74 68 65 20 72 65 73 75 6c 74 20  akes the result 
b8e0: 6f 66 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61  of left SELECT a
b8f0: 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68  fter.removing th
b900: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
b910: 20 72 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20   right SELECT.  
b920: 57 68 65 6e 20 74 68 72 65 65 20 61 72 65 20 6d  When three are m
b930: 6f 72 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20  ore SELECTs.are 
b940: 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61  connected into a
b950: 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20   compound, they 
b960: 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20  group from left 
b970: 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 7d 0a  to right.</p>.}.
b980: 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
b990: 75 70 64 61 74 65 0a 0a 53 79 6e 74 61 78 20 7b  update..Syntax {
b9a0: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
b9b0: 0a 55 50 44 41 54 45 20 5b 20 4f 52 20 3c 63 6f  .UPDATE [ OR <co
b9c0: 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d  nflict-algorithm
b9d0: 3e 20 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e  > ] <table-name>
b9e0: 0a 53 45 54 20 3c 61 73 73 69 67 6e 6d 65 6e 74  .SET <assignment
b9f0: 3e 20 5b 2c 20 3c 61 73 73 69 67 6e 6d 65 6e 74  > [, <assignment
ba00: 3e 5d 20 0a 5b 57 48 45 52 45 20 3c 65 78 70 72  >] .[WHERE <expr
ba10: 3e 5d 0a 7d 20 7b 61 73 73 69 67 6e 6d 65 6e 74  >].} {assignment
ba20: 7d 20 7b 0a 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  } {.<column-name
ba30: 3e 20 3d 20 3c 65 78 70 72 3e 0a 7d 0a 0a 70 75  > = <expr>.}..pu
ba40: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 55 50 44 41  ts {.<p>The UPDA
ba50: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
ba60: 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74  used to change t
ba70: 68 65 20 76 61 6c 75 65 20 6f 66 20 63 6f 6c 75  he value of colu
ba80: 6d 6e 73 20 69 6e 20 0a 73 65 6c 65 63 74 65 64  mns in .selected
ba90: 20 72 6f 77 73 20 6f 66 20 61 20 74 61 62 6c 65   rows of a table
baa0: 2e 20 20 45 61 63 68 20 61 73 73 69 67 6e 6d 65  .  Each assignme
bab0: 6e 74 20 69 6e 20 61 6e 20 55 50 44 41 54 45 20  nt in an UPDATE 
bac0: 73 70 65 63 69 66 69 65 73 0a 61 20 63 6f 6c 75  specifies.a colu
bad0: 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c  mn name to the l
bae0: 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c  eft of the equal
baf0: 73 20 73 69 67 6e 20 61 6e 64 20 61 6e 20 61 72  s sign and an ar
bb00: 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
bb10: 6f 6e 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e  on.to the right.
bb20: 20 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e    The expression
bb30: 73 20 6d 61 79 20 75 73 65 20 74 68 65 20 76 61  s may use the va
bb40: 6c 75 65 73 20 6f 66 20 6f 74 68 65 72 20 63 6f  lues of other co
bb50: 6c 75 6d 6e 73 2e 0a 41 6c 6c 20 65 78 70 72 65  lumns..All expre
bb60: 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
bb70: 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  ated before any 
bb80: 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
bb90: 6d 61 64 65 2e 0a 41 20 57 48 45 52 45 20 63 6c  made..A WHERE cl
bba0: 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
bbb0: 20 74 6f 20 72 65 73 74 72 69 63 74 20 77 68 69   to restrict whi
bbc0: 63 68 20 72 6f 77 73 20 61 72 65 20 75 70 64 61  ch rows are upda
bbd0: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ted.</p>..<p>The
bbe0: 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69   optional confli
bbf0: 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73  ct-clause allows
bc00: 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69   the specificati
bc10: 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61  on of an alterna
bc20: 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20  tive.constraint 
bc30: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
bc40: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  ion algorithm to
bc50: 20 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73   use during this
bc60: 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65   one command..Se
bc70: 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69  e the section ti
bc80: 74 6c 65 64 0a 3c 61 20 68 72 65 66 3d 22 23 63  tled.<a href="#c
bc90: 6f 6e 66 6c 69 63 74 22 3e 4f 4e 20 43 4f 4e 46  onflict">ON CONF
bca0: 4c 49 43 54 3c 2f 61 3e 20 66 6f 72 20 61 64 64  LICT</a> for add
bcb0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
bcc0: 69 6f 6e 2e 3c 2f 70 3e 0a 7d 0a 0a 53 65 63 74  ion.</p>.}..Sect
bcd0: 69 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75  ion VACUUM vacuu
bce0: 6d 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73  m..Syntax {sql-s
bcf0: 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 56 41 43 55  tatement} {.VACU
bd00: 55 4d 20 5b 3c 69 6e 64 65 78 2d 6f 72 2d 74 61  UM [<index-or-ta
bd10: 62 6c 65 2d 6e 61 6d 65 3e 5d 0a 7d 0a 0a 70 75  ble-name>].}..pu
bd20: 74 73 20 7b 0a 3c 70 3e 54 68 65 20 56 41 43 55  ts {.<p>The VACU
bd30: 55 4d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e  UM command is an
bd40: 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
bd50: 6e 20 6d 6f 64 65 6c 6c 65 64 20 61 66 74 65 72  n modelled after
bd60: 20 61 20 73 69 6d 69 6c 61 72 0a 63 6f 6d 6d 61   a similar.comma
bd70: 6e 64 20 66 6f 75 6e 64 20 69 6e 20 50 6f 73 74  nd found in Post
bd80: 67 72 65 53 51 4c 2e 20 20 49 66 20 56 41 43 55  greSQL.  If VACU
bd90: 55 4d 20 69 73 20 69 6e 76 6f 6b 65 64 20 77 69  UM is invoked wi
bda0: 74 68 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  th the name of a
bdb0: 0a 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20  .table or index 
bdc0: 74 68 65 6e 20 69 74 20 69 73 20 73 75 70 70 6f  then it is suppo
bdd0: 73 65 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74  se to clean up t
bde0: 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f  he named table o
bdf0: 72 20 69 6e 64 65 78 2e 0a 49 6e 20 76 65 72 73  r index..In vers
be00: 69 6f 6e 20 31 2e 30 20 6f 66 20 53 51 4c 69 74  ion 1.0 of SQLit
be10: 65 2c 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f  e, the VACUUM co
be20: 6d 6d 61 6e 64 20 77 6f 75 6c 64 20 69 6e 76 6f  mmand would invo
be30: 6b 65 20 0a 3c 62 3e 67 64 62 6d 5f 72 65 6f 72  ke .<b>gdbm_reor
be40: 67 61 6e 69 7a 65 28 29 3c 2f 62 3e 20 74 6f 20  ganize()</b> to 
be50: 63 6c 65 61 6e 20 75 70 20 74 68 65 20 62 61 63  clean up the bac
be60: 6b 65 6e 64 20 64 61 74 61 62 61 73 65 20 66 69  kend database fi
be70: 6c 65 2e 0a 42 65 67 69 6e 6e 69 6e 67 20 77 69  le..Beginning wi
be80: 74 68 20 76 65 72 73 69 6f 6e 20 32 2e 30 20 6f  th version 2.0 o
be90: 66 20 53 51 4c 69 74 65 2c 20 47 44 42 4d 20 69  f SQLite, GDBM i
bea0: 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 75 73 65 64  s no longer used
beb0: 20 66 6f 72 0a 74 68 65 20 64 61 74 61 62 61 73   for.the databas
bec0: 65 20 62 61 63 6b 65 6e 64 20 61 6e 64 20 56 41  e backend and VA
bed0: 43 55 55 4d 20 68 61 73 20 62 65 63 6f 6d 65 20  CUUM has become 
bee0: 61 20 6e 6f 2d 6f 70 2e 0a 3c 2f 70 3e 0a 7d 0a  a no-op..</p>.}.
bef0: 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 3c 68 72 20  ..puts {.<p><hr 
bf00: 2f 3e 3c 2f 70 3e 0a 3c 70 3e 3c 61 20 68 72 65  /></p>.<p><a hre
bf10: 66 3d 22 69 6e 64 65 78 2e 68 74 6d 6c 22 3e 3c  f="index.html"><
bf20: 69 6d 67 20 73 72 63 3d 22 2f 67 6f 62 61 63 6b  img src="/goback
bf30: 2e 6a 70 67 22 20 62 6f 72 64 65 72 3d 30 20 2f  .jpg" border=0 /
bf40: 3e 0a 42 61 63 6b 20 74 6f 20 74 68 65 20 53 51  >.Back to the SQ
bf50: 4c 69 74 65 20 48 6f 6d 65 20 50 61 67 65 3c 2f  Lite Home Page</
bf60: 61 3e 0a 3c 2f 70 3e 0a 0a 3c 2f 62 6f 64 79 3e  a>.</p>..</body>
bf70: 3c 2f 68 74 6d 6c 3e 7d 0a                       </html>}.