Documentation Source Text

Hex Artifact Content
Login

Artifact fee7a3514c47469d6aa761a0fea6a4d2111cf8bb:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 32 3e 53 51 4c 20 41 73 20 55  e>..<h2>SQL As U
0040: 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51 4c  nderstood By SQL
0050: 69 74 65 3c 2f 68 32 3e 0a 0a 3c 70 3e 53 51 4c  ite</h2>..<p>SQL
0060: 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ite understands 
0070: 6d 6f 73 74 20 6f 66 20 74 68 65 20 73 74 61 6e  most of the stan
0080: 64 61 72 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67  dard SQL.languag
0090: 65 2e 20 20 42 75 74 20 69 74 20 64 6f 65 73 20  e.  But it does 
00a0: 3c 61 20 68 72 65 66 3d 22 6f 6d 69 74 74 65 64  <a href="omitted
00b0: 2e 68 74 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65  .html">omit some
00c0: 20 66 65 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68   features</a>.wh
00d0: 69 6c 65 20 61 74 20 74 68 65 20 73 61 6d 65 20  ile at the same 
00e0: 74 69 6d 65 0a 61 64 64 69 6e 67 20 61 20 66 65  time.adding a fe
00f0: 77 20 66 65 61 74 75 72 65 73 20 6f 66 20 69 74  w features of it
0100: 73 20 6f 77 6e 2e 20 20 54 68 69 73 20 64 6f 63  s own.  This doc
0110: 75 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ument attempts t
0120: 6f 0a 64 65 73 63 72 69 62 65 20 70 72 65 63 69  o.describe preci
0130: 73 65 6c 79 20 77 68 61 74 20 70 61 72 74 73 20  sely what parts 
0140: 6f 66 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  of the SQL langu
0150: 61 67 65 20 53 51 4c 69 74 65 20 64 6f 65 73 0a  age SQLite does.
0160: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  and does not sup
0170: 70 6f 72 74 2e 20 20 41 20 6c 69 73 74 20 6f 66  port.  A list of
0180: 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 6b   <a href="lang_k
0190: 65 79 77 6f 72 64 73 2e 68 74 6d 6c 22 3e 6b 65  eywords.html">ke
01a0: 79 77 6f 72 64 73 3c 2f 61 3e 20 69 73 20 0a 61  ywords</a> is .a
01b0: 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20 20 54  lso provided.  T
01c0: 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20  he SQL language 
01d0: 73 79 6e 74 61 78 20 69 73 20 64 65 73 63 72 69  syntax is descri
01e0: 62 65 64 20 62 79 0a 3c 61 20 68 72 65 66 3d 22  bed by.<a href="
01f0: 73 79 6e 74 61 78 64 69 61 67 72 61 6d 73 2e 68  syntaxdiagrams.h
0200: 74 6d 6c 22 3e 73 79 6e 74 61 78 20 64 69 61 67  tml">syntax diag
0210: 72 61 6d 73 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  rams</a>.</p>..<
0220: 70 3e 49 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20  p>In all of the 
0230: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
0240: 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 20 6c 69 74  that follow, lit
0250: 65 72 61 6c 20 74 65 78 74 20 69 73 20 73 68 6f  eral text is sho
0260: 77 6e 20 69 6e 0a 62 6f 6c 64 20 62 6c 75 65 2e  wn in.bold blue.
0270: 20 20 4e 6f 6e 2d 74 65 72 6d 69 6e 61 6c 20 73    Non-terminal s
0280: 79 6d 62 6f 6c 73 20 61 72 65 20 73 68 6f 77 6e  ymbols are shown
0290: 20 69 6e 20 69 74 61 6c 69 63 20 72 65 64 2e 20   in italic red. 
02a0: 20 4f 70 65 72 61 74 6f 72 73 0a 74 68 61 74 20   Operators.that 
02b0: 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  are part of the 
02c0: 73 79 6e 74 61 63 74 69 63 20 6d 61 72 6b 75 70  syntactic markup
02d0: 20 69 74 73 65 6c 66 20 61 72 65 20 73 68 6f 77   itself are show
02e0: 6e 20 69 6e 20 62 6c 61 63 6b 20 72 6f 6d 61 6e  n in black roman
02f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64  .</p>..<p>This d
0300: 6f 63 75 6d 65 6e 74 20 69 73 20 6a 75 73 74 20  ocument is just 
0310: 61 6e 20 6f 76 65 72 76 69 65 77 20 6f 66 20 74  an overview of t
0320: 68 65 20 53 51 4c 20 73 79 6e 74 61 78 20 69 6d  he SQL syntax im
0330: 70 6c 65 6d 65 6e 74 65 64 0a 62 79 20 53 51 4c  plemented.by SQL
0340: 69 74 65 2e 20 20 4d 61 6e 79 20 6c 6f 77 2d 6c  ite.  Many low-l
0350: 65 76 65 6c 20 70 72 6f 64 75 63 74 69 6f 6e 73  evel productions
0360: 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 20 20 46   are omitted.  F
0370: 6f 72 20 64 65 74 61 69 6c 65 64 20 69 6e 66 6f  or detailed info
0380: 72 6d 61 74 69 6f 6e 0a 6f 6e 20 74 68 65 20 6c  rmation.on the l
0390: 61 6e 67 75 61 67 65 20 74 68 61 74 20 53 51 4c  anguage that SQL
03a0: 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 2c  ite understands,
03b0: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 6f   refer to the so
03c0: 75 72 63 65 20 63 6f 64 65 20 61 6e 64 0a 74 68  urce code and.th
03d0: 65 20 67 72 61 6d 6d 61 72 20 66 69 6c 65 20 22  e grammar file "
03e0: 70 61 72 73 65 2e 79 22 2e 3c 2f 70 3e 0a 0a 3c  parse.y".</p>..<
03f0: 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
0400: 73 79 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61  syntax documenta
0410: 74 69 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20  tion topics are 
0420: 61 76 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a  available:</p>..
0430: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30  <table width="10
0440: 30 25 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  0%" cellpadding=
0450: 22 35 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a  "5" border="0">.
0460: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22  <tr><td valign="
0470: 74 6f 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e  top"><ul>..<tcl>
0480: 0a 73 65 74 20 69 20 30 0a 73 65 74 20 6c 61 6e  .set i 0.set lan
0490: 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74 20 7b  g_section_list {
04a0: 0a 20 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c  .  {{CREATE TABL
04b0: 45 7d 20 63 72 65 61 74 65 74 61 62 6c 65 7d 0a  E} createtable}.
04c0: 20 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55    {{CREATE VIRTU
04d0: 41 4c 20 54 41 42 4c 45 7d 20 63 72 65 61 74 65  AL TABLE} create
04e0: 76 74 61 62 7d 0a 20 20 7b 7b 43 52 45 41 54 45  vtab}.  {{CREATE
04f0: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
0500: 64 65 78 7d 0a 20 20 7b 56 41 43 55 55 4d 20 76  dex}.  {VACUUM v
0510: 61 63 75 75 6d 7d 0a 20 20 7b 7b 44 52 4f 50 20  acuum}.  {{DROP 
0520: 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65  TABLE} droptable
0530: 7d 0a 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58  }.  {{DROP INDEX
0540: 7d 20 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 7b  } dropindex}.  {
0550: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0560: 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63   {REPLACE replac
0570: 65 7d 0a 20 20 7b 44 45 4c 45 54 45 20 64 65 6c  e}.  {DELETE del
0580: 65 74 65 7d 0a 20 20 7b 55 50 44 41 54 45 20 75  ete}.  {UPDATE u
0590: 70 64 61 74 65 7d 0a 20 20 7b 53 45 4c 45 43 54  pdate}.  {SELECT
05a0: 20 73 65 6c 65 63 74 7d 0a 20 20 7b 63 6f 6d 6d   select}.  {comm
05b0: 65 6e 74 20 63 6f 6d 6d 65 6e 74 7d 0a 20 20 7b  ent comment}.  {
05c0: 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 7d  EXPLAIN explain}
05d0: 0a 20 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65  .  {expression e
05e0: 78 70 72 7d 0a 20 20 7b 7b 42 45 47 49 4e 20 54  xpr}.  {{BEGIN T
05f0: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0600: 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 43 4f 4d  saction}.  {{COM
0610: 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  MIT TRANSACTION}
0620: 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20   transaction}.  
0630: 7b 7b 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f  {{END TRANSACTIO
0640: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a  N} transaction}.
0650: 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20 54 52 41    {{ROLLBACK TRA
0660: 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61  NSACTION} transa
0670: 63 74 69 6f 6e 7d 0a 20 20 7b 53 41 56 45 50 4f  ction}.  {SAVEPO
0680: 49 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20  INT savepoint}. 
0690: 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45 50   {{RELEASE SAVEP
06a0: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 7d  OINT} savepoint}
06b0: 0a 20 20 7b 50 52 41 47 4d 41 20 70 72 61 67 6d  .  {PRAGMA pragm
06c0: 61 2e 68 74 6d 6c 7d 0a 20 20 7b 7b 4f 4e 20 43  a.html}.  {{ON C
06d0: 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20  ONFLICT clause} 
06e0: 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 7b 7b 43 52  conflict}.  {{CR
06f0: 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61 74  EATE VIEW} creat
0700: 65 76 69 65 77 7d 0a 20 20 7b 7b 44 52 4f 50 20  eview}.  {{DROP 
0710: 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77 7d 0a  VIEW} dropview}.
0720: 20 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47    {{CREATE TRIGG
0730: 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65  ER} createtrigge
0740: 72 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 52 49 47  r}.  {{DROP TRIG
0750: 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72  GER} droptrigger
0760: 7d 0a 20 20 7b 7b 41 54 54 41 43 48 20 44 41 54  }.  {{ATTACH DAT
0770: 41 42 41 53 45 7d 20 61 74 74 61 63 68 7d 0a 20  ABASE} attach}. 
0780: 20 7b 7b 44 45 54 41 43 48 20 44 41 54 41 42 41   {{DETACH DATABA
0790: 53 45 7d 20 64 65 74 61 63 68 7d 0a 20 20 7b 52  SE} detach}.  {R
07a0: 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a  EINDEX reindex}.
07b0: 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d    {{ALTER TABLE}
07c0: 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20 7b   altertable}.  {
07d0: 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a  {ANALYZE} analyz
07e0: 65 7d 0a 20 20 7b 7b 49 4e 44 45 58 45 44 20 42  e}.  {{INDEXED B
07f0: 59 7d 20 69 6e 64 65 78 65 64 62 79 7d 0a 20 20  Y} indexedby}.  
0800: 7b 7b 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  {{aggregate func
0810: 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 7d 0a  tions} aggfunc}.
0820: 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f    {{core functio
0830: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 7d 0a 20 20  ns} corefunc}.  
0840: 7b 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  {{date and time 
0850: 66 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  functions} datef
0860: 75 6e 63 7d 0a 20 20 7b 6b 65 79 77 6f 72 64 73  unc}.  {keywords
0870: 20 6b 65 79 77 6f 72 64 73 7d 0a 7d 0a 73 65 74   keywords}.}.set
0880: 20 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62 72   lang_section_br
0890: 65 61 6b 20 5b 65 78 70 72 20 7b 28 5b 6c 6c 65  eak [expr {([lle
08a0: 6e 67 74 68 20 24 6c 61 6e 67 5f 73 65 63 74 69  ngth $lang_secti
08b0: 6f 6e 5f 6c 69 73 74 5d 2b 32 29 2f 33 7d 5d 0a  on_list]+2)/3}].
08c0: 66 6f 72 65 61 63 68 20 7b 73 65 63 74 69 6f 6e  foreach {section
08d0: 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20  } [lsort -index 
08e0: 30 20 2d 64 69 63 74 69 6f 6e 61 72 79 20 24 6c  0 -dictionary $l
08f0: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
0900: 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
0910: 5f 74 69 74 6c 65 20 73 5f 74 61 67 7d 20 24 73  _title s_tag} $s
0920: 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20 7b  ection {}.  if {
0930: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0940: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0950: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0960: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0970: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0980: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  tml.  }.  hd_put
0990: 73 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 5c  s "<li><a href=\
09a0: 22 24 75 72 6c 5c 22 3e 24 73 5f 74 69 74 6c 65  "$url\">$s_title
09b0: 3c 2f 61 3e 3c 2f 6c 69 3e 22 0a 20 20 69 6e 63  </a></li>".  inc
09c0: 72 20 69 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6c  r i.  if {$i==$l
09d0: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62 72 65 61  ang_section_brea
09e0: 6b 20 7c 7c 20 24 69 3d 3d 32 2a 24 6c 61 6e 67  k || $i==2*$lang
09f0: 5f 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 7d 20  _section_break} 
0a00: 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
0a10: 2f 75 6c 3e 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  /ul></td><td val
0a20: 69 67 6e 3d 5c 22 74 6f 70 5c 22 3e 3c 75 6c 3e  ign=\"top\"><ul>
0a30: 22 0a 20 20 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  ".  }.}.</tcl>.<
0a40: 2f 75 6c 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f  /ul></td></tr></
0a50: 74 61 62 6c 65 3e 0a 0a 3c 70 3e 54 68 65 20 72  table>..<p>The r
0a60: 6f 75 74 69 6e 65 73 20 5b 73 71 6c 69 74 65 33  outines [sqlite3
0a70: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 2c 20  _prepare_v2()], 
0a80: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0a90: 28 29 5d 2c 0a 5b 73 71 6c 69 74 65 33 5f 70 72  ()],.[sqlite3_pr
0aa0: 65 70 61 72 65 31 36 28 29 5d 2c 20 5b 73 71 6c  epare16()], [sql
0ab0: 69 74 65 33 5f 65 78 65 63 28 29 5d 2c 20 61 6e  ite3_exec()], an
0ac0: 64 20 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  d [sqlite3_get_t
0ad0: 61 62 6c 65 28 29 5d 20 61 63 63 65 70 74 0a 61  able()] accept.a
0ae0: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
0af0: 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d 74 2d 6c  list (sql-stmt-l
0b00: 69 73 74 29 20 77 68 69 63 68 20 69 73 20 61 20  ist) which is a 
0b10: 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70 61 72 61  semicolon-separa
0b20: 74 65 64 0a 6c 69 73 74 20 6f 66 20 73 74 61 74  ted.list of stat
0b30: 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 74 63  ements.</p>..<tc
0b40: 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
0b50: 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 3c 2f 74  sql-stmt-list</t
0b60: 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20 53 51 4c  cl>..<p>Each SQL
0b70: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68   statement in th
0b80: 65 20 73 74 61 74 65 6d 65 6e 74 20 6c 69 73 74  e statement list
0b90: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
0ba0: 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77 69 6e 67  of the.following
0bb0: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62  :</p>..<tcl>Bubb
0bc0: 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
0bd0: 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c 3e 0a  mt</tcl>..<tcl>.
0be0: 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20 7b 6e  proc Operator {n
0bf0: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
0c00: 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23  "<font color=\"#
0c10: 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e 24 6e  2c2cf0\"><big>$n
0c20: 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  ame</big></font>
0c30: 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65 72 6d  ".}.proc Nonterm
0c40: 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  inal {name} {.  
0c50: 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e 74  return "<i><font
0c60: 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34 33 34   color=\"#ff3434
0c70: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 3c  \">$name</font><
0c80: 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65 79 77  /i>".}.proc Keyw
0c90: 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72  ord {name} {.  r
0ca0: 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c  eturn "<font col
0cb0: 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 24  or=\"#2c2cf0\">$
0cc0: 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70  name</font>".}.p
0cd0: 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74 65 78  roc Example {tex
0ce0: 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 22  t} {.  hd_puts "
0cf0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
0d00: 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c 2f 62 6c  >$text</pre></bl
0d10: 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d 0a 0a 70 72  ockquote>".}..pr
0d20: 6f 63 20 53 65 63 74 69 6f 6e 20 7b 6e 61 6d 65  oc Section {name
0d30: 20 6c 61 62 65 6c 20 6b 65 79 77 6f 72 64 73 7d   label keywords}
0d40: 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 44 4f 43 0a   {.  global DOC.
0d50: 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a    hd_close_main.
0d60: 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 6c    hd_open_main l
0d70: 61 6e 67 5f 24 6c 61 62 65 6c 2e 68 74 6d 6c 0a  ang_$label.html.
0d80: 20 20 68 64 5f 68 65 61 64 65 72 20 22 53 51 4c    hd_header "SQL
0d90: 69 74 65 20 51 75 65 72 79 20 4c 61 6e 67 75 61  ite Query Langua
0da0: 67 65 3a 20 24 6e 61 6d 65 22 20 24 44 4f 43 2f  ge: $name" $DOC/
0db0: 70 61 67 65 73 2f 6c 61 6e 67 2e 69 6e 0a 20 20  pages/lang.in.  
0dc0: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0dd0: 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 68 64 5f   $keywords.  hd_
0de0: 70 75 74 73 20 7b 3c 61 20 68 72 65 66 3d 22 6c  puts {<a href="l
0df0: 61 6e 67 2e 68 74 6d 6c 22 3e 0a 20 20 20 20 20  ang.html">.     
0e00: 20 20 20 20 20 20 3c 68 32 20 61 6c 69 67 6e 3d        <h2 align=
0e10: 22 63 65 6e 74 65 72 22 3e 53 51 4c 20 41 73 20  "center">SQL As 
0e20: 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51  Understood By SQ
0e30: 4c 69 74 65 3c 2f 68 32 3e 3c 2f 61 3e 7d 0a 20  Lite</h2></a>}. 
0e40: 20 68 64 5f 70 75 74 73 20 22 3c 68 31 3e 24 6e   hd_puts "<h1>$n
0e50: 61 6d 65 3c 2f 68 31 3e 22 0a 7d 0a 0a 23 23 23  ame</h1>".}..###
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ea0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0eb0: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0ec0: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0ed0: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 41 4c  ALTER TABLE} {AL
0ee0: 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  TER}}..BubbleDia
0ef0: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0f00: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
0f10: 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
0f20: 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62  ts a limited sub
0f30: 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42  set of ALTER TAB
0f40: 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41  LE..The ALTER TA
0f50: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53  BLE command in S
0f60: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
0f70: 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20   user to rename 
0f80: 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64  a table.or to ad
0f90: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
0fa0: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
0fb0: 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ble. It is not p
0fc0: 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e 61 6d  ossible.to renam
0fd0: 65 20 61 20 63 6f 6c 75 6d 2c 20 72 65 6d 6f 76  e a colum, remov
0fe0: 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 61  e a column, or a
0ff0: 64 64 20 6f 72 20 72 65 6d 6f 76 65 20 63 6f 6e  dd or remove con
1000: 73 74 72 61 69 6e 74 73 20 66 72 6f 6d 20 61 20  straints from a 
1010: 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  table..</p>..<p>
1020: 54 68 65 20 52 45 4e 41 4d 45 20 54 4f 20 73 79  The RENAME TO sy
1030: 6e 74 61 78 20 69 73 20 75 73 65 64 20 74 6f 20  ntax is used to 
1040: 72 65 6e 61 6d 65 20 74 68 65 20 74 61 62 6c 65  rename the table
1050: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 0a   identified by .
1060: 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61 73 65  <i>&#91;database
1070: 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62 6c 65  -name.&#93;table
1080: 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f 20 3c 69 3e  -name</i> to <i>
1090: 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  new-table-name</
10a0: 69 3e 2e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  i>..This command
10b0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
10c0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
10d0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
10e0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
10f0: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
1100: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1110: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  same database.</
1120: 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 74 61  p>..<p>If the ta
1130: 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65  ble being rename
1140: 64 20 68 61 73 20 74 72 69 67 67 65 72 73 20 6f  d has triggers o
1150: 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65 6e 20  r indices, then 
1160: 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61 74 74  these remain.att
1170: 61 63 68 65 64 20 74 6f 20 74 68 65 20 74 61 62  ached to the tab
1180: 6c 65 20 61 66 74 65 72 20 69 74 20 68 61 73 20  le after it has 
1190: 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20 48 6f  been renamed. Ho
11a0: 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20  wever, if there 
11b0: 61 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65 66  are.any view def
11c0: 69 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61  initions, or sta
11d0: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
11e0: 20 62 79 20 74 72 69 67 67 65 72 73 20 74 68 61   by triggers tha
11f0: 74 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20 74  t refer to.the t
1200: 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d  able being renam
1210: 65 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e 6f  ed, these are no
1220: 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  t automatically 
1230: 6d 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65 20  modified to use 
1240: 74 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61  the new.table na
1250: 6d 65 2e 20 49 66 20 74 68 69 73 20 69 73 20 72  me. If this is r
1260: 65 71 75 69 72 65 64 2c 20 74 68 65 20 74 72 69  equired, the tri
1270: 67 67 65 72 73 20 6f 72 20 76 69 65 77 20 64 65  ggers or view de
1280: 66 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20 62  finitions must b
1290: 65 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72 65  e.dropped and re
12a0: 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
12b0: 68 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d  he new table nam
12c0: 65 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a  e by hand..</p>.
12d0: 0a 3c 70 3e 54 68 65 20 41 44 44 20 43 4f 4c 55  .<p>The ADD COLU
12e0: 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73 65  MN syntax.is use
12f0: 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  d to add a new c
1300: 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73  olumn to an exis
1310: 74 69 6e 67 20 74 61 62 6c 65 2e 0a 54 68 65 20  ting table..The 
1320: 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c  new column is al
1330: 77 61 79 73 20 61 70 70 65 6e 64 65 64 20 74 6f  ways appended to
1340: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1350: 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69 6e 67  list of existing
1360: 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b 63   columns..The [c
1370: 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c 65 20  olumn-def] rule 
1380: 64 65 66 69 6e 65 73 20 74 68 65 20 63 68 61 72  defines the char
1390: 61 63 74 65 72 69 73 74 69 63 73 20 6f 66 20 74  acteristics of t
13a0: 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a 54  he new column..T
13b0: 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d 61  he new column ma
13c0: 79 20 74 61 6b 65 20 61 6e 79 20 6f 66 20 74 68  y take any of th
13d0: 65 20 66 6f 72 6d 73 20 70 65 72 6d 69 73 73 61  e forms permissa
13e0: 62 6c 65 20 69 6e 20 61 20 5b 43 52 45 41 54 45  ble in a [CREATE
13f0: 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
1400: 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  t, with the foll
1410: 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69 6f  owing restrictio
1420: 6e 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65  ns:.<ul>.<li>The
1430: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20   column may not 
1440: 68 61 76 65 20 61 20 50 52 49 4d 41 52 59 20 4b  have a PRIMARY K
1450: 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f 6e  EY or UNIQUE con
1460: 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c  straint.</li>.<l
1470: 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  i>The column may
1480: 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66 61   not have a defa
1490: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55 52  ult value of CUR
14a0: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
14b0: 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f 72 20  NT_DATE .    or 
14c0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
14d0: 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 49 66 20 61  P.</li>.<li>If a
14e0: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
14f0: 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69 65  aint is specifie
1500: 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  d, then the colu
1510: 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a 20  mn must have a. 
1520: 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65     default value
1530: 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c   other than NULL
1540: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65  ..</ul>..<p>Note
1550: 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e 20   also that when 
1560: 61 64 64 69 6e 67 20 61 20 43 48 45 43 4b 20 63  adding a CHECK c
1570: 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 43  onstraint, the C
1580: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a  HECK constraint.
1590: 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67  is not tested ag
15a0: 61 69 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e  ainst preexistin
15b0: 67 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61  g rows of the ta
15c0: 62 6c 65 2e 0a 54 68 69 73 20 63 61 6e 20 72 65  ble..This can re
15d0: 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20  sult in a table 
15e0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61  that contains da
15f0: 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69  ta that.is in vi
1600: 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43  olation of the C
1610: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e  HECK constraint.
1620: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
1630: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
1640: 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69  t.change to vali
1650: 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74  date CHECK const
1660: 72 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61  raints as they a
1670: 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  re added.</p>..<
1680: 70 3e 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20  p>The execution 
1690: 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45  time of the ALTE
16a0: 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  R TABLE command 
16b0: 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f  is independent o
16c0: 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f.the amount of 
16d0: 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c  data in the tabl
16e0: 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41  e.  The ALTER TA
16f0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73  BLE command runs
1700: 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61   as quickly.on a
1710: 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d   table with 10 m
1720: 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69  illion rows as i
1730: 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c  t does on a tabl
1740: 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f  e with 1 row..</
1750: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44  p>..<p>After ADD
1760: 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e   COLUMN has been
1770: 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61   run on a databa
1780: 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73  se, that databas
1790: 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65  e will not.be re
17a0: 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65  adable by SQLite
17b0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 61   version 3.1.3 a
17c0: 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a  nd earlier.</p>.
17d0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
17e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1820: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41  #####.Section {A
1830: 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 20  NALYZE} analyze 
1840: 41 4e 41 4c 59 5a 45 0a 0a 42 75 62 62 6c 65 44  ANALYZE..BubbleD
1850: 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d 73  iagram analyze-s
1860: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
1870: 3e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f 6d  >The ANALYZE com
1880: 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74 61  mand gathers sta
1890: 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 69 6e  tistics about in
18a0: 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72 65 73  dices and stores
18b0: 20 74 68 65 6d 0a 69 6e 20 61 20 73 70 65 63 69   them.in a speci
18c0: 61 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  al tables in the
18d0: 20 64 61 74 61 62 61 73 65 20 77 68 65 72 65 20   database where 
18e0: 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
18f0: 7a 65 72 20 63 61 6e 20 75 73 65 0a 74 68 65 6d  zer can use.them
1900: 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62 65   to help make be
1910: 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f 69 63  tter index choic
1920: 65 73 2e 0a 49 66 20 6e 6f 20 61 72 67 75 6d 65  es..If no argume
1930: 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61  nts are given, a
1940: 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c  ll indices in al
1950: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
1960: 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65  ases are.analyze
1970: 64 2e 20 20 49 66 20 61 20 64 61 74 61 62 61 73  d.  If a databas
1980: 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20  e name is given 
1990: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c  as the argument,
19a0: 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 69 6e 20   all indices.in 
19b0: 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73  that one databas
19c0: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
19d0: 20 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   If the argument
19e0: 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   is a table name
19f0: 2c 0a 74 68 65 6e 20 6f 6e 6c 79 20 69 6e 64 69  ,.then only indi
1a00: 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ces associated w
1a10: 69 74 68 20 74 68 61 74 20 6f 6e 65 20 74 61 62  ith that one tab
1a20: 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e  le are analyzed.
1a30: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 69  </p>..<p>The ini
1a40: 74 69 61 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tial implementat
1a50: 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73  ion stores all s
1a60: 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20 73  tatistics in a s
1a70: 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65  ingle.table name
1a80: 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  d <b>sqlite_stat
1a90: 31 3c 2f 62 3e 2e 20 20 46 75 74 75 72 65 20 65  1</b>.  Future e
1aa0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20  nhancements may 
1ab0: 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f 6e 61  create.additiona
1ac0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 74 68  l tables with th
1ad0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74 74  e same name patt
1ae0: 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68 20  ern except with 
1af0: 74 68 65 20 22 31 22 0a 63 68 61 6e 67 65 64 20  the "1".changed 
1b00: 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 64  to a different d
1b10: 69 67 69 74 2e 20 20 54 68 65 20 5b 44 52 4f 50  igit.  The [DROP
1b20: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
1b30: 64 6f 65 73 0a 6e 6f 74 20 77 6f 72 6b 20 6f 6e  does.not work on
1b40: 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73   the <b>sqlite_s
1b50: 74 61 74 31 3c 2f 62 3e 20 74 61 62 6c 65 2c 0a  tat1</b> table,.
1b60: 62 75 74 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74  but all the cont
1b70: 65 6e 74 20 63 61 6e 20 62 65 20 72 65 6d 6f 76  ent can be remov
1b80: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45  ed using the [DE
1b90: 4c 45 54 45 5d 20 63 6f 6d 6d 61 6e 64 2c 0a 77  LETE] command,.w
1ba0: 68 69 63 68 20 68 61 73 20 74 68 65 20 73 61 6d  hich has the sam
1bb0: 65 20 65 66 66 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  e effect.</p>..<
1bc0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c10: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54  ###.Section {ATT
1c20: 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 61 74  ACH DATABASE} at
1c30: 74 61 63 68 20 41 54 54 41 43 48 0a 0a 42 75 62  tach ATTACH..Bub
1c40: 62 6c 65 44 69 61 67 72 61 6d 20 61 74 74 61 63  bleDiagram attac
1c50: 68 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  h-stmt 1.</tcl>.
1c60: 0a 3c 70 3e 54 68 65 20 41 54 54 41 43 48 20 44  .<p>The ATTACH D
1c70: 41 54 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e  ATABASE statemen
1c80: 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64  t adds another d
1c90: 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f  atabase .file to
1ca0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74   the current dat
1cb0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1cc0: 2e 20 20 49 66 20 74 68 65 20 66 69 6c 65 6e 61  .  If the filena
1cd0: 6d 65 20 63 6f 6e 74 61 69 6e 73 20 0a 70 75 6e  me contains .pun
1ce0: 63 74 75 61 74 69 6f 6e 20 63 68 61 72 61 63 74  ctuation charact
1cf0: 65 72 73 20 69 74 20 6d 75 73 74 20 62 65 20 71  ers it must be q
1d00: 75 6f 74 65 64 2e 20 20 54 68 65 20 64 61 74 61  uoted.  The data
1d10: 62 61 73 65 2d 6e 61 6d 65 73 20 27 6d 61 69 6e  base-names 'main
1d20: 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65  ' and .'temp' re
1d30: 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  fer to the main 
1d40: 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65  database and the
1d50: 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
1d60: 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61  or .temporary ta
1d70: 62 6c 65 73 2e 20 20 54 68 65 73 65 20 63 61 6e  bles.  These can
1d80: 6e 6f 74 20 62 65 20 64 65 74 61 63 68 65 64 2e  not be detached.
1d90: 20 20 41 74 74 61 63 68 65 64 20 64 61 74 61 62    Attached datab
1da0: 61 73 65 73 20 0a 61 72 65 20 72 65 6d 6f 76 65  ases .are remove
1db0: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44 45 54  d using the [DET
1dc0: 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c  ACH] statement.<
1dd0: 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e  /p>..<p>You cann
1de0: 6f 74 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  ot create a new 
1df0: 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 73  table with the s
1e00: 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 20 74 61  ame name as a ta
1e10: 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74 74 61 63  ble in .an attac
1e20: 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 62 75  hed database, bu
1e30: 74 20 79 6f 75 20 63 61 6e 20 61 74 74 61 63 68  t you can attach
1e40: 20 61 20 64 61 74 61 62 61 73 65 20 77 68 69 63   a database whic
1e50: 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61 62 6c 65  h contains.table
1e60: 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 61 72  s whose names ar
1e70: 65 20 64 75 70 6c 69 63 61 74 65 73 20 6f 66 20  e duplicates of 
1e80: 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6d 61  tables in the ma
1e90: 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 49 74  in database.  It
1ea0: 20 69 73 20 0a 61 6c 73 6f 20 70 65 72 6d 69 73   is .also permis
1eb0: 73 69 62 6c 65 20 74 6f 20 61 74 74 61 63 68 20  sible to attach 
1ec0: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
1ed0: 65 20 66 69 6c 65 20 6d 75 6c 74 69 70 6c 65 20  e file multiple 
1ee0: 74 69 6d 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  times.</p>..<p>T
1ef0: 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61  ables in an atta
1f00: 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61  ched database ca
1f10: 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f  n be referred to
1f20: 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61   using the synta
1f30: 78 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  x .<i>database-n
1f40: 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ame.table-name</
1f50: 69 3e 2e 20 20 49 66 20 61 6e 20 61 74 74 61 63  i>.  If an attac
1f60: 68 65 64 20 74 61 62 6c 65 20 64 6f 65 73 6e 27  hed table doesn'
1f70: 74 20 68 61 76 65 20 0a 61 20 64 75 70 6c 69 63  t have .a duplic
1f80: 61 74 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  ate table name i
1f90: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
1fa0: 61 73 65 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  ase, it does not
1fb0: 20 72 65 71 75 69 72 65 20 61 20 0a 3c 69 3e 64   require a .<i>d
1fc0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
1fd0: 20 70 72 65 66 69 78 2e 20 20 57 68 65 6e 20 61   prefix.  When a
1fe0: 20 64 61 74 61 62 61 73 65 20 69 73 20 61 74 74   database is att
1ff0: 61 63 68 65 64 2c 20 61 6c 6c 20 6f 66 20 69 74  ached, all of it
2000: 73 20 0a 74 61 62 6c 65 73 20 77 68 69 63 68 20  s .tables which 
2010: 64 6f 6e 27 74 20 68 61 76 65 20 64 75 70 6c 69  don't have dupli
2020: 63 61 74 65 20 6e 61 6d 65 73 20 62 65 63 6f 6d  cate names becom
2030: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 61  e the default ta
2040: 62 6c 65 0a 6f 66 20 74 68 61 74 20 6e 61 6d 65  ble.of that name
2050: 2e 20 20 41 6e 79 20 74 61 62 6c 65 73 20 6f 66  .  Any tables of
2060: 20 74 68 61 74 20 6e 61 6d 65 20 61 74 74 61 63   that name attac
2070: 68 65 64 20 61 66 74 65 72 77 61 72 64 73 20 72  hed afterwards r
2080: 65 71 75 69 72 65 20 74 68 65 0a 64 61 74 61 62  equire the.datab
2090: 61 73 65 20 70 72 65 66 69 78 2e 20 49 66 20 74  ase prefix. If t
20a0: 68 65 20 64 65 66 61 75 6c 74 20 74 61 62 6c 65  he default table
20b0: 20 6f 66 20 61 20 67 69 76 65 6e 20 6e 61 6d 65   of a given name
20c0: 20 69 73 20 64 65 74 61 63 68 65 64 2c 20 74 68   is detached, th
20d0: 65 6e 0a 74 68 65 20 6c 61 73 74 20 74 61 62 6c  en.the last tabl
20e0: 65 20 6f 66 20 74 68 61 74 20 6e 61 6d 65 20 61  e of that name a
20f0: 74 74 61 63 68 65 64 20 62 65 63 6f 6d 65 73 20  ttached becomes 
2100: 74 68 65 20 6e 65 77 20 64 65 66 61 75 6c 74 2e  the new default.
2110: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e 73 61  </p>..<p>.Transa
2120: 63 74 69 6f 6e 73 20 69 6e 76 6f 6c 76 69 6e 67  ctions involving
2130: 20 6d 75 6c 74 69 70 6c 65 20 61 74 74 61 63 68   multiple attach
2140: 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
2150: 20 61 74 6f 6d 69 63 2c 0a 61 73 73 75 6d 69 6e   atomic,.assumin
2160: 67 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20  g that the main 
2170: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
2180: 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 2e 20 20 49  "[:memory:]".  I
2190: 66 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62  f the main.datab
21a0: 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a  ase is ":memory:
21b0: 22 20 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74  " then .transact
21c0: 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f  ions continue to
21d0: 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69   be atomic withi
21e0: 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64 75 61  n each individua
21f0: 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  l.database file.
2200: 20 42 75 74 20 69 66 20 74 68 65 20 68 6f 73 74   But if the host
2210: 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65   computer crashe
2220: 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a  s in the middle.
2230: 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68  of a [COMMIT] wh
2240: 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  ere two or more 
2250: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61  database files a
2260: 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65  re updated,.some
2270: 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20   of those files 
2280: 6d 69 67 68 74 20 67 65 74 20 74 68 65 20 63 68  might get the ch
2290: 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74 68 65  anges where othe
22a0: 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 0a 3c 2f  rs.might not..</
22b0: 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 69 73 20  p>..<p>There is 
22c0: 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6c  a compile-time l
22d0: 69 6d 69 74 20 6f 66 20 5b 53 51 4c 49 54 45 5f  imit of [SQLITE_
22e0: 4d 41 58 5f 41 54 54 41 43 48 45 44 5d 0a 61 74  MAX_ATTACHED].at
22f0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2300: 66 69 6c 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  files.</p>..<tcl
2310: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2360: 23 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e  #.Section {BEGIN
2370: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
2380: 61 6e 73 61 63 74 69 6f 6e 20 7b 42 45 47 49 4e  ansaction {BEGIN
2390: 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b   COMMIT ROLLBACK
23a0: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
23b0: 20 62 65 67 69 6e 2d 73 74 6d 74 0a 42 75 62 62   begin-stmt.Bubb
23c0: 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74  leDiagram commit
23d0: 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67  -stmt.BubbleDiag
23e0: 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d  ram rollback-stm
23f0: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 4e 6f  t.</tcl>..<p>.No
2400: 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
2410: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
2420: 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74 68  base except with
2430: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
2440: 2e 0a 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68  ..Any command th
2450: 61 74 20 63 68 61 6e 67 65 73 20 74 68 65 20 64  at changes the d
2460: 61 74 61 62 61 73 65 20 28 62 61 73 69 63 61 6c  atabase (basical
2470: 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d  ly, any SQL comm
2480: 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b  and.other than [
2490: 53 45 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75  SELECT]) will au
24a0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72  tomatically star
24b0: 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
24c0: 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c  if.one is not al
24d0: 72 65 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e  ready in effect.
24e0: 20 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20    Automatically 
24f0: 73 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74  started transact
2500: 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74  ions.are committ
2510: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
2520: 20 71 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e   query finishes.
2530: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e 73  .</p>..<p>.Trans
2540: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73  actions can be s
2550: 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20  tarted manually 
2560: 75 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a  using the BEGIN.
2570: 63 6f 6d 6d 61 6e 64 2e 20 20 53 75 63 68 20 74  command.  Such t
2580: 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61  ransactions usua
2590: 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69  lly persist unti
25a0: 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49  l the next.COMMI
25b0: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  T or ROLLBACK co
25c0: 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72  mmand.  But a tr
25d0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
25e0: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
25f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2600: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
2610: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
2620: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
2630: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
2640: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
2650: 73 70 65 63 69 66 69 65 64 2e 0a 53 65 65 20 74  specified..See t
2660: 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  he documentation
2670: 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46   on the [ON CONF
2680: 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72  LICT].clause for
2690: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
26a0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
26b0: 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c  e ROLLBACK.confl
26c0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
26d0: 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a  lgorithm..</p>..
26e0: 3c 70 3e 0a 45 4e 44 20 54 52 41 4e 53 41 43 54  <p>.END TRANSACT
26f0: 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ION is an alias 
2700: 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e  for COMMIT..</p>
2710: 0a 0a 3c 70 3e 54 72 61 6e 73 61 63 74 69 6f 6e  ..<p>Transaction
2720: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
2730: 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64  BEGIN...COMMIT d
2740: 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 46 6f 72 20  o not nest..For 
2750: 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63 74 69  nested transacti
2760: 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b 53 41  ons, use the [SA
2770: 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b 52 45  VEPOINT] and [RE
2780: 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e  LEASE] commands.
2790: 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50 4f 49  .The "TO SAVEPOI
27a0: 4e 54 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 22 20  NT <i>name</i>" 
27b0: 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52 4f  clause of the RO
27c0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 73  LLBACK command s
27d0: 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e 74  hown.in the synt
27e0: 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65  ax diagram above
27f0: 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63 61   is only applica
2800: 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49 4e  ble to [SAVEPOIN
2810: 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  T].transactions.
2820: 20 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20    An attempt to 
2830: 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47 49 4e  invoke the BEGIN
2840: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 0a   command within.
2850: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
2860: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
2870: 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c 65 73  error, regardles
2880: 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74 68 65  s of whether.the
2890: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73   transaction was
28a0: 20 73 74 61 72 74 65 64 20 62 79 20 5b 53 41 56   started by [SAV
28b0: 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70 72 69  EPOINT] or a pri
28c0: 6f 72 20 42 45 47 49 4e 2e 0a 54 68 65 20 43 4f  or BEGIN..The CO
28d0: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  MMIT command and
28e0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
28f0: 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68  mmand without th
2900: 65 20 54 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b  e TO clause.work
2910: 20 74 68 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41   the same on [SA
2920: 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63  VEPOINT] transac
2930: 74 69 6f 6e 73 20 61 73 20 74 68 65 79 20 64 6f  tions as they do
2940: 20 77 69 74 68 20 74 72 61 6e 73 61 63 74 69 6f   with transactio
2950: 6e 73 0a 73 74 61 72 74 65 64 20 62 79 20 42 45  ns.started by BE
2960: 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72  GIN.</p>..<p>.Tr
2970: 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62  ansactions can b
2980: 65 20 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65  e deferred, imme
2990: 64 69 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73  diate, or exclus
29a0: 69 76 65 2e 20 20 0a 54 68 65 20 64 65 66 61 75  ive.  .The defau
29b0: 6c 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62  lt transaction b
29c0: 65 68 61 76 69 6f 72 20 69 73 20 64 65 66 65 72  ehavior is defer
29d0: 72 65 64 2e 0a 44 65 66 65 72 72 65 64 20 6d 65  red..Deferred me
29e0: 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b  ans that no lock
29f0: 73 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f  s are acquired.o
2a00: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  n the database u
2a10: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
2a20: 65 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73  e is first acces
2a30: 73 65 64 2e 20 20 54 68 75 73 20 77 69 74 68 20  sed.  Thus with 
2a40: 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e 73  a.deferred trans
2a50: 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49  action, the BEGI
2a60: 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65  N statement itse
2a70: 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 2e  lf does nothing.
2a80: 20 20 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20    Locks.are not 
2a90: 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74  acquired until t
2aa0: 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f 72  he first read or
2ab0: 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e   write operation
2ac0: 2e 20 20 54 68 65 20 66 69 72 73 74 20 72 65 61  .  The first rea
2ad0: 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69  d.operation agai
2ae0: 6e 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63  nst a database c
2af0: 72 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44  reates a [SHARED
2b00: 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66  ] lock and the f
2b10: 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61  irst.write opera
2b20: 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b  tion creates a [
2b30: 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20  RESERVED] lock. 
2b40: 20 20 42 65 63 61 75 73 65 20 74 68 65 20 61 63    Because the ac
2b50: 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63  quisition of.loc
2b60: 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20 75  ks is deferred u
2b70: 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65  ntil they are ne
2b80: 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73  eded, it is poss
2b90: 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
2ba0: 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r.thread or proc
2bb0: 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65  ess could create
2bc0: 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61 6e   a separate tran
2bd0: 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74  saction and writ
2be0: 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73  e to.the databas
2bf0: 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47 49  e after the BEGI
2c00: 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  N on the current
2c10: 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65 63   thread has exec
2c20: 75 74 65 64 2e 0a 49 66 20 74 68 65 20 74 72 61  uted..If the tra
2c30: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65  nsaction is imme
2c40: 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53  diate, then [RES
2c50: 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65  ERVED] locks.are
2c60: 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c   acquired on all
2c70: 20 64 61 74 61 62 61 73 65 73 20 61 73 20 73 6f   databases as so
2c80: 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49 4e 20  on as the BEGIN 
2c90: 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75  command is.execu
2ca0: 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69  ted, without wai
2cb0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74  ting for the.dat
2cc0: 61 62 61 73 65 20 74 6f 20 62 65 20 75 73 65 64  abase to be used
2cd0: 2e 20 20 41 66 74 65 72 20 61 20 42 45 47 49 4e  .  After a BEGIN
2ce0: 20 49 4d 4d 45 44 49 41 54 45 2c 20 79 6f 75 20   IMMEDIATE, you 
2cf0: 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74  are guaranteed t
2d00: 68 61 74 0a 6e 6f 20 6f 74 68 65 72 20 74 68 72  hat.no other thr
2d10: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 77  ead or process w
2d20: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77  ill be able to w
2d30: 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61  rite to the data
2d40: 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47  base or.do a BEG
2d50: 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20  IN IMMEDIATE or 
2d60: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e  BEGIN EXCLUSIVE.
2d70: 20 20 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65    Other processe
2d80: 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74  s can continue.t
2d90: 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20  o read from the 
2da0: 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65  database, howeve
2db0: 72 2e 20 20 41 6e 20 65 78 63 6c 75 73 69 76 65  r.  An exclusive
2dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75   transaction cau
2dd0: 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20  ses.[EXCLUSIVE] 
2de0: 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75  locks to be acqu
2df0: 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61  ired on all data
2e00: 62 61 73 65 73 2e 20 20 41 66 74 65 72 20 61 20  bases.  After a 
2e10: 42 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c  BEGIN.EXCLUSIVE,
2e20: 20 79 6f 75 20 61 72 65 20 67 75 61 72 61 6e 74   you are guarant
2e30: 65 65 64 20 74 68 61 74 20 6e 6f 20 6f 74 68 65  eed that no othe
2e40: 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r thread or proc
2e50: 65 73 73 20 77 69 6c 6c 0a 62 65 20 61 62 6c 65  ess will.be able
2e60: 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74   to read or writ
2e70: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  e the database u
2e80: 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63  ntil the transac
2e90: 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65  tion is.complete
2ea0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 6e 20 69  ..</p>..<p>.An i
2eb0: 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74  mplicit transact
2ec0: 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69  ion (a transacti
2ed0: 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72 74  on that is start
2ee0: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
2ef0: 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74  ,.not a transact
2f00: 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20 42  ion started by B
2f10: 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74  EGIN) is committ
2f20: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
2f30: 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61   when.the last a
2f40: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20  ctive statement 
2f50: 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61  finishes.  A sta
2f60: 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20  tement finishes 
2f70: 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65  when its.prepare
2f80: 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b  d statement is [
2f90: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20  sqlite3_reset() 
2fa0: 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c  | reset] or.[sql
2fb0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20  ite3_finalize() 
2fc0: 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41  | finalized].  A
2fd0: 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f  n open [sqlite3_
2fe0: 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69  blob] used for.i
2ff0: 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20  ncremental BLOB 
3000: 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e  I/O counts as an
3010: 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74   unfinished stat
3020: 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c  ement.  The [sql
3030: 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73  ite3_blob].finis
3040: 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b  hes when it is [
3050: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f  sqlite3_blob_clo
3060: 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 0a  se() | closed]..
3070: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 65 78  </p>..<p>.The ex
3080: 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f  plicit COMMIT co
3090: 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64  mmand runs immed
30a0: 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20  iately, even if 
30b0: 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e  there are.pendin
30c0: 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  g [SELECT] state
30d0: 6d 65 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c  ments.  However,
30e0: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70 65   if there are pe
30f0: 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65 72  nding.write oper
3100: 61 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d  ations, the COMM
3110: 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20  IT command.will 
3120: 66 61 69 6c 20 77 69 74 68 20 61 20 65 72 72 6f  fail with a erro
3130: 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42  r code [SQLITE_B
3140: 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  USY]..</p>..<p>.
3150: 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78  An attempt to ex
3160: 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67  ecute COMMIT mig
3170: 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74 20 69  ht also result i
3180: 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42 55 53  n an [SQLITE_BUS
3190: 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 69  Y] return code.i
31a0: 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74 68 72  f an another thr
31b0: 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20 68  ead or process h
31c0: 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c 6f 63  as a [shared loc
31d0: 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  k] on the databa
31e0: 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74 65  se.that prevente
31f0: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
3200: 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74 65  rom being update
3210: 64 2e 20 20 57 68 65 6e 20 43 4f 4d 4d 49 54 20  d.  When COMMIT 
3220: 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a 77 61  fails in this.wa
3230: 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  y, the transacti
3240: 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76  on remains activ
3250: 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d 49 54  e and the COMMIT
3260: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 64 20   can be retried 
3270: 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68 65 20  later.after the 
3280: 72 65 61 64 65 72 20 68 61 73 20 68 61 64 20 61  reader has had a
3290: 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65 61 72   chance to clear
32a0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
32b0: 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66 61  ROLLBACK will fa
32c0: 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
32d0: 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42 55   code [SQLITE_BU
32e0: 53 59 5d 20 69 66 20 74 68 65 72 65 0a 61 72 65  SY] if there.are
32f0: 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71 75 65   any pending que
3300: 72 69 65 73 2e 20 20 42 6f 74 68 20 72 65 61 64  ries.  Both read
3310: 2d 6f 6e 6c 79 20 61 6e 64 20 72 65 61 64 2f 77  -only and read/w
3320: 72 69 74 65 20 71 75 65 72 69 65 73 20 77 69 6c  rite queries wil
3330: 6c 0a 63 61 75 73 65 20 61 20 52 4f 4c 4c 42 41  l.cause a ROLLBA
3340: 43 4b 20 74 6f 20 66 61 69 6c 2e 20 20 41 20 52  CK to fail.  A R
3350: 4f 4c 4c 42 41 43 4b 20 6d 75 73 74 20 66 61 69  OLLBACK must fai
3360: 6c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 70  l if there are p
3370: 65 6e 64 69 6e 67 0a 72 65 61 64 20 6f 70 65 72  ending.read oper
3380: 61 74 69 6f 6e 73 20 28 75 6e 6c 69 6b 65 20 43  ations (unlike C
3390: 4f 4d 4d 49 54 20 77 68 69 63 68 20 63 61 6e 20  OMMIT which can 
33a0: 73 75 63 63 65 65 64 29 20 62 65 63 61 75 73 65  succeed) because
33b0: 20 62 61 64 20 74 68 69 6e 67 73 0a 77 69 6c 6c   bad things.will
33c0: 20 68 61 70 70 65 6e 20 69 66 20 6d 65 6d 6f 72   happen if memor
33d0: 79 20 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64  y image of the d
33e0: 61 74 61 62 61 73 65 20 69 73 20 63 68 61 6e 67  atabase is chang
33f0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
3400: 72 0a 61 6e 20 61 63 74 69 76 65 20 71 75 65 72  r.an active quer
3410: 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20  y..</p>..<p>.If 
3420: 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  [PRAGMA journal_
3430: 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20  mode] is set to 
3440: 4f 46 46 20 28 74 68 75 73 20 64 69 73 61 62 6c  OFF (thus disabl
3450: 69 6e 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ing the rollback
3460: 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74   journal.file) t
3470: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
3480: 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b   of the ROLLBACK
3490: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65   command is unde
34a0: 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  fined..</p>..<h3
34b0: 3e 52 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72  >Response To Err
34c0: 6f 72 73 20 57 69 74 68 69 6e 20 41 20 54 72 61  ors Within A Tra
34d0: 6e 73 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  nsaction</h3>..<
34e0: 70 3e 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e  p>If certain kin
34f0: 64 73 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63  ds of errors occ
3500: 75 72 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  ur within a tran
3510: 73 61 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61  saction, the.tra
3520: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20  nsaction may or 
3530: 6d 61 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65  may not be rolle
3540: 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63  d back automatic
3550: 61 6c 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72  ally.  The.error
3560: 73 20 74 68 61 74 20 63 61 75 73 65 20 74 68 65  s that cause the
3570: 20 62 65 68 61 76 69 6f 72 20 69 6e 63 6c 75 64   behavior includ
3580: 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69  e:</p>..<ul>.<li
3590: 3e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a  > [SQLITE_FULL]:
35a0: 20 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73   database or dis
35b0: 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c  k full.<li> [SQL
35c0: 49 54 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b  ITE_IOERR]: disk
35d0: 20 49 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20   I/O error.<li> 
35e0: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64  [SQLITE_BUSY]: d
35f0: 61 74 61 62 61 73 65 20 69 6e 20 75 73 65 20 62  atabase in use b
3600: 79 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73  y another proces
3610: 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e  s.<li> [SQLITE_N
3620: 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65  OMEM]: out or me
3630: 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  mory.<li> [SQLIT
3640: 45 5f 49 4e 54 45 52 52 55 50 54 5d 3a 20 70 72  E_INTERRUPT]: pr
3650: 6f 63 65 73 73 69 6e 67 20 5b 73 71 6c 69 74 65  ocessing [sqlite
3660: 33 5f 69 6e 74 65 72 72 75 70 74 7c 69 6e 74 65  3_interrupt|inte
3670: 72 72 75 70 74 65 64 5d 0a 20 20 20 20 20 62 79  rrupted].     by
3680: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 71   application req
3690: 75 65 73 74 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 0a  uest.</ul>..<p>.
36a0: 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65  For all of these
36b0: 20 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20   errors, SQLite 
36c0: 61 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f  attempts to undo
36d0: 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74   just the one st
36e0: 61 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77  atement.it was w
36f0: 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65  orking on and le
3700: 61 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ave changes from
3710: 20 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74   prior statement
3720: 73 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d  s within the.sam
3730: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e  e transaction in
3740: 74 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tact and continu
3750: 65 20 77 69 74 68 20 74 68 65 20 74 72 61 6e 73  e with the trans
3760: 61 63 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72  action.  However
3770: 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  , .depending on 
3780: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
3790: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e  ing evaluated an
37a0: 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77  d the point at w
37b0: 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f  hich the.error o
37c0: 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20  ccurs, it might 
37d0: 62 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72  be necessary for
37e0: 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62   SQLite to rollb
37f0: 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74  ack and.cancel t
3800: 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  he entire transa
3810: 63 74 69 6f 6e 2e 20 20 41 6e 20 61 70 70 6c 69  ction.  An appli
3820: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
3830: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
3840: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
3850: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
3860: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
3870: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
3880: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
3890: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
38a0: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
38b0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
38c0: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
38d0: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
38e0: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
38f0: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
3900: 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 66 20 74 68   command.  If th
3910: 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 68  e .transaction h
3920: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
3930: 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f  rolled back auto
3940: 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68 65  matically.by the
3950: 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c   error response,
3960: 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41   then the ROLLBA
3970: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  CK command will 
3980: 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72 72  fail with an.err
3990: 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d 20  or, but no harm 
39a0: 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68 69  is caused by thi
39b0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72  s.</p>..<p>Futur
39c0: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
39d0: 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64 20  Lite may extend 
39e0: 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72 6f  the list of erro
39f0: 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20 63  rs which.might c
3a00: 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20 74  ause automatic t
3a10: 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62  ransaction rollb
3a20: 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65 72  ack.  Future ver
3a30: 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
3a40: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68 65  might change the
3a50: 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e   error response.
3a60: 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c    In particular,
3a70: 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74   we may.choose t
3a80: 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20 69  o simplify the i
3a90: 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74 75  nterface in futu
3aa0: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
3ab0: 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e 67  QLite by.causing
3ac0: 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f 76   the errors abov
3ad0: 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e  e to force an un
3ae0: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c  conditional roll
3af0: 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  back.</p>..<tcl>
3b00: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
3b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3b50: 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f  .Section {SAVEPO
3b60: 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b  INT} savepoint {
3b70: 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41 53  SAVEPOINT RELEAS
3b80: 45 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  E}..BubbleDiagra
3b90: 6d 20 73 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74  m savepoint-stmt
3ba0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
3bb0: 65 6c 65 61 73 65 2d 73 74 6d 74 0a 42 75 62 62  elease-stmt.Bubb
3bc0: 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61  leDiagram rollba
3bd0: 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ck-stmt.</tcl>..
3be0: 3c 70 3e 53 41 56 45 50 4f 49 4e 54 73 20 61 72  <p>SAVEPOINTs ar
3bf0: 65 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72  e a method of cr
3c00: 65 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69  eating transacti
3c10: 6f 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a  ons, similar to.
3c20: 5b 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d  [BEGIN] and [COM
3c30: 4d 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61  MIT], except tha
3c40: 74 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  t the SAVEPOINT 
3c50: 61 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  and RELEASE comm
3c60: 61 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61  ands.are named a
3c70: 6e 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64  nd may be nested
3c80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 53 41  .</p>..<p>The SA
3c90: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
3ca0: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
3cb0: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
3cc0: 6e 61 6d 65 2e 0a 54 68 65 20 74 72 61 6e 73 61  name..The transa
3cd0: 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64  ction names need
3ce0: 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a   not be unique..
3cf0: 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20  A SAVEPOINT can 
3d00: 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68 65  be started eithe
3d10: 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73  r within or outs
3d20: 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d  ide of.a [BEGIN]
3d30: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 20 20 57 68  ...[COMMIT].  Wh
3d40: 65 6e 20 61 20 53 41 56 45 50 4f 49 4e 54 20 69  en a SAVEPOINT i
3d50: 73 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74  s the outer-most
3d60: 20 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69   savepoint.and i
3d70: 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e 20  t is not within 
3d80: 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d  a [BEGIN]...[COM
3d90: 4d 49 54 5d 20 74 68 65 6e 20 74 68 65 20 62 65  MIT] then the be
3da0: 68 61 76 69 6f 72 20 69 73 20 74 68 65 0a 73 61  havior is the.sa
3db0: 6d 65 20 61 73 20 42 45 47 49 4e 20 44 45 46 45  me as BEGIN DEFE
3dc0: 52 52 45 44 20 54 52 41 4e 53 41 43 54 49 4f 4e  RRED TRANSACTION
3dd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 52 4f  .</p>..<p>The RO
3de0: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
3df0: 64 20 72 65 76 65 72 74 73 20 74 68 65 20 73 74  d reverts the st
3e00: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
3e10: 61 73 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74  ase back to what
3e20: 0a 69 74 20 77 61 73 20 6a 75 73 74 20 61 66 74  .it was just aft
3e30: 65 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  er the correspon
3e40: 64 69 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20  ding SAVEPOINT. 
3e50: 20 4e 6f 74 65 20 74 68 61 74 20 75 6e 6c 69 6b   Note that unlik
3e60: 65 20 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52 4f  e that.plain [RO
3e70: 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20  LLBACK] command 
3e80: 28 77 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20  (without the TO 
3e90: 6b 65 79 77 6f 72 64 29 20 74 68 65 20 52 4f 4c  keyword) the ROL
3ea0: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
3eb0: 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65 6c  .does not cancel
3ec0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
3ed0: 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 20 63 61  .  Instead of ca
3ee0: 6e 63 65 6c 6c 69 6e 67 20 74 68 65 20 74 72 61  ncelling the tra
3ef0: 6e 73 61 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f  nsaction,.the RO
3f00: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
3f10: 64 20 72 65 73 74 61 72 74 73 20 74 68 65 20 74  d restarts the t
3f20: 72 61 6e 73 61 63 74 69 6f 6e 20 61 67 61 69 6e  ransaction again
3f30: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
3f40: 67 2e 0a 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69  g..All interveni
3f50: 6e 67 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72  ng SAVEPOINTs ar
3f60: 65 20 63 61 6e 63 65 6c 6c 65 64 2c 20 68 6f 77  e cancelled, how
3f70: 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ever.</p>..<p>Th
3f80: 65 20 52 45 4c 45 41 53 45 20 69 73 20 6c 69 6b  e RELEASE is lik
3f90: 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72  e a [COMMIT] for
3fa0: 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68   a SAVEPOINT..Th
3fb0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
3fc0: 64 20 63 61 75 73 65 73 20 61 6c 6c 20 73 61 76  d causes all sav
3fd0: 65 70 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f 20  epoints back to 
3fe0: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
3ff0: 65 20 66 69 72 73 74 0a 73 61 76 65 70 6f 69 6e  e first.savepoin
4000: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
4010: 67 20 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d  g name to be rem
4020: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 74 72  oved from the tr
4030: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e  ansaction stack.
4040: 20 20 54 68 65 0a 52 45 4c 45 41 53 45 20 6f 66    The.RELEASE of
4050: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4060: 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63  ction.does not c
4070: 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73  ause any changes
4080: 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74   to be written t
4090: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
40a0: 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72  ile; it merely.r
40b0: 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74  emoves savepoint
40c0: 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73  s from the trans
40d0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63  action stack suc
40e0: 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20  h that it is.no 
40f0: 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20  longer possible 
4100: 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74  to ROLLBACK TO t
4110: 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e  hose savepoints.
4120: 0a 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  .If a RELEASE co
4130: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
4140: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
4150: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
4160: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4170: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
4180: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
4190: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
41a0: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 54 68 65 20 5b   [COMMIT]..The [
41b0: 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20  COMMIT] command 
41c0: 6d 61 79 20 75 73 65 64 20 74 6f 20 72 65 6c 65  may used to rele
41d0: 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e  ase all savepoin
41e0: 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68  ts and.commit th
41f0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76  e transaction ev
4200: 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e 73 61  en if the transa
4210: 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e  ction was origin
4220: 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20  ally started.by 
4230: 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d  a SAVEPOINT comm
4240: 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61  and instead of a
4250: 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64   [BEGIN] command
4260: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65  .</p>..<p>If the
4270: 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20   savepoint-name 
4280: 69 6e 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d  in a RELEASE com
4290: 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61  mand does not ma
42a0: 74 63 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e  tch any.savepoin
42b0: 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74  t currently in t
42c0: 68 65 20 74 72 61 6e 61 63 74 69 6f 6e 20 73 74  he tranaction st
42d0: 61 63 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61 76  ack, then no sav
42e0: 65 70 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c 65  epoints are.rele
42f0: 61 73 65 64 2c 20 74 68 65 20 64 61 74 61 62 61  ased, the databa
4300: 73 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2c  se is unchanged,
4310: 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45   and the RELEASE
4320: 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73   command returns
4330: 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a  .an error.</p>..
4340: 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 61 6e 20  <p>Note that an 
4350: 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f  inner transactio
4360: 6e 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74 20 28  n might commit (
4370: 75 73 69 6e 67 20 74 68 65 20 52 45 4c 45 41 53  using the RELEAS
4380: 45 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74  E command).but t
4390: 68 65 6e 20 6c 61 74 65 72 20 68 61 76 65 20 69  hen later have i
43a0: 74 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62  ts work undone b
43b0: 79 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20  y a ROLLBACK in 
43c0: 61 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63  an outer transac
43d0: 74 69 6f 6e 2e 0a 41 20 70 6f 77 65 72 20 66 61  tion..A power fa
43e0: 69 6c 75 72 65 20 6f 72 20 70 72 6f 67 72 61 6d  ilure or program
43f0: 20 63 72 61 73 68 20 6f 72 20 4f 53 20 63 72 61   crash or OS cra
4400: 73 68 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68  sh will cause th
4410: 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61  e outer-most.tra
4420: 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c  nsaction to roll
4430: 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c  back, undoing al
4440: 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  l changes that h
4450: 61 76 65 20 6f 63 63 75 72 72 65 64 20 77 69 74  ave occurred wit
4460: 68 69 6e 0a 74 68 61 74 20 6f 75 74 65 72 20 74  hin.that outer t
4470: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e  ransaction, even
4480: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
4490: 76 65 20 73 75 70 70 6f 73 65 64 6c 79 20 62 65  ve supposedly be
44a0: 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62  en "committed".b
44b0: 79 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  y the RELEASE co
44c0: 6d 6d 61 6e 64 2e 20 20 43 6f 6e 74 65 6e 74 20  mmand.  Content 
44d0: 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  is not actually 
44e0: 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65  committed on the
44f0: 20 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65   disk .until the
4500: 20 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73   outermost trans
4510: 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c  action commits.<
4520: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  /p>..<p>There ar
4530: 65 20 73 65 76 65 72 61 6c 20 77 61 79 73 20 6f  e several ways o
4540: 66 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74  f thinking about
4550: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
4560: 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a  mand:</p>..<ul>.
4570: 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f  <li><p>.Some peo
4580: 70 6c 65 20 76 69 65 77 20 52 45 4c 45 41 53 45  ple view RELEASE
4590: 20 61 73 20 74 68 65 20 65 71 75 69 76 61 6c 65   as the equivale
45a0: 6e 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72  nt of COMMIT for
45b0: 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68   a SAVEPOINT..Th
45c0: 69 73 20 69 73 20 61 6e 20 61 63 63 65 70 74 61  is is an accepta
45d0: 62 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65  ble point of vie
45e0: 77 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65  w as long as one
45f0: 20 72 65 6d 65 6d 62 65 72 73 20 74 68 61 74 20   remembers that 
4600: 74 68 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d  the.changes comm
4610: 69 74 74 65 64 20 62 79 20 61 6e 20 69 6e 6e 65  itted by an inne
4620: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69  r transaction mi
4630: 67 68 74 20 6c 61 74 65 72 20 62 65 20 75 6e 64  ght later be und
4640: 6f 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63  one by a.rollbac
4650: 6b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72  k in an outer tr
4660: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f  ansaction.</p></
4670: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f  li>..<li><p>.Ano
4680: 74 68 65 72 20 76 69 65 77 20 6f 66 20 52 45 4c  ther view of REL
4690: 45 41 53 45 20 69 73 20 74 68 61 74 20 69 74 20  EASE is that it 
46a0: 6d 65 72 67 65 73 20 61 20 6e 61 6d 65 64 20 74  merges a named t
46b0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20  ransaction into 
46c0: 69 74 73 0a 70 61 72 65 6e 74 20 74 72 61 6e 73  its.parent trans
46d0: 61 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20  action, so that 
46e0: 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61  the named transa
46f0: 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61  ction and its pa
4700: 72 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65 20  rent become.the 
4710: 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  same transaction
4720: 2e 20 20 41 66 74 65 72 20 52 45 4c 45 41 53 45  .  After RELEASE
4730: 2c 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e  , the named tran
4740: 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20  saction and its 
4750: 70 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d  parent.will comm
4760: 69 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  it or rollback t
4770: 6f 67 65 74 68 65 72 2c 20 77 68 61 74 65 76 65  ogether, whateve
4780: 72 20 74 68 65 69 72 20 66 61 74 65 20 6d 61 79  r their fate may
4790: 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a   be..</p></li>..
47a0: 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20  <li><p>.One can 
47b0: 61 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61  also think of sa
47c0: 76 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72  vepoints as."mar
47d0: 6b 73 22 20 69 6e 20 74 68 65 20 74 72 61 6e 73  ks" in the trans
47e0: 61 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e  action timeline.
47f0: 20 20 49 6e 20 74 68 69 73 20 76 69 65 77 2c 20    In this view, 
4800: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  the SAVEPOINT co
4810: 6d 6d 61 6e 64 0a 63 72 65 61 74 65 73 20 61 20  mmand.creates a 
4820: 6e 65 77 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f  new mark, the RO
4830: 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e  LLBACK TO comman
4840: 64 20 72 65 77 69 6e 64 73 20 74 68 65 20 74 69  d rewinds the ti
4850: 6d 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61  meline back.to a
4860: 20 70 6f 69 6e 74 20 6a 75 73 74 20 61 66 74 65   point just afte
4870: 72 20 74 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b  r the named mark
4880: 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53  , and the RELEAS
4890: 45 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73  E command.erases
48a0: 20 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68 65 20   marks from the 
48b0: 74 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75 74  timeline without
48c0: 20 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67   actually making
48d0: 20 61 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f 20   any.changes to 
48e0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f  the database..</
48f0: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a  p></li>.</ul>...
4900: 0a 3c 68 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e  .<h3>Transaction
4910: 20 4e 65 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f   Nesting Rules</
4920: 68 33 3e 0a 0a 3c 70 3e 54 72 61 6e 73 61 63 74  h3>..<p>Transact
4930: 69 6f 6e 73 20 73 74 61 63 6b 2e 20 20 54 68 65  ions stack.  The
4940: 20 6c 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f   last transactio
4950: 6e 20 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62  n started will b
4960: 65 20 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e  e the first.tran
4970: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65  saction committe
4980: 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b  d or rolled back
4990: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 42  .</p>..<p>The [B
49a0: 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e  EGIN] command on
49b0: 6c 79 20 77 6f 72 6b 73 20 69 66 20 74 68 65 20  ly works if the 
49c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
49d0: 6b 20 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a 69  k is empty, or.i
49e0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 20 69 66  n other words if
49f0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 70 65   there are no pe
4a00: 6e 64 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  nding transactio
4a10: 6e 73 2e 20 20 49 66 20 74 68 65 20 74 72 61 6e  ns.  If the tran
4a20: 73 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73  saction.stack is
4a30: 20 6e 6f 74 20 65 6d 70 74 79 20 77 68 65 6e 20   not empty when 
4a40: 74 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  the [BEGIN] comm
4a50: 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20  and is invoked, 
4a60: 74 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  then the command
4a70: 0a 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65  .fails with an e
4a80: 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  rror.</p>..<p>Th
4a90: 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61  e [COMMIT] comma
4aa0: 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f  nd commits all o
4ab0: 75 74 73 74 61 6e 64 69 6e 67 20 74 72 61 6e 73  utstanding trans
4ac0: 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76  actions and leav
4ad0: 65 73 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69  es.the transacti
4ae0: 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c  on stack empty.<
4af0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 52 45 4c 45  /p>..<p>The RELE
4b00: 41 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72  ASE command star
4b10: 74 73 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74  ts with the most
4b20: 20 72 65 63 65 6e 74 20 61 64 64 69 74 69 6f 6e   recent addition
4b30: 20 74 6f 20 74 68 65 0a 74 72 61 6e 73 61 63 74   to the.transact
4b40: 69 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20 72 65  ion stack and re
4b50: 6c 65 61 73 65 73 20 73 61 76 65 70 6f 69 6e 74  leases savepoint
4b60: 73 20 62 61 63 6b 77 61 72 64 73 20 0a 69 6e 20  s backwards .in 
4b70: 74 69 6d 65 20 75 6e 74 69 6c 20 69 74 20 72 65  time until it re
4b80: 6c 65 61 73 65 73 20 61 20 73 61 76 65 70 6f 69  leases a savepoi
4b90: 6e 74 20 6d 61 72 6b 20 77 69 74 68 20 61 20 6d  nt mark with a m
4ba0: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
4bb0: 74 2d 6e 61 6d 65 2e 0a 50 72 69 6f 72 20 73 61  t-name..Prior sa
4bc0: 76 65 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73  vepoints, even s
4bd0: 61 76 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d  avepoints with m
4be0: 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e  atching savepoin
4bf0: 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63  t-names, are.unc
4c00: 68 61 6e 67 65 64 2e 0a 49 66 20 74 68 65 20 52  hanged..If the R
4c10: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63  ELEASE command c
4c20: 61 75 73 65 73 20 74 68 65 0a 74 72 61 6e 73 61  auses the.transa
4c30: 63 74 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20 62  ction stack to b
4c40: 65 63 6f 6d 65 20 65 6d 70 74 79 20 28 69 66 20  ecome empty (if 
4c50: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
4c60: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65  and releases the
4c70: 0a 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73  .outermost trans
4c80: 61 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  action from the 
4c90: 73 74 61 63 6b 29 20 74 68 65 6e 20 74 68 65 20  stack) then the 
4ca0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
4cb0: 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  its.</p>..<p>The
4cc0: 20 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d   [ROLLBACK] comm
4cd0: 61 6e 64 20 77 69 74 68 6f 75 74 20 61 20 54 4f  and without a TO
4ce0: 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61   clause rolls ba
4cf0: 63 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61 63 74  cks all transact
4d00: 69 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65 73 20  ions.and leaves 
4d10: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
4d20: 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e  stack empty.</p>
4d30: 0a 0a 3c 70 3e 54 68 65 20 52 4f 4c 4c 42 41 43  ..<p>The ROLLBAC
4d40: 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61  K command with a
4d50: 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73   TO clause rolls
4d60: 20 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f   back transactio
4d70: 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72  ns going.backwar
4d80: 64 73 20 69 6e 20 74 69 6d 65 20 62 61 63 6b 20  ds in time back 
4d90: 74 6f 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  to the most rece
4da0: 6e 74 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74  nt SAVEPOINT wit
4db0: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
4dc0: 65 2e 0a 54 68 65 20 53 41 56 45 50 4f 49 4e 54  e..The SAVEPOINT
4dd0: 20 77 69 74 68 20 74 68 65 20 6d 61 74 63 68 69   with the matchi
4de0: 6e 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20  ng name remains 
4df0: 6f 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  on the transacti
4e00: 6f 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c  on stack,.but al
4e10: 6c 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  l database chang
4e20: 65 73 20 74 68 61 74 20 6f 63 63 75 72 72 65 64  es that occurred
4e30: 20 61 66 74 65 72 20 74 68 61 74 20 53 41 56 45   after that SAVE
4e40: 50 4f 49 4e 54 20 77 61 73 20 63 72 65 61 74 65  POINT was create
4e50: 64 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63  d.are rolled bac
4e60: 6b 2e 20 20 49 66 20 74 68 65 20 73 61 76 65 70  k.  If the savep
4e70: 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52  oint-name in a R
4e80: 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61  OLLBACK TO comma
4e90: 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63  nd does not.matc
4ea0: 68 20 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20  h any SAVEPOINT 
4eb0: 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68  on the stack, th
4ec0: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
4ed0: 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69  command fails wi
4ee0: 74 68 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20  th an.error and 
4ef0: 6c 65 61 76 65 73 20 74 68 65 20 73 74 61 74 65  leaves the state
4f00: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
4f10: 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a   unchanged.</p>.
4f20: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
4f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f70: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63  ######.Section c
4f80: 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b  omment comment {
4f90: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 73  comment comments
4fa0: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
4fb0: 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a   comment-syntax.
4fc0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 65  </tcl>..<p>Comme
4fd0: 6e 74 73 20 61 72 65 6e 27 74 20 53 51 4c 20 63  nts aren't SQL c
4fe0: 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e  ommands, but can
4ff0: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68   occur within th
5000: 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75  e text of.SQL qu
5010: 65 72 69 65 73 20 70 61 73 73 65 64 20 74 6f 20  eries passed to 
5020: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
5030: 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74  _v2()] and relat
5040: 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e 2e 0a  ed interfaces...
5050: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 0a 74 72  Comments are .tr
5060: 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73 70  eated as whitesp
5070: 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73 65  ace by the parse
5080: 72 2e 20 20 54 68 65 79 20 63 61 6e 20 62 65 67  r.  They can beg
5090: 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  in anywhere whit
50a0: 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66  espace .can be f
50b0: 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ound, including 
50c0: 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f  inside expressio
50d0: 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c  ns that span mul
50e0: 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70  tiple lines..</p
50f0: 3e 0a 0a 3c 70 3e 20 53 51 4c 20 63 6f 6d 6d 65  >..<p> SQL comme
5100: 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20 74  nts begin with t
5110: 77 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22  wo consecutive "
5120: 2d 22 20 63 68 61 72 61 63 74 65 72 73 20 28 41  -" characters (A
5130: 53 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65  SCII 0x2d).and e
5140: 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20  xtend up to and 
5150: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65  including the ne
5160: 78 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61  xt newline chara
5170: 63 74 65 72 20 28 41 53 43 49 49 20 30 78 30 61  cter (ASCII 0x0a
5180: 29 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65  ).or until the e
5190: 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69  nd of input, whi
51a0: 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72  chever comes fir
51b0: 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 43 20 63  st.</p>..<p> C c
51c0: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 73 70 61 6e  omments can span
51d0: 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 6c   any number of l
51e0: 69 6e 65 73 2e 20 20 43 2d 73 74 79 6c 65 20 63  ines.  C-style c
51f0: 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69  omments begin.wi
5200: 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65  th "/*" and exte
5210: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
5220: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
5230: 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70  "*/" character p
5240: 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65  air.or until the
5250: 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77   end of input, w
5260: 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66  hichever comes f
5270: 69 72 73 74 2e 20 20 43 2d 73 74 79 6c 65 20 63  irst.  C-style c
5280: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
5290: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
52a0: 20 3c 2f 70 3e 0a 0a 3c 70 3e 20 43 6f 6d 6d 65   </p>..<p> Comme
52b0: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
52c0: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
52d0: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
52e0: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
52f0: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
5300: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
5310: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
5320: 65 6e 74 73 2e 0a 43 6f 6d 6d 65 6e 74 73 20 64  ents..Comments d
5330: 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e  o not nest..</p>
5340: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
5350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5390: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
53a0: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63  {CREATE INDEX} c
53b0: 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45  reateindex {{CRE
53c0: 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75 62  ATE INDEX}}..Bub
53d0: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
53e0: 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 42  e-index-stmt 1.B
53f0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 64  ubbleDiagram ind
5400: 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74 63  exed-column.</tc
5410: 6c 3e 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41 54  l>..<p>The CREAT
5420: 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20  E INDEX command 
5430: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
5440: 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45  keywords "CREATE
5450: 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64   INDEX" followed
5460: 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  .by the name of 
5470: 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74  the new index, t
5480: 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c  he keyword "ON",
5490: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70   the name of a p
54a0: 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65  reviously.create
54b0: 64 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  d table that is 
54c0: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61  to be indexed, a
54d0: 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  nd a parenthesiz
54e0: 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73  ed list of names
54f0: 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of.columns in t
5500: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
5510: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69  e used for the i
5520: 6e 64 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c  ndex key.</p>..<
5530: 70 3e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61  p>Each column na
5540: 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77  me can be follow
5550: 65 64 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ed by one of the
5560: 20 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22   "ASC" or "DESC"
5570: 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64   keywords.to ind
5580: 69 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72  icate sort order
5590: 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65  .  The sort orde
55a0: 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  r may or may not
55b0: 20 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65   be ignored depe
55c0: 6e 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74  nding.on the dat
55d0: 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61  abase file forma
55e0: 74 2e 20 20 54 68 65 20 22 6c 65 67 61 63 79 22  t.  The "legacy"
55f0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 67 6e   file format ign
5600: 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20  ores index.sort 
5610: 6f 72 64 65 72 2e 20 20 54 68 65 20 64 65 73 63  order.  The desc
5620: 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 69 6c  ending index fil
5630: 65 20 66 6f 72 6d 61 74 20 74 61 6b 65 73 20 69  e format takes i
5640: 6e 64 65 78 20 73 6f 72 74 20 6f 72 64 65 72 0a  ndex sort order.
5650: 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2e 20 20 4f  into account.  O
5660: 6e 6c 79 20 63 6f 70 69 65 73 20 6f 66 20 53 51  nly copies of SQ
5670: 4c 69 74 65 20 6e 65 77 65 72 20 74 68 61 6e 20  Lite newer than 
5680: 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 20  [version 3.3.0] 
5690: 0a 28 72 65 6c 65 61 73 65 64 20 6f 6e 20 32 30  .(released on 20
56a0: 30 36 2d 30 31 2d 31 30 29 20 61 72 65 20 61 62  06-01-10) are ab
56b0: 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64  le to understand
56c0: 20 74 68 65 20 6e 65 77 65 72 20 64 65 73 63 65   the newer desce
56d0: 6e 64 69 6e 67 0a 69 6e 64 65 78 20 66 69 6c 65  nding.index file
56e0: 20 66 6f 72 6d 61 74 20 61 6e 64 20 73 6f 20 66   format and so f
56f0: 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
5700: 20 77 69 74 68 20 6f 6c 64 65 72 20 76 65 72 73   with older vers
5710: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 2c 20  ions of.SQLite, 
5720: 74 68 65 20 6c 65 67 61 63 79 20 66 69 6c 65 20  the legacy file 
5730: 66 6f 72 6d 61 74 20 69 73 20 67 65 6e 65 72 61  format is genera
5740: 74 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ted by default. 
5750: 20 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79   Use the.[legacy
5760: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72  _file_format] pr
5770: 61 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74  agma to modify t
5780: 68 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64  his behavior and
5790: 20 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61   generate.databa
57a0: 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
57b0: 20 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d   newer file form
57c0: 61 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  at.  Future vers
57d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d  ions of SQLite.m
57e0: 61 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65  ay begin to gene
57f0: 72 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66  rate the newer f
5800: 69 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65  ile format by de
5810: 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  fault.</p>..<p>T
5820: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
5830: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68  e following each
5840: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66   column name def
5850: 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
5860: 0a 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66  .sequence used f
5870: 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20  or text entries 
5880: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20  in that column. 
5890: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
58a0: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
58b0: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
58c0: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
58d0: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
58e0: 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  n in the.[CREATE
58f0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
5900: 74 2e 20 20 4f 72 20 69 66 20 6e 6f 20 63 6f 6c  t.  Or if no col
5910: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
5920: 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66  is otherwise def
5930: 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d  ined,.the built-
5940: 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  in BINARY collat
5950: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
5960: 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  used.</p>..<p>Th
5970: 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74  ere are no arbit
5980: 72 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74  rary limits on t
5990: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64  he number of ind
59a0: 69 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  ices that can be
59b0: 0a 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73  .attached to a s
59c0: 69 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 54 68  ingle table.  Th
59d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
59e0: 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  mns in an index 
59f0: 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 5b  is .limited to [
5a00: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
5a10: 4e 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74  N].</p>..<p>If t
5a20: 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72  he UNIQUE keywor
5a30: 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65 65  d appears betwee
5a40: 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44  n CREATE and IND
5a50: 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74  EX then duplicat
5a60: 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e.index entries 
5a70: 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e  are not allowed.
5a80: 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    Any attempt to
5a90: 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69 63   insert a duplic
5aa0: 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72  ate entry.will r
5ab0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f  esult in an erro
5ac0: 72 2e 20 20 46 6f 72 20 74 68 65 20 70 75 72 70  r.  For the purp
5ad0: 6f 73 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69  oses of unique i
5ae0: 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c  ndices, all NULL
5af0: 20 76 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73   values.are cons
5b00: 69 64 65 72 65 64 20 74 6f 20 64 69 66 66 65 72  idered to differ
5b10: 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68  ent from all oth
5b20: 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  er NULL values a
5b30: 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e 69 71  nd are thus uniq
5b40: 75 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20  ue..This is one 
5b50: 6f 66 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69  of the two possi
5b60: 62 6c 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  ble interpretati
5b70: 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39  ons of the SQL-9
5b80: 32 20 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20  2 standard.(the 
5b90: 6c 61 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20  language in the 
5ba0: 73 74 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69  standard is ambi
5bb0: 67 75 69 6f 75 73 29 20 61 6e 64 20 69 73 20 74  guious) and is t
5bc0: 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
5bd0: 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f  n.followed by Po
5be0: 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c  stgreSQL, MySQL,
5bf0: 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64 20 4f   Firebird, and O
5c00: 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78  racle.  Informix
5c10: 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53   and.Microsoft S
5c20: 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77  QL Server follow
5c30: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74 65 72   the other inter
5c40: 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
5c50: 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a   standard.</p>..
5c60: 3c 70 3e 54 68 65 20 74 65 78 74 0a 6f 66 20 65  <p>The text.of e
5c70: 61 63 68 20 43 52 45 41 54 45 20 49 4e 44 45 58  ach CREATE INDEX
5c80: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
5c90: 6f 72 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73  ored in the <b>s
5ca0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e  qlite_master</b>
5cb0: 0a 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f 74 65  .or <b>sqlite_te
5cc0: 6d 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61  mp_master</b> ta
5cd0: 62 6c 65 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  ble, depending o
5ce0: 6e 20 77 68 65 74 68 65 72 20 74 68 65 20 74 61  n whether the ta
5cf0: 62 6c 65 0a 62 65 69 6e 67 20 69 6e 64 65 78 65  ble.being indexe
5d00: 64 20 69 73 20 74 65 6d 70 6f 72 61 72 79 2e 20  d is temporary. 
5d10: 20 45 76 65 72 79 20 74 69 6d 65 20 74 68 65 20   Every time the 
5d20: 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  database is open
5d30: 65 64 2c 0a 61 6c 6c 20 43 52 45 41 54 45 20 49  ed,.all CREATE I
5d40: 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73 0a  NDEX statements.
5d50: 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68  are read from th
5d60: 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74  e <b>sqlite_mast
5d70: 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e 64  er</b> table and
5d80: 20 75 73 65 64 20 74 6f 20 72 65 67 65 6e 65 72   used to regener
5d90: 61 74 65 0a 53 51 4c 69 74 65 27 73 20 69 6e 74  ate.SQLite's int
5da0: 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
5db0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 64 65  tion of the inde
5dc0: 78 20 6c 61 79 6f 75 74 2e 3c 2f 70 3e 0a 0a 3c  x layout.</p>..<
5dd0: 70 3e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61  p>If the optiona
5de0: 6c 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  l IF NOT EXISTS 
5df0: 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
5e00: 74 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e  t and another in
5e10: 64 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d  dex.with the sam
5e20: 65 20 6e 61 6d 65 20 61 6c 65 61 64 79 20 65 78  e name aleady ex
5e30: 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20  ists, then this 
5e40: 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20  command becomes 
5e50: 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70  a no-op.</p>..<p
5e60: 3e 49 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d  >Indexes are rem
5e70: 6f 76 65 64 20 77 69 74 68 20 74 68 65 20 3c 61  oved with the <a
5e80: 20 68 72 65 66 3d 22 6c 61 6e 67 5f 64 72 6f 70   href="lang_drop
5e90: 69 6e 64 65 78 2e 68 74 6d 6c 22 3e 44 52 4f 50  index.html">DROP
5ea0: 20 49 4e 44 45 58 3c 2f 61 3e 20 0a 63 6f 6d 6d   INDEX</a> .comm
5eb0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  and.</p>...<tcl>
5ec0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
5f10: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
5f20: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61  TABLE} {createta
5f30: 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41  ble} {{CREATE TA
5f40: 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  BLE}}..BubbleDia
5f50: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
5f60: 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
5f70: 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65  iagram column-de
5f80: 66 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  f.BubbleDiagram 
5f90: 74 79 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  type-name.Bubble
5fa0: 44 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63  Diagram column-c
5fb0: 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65  onstraint.Bubble
5fc0: 44 69 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f  Diagram table-co
5fd0: 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44  nstraint.BubbleD
5fe0: 69 61 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b  iagram foreign-k
5ff0: 65 79 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ey-clause.</tcl>
6000: 0a 0a 3c 70 3e 41 20 43 52 45 41 54 45 20 54 41  ..<p>A CREATE TA
6010: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
6020: 20 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20 6b   basically the k
6030: 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20  eywords "CREATE 
6040: 54 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64 20  TABLE".followed 
6050: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  by the name of a
6060: 20 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20 61   new table and a
6070: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
6080: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65  ist of column.de
6090: 66 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63 6f  finitions and co
60a0: 6e 73 74 72 61 69 6e 74 73 2e 20 20 0a 54 61 62  nstraints.  .Tab
60b0: 6c 65 73 20 6e 61 6d 65 73 20 74 68 61 74 20 62  les names that b
60c0: 65 67 69 6e 20 77 69 74 68 20 22 3c 62 3e 73 71  egin with "<b>sq
60d0: 6c 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72  lite_</b>" are r
60e0: 65 73 65 72 76 65 64 0a 66 6f 72 20 75 73 65 20  eserved.for use 
60f0: 62 79 20 74 68 65 20 65 6e 67 69 6e 65 2e 3c 2f  by the engine.</
6100: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c 75  p>..<p>Each colu
6110: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73  mn definition is
6120: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
6130: 20 63 6f 6c 75 6d 6e 20 6f 70 74 69 6f 6e 61 6c   column optional
6140: 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  ly followed by t
6150: 68 65 0a 5b 64 61 74 61 74 79 70 65 5d 20 66 6f  he.[datatype] fo
6160: 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20 74  r that column, t
6170: 68 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hen one or more 
6180: 6f 70 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 20  optional column 
6190: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 53 51 4c  constraints..SQL
61a0: 69 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d 69  ite uses [dynami
61b0: 63 20 74 79 70 69 6e 67 5d 3b 20 0a 74 68 65 20  c typing]; .the 
61c0: 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
61d0: 20 63 6f 6c 75 6d 6e 20 64 6f 65 73 20 6e 6f 74   column does not
61e0: 20 72 65 73 74 72 69 63 74 20 77 68 61 74 20 64   restrict what d
61f0: 61 74 61 20 6d 61 79 20 62 65 20 70 75 74 0a 69  ata may be put.i
6200: 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 54  n that column..T
6210: 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  he UNIQUE constr
6220: 61 69 6e 74 20 63 61 75 73 65 73 20 61 6e 20 75  aint causes an u
6230: 6e 69 71 75 65 20 69 6e 64 65 78 20 74 6f 20 62  nique index to b
6240: 65 20 63 72 65 61 74 65 64 20 6f 6e 20 74 68 65  e created on the
6250: 20 73 70 65 63 69 66 69 65 64 0a 63 6f 6c 75 6d   specified.colum
6260: 6e 73 2e 20 20 41 6c 6c 20 4e 55 4c 4c 20 76 61  ns.  All NULL va
6270: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
6280: 72 65 64 20 64 69 66 66 65 72 65 6e 74 20 66 72  red different fr
6290: 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 20 61 6e  om each other an
62a0: 64 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72  d from.all other
62b0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
62c0: 70 75 72 70 6f 73 65 20 6f 66 20 64 65 74 65 72  purpose of deter
62d0: 6d 69 6e 69 6e 67 20 75 6e 69 71 75 65 6e 65 73  mining uniquenes
62e0: 73 2c 20 68 65 6e 63 65 20 61 20 55 4e 49 51 55  s, hence a UNIQU
62f0: 45 0a 63 6f 6c 75 6d 6e 20 6d 61 79 20 63 6f 6e  E.column may con
6300: 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65 20 65 6e  tain multiple en
6310: 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 76  tries with the v
6320: 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 54 68  alue of NULL..Th
6330: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
6340: 20 73 70 65 63 69 66 69 65 73 20 77 68 61 74 20   specifies what 
6350: 74 65 78 74 20 0a 5b 63 6f 6c 6c 61 74 69 6e 67  text .[collating
6360: 20 66 75 6e 63 74 69 6f 6e 5d 20 74 6f 20 75 73   function] to us
6370: 65 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  e when comparing
6380: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 66 6f   text entries fo
6390: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 0a  r the column.  .
63a0: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 5b 42 49  The built-in [BI
63b0: 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6e 67 20  NARY] collating 
63c0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
63d0: 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70 3e   by default..<p>
63e0: 0a 54 68 65 20 44 45 46 41 55 4c 54 20 63 6f 6e  .The DEFAULT con
63f0: 73 74 72 61 69 6e 74 20 73 70 65 63 69 66 69 65  straint specifie
6400: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
6410: 65 20 74 6f 20 75 73 65 20 77 68 65 6e 20 64 6f  e to use when do
6420: 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e  ing an [INSERT].
6430: 0a 54 68 65 20 76 61 6c 75 65 20 6d 61 79 20 62  .The value may b
6440: 65 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  e NULL, a string
6450: 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 61 20 6e   constant or a n
6460: 75 6d 62 65 72 2e 0a 54 68 65 20 64 65 66 61 75  umber..The defau
6470: 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73  lt value may als
6480: 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  o be one of the 
6490: 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64  special case-ind
64a0: 65 70 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72 64  ependant.keyword
64b0: 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  s CURRENT_TIME, 
64c0: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20  CURRENT_DATE or 
64d0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
64e0: 50 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  P. If the value 
64f0: 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  is.NULL, a strin
6500: 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75  g constant or nu
6510: 6d 62 65 72 2c 20 69 74 20 69 73 20 6c 69 74 65  mber, it is lite
6520: 72 61 6c 6c 79 20 69 6e 73 65 72 74 65 64 20 69  rally inserted i
6530: 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 77  nto the column.w
6540: 68 65 6e 65 76 65 72 20 61 6e 20 49 4e 53 45 52  henever an INSER
6550: 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
6560: 20 64 6f 65 73 20 6e 6f 74 20 73 70 65 63 69 66   does not specif
6570: 79 20 61 20 76 61 6c 75 65 20 66 6f 72 20 74 68  y a value for th
6580: 65 20 63 6f 6c 75 6d 6e 20 69 73 0a 65 78 65 63  e column is.exec
6590: 75 74 65 64 2e 20 49 66 20 74 68 65 20 76 61 6c  uted. If the val
65a0: 75 65 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49  ue is CURRENT_TI
65b0: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
65c0: 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45   or CURRENT_TIME
65d0: 53 54 41 4d 50 2c 20 74 68 65 6e 0a 74 68 65 20  STAMP, then.the 
65e0: 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74 65  current UTC date
65f0: 20 61 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73 20   and/or time is 
6600: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
6610: 65 20 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 0a 43  e columns. For.C
6620: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65  URRENT_TIME, the
6630: 20 66 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d 4d   format is HH:MM
6640: 3a 53 53 2e 20 46 6f 72 20 43 55 52 52 45 4e 54  :SS. For CURRENT
6650: 5f 44 41 54 45 2c 20 59 59 59 59 2d 4d 4d 2d 44  _DATE, YYYY-MM-D
6660: 44 2e 20 54 68 65 20 66 6f 72 6d 61 74 0a 66 6f  D. The format.fo
6670: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
6680: 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d  AMP is "YYYY-MM-
6690: 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f  DD HH:MM:SS"..</
66a0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 50 52 49 4d 41  p>..<p>The PRIMA
66b0: 52 59 20 4b 45 59 20 61 74 74 72 69 62 75 74 65  RY KEY attribute
66c0: 20 6e 6f 72 6d 61 6c 6c 79 20 63 72 65 61 74 65   normally create
66d0: 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
66e0: 20 6f 6e 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   on.the column o
66f0: 72 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  r columns that a
6700: 72 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20  re specified as 
6710: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
6720: 20 20 54 68 65 20 6f 6e 6c 79 0a 65 78 63 65 70    The only.excep
6730: 74 69 6f 6e 20 74 6f 20 74 68 69 73 20 62 65 68  tion to this beh
6740: 61 76 69 6f 72 20 69 73 20 73 70 65 63 69 61 6c  avior is special
6750: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
6760: 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2c 0a 64  Y KEY] column,.d
6770: 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 2e 0a  escribed below..
6780: 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  According to the
6790: 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50   SQL standard, P
67a0: 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c  RIMARY KEY shoul
67b0: 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c  d imply NOT NULL
67c0: 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c  ..Unfortunately,
67d0: 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d 73   due to a long-s
67e0: 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20 6f  tanding coding o
67f0: 76 65 72 73 69 67 68 74 2c 20 74 68 69 73 20 69  versight, this i
6800: 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73 65 20  s not .the case 
6810: 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69  in SQLite.  SQLi
6820: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
6830: 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49 4d 41  alues.in a PRIMA
6840: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20 20  RY KEY column.  
6850: 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67 65 20  We could change 
6860: 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66 6f 72  SQLite to confor
6870: 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64 61 72  m to the.standar
6880: 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68 74 20  d (and we might 
6890: 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66 75 74  do so in the fut
68a0: 75 72 65 29 2c 20 62 75 74 20 62 79 20 74 68 65  ure), but by the
68b0: 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72 73 69   time the.oversi
68c0: 67 68 74 20 77 61 73 20 64 69 73 63 6f 76 65 72  ght was discover
68d0: 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20 69  ed, SQLite was i
68e0: 6e 20 73 75 63 68 20 77 69 64 65 20 75 73 65 20  n such wide use 
68f0: 74 68 61 74 20 77 65 20 66 65 61 72 65 64 0a 62  that we feared.b
6900: 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63  reaking legacy c
6910: 6f 64 65 20 69 66 20 77 65 20 66 69 78 65 64 20  ode if we fixed 
6920: 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f  the problem.  So
6930: 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65   for now we have
6940: 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e 74 69  .chosen to conti
6950: 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c  nue allowing NUL
6960: 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b 45  Ls in PRIMARY KE
6970: 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76 65 6c  Y columns..Devel
6980: 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62 65 20  opers should be 
6990: 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72 2c 20  aware, however, 
69a0: 74 68 61 74 20 77 65 20 6d 61 79 20 63 68 61 6e  that we may chan
69b0: 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 63 6f 6e  ge SQLite to.con
69c0: 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51 4c 20  form to the SQL 
69d0: 73 74 61 6e 64 61 72 64 20 69 6e 20 66 75 74 75  standard in futu
69e0: 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20 64 65  re and should de
69f0: 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72 61 6d  sign new program
6a00: 73 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e 3c 2f  s.accordingly.</
6a10: 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75 73  p>..<p>SQLite us
6a20: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
6a30: 6e 67 5d 20 69 6e 73 74 65 61 64 20 6f 66 20 73  ng] instead of s
6a40: 74 61 74 69 63 20 74 79 70 69 6e 67 2e 20 20 45  tatic typing.  E
6a50: 78 63 65 70 74 20 66 6f 72 20 74 68 65 0a 73 70  xcept for the.sp
6a60: 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 5b 49  ecial case of [I
6a70: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
6a80: 45 59 5d 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c  EY], SQLite will
6a90: 20 61 6c 6c 6f 77 20 76 61 6c 75 65 73 20 6f 66   allow values of
6aa0: 20 61 6e 79 0a 74 79 70 65 20 74 6f 20 62 65 20   any.type to be 
6ab0: 73 74 6f 72 65 64 20 69 6e 20 61 6e 79 20 63 6f  stored in any co
6ac0: 6c 75 6d 6e 20 72 65 67 61 72 64 6c 65 73 73 20  lumn regardless 
6ad0: 6f 66 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  of the declared 
6ae0: 64 61 74 61 74 79 70 65 20 6f 66 0a 74 68 61 74  datatype of.that
6af0: 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 20 64 65   column.  The de
6b00: 63 6c 61 72 65 64 20 64 61 74 61 74 79 70 65 20  clared datatype 
6b10: 69 73 20 61 20 5b 61 66 66 69 6e 69 74 79 20 7c  is a [affinity |
6b20: 20 74 79 70 65 20 61 66 66 69 6e 69 74 79 5d 20   type affinity] 
6b30: 74 68 61 74 0a 53 51 4c 69 74 65 20 61 74 74 65  that.SQLite atte
6b40: 6d 70 74 73 20 74 6f 20 63 6f 6d 70 6c 79 20 77  mpts to comply w
6b50: 69 74 68 2c 20 62 75 74 20 74 68 65 20 6f 70 65  ith, but the ope
6b60: 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63  ration will proc
6b70: 65 65 64 20 65 76 65 6e 20 69 66 0a 63 6f 6d 70  eed even if.comp
6b80: 6c 69 61 6e 63 65 20 69 73 20 6e 6f 74 20 70 6f  liance is not po
6b90: 73 73 69 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ssible.</p>..<p>
6ba0: 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72  If the "TEMP" or
6bb0: 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79   "TEMPORARY" key
6bc0: 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62  word occurs in b
6bd0: 65 74 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a  etween "CREATE".
6be0: 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68 65 6e  and "TABLE" then
6bf0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
6c00: 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f 6e  is created is on
6c10: 6c 79 20 76 69 73 69 62 6c 65 0a 77 69 74 68 69  ly visible.withi
6c20: 6e 20 74 68 61 74 20 73 61 6d 65 20 64 61 74 61  n that same data
6c30: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  base connection.
6c40: 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63  and is automatic
6c50: 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65  ally deleted whe
6c60: 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 63  n.the database c
6c70: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f  onnection is clo
6c80: 73 65 64 2e 20 20 41 6e 79 20 69 6e 64 69 63 65  sed.  Any indice
6c90: 73 20 63 72 65 61 74 65 64 20 6f 6e 20 61 20 74  s created on a t
6ca0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 0a 61  emporary table.a
6cb0: 72 65 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61 72  re also temporar
6cc0: 79 2e 20 20 54 65 6d 70 6f 72 61 72 79 20 74 61  y.  Temporary ta
6cd0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
6ce0: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
6cf0: 0a 73 65 70 61 72 61 74 65 20 66 69 6c 65 20 64  .separate file d
6d00: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 74 68 65  istinct from the
6d10: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
6d20: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66  ile.</p>..<p> If
6d30: 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d   a &lt;database-
6d40: 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63  name&gt; is spec
6d50: 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
6d60: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
6d70: 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64   in .the named d
6d80: 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 61  atabase. It is a
6d90: 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69  n error to speci
6da0: 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61  fy both a &lt;da
6db0: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a  tabase-name&gt;.
6dc0: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79  and the TEMP key
6dd0: 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65  word, unless the
6de0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
6df0: 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22  me&gt; is "temp"
6e00: 2e 20 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65  . If no.database
6e10: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
6e20: 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50  ed, and the TEMP
6e30: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
6e40: 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62  present,.the tab
6e50: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
6e60: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
6e70: 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  se.</p>..<p>The 
6e80: 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c 69  optional [confli
6e90: 63 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c 6f  ct clause] follo
6ea0: 77 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74 72  wing each constr
6eb0: 61 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65 20  aint.allows the 
6ec0: 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66  specification of
6ed0: 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20   an alternative 
6ee0: 64 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61 69  default.constrai
6ef0: 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
6f00: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
6f10: 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74 72   for that constr
6f20: 61 69 6e 74 2e 0a 54 68 65 20 64 65 66 61 75 6c  aint..The defaul
6f30: 74 20 69 73 20 61 62 6f 72 74 20 41 42 4f 52 54  t is abort ABORT
6f40: 2e 20 20 44 69 66 66 65 72 65 6e 74 20 63 6f 6e  .  Different con
6f50: 73 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20  straints within 
6f60: 74 68 65 20 73 61 6d 65 0a 74 61 62 6c 65 20 6d  the same.table m
6f70: 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  ay have differen
6f80: 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  t default confli
6f90: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
6fa0: 67 6f 72 69 74 68 6d 73 2e 0a 49 66 20 61 6e 20  gorithms..If an 
6fb0: 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50 44  [INSERT] or [UPD
6fc0: 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 73  ATE] statement s
6fd0: 70 65 63 69 66 69 65 73 20 61 20 64 69 66 66 65  pecifies a diffe
6fe0: 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 0a 72 65  rent conflict.re
6ff0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
7000: 68 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 61 6c  hm, then that al
7010: 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 20  gorithm is used 
7020: 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65 0a  in place of the.
7030: 64 65 66 61 75 6c 74 20 61 6c 67 6f 72 69 74 68  default algorith
7040: 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  m specified in t
7050: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
7060: 73 74 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74  statement..See t
7070: 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
7080: 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d.[ON CONFLICT] 
7090: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
70a0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  nformation.</p>.
70b0: 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72  .<p>CHECK constr
70c0: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
70d0: 74 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69  ted as of [versi
70e0: 6f 6e 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69 6f  on 3.3.0].  Prio
70f0: 72 0a 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33  r.to version 3.3
7100: 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  .0, CHECK constr
7110: 61 69 6e 74 73 20 77 65 72 65 20 70 61 72 73 65  aints were parse
7120: 64 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63  d but not enforc
7130: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
7140: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
7150: 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20  s in a table is 
7160: 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65 0a 5b  limited by the.[
7170: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
7180: 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N] compile-time 
7190: 70 61 72 61 6d 65 74 65 72 2e 0a 41 20 73 69 6e  parameter..A sin
71a0: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
71b0: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
71c0: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
71d0: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
71e0: 74 65 73 20 6f 66 20 64 61 74 61 2e 0a 42 6f 74  tes of data..Bot
71f0: 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74  h of these limit
7200: 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64  s can be lowered
7210: 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69 6e   at runtime usin
7220: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 6c  g the.[sqlite3_l
7230: 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  imit()] C/C++ in
7240: 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a 3c  terface.</p>...<
7250: 70 3e 54 68 65 20 43 52 45 41 54 45 20 54 41 42  p>The CREATE TAB
7260: 4c 45 20 41 53 20 66 6f 72 6d 20 64 65 66 69 6e  LE AS form defin
7270: 65 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  es the table to 
7280: 62 65 0a 74 68 65 20 72 65 73 75 6c 74 20 73 65  be.the result se
7290: 74 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54  t of a query.  T
72a0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
72b0: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 61 72  table columns ar
72c0: 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  e.the names of t
72d0: 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  he columns in th
72e0: 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c  e result.</p>..<
72f0: 70 3e 54 68 65 20 74 65 78 74 0a 6f 66 20 65 61  p>The text.of ea
7300: 63 68 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ch CREATE TABLE 
7310: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f  statement is sto
7320: 72 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73 71  red in the <b>sq
7330: 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a  lite_master</b>.
7340: 74 61 62 6c 65 2e 20 20 45 76 65 72 79 20 74 69  table.  Every ti
7350: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
7360: 69 73 20 6f 70 65 6e 65 64 2c 20 61 6c 6c 20 43  is opened, all C
7370: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
7380: 65 6d 65 6e 74 73 0a 61 72 65 20 72 65 61 64 20  ements.are read 
7390: 66 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71 6c 69  from the <b>sqli
73a0: 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61  te_master</b> ta
73b0: 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74 6f 20  ble and used to 
73c0: 72 65 67 65 6e 65 72 61 74 65 0a 53 51 4c 69 74  regenerate.SQLit
73d0: 65 27 73 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  e's internal rep
73e0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
73f0: 68 65 20 74 61 62 6c 65 20 6c 61 79 6f 75 74 2e  he table layout.
7400: 0a 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  .If the original
7410: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 61 20 43   command was a C
7420: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 74  REATE TABLE AS t
7430: 68 65 6e 20 74 68 65 6e 20 61 6e 20 65 71 75 69  hen then an equi
7440: 76 61 6c 65 6e 74 0a 43 52 45 41 54 45 20 54 41  valent.CREATE TA
7450: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
7460: 20 73 79 6e 74 68 65 73 69 7a 65 64 20 61 6e 64   synthesized and
7470: 20 73 74 6f 72 65 20 69 6e 20 3c 62 3e 73 71 6c   store in <b>sql
7480: 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a 69  ite_master</b>.i
7490: 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 6f  n place of the o
74a0: 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 2e  riginal command.
74b0: 0a 54 68 65 20 74 65 78 74 20 6f 66 20 43 52 45  .The text of CRE
74c0: 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
74d0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 20 61  BLE statements a
74e0: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
74f0: 0a 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d 70 5f  .<b>sqlite_temp_
7500: 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c 65  master</b> table
7510: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68  ..</p>..<p>If th
7520: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f  e optional IF NO
7530: 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  T EXISTS clause 
7540: 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61  is present and a
7550: 6e 6f 74 68 65 72 20 74 61 62 6c 65 0a 77 69 74  nother table.wit
7560: 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
7570: 61 6c 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  aleady exists, t
7580: 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  hen this command
7590: 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
75a0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 61 62 6c 65 73  .</p>..<p>Tables
75b0: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
75c0: 6e 67 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  ng the <a href="
75d0: 6c 61 6e 67 5f 64 72 6f 70 74 61 62 6c 65 2e 68  lang_droptable.h
75e0: 74 6d 6c 22 3e 44 52 4f 50 20 54 41 42 4c 45 3c  tml">DROP TABLE<
75f0: 2f 61 3e 20 0a 73 74 61 74 65 6d 65 6e 74 2e 20  /a> .statement. 
7600: 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66   </p>..<tcl>hd_f
7610: 72 61 67 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49  ragment rowid {I
7620: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
7630: 45 59 7d 20 52 4f 57 49 44 20 72 6f 77 69 64 3c  EY} ROWID rowid<
7640: 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73  /tcl>.<h3>ROWIDs
7650: 20 61 6e 64 20 74 68 65 20 49 4e 54 45 47 45 52   and the INTEGER
7660: 20 50 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33   PRIMARY KEY</h3
7670: 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 72 6f 77 20  >..<p>Every row 
7680: 6f 66 20 65 76 65 72 79 20 53 51 4c 69 74 65 20  of every SQLite 
7690: 74 61 62 6c 65 20 68 61 73 20 61 20 36 34 2d 62  table has a 64-b
76a0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
76b0: 72 20 6b 65 79 20 0a 74 68 61 74 20 69 73 20 75  r key .that is u
76c0: 6e 69 71 75 65 20 77 69 74 68 69 6e 20 74 68 65  nique within the
76d0: 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a 54 68 69   same table..Thi
76e0: 73 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 75  s integer is usu
76f0: 61 6c 6c 79 20 63 61 6c 6c 65 64 20 74 68 65 20  ally called the 
7700: 22 72 6f 77 69 64 22 2e 20 20 54 68 65 20 72 6f  "rowid".  The ro
7710: 77 69 64 20 69 73 20 74 68 65 20 61 63 74 75 61  wid is the actua
7720: 6c 20 6b 65 79 20 75 73 65 64 0a 69 6e 20 74 68  l key used.in th
7730: 65 20 42 2d 54 72 65 65 20 74 68 61 74 20 69 6d  e B-Tree that im
7740: 70 6c 65 6d 65 6e 74 73 20 61 6e 20 53 51 4c 69  plements an SQLi
7750: 74 65 20 74 61 62 6c 65 2e 20 20 52 6f 77 73 20  te table.  Rows 
7760: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 0a 72 6f  are stored in.ro
7770: 77 69 64 20 6f 72 64 65 72 2e 20 54 68 65 0a 72  wid order. The.r
7780: 6f 77 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62  owid value can b
7790: 65 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67  e accessed using
77a0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63   one of the spec
77b0: 69 61 6c 20 6e 61 6d 65 73 0a 22 3c 62 3e 52 4f  ial names."<b>RO
77c0: 57 49 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49  WID</b>", "<b>OI
77d0: 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f  D</b>", or "<b>_
77e0: 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 3c 2f 70 3e  ROWID_</b>".</p>
77f0: 0a 0a 3c 70 3e 0a 49 66 20 61 20 63 6f 6c 75 6d  ..<p>.If a colum
7800: 6e 20 69 73 20 64 65 63 6c 61 72 65 64 20 74 6f  n is declared to
7810: 20 62 65 20 61 6e 20 49 4e 54 45 47 45 52 20 50   be an INTEGER P
7820: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
7830: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20   that column is 
7840: 6e 6f 74 0a 61 20 22 72 65 61 6c 22 20 64 61 74  not.a "real" dat
7850: 61 62 61 73 65 20 63 6f 6c 75 6d 6e 20 62 75 74  abase column but
7860: 20 69 6e 73 74 65 61 64 20 62 65 63 6f 6d 65 73   instead becomes
7870: 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68  .an alias for th
7880: 65 20 72 6f 77 69 64 2e 20 20 55 6e 6c 69 6b 65  e rowid.  Unlike
7890: 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65 20 63   normal SQLite c
78a0: 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 72 6f 77 69  olumns, the rowi
78b0: 64 0a 6d 75 73 74 20 62 65 20 61 20 6e 6f 6e 2d  d.must be a non-
78c0: 4e 55 4c 4c 20 69 6e 74 65 67 65 72 20 76 61 6c  NULL integer val
78d0: 75 65 2e 20 20 54 68 65 20 72 6f 77 69 64 20 69  ue.  The rowid i
78e0: 73 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f  s not able to ho
78f0: 6c 64 0a 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ld.floating poin
7900: 74 20 76 61 6c 75 65 73 2c 20 73 74 72 69 6e 67  t values, string
7910: 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c  s, BLOBs, or NUL
7920: 4c 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  Ls.</p>..<blockq
7930: 75 6f 74 65 3e 3c 69 3e 0a 41 6e 20 49 4e 54 45  uote><i>.An INTE
7940: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
7950: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 61 6c 69  column is an ali
7960: 61 73 20 66 6f 72 20 74 68 65 20 36 34 2d 62 69  as for the 64-bi
7970: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
7980: 20 72 6f 77 69 64 2e 0a 3c 2f 69 3e 3c 2f 62 6c   rowid..</i></bl
7990: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 41 6e  ockquote>..<p>An
79a0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
79b0: 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 63 61 6e 20   KEY column can 
79c0: 61 6c 73 6f 20 69 6e 63 6c 75 64 65 20 74 68 65  also include the
79d0: 0a 6b 65 79 77 6f 72 64 20 5b 41 55 54 4f 49 4e  .keyword [AUTOIN
79e0: 43 52 45 4d 45 4e 54 5d 2e 20 20 54 68 65 20 5b  CREMENT].  The [
79f0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20 6b  AUTOINCREMENT] k
7a00: 65 79 77 6f 72 64 20 6d 6f 64 69 66 69 65 64 20  eyword modified 
7a10: 74 68 65 20 77 61 79 0a 74 68 61 74 20 42 2d 54  the way.that B-T
7a20: 72 65 65 20 6b 65 79 73 20 61 72 65 20 61 75 74  ree keys are aut
7a30: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
7a40: 61 74 65 64 2e 20 20 41 64 64 69 74 69 6f 6e 61  ated.  Additiona
7a50: 6c 20 64 65 74 61 69 6c 0a 6f 6e 20 61 75 74 6f  l detail.on auto
7a60: 6d 61 74 69 63 20 42 2d 54 72 65 65 20 6b 65 79  matic B-Tree key
7a70: 20 67 65 6e 65 72 61 74 69 6f 6e 20 69 73 20 61   generation is a
7a80: 76 61 69 6c 61 62 6c 65 0a 3c 61 20 68 72 65 66  vailable.<a href
7a90: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
7aa0: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
7ab0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 70 65 63  /p>..<p>The spec
7ac0: 69 61 6c 20 62 65 68 61 76 69 6f 72 20 6f 66 20  ial behavior of 
7ad0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
7ae0: 4b 45 59 0a 69 73 20 6f 6e 6c 79 20 61 76 61 69  KEY.is only avai
7af0: 6c 61 62 6c 65 20 69 66 20 74 68 65 20 74 79 70  lable if the typ
7b00: 65 20 6e 61 6d 65 20 69 73 20 65 78 61 63 74 6c  e name is exactl
7b10: 79 20 22 49 4e 54 45 47 45 52 22 20 28 69 6e 20  y "INTEGER" (in 
7b20: 61 6e 79 20 6d 69 78 74 75 72 65 0a 6f 66 20 75  any mixture.of u
7b30: 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63  pper and lower c
7b40: 61 73 65 2e 29 20 20 4f 74 68 65 72 20 69 6e 74  ase.)  Other int
7b50: 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 0a  eger type names.
7b60: 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42  like "INT" or "B
7b70: 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54  IGINT" or "SHORT
7b80: 20 49 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e   INTEGER" or "UN
7b90: 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 0a  SIGNED INTEGER".
7ba0: 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61  causes the prima
7bb0: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f  ry key column to
7bc0: 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72   behave as an or
7bd0: 64 69 6e 61 72 79 20 74 61 62 6c 65 20 63 6f 6c  dinary table col
7be0: 75 6d 6e 20 77 69 74 68 0a 69 6e 74 65 67 65 72  umn with.integer
7bf0: 20 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20   [affinity] and 
7c00: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20  a unique index, 
7c10: 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20  not as an alias 
7c20: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 0a 54  for the rowid..T
7c30: 68 65 20 73 70 65 63 69 61 6c 20 62 65 68 61 76  he special behav
7c40: 69 6f 72 20 6f 66 20 49 4e 54 45 47 45 52 20 50  ior of INTEGER P
7c50: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f 6e  RIMARY KEY is on
7c60: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20  ly available if 
7c70: 74 68 65 0a 70 72 69 6d 61 72 79 20 6b 65 79 20  the.primary key 
7c80: 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
7c90: 6d 6e 2e 20 20 4d 75 6c 74 69 2d 63 6f 6c 75 6d  mn.  Multi-colum
7ca0: 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 64  n primary keys d
7cb0: 6f 20 6e 6f 74 20 62 65 63 6f 6d 65 0a 61 6c 69  o not become.ali
7cc0: 61 73 65 73 20 66 6f 72 20 74 68 65 20 72 6f 77  ases for the row
7cd0: 69 64 2e 0a 54 68 65 20 41 55 54 4f 49 4e 43 52  id..The AUTOINCR
7ce0: 45 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20 6f 6e  EMENT keyword on
7cf0: 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 61 20 63 6f  ly works on a co
7d00: 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 61 6e 20  lumn that is an 
7d10: 61 6c 69 61 73 0a 66 6f 72 20 74 68 65 20 72 6f  alias.for the ro
7d20: 77 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74  wid.</p>..<p>Not
7d30: 65 20 74 68 61 74 20 73 65 61 72 63 68 65 73 20  e that searches 
7d40: 61 67 61 69 6e 73 74 20 61 20 72 6f 77 69 64 20  against a rowid 
7d50: 61 72 65 20 67 65 6e 65 72 61 6c 6c 79 20 61 62  are generally ab
7d60: 6f 75 74 20 74 77 69 63 65 20 61 73 0a 66 61 73  out twice as.fas
7d70: 74 20 61 73 20 73 65 61 72 63 68 65 73 20 61 67  t as searches ag
7d80: 61 69 6e 73 74 20 61 6e 79 20 6f 74 68 65 72 20  ainst any other 
7d90: 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 69  PRIMARY KEY or i
7da0: 6e 64 65 78 65 64 20 76 61 6c 75 65 2e 0a 3c 2f  ndexed value..</
7db0: 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
7dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e00: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
7e10: 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45  n {CREATE TRIGGE
7e20: 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72  R} createtrigger
7e30: 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45   {{CREATE TRIGGE
7e40: 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  R}}..BubbleDiagr
7e50: 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65  am create-trigge
7e60: 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  r-stmt 1.</tcl>.
7e70: 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 54  .<p>The CREATE T
7e80: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
7e90: 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
7ea0: 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20  triggers to the 
7eb0: 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  .database schema
7ec0: 2e 20 54 72 69 67 67 65 72 73 20 61 72 65 20 64  . Triggers are d
7ed0: 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f  atabase operatio
7ee0: 6e 73 20 0a 74 68 61 74 20 61 72 65 20 61 75 74  ns .that are aut
7ef0: 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f  omatically perfo
7f00: 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65 63  rmed when a spec
7f10: 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20 65  ified database e
7f20: 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f  vent.occurs.  </
7f30: 70 3e 0a 0a 3c 70 3e 41 20 74 72 69 67 67 65 72  p>..<p>A trigger
7f40: 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65   may be specifie
7f50: 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76  d to fire whenev
7f60: 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  er a [DELETE], [
7f70: 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44  INSERT],.or [UPD
7f80: 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63  ATE] of a.partic
7f90: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61  ular database ta
7fa0: 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77  ble occurs, or w
7fb0: 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41  henever an [UPDA
7fc0: 54 45 5d 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  TE] of one or mo
7fd0: 72 65 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c  re.specified col
7fe0: 75 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 20  umns of a table 
7ff0: 61 72 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e  are updated.</p>
8000: 0a 0a 3c 70 3e 41 74 20 74 68 69 73 20 74 69 6d  ..<p>At this tim
8010: 65 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  e SQLite support
8020: 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20  s only FOR EACH 
8030: 52 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f  ROW triggers, no
8040: 74 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45  t FOR EACH.STATE
8050: 4d 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20 48  MENT triggers. H
8060: 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20  ence explicitly 
8070: 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45  specifying FOR E
8080: 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f  ACH ROW is optio
8090: 6e 61 6c 2e 20 20 46 4f 52 0a 45 41 43 48 20 52  nal.  FOR.EACH R
80a0: 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20  OW implies that 
80b0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
80c0: 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  ts specified in 
80d0: 74 68 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20  the trigger.may 
80e0: 62 65 20 65 78 65 63 75 74 65 64 20 28 64 65 70  be executed (dep
80f0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48  ending on the WH
8100: 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65  EN clause) for e
8110: 61 63 68 20 64 61 74 61 62 61 73 65 20 72 6f 77  ach database row
8120: 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c   being.inserted,
8130: 20 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65   updated or dele
8140: 74 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  ted by the state
8150: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
8160: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
8170: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 6f 74 68 20 74  .</p>..<p>Both t
8180: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61  he WHEN clause a
8190: 6e 64 20 74 68 65 20 74 72 69 67 67 65 72 20 61  nd the trigger a
81a0: 63 74 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73  ctions may acces
81b0: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74  s elements of .t
81c0: 68 65 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73  he row being ins
81d0: 65 72 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f  erted, deleted o
81e0: 72 20 75 70 64 61 74 65 64 20 75 73 69 6e 67 20  r updated using 
81f0: 72 65 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68  references of th
8200: 65 20 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e  e form ."NEW.<i>
8210: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22  column-name</i>"
8220: 20 61 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c   and "OLD.<i>col
8230: 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77  umn-name</i>", w
8240: 68 65 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  here.<i>column-n
8250: 61 6d 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e  ame</i> is the n
8260: 61 6d 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ame of a column 
8270: 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74  from the table t
8280: 68 61 74 20 74 68 65 20 74 72 69 67 67 65 72 0a  hat the trigger.
8290: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
82a0: 74 68 2e 20 4f 4c 44 20 61 6e 64 20 4e 45 57 20  th. OLD and NEW 
82b0: 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f  references may o
82c0: 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  nly be used in t
82d0: 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74  riggers on.event
82e0: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79  s for which they
82f0: 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61   are relevant, a
8300: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
8310: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
8320: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
8330: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
8340: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
8350: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
8360: 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e  >INSERT</i></td>
8370: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
8380: 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  ">NEW references
8390: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
83a0: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
83b0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
83c0: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
83d0: 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69  120><i>UPDATE</i
83e0: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
83f0: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20  n="top">NEW and 
8400: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
8410: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
8420: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
8430: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
8440: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
8450: 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c  0><i>DELETE</i><
8460: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
8470: 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65  "top">OLD refere
8480: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
8490: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
84a0: 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61  e>.</p>..<p>If a
84b0: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20   WHEN clause is 
84c0: 73 75 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51  supplied, the SQ
84d0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
84e0: 63 69 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20  cified.are only 
84f0: 65 78 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77  executed for row
8500: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  s for which the 
8510: 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74  WHEN.clause is t
8520: 72 75 65 2e 20 49 66 20 6e 6f 20 57 48 45 4e 20  rue. If no WHEN 
8530: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
8540: 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74  ed, the SQL stat
8550: 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75  ements.are execu
8560: 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73  ted for all rows
8570: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 42 45  .</p>..<p>The BE
8580: 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65  FORE or AFTER ke
8590: 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73  yword determines
85a0: 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65   when the trigge
85b0: 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62  r actions.will b
85c0: 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74  e executed relat
85d0: 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72  ive to the inser
85e0: 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69  tion, modificati
85f0: 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66  on or removal of
8600: 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20   the.associated 
8610: 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20  row.</p>..<p>An 
8620: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
8630: 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65 63  ause may be spec
8640: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
8650: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20   an [UPDATE] or 
8660: 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20  [INSERT].action 
8670: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
8680: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a  of the trigger..
8690: 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b 4f  However if an [O
86a0: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
86b0: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
86c0: 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65 20  as part of .the 
86d0: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
86e0: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
86f0: 20 66 69 72 65 2c 20 74 68 65 6e 20 74 68 69 73   fire, then this
8700: 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69   conflict handli
8710: 6e 67 0a 70 6f 6c 69 63 79 20 69 73 20 75 73 65  ng.policy is use
8720: 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a  d instead.</p>..
8730: 3c 70 3e 54 72 69 67 67 65 72 73 20 61 72 65 20  <p>Triggers are 
8740: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44  automatically [D
8750: 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20 64 72  ROP TRIGGER | dr
8760: 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20  opped].when the 
8770: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 79 20  table that they 
8780: 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20  are .associated 
8790: 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62  with (the <i>tab
87a0: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c  le-name</i> tabl
87b0: 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42  e) is .[DROP TAB
87c0: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20  LE | dropped].  
87d0: 48 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74  However if the t
87e0: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
87f0: 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74 68  ns reference.oth
8800: 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20 74  er tables, the t
8810: 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64 72  rigger is not dr
8820: 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69 65  opped or modifie
8830: 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65 72  d if those other
8840: 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52 4f  .tables are [DRO
8850: 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65  P TABLE | droppe
8860: 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41 42  d] or [ALTER TAB
8870: 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c  LE | modified].<
8880: 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73  /p>..<p>Triggers
8890: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
88a0: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49  ng the [DROP TRI
88b0: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
88c0: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </p>...<tcl>hd_f
88d0: 72 61 67 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f  ragment instead_
88e0: 6f 66 5f 74 72 69 67 67 65 72 20 7b 49 4e 53 54  of_trigger {INST
88f0: 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44  EAD OF} {INSTEAD
8900: 20 4f 46 20 74 72 69 67 67 65 72 7d 3c 2f 74 63   OF trigger}</tc
8910: 6c 3e 0a 0a 3c 68 33 3e 49 4e 53 54 45 41 44 20  l>..<h3>INSTEAD 
8920: 4f 46 20 74 72 69 67 67 65 72 3c 2f 68 33 3e 0a  OF trigger</h3>.
8930: 0a 3c 70 3e 54 72 69 67 67 65 72 73 20 6d 61 79  .<p>Triggers may
8940: 20 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20 5b   be created on [
8950: 76 69 65 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20  views], as well 
8960: 61 73 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  as ordinary tabl
8970: 65 73 2c 20 62 79 0a 73 70 65 63 69 66 79 69 6e  es, by.specifyin
8980: 67 20 49 4e 53 54 45 41 44 20 4f 46 20 69 6e 20  g INSTEAD OF in 
8990: 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47 47  the CREATE TRIGG
89a0: 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 49  ER statement. .I
89b0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e  f one or more ON
89c0: 20 49 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45   INSERT, ON DELE
89d0: 54 45 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45 20  TE.or ON UPDATE 
89e0: 74 72 69 67 67 65 72 73 20 61 72 65 20 64 65 66  triggers are def
89f0: 69 6e 65 64 20 6f 6e 20 61 20 76 69 65 77 2c 20  ined on a view, 
8a00: 74 68 65 6e 20 69 74 20 69 73 20 6e 6f 74 20 61  then it is not a
8a10: 6e 0a 65 72 72 6f 72 20 74 6f 20 65 78 65 63 75  n.error to execu
8a20: 74 65 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  te an INSERT, DE
8a30: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
8a40: 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20  tatement on the 
8a50: 76 69 65 77 2c 20 0a 72 65 73 70 65 63 74 69 76  view, .respectiv
8a60: 65 6c 79 2e 20 54 68 65 72 65 61 66 74 65 72 2c  ely. Thereafter,
8a70: 0a 65 78 65 63 75 74 69 6e 67 20 61 6e 20 49 4e  .executing an IN
8a80: 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20  SERT, DELETE or 
8a90: 55 50 44 41 54 45 20 6f 6e 20 74 68 65 20 76 69  UPDATE on the vi
8aa0: 65 77 20 63 61 75 73 65 73 20 74 68 65 20 61 73  ew causes the as
8ab0: 73 6f 63 69 61 74 65 64 0a 74 72 69 67 67 65 72  sociated.trigger
8ac0: 73 20 74 6f 20 66 69 72 65 2e 20 54 68 65 20 72  s to fire. The r
8ad0: 65 61 6c 20 74 61 62 6c 65 73 20 75 6e 64 65 72  eal tables under
8ae0: 6c 79 69 6e 67 20 74 68 65 20 76 69 65 77 20 61  lying the view a
8af0: 72 65 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a  re not modified.
8b00: 28 65 78 63 65 70 74 20 70 6f 73 73 69 62 6c 79  (except possibly
8b10: 20 65 78 70 6c 69 63 69 74 6c 79 2c 20 62 79 20   explicitly, by 
8b20: 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  a trigger progra
8b30: 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 74 65  m).</p>..<p>Note
8b40: 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74   that the [sqlit
8b50: 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e  e3_changes()] an
8b60: 64 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  d [sqlite3_total
8b70: 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65  _changes()] inte
8b80: 72 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f  rfaces.do not co
8b90: 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74  unt INSTEAD OF t
8ba0: 72 69 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20  rigger firings, 
8bb0: 62 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63  but the.[count_c
8bc0: 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64  hanges pragma] d
8bd0: 6f 65 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41  oes count INSTEA
8be0: 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72  D OF trigger fir
8bf0: 69 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78  ing.</p>..<h3>Ex
8c00: 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  amples</h3>..<p>
8c10: 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75  Assuming that cu
8c20: 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61  stomer records a
8c30: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
8c40: 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62   "customers" tab
8c50: 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64  le, and.that ord
8c60: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
8c70: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72  tored in the "or
8c80: 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65  ders" table, the
8c90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67   following trigg
8ca0: 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20  er.ensures that 
8cb0: 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f  all associated o
8cc0: 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72 65  rders are redire
8cd0: 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73 74  cted when a cust
8ce0: 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73  omer changes.his
8cf0: 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73 3a   or her address:
8d00: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
8d10: 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47  le {.CREATE TRIG
8d20: 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f  GER update_custo
8d30: 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44 41  mer_address UPDA
8d40: 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e  TE OF address ON
8d50: 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45   customers .  BE
8d60: 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f  GIN.    UPDATE o
8d70: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
8d80: 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20  s = new.address 
8d90: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
8da0: 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a  ame = old.name;.
8db0: 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a    END;.}</tcl>..
8dc0: 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72 69  <p>With this tri
8dd0: 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20  gger installed, 
8de0: 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73 74  executing the st
8df0: 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74  atement:</p>..<t
8e00: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44  cl>Example {.UPD
8e10: 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45  ATE customers SE
8e20: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
8e30: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e  ain St.' WHERE n
8e40: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
8e50: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  s';.}</tcl>..<p>
8e60: 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f  causes the follo
8e70: 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d  wing to be autom
8e80: 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65  atically execute
8e90: 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  d:</p>..<tcl>Exa
8ea0: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72  mple {.UPDATE or
8eb0: 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73  ders SET address
8ec0: 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20   = '1 Main St.' 
8ed0: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
8ee0: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
8ef0: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 33  s';.}</tcl>..<h3
8f00: 3e 52 6f 77 69 64 73 20 61 6e 64 20 42 45 46 4f  >Rowids and BEFO
8f10: 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e  RE triggers</h3>
8f20: 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 63  ..<p>Note that c
8f30: 75 72 72 65 6e 74 6c 79 2c 20 74 72 69 67 67 65  urrently, trigge
8f40: 72 73 20 6d 61 79 20 62 65 68 61 76 65 20 6f 64  rs may behave od
8f50: 64 6c 79 20 77 68 65 6e 20 63 72 65 61 74 65 64  dly when created
8f60: 20 6f 6e 20 74 61 62 6c 65 73 0a 20 20 77 69 74   on tables.  wit
8f70: 68 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  h [INTEGER PRIMA
8f80: 52 59 20 4b 45 59 5d 20 66 69 65 6c 64 73 2e 20  RY KEY] fields. 
8f90: 49 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67  If a BEFORE trig
8fa0: 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 6f 64 69  ger program modi
8fb0: 66 69 65 73 20 74 68 65 20 0a 20 20 5b 49 4e 54  fies the .  [INT
8fc0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
8fd0: 5d 20 66 69 65 6c 64 20 6f 66 20 61 20 72 6f 77  ] field of a row
8fe0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 75   that will be su
8ff0: 62 73 65 71 75 65 6e 74 6c 79 20 75 70 64 61 74  bsequently updat
9000: 65 64 20 62 79 20 74 68 65 0a 20 20 73 74 61 74  ed by the.  stat
9010: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
9020: 73 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  s the trigger to
9030: 20 66 69 72 65 2c 20 74 68 65 6e 20 74 68 65 20   fire, then the 
9040: 75 70 64 61 74 65 20 6d 61 79 20 6e 6f 74 20 6f  update may not o
9050: 63 63 75 72 2e 20 0a 20 20 54 68 65 20 77 6f 72  ccur. .  The wor
9060: 6b 61 72 6f 75 6e 64 20 69 73 20 74 6f 20 64 65  karound is to de
9070: 63 6c 61 72 65 20 74 68 65 20 74 61 62 6c 65 20  clare the table 
9080: 77 69 74 68 20 61 20 50 52 49 4d 41 52 59 20 4b  with a PRIMARY K
9090: 45 59 20 63 6f 6c 75 6d 6e 20 69 6e 73 74 65 61  EY column instea
90a0: 64 0a 20 20 6f 66 20 61 6e 20 5b 49 4e 54 45 47  d.  of an [INTEG
90b0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
90c0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  column.</p>..<h3
90d0: 3e 54 68 65 20 52 41 49 53 45 28 29 20 66 75 6e  >The RAISE() fun
90e0: 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  ction</h3>..<p>A
90f0: 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e   special SQL fun
9100: 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61  ction RAISE() ma
9110: 79 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e  y be used within
9120: 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
9130: 61 6d 2c 0a 77 69 74 68 20 74 68 65 20 66 6f 6c  am,.with the fol
9140: 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70  lowing syntax</p
9150: 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  > ..<tcl>BubbleD
9160: 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e  iagram raise-fun
9170: 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ction</tcl>..<p>
9180: 57 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  When one of the 
9190: 66 69 72 73 74 20 74 68 72 65 65 20 66 6f 72 6d  first three form
91a0: 73 20 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69  s is called duri
91b0: 6e 67 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  ng trigger-progr
91c0: 61 6d 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68  am.execution, th
91d0: 65 20 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20  e specified [ON 
91e0: 43 4f 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73  CONFLICT] proces
91f0: 73 69 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65  sing is performe
9200: 64 0a 28 65 69 74 68 65 72 20 41 42 4f 52 54 2c  d.(either ABORT,
9210: 20 46 41 49 4c 20 6f 72 20 52 4f 4c 4c 42 41 43   FAIL or ROLLBAC
9220: 4b 29 20 61 6e 64 20 74 68 65 20 63 75 72 72 65  K) and the curre
9230: 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61  nt query termina
9240: 74 65 73 2e 0a 41 6e 20 65 72 72 6f 72 20 63 6f  tes..An error co
9250: 64 65 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f  de of [SQLITE_CO
9260: 4e 53 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74  NSTRAINT] is ret
9270: 75 72 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70  urned to the app
9280: 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20  lication,.along 
9290: 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
92a0: 65 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ed error message
92b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 52  .</p>..<p>When R
92c0: 41 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20  AISE(IGNORE) is 
92d0: 63 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61  called, the rema
92e0: 69 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72  inder of the cur
92f0: 72 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f  rent trigger pro
9300: 67 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d  gram,.the statem
9310: 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20  ent that caused 
9320: 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
9330: 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61  ram to execute a
9340: 6e 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  nd any subsequen
9350: 74 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  t.trigger progra
9360: 6d 73 20 74 68 61 74 20 77 6f 75 6c 64 20 6f 66  ms that would of
9370: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 61   been executed a
9380: 72 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 4e 6f  re abandoned. No
9390: 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65   database.change
93a0: 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63  s are rolled bac
93b0: 6b 2e 20 20 49 66 20 74 68 65 20 73 74 61 74 65  k.  If the state
93c0: 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65 64  ment that caused
93d0: 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
93e0: 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20  gram.to execute 
93f0: 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f  is itself part o
9400: 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f 67  f a trigger prog
9410: 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74  ram, then that t
9420: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72  rigger program.r
9430: 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e  esumes execution
9440: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
9450: 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74  g of the next st
9460: 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ep..</p>...<tcl>
9470: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
9480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94c0: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
94d0: 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69   VIEW} {createvi
94e0: 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45  ew} {{CREATE VIE
94f0: 57 7d 20 76 69 65 77 20 76 69 65 77 73 7d 0a 0a  W} view views}..
9500: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
9510: 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74 20 31  eate-view-stmt 1
9520: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
9530: 43 52 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d  CREATE VIEW comm
9540: 61 6e 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61  and assigns a na
9550: 6d 65 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b  me to a pre-pack
9560: 61 67 65 64 20 0a 3c 61 20 68 72 65 66 3d 22 6c  aged .<a href="l
9570: 61 6e 67 5f 73 65 6c 65 63 74 2e 68 74 6d 6c 22  ang_select.html"
9580: 3e 53 45 4c 45 43 54 3c 2f 61 3e 0a 73 74 61 74  >SELECT</a>.stat
9590: 65 6d 65 6e 74 2e 20 20 4f 6e 63 65 20 74 68 65  ement.  Once the
95a0: 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64   view is created
95b0: 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64  , it can be used
95c0: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
95d0: 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b  use.of another [
95e0: 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63 65  SELECT] in place
95f0: 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
9600: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68  ..</p>..<p>If th
9610: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
9620: 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20  PORARY" keyword 
9630: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
9640: 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22  n "CREATE".and "
9650: 56 49 45 57 22 20 74 68 65 6e 20 74 68 65 20 76  VIEW" then the v
9660: 69 65 77 20 74 68 61 74 20 69 73 20 63 72 65 61  iew that is crea
9670: 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69  ted is only visi
9680: 62 6c 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65  ble to the.proce
9690: 73 73 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74  ss that opened t
96a0: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
96b0: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
96c0: 20 64 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68   deleted when.th
96d0: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
96e0: 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49  osed.</p>..<p> I
96f0: 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  f a &lt;database
9700: 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65  -name&gt; is spe
9710: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
9720: 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64   view is created
9730: 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64   in .the named d
9740: 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20 61  atabase. It is a
9750: 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69  n error to speci
9760: 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61  fy both a &lt;da
9770: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a  tabase-name&gt;.
9780: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79  and the TEMP key
9790: 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65  word, unless the
97a0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
97b0: 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22  me&gt; is "temp"
97c0: 2e 20 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65  . If no.database
97d0: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
97e0: 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50  ed, and the TEMP
97f0: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
9800: 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62  present,.the tab
9810: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
9820: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
9830: 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20  se.</p>..<p>You 
9840: 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c  cannot [DELETE],
9850: 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55   [INSERT], or [U
9860: 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20  PDATE] a view.  
9870: 56 69 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f  Views are read-o
9880: 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20  nly .in SQLite. 
9890: 20 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e   However, in man
98a0: 79 20 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20  y cases you can 
98b0: 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20  use an.[INSTEAD 
98c0: 4f 46 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74  OF trigger] on t
98d0: 68 65 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d  he view to accom
98e0: 70 6c 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20  plish .the same 
98f0: 74 68 69 6e 67 2e 20 20 56 69 65 77 73 20 61 72  thing.  Views ar
9900: 65 20 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20  e removed .with 
9910: 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20  the [DROP VIEW] 
9920: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74  command.</p>..<t
9930: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
9940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9980: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41  ##.Section {CREA
9990: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
99a0: 7d 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b  } {createvtab} {
99b0: 7b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  {CREATE VIRTUAL 
99c0: 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44  TABLE}}..BubbleD
99d0: 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69  iagram create-vi
99e0: 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74  rtual-table-stmt
99f0: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20   1.</tcl>..<p>A 
9a00: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
9a10: 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20  is an interface 
9a20: 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73  to an external s
9a30: 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74  torage or comput
9a40: 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61  ation.engine tha
9a50: 74 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  t appears to be 
9a60: 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73  a table but does
9a70: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74   not actually st
9a80: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ore information.
9a90: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
9aa0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  file.</p>..<p>In
9ab0: 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61   general, you ca
9ac0: 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69  n do anything wi
9ad0: 74 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61  th a [virtual ta
9ae0: 62 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65  ble] that can be
9af0: 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72   done.with an or
9b00: 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78  dinary table, ex
9b10: 63 65 70 74 20 74 68 61 74 20 79 6f 75 20 63 61  cept that you ca
9b20: 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64 69  nnot create indi
9b30: 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73 20  ces or triggers 
9b40: 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61 62  on a.virtual tab
9b50: 6c 65 2e 20 20 53 6f 6d 65 20 76 69 72 74 75 61  le.  Some virtua
9b60: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
9b70: 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d  tations might im
9b80: 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a  pose additional.
9b90: 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46  restrictions.  F
9ba0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79  or example, many
9bb0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
9bc0: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 0a 56  are read-only..V
9bd0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 63 61  irtual tables ca
9be0: 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 0a  nnot be used in.
9bf0: 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  [sqlite3_enable_
9c00: 73 68 61 72 65 64 5f 63 61 63 68 65 20 7c 20 73  shared_cache | s
9c10: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9c20: 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26  ].</p>..<p>The &
9c30: 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67  lt;module-name&g
9c40: 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  t; is the name o
9c50: 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  f an object that
9c60: 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20   implements.the 
9c70: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
9c80: 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e  The &lt;module-n
9c90: 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20  ame&gt; must be 
9ca0: 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68 0a  registered with.
9cb0: 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62  the SQLite datab
9cc0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75  ase connection u
9cd0: 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72  sing.[sqlite3_cr
9ce0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f  eate_module()] o
9cf0: 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  r [sqlite3_creat
9d00: 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70  e_module_v2()].p
9d10: 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20  rior to issuing 
9d20: 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
9d30: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
9d40: 6e 74 2e 0a 54 68 65 20 6d 6f 64 75 6c 65 20 74  nt..The module t
9d50: 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  akes zero or mor
9d60: 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65  e comma-separate
9d70: 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 54 68 65  d arguments..The
9d80: 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62   arguments can b
9d90: 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79  e just about any
9da0: 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73   text as long as
9db0: 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64   it has balanced
9dc0: 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54  .parentheses.  T
9dd0: 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74  he argument synt
9de0: 61 78 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  ax is sufficient
9df0: 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20  ly general that 
9e00: 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61  the.arguments ca
9e10: 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70  n be made to app
9e20: 65 61 72 20 61 73 20 63 6f 6c 75 6d 6e 20 64 65  ear as column de
9e30: 66 69 6e 69 74 69 6f 6e 73 20 69 6e 20 61 20 74  finitions in a t
9e40: 72 61 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45 41  raditional.[CREA
9e50: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
9e60: 65 6e 74 2e 20 20 0a 53 51 4c 69 74 65 20 70 61  ent.  .SQLite pa
9e70: 73 73 65 73 20 74 68 65 20 6d 6f 64 75 6c 65 20  sses the module 
9e80: 61 72 67 75 6d 65 6e 74 73 20 64 69 72 65 63 74  arguments direct
9e90: 6c 79 0a 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ly.to the module
9ea0: 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74   without any int
9eb0: 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74  erpretation.  It
9ec0: 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69   is the responsi
9ed0: 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f  bility.of the mo
9ee0: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
9ef0: 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64  ion to parse and
9f00: 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f   interpret its o
9f10: 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70  wn arguments.</p
9f20: 3e 0a 0a 3c 70 3e 41 20 76 69 72 74 75 61 6c 20  >..<p>A virtual 
9f30: 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79  table is destroy
9f40: 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64  ed using the ord
9f50: 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c  inary.[DROP TABL
9f60: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
9f70: 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20  here is no.DROP 
9f80: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74  VIRTUAL TABLE st
9f90: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74  atement.</p>..<t
9fa0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
9fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9ff0: 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54  ##.Section DELET
a000: 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45  E delete {DELETE
a010: 20 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c   DELETEs}..Bubbl
a020: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
a030: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
a040: 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
a050: 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
a060: 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20  ..<p>The DELETE 
a070: 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
a080: 74 6f 20 72 65 6d 6f 76 65 20 72 65 63 6f 72 64  to remove record
a090: 73 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e 0a  s from a table..
a0a0: 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  The command cons
a0b0: 69 73 74 73 20 6f 66 20 74 68 65 20 22 44 45 4c  ists of the "DEL
a0c0: 45 54 45 20 46 52 4f 4d 22 20 6b 65 79 77 6f 72  ETE FROM" keywor
a0d0: 64 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 74  ds followed by.t
a0e0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
a0f0: 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20  able from which 
a100: 72 65 63 6f 72 64 73 20 61 72 65 20 74 6f 20 62  records are to b
a110: 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70 3e 0a  e removed..</p>.
a120: 0a 3c 70 3e 57 69 74 68 6f 75 74 20 61 20 57 48  .<p>Without a WH
a130: 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20  ERE clause, all 
a140: 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
a150: 65 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 49  e are removed..I
a160: 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  f a WHERE clause
a170: 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68   is supplied, th
a180: 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f  en only those ro
a190: 77 73 20 74 68 61 74 20 6d 61 74 63 68 0a 74 68  ws that match.th
a1a0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72 65  e expression are
a1b0: 20 72 65 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 0a 3c   removed.</p>..<
a1c0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
a1d0: 74 72 75 63 61 74 65 6f 70 74 20 7b 74 72 75 6e  trucateopt {trun
a1e0: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
a1f0: 6e 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 57 68 65 6e  n}</tcl>.<p>When
a200: 20 74 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d   the WHERE is om
a210: 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c  itted from a DEL
a220: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  ETE statement an
a230: 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e  d the table.bein
a240: 67 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f  g deleted has no
a250: 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74   triggers,.SQLit
a260: 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69  e uses an optimi
a270: 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20  zation to erase 
a280: 74 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65  the entire table
a290: 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74   content.without
a2a0: 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74   having to visit
a2b0: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
a2c0: 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61   table individua
a2d0: 6c 2e 0a 54 68 69 73 20 22 74 72 75 6e 63 61 74  l..This "truncat
a2e0: 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  e" optimization 
a2f0: 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65 74 65  makes the delete
a300: 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74 65 72   run much faster
a310: 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74  ..Prior to SQLit
a320: 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35  e [version 3.6.5
a330: 5d 2c 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ], the truncate 
a340: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73  optimization.als
a350: 6f 20 6d 65 61 6e 74 20 74 68 61 74 20 74 68 65  o meant that the
a360: 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   [sqlite3_change
a370: 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65  s()] and.[sqlite
a380: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
a390: 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 61 6e  )] interfaces.an
a3a0: 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61  d the [count_cha
a3b0: 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a 77 69 6c  nges pragma].wil
a3c0: 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72  l not actually r
a3d0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a3e0: 20 6f 66 20 64 65 6c 65 74 65 64 20 72 6f 77 73   of deleted rows
a3f0: 2e 20 20 0a 54 68 61 74 20 70 72 6f 62 6c 65 6d  .  .That problem
a400: 20 68 61 73 20 62 65 65 6e 20 66 69 78 65 64 20   has been fixed 
a410: 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33  as of [version 3
a420: 2e 36 2e 35 5d 2e 0a 0a 3c 70 3e 54 68 65 20 74  .6.5]...<p>The t
a430: 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
a440: 74 69 6f 6e 20 63 61 6e 20 62 65 20 64 69 73 61  tion can be disa
a450: 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75 65  bled for all que
a460: 72 69 65 73 20 62 79 20 72 65 63 6f 6d 70 69 6c  ries by recompil
a470: 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68 20  ing.SQLite with 
a480: 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54  the [SQLITE_OMIT
a490: 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49  _TRUNCATE_OPTIMI
a4a0: 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65 2d  ZATION] compile-
a4b0: 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70 3e  time switch.</p>
a4c0: 0a 0a 3c 70 3e 49 66 20 53 51 4c 69 74 65 20 69  ..<p>If SQLite i
a4d0: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
a4e0: 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
a4f0: 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
a500: 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d  _LIMIT].compile-
a510: 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65  time option, the
a520: 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
a530: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
a540: 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65 64  ment is.extended
a550: 20 62 79 20 74 68 65 20 61 64 64 69 74 69 6f 6e   by the addition
a560: 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44   of optional ORD
a570: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
a580: 63 6c 61 75 73 65 73 3a 3c 2f 70 3e 0a 0a 3c 74  clauses:</p>..<t
a590: 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
a5a0: 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d   delete-stmt-lim
a5b0: 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  ited</tcl>..<p>T
a5c0: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49  he optional LIMI
a5d0: 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  T clause can be 
a5e0: 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
a5f0: 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73  e number of.rows
a600: 20 64 65 6c 65 74 65 64 2c 20 61 6e 64 20 74 68   deleted, and th
a610: 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68 65 20  ereby limit the 
a620: 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72 61 6e  size of the tran
a630: 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20 4f 52 44  saction..The ORD
a640: 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
a650: 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74  used only to det
a660: 65 72 6d 69 6e 65 20 77 68 69 63 68 20 72 6f 77  ermine which row
a670: 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e 20 74 68  s fall.within th
a680: 65 20 4c 49 4d 49 54 2e 20 20 54 68 65 20 6f 72  e LIMIT.  The or
a690: 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
a6a0: 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69 73  s are deleted is
a6b0: 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69   arbitrary.and i
a6c0: 73 20 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65 64  s not determined
a6d0: 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59   by the ORDER BY
a6e0: 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70   clause.</p>..<p
a6f0: 3e 54 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66  >The presence of
a700: 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20   a LIMIT clause 
a710: 64 65 66 65 61 74 73 20 74 68 65 20 74 72 75 6e  defeats the trun
a720: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
a730: 6e 0a 63 61 75 73 69 6e 67 20 61 6c 6c 20 72 6f  n.causing all ro
a740: 77 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  ws being deleted
a750: 20 74 6f 20 62 65 20 76 69 73 69 74 65 64 2e 3c   to be visited.<
a760: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
a770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a7a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a7b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
a7c0: 6f 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41 42  on {DETACH DATAB
a7d0: 41 53 45 7d 20 64 65 74 61 63 68 20 44 45 54 41  ASE} detach DETA
a7e0: 43 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  CH..BubbleDiagra
a7f0: 6d 20 64 65 74 61 63 68 2d 73 74 6d 74 20 31 0a  m detach-stmt 1.
a800: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20  </tcl>..<p>This 
a810: 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68  statement detach
a820: 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c  es an additional
a830: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
a840: 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  tion previously 
a850: 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67 20  .attached using 
a860: 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61  the [ATTACH] sta
a870: 74 65 6d 65 6e 74 2e 20 20 0a 49 74 20 69 73 20  tement.  .It is 
a880: 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65  possible to have
a890: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
a8a0: 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65 64  se file attached
a8b0: 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20   multiple times 
a8c0: 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74  using .different
a8d0: 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61   names, and deta
a8e0: 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63  ching one connec
a8f0: 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77  tion to a file w
a900: 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f  ill leave the .o
a910: 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70  thers intact.</p
a920: 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 74 61 74 65  >..<p>This state
a930: 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69  ment will fail i
a940: 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74  f SQLite is in t
a950: 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74  he middle of a t
a960: 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  ransaction.</p>.
a970: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
a980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a9c0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
a9d0: 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70  DROP INDEX} drop
a9e0: 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44  index {{DROP IND
a9f0: 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EX}}..BubbleDiag
aa00: 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73  ram drop-index-s
aa10: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
aa20: 3e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20  >The DROP INDEX 
aa30: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
aa40: 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64  s an index added
aa50: 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54  .with the [CREAT
aa60: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
aa70: 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 6e  nt.  The index n
aa80: 61 6d 65 64 20 69 73 20 63 6f 6d 70 6c 65 74 65  amed is complete
aa90: 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a  ly removed from.
aaa0: 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20 6f  the disk.  The o
aab0: 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f 76  nly way to recov
aac0: 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  er the index is 
aad0: 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a 61  to reenter the.a
aae0: 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45 41  ppropriate [CREA
aaf0: 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e  TE INDEX] comman
ab00: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44  d.</p>..<p>The D
ab10: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
ab20: 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72 65 64  ent does not red
ab30: 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20  uce the size of 
ab40: 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66 69  the database .fi
ab50: 6c 65 20 69 6e 20 74 68 65 20 64 65 66 61 75 6c  le in the defaul
ab60: 74 20 6d 6f 64 65 2e 0a 45 6d 70 74 79 20 73 70  t mode..Empty sp
ab70: 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  ace in the datab
ab80: 61 73 65 20 69 73 20 72 65 74 61 69 6e 65 64 20  ase is retained 
ab90: 66 6f 72 20 6c 61 74 65 72 20 5b 49 4e 53 45 52  for later [INSER
aba0: 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  T] statements.  
abb0: 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72 65 65 20  To .remove free 
abc0: 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61 74  space in the dat
abd0: 61 62 61 73 65 2c 20 75 73 65 20 74 68 65 20 5b  abase, use the [
abe0: 56 41 43 55 55 4d 5d 0a 63 6f 6d 6d 61 6e 64 2e  VACUUM].command.
abf0: 20 20 49 66 20 5b 61 75 74 6f 5f 76 61 63 75 75    If [auto_vacuu
ac00: 6d 5d 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c  m] mode is enabl
ac10: 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ed for a databas
ac20: 65 20 74 68 65 6e 20 73 70 61 63 65 0a 77 69 6c  e then space.wil
ac30: 6c 20 62 65 20 66 72 65 65 64 20 61 75 74 6f 6d  l be freed autom
ac40: 61 74 69 63 61 6c 6c 79 20 62 79 20 44 52 4f 50  atically by DROP
ac50: 20 49 4e 44 45 58 2e 3c 2f 70 3e 0a 0a 0a 3c 74   INDEX.</p>...<t
ac60: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
ac70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ac90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
acb0: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50  ##.Section {DROP
acc0: 20 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c   TABLE} droptabl
acd0: 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d  e {{DROP TABLE}}
ace0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
acf0: 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20  drop-table-stmt 
ad00: 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  1.</tcl>..<p>The
ad10: 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74   DROP TABLE stat
ad20: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
ad30: 74 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68  table added with
ad40: 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42   the.[CREATE TAB
ad50: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
ad60: 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69  The name specifi
ad70: 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20  ed is the.table 
ad80: 6e 61 6d 65 2e 20 20 49 74 20 69 73 20 63 6f 6d  name.  It is com
ad90: 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20  pletely removed 
ada0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
adb0: 65 20 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65  e schema and the
adc0: 20 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68   .disk file.  Th
add0: 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20  e table can not 
ade0: 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 41  be recovered.  A
adf0: 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74  ll indices and t
ae00: 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74  riggers.associat
ae10: 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
ae20: 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74  e are also delet
ae30: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
ae40: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
ae50: 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72 65  ment does not re
ae60: 64 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66  duce the size of
ae70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66   the database .f
ae80: 69 6c 65 20 69 6e 20 74 68 65 20 64 65 66 61 75  ile in the defau
ae90: 6c 74 20 6d 6f 64 65 2e 20 20 45 6d 70 74 79 20  lt mode.  Empty 
aea0: 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61 74  space in the dat
aeb0: 61 62 61 73 65 20 69 73 20 72 65 74 61 69 6e 65  abase is retaine
aec0: 64 20 66 6f 72 0a 6c 61 74 65 72 20 5b 49 4e 53  d for.later [INS
aed0: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  ERT] statements.
aee0: 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72 65    To .remove fre
aef0: 65 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64  e space in the d
af00: 61 74 61 62 61 73 65 2c 20 0a 75 73 65 20 74 68  atabase, .use th
af10: 65 20 5b 56 41 43 55 55 4d 5d 20 73 74 61 74 65  e [VACUUM] state
af20: 6d 65 6e 74 2e 0a 49 66 20 5b 61 75 74 6f 5f 76  ment..If [auto_v
af30: 61 63 75 75 6d 5d 20 6d 6f 64 65 20 69 73 20 65  acuum] mode is e
af40: 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
af50: 61 62 61 73 65 20 74 68 65 6e 20 73 70 61 63 65  abase then space
af60: 0a 77 69 6c 6c 20 62 65 20 66 72 65 65 64 20 61  .will be freed a
af70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79 20  utomatically by 
af80: 44 52 4f 50 20 54 41 42 4c 45 2e 3c 2f 70 3e 0a  DROP TABLE.</p>.
af90: 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
afa0: 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73   IF EXISTS claus
afb0: 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65  e suppresses the
afc0: 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c   error that woul
afd0: 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c  d normally.resul
afe0: 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64  t if the table d
aff0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f  oes not exist.</
b000: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
b010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b050: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
b060: 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20   {DROP TRIGGER} 
b070: 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52  droptrigger {{DR
b080: 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42 75  OP TRIGGER}}..Bu
b090: 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
b0a0: 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31 0a  -trigger-stmt 1.
b0b0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44  </tcl>..<p>The D
b0c0: 52 4f 50 20 54 52 49 47 47 45 52 20 73 74 61 74  ROP TRIGGER stat
b0d0: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
b0e0: 74 72 69 67 67 65 72 20 63 72 65 61 74 65 64 20  trigger created 
b0f0: 62 79 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20  by the .[CREATE 
b100: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
b110: 6e 74 2e 20 20 54 68 65 20 74 72 69 67 67 65 72  nt.  The trigger
b120: 20 69 73 20 0a 64 65 6c 65 74 65 64 20 66 72 6f   is .deleted fro
b130: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  m the database s
b140: 63 68 65 6d 61 2e 20 4e 6f 74 65 20 74 68 61 74  chema. Note that
b150: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61 75   triggers are au
b160: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72 6f  tomatically .dro
b170: 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61 73  pped when the as
b180: 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20 69  sociated table i
b190: 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a  s dropped.</p>..
b1a0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
b1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b1c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b1f0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
b200: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
b210: 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a  w {{DROP VIEW}}.
b220: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
b230: 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a  rop-view-stmt 1.
b240: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44  </tcl>..<p>The D
b250: 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65  ROP VIEW stateme
b260: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69 65  nt removes a vie
b270: 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65  w created by the
b280: 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 73  .[CREATE VIEW] s
b290: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e  tatement.  The n
b2a0: 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69 73  ame specified is
b2b0: 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65 2e   the .view name.
b2c0: 20 20 49 74 20 69 73 20 72 65 6d 6f 76 65 64 20    It is removed 
b2d0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
b2e0: 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 6e 6f  e schema, but no
b2f0: 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a 69 6e   actual data .in
b300: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
b310: 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
b320: 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  odified.</p>..<t
b330: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
b340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b380: 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c 41  ##.Section EXPLA
b390: 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50 4c 41  IN explain EXPLA
b3a0: 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  IN..BubbleDiagra
b3b0: 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63 6c  m sql-stmt.</tcl
b3c0: 3e 0a 0a 3c 70 3e 41 6e 20 53 51 4c 20 73 74 61  >..<p>An SQL sta
b3d0: 74 65 6d 65 6e 74 20 63 61 6e 20 62 65 20 70 72  tement can be pr
b3e0: 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b 65  eceded by the ke
b3f0: 79 77 6f 72 64 20 22 45 58 50 4c 41 49 4e 22 20  yword "EXPLAIN" 
b400: 6f 72 0a 62 79 20 74 68 65 20 70 68 72 61 73 65  or.by the phrase
b410: 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20   "EXPLAIN QUERY 
b420: 50 4c 41 4e 22 2e 20 20 45 69 74 68 65 72 20 6d  PLAN".  Either m
b430: 6f 64 69 66 69 63 61 74 69 6f 6e 20 63 61 75 73  odification caus
b440: 65 73 20 74 68 65 0a 53 51 4c 20 73 74 61 74 65  es the.SQL state
b450: 6d 65 6e 74 20 74 6f 20 62 65 68 61 76 65 20 61  ment to behave a
b460: 73 20 61 20 71 75 65 72 79 20 61 6e 64 20 74 6f  s a query and to
b470: 20 72 65 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74   return informat
b480: 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77 20 74 68  ion about.how th
b490: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e SQL statement 
b4a0: 77 6f 75 6c 64 20 68 61 76 65 20 6f 70 65 72 61  would have opera
b4b0: 74 65 64 20 69 66 20 74 68 65 20 45 58 50 4c 41  ted if the EXPLA
b4c0: 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68  IN keyword or.ph
b4d0: 72 61 73 65 20 68 61 64 20 62 65 65 6e 20 6f 6d  rase had been om
b4e0: 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57  itted.</p>..<p>W
b4f0: 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
b500: 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20  keyword appears 
b510: 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61 75  by itself it cau
b520: 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ses the statemen
b530: 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t.to behave as a
b540: 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75   query that retu
b550: 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63 65  rns the sequence
b560: 20 6f 66 20 0a 3c 61 20 68 72 65 66 3d 22 6f 70   of .<a href="op
b570: 63 6f 64 65 2e 68 74 6d 6c 22 3e 76 69 72 74 75  code.html">virtu
b580: 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
b590: 75 63 74 69 6f 6e 73 3c 2f 61 3e 20 69 74 20 77  uctions</a> it w
b5a0: 6f 75 6c 64 20 68 61 76 65 0a 75 73 65 64 20 74  ould have.used t
b5b0: 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 63 6f  o execute the co
b5c0: 6d 6d 61 6e 64 20 68 61 64 20 74 68 65 20 45 58  mmand had the EX
b5d0: 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f  PLAIN keyword no
b5e0: 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74 2e 0a  t been present..
b5f0: 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  When the EXPLAIN
b600: 20 51 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61   QUERY PLAN phra
b610: 73 65 20 61 70 70 65 61 72 73 2c 20 74 68 65 20  se appears, the 
b620: 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e  statement return
b630: 73 0a 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66  s.high-level inf
b640: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 77  ormation about w
b650: 68 61 74 20 69 6e 64 69 63 65 73 20 77 6f 75 6c  hat indices woul
b660: 64 20 68 61 76 65 20 62 65 65 6e 20 75 73 65 64  d have been used
b670: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75  .</p>..<p>The ou
b680: 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41 49  tput from EXPLAI
b690: 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51 55  N and EXPLAIN QU
b6a0: 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74 65  ERY PLAN is inte
b6b0: 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61 63  nded for.interac
b6c0: 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61 6e  tive analysis an
b6d0: 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e  d troubleshootin
b6e0: 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65 74  g only.  The det
b6f0: 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75 74  ails of the .out
b700: 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20 73  put format are s
b710: 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
b720: 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73   from one releas
b730: 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 74  e of SQLite to t
b740: 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61  he next..Applica
b750: 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74  tions should not
b760: 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72 20   use EXPLAIN or 
b770: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
b780: 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20 62  AN since.their b
b790: 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 6f 63  ehavior is undoc
b7a0: 75 6d 65 6e 74 65 64 2c 20 75 6e 73 70 65 63 69  umented, unspeci
b7b0: 66 69 65 64 2c 20 61 6e 64 20 76 61 72 69 61 62  fied, and variab
b7c0: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  le.</p>..<tcl>.#
b7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b810: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
b820: 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e  ction expression
b830: 20 65 78 70 72 20 7b 65 78 70 72 65 73 73 69 6f   expr {expressio
b840: 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 73 79  n {expression sy
b850: 6e 74 61 78 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  ntax}}..BubbleDi
b860: 61 67 72 61 6d 20 65 78 70 72 20 31 0a 42 75 62  agram expr 1.Bub
b870: 62 6c 65 44 69 61 67 72 61 6d 20 6c 69 74 65 72  bleDiagram liter
b880: 61 6c 2d 76 61 6c 75 65 0a 42 75 62 62 6c 65 44  al-value.BubbleD
b890: 69 61 67 72 61 6d 20 73 69 67 6e 65 64 2d 6e 75  iagram signed-nu
b8a0: 6d 62 65 72 0a 42 75 62 62 6c 65 44 69 61 67 72  mber.BubbleDiagr
b8b0: 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f  am raise-functio
b8c0: 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69  n.</tcl>..<p>Thi
b8d0: 73 20 73 65 63 74 69 6f 6e 20 69 73 20 64 69 66  s section is dif
b8e0: 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
b8f0: 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f 74  others.  Most ot
b900: 68 65 72 20 73 65 63 74 69 6f 6e 73 20 6f 66 0a  her sections of.
b910: 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 74 61  this document ta
b920: 6c 6b 73 20 61 62 6f 75 74 20 61 20 70 61 72 74  lks about a part
b930: 69 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d 61  icular SQL comma
b940: 6e 64 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f  nd.  This sectio
b950: 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b 20  n does.not talk 
b960: 61 62 6f 75 74 20 61 20 73 74 61 6e 64 61 6c 6f  about a standalo
b970: 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20 61  ne command but a
b980: 62 6f 75 74 20 22 65 78 70 72 65 73 73 69 6f 6e  bout "expression
b990: 73 22 20 77 68 69 63 68 20 61 72 65 20 0a 73 75  s" which are .su
b9a0: 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 6d  bcomponents of m
b9b0: 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e  ost other comman
b9c0: 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ds.</p>..<tcl>hd
b9d0: 5f 66 72 61 67 6d 65 6e 74 20 62 69 6e 61 72 79  _fragment binary
b9e0: 6f 70 73 20 7b 62 69 6e 61 72 79 20 6f 70 65 72  ops {binary oper
b9f0: 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ators}</tcl>.<h3
ba00: 3e 4f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a  >Operators</h3>.
ba10: 3c 70 3e 53 51 4c 69 74 65 20 75 6e 64 65 72 73  <p>SQLite unders
ba20: 74 61 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77  tands the follow
ba30: 69 6e 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61  ing binary opera
ba40: 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66  tors, in order f
ba50: 72 6f 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c  rom.highest to l
ba60: 6f 77 65 73 74 20 70 72 65 63 65 64 65 6e 63 65  owest precedence
ba70: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
ba80: 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63  te><pre>.<font c
ba90: 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c  olor="#2c2cf0"><
baa0: 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20  big>||.*    /   
bab0: 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c   %.+    -.&lt;&l
bac0: 74 3b 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20  t;   &gt;&gt;   
bad0: 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20  &amp;    |.&lt; 
bae0: 20 20 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20     &lt;=   &gt; 
baf0: 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d     &gt;=.=    ==
bb00: 20 20 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b     !=   &lt;&gt;
bb10: 20 20 20 3c 2f 62 69 67 3e 49 4e 20 20 4c 49 4b     </big>IN  LIK
bb20: 45 20 20 47 4c 4f 42 20 20 4d 41 54 43 48 20 20  E  GLOB  MATCH  
bb30: 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
bb40: 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
bb50: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
bb60: 53 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20  Supported unary 
bb70: 70 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73  prefix operators
bb80: 20 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a   are these:</p>.
bb90: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
bba0: 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
bbb0: 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20  #2c2cf0"><big>- 
bbc0: 20 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54     +    ~    NOT
bbd0: 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f  </big></font>.</
bbe0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
bbf0: 3e 0a 0a 3c 70 3e 54 68 65 20 43 4f 4c 4c 41 54  >..<p>The COLLAT
bc00: 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62  E operator can b
bc10: 65 20 74 68 6f 75 67 68 74 20 6f 66 20 61 73 20  e thought of as 
bc20: 61 20 75 6e 61 72 79 20 70 6f 73 74 66 69 78 0a  a unary postfix.
bc30: 6f 70 65 72 61 74 6f 72 2e 20 20 54 68 65 20 43  operator.  The C
bc40: 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
bc50: 68 61 73 20 74 68 65 20 68 69 67 68 65 73 74 20  has the highest 
bc60: 70 72 65 63 65 64 65 6e 63 65 2e 0a 49 74 20 61  precedence..It a
bc70: 6c 77 61 79 73 20 62 69 6e 64 73 20 6d 6f 72 65  lways binds more
bc80: 20 74 69 67 68 74 6c 79 20 74 68 61 6e 20 61 6e   tightly than an
bc90: 79 20 70 72 65 66 69 78 20 75 6e 61 72 79 20 6f  y prefix unary o
bca0: 70 65 72 61 74 6f 72 20 6f 72 0a 61 6e 79 20 62  perator or.any b
bcb0: 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 3c  inary operator.<
bcc0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74  /p>..<tcl>hd_put
bcd0: 73 20 22 0a 3c 70 3e 54 68 65 20 75 6e 61 72 79  s ".<p>The unary
bce0: 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61   operator [Opera
bcf0: 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f  tor +] is a no-o
bd00: 70 2e 20 20 49 74 20 63 61 6e 20 62 65 20 61 70  p.  It can be ap
bd10: 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73  plied.to strings
bd20: 2c 20 6e 75 6d 62 65 72 73 2c 20 6f 72 20 62 6c  , numbers, or bl
bd30: 6f 62 73 20 61 6e 64 20 69 74 20 61 6c 77 61 79  obs and it alway
bd40: 73 20 67 69 76 65 73 20 61 73 20 69 74 73 20 72  s gives as its r
bd50: 65 73 75 6c 74 20 74 68 65 0a 76 61 6c 75 65 20  esult the.value 
bd60: 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c  of the operand.<
bd70: 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e  /p>"</tcl>..<p>N
bd80: 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61  ote that there a
bd90: 72 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e  re two variation
bda0: 73 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20  s of the equals 
bdb0: 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f  and not equals.o
bdc0: 70 65 72 61 74 6f 72 73 2e 20 20 45 71 75 61 6c  perators.  Equal
bdd0: 73 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a  s can be either.
bde0: 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22  .<tcl>.hd_puts "
bdf0: 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20  [Operator =] or 
be00: 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 54  [Operator ==]..T
be10: 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
be20: 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
be30: 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
be40: 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
be50: 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 54 68 65  {&lt;&gt;}]..The
be60: 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f   [Operator ||] o
be70: 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e  perator is \"con
be80: 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20  catenate\" - it 
be90: 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74  joins together.t
bea0: 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f  he two strings o
beb0: 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a  f its operands..
bec0: 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70  The operator [Op
bed0: 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74  erator %] output
bee0: 73 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  s the remainder 
bef0: 6f 66 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65  of its left .ope
bf00: 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20  rand modulo its 
bf10: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f  right operand.</
bf20: 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73 75 6c  p>..<p>The resul
bf30: 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20  t of any binary 
bf40: 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 6e 75  operator is a nu
bf50: 6d 65 72 69 63 20 76 61 6c 75 65 2c 20 65 78 63  meric value, exc
bf60: 65 70 74 0a 66 6f 72 20 74 68 65 20 5b 4f 70 65  ept.for the [Ope
bf70: 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74  rator ||] concat
bf80: 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  enation operator
bf90: 20 77 68 69 63 68 20 67 69 76 65 73 20 61 20 73   which gives a s
bfa0: 74 72 69 6e 67 0a 72 65 73 75 6c 74 2e 3c 2f 70  tring.result.</p
bfb0: 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c 3e 68  >"</tcl>..<tcl>h
bfc0: 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61  d_fragment litva
bfd0: 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c  lue {literal val
bfe0: 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69  ue}</tcl>.<h3>Li
bff0: 74 65 72 61 6c 20 56 61 6c 75 65 73 3c 2f 68 33  teral Values</h3
c000: 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20  >.<p>.A literal 
c010: 76 61 6c 75 65 20 69 73 20 61 20 63 6f 6e 73 74  value is a const
c020: 61 6e 74 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ant of some kind
c030: 2e 0a 4c 69 74 65 72 61 6c 20 76 61 6c 75 65 73  ..Literal values
c040: 20 6d 61 79 20 62 65 20 69 6e 74 65 67 65 72 73   may be integers
c050: 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  , floating point
c060: 20 6e 75 6d 62 65 72 73 2c 20 73 74 72 69 6e 67   numbers, string
c070: 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c  s,.BLOBs, or NUL
c080: 4c 73 2e 0a 53 63 69 65 6e 74 69 66 69 63 20 6e  Ls..Scientific n
c090: 6f 74 61 74 69 6f 6e 20 69 73 20 73 75 70 70 6f  otation is suppo
c0a0: 72 74 65 64 20 66 6f 72 20 66 6c 6f 61 74 69 6e  rted for floatin
c0b0: 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20  g point literal 
c0c0: 76 61 6c 75 65 73 2e 0a 54 68 65 20 22 2e 22 20  values..The "." 
c0d0: 63 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77  character is alw
c0e0: 61 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65  ays used .as the
c0f0: 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65   decimal point e
c100: 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c  ven if the local
c110: 65 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66  e setting specif
c120: 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73  ies "," for.this
c130: 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20   role - the use 
c140: 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64  of "," for the d
c150: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75  ecimal point wou
c160: 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e  ld result in.syn
c170: 74 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79  tactic ambiguity
c180: 2e 20 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 73  .  A string cons
c190: 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62  tant is formed b
c1a0: 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a  y enclosing the.
c1b0: 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65  string in single
c1c0: 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20 41 20   quotes (').  A 
c1d0: 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69 74  single quote wit
c1e0: 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63  hin the string c
c1f0: 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62 79  an.be encoded by
c200: 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69 6e   putting two sin
c210: 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61 20  gle quotes in a 
c220: 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73 63  row - as in Pasc
c230: 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63 61  al..C-style esca
c240: 70 65 73 20 75 73 69 6e 67 20 74 68 65 20 62 61  pes using the ba
c250: 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74 65  ckslash characte
c260: 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  r are not suppor
c270: 74 65 64 20 62 65 63 61 75 73 65 0a 74 68 65 79  ted because.they
c280: 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61 72   are not standar
c290: 64 20 53 51 4c 2e 0a 42 4c 4f 42 20 6c 69 74 65  d SQL..BLOB lite
c2a0: 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20  rals are string 
c2b0: 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e  literals contain
c2c0: 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ing hexadecimal 
c2d0: 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65  data and.precede
c2e0: 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78  d by a single "x
c2f0: 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63 74  " or "X" charact
c300: 65 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  er.  For example
c310: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
c320: 74 65 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34  te><pre>.X'53514
c330: 43 36 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c  C697465'.</pre><
c340: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
c350: 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  >.A literal valu
c360: 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68  e can also be th
c370: 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a  e token "NULL"..
c380: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
c390: 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20  agment varparam 
c3a0: 70 61 72 61 6d 65 74 65 72 3c 2f 74 63 6c 3e 0a  parameter</tcl>.
c3b0: 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f  <h3>Parameters</
c3c0: 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61  h3>.<p>.A "varia
c3d0: 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74  ble" or "paramet
c3e0: 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66  er" token.specif
c3f0: 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65  ies a placeholde
c400: 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
c410: 69 6f 6e 20 66 6f 72 20 61 20 6c 69 74 65 72 61  ion for a litera
c420: 6c 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  l.value that is 
c430: 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e  filled in at run
c440: 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  time using the.[
c450: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
c460: 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69  b() | sqlite3_bi
c470: 6e 64 28 29 5d 20 41 50 49 73 2e 0a 50 61 72 61  nd()] APIs..Para
c480: 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20  meters can take 
c490: 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c  several forms:.<
c4a0: 2f 70 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  /p..<blockquote>
c4b0: 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74  .<table>.<tr>.<t
c4c0: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
c4d0: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
c4e0: 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c  ?</b><i>NNN</i><
c4f0: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
c500: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 71  0"></td>.<td>A q
c510: 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f 6c  uestion mark fol
c520: 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62 65  lowed by a numbe
c530: 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c  r <i>NNN</i> hol
c540: 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74 68  ds a spot for th
c550: 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65 74  e.NNN-th paramet
c560: 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62 65  er.  NNN must be
c570: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 5b   between 1 and [
c580: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
c590: 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 3c 2f 74 64  BLE_NUMBER].</td
c5a0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
c5b0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
c5c0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
c5d0: 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </b></td><td wid
c5e0: 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
c5f0: 64 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72  d>A question mar
c600: 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66 6f  k that is not fo
c610: 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
c620: 65 72 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20  er holds a spot 
c630: 66 6f 72 0a 74 68 65 20 6e 65 78 74 20 75 6e 75  for.the next unu
c640: 73 65 64 20 70 61 72 61 6d 65 74 65 72 2e 3c 2f  sed parameter.</
c650: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
c660: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
c670: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
c680: 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
c690: 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
c6a0: 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41  "20"></td>.<td>A
c6b0: 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20   colon followed 
c6c0: 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
c6d0: 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70   name holds a sp
c6e0: 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70  ot for a named.p
c6f0: 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68  arameter with th
c700: 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 4e 61  e name AAAA.  Na
c710: 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73 20 61  med parameters a
c720: 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65 64  re also numbered
c730: 2e 0a 54 68 65 20 6e 75 6d 62 65 72 20 61 73 73  ..The number ass
c740: 69 67 6e 65 64 20 69 73 20 74 68 65 20 6e 65 78  igned is the nex
c750: 74 20 75 6e 75 73 65 64 20 6e 75 6d 62 65 72 2e  t unused number.
c760: 20 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75    To avoid confu
c770: 73 69 6f 6e 2c 0a 69 74 20 69 73 20 62 65 73 74  sion,.it is best
c780: 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
c790: 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
c7a0: 72 65 64 20 70 61 72 61 6d 65 74 65 72 73 2e 3c  red parameters.<
c7b0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
c7c0: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
c7d0: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
c7e0: 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
c7f0: 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
c800: 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
c810: 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72  An "at" sign wor
c820: 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
c830: 61 20 63 6f 6c 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f  a colon.</td>.</
c840: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
c850: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
c860: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e  n="top"><b>$</b>
c870: 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
c880: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
c890: 2f 74 64 3e 0a 3c 74 64 3e 41 20 64 6f 6c 6c 61  /td>.<td>A dolla
c8a0: 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
c8b0: 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
c8c0: 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
c8d0: 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
c8e0: 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
c8f0: 74 68 20 74 68 65 20 6e 61 6d 65 20 41 41 41 41  th the name AAAA
c900: 2e 20 20 54 68 65 20 69 64 65 6e 74 69 66 69 65  .  The identifie
c910: 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20 63  r name in this c
c920: 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a  ase can include.
c930: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75  one or more occu
c940: 72 61 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61  rances of "::" a
c950: 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c  nd a suffix encl
c960: 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20  osed in "(...)" 
c970: 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74  containing.any t
c980: 65 78 74 20 61 74 20 61 6c 6c 2e 20 20 54 68 69  ext at all.  Thi
c990: 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
c9a0: 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
c9b0: 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 54  le name in the T
c9c0: 63 6c 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c  cl.programming l
c9d0: 61 6e 67 75 61 67 65 2e 3c 2f 74 64 3e 0a 3c 2f  anguage.</td>.</
c9e0: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
c9f0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 50  lockquote>..<p>P
ca00: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61  arameters that a
ca10: 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  re not assigned 
ca20: 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71  values using.[sq
ca30: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
ca40: 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ) | sqlite3_bind
ca50: 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a  ()] are treated.
ca60: 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 74  as NULL.</p>..<t
ca70: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
ca80: 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45 3c  ike LIKE ESCAPE<
ca90: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49  /tcl>.<h3>The LI
caa0: 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65 72  KE and GLOB oper
cab0: 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 54 68  ators</h3>.<p>Th
cac0: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
cad0: 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d  does a pattern m
cae0: 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73  atching comparis
caf0: 6f 6e 2e 20 54 68 65 20 6f 70 65 72 61 6e 64 0a  on. The operand.
cb00: 74 6f 20 74 68 65 20 72 69 67 68 74 20 63 6f 6e  to the right con
cb10: 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65 72  tains the patter
cb20: 6e 2c 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64  n, the left hand
cb30: 20 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e   operand contain
cb40: 73 20 74 68 65 0a 73 74 72 69 6e 67 20 74 6f 20  s the.string to 
cb50: 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74 68  match against th
cb60: 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c  e pattern...<tcl
cb70: 3e 68 64 5f 70 75 74 73 20 22 41 20 70 65 72 63  >hd_puts "A perc
cb80: 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25 5c  ent symbol (\"%\
cb90: 22 29 20 69 6e 20 74 68 65 20 70 61 74 74 65 72  ") in the patter
cba0: 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73 65  n matches any.se
cbb0: 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f  quence of zero o
cbc0: 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65 72  r more character
cbd0: 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2e  s in the string.
cbe0: 20 20 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a    An underscore.
cbf0: 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65 20 70  (\"_\") in the p
cc00: 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61  attern matches a
cc10: 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  ny single charac
cc20: 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e  ter in the.strin
cc30: 67 2e 20 20 41 6e 79 20 6f 74 68 65 72 20 63 68  g.  Any other ch
cc40: 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20  aracter matches 
cc50: 69 74 73 65 6c 66 20 6f 72 20 69 74 27 73 20 6c  itself or it's l
cc60: 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a  ower/upper case.
cc70: 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e  equivalent (i.e.
cc80: 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
cc90: 65 20 6d 61 74 63 68 69 6e 67 29 2e 20 20 28 41  e matching).  (A
cca0: 20 62 75 67 3a 20 53 51 4c 69 74 65 20 6f 6e 6c   bug: SQLite onl
ccb0: 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70  y.understands up
ccc0: 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66  per/lower case f
ccd0: 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
cce0: 65 72 73 2e 20 20 54 68 65 0a 4c 49 4b 45 20 6f  ers.  The.LIKE o
ccf0: 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65 20  perator is case 
cd00: 73 65 6e 73 69 74 69 76 65 20 66 6f 72 20 75 6e  sensitive for un
cd10: 69 63 6f 64 65 20 63 68 61 72 61 63 74 65 72 73  icode characters
cd20: 20 74 68 61 74 20 61 72 65 20 62 65 79 6f 6e 64   that are beyond
cd30: 0a 74 68 65 20 41 53 43 49 49 20 72 61 6e 67 65  .the ASCII range
cd40: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
cd50: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c  the expression <
cd60: 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26  b>'a'&nbsp;LIKE&
cd70: 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20  nbsp;'A'</b>.is 
cd80: 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65  TRUE but <b>'&ae
cd90: 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26  lig;'&nbsp;LIKE&
cda0: 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f  nbsp;'&AElig;'</
cdb0: 62 3e 20 69 73 20 46 41 4c 53 45 2e 29 2e 3c 2f  b> is FALSE.).</
cdc0: 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 49 66  p>"</tcl>..<p>If
cdd0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53   the optional ES
cde0: 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70  CAPE clause is p
cdf0: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
ce00: 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c   expression.foll
ce10: 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50 45  owing the ESCAPE
ce20: 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65 76   keyword must ev
ce30: 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72 69  aluate to a stri
ce40: 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  ng consisting of
ce50: 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  .a single charac
ce60: 74 65 72 2e 20 54 68 69 73 20 63 68 61 72 61 63  ter. This charac
ce70: 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64 20  ter may be used 
ce80: 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74  in the LIKE patt
ce90: 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c  ern.to include l
cea0: 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f  iteral percent o
ceb0: 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61  r underscore cha
cec0: 72 61 63 74 65 72 73 2e 20 54 68 65 20 65 73 63  racters. The esc
ced0: 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f  ape.character fo
cee0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63  llowed by a perc
cef0: 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65  ent symbol, unde
cf00: 72 73 63 6f 72 65 20 6f 72 20 69 74 73 65 6c 66  rscore or itself
cf10: 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72   matches a.liter
cf20: 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  al percent symbo
cf30: 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 6f 72  l, underscore or
cf40: 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
cf50: 72 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 2c  r in the string,
cf60: 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a  .respectively...
cf70: 3c 70 3e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b  <p>The infix LIK
cf80: 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d  E operator is im
cf90: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
cfa0: 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61  ling the.applica
cfb0: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c  tion-defined SQL
cfc0: 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65   functions [like
cfd0: 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
cfe0: 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69  i>)] or.[like(<i
cff0: 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c  >Y</i>,<i>X</i>,
d000: 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c  <i>Z</i>)]</a>.<
d010: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4b 45  /p>..<p>The LIKE
d020: 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
d030: 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69   made case sensi
d040: 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  tive using the.[
d050: 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c  case_sensitive_l
d060: 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e  ike pragma].</p>
d070: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
d080: 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63  nt glob GLOB</tc
d090: 6c 3e 0a 3c 70 3e 54 68 65 20 47 4c 4f 42 20 6f  l>.<p>The GLOB o
d0a0: 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c  perator is simil
d0b0: 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75  ar to LIKE but u
d0c0: 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c  ses the Unix.fil
d0d0: 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61  e globbing synta
d0e0: 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61  x for its wildca
d0f0: 72 64 73 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f 42  rds.  Also, GLOB
d100: 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69   is case.sensiti
d110: 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e  ve, unlike LIKE.
d120: 20 20 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20    Both GLOB and 
d130: 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63  LIKE may be prec
d140: 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20  eded by.the NOT 
d150: 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72  keyword to inver
d160: 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74  t the sense of t
d170: 68 65 20 74 65 73 74 2e 20 20 54 68 65 20 69 6e  he test.  The in
d180: 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61 74  fix GLOB .operat
d190: 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  or is implemente
d1a0: 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
d1b0: 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62 28   function.[glob(
d1c0: 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
d1d0: 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20 6d  >)] and can be m
d1e0: 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72 72  odified by overr
d1f0: 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63 74  iding.that funct
d200: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ion.</p>..<tcl>h
d210: 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65 78  d_fragment regex
d220: 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a 3c  p REGEXP</tcl>.<
d230: 70 3e 54 68 65 20 52 45 47 45 58 50 20 6f 70 65  p>The REGEXP ope
d240: 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
d250: 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
d260: 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72 20  e regexp().user 
d270: 66 75 6e 63 74 69 6f 6e 2e 20 20 4e 6f 20 72 65  function.  No re
d280: 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e 63  gexp() user func
d290: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
d2a0: 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20 73  by default.and s
d2b0: 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45 47  o use of the REG
d2c0: 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69 6c  EXP operator wil
d2d0: 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75 6c  l normally resul
d2e0: 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d 65  t in an.error me
d2f0: 73 73 61 67 65 2e 20 20 49 66 20 61 20 75 73 65  ssage.  If a use
d300: 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  r-defined functi
d310: 6f 6e 20 6e 61 6d 65 64 20 22 72 65 67 65 78 70  on named "regexp
d320: 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72 75  ".is added at ru
d330: 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20 66 75 6e  n-time, that fun
d340: 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63 61  ction will be ca
d350: 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a 74 6f  lled in order.to
d360: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 52   implement the R
d370: 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 2e 3c  EGEXP operator.<
d380: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
d390: 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54 43  gment match MATC
d3a0: 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 4d  H</tcl>.<p>The M
d3b0: 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69 73  ATCH operator is
d3c0: 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
d3d0: 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 28  x for the match(
d3e0: 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  ).user function.
d3f0: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d 61    The default ma
d400: 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  tch() function i
d410: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61  mplementation.ra
d420: 69 73 65 73 20 61 6e 64 20 65 78 63 65 70 74 69  ises and excepti
d430: 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65  on and is not re
d440: 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20  ally useful for 
d450: 61 6e 79 74 68 69 6e 67 2e 0a 42 75 74 20 65 78  anything..But ex
d460: 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65  tensions can ove
d470: 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28  rride the match(
d480: 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
d490: 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67  more.helpful log
d4a0: 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ic.</p>..<tcl>hd
d4b0: 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65  _fragment betwee
d4c0: 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a  n BETWEEN</tcl>.
d4d0: 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20  <h3>The BETWEEN 
d4e0: 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70  operator</h3>.<p
d4f0: 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65  >The BETWEEN ope
d500: 72 61 74 6f 72 20 69 73 20 65 71 75 69 76 61 6c  rator is equival
d510: 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66  ent to a pair of
d520: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c   comparisons.."<
d530: 69 3e 61 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45  i>a</i> <b>BETWE
d540: 45 4e 3c 2f 62 3e 20 3c 69 3e 62 3c 2f 69 3e 20  EN</b> <i>b</i> 
d550: 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 63 3c  <b>AND</b> <i>c<
d560: 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c  /i>" is .equival
d570: 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 61 3c 2f 69  ent to ."<i>a</i
d580: 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&gt;=</b><i>
d590: 62 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  b</i> <b>AND</b>
d5a0: 20 3c 69 3e 61 3c 2f 69 3e 3c 62 3e 26 6c 74 3b   <i>a</i><b>&lt;
d5b0: 3d 3c 2f 62 3e 3c 69 3e 63 3c 2f 69 3e 22 2e 0a  =</b><i>c</i>"..
d5c0: 54 68 65 20 70 72 65 63 65 64 65 6e 63 65 20 6f  The precedence o
d5d0: 66 20 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70  f the BETWEEN op
d5e0: 65 72 61 74 6f 72 20 69 73 20 74 68 65 20 73 61  erator is the sa
d5f0: 6d 65 20 61 73 20 74 68 65 20 70 72 65 63 65 64  me as the preced
d600: 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74 6f 72  ence.as operator
d610: 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20  s <b>==</b> and 
d620: 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62  <b>!=</b> and <b
d630: 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72  >LIKE</b> and gr
d640: 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72 69 67  oups left to rig
d650: 68 74 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43  ht...<h3>Table C
d660: 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e  olumn Names</h3>
d670: 0a 3c 70 3e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d  .<p>A column nam
d680: 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20  e can be any of 
d690: 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65  the names define
d6a0: 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  d in the [CREATE
d6b0: 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
d6c0: 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  t or one of the 
d6d0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61  following specia
d6e0: 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  l identifiers: "
d6f0: 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22  <b>ROWID</b>",."
d700: 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20  <b>OID</b>", or 
d710: 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22  "<b>_ROWID_</b>"
d720: 2e 0a 54 68 65 73 65 20 73 70 65 63 69 61 6c 20  ..These special 
d730: 69 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20  identifiers all 
d740: 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69  describe the.uni
d750: 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  que integer key 
d760: 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73  (the [rowid]) as
d770: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76  sociated with ev
d780: 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72  ery .row of ever
d790: 79 20 74 61 62 6c 65 2e 0a 54 68 65 20 73 70 65  y table..The spe
d7a0: 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
d7b0: 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
d7c0: 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
d7d0: 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
d7e0: 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
d7f0: 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
d800: 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
d810: 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 20 52 6f  e same name.  Ro
d820: 77 20 6b 65 79 73 0a 61 63 74 20 6c 69 6b 65 20  w keys.act like 
d830: 72 65 61 64 2d 6f 6e 6c 79 20 63 6f 6c 75 6d 6e  read-only column
d840: 73 2e 20 20 41 20 72 6f 77 20 6b 65 79 20 63 61  s.  A row key ca
d850: 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65  n be used anywhe
d860: 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c  re a regular.col
d870: 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2c  umn can be used,
d880: 20 65 78 63 65 70 74 20 74 68 61 74 20 79 6f 75   except that you
d890: 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 74   cannot change t
d8a0: 68 65 20 76 61 6c 75 65 0a 6f 66 20 61 20 72 6f  he value.of a ro
d8b0: 77 20 6b 65 79 20 69 6e 20 61 6e 20 5b 55 50 44  w key in an [UPD
d8c0: 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d  ATE] or [INSERT]
d8d0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 22 53 45 4c   statement.."SEL
d8e0: 45 43 54 20 2a 20 2e 2e 2e 22 20 64 6f 65 73 20  ECT * ..." does 
d8f0: 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 72  not return the r
d900: 6f 77 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c 68 33  ow key.</p>..<h3
d910: 3e 53 75 62 71 75 65 72 69 65 73 3c 2f 68 33 3e  >Subqueries</h3>
d920: 0a 3c 70 3e 5b 53 45 4c 45 43 54 5d 20 73 74 61  .<p>[SELECT] sta
d930: 74 65 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65  tements can appe
d940: 61 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e  ar in expression
d950: 73 20 61 73 20 65 69 74 68 65 72 20 74 68 65 0a  s as either the.
d960: 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
d970: 6e 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65  nd of the IN ope
d980: 72 61 74 6f 72 2c 20 61 73 20 61 20 73 63 61 6c  rator, as a scal
d990: 61 72 20 71 75 61 6e 74 69 74 79 2c 20 6f 72 0a  ar quantity, or.
d9a0: 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f  as the operand o
d9b0: 66 20 61 6e 20 45 58 49 53 54 53 20 6f 70 65 72  f an EXISTS oper
d9c0: 61 74 6f 72 2e 0a 41 73 20 61 20 73 63 61 6c 61  ator..As a scala
d9d0: 72 20 71 75 61 6e 74 69 74 79 20 6f 72 20 74 68  r quantity or th
d9e0: 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20  e operand of an 
d9f0: 49 4e 20 6f 70 65 72 61 74 6f 72 2c 0a 74 68 65  IN operator,.the
da00: 20 53 45 4c 45 43 54 20 73 68 6f 75 6c 64 20 68   SELECT should h
da10: 61 76 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  ave only a singl
da20: 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 69 74 73 0a  e column in its.
da30: 72 65 73 75 6c 74 2e 20 20 43 6f 6d 70 6f 75 6e  result.  Compoun
da40: 64 20 53 45 4c 45 43 54 73 20 28 63 6f 6e 6e 65  d SELECTs (conne
da50: 63 74 65 64 20 77 69 74 68 20 6b 65 79 77 6f 72  cted with keywor
da60: 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72  ds like UNION or
da70: 0a 45 58 43 45 50 54 29 20 61 72 65 20 61 6c 6c  .EXCEPT) are all
da80: 6f 77 65 64 2e 0a 57 69 74 68 20 74 68 65 20 45  owed..With the E
da90: 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2c 20  XISTS operator, 
daa0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  the columns in t
dab0: 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
dac0: 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 61 72   the [SELECT] ar
dad0: 65 0a 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68  e.ignored and th
dae0: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 74  e expression ret
daf0: 75 72 6e 73 20 54 52 55 45 20 69 66 20 6f 6e 65  urns TRUE if one
db00: 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 65 78   or more rows ex
db10: 69 73 74 0a 61 6e 64 20 46 41 4c 53 45 20 69 66  ist.and FALSE if
db20: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
db30: 69 73 20 65 6d 70 74 79 2e 0a 49 66 20 6e 6f 20  is empty..If no 
db40: 74 65 72 6d 73 20 69 6e 20 74 68 65 20 5b 53 45  terms in the [SE
db50: 4c 45 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e  LECT] expression
db60: 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 20   refer to value 
db70: 69 6e 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e  in the containin
db80: 67 0a 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68  g.query, then th
db90: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
dba0: 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70  evaluated once p
dbb0: 72 69 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65  rior to any othe
dbc0: 72 0a 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64  r.processing and
dbd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 72   the result is r
dbe0: 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73 61  eused as necessa
dbf0: 72 79 2e 20 20 49 66 20 74 68 65 20 5b 53 45 4c  ry.  If the [SEL
dc00: 45 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 0a  ECT] expression.
dc10: 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 76 61 72  does contain var
dc20: 69 61 62 6c 65 73 20 66 72 6f 6d 20 74 68 65 20  iables from the 
dc30: 6f 75 74 65 72 20 71 75 65 72 79 2c 20 74 68 65  outer query, the
dc40: 6e 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 69  n the [SELECT] i
dc50: 73 20 72 65 65 76 61 6c 75 61 74 65 64 0a 65 76  s reevaluated.ev
dc60: 65 72 79 20 74 69 6d 65 20 69 74 20 69 73 20 6e  ery time it is n
dc70: 65 65 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57  eeded.</p>..<p>W
dc80: 68 65 6e 20 61 20 53 45 4c 45 43 54 20 69 73 20  hen a SELECT is 
dc90: 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e  the right operan
dca0: 64 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72  d of the IN oper
dcb0: 61 74 6f 72 2c 20 74 68 65 20 49 4e 0a 6f 70 65  ator, the IN.ope
dcc0: 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 54 52  rator returns TR
dcd0: 55 45 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  UE if the result
dce0: 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65   of the left ope
dcf0: 72 61 6e 64 20 69 73 20 61 6e 79 20 6f 66 0a 74  rand is any of.t
dd00: 68 65 20 76 61 6c 75 65 73 20 67 65 6e 65 72 61  he values genera
dd10: 74 65 64 20 62 79 20 74 68 65 20 73 65 6c 65 63  ted by the selec
dd20: 74 2e 20 20 54 68 65 20 49 4e 20 6f 70 65 72 61  t.  The IN opera
dd30: 74 6f 72 20 6d 61 79 20 62 65 20 70 72 65 63 65  tor may be prece
dd40: 64 65 64 0a 62 79 20 74 68 65 20 4e 4f 54 20 6b  ded.by the NOT k
dd50: 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74  eyword to invert
dd60: 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68   the sense of th
dd70: 65 20 74 65 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e test.</p>..<p>
dd80: 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20 61 70  When a SELECT ap
dd90: 70 65 61 72 73 20 77 69 74 68 69 6e 20 61 6e 20  pears within an 
dda0: 65 78 70 72 65 73 73 69 6f 6e 20 62 75 74 20 69  expression but i
ddb0: 73 20 6e 6f 74 20 74 68 65 20 72 69 67 68 74 0a  s not the right.
ddc0: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
ddd0: 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65 6e 20   operator, then 
dde0: 74 68 65 20 66 69 72 73 74 20 72 6f 77 20 6f 66  the first row of
ddf0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
de00: 68 65 0a 53 45 4c 45 43 54 20 62 65 63 6f 6d 65  he.SELECT become
de10: 73 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64  s the value used
de20: 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
de30: 6f 6e 2e 20 20 49 66 20 74 68 65 20 53 45 4c 45  on.  If the SELE
de40: 43 54 20 79 69 65 6c 64 73 0a 6d 6f 72 65 20 74  CT yields.more t
de50: 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
de60: 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
de70: 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
de80: 20 69 67 6e 6f 72 65 64 2e 20 20 49 66 0a 74 68   ignored.  If.th
de90: 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
dea0: 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
deb0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 53  e value of the S
dec0: 45 4c 45 43 54 20 69 73 20 4e 55 4c 4c 2e 3c 2f  ELECT is NULL.</
ded0: 70 3e 0a 0a 3c 68 33 3e 43 41 53 54 20 65 78 70  p>..<h3>CAST exp
dee0: 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70  ressions</h3>.<p
def0: 3e 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69  >A CAST expressi
df00: 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 65 20 5b  on changes the [
df10: 64 61 74 61 74 79 70 65 5d 20 6f 66 20 74 68 65  datatype] of the
df20: 20 3c 65 78 70 72 3e 20 69 6e 74 6f 20 74 68 65   <expr> into the
df30: 0a 74 79 70 65 20 73 70 65 63 69 66 69 65 64 20  .type specified 
df40: 62 79 20 26 6c 74 3b 74 79 70 65 26 67 74 3b 2e  by &lt;type&gt;.
df50: 20 0a 26 6c 74 3b 74 79 70 65 26 67 74 3b 20 63   .&lt;type&gt; c
df60: 61 6e 20 62 65 20 61 6e 79 20 6e 6f 6e 2d 65 6d  an be any non-em
df70: 70 74 79 20 74 79 70 65 20 6e 61 6d 65 20 74 68  pty type name th
df80: 61 74 20 69 73 20 76 61 6c 69 64 0a 66 6f 72 20  at is valid.for 
df90: 74 68 65 20 74 79 70 65 20 69 6e 20 61 20 63 6f  the type in a co
dfa0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  lumn definition 
dfb0: 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  of a [CREATE TAB
dfc0: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f  LE] statement.</
dfd0: 70 3e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e  p>..<h3>Function
dfe0: 73 3c 2f 68 33 3e 0a 3c 70 3e 42 6f 74 68 20 5b  s</h3>.<p>Both [
dff0: 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
e000: 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
e010: 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
e020: 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
e030: 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
e040: 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
e050: 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
e060: 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
e070: 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
e080: 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
e090: 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
e0a0: 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
e0b0: 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 41 20   functions].).A 
e0c0: 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
e0d0: 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61  can be used in a
e0e0: 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20  ny expression.  
e0f0: 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  Simple functions
e100: 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c 74   return.a result
e110: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61 73   immediately bas
e120: 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70 75  ed on their inpu
e130: 74 73 2e 20 20 41 67 67 72 65 67 61 74 65 20 66  ts.  Aggregate f
e140: 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c  unctions.may onl
e150: 79 20 62 65 20 75 73 65 64 20 69 6e 20 61 20 53  y be used in a S
e160: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
e170: 20 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63    Aggregate func
e180: 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68  tions compute.th
e190: 65 69 72 20 72 65 73 75 6c 74 20 61 63 72 6f 73  eir result acros
e1a0: 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  s all rows of th
e1b0: 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70  e result set.</p
e1c0: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
e1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e210: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
e220: 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d  {Core Functions}
e230: 20 63 6f 72 65 66 75 6e 63 20 7b 63 6f 72 65 66   corefunc {coref
e240: 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64 65  unc}.proc funcde
e250: 66 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72  f {syntax keywor
e260: 64 73 20 64 65 73 63 7d 20 7b 0a 20 20 68 64 5f  ds desc} {.  hd_
e270: 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72 65  puts {<tr>}.  re
e280: 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20  gsub -all {\s+} 
e290: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 79  [string trim $sy
e2a0: 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c 2f 62 72 3e  ntax] {<br></br>
e2b0: 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
e2c0: 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d  b -all {\(([^*)]
e2d0: 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28  +)\)} $syntax {(
e2e0: 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74  <i>\1</i>)} synt
e2f0: 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
e300: 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f   {,} $syntax {</
e310: 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20  i>,<i>} syntax. 
e320: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69   regsub -all {<i
e330: 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79  >\.\.\.</i>} $sy
e340: 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61  ntax {...} synta
e350: 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64  x.  hd_puts "<td
e360: 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20   valign=\"top\" 
e370: 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20  align=\"right\" 
e380: 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 24 73  width=\"120\">$s
e390: 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64  yntax</td>".  hd
e3a0: 5f 70 75 74 73 20 7b 3c 74 64 20 76 61 6c 69 67  _puts {<td valig
e3b0: 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 69 66 20 7b  n="top">}.  if {
e3c0: 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
e3d0: 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65  ds]==0} {.    re
e3e0: 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24  gexp {[a-z_]+} $
e3f0: 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20  syntax name.    
e400: 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d  hd_fragment $nam
e410: 65 20 24 6e 61 6d 65 0a 20 20 7d 20 65 6c 73 65  e $name.  } else
e420: 20 7b 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 66   {.    eval hd_f
e430: 72 61 67 6d 65 6e 74 20 24 6b 65 79 77 6f 72 64  ragment $keyword
e440: 73 0a 20 20 20 20 68 64 5f 6b 65 79 77 6f 72 64  s.    hd_keyword
e450: 73 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 7d 0a  s $keywords.  }.
e460: 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 64 65    hd_resolve $de
e470: 73 63 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f  sc.  hd_puts {</
e480: 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63  td></tr>}.}.</tc
e490: 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20  l>..<p>The core 
e4a0: 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20  functions shown 
e4b0: 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61  below are availa
e4c0: 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ble by default. 
e4d0: 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61 74  .[datefunc | Dat
e4e0: 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e  e &amp; Time fun
e4f0: 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67 67  ctions] and.[agg
e500: 66 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  func | aggregate
e510: 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20   functions] are 
e520: 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72  documented separ
e530: 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69  ately.  An.appli
e540: 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e  cation may defin
e550: 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e  e additional.fun
e560: 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
e570: 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f  n C and added to
e580: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
e590: 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b  gine using.the [
e5a0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
e5b0: 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c  unction()] API.<
e5c0: 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
e5d0: 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
e5e0: 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64  =10>.<tcl>.funcd
e5f0: 65 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b  ef {abs(X)} {} {
e600: 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 62  .  Return the ab
e610: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
e620: 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72  the numeric.  ar
e630: 67 75 6d 65 6e 74 20 3c 69 3e 58 3c 2f 69 3e 2e  gument <i>X</i>.
e640: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66    Return NULL if
e650: 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 4e 55 4c   <i>X</i> is NUL
e660: 4c 2e 20 20 52 65 74 75 72 6e 20 30 2e 30 20 69  L.  Return 0.0 i
e670: 66 0a 20 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20  f.  <i>X</i> is 
e680: 6e 6f 74 20 61 20 6e 75 6d 65 72 69 63 20 76 61  not a numeric va
e690: 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  lue..}..funcdef 
e6a0: 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b  {changes()} {} {
e6b0: 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  .  Return the nu
e6c0: 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
e6d0: 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
e6e0: 63 68 61 6e 67 65 64 20 6f 72 20 69 6e 73 65 72  changed or inser
e6f0: 74 65 64 20 6f 72 0a 20 20 64 65 6c 65 74 65 64  ted or.  deleted
e700: 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
e710: 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 20 53  ently complete S
e720: 51 4c 2e 20 20 54 68 69 73 20 69 73 20 61 20 77  QL.  This is a w
e730: 72 61 70 70 65 72 20 61 72 6f 75 6e 64 0a 20 20  rapper around.  
e740: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
e750: 6e 67 65 73 28 29 5d 20 43 2f 43 2b 2b 20 66 75  nges()] C/C++ fu
e760: 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64  nction..}..funcd
e770: 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59  ef {coalesce(X,Y
e780: 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  ,...)} {} {.  Re
e790: 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 74  turn a copy of t
e7a0: 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  he first non-NUL
e7b0: 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a  L argument.  If.
e7c0: 20 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20    all arguments 
e7d0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55  are NULL then NU
e7e0: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  LL is returned. 
e7f0: 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
e800: 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61 72 67  t least .  2 arg
e810: 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64  uments..}..funcd
e820: 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20 7b  ef {glob(X,Y)} {
e830: 7d 20 7b 0a 20 20 54 68 69 73 20 66 75 6e 63 74  } {.  This funct
e840: 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
e850: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22  mplement the.  "
e860: 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62 3e 22  <b>Y GLOB X</b>"
e870: 20 73 79 6e 74 61 78 20 6f 66 20 53 51 4c 69 74   syntax of SQLit
e880: 65 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 74  e..  Note that t
e890: 68 65 20 58 20 61 6e 64 20 59 20 61 72 67 75 6d  he X and Y argum
e8a0: 65 6e 74 73 20 61 72 65 20 72 65 76 65 72 73 65  ents are reverse
e8b0: 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28 29 20  d in the glob() 
e8c0: 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61 74  function.  relat
e8d0: 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78  ive to the infix
e8e0: 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72   [GLOB] operator
e8f0: 2e 0a 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33  ..  The [sqlite3
e900: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
e910: 28 29 5d 0a 20 20 69 6e 74 65 72 66 61 63 65 20  ()].  interface 
e920: 63 61 6e 0a 20 20 62 65 20 75 73 65 64 20 74 6f  can.  be used to
e930: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 66   override this f
e940: 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72  unction and ther
e950: 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f  eby change the o
e960: 70 65 72 61 74 69 6f 6e 0a 20 20 6f 66 20 74 68  peration.  of th
e970: 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f  e [GLOB] operato
e980: 72 2e 3c 2f 74 64 3e 0a 7d 0a 0a 66 75 6e 63 64  r.</td>.}..funcd
e990: 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29 7d  ef {ifnull(X,Y)}
e9a0: 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61   {} {.  Return a
e9b0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72   copy of the fir
e9c0: 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75  st non-NULL argu
e9d0: 6d 65 6e 74 2e 20 20 49 66 0a 20 20 62 6f 74 68  ment.  If.  both
e9e0: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e   arguments are N
e9f0: 55 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c 20 69 73  ULL then NULL is
ea00: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 65 20 69   returned. The i
ea10: 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
ea20: 73 20 61 6e 64 0a 20 20 5b 63 6f 61 6c 65 73 63  s and.  [coalesc
ea30: 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61 72  e()] with two ar
ea40: 67 75 6d 65 6e 74 73 20 61 72 65 20 69 6e 74 65  guments are inte
ea50: 72 63 68 61 6e 67 65 61 62 6c 65 2e 3c 2f 74 64  rchangeable.</td
ea60: 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65  >.}..funcdef {he
ea70: 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65  x(X)} {} {.  The
ea80: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 69 6e 74   argument is int
ea90: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
eaa0: 4f 42 2e 20 20 54 68 65 20 72 65 73 75 6c 74 0a  OB.  The result.
eab0: 20 20 69 73 20 61 20 68 65 78 61 64 65 63 69 6d    is a hexadecim
eac0: 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20  al rendering of 
ead0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
eae0: 68 61 74 20 62 6c 6f 62 2e 20 20 0a 7d 0a 0a 66  hat blob.  .}..f
eaf0: 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69 6e 73  uncdef {last_ins
eb00: 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b 7d 20  ert_rowid()} {} 
eb10: 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 5b  {.  Return the [
eb20: 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20  ROWID].  of the 
eb30: 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20  last row insert 
eb40: 66 72 6f 6d 20 74 68 69 73 0a 20 20 63 6f 6e 6e  from this.  conn
eb50: 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
eb60: 74 61 62 61 73 65 2e 20 0a 20 20 54 68 69 73 20  tabase. .  This 
eb70: 69 73 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  is the same valu
eb80: 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20  e that would be 
eb90: 72 65 74 75 72 6e 65 64 0a 20 20 66 72 6f 6d 20  returned.  from 
eba0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73  the [sqlite3_las
ebb0: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
ebc0: 5d 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 2e 0a  ] API function..
ebd0: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65 6e 67  }..funcdef {leng
ebe0: 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  th(X)} {} {.  Re
ebf0: 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e 67 20  turn the string 
ec00: 6c 65 6e 67 74 68 20 6f 66 20 3c 69 3e 58 3c 2f  length of <i>X</
ec10: 69 3e 20 69 6e 20 63 68 61 72 61 63 74 65 72 73  i> in characters
ec20: 20 69 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20   if <i>X</i> is 
ec30: 61 20 73 74 72 69 6e 67 2c 0a 20 20 6f 72 20 69  a string,.  or i
ec40: 6e 20 62 79 74 65 73 20 69 66 20 3c 69 3e 58 3c  n bytes if <i>X<
ec50: 2f 69 3e 20 69 73 20 61 20 62 6c 6f 62 2e 0a 7d  /i> is a blob..}
ec60: 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28  ..funcdef {like(
ec70: 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29  X,Y) like(X,Y,Z)
ec80: 7d 20 7b 7d 20 7b 0a 20 20 54 68 69 73 20 66 75  } {} {.  This fu
ec90: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  nction is used t
eca0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
ecb0: 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39  "<b>Y LIKE X &#9
ecc0: 31 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c  1;ESCAPE Z&#93;<
ecd0: 2f 62 3e 22 0a 20 20 73 79 6e 74 61 78 20 6f 66  /b>".  syntax of
ece0: 20 53 51 4c 2e 20 49 66 20 74 68 65 20 6f 70 74   SQL. If the opt
ecf0: 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61  ional ESCAPE cla
ed00: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
ed10: 74 68 65 6e 20 74 68 65 0a 20 20 75 73 65 72 2d  then the.  user-
ed20: 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f  function is invo
ed30: 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61  ked with three a
ed40: 72 67 75 6d 65 6e 74 73 2e 20 4f 74 68 65 72 77  rguments. Otherw
ed50: 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76  ise, it is.  inv
ed60: 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72  oked with two ar
ed70: 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f  guments only. No
ed80: 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
ed90: 64 20 59 20 70 61 72 61 6d 65 74 65 72 73 20 61  d Y parameters a
eda0: 72 65 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e  re.  reversed in
edb0: 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
edc0: 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f  tion relative to
edd0: 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45   the infix [LIKE
ede0: 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 54 68  ] operator..  Th
edf0: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
ee00: 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e  e_function()] in
ee10: 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20 75  terface can be u
ee20: 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20  sed to override 
ee30: 74 68 69 73 0a 20 20 66 75 6e 63 74 69 6f 6e 20  this.  function 
ee40: 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e  and thereby chan
ee50: 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ge the operation
ee60: 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d   of the.  [LIKE]
ee70: 20 6f 70 65 72 61 74 6f 72 2e 20 57 68 65 6e 20   operator. When 
ee80: 64 6f 69 6e 67 20 74 68 69 73 2c 20 69 74 20 6d  doing this, it m
ee90: 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
eea0: 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
eeb0: 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
eec0: 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
eed0: 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
eee0: 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
eef0: 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
ef00: 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
ef10: 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
ef20: 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
ef30: 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
ef40: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
ef50: 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
ef60: 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
ef70: 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66   specified..}..f
ef80: 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74  uncdef {load_ext
ef90: 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65  ension(X) load_e
efa0: 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b  xtension(X,Y)} {
efb0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 7d 20  load_extension} 
efc0: 7b 0a 20 20 4c 6f 61 64 20 53 51 4c 69 74 65 20  {.  Load SQLite 
efd0: 65 78 74 65 6e 73 69 6f 6e 73 20 6f 75 74 20 6f  extensions out o
efe0: 66 20 74 68 65 20 73 68 61 72 65 64 20 6c 69 62  f the shared lib
eff0: 72 61 72 79 0a 20 20 66 69 6c 65 20 6e 61 6d 65  rary.  file name
f000: 64 20 3c 69 3e 58 3c 2f 69 3e 20 75 73 69 6e 67  d <i>X</i> using
f010: 20 74 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   the entry point
f020: 20 3c 69 3e 59 3c 2f 69 3e 2e 20 20 54 68 65 20   <i>Y</i>.  The 
f030: 72 65 73 75 6c 74 0a 20 20 69 73 20 61 20 4e 55  result.  is a NU
f040: 4c 4c 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e  LL.  If <i>Y</i>
f050: 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
f060: 20 74 68 65 20 64 65 66 61 75 6c 74 20 65 6e 74   the default ent
f070: 72 79 20 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62  ry point.  of <b
f080: 3e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69  >sqlite3_extensi
f090: 6f 6e 5f 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75  on_init</b> is u
f0a0: 73 65 64 2e 20 20 54 68 69 73 20 66 75 6e 63 74  sed.  This funct
f0b0: 69 6f 6e 20 72 61 69 73 65 73 0a 20 20 61 6e 20  ion raises.  an 
f0c0: 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65  exception if the
f0d0: 20 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73   extension fails
f0e0: 20 74 6f 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74   to load or init
f0f0: 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79  ialize correctly
f100: 2e 0a 0a 20 20 3c 70 3e 54 68 69 73 20 66 75 6e  ...  <p>This fun
f110: 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20  ction will fail 
f120: 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
f130: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64   attempts to mod
f140: 69 66 79 0a 20 20 6f 72 20 64 65 6c 65 74 65 20  ify.  or delete 
f150: 61 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  a SQL function o
f160: 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
f170: 65 6e 63 65 2e 20 20 54 68 65 0a 20 20 65 78 74  ence.  The.  ext
f180: 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e  ension can add n
f190: 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ew functions or 
f1a0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
f1b0: 63 65 73 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a  ces, but cannot.
f1c0: 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
f1d0: 74 65 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  te existing func
f1e0: 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69  tions or collati
f1f0: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 62 65 63  ng sequences bec
f200: 61 75 73 65 0a 20 20 74 68 6f 73 65 20 66 75 6e  ause.  those fun
f210: 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
f220: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f230: 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20  s might be used 
f240: 65 6c 73 65 77 68 65 72 65 0a 20 20 69 6e 20 74  elsewhere.  in t
f250: 68 65 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  he currently run
f260: 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d 65  ning SQL stateme
f270: 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20  nt.  To load an 
f280: 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20  extension that. 
f290: 20 63 68 61 6e 67 65 73 20 6f 72 20 64 65 6c 65   changes or dele
f2a0: 74 65 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72  tes functions or
f2b0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
f2c0: 6e 63 65 73 2c 20 75 73 65 20 74 68 65 0a 20 20  nces, use the.  
f2d0: 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  [sqlite3_load_ex
f2e0: 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e  tension()] C-lan
f2f0: 67 75 61 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d  guage API.</p>.}
f300: 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72  ..funcdef {lower
f310: 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  (X)} {} {.  Retu
f320: 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72  rn a copy of str
f330: 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74  ing <i>X</i> wit
f340: 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61 72  h all ASCII char
f350: 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72 74  acters.  convert
f360: 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73 65  ed to lower case
f370: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62  .  The default b
f380: 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20  uilt-in lower() 
f390: 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20  function works. 
f3a0: 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61   for ASCII chara
f3b0: 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20  cters only.  To 
f3c0: 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72 73 69  do case conversi
f3d0: 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49  ons on non-ASCII
f3e0: 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c 20 6c  .  characters, l
f3f0: 6f 61 64 20 74 68 65 20 49 43 55 20 65 78 74 65  oad the ICU exte
f400: 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65  nsion..}..funcde
f410: 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69  f {ltrim(X) ltri
f420: 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52  m(X,Y)} {} {.  R
f430: 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66  eturn a string f
f440: 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
f450: 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
f460: 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
f470: 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c 2f  appear in <i>Y</
f480: 69 3e 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  i> from the left
f490: 20 73 69 64 65 20 6f 66 20 3c 69 3e 58 3c 2f 69   side of <i>X</i
f4a0: 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c 69 3e 59  >..  If the <i>Y
f4b0: 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73  </i> argument is
f4c0: 20 6f 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73   omitted, spaces
f4d0: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a   are removed..}.
f4e0: 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c  .funcdef {max(X,
f4f0: 59 2c 2e 2e 2e 29 7d 20 7b 6d 61 78 43 6f 72 65  Y,...)} {maxCore
f500: 46 75 6e 63 20 6d 61 78 7d 20 7b 0a 20 20 52 65  Func max} {.  Re
f510: 74 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  turn the argumen
f520: 74 20 77 69 74 68 20 74 68 65 20 6d 61 78 69 6d  t with the maxim
f530: 75 6d 20 76 61 6c 75 65 2e 20 20 4f 72 20 72 65  um value.  Or re
f540: 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79  turn NULL if any
f550: 20 61 72 67 75 6d 65 6e 74 0a 20 20 69 73 20 4e   argument.  is N
f560: 55 4c 4c 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  ULL..  Note that
f570: 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73   <b>max()</b> is
f580: 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
f590: 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73  on when.  it has
f5a0: 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
f5b0: 65 6e 74 73 20 62 75 74 20 63 6f 6e 76 65 72 74  ents but convert
f5c0: 73 20 74 6f 20 61 6e 20 61 67 67 72 65 67 61 74  s to an aggregat
f5d0: 65 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 67 69  e function if gi
f5e0: 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e  ven.  only a sin
f5f0: 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a  gle argument..}.
f600: 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c  .funcdef {min(X,
f610: 59 2c 2e 2e 2e 29 7d 20 7b 6d 69 6e 43 6f 72 65  Y,...)} {minCore
f620: 46 75 6e 63 20 6d 69 6e 7d 20 7b 0a 20 20 52 65  Func min} {.  Re
f630: 74 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  turn the argumen
f640: 74 20 77 69 74 68 20 74 68 65 20 6d 69 6e 69 6d  t with the minim
f650: 75 6d 20 76 61 6c 75 65 2e 20 0a 20 20 4e 6f 74  um value. .  Not
f660: 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29 3c  e that <b>min()<
f670: 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
f680: 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
f690: 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
f6a0: 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 63   arguments but c
f6b0: 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e 20 61 67  onverts to an ag
f6c0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
f6d0: 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79   if given.  only
f6e0: 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
f6f0: 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  nt..}..funcdef {
f700: 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b 7d 20  nullif(X,Y)} {} 
f710: 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 66  {.  Return the f
f720: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66  irst argument if
f730: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
f740: 72 65 20 64 69 66 66 65 72 65 6e 74 2c 20 0a 20  re different, . 
f750: 20 6f 74 68 65 72 77 69 73 65 20 72 65 74 75 72   otherwise retur
f760: 6e 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64  n NULL..}..funcd
f770: 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b 7d  ef {quote(X)} {}
f780: 20 7b 0a 20 20 54 68 69 73 20 72 6f 75 74 69 6e   {.  This routin
f790: 65 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  e returns a stri
f7a0: 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
f7b0: 76 61 6c 75 65 20 6f 66 0a 20 20 69 74 73 20 61  value of.  its a
f7c0: 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65  rgument suitable
f7d0: 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69   for inclusion i
f7e0: 6e 74 6f 20 61 6e 6f 74 68 65 72 20 53 51 4c 20  nto another SQL 
f7f0: 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 53 74 72  statement..  Str
f800: 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e  ings are surroun
f810: 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75  ded by single-qu
f820: 6f 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65  otes with escape
f830: 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75  s on interior qu
f840: 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64  otes.  as needed
f850: 2e 20 20 42 4c 4f 42 73 20 61 72 65 20 65 6e 63  .  BLOBs are enc
f860: 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69  oded as hexadeci
f870: 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20  mal literals..  
f880: 53 51 4c 69 74 65 20 75 73 65 73 20 74 68 69 73  SQLite uses this
f890: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 6e   function intern
f8a0: 61 6c 6c 79 20 69 6e 20 69 74 73 20 69 6d 70 6c  ally in its impl
f8b0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 5b 56  ementation of [V
f8c0: 41 43 55 55 4d 5d 0a 20 20 73 6f 20 69 66 20 74  ACUUM].  so if t
f8d0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
f8e0: 6f 76 65 72 6c 6f 61 64 69 6e 67 20 74 6f 20 70  overloading to p
f8f0: 72 6f 76 69 64 65 20 69 6e 63 6f 6d 70 61 74 69  rovide incompati
f900: 62 6c 65 20 62 65 68 61 76 69 6f 72 2c 20 74 68  ble behavior, th
f910: 65 0a 20 20 5b 56 41 43 55 55 4d 5d 20 63 6f 6d  e.  [VACUUM] com
f920: 6d 61 6e 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79  mand will likely
f930: 20 63 65 61 73 65 20 74 6f 20 77 6f 72 6b 2e 0a   cease to work..
f940: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
f950: 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74  om()} {} {.  Ret
f960: 75 72 6e 20 61 20 70 73 65 75 64 6f 2d 72 61 6e  urn a pseudo-ran
f970: 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65  dom integer.  be
f980: 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33  tween -922337203
f990: 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b  6854775808 and +
f9a0: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
f9b0: 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  807..}..funcdef 
f9c0: 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20  {randomblob(N)} 
f9d0: 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 6e  {} {.  Return an
f9e0: 20 3c 69 3e 4e 3c 2f 69 3e 2d 62 79 74 65 20 62   <i>N</i>-byte b
f9f0: 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  lob containing p
fa00: 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 62 79 74  seudo-random byt
fa10: 65 73 2e 0a 20 20 3c 69 3e 4e 3c 2f 69 3e 20 73  es..  <i>N</i> s
fa20: 68 6f 75 6c 64 20 62 65 20 61 20 70 6f 73 74 69  hould be a posti
fa30: 76 65 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20 3c  ve integer...  <
fa40: 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61  p>Hint:  applica
fa50: 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61  tions can genera
fa60: 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71  te globally uniq
fa70: 75 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20  ue identifiers. 
fa80: 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63   using this func
fa90: 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69  tion together wi
faa0: 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f  th [hex()] and/o
fab0: 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69  r.  [lower()] li
fac0: 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20  ke this:</p>..  
fad0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68  <blockquote>.  h
fae0: 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
faf0: 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f  ))<br></br>.  lo
fb00: 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c  wer(hex(randombl
fb10: 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f  ob(16))).  </blo
fb20: 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63  ckquote>.}..func
fb30: 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59  def {replace(X,Y
fb40: 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  ,Z)} {} {.  Retu
fb50: 72 6e 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  rn a string form
fb60: 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69  ed by substituti
fb70: 6e 67 20 73 74 72 69 6e 67 20 3c 69 3e 5a 3c 2f  ng string <i>Z</
fb80: 69 3e 20 66 6f 72 0a 20 20 65 76 65 72 79 20 6f  i> for.  every o
fb90: 63 63 75 72 72 61 6e 63 65 20 6f 66 20 73 74 72  ccurrance of str
fba0: 69 6e 67 20 3c 69 3e 59 3c 2f 69 3e 20 69 6e 20  ing <i>Y</i> in 
fbb0: 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e  string <i>X</i>.
fbc0: 20 20 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20    The [BINARY]. 
fbd0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
fbe0: 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  nce is used for 
fbf0: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 49 66  comparisons.  If
fc00: 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 61 6e 20   <i>Y</i> is an 
fc10: 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74  empty.  string t
fc20: 68 65 6e 20 72 65 74 75 72 6e 20 3c 69 3e 58 3c  hen return <i>X<
fc30: 2f 69 3e 20 75 6e 63 68 61 6e 67 65 64 2e 0a 7d  /i> unchanged..}
fc40: 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64  ..funcdef {round
fc50: 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20  (X) round(X,Y)} 
fc60: 7b 7d 20 7b 0a 20 20 52 6f 75 6e 64 20 6f 66 66  {} {.  Round off
fc70: 20 74 68 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58   the number <i>X
fc80: 3c 2f 69 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e  </i> to <i>Y</i>
fc90: 20 64 69 67 69 74 73 20 74 6f 20 74 68 65 0a 20   digits to the. 
fca0: 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 64 65   right of the de
fcb0: 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66  cimal point.  If
fcc0: 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72   the <i>Y</i> ar
fcd0: 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
fce0: 64 2c 20 30 20 69 73 20 0a 20 20 61 73 73 75 6d  d, 0 is .  assum
fcf0: 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ed..}..funcdef {
fd00: 72 74 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58  rtrim(X) rtrim(X
fd10: 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  ,Y)} {} {.  Retu
fd20: 72 6e 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  rn a string form
fd30: 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61  ed by removing a
fd40: 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61  ny and all.  cha
fd50: 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70  racters that app
fd60: 65 61 72 20 69 6e 20 3c 69 3e 59 3c 2f 69 3e 20  ear in <i>Y</i> 
fd70: 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73  from the right s
fd80: 69 64 65 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ide of <i>X</i>.
fd90: 0a 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f  .  If the <i>Y</
fda0: 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  i> argument is o
fdb0: 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73 20 61  mitted, spaces a
fdc0: 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a 66  re removed..}..f
fdd0: 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28  uncdef {soundex(
fde0: 58 29 7d 20 7b 7d 20 7b 0a 20 20 43 6f 6d 70 75  X)} {} {.  Compu
fdf0: 74 65 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65  te the soundex e
fe00: 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 73  ncoding of the s
fe10: 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a  tring <i>X</i>..
fe20: 20 20 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30    The string "?0
fe30: 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64 20  00" is returned 
fe40: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
fe50: 69 73 20 4e 55 4c 4c 2e 0a 20 20 54 68 69 73 20  is NULL..  This 
fe60: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74  function is omit
fe70: 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20  ted from SQLite 
fe80: 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74  by default..  It
fe90: 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
fea0: 6c 65 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  le the -DSQLITE_
feb0: 53 4f 55 4e 44 45 58 3d 31 20 63 6f 6d 70 69 6c  SOUNDEX=1 compil
fec0: 65 72 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75  er option.  is u
fed0: 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20  sed when SQLite 
fee0: 69 73 20 62 75 69 6c 74 2e 0a 7d 0a 0a 66 75 6e  is built..}..fun
fef0: 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65 72  cdef {sqlite_ver
ff00: 73 69 6f 6e 28 29 7d 20 7b 73 71 6c 69 74 65 5f  sion()} {sqlite_
ff10: 76 65 72 73 69 6f 6e 7d 20 7b 0a 20 20 52 65 74  version} {.  Ret
ff20: 75 72 6e 20 74 68 65 20 76 65 72 73 69 6f 6e 20  urn the version 
ff30: 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53  string for the S
ff40: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 20 20  QLite library.  
ff50: 74 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e  that is running.
ff60: 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 33 2e 35    Example:  "3.5
ff70: 2e 39 22 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .9".}..funcdef {
ff80: 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75  substr(X,Y,Z) su
ff90: 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  bstr(X,Y)} {} {.
ffa0: 20 20 52 65 74 75 72 6e 20 61 20 73 75 62 73 74    Return a subst
ffb0: 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74  ring of input st
ffc0: 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 74 68  ring <i>X</i> th
ffd0: 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
ffe0: 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74 68   the <i>Y</i>-th
fff0: 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 20 77   character and w
10000 68 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f 69 3e  hich is <i>Z</i>
10010 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
10020 2e 0a 20 20 49 66 20 3c 69 3e 5a 3c 2f 69 3e 20  ..  If <i>Z</i> 
10030 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20  is omitted then 
10040 61 6c 6c 20 63 68 61 72 61 63 74 65 72 20 74 68  all character th
10050 72 6f 75 67 68 20 74 68 65 20 65 6e 64 20 6f 66  rough the end of
10060 20 74 68 65 20 73 74 72 69 6e 67 0a 20 20 61 72   the string.  ar
10070 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 54 68  e returned..  Th
10080 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72  e left-most char
10090 61 63 74 65 72 20 6f 66 20 3c 69 3e 58 3c 2f 69  acter of <i>X</i
100a0 3e 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20 20  > is number 1.  
100b0 49 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6e  If <i>Y</i> is n
100c0 65 67 61 74 69 76 65 0a 20 20 74 68 65 20 74 68  egative.  the th
100d0 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65  e first characte
100e0 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69  r of the substri
100f0 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63  ng is found by c
10100 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65  ounting from the
10110 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20  .  right rather 
10120 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20  than the left.  
10130 49 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 73  If <i>X</i> is s
10140 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 63 68 61  tring.  then cha
10150 72 61 63 74 65 72 73 20 69 6e 64 69 63 65 73 20  racters indices 
10160 72 65 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20  refer to actual 
10170 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 73  UTF-8 characters
10180 2e 20 20 49 66 0a 20 20 3c 69 3e 58 3c 2f 69 3e  .  If.  <i>X</i>
10190 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20   is a BLOB then 
101a0 74 68 65 20 69 6e 64 69 63 65 73 20 72 65 66 65  the indices refe
101b0 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66  r to bytes..}..f
101c0 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68  uncdef {total_ch
101d0 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20  anges()} {} {.  
101e0 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
101f0 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65 73  r of row changes
10200 20 63 61 75 73 65 64 20 62 79 20 49 4e 53 45 52   caused by INSER
10210 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
10220 45 54 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73  ETE.  statements
10230 20 73 69 6e 63 65 20 74 68 65 20 63 75 72 72 65   since the curre
10240 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  nt database conn
10250 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65  ection was opene
10260 64 2e 0a 20 20 54 68 69 73 20 66 75 6e 63 74 69  d..  This functi
10270 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
10280 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
10290 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
102a0 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74  s()].  C/C++ int
102b0 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64  erface..}..funcd
102c0 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d  ef {trim(X) trim
102d0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  (X,Y)} {} {.  Re
102e0 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66 6f  turn a string fo
102f0 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67  rmed by removing
10300 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63   any and all.  c
10310 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
10320 70 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c 2f 69  ppear in <i>Y</i
10330 3e 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73  > from both ends
10340 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 20 20   of <i>X</i>..  
10350 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 20  If the <i>Y</i> 
10360 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
10370 74 65 64 2c 20 73 70 61 63 65 73 20 61 72 65 20  ted, spaces are 
10380 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a 66 75 6e 63  removed..}..func
10390 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d 20  def {typeof(X)} 
103a0 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68  {} {.  Return th
103b0 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 20  e [datatype] of 
103c0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c  the expression <
103d0 69 3e 58 3c 2f 69 3e 2e 20 20 54 68 65 20 6f 6e  i>X</i>.  The on
103e0 6c 79 20 0a 20 20 72 65 74 75 72 6e 20 76 61 6c  ly .  return val
103f0 75 65 73 20 61 72 65 20 22 6e 75 6c 6c 22 2c 20  ues are "null", 
10400 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
10410 22 2c 20 22 74 65 78 74 22 2c 20 61 6e 64 20 22  ", "text", and "
10420 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65  blob"..}..funcde
10430 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20  f {upper(X)} {} 
10440 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 63 6f 70  {.  Return a cop
10450 79 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e  y of input strin
10460 67 20 3c 69 3e 58 3c 2f 69 3e 20 63 6f 6e 76 65  g <i>X</i> conve
10470 72 74 65 64 20 74 6f 20 61 6c 6c 0a 20 20 75 70  rted to all.  up
10480 70 65 72 2d 63 61 73 65 20 6c 65 74 74 65 72 73  per-case letters
10490 2e 20 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74  .  The implement
104a0 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 66 75  ation of this fu
104b0 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 20  nction uses the 
104c0 43 20 6c 69 62 72 61 72 79 0a 20 20 72 6f 75 74  C library.  rout
104d0 69 6e 65 20 3c 62 3e 74 6f 75 70 70 65 72 28 29  ine <b>toupper()
104e0 3c 2f 62 3e 20 77 68 69 63 68 20 6d 65 61 6e 73  </b> which means
104f0 20 69 74 20 6d 61 79 20 6e 6f 74 20 77 6f 72 6b   it may not work
10500 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 0a 20   correctly on . 
10510 20 6e 6f 6e 2d 41 53 43 49 49 20 55 54 46 2d 38   non-ASCII UTF-8
10520 20 73 74 72 69 6e 67 73 2e 0a 7d 0a 0a 66 75 6e   strings..}..fun
10530 63 64 65 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e  cdef {zeroblob(N
10540 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
10550 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 69   a BLOB consisti
10560 6e 67 20 6f 66 20 4e 20 62 79 74 65 73 20 6f 66  ng of N bytes of
10570 20 30 78 30 30 2e 20 20 53 51 4c 69 74 65 0a 20   0x00.  SQLite. 
10580 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65 20 7a   manages these z
10590 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20 65 66  eroblobs very ef
105a0 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72 6f  ficiently.  Zero
105b0 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75 73 65  blobs can be use
105c0 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65 20 73  d to.  reserve s
105d0 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f 42 20  pace for a BLOB 
105e0 74 68 61 74 20 69 73 20 6c 61 74 65 72 20 77 72  that is later wr
105f0 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20 20 5b  itten using .  [
10600 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70 65  sqlite3_blob_ope
10610 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61  n() | incrementa
10620 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 7d 0a 3c  l BLOB I/O]..}.<
10630 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tcl>.</table>..
10640 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
10650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10690 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61  ####.Section {Da
106a0 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63  te And Time Func
106b0 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
106c0 7b 64 61 74 65 66 75 6e 63 7d 0a 3c 2f 74 63 6c  {datefunc}.</tcl
106d0 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75  >..<p>.SQLite su
106e0 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65  pports five date
106f0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
10700 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  ons as follows:.
10710 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c  </p>..<p>.<ol>.<
10720 6c 69 3e 20 3c 62 3e 64 61 74 65 28 3c 2f 62 3e  li> <b>date(</b>
10730 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
10740 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
10750 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
10760 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62  b> </li>.<li> <b
10770 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d  >time(</b><i>tim
10780 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
10790 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
107a0 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c  </i><b>)</b> </l
107b0 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 64 61 74 65 74  i>.<li> <b>datet
107c0 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  ime(</b><i>times
107d0 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
107e0 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
107f0 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e  i><b>)</b> </li>
10800 0a 3c 6c 69 3e 20 3c 62 3e 6a 75 6c 69 61 6e 64  .<li> <b>juliand
10810 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  ay(</b><i>timest
10820 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
10830 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
10840 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a  ><b>)</b> </li>.
10850 3c 6c 69 3e 20 3c 62 3e 73 74 72 66 74 69 6d 65  <li> <b>strftime
10860 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20  (</b><i>format, 
10870 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
10880 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
10890 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20  ...</i><b>)</b> 
108a0 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
108b0 0a 41 6c 6c 20 66 69 76 65 20 66 75 6e 63 74 69  .All five functi
108c0 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20  ons take a time 
108d0 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67  string as an arg
108e0 75 6d 65 6e 74 2e 20 54 68 65 20 74 69 6d 65 20  ument. The time 
108f0 73 74 72 69 6e 67 0a 69 73 20 66 6f 6c 6c 6f 77  string.is follow
10900 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f  ed by zero or mo
10910 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a 54  re modifiers. .T
10920 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 66 75  he strftime() fu
10930 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65  nction also take
10940 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  s a format strin
10950 67 20 61 73 20 69 74 73 20 66 69 72 73 74 20 61  g as its first a
10960 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c  rgument..</p>..<
10970 70 3e 0a 54 68 65 20 64 61 74 65 28 29 20 66 75  p>.The date() fu
10980 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
10990 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73 20  he date in this 
109a0 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d 2d  format: YYYY-MM-
109b0 44 44 2e 20 0a 54 68 65 20 74 69 6d 65 28 29 20  DD. .The time() 
109c0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
109d0 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48 3a   the time as HH:
109e0 4d 4d 3a 53 53 2e 20 0a 54 68 65 20 64 61 74 65  MM:SS. .The date
109f0 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  time() function 
10a00 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d  returns "YYYY-MM
10a10 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a  -DD HH:MM:SS". .
10a20 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20  The julianday() 
10a30 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
10a40 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68   the .<a href="h
10a50 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
10a60 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
10a70 61 6e 5f 64 61 79 22 3e 4a 75 6c 69 61 6e 20 64  an_day">Julian d
10a80 61 79 3c 2f 61 3e 20 2d 20 0a 6e 75 6d 62 65 72  ay</a> - .number
10a90 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e   of days since n
10aa0 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68  oon in Greenwich
10ab0 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c   on November 24,
10ac0 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 3c 61 20   4714 B.C. .(<a 
10ad0 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e  href="http://en.
10ae0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
10af0 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65  ki/Proleptic_Gre
10b00 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 22  gorian_calendar"
10b10 3e 0a 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67  >.Proleptic Greg
10b20 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 3c 2f  orian calendar</
10b30 61 3e 29 2e 20 0a 54 68 65 20 73 74 72 66 74 69  a>). .The strfti
10b40 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74  me() routine ret
10b50 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f  urns the date fo
10b60 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e  rmatted accordin
10b70 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74  g to .the format
10b80 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65   string specifie
10b90 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61  d as the first a
10ba0 72 67 75 6d 65 6e 74 2e 0a 54 68 65 20 66 6f 72  rgument..The for
10bb0 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f  mat string suppo
10bc0 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d  rts the most com
10bd0 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e  mon substitution
10be0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a  s found in the .
10bf0 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
10c00 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e  opengroup.org/on
10c10 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37  linepubs/0079087
10c20 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e  99/xsh/strftime.
10c30 68 74 6d 6c 22 3e 0a 73 74 72 66 74 69 6d 65 28  html">.strftime(
10c40 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 61 3e 20 66  ) function</a> f
10c50 72 6f 6d 20 0a 74 68 65 20 73 74 61 6e 64 61 72  rom .the standar
10c60 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c 75 73  d C library plus
10c70 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74 69 74   two new substit
10c80 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25  utions, %f and %
10c90 4a 2e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  J..The following
10ca0 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c   is a complete l
10cb0 69 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72  ist of valid str
10cc0 66 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75  ftime() substitu
10cd0 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  tions:.</p>..<bl
10ce0 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
10cf0 20 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c   border="0" cell
10d00 70 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c  padding="0" cell
10d10 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72  spacing="0">.<tr
10d20 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  ><td><td width="
10d30 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c  10"><td></tr>..<
10d40 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c  tr><td> %d <td><
10d50 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68  td> day of month
10d60 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66  : 00.<tr><td> %f
10d70 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69   <td><td> fracti
10d80 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53  onal seconds: SS
10d90 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48  .SSS.<tr><td> %H
10da0 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20   <td><td> hour: 
10db0 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20  00-24 .<tr><td> 
10dc0 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20  %j <td><td> day 
10dd0 6f 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36  of year: 001-366
10de0 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64  .<tr><td> %J <td
10df0 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79  ><td> Julian day
10e00 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e   number.<tr><td>
10e10 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e   %m <td><td> mon
10e20 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74  th: 01-12.<tr><t
10e30 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d  d> %M <td><td> m
10e40 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72  inute: 00-59.<tr
10e50 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64  ><td> %s <td><td
10e60 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  > seconds since 
10e70 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c  1970-01-01.<tr><
10e80 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20  td> %S <td><td> 
10e90 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c  seconds: 00-59.<
10ea0 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c  tr><td> %w <td><
10eb0 74 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20  td> day of week 
10ec0 30 2d 36 20 77 69 74 68 20 73 75 6e 64 61 79 3d  0-6 with sunday=
10ed0 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c  =0.<tr><td> %W <
10ee0 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20  td><td> week of 
10ef0 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e  year: 00-53.<tr>
10f00 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e  <td> %Y <td><td>
10f10 20 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39   year: 0000-9999
10f20 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64  .<tr><td> %% <td
10f30 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e  ><td> %.</table>
10f40 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
10f50 3c 70 3e 0a 4e 6f 74 69 63 65 20 74 68 61 74 20  <p>.Notice that 
10f60 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20 61  all other date a
10f70 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
10f80 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73 73  s can be express
10f90 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20 73  ed.in terms of s
10fa0 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e 0a  trftime():.</p>.
10fb0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
10fc0 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
10fd0 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
10fe0 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
10ff0 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e 63  .<tr><td><b>Func
11000 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64 74  tion</b><td widt
11010 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45 71  h="30"><td><b>Eq
11020 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69 6d  uivalent strftim
11030 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64 3e  e()</b>.<tr><td>
11040 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20 20     date(...)    
11050 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
11060 74 69 6d 65 28 22 25 59 2d 25 6d 2d 25 64 22 2c  time("%Y-%m-%d",
11070 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
11080 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20 20   time(...)      
11090 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
110a0 6d 65 28 22 25 48 3a 25 4d 3a 25 53 22 2c 20 2e  me("%H:%M:%S", .
110b0 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64  ..).<tr><td>   d
110c0 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c 74  atetime(...)  <t
110d0 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65  d><td>  strftime
110e0 28 22 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d  ("%Y-%m-%d %H:%M
110f0 3a 25 53 22 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  :%S", ...).<tr><
11100 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79 28  td>   julianday(
11110 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20 73  ...) <td><td>  s
11120 74 72 66 74 69 6d 65 28 22 25 4a 22 2c 20 2e 2e  trftime("%J", ..
11130 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  .).</table>.</bl
11140 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54  ockquote>..<p>.T
11150 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20  he only reasons 
11160 66 6f 72 20 70 72 6f 76 69 64 69 6e 67 20 66 75  for providing fu
11170 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72 20 74 68  nctions other th
11180 61 6e 20 73 74 72 66 74 69 6d 65 28 29 20 69 73  an strftime() is
11190 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65  .for convenience
111a0 20 61 6e 64 20 66 6f 72 20 65 66 66 69 63 69 65   and for efficie
111b0 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54  ncy..</p>..<h3>T
111c0 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e  ime Strings</h3>
111d0 0a 0a 3c 70 3e 41 20 74 69 6d 65 20 73 74 72 69  ..<p>A time stri
111e0 6e 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79  ng can be in any
111f0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11200 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a  g formats:</p>..
11210 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  <ol>.<li> <i>YYY
11220 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e  Y-MM-DD</i>.<li>
11230 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
11240 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
11250 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
11260 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
11270 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d  >YYYY-MM-DD HH:M
11280 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
11290 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
112a0 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
112b0 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
112c0 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
112d0 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53  >T</b><i>HH:MM:S
112e0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  S</i>.<li> <i>YY
112f0 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
11300 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  </b><i>HH:MM:SS.
11310 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
11320 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  HH:MM</i>.<li> <
11330 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c  i>HH:MM:SS</i>.<
11340 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e  li> <i>HH:MM:SS.
11350 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  SSS</i>.<li> <b>
11360 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e  now</b>.<li> <i>
11370 44 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c  DDDDDDDDDD</i>.<
11380 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 49 6e 20 66 6f 72  /ol>..<p>.In for
11390 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68 20 37  mats 5 through 7
113a0 2c 20 74 68 65 20 22 54 22 20 69 73 20 61 20 6c  , the "T" is a l
113b0 69 74 65 72 61 6c 20 63 68 61 72 61 63 74 65 72  iteral character
113c0 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65   separating .the
113d0 20 64 61 74 65 20 61 6e 64 20 74 68 65 20 74 69   date and the ti
113e0 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65 64 20  me, as required 
113f0 62 79 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74  by .<a href="htt
11400 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f  p://www.w3c.org/
11410 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65  TR/NOTE-datetime
11420 22 3e 49 53 4f 2d 38 36 30 31 3c 2f 61 3e 2e 20  ">ISO-8601</a>. 
11430 0a 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75  .Formats 8 throu
11440 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63 69  gh 10 that speci
11450 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61  fy only a time a
11460 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20  ssume a date of 
11470 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72  .2000-01-01. For
11480 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72 69  mat 11, the stri
11490 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e  ng 'now', is con
114a0 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  verted into the 
114b0 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e  .current date an
114c0 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e  d time as obtain
114d0 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72  ed from the xCur
114e0 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a  rentTime method.
114f0 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  of the [sqlite3_
11500 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75  vfs] object in u
11510 73 65 2e 0a 3c 61 20 68 72 65 66 3d 22 68 74 74  se..<a href="htt
11520 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
11530 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69  .org/wiki/Coordi
11540 6e 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f  nated_Universal_
11550 54 69 6d 65 22 3e 0a 55 6e 69 76 65 72 73 61 6c  Time">.Universal
11560 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d   Coordinated Tim
11570 65 20 28 55 54 43 29 3c 2f 61 3e 20 69 73 20 75  e (UTC)</a> is u
11580 73 65 64 2e 20 0a 46 6f 72 6d 61 74 20 31 32 20  sed. .Format 12 
11590 69 73 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d  is the .<a href=
115a0 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  "http://en.wikip
115b0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75  edia.org/wiki/Ju
115c0 6c 69 61 6e 5f 64 61 79 22 3e 4a 75 6c 69 61 6e  lian_day">Julian
115d0 20 64 61 79 20 6e 75 6d 62 65 72 3c 2f 61 3e 0a   day number</a>.
115e0 65 78 70 72 65 73 73 65 64 20 61 73 20 61 20 66  expressed as a f
115f0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
11600 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d  lue..</p>..<h3>M
11610 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c  odifiers</h3>..<
11620 70 3e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e  p>The time strin
11630 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65  g can be followe
11640 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  d by zero or mor
11650 65 20 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74  e modifiers that
11660 20 0a 61 6c 74 65 72 20 74 68 65 20 64 61 74 65   .alter the date
11670 20 61 6e 64 20 74 69 6d 65 20 73 74 72 69 6e 67   and time string
11680 2e 20 20 45 61 63 68 20 6d 6f 64 69 66 69 65 72  .  Each modifier
11690 0a 69 73 20 61 20 74 72 61 6e 73 66 6f 72 6d 61  .is a transforma
116a0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61 70 70  tion that is app
116b0 6c 69 65 64 20 74 6f 20 74 68 65 20 74 69 6d 65  lied to the time
116c0 20 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c   string to its l
116d0 65 66 74 2e 0a 4d 6f 64 69 66 69 65 72 73 20 61  eft..Modifiers a
116e0 72 65 20 61 70 70 6c 69 65 64 20 66 72 6f 6d 20  re applied from 
116f0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 3b 20 6f  left to right; o
11700 72 64 65 72 20 69 73 20 69 6d 70 6f 72 74 61 6e  rder is importan
11710 74 2e 0a 54 68 65 20 61 76 61 69 6c 61 62 6c 65  t..The available
11720 20 6d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61   modifiers are a
11730 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a  s follows.</p>..
11740 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61  <ol>.<li> NNN da
11750 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72  ys.<li> NNN hour
11760 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74  s.<li> NNN minut
11770 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e  es.<li> NNN.NNNN
11780 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e   seconds.<li> NN
11790 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e  N months.<li> NN
117a0 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61  N years.<li> sta
117b0 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e  rt of month.<li>
117c0 20 73 74 61 72 74 20 6f 66 20 79 65 61 72 0a 3c   start of year.<
117d0 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 64 61 79  li> start of day
117e0 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a  .<li> weekday N.
117f0 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c  <li> unixepoch.<
11800 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c  li> localtime.<l
11810 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e 0a 0a 3c  i> utc .</ol>..<
11820 70 3e 54 68 65 20 66 69 72 73 74 20 73 69 78 20  p>The first six 
11830 6d 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72  modifiers (1 thr
11840 6f 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20  ough 6) .simply 
11850 61 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65  add the specifie
11860 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65  d amount of time
11870 20 74 6f 20 74 68 65 20 64 61 74 65 20 0a 73 70   to the date .sp
11880 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 70  ecified by the p
11890 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74 72  receding timestr
118a0 69 6e 67 2e 0a 4e 6f 74 65 20 74 68 61 74 20 22  ing..Note that "
118b0 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74  &plusmn;NNN mont
118c0 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65 6e  hs" works by ren
118d0 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67 69  dering the origi
118e0 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74 68  nal date into.th
118f0 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72  e YYYY-MM-DD for
11900 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65 20  mat, adding the 
11910 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74  &plusmn;NNN to t
11920 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75  he MM month valu
11930 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a  e, then.normaliz
11940 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e 20  ing the result. 
11950 20 54 68 75 73 2c 20 66 6f 72 20 65 78 61 6d 70   Thus, for examp
11960 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32 30 30  le, the data 200
11970 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69 65 64  1-03-31 modified
11980 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69  .by '+1 month' i
11990 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64 73 20  nitially yields 
119a0 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75 74 20  2001-04-31, but 
119b0 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33  April only has 3
119c0 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20 64 61  0 days.so the da
119d0 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64  te is normalized
119e0 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31 2e 20   to 2001-05-01. 
119f0 20 41 20 73 69 6d 69 6c 61 72 20 65 66 66 65 63   A similar effec
11a00 74 20 6f 63 63 75 72 73 20 77 68 65 6e 0a 74 68  t occurs when.th
11a10 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20  e original date 
11a20 69 73 20 46 65 62 72 75 61 72 79 20 32 39 20 6f  is February 29 o
11a30 66 20 61 20 6c 65 61 70 79 65 61 72 20 61 6e 64  f a leapyear and
11a40 20 74 68 65 20 6d 6f 64 69 66 69 65 72 20 69 73   the modifier is
11a50 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73  .&plusmn;N years
11a60 20 77 68 65 72 65 20 4e 20 69 73 20 6e 6f 74 20   where N is not 
11a70 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f  a multiple of fo
11a80 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ur.</p>..<p>The 
11a90 22 73 74 61 72 74 20 6f 66 22 20 6d 6f 64 69 66  "start of" modif
11aa0 69 65 72 73 20 28 37 20 74 68 72 6f 75 67 68 20  iers (7 through 
11ab0 39 29 20 73 68 69 66 74 20 74 68 65 20 64 61 74  9) shift the dat
11ac0 65 20 62 61 63 6b 77 61 72 64 73 20 0a 74 6f 20  e backwards .to 
11ad0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
11ae0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e   the current mon
11af0 74 68 2c 20 79 65 61 72 20 6f 72 20 64 61 79 2e  th, year or day.
11b00 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 77 65  </p>..<p>The "we
11b10 65 6b 64 61 79 22 20 6d 6f 64 69 66 69 65 72 20  ekday" modifier 
11b20 61 64 76 61 6e 63 65 73 20 74 68 65 20 64 61 74  advances the dat
11b30 65 20 66 6f 72 77 61 72 64 20 74 6f 20 74 68 65  e forward to the
11b40 20 6e 65 78 74 20 64 61 74 65 20 0a 77 68 65 72   next date .wher
11b50 65 20 74 68 65 20 77 65 65 6b 64 61 79 20 6e 75  e the weekday nu
11b60 6d 62 65 72 20 69 73 20 4e 2e 20 53 75 6e 64 61  mber is N. Sunda
11b70 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69  y is 0, Monday i
11b80 73 20 31 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  s 1, and so fort
11b90 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22  h.</p>..<p>The "
11ba0 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66  unixepoch" modif
11bb0 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f  ier (11) only wo
11bc0 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65 64 69  rks if it immedi
11bd0 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61  ately follows .a
11be0 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e 20 74   timestring in t
11bf0 68 65 20 44 44 44 44 44 44 44 44 44 44 20 66 6f  he DDDDDDDDDD fo
11c00 72 6d 61 74 2e 20 0a 54 68 69 73 20 6d 6f 64 69  rmat. .This modi
11c10 66 69 65 72 20 63 61 75 73 65 73 20 74 68 65 20  fier causes the 
11c20 44 44 44 44 44 44 44 44 44 44 20 74 6f 20 62 65  DDDDDDDDDD to be
11c30 20 69 6e 74 65 72 70 72 65 74 65 64 20 6e 6f 74   interpreted not
11c40 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e 20 64 61   .as a Julian da
11c50 79 20 6e 75 6d 62 65 72 20 61 73 20 69 74 20 6e  y number as it n
11c60 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65  ormally would be
11c70 2c 20 62 75 74 20 61 73 0a 3c 61 20 68 72 65 66  , but as.<a href
11c80 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  ="http://en.wiki
11c90 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55  pedia.org/wiki/U
11ca0 6e 69 78 5f 74 69 6d 65 22 3e 55 6e 69 78 20 54  nix_time">Unix T
11cb0 69 6d 65 3c 2f 61 3e 20 2d 20 74 68 65 20 0a 6e  ime</a> - the .n
11cc0 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
11cd0 20 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66   since 1970.  If
11ce0 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22   the "unixepoch"
11cf0 20 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e   modifier does n
11d00 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65  ot.follow a time
11d10 73 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f  string of the fo
11d20 72 6d 20 44 44 44 44 44 44 44 44 44 44 20 77 68  rm DDDDDDDDDD wh
11d30 69 63 68 20 65 78 70 72 65 73 73 65 73 20 74 68  ich expresses th
11d40 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f  e number.of seco
11d50 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f  nds since 1970 o
11d60 72 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66  r if other modif
11d70 69 65 72 73 0a 73 65 70 61 72 61 74 65 20 74 68  iers.separate th
11d80 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
11d90 64 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f  difier from prio
11da0 72 20 44 44 44 44 44 44 44 44 44 44 20 74 68 65  r DDDDDDDDDD the
11db0 6e 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69  n the.behavior i
11dc0 73 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e  s undefined.</p>
11dd0 0a 0a 3c 70 3e 54 68 65 20 22 6c 6f 63 61 6c 74  ..<p>The "localt
11de0 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 28 31  ime" modifier (1
11df0 32 29 20 61 73 73 75 6d 65 73 20 74 68 65 20 74  2) assumes the t
11e00 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74  ime string to it
11e10 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55 6e 69  s left is in.Uni
11e20 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
11e30 65 64 20 54 69 6d 65 20 28 55 54 43 29 20 61 6e  ed Time (UTC) an
11e40 64 20 61 64 6a 75 73 74 73 20 74 68 65 20 74 69  d adjusts the ti
11e50 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74 68 61  me.string so tha
11e60 74 20 69 74 20 64 69 73 70 6c 61 79 73 20 6c 6f  t it displays lo
11e70 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22 6c 6f  caltime.  If "lo
11e80 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73  caltime".follows
11e90 20 61 20 74 69 6d 65 20 74 68 61 74 20 69 73 20   a time that is 
11ea0 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20 74 68  not UTC, then th
11eb0 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
11ec0 64 65 66 69 6e 65 64 2e 0a 54 68 65 20 22 75 74  defined..The "ut
11ed0 63 22 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69  c" is the opposi
11ee0 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65  te of "localtime
11ef0 22 2e 20 20 22 75 74 63 22 20 61 73 73 75 6d 65  ".  "utc" assume
11f00 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69 6e  s that the strin
11f10 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g.to its left is
11f20 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69   in the local ti
11f30 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73  mezone and adjus
11f40 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20 74  ts that string t
11f50 6f 20 62 65 20 69 6e 20 55 54 43 2e 0a 49 66 20  o be in UTC..If 
11f60 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e 67  the prior string
11f70 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c   is not in local
11f80 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 72  time, then the r
11f90 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20 69  esult of "utc" i
11fa0 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e  s.undefined.</p>
11fb0 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f  ..<h3>Examples</
11fc0 68 33 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20  h3>..<p>Compute 
11fd0 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 65  the current date
11fe0 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  .<p>..<blockquot
11ff0 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27 6e  e>SELECT date('n
12000 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ow');</blockquot
12010 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74  e>..<p>Compute t
12020 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74  he last day of t
12030 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
12040 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
12050 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
12060 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d  now','start of m
12070 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27  onth','+1 month'
12080 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c  ,'-1 day');.</bl
12090 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f  ockquote>..<p>Co
120a0 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61  mpute the date a
120b0 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20  nd time given a 
120c0 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31  unix timestamp 1
120d0 30 39 32 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a  092941466.</p>..
120e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20  <blockquote>.   
120f0 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65   SELECT datetime
12100 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e  (1092941466, 'un
12110 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f  ixepoch');.</blo
12120 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d  ckquote>..<p>Com
12130 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61 6e  pute the date an
12140 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75  d time given a u
12150 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30  nix timestamp 10
12160 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63  92941466, and .c
12170 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f  ompensate for yo
12180 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  ur local timezon
12190 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
121a0 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61  ote>.  SELECT da
121b0 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36  tetime(109294146
121c0 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20  6, 'unixepoch', 
121d0 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f  'localtime');.</
121e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
121f0 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72 72  Compute the curr
12200 65 6e 74 20 75 6e 69 78 20 74 69 6d 65 73 74 61  ent unix timesta
12210 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  mp.</p>..<blockq
12220 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73  uote>.  SELECT s
12230 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
12240 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  w');.</blockquot
12250 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74  e>..<p>Compute t
12260 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he number of day
12270 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e  s since the sign
12280 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65  ing of the US De
12290 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64  claration.of Ind
122a0 65 70 65 6e 64 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  ependent.</p>..<
122b0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
122c0 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28 27  LECT julianday('
122d0 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64 61  now') - julianda
122e0 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29 3b  y('1776-07-04');
122f0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
12300 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e  <p>Compute the n
12310 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
12320 20 73 69 6e 63 65 20 61 20 70 61 72 74 69 63 75   since a particu
12330 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30  lar moment in 20
12340 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  04:</p>..<blockq
12350 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73  uote>.  SELECT s
12360 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
12370 77 27 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27  w') - strftime('
12380 25 73 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20  %s','2004-01-01 
12390 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c  02:34:56');.</bl
123a0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 43  ockquote>..<p>.C
123b0 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20  ompute the date 
123c0 6f 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65  of the first Tue
123d0 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a  sday in October.
123e0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
123f0 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  year..</p>..<blo
12400 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
12410 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74  T date('now','st
12420 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39  art of year','+9
12430 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61   months','weekda
12440 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  y 2');.</blockqu
12450 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65  ote>..<p>Compute
12460 20 74 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20   the time since 
12470 74 68 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69  the unix epoch i
12480 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65  n seconds .(like
12490 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
124a0 6e 6f 77 27 29 20 65 78 63 65 70 74 20 69 6e 63  now') except inc
124b0 6c 75 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c  ludes fractional
124c0 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c   part):</p>..<bl
124d0 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45  ockquote>.  SELE
124e0 43 54 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e  CT (julianday('n
124f0 6f 77 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35  ow') - 2440587.5
12500 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f  )*86400.0;.</blo
12510 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 33 3e 43 61  ckquote>..<h3>Ca
12520 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f  veats And Bugs</
12530 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70  h3>..<p>The comp
12540 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c  utation of local
12550 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65   time depends he
12560 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69  avily on the whi
12570 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e  m .of politician
12580 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69  s and is thus di
12590 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63  fficult to get c
125a0 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20  orrect for .all 
125b0 6c 6f 63 61 6c 65 73 2e 20 49 6e 20 74 68 69 73  locales. In this
125c0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
125d0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
125e0 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f  library .functio
125f0 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20  n localtime_r() 
12600 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73  is used to assis
12610 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61  t in the calcula
12620 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74  tion of .local t
12630 69 6d 65 2e 20 20 54 68 65 20 0a 6c 6f 63 61 6c  ime.  The .local
12640 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e 63 74  time_r() C funct
12650 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c  ion normally onl
12660 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65 61 72  y works for year
12670 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30 20 61  s.between 1970 a
12680 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64 61 74  nd 2037. For dat
12690 65 73 20 6f 75 74 73 69 64 65 20 74 68 69 73 20  es outside this 
126a0 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20 0a 61  range, SQLite .a
126b0 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70 20 74  ttempts to map t
126c0 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61 6e 20  he year into an 
126d0 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61 72 20  equivalent year 
126e0 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72 61 6e  within .this ran
126f0 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c 63 75  ge, do the calcu
12700 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 70  lation, then map
12710 20 74 68 65 20 79 65 61 72 20 62 61 63 6b 2e 3c   the year back.<
12720 2f 70 3e 0a 0a 0a 3c 70 3e 44 61 74 65 20 63 6f  /p>...<p>Date co
12730 6d 70 75 74 61 74 69 6f 6e 73 20 64 6f 20 6e 6f  mputations do no
12740 74 20 67 69 76 65 20 63 6f 72 72 65 63 74 20 72  t give correct r
12750 65 73 75 6c 74 73 20 66 6f 72 20 64 61 74 65 73  esults for dates
12760 20 0a 62 65 66 6f 72 65 20 4a 75 6c 69 61 6e 20   .before Julian 
12770 64 61 79 20 6e 75 6d 62 65 72 20 30 20 28 2d 34  day number 0 (-4
12780 37 31 33 2d 31 31 2d 32 34 20 31 32 3a 30 30 3a  713-11-24 12:00:
12790 30 30 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e  00).</p>..<p>Non
127a0 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20 70  -Vista Windows p
127b0 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20 73 75  latforms only su
127c0 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20 6f 66  pport one set of
127d0 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56 69 73   DST rules. .Vis
127e0 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 73  ta only supports
127f0 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72 65 2c   two. Therefore,
12800 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74 66 6f   on these platfo
12810 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63 61 6c  rms, .historical
12820 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69 6f 6e   DST calculation
12830 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f 72 72  s will be incorr
12840 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d 70 6c  ect. .For exampl
12850 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20 69 6e  e, in the US, in
12860 20 32 30 30 37 20 74 68 65 20 44 53 54 20 72 75   2007 the DST ru
12870 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a 4e 6f  les changed. .No
12880 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73 20  n-Vista Windows 
12890 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c 79 20  platforms apply 
128a0 74 68 65 20 6e 65 77 20 32 30 30 37 20 44 53 54  the new 2007 DST
128b0 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c 20 70   rules .to all p
128c0 72 65 76 69 6f 75 73 20 79 65 61 72 73 20 61 73  revious years as
128d0 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64 6f 65   well. Vista doe
128e0 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74 74 65  s somewhat bette
128f0 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75 6c 74  r.getting result
12900 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b 20 74  s correct back t
12910 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74 68 65  o 1986, when the
12920 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c 73 6f   rules were also
12930 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c   changed.</p>..<
12940 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63  p>All internal c
12950 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73 73 75  omputations assu
12960 6d 65 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d  me the .<a href=
12970 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  "http://en.wikip
12980 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47 72  edia.org/wiki/Gr
12990 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72  egorian_calendar
129a0 22 3e 0a 47 72 65 67 6f 72 69 61 6e 20 63 61 6c  ">.Gregorian cal
129b0 65 6e 64 61 72 3c 2f 61 3e 20 73 79 73 74 65 6d  endar</a> system
129c0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73  .  It is also as
129d0 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72 79  sumed that every
129e0 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79 20  .day is exactly 
129f0 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e  86400 seconds in
12a00 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   duration.</p>..
12a10 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
12a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12a60 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67  ####.Section {Ag
12a70 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e  gregate Function
12a80 73 7d 20 61 67 67 66 75 6e 63 20 7b 61 67 67 66  s} aggfunc {aggf
12a90 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  unc}.</tcl>..<p>
12aa0 0a 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66  .The aggregate f
12ab0 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62  unctions shown b
12ac0 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62  elow are availab
12ad0 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  le by default.  
12ae0 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67 72 65  Additional.aggre
12af0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  gate functions w
12b00 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61 79 20  ritten in C may 
12b10 62 65 20 61 64 64 65 64 20 75 73 69 6e 67 20 74  be added using t
12b20 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 72 65  he .[sqlite3_cre
12b30 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 3c  ate_function()]<
12b40 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 70  /a>.API.</p>..<p
12b50 3e 0a 49 6e 20 61 6e 79 20 61 67 67 72 65 67 61  >.In any aggrega
12b60 74 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  te function that
12b70 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 20   takes a single 
12b80 61 72 67 75 6d 65 6e 74 2c 20 74 68 61 74 20 61  argument, that a
12b90 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62 65 20 70  rgument.can be p
12ba0 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
12bb0 65 79 77 6f 72 64 20 44 49 53 54 49 4e 43 54 2e  eyword DISTINCT.
12bc0 20 20 49 6e 20 73 75 63 68 20 63 61 73 65 73 2c    In such cases,
12bd0 20 64 75 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65   duplicate.eleme
12be0 6e 74 73 20 61 72 65 20 66 69 6c 74 65 72 65 64  nts are filtered
12bf0 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 70 61   before being pa
12c00 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20 61 67  ssed into the ag
12c10 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
12c20 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  ..For example, t
12c30 68 65 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75  he function "cou
12c40 6e 74 28 64 69 73 74 69 6e 63 74 20 58 29 22 20  nt(distinct X)" 
12c50 77 69 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20  will return the 
12c60 6e 75 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e  number.of distin
12c70 63 74 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c  ct values of col
12c80 75 6d 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66  umn X instead of
12c90 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
12ca0 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61  r of non-null.va
12cb0 6c 75 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58  lues in column X
12cc0 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  ..</p>..<table b
12cd0 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
12ce0 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75  ing=10>.<tcl>.fu
12cf0 6e 63 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b  ncdef {avg(X)} {
12d00 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
12d10 20 61 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f   average value o
12d20 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c  f all non-NULL <
12d30 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61  i>X</i> within a
12d40 0a 20 20 67 72 6f 75 70 2e 20 20 53 74 72 69 6e  .  group.  Strin
12d50 67 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65  g and BLOB value
12d60 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f  s that do not lo
12d70 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20  ok like numbers 
12d80 61 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65  are.  interprete
12d90 64 20 61 73 20 30 2e 0a 20 20 54 68 65 20 72 65  d as 0..  The re
12da0 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
12db0 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
12dc0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61  ng point value a
12dd0 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74  s long as.  at t
12de0 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74  here is at least
12df0 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e   one non-NULL in
12e00 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a  put even if all.
12e10 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74    inputs are int
12e20 65 67 65 72 73 2e 20 20 54 68 65 20 72 65 73 75  egers.  The resu
12e30 6c 74 20 6f 66 20 61 76 67 28 29 20 4e 55 4c 4c  lt of avg() NULL
12e40 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a   if and only if.
12e50 20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e    there are no n
12e60 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e 20  on-NULL inputs. 
12e70 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f   .}..funcdef {co
12e80 75 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29 7d  unt(X) count(*)}
12e90 20 7b 7d 20 7b 0a 20 20 54 68 65 20 66 69 72 73   {} {.  The firs
12ea0 74 20 66 6f 72 6d 20 72 65 74 75 72 6e 20 61 20  t form return a 
12eb0 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d  count of the num
12ec0 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20 74  ber of times.  t
12ed0 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20  hat <i>X</i> is 
12ee0 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72  not NULL in a gr
12ef0 6f 75 70 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  oup.  The second
12f00 20 66 6f 72 6d 20 28 77 69 74 68 20 6e 6f 20 61   form (with no a
12f10 72 67 75 6d 65 6e 74 29 0a 20 20 72 65 74 75 72  rgument).  retur
12f20 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
12f30 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
12f40 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
12f50 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  cdef {group_conc
12f60 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63  at(X) group_conc
12f70 61 74 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  at(X,Y)} {} {.  
12f80 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  The result is a 
12f90 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20  string which is 
12fa0 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f  the concatenatio
12fb0 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e  n of.  all non-N
12fc0 55 4c 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69  ULL values of <i
12fd0 3e 58 3c 2f 69 3e 2e 20 20 49 66 20 70 61 72 61  >X</i>.  If para
12fe0 6d 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69  meter <i>Y</i> i
12ff0 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
13000 20 20 62 65 74 77 65 65 6e 20 69 6e 73 74 61 6e    between instan
13010 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ces of <i>X</i>.
13020 20 20 41 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20    A comma (",") 
13030 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73  is used as the s
13040 65 70 61 72 61 74 6f 72 0a 20 20 69 66 20 3c 69  eparator.  if <i
13050 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65  >Y</i> is omitte
13060 64 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f 66  d.  The order of
13070 20 74 68 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   the concatenate
13080 64 20 65 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20  d elements is.  
13090 61 72 62 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75  arbitrary..}..fu
130a0 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b  ncdef {max(X)} {
130b0 6d 61 78 41 67 67 46 75 6e 63 20 61 67 67 5f 6d  maxAggFunc agg_m
130c0 61 78 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74  ax} {.  Return t
130d0 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
130e0 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
130f0 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 54  n the group..  T
13100 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
13110 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 74 68   is the value th
13120 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
13130 72 6e 65 64 20 6c 61 73 74 20 69 6e 20 61 6e 0a  rned last in an.
13140 20 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 74 68    ORDER BY on th
13150 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e same column.  
13160 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64  NULL is returned
13170 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
13180 74 68 65 72 65 20 61 72 65 0a 20 20 6e 6f 20 6e  there are.  no n
13190 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  on-NULL values i
131a0 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a  n the group..}..
131b0 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d  funcdef {min(X)}
131c0 20 7b 6d 69 6e 41 67 67 46 75 6e 63 20 61 67 67   {minAggFunc agg
131d0 5f 6d 69 6e 7d 20 7b 0a 20 20 52 65 74 75 72 6e  _min} {.  Return
131e0 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e   the minimum non
131f0 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61  -NULL value of a
13200 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
13210 20 67 72 6f 75 70 2e 0a 20 20 54 68 65 20 6d 69   group..  The mi
13220 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  nimum value is t
13230 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  he first non-NUL
13240 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  L value that wou
13250 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61  ld appear.  in a
13260 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68  n ORDER BY of th
13270 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 4e 55 4c 4c  e column..  NULL
13280 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65   is only returne
13290 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  d if and only if
132a0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
132b0 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e  n-NULL values in
132c0 20 74 68 65 20 0a 20 20 67 72 6f 75 70 2e 0a 7d   the .  group..}
132d0 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58  ..funcdef {sum(X
132e0 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 73 75 6d  ) total(X)} {sum
132f0 46 75 6e 63 20 73 75 6d 20 74 6f 74 61 6c 7d 20  Func sum total} 
13300 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e  {.  Return the n
13310 75 6d 65 72 69 63 20 73 75 6d 20 6f 66 20 61 6c  umeric sum of al
13320 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
13330 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
13340 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
13350 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
13360 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29   rows then sum()
13370 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20   returns.  NULL 
13380 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75  but total() retu
13390 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20  rns 0.0..  NULL 
133a0 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  is not normally 
133b0 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74  a helpful result
133c0 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20   for the sum of 
133d0 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68  no rows.  but th
133e0 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72  e SQL standard r
133f0 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d  equires it and m
13400 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20  ost other.  SQL 
13410 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
13420 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29   implement sum()
13430 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c   that way so SQL
13440 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74  ite does it in t
13450 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e  he.  same way in
13460 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d   order to be com
13470 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e  patible.   The n
13480 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61  on-standard tota
13490 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69  l() function.  i
134a0 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  s provided as a 
134b0 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74  convenient way t
134c0 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68  o work around th
134d0 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65  is design proble
134e0 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  m.  in the SQL l
134f0 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20  anguage.</p>..  
13500 3c 70 3e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  <p>The result of
13510 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61   total() is alwa
13520 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
13530 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 54 68 65  int value..  The
13540 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29   result of sum()
13550 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   is an integer v
13560 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d  alue if all non-
13570 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20  NULL inputs are 
13580 69 6e 74 65 67 65 72 73 2e 0a 20 20 49 66 20 61  integers..  If a
13590 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28  ny input to sum(
135a0 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20  ) is neither an 
135b0 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c  integer or a NUL
135c0 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72  L.  then sum() r
135d0 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e  eturns a floatin
135e0 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20  g point value.  
135f0 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61  which might be a
13600 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
13610 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e  to the true sum.
13620 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 53 75 6d 28 29  </p>..  <p>Sum()
13630 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22   will throw an "
13640 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
13650 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61  " exception if a
13660 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20  ll inputs.  are 
13670 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c  integers or NULL
13680 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65  .  and an intege
13690 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  r overflow occur
136a0 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64  s at any point d
136b0 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74  uring the comput
136c0 61 74 69 6f 6e 2e 0a 20 20 54 6f 74 61 6c 28 29  ation..  Total()
136d0 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e   never throws an
136e0 64 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  d integer overfl
136f0 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  ow..}.</tcl>.</t
13700 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
13710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13750 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
13760 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72  ion INSERT inser
13770 74 20 7b 49 4e 53 45 52 54 20 49 4e 53 45 52 54  t {INSERT INSERT
13780 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  s}..BubbleDiagra
13790 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a  m insert-stmt 1.
137a0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49  </tcl>..<p>The I
137b0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
137c0 63 6f 6d 65 73 20 69 6e 20 74 77 6f 20 62 61 73  comes in two bas
137d0 69 63 20 66 6f 72 6d 73 2e 20 20 54 68 65 20 66  ic forms.  The f
137e0 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74 68 20  irst form.(with 
137f0 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79  the "VALUES" key
13800 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 61 20  word) creates a 
13810 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69  single new row i
13820 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  n an existing ta
13830 62 6c 65 2e 0a 49 66 20 6e 6f 20 63 6f 6c 75 6d  ble..If no colum
13840 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66  n-list is specif
13850 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ied then the num
13860 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75  ber of values mu
13870 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65 20 61  st.be the same a
13880 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
13890 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
138a0 61 62 6c 65 2e 20 20 49 66 20 61 20 63 6f 6c 75  able.  If a colu
138b0 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70 65 63 69  mn-list.is speci
138c0 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  fied, then the n
138d0 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
138e0 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e  must match the n
138f0 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69  umber of.specifi
13900 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 43 6f 6c  ed columns.  Col
13910 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
13920 65 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  e that do not ap
13930 70 65 61 72 20 69 6e 20 74 68 65 0a 63 6f 6c 75  pear in the.colu
13940 6d 6e 20 6c 69 73 74 20 61 72 65 20 66 69 6c 6c  mn list are fill
13950 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61  ed with the defa
13960 75 6c 74 20 76 61 6c 75 65 2c 20 6f 72 20 77 69  ult value, or wi
13970 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 0a 64 65  th NULL if no.de
13980 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73  fault value is s
13990 70 65 63 69 66 69 65 64 2e 0a 3c 2f 70 3e 0a 0a  pecified..</p>..
139a0 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  <p>The second fo
139b0 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
139c0 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73   statement takes
139d0 20 69 74 20 64 61 74 61 20 66 72 6f 6d 20 61 0a   it data from a.
139e0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
139f0 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
13a00 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
13a10 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45  result of the.SE
13a20 4c 45 43 54 20 6d 75 73 74 20 65 78 61 63 74 6c  LECT must exactl
13a30 79 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  y match the numb
13a40 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
13a50 20 74 68 65 20 74 61 62 6c 65 20 69 66 0a 6e 6f   the table if.no
13a60 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 69 73 20   column list is 
13a70 73 70 65 63 69 66 69 65 64 2c 20 6f 72 20 69 74  specified, or it
13a80 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20   must match the 
13a90 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
13aa0 73 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 63 6f  s.name in the co
13ab0 6c 75 6d 6e 20 6c 69 73 74 2e 20 20 41 20 6e 65  lumn list.  A ne
13ac0 77 20 65 6e 74 72 79 20 69 73 20 6d 61 64 65 20  w entry is made 
13ad0 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 66 6f 72  in the table.for
13ae0 20 65 76 65 72 79 20 72 6f 77 20 6f 66 20 74 68   every row of th
13af0 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74 2e  e SELECT result.
13b00 20 20 54 68 65 20 53 45 4c 45 43 54 20 6d 61 79    The SELECT may
13b10 20 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20 63 6f   be simple.or co
13b20 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mpound.</p>..<p>
13b30 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e  The optional con
13b40 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c  flict-clause all
13b50 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63  ows the specific
13b60 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65  ation of an alte
13b70 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69  rnative.constrai
13b80 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
13b90 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
13ba0 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
13bb0 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e  his one command.
13bc0 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e  .See the section
13bd0 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46   titled.[ON CONF
13be0 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
13bf0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
13c00 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  ..For compatibil
13c10 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20  ity with MySQL, 
13c20 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77  the parser allow
13c30 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65  s the use of the
13c40 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20  .single keyword 
13c50 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65  <a href="lang_re
13c60 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c  place.html">REPL
13c70 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61  ACE</a> as an .a
13c80 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54  lias for "INSERT
13c90 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 3c 2f   OR REPLACE"..</
13ca0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
13cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13cf0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
13d00 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c   {ON CONFLICT cl
13d10 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b  ause} conflict {
13d20 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  {conflict clause
13d30 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d  } {ON CONFLICT}}
13d40 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
13d50 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a  conflict-clause.
13d60 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f  </tcl>..<p>The O
13d70 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
13d80 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61 72  e is not a separ
13d90 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e  ate SQL command.
13da0 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74    It is a.non-st
13db0 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74 68  andard clause th
13dc0 61 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e  at can appear in
13dd0 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20   many other SQL 
13de0 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20  commands..It is 
13df0 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65  given its own se
13e00 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f  ction in this do
13e10 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69  cument because i
13e20 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66  t is not.part of
13e30 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e   standard SQL an
13e40 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68  d therefore migh
13e50 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61  t not be familia
13e60 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  r.</p>..<p>The s
13e70 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e  yntax for the ON
13e80 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
13e90 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f   is as shown abo
13ea0 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54  ve for.the CREAT
13eb0 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e  E TABLE command.
13ec0 20 20 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54    For the INSERT
13ed0 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d   and.UPDATE comm
13ee0 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72  ands, the keywor
13ef0 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22  ds "ON CONFLICT"
13f00 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
13f10 20 22 4f 52 22 2c 20 74 6f 20 6d 61 6b 65 0a 74   "OR", to make.t
13f20 68 65 20 73 79 6e 74 61 78 20 73 65 65 6d 20 6d  he syntax seem m
13f30 6f 72 65 20 6e 61 74 75 72 61 6c 2e 20 20 46 6f  ore natural.  Fo
13f40 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65  r example, inste
13f50 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e  ad of."INSERT ON
13f60 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45   CONFLICT IGNORE
13f70 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52  " we have "INSER
13f80 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68  T OR IGNORE"..Th
13f90 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67  e keywords chang
13fa0 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e  e but the meanin
13fb0 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20  g of the clause 
13fc0 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68  is the same.eith
13fd0 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  er way.</p>..<p>
13fe0 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
13ff0 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
14000 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20 75 73   an algorithm us
14010 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 0a 63 6f  ed to resolve.co
14020 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
14030 74 73 2e 20 20 54 68 65 72 65 20 61 72 65 20 66  ts.  There are f
14040 69 76 65 20 63 68 6f 69 63 65 73 3a 20 52 4f 4c  ive choices: ROL
14050 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 0a 46 41  LBACK, ABORT,.FA
14060 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20  IL, IGNORE, and 
14070 52 45 50 4c 41 43 45 2e 20 54 68 65 20 64 65 66  REPLACE. The def
14080 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20 69  ault algorithm i
14090 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69  s ABORT.  This.i
140a0 73 20 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e  s what they mean
140b0 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e  :</p>..<dl>.<dt>
140c0 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c  <b>ROLLBACK</b><
140d0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e  /dt>.<dd><p>When
140e0 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
140f0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
14100 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 52 4f 4c  an immediate ROL
14110 4c 42 41 43 4b 0a 6f 63 63 75 72 73 2c 20 74 68  LBACK.occurs, th
14120 75 73 20 65 6e 64 69 6e 67 20 74 68 65 20 63 75  us ending the cu
14130 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
14140 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61  n, and the comma
14150 6e 64 20 61 62 6f 72 74 73 0a 77 69 74 68 20 61  nd aborts.with a
14160 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20   return code of 
14170 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
14180 54 2e 20 20 49 66 20 6e 6f 20 74 72 61 6e 73 61  T.  If no transa
14190 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20  ction is.active 
141a0 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  (other than the 
141b0 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74  implied transact
141c0 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65 61  ion that is crea
141d0 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d  ted on every.com
141e0 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 69 73 20  mand) then this 
141f0 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20  algorithm works 
14200 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
14210 54 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  T.</p></dd>..<dt
14220 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64  ><b>ABORT</b></d
14230 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61  t>.<dd><p>When a
14240 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
14250 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
14260 65 20 63 6f 6d 6d 61 6e 64 20 62 61 63 6b 73 20  e command backs 
14270 6f 75 74 0a 61 6e 79 20 70 72 69 6f 72 20 63 68  out.any prior ch
14280 61 6e 67 65 73 20 69 74 20 6d 69 67 68 74 20 68  anges it might h
14290 61 76 65 20 6d 61 64 65 20 61 6e 64 20 61 62 6f  ave made and abo
142a0 72 74 73 20 77 69 74 68 20 61 20 72 65 74 75 72  rts with a retur
142b0 6e 20 63 6f 64 65 0a 6f 66 20 53 51 4c 49 54 45  n code.of SQLITE
142c0 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42 75  _CONSTRAINT.  Bu
142d0 74 20 6e 6f 20 52 4f 4c 4c 42 41 43 4b 20 69 73  t no ROLLBACK is
142e0 20 65 78 65 63 75 74 65 64 20 73 6f 20 63 68 61   executed so cha
142f0 6e 67 65 73 0a 66 72 6f 6d 20 70 72 69 6f 72 20  nges.from prior 
14300 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 69 6e 20  commands within 
14310 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
14320 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72 76  tion.are preserv
14330 65 64 2e 20 20 54 68 69 73 20 69 73 20 74 68 65  ed.  This is the
14340 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
14350 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
14360 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74  ><b>FAIL</b></dt
14370 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20  >.<dd><p>When a 
14380 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
14390 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
143a0 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 20   command aborts 
143b0 77 69 74 68 20 61 0a 72 65 74 75 72 6e 20 63 6f  with a.return co
143c0 64 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  de SQLITE_CONSTR
143d0 41 49 4e 54 2e 20 20 42 75 74 20 61 6e 79 20 63  AINT.  But any c
143e0 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
143f0 74 61 62 61 73 65 20 74 68 61 74 0a 74 68 65 20  tabase that.the 
14400 63 6f 6d 6d 61 6e 64 20 6d 61 64 65 20 70 72 69  command made pri
14410 6f 72 20 74 6f 20 65 6e 63 6f 75 6e 74 65 72 69  or to encounteri
14420 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
14430 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 61 72 65 20  t violation.are 
14440 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 61 72  preserved and ar
14450 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
14460 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
14470 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61  if an UPDATE.sta
14480 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72  tement encounter
14490 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ed a constraint 
144a0 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65  violation on the
144b0 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a   100th row that.
144c0 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  it attempts to u
144d0 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20  pdate, then the 
144e0 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61  first 99 row cha
144f0 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76  nges are preserv
14500 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74  ed.but changes t
14510 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62  o rows 100 and b
14520 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75  eyond never occu
14530 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
14540 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f  ><b>IGNORE</b></
14550 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20  dt>.<dd><p>When 
14560 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
14570 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
14580 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20  he one row that 
14590 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e  contains.the con
145a0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
145b0 6e 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  n is not inserte
145c0 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 20 20 42  d or changed.  B
145d0 75 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 63  ut the command.c
145e0 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75 74 69  ontinues executi
145f0 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4f 74  ng normally.  Ot
14600 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20  her rows before 
14610 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f  and after the ro
14620 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64  w that.contained
14630 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
14640 76 69 6f 6c 61 74 69 6f 6e 20 63 6f 6e 74 69 6e  violation contin
14650 75 65 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  ue to be inserte
14660 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72  d or updated.nor
14670 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72 6f 72  mally.  No error
14680 20 69 73 20 72 65 74 75 72 6e 65 64 2e 3c 2f 70   is returned.</p
14690 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52  ></dd>..<dt><b>R
146a0 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a  EPLACE</b></dt>.
146b0 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 55 4e  <dd><p>When a UN
146c0 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
146d0 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
146e0 2c 20 74 68 65 20 70 72 65 2d 65 78 69 73 74 69  , the pre-existi
146f0 6e 67 20 72 6f 77 73 0a 74 68 61 74 20 61 72 65  ng rows.that are
14700 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e   causing the con
14710 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
14720 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 70 72  n are removed pr
14730 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67  ior to inserting
14740 0a 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65  .or updating the
14750 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 20 54   current row.  T
14760 68 75 73 20 74 68 65 20 69 6e 73 65 72 74 20 6f  hus the insert o
14770 72 20 75 70 64 61 74 65 20 61 6c 77 61 79 73 20  r update always 
14780 6f 63 63 75 72 73 2e 0a 54 68 65 20 63 6f 6d 6d  occurs..The comm
14790 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 65 78  and continues ex
147a0 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79  ecuting normally
147b0 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73 20 72  .  No error is r
147c0 65 74 75 72 6e 65 64 2e 0a 49 66 20 61 20 4e 4f  eturned..If a NO
147d0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
147e0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
147f0 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  rs, the NULL val
14800 75 65 20 69 73 20 72 65 70 6c 61 63 65 64 0a 62  ue is replaced.b
14810 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  y the default va
14820 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
14830 75 6d 6e 2e 20 20 49 66 20 74 68 65 20 63 6f 6c  umn.  If the col
14840 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
14850 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
14860 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
14870 68 6d 20 69 73 20 75 73 65 64 2e 20 20 49 66 20  hm is used.  If 
14880 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
14890 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 6f 63 63  nt violation.occ
148a0 75 72 73 20 74 68 65 6e 20 74 68 65 20 49 47 4e  urs then the IGN
148b0 4f 52 45 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORE algorithm is
148c0 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57   used.</p>..<p>W
148d0 68 65 6e 20 74 68 69 73 20 63 6f 6e 66 6c 69 63  hen this conflic
148e0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
148f0 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f  ategy deletes ro
14900 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73  ws in order to.s
14910 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61  atisfy a constra
14920 69 6e 74 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  int, it does not
14930 20 69 6e 76 6f 6b 65 20 64 65 6c 65 74 65 20 74   invoke delete t
14940 72 69 67 67 65 72 73 20 6f 6e 20 74 68 6f 73 65  riggers on those
14950 0a 72 6f 77 73 2e 20 20 54 68 69 73 20 62 65 68  .rows.  This beh
14960 61 76 69 6f 72 20 6d 69 67 68 74 20 63 68 61 6e  avior might chan
14970 67 65 20 69 6e 20 61 20 66 75 74 75 72 65 20 72  ge in a future r
14980 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
14990 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c 67 6f 72 69  >..<p>The algori
149a0 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
149b0 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f   the OR clause o
149c0 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20 55 50  f a INSERT or UP
149d0 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
149e0 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
149f0 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
14a00 54 45 20 54 41 42 4c 45 2e 0a 49 66 20 6e 6f 20  TE TABLE..If no 
14a10 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
14a20 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
14a30 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
14a40 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
14a50 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
14a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14aa0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
14ab0 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20  REINDEX reindex 
14ac0 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c 65 44  REINDEX..BubbleD
14ad0 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73  iagram reindex-s
14ae0 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
14af0 3e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d  >The REINDEX com
14b00 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
14b10 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65  delete and recre
14b20 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d  ate indices from
14b30 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69   scratch..This i
14b40 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68  s useful when th
14b50 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
14b60 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
14b70 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64  ence has changed
14b80 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 74 68  ..</p>..<p>In th
14b90 65 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 61 6c  e first form, al
14ba0 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c  l indices in all
14bb0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
14bc0 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
14bd0 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  .named collation
14be0 20 73 65 71 75 65 6e 63 65 20 61 72 65 20 72 65   sequence are re
14bf0 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 65 20  created. In the 
14c00 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69 66 20  second form, if 
14c10 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61 73  .<i>&#91;databas
14c20 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62 6c  e-name.&#93;tabl
14c30 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e  e/index-name</i>
14c40 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 74 61   identifies a ta
14c50 62 6c 65 2c 0a 74 68 65 6e 20 61 6c 6c 20 69 6e  ble,.then all in
14c60 64 69 63 65 73 0a 61 73 73 6f 63 69 61 74 65 64  dices.associated
14c70 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
14c80 61 72 65 20 72 65 62 75 69 6c 74 2e 20 49 66 20  are rebuilt. If 
14c90 61 6e 20 69 6e 64 65 78 20 69 73 20 69 64 65 6e  an index is iden
14ca0 74 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  tified, then onl
14cb0 79 0a 74 68 69 73 20 73 70 65 63 69 66 69 63 20  y.this specific 
14cc0 69 6e 64 65 78 20 69 73 20 64 65 6c 65 74 65 64  index is deleted
14cd0 20 61 6e 64 20 72 65 63 72 65 61 74 65 64 2e 0a   and recreated..
14ce0 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6e 6f 20 3c  </p>..<p>If no <
14cf0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
14d00 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69 65 64  /i> is specified
14d10 20 61 6e 64 20 74 68 65 72 65 20 65 78 69 73 74   and there exist
14d20 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f  s both a table o
14d30 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f  r.index and a co
14d40 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
14d50 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
14d60 64 20 6e 61 6d 65 2c 20 74 68 65 6e 20 69 6e 64  d name, then ind
14d70 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 0a  ices associated.
14d80 77 69 74 68 20 74 68 65 20 63 6f 6c 6c 61 74 69  with the collati
14d90 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 6e 6c 79  on sequence only
14da0 20 61 72 65 20 72 65 63 6f 6e 73 74 72 75 63 74   are reconstruct
14db0 65 64 2e 20 54 68 69 73 20 61 6d 62 69 67 75 69  ed. This ambigui
14dc0 74 79 20 6d 61 79 20 62 65 0a 64 69 73 70 65 6c  ty may be.dispel
14dd0 6c 65 64 20 62 79 20 61 6c 77 61 79 73 20 73 70  led by always sp
14de0 65 63 69 66 79 69 6e 67 20 61 20 3c 69 3e 64 61  ecifying a <i>da
14df0 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
14e00 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20  when reindexing 
14e10 61 0a 73 70 65 63 69 66 69 63 20 74 61 62 6c 65  a.specific table
14e20 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c   or index...<tcl
14e30 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
14e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14e80 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43  #.Section REPLAC
14e90 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43  E replace REPLAC
14ea0 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  E..</tcl>..<p>Th
14eb0 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e  e REPLACE comman
14ec0 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  d is an alias fo
14ed0 72 20 74 68 65 20 22 49 4e 53 45 52 54 20 4f 52  r the "INSERT OR
14ee0 20 52 45 50 4c 41 43 45 22 20 76 61 72 69 61 6e   REPLACE" varian
14ef0 74 0a 6f 66 20 74 68 65 20 3c 61 20 68 72 65 66  t.of the <a href
14f00 3d 22 6c 61 6e 67 5f 69 6e 73 65 72 74 2e 68 74  ="lang_insert.ht
14f10 6d 6c 22 3e 49 4e 53 45 52 54 3c 2f 61 3e 20 63  ml">INSERT</a> c
14f20 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
14f30 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
14f40 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
14f50 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2e 20 20  ty with MySQL.  
14f60 53 65 65 20 74 68 65 20 0a 3c 61 20 68 72 65 66  See the .<a href
14f70 3d 22 6c 61 6e 67 5f 69 6e 73 65 72 74 2e 68 74  ="lang_insert.ht
14f80 6d 6c 22 3e 49 4e 53 45 52 54 3c 2f 61 3e 20 63  ml">INSERT</a> c
14f90 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
14fa0 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
14fb0 6e 61 6c 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal.information.
14fc0 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
14fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15010 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
15020 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
15030 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
15040 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  y}..BubbleDiagra
15050 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a  m select-stmt 1.
15060 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65  BubbleDiagram se
15070 6c 65 63 74 2d 63 6f 72 65 0a 42 75 62 62 6c 65  lect-core.Bubble
15080 44 69 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63  Diagram result-c
15090 6f 6c 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67  olumn.BubbleDiag
150a0 72 61 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a  ram join-source.
150b0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
150c0 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62  ngle-source.Bubb
150d0 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f  leDiagram join-o
150e0 70 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  p.BubbleDiagram 
150f0 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a  join-constraint.
15100 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72  BubbleDiagram or
15110 64 65 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62  dering-term.Bubb
15120 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75  leDiagram compou
15130 6e 64 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63  nd-operator.</tc
15140 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  l>..<p>The SELEC
15150 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
15160 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
15170 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
15180 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
15190 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
151a0 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
151b0 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
151c0 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
151d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54  r of columns.  T
151e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
151f0 75 6d 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75  umns in the.resu
15200 6c 74 20 69 73 20 73 70 65 63 69 66 69 65 64 20  lt is specified 
15210 62 79 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  by the expressio
15220 6e 20 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65  n list in betwee
15230 6e 20 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64  n the.SELECT and
15240 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20   FROM keywords. 
15250 20 41 6e 79 20 61 72 62 69 74 72 61 72 79 20 65   Any arbitrary e
15260 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
15270 20 75 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c   used.as a resul
15280 74 2e 20 20 49 66 20 61 20 72 65 73 75 6c 74 20  t.  If a result 
15290 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a  expression is }.
152a0 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
152b0 6f 72 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63  or *] then all c
152c0 6f 6c 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61  olumns of all ta
152d0 62 6c 65 73 20 61 72 65 20 73 75 62 73 74 69 74  bles are substit
152e0 75 74 65 64 5c 6e 22 0a 68 64 5f 70 75 74 73 20  uted\n".hd_puts 
152f0 22 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78  "for that one ex
15300 70 72 65 73 73 69 6f 6e 2e 20 20 49 66 20 74 68  pression.  If th
15310 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
15320 74 68 65 20 6e 61 6d 65 20 6f 66 5c 6e 22 0a 68  the name of\n".h
15330 64 5f 70 75 74 73 20 22 61 20 74 61 62 6c 65 20  d_puts "a table 
15340 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70 65  followed by [Ope
15350 72 61 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20 74  rator .*] then t
15360 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 6c  he result is all
15370 20 63 6f 6c 75 6d 6e 73 5c 6e 22 0a 68 64 5f 70   columns\n".hd_p
15380 75 74 73 20 7b 69 6e 20 74 68 61 74 20 6f 6e 65  uts {in that one
15390 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e   table.</p>..<p>
153a0 54 68 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79  The DISTINCT key
153b0 77 6f 72 64 20 63 61 75 73 65 73 20 61 20 73 75  word causes a su
153c0 62 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72  bset of result r
153d0 6f 77 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e  ows to be return
153e0 65 64 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61  ed, .in which ea
153f0 63 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  ch result row is
15400 20 64 69 66 66 65 72 65 6e 74 2e 20 20 4e 55 4c   different.  NUL
15410 4c 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74  L values are not
15420 20 74 72 65 61 74 65 64 20 61 73 20 0a 64 69 73   treated as .dis
15430 74 69 6e 63 74 20 66 72 6f 6d 20 65 61 63 68 20  tinct from each 
15440 6f 74 68 65 72 2e 20 20 54 68 65 20 64 65 66 61  other.  The defa
15450 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
15460 74 68 61 74 20 61 6c 6c 20 72 65 73 75 6c 74 20  that all result 
15470 72 6f 77 73 20 0a 62 65 20 72 65 74 75 72 6e 65  rows .be returne
15480 64 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20  d, which can be 
15490 6d 61 64 65 20 65 78 70 6c 69 63 69 74 20 77 69  made explicit wi
154a0 74 68 20 74 68 65 20 6b 65 79 77 6f 72 64 20 41  th the keyword A
154b0 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  LL.</p>..<p>The 
154c0 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
154d0 64 20 61 67 61 69 6e 73 74 20 6f 6e 65 20 6f 72  d against one or
154e0 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 73 70 65   more tables spe
154f0 63 69 66 69 65 64 20 61 66 74 65 72 0a 74 68 65  cified after.the
15500 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 20   FROM keyword.  
15510 49 66 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c  If multiple tabl
15520 65 73 20 6e 61 6d 65 73 20 61 72 65 20 73 65 70  es names are sep
15530 61 72 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73  arated by commas
15540 2c 0a 74 68 65 6e 20 74 68 65 20 71 75 65 72 79  ,.then the query
15550 20 69 73 20 61 67 61 69 6e 73 74 20 74 68 65 20   is against the 
15560 63 72 6f 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68  cross join of th
15570 65 20 76 61 72 69 6f 75 73 20 74 61 62 6c 65 73  e various tables
15580 2e 0a 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39  ..The full SQL-9
15590 32 20 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61  2 join syntax ca
155a0 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
155b0 6f 20 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e  o specify joins.
155c0 0a 41 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20  .A sub-query.in 
155d0 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
155e0 62 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66  be substituted f
155f0 6f 72 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d  or any table nam
15600 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
15610 61 75 73 65 2e 0a 54 68 65 20 65 6e 74 69 72 65  ause..The entire
15620 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61 79   FROM clause may
15630 20 62 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e 20   be omitted, in 
15640 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 72  which case the r
15650 65 73 75 6c 74 20 69 73 20 61 0a 73 69 6e 67 6c  esult is a.singl
15660 65 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67  e row consisting
15670 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f   of the values o
15680 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15690 20 6c 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   list..</p>..<p>
156a0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
156b0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
156c0 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
156d0 20 6f 66 20 72 6f 77 73 20 6f 76 65 72 0a 77 68   of rows over.wh
156e0 69 63 68 20 74 68 65 20 71 75 65 72 79 20 6f 70  ich the query op
156f0 65 72 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  erates.</p>..<p>
15700 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
15710 75 73 65 20 63 61 75 73 65 73 20 6f 6e 65 20 6f  use causes one o
15720 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74  r more rows of t
15730 68 65 20 72 65 73 75 6c 74 20 74 6f 0a 62 65 20  he result to.be 
15740 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20  combined into a 
15750 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75  single row of ou
15760 74 70 75 74 2e 20 20 54 68 69 73 20 69 73 20 65  tput.  This is e
15770 73 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c  specially useful
15780 0a 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74  .when the result
15790 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
157a0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  ate functions.  
157b0 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  The expressions 
157c0 69 6e 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20  in.the GROUP BY 
157d0 63 6c 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f  clause do <em>no
157e0 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62  t</em> have to b
157f0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  e expressions th
15800 61 74 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65  at.appear in the
15810 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20 48 41   result.  The HA
15820 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73  VING clause is s
15830 69 6d 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20  imilar to WHERE 
15840 65 78 63 65 70 74 0a 74 68 61 74 20 48 41 56 49  except.that HAVI
15850 4e 47 20 61 70 70 6c 69 65 73 20 61 66 74 65 72  NG applies after
15860 20 67 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63   grouping has oc
15870 63 75 72 72 65 64 2e 20 20 54 68 65 20 48 41 56  curred.  The HAV
15880 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d  ING expression.m
15890 61 79 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75  ay refer to valu
158a0 65 73 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61  es, even aggrega
158b0 74 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68  te functions, th
158c0 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68  at are not in th
158d0 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c  e result.</p>..<
158e0 70 3e 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  p>The ORDER BY c
158f0 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65  lause causes the
15900 20 6f 75 74 70 75 74 20 72 6f 77 73 20 74 6f 20   output rows to 
15910 62 65 20 73 6f 72 74 65 64 2e 20 20 0a 54 68 65  be sorted.  .The
15920 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44   argument to ORD
15930 45 52 20 42 59 20 69 73 20 61 20 6c 69 73 74 20  ER BY is a list 
15940 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  of expressions t
15950 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
15960 74 68 65 0a 6b 65 79 20 66 6f 72 20 74 68 65 20  the.key for the 
15970 73 6f 72 74 2e 20 20 54 68 65 20 65 78 70 72 65  sort.  The expre
15980 73 73 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61  ssions do not ha
15990 76 65 20 74 6f 20 62 65 20 70 61 72 74 20 6f 66  ve to be part of
159a0 20 74 68 65 0a 72 65 73 75 6c 74 20 66 6f 72 20   the.result for 
159b0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c  a simple SELECT,
159c0 20 62 75 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75   but in a compou
159d0 6e 64 20 53 45 4c 45 43 54 20 65 61 63 68 20 73  nd SELECT each s
159e0 6f 72 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d  ort.expression m
159f0 75 73 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63  ust exactly matc
15a00 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73  h one of the res
15a10 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 61  ult columns.  Ea
15a20 63 68 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69  ch.sort expressi
15a30 6f 6e 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e  on may be option
15a40 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ally followed by
15a50 20 61 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f   a COLLATE keywo
15a60 72 64 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20  rd and.the name 
15a70 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  of a collating f
15a80 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72  unction used for
15a90 20 6f 72 64 65 72 69 6e 67 20 74 65 78 74 20 61   ordering text a
15aa0 6e 64 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41  nd/or.keywords A
15ab0 53 43 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70  SC or DESC to sp
15ac0 65 63 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f  ecify the sort o
15ad0 72 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  rder.</p>..<p>Ea
15ae0 63 68 20 74 65 72 6d 20 6f 66 20 61 6e 20 4f 52  ch term of an OR
15af0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
15b00 6e 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61  n is processed a
15b10 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
15b20 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74  <ol>.<li><p>If t
15b30 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
15b40 65 73 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73  ession is a cons
15b50 74 61 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74  tant integer K t
15b60 68 65 6e 20 74 68 65 0a 6f 75 74 70 75 74 20 69  hen the.output i
15b70 73 20 6f 72 64 65 72 65 64 20 62 79 20 74 68 65  s ordered by the
15b80 20 4b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   K-th column of 
15b90 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c  the result set.<
15ba0 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e  /p></li>.<li><p>
15bb0 49 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  If the ORDER BY 
15bc0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
15bd0 20 69 64 65 6e 74 69 66 69 65 72 20 61 6e 64 20   identifier and 
15be0 6f 6e 65 20 6f 66 20 74 68 65 0a 6f 75 74 70 75  one of the.outpu
15bf0 74 20 63 6f 6c 75 6d 6e 73 20 68 61 73 20 61 6e  t columns has an
15c00 20 61 6c 69 61 73 20 62 79 20 74 68 65 20 73 61   alias by the sa
15c10 6d 65 20 6e 61 6d 65 2c 20 74 68 65 6e 20 74 68  me name, then th
15c20 65 20 6f 75 74 70 75 74 20 69 73 0a 6f 72 64 65  e output is.orde
15c30 72 65 64 20 62 79 20 74 68 65 20 69 64 65 6e 74  red by the ident
15c40 69 66 69 65 64 20 63 6f 6c 75 6d 6e 2e 3c 2f 70  ified column.</p
15c50 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 4f 74  ></li>.<li><p>Ot
15c60 68 65 72 77 69 73 65 2c 20 74 68 65 20 4f 52 44  herwise, the ORD
15c70 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
15c80 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e   is evaluated an
15c90 64 20 74 68 65 20 6f 75 74 70 75 74 20 0a 69 73  d the output .is
15ca0 20 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20   ordered by the 
15cb0 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 65 78  value of that ex
15cc0 70 72 65 73 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c  pression.</p></l
15cd0 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20  i>.</ol>..<p>In 
15ce0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
15cf0 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  T statement, the
15d00 20 74 68 69 72 64 20 4f 52 44 45 52 20 42 59 20   third ORDER BY 
15d10 6d 61 74 63 68 69 6e 67 20 72 75 6c 65 0a 72 65  matching rule.re
15d20 71 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20  quires that the 
15d30 65 78 70 72 65 73 73 69 6f 6e 20 62 65 20 69 64  expression be id
15d40 65 6e 74 69 63 61 6c 20 74 6f 20 6f 6e 65 20 6f  entical to one o
15d50 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
15d60 0a 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e  .the result set.
15d70 20 20 54 68 65 20 74 68 72 65 65 20 72 75 6c 65    The three rule
15d80 73 20 61 72 65 20 66 69 72 73 74 20 61 70 70 6c  s are first appl
15d90 69 65 64 20 74 6f 20 74 68 65 20 6c 65 66 74 2d  ied to the left-
15da0 6d 6f 73 74 0a 53 45 4c 45 43 54 20 69 6e 20 74  most.SELECT in t
15db0 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20 20 49 66  he compound.  If
15dc0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
15dd0 64 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74  d, the search st
15de0 6f 70 73 2e 20 20 4f 74 68 65 72 77 69 73 65 2c  ops.  Otherwise,
15df0 0a 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54  .the next SELECT
15e00 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73   to the right is
15e10 20 74 72 69 65 64 2e 20 20 54 68 69 73 20 63 6f   tried.  This co
15e20 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 61 20  ntinues until a 
15e30 6d 61 74 63 68 0a 69 73 20 66 6f 75 6e 64 2e 20  match.is found. 
15e40 20 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   Each term of th
15e50 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
15e60 65 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 73  e is processed s
15e70 65 70 61 72 61 74 65 6c 79 20 0a 61 6e 64 20 6d  eparately .and m
15e80 61 79 20 63 6f 6d 65 20 66 72 6f 6d 20 64 69 66  ay come from dif
15e90 66 65 72 65 6e 74 20 53 45 4c 45 43 54 20 73 74  ferent SELECT st
15ea0 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
15eb0 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c  compound.</p>..<
15ec0 70 3e 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  p>The LIMIT clau
15ed0 73 65 20 70 6c 61 63 65 73 20 61 6e 20 75 70 70  se places an upp
15ee0 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
15ef0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72  number of rows.r
15f00 65 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20 72  eturned in the r
15f10 65 73 75 6c 74 2e 20 20 41 20 6e 65 67 61 74 69  esult.  A negati
15f20 76 65 20 4c 49 4d 49 54 20 69 6e 64 69 63 61 74  ve LIMIT indicat
15f30 65 73 20 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e  es no upper boun
15f40 64 2e 0a 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  d..The optional 
15f50 4f 46 46 53 45 54 20 66 6f 6c 6c 6f 77 69 6e 67  OFFSET following
15f60 20 4c 49 4d 49 54 20 73 70 65 63 69 66 69 65 73   LIMIT specifies
15f70 20 68 6f 77 20 6d 61 6e 79 0a 72 6f 77 73 20 74   how many.rows t
15f80 6f 20 73 6b 69 70 20 61 74 20 74 68 65 20 62 65  o skip at the be
15f90 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
15fa0 65 73 75 6c 74 20 73 65 74 2e 0a 49 6e 20 61 20  esult set..In a 
15fb0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 2c 20  compound query, 
15fc0 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
15fd0 20 6d 61 79 20 6f 6e 6c 79 20 61 70 70 65 61 72   may only appear
15fe0 20 6f 6e 20 74 68 65 0a 66 69 6e 61 6c 20 53 45   on the.final SE
15ff0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
16000 54 68 65 20 6c 69 6d 69 74 20 69 73 20 61 70 70  The limit is app
16010 6c 69 65 64 20 74 6f 20 74 68 65 20 65 6e 74 69  lied to the enti
16020 72 65 20 71 75 65 72 79 20 6e 6f 74 0a 74 6f 20  re query not.to 
16030 74 68 65 20 69 6e 64 69 76 69 64 75 61 6c 20 53  the individual S
16040 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
16050 74 6f 20 77 68 69 63 68 20 69 74 20 69 73 20 61  to which it is a
16060 74 74 61 63 68 65 64 2e 0a 4e 6f 74 65 20 74 68  ttached..Note th
16070 61 74 20 69 66 20 74 68 65 20 4f 46 46 53 45 54  at if the OFFSET
16080 20 6b 65 79 77 6f 72 64 20 69 73 20 75 73 65 64   keyword is used
16090 20 69 6e 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   in the LIMIT cl
160a0 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 6c  ause, then the.l
160b0 69 6d 69 74 20 69 73 20 74 68 65 20 66 69 72 73  imit is the firs
160c0 74 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68 65  t number and the
160d0 20 6f 66 66 73 65 74 20 69 73 20 74 68 65 20 73   offset is the s
160e0 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20 49  econd number.  I
160f0 66 20 61 0a 63 6f 6d 6d 61 20 69 73 20 75 73 65  f a.comma is use
16100 64 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  d instead of the
16110 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64 2c   OFFSET keyword,
16120 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74   then the offset
16130 20 69 73 20 74 68 65 0a 66 69 72 73 74 20 6e 75   is the.first nu
16140 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6c 69 6d  mber and the lim
16150 69 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64  it is the second
16160 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 73   number.  This s
16170 65 65 6d 69 6e 67 0a 63 6f 6e 74 72 61 64 69 74  eeming.contradit
16180 69 6f 6e 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e  ion is intention
16190 61 6c 20 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65  al - it maximize
161a0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
161b0 77 69 74 68 20 6c 65 67 61 63 79 0a 53 51 4c 20  with legacy.SQL 
161c0 64 61 74 61 62 61 73 65 20 73 79 73 74 65 6d 73  database systems
161d0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6d  ..</p>..<p>A com
161e0 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 69 73 20  pound SELECT is 
161f0 66 6f 72 6d 65 64 20 66 72 6f 6d 20 74 77 6f 20  formed from two 
16200 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53  or more simple S
16210 45 4c 45 43 54 73 20 63 6f 6e 6e 65 63 74 65 64  ELECTs connected
16220 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f  .by one of the o
16230 70 65 72 61 74 6f 72 73 20 55 4e 49 4f 4e 2c 20  perators UNION, 
16240 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52  UNION ALL, INTER
16250 53 45 43 54 2c 20 6f 72 20 45 58 43 45 50 54 2e  SECT, or EXCEPT.
16260 20 20 49 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64 20    In.a compound 
16270 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20  SELECT, all the 
16280 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45  constituent SELE
16290 43 54 73 20 6d 75 73 74 20 73 70 65 63 69 66 79  CTs must specify
162a0 20 74 68 65 0a 73 61 6d 65 20 6e 75 6d 62 65 72   the.same number
162b0 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d   of result colum
162c0 6e 73 2e 20 20 54 68 65 72 65 20 6d 61 79 20 62  ns.  There may b
162d0 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  e only a single 
162e0 4f 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65 20  ORDER BY.clause 
162f0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16300 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  e compound SELEC
16310 54 2e 20 20 54 68 65 20 55 4e 49 4f 4e 20 61 6e  T.  The UNION an
16320 64 20 55 4e 49 4f 4e 20 41 4c 4c 0a 6f 70 65 72  d UNION ALL.oper
16330 61 74 6f 72 73 20 63 6f 6d 62 69 6e 65 20 74 68  ators combine th
16340 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
16350 20 53 45 4c 45 43 54 73 20 74 6f 20 74 68 65 20   SELECTs to the 
16360 72 69 67 68 74 20 61 6e 64 20 6c 65 66 74 20 69  right and left i
16370 6e 74 6f 0a 61 20 73 69 6e 67 6c 65 20 62 69 67  nto.a single big
16380 20 74 61 62 6c 65 2e 20 20 54 68 65 20 64 69 66   table.  The dif
16390 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20  ference is that 
163a0 69 6e 20 55 4e 49 4f 4e 20 61 6c 6c 20 72 65 73  in UNION all res
163b0 75 6c 74 20 72 6f 77 73 0a 61 72 65 20 64 69 73  ult rows.are dis
163c0 74 69 6e 63 74 20 77 68 65 72 65 20 69 6e 20 55  tinct where in U
163d0 4e 49 4f 4e 20 41 4c 4c 20 74 68 65 72 65 20 6d  NION ALL there m
163e0 61 79 20 62 65 20 64 75 70 6c 69 63 61 74 65 73  ay be duplicates
163f0 2e 0a 54 68 65 20 49 4e 54 45 52 53 45 43 54 20  ..The INTERSECT 
16400 6f 70 65 72 61 74 6f 72 20 74 61 6b 65 73 20 74  operator takes t
16410 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e 20  he intersection 
16420 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
16430 66 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20 72  f the.left and r
16440 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20 45  ight SELECTs.  E
16450 58 43 45 50 54 20 74 61 6b 65 73 20 74 68 65 20  XCEPT takes the 
16460 72 65 73 75 6c 74 20 6f 66 20 6c 65 66 74 20 53  result of left S
16470 45 4c 45 43 54 20 61 66 74 65 72 0a 72 65 6d 6f  ELECT after.remo
16480 76 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73  ving the results
16490 20 6f 66 20 74 68 65 20 72 69 67 68 74 20 53 45   of the right SE
164a0 4c 45 43 54 2e 20 20 57 68 65 6e 20 74 68 72 65  LECT.  When thre
164b0 65 20 6f 72 20 6d 6f 72 65 20 53 45 4c 45 43 54  e or more SELECT
164c0 73 0a 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20  s.are connected 
164d0 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 2c  into a compound,
164e0 20 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d   they group from
164f0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 3c   left to right.<
16500 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  /p>...<tcl>.####
16510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16550 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
16560 6f 6e 20 55 50 44 41 54 45 20 75 70 64 61 74 65  on UPDATE update
16570 20 7b 55 50 44 41 54 45 20 55 50 44 41 54 45 73   {UPDATE UPDATEs
16580 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
16590 20 75 70 64 61 74 65 2d 73 74 6d 74 20 31 0a 42   update-stmt 1.B
165a0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61  ubbleDiagram qua
165b0 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
165c0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e.</tcl>..<p>The
165d0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
165e0 74 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 61  t is used to cha
165f0 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
16600 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c   columns in .sel
16610 65 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61 20  ected rows of a 
16620 74 61 62 6c 65 2e 20 20 45 61 63 68 20 61 73 73  table.  Each ass
16630 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50  ignment in an UP
16640 44 41 54 45 20 73 70 65 63 69 66 69 65 73 0a 61  DATE specifies.a
16650 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20   column name to 
16660 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
16670 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20  equals sign and 
16680 61 6e 20 61 72 62 69 74 72 61 72 79 20 65 78 70  an arbitrary exp
16690 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72  ression.to the r
166a0 69 67 68 74 2e 20 20 54 68 65 20 65 78 70 72 65  ight.  The expre
166b0 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20 74  ssions may use t
166c0 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74 68  he values of oth
166d0 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c 20  er columns..All 
166e0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
166f0 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65  evaluated before
16700 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73   any assignments
16710 20 61 72 65 20 6d 61 64 65 2e 0a 41 20 57 48 45   are made..A WHE
16720 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65  RE clause can be
16730 20 75 73 65 64 20 74 6f 20 72 65 73 74 72 69 63   used to restric
16740 74 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  t which rows are
16750 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   updated.</p>..<
16760 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63  p>The optional c
16770 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61  onflict-clause a
16780 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66  llows the specif
16790 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c  ication of an al
167a0 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72  ternative.constr
167b0 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
167c0 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
167d0 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67  hm to use during
167e0 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e   this one comman
167f0 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69  d..See the secti
16800 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f  on titled.[ON CO
16810 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69  NFLICT] for addi
16820 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
16830 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 53  on.</p>..<p>If S
16840 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20 77  QLite is built w
16850 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ith the [SQLITE_
16860 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
16870 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70  LETE_LIMIT].comp
16880 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
16890 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
168a0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
168b0 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e  atement is exten
168c0 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61  ded.with optiona
168d0 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  l ORDER BY and L
168e0 49 4d 49 54 20 63 6c 61 75 73 65 73 20 61 73 20  IMIT clauses as 
168f0 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
16900 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
16910 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d   update-stmt-lim
16920 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  ited</tcl>..<p>T
16930 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49  he optional LIMI
16940 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  T clause can be 
16950 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
16960 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73  e number of.rows
16970 20 6d 6f 64 69 66 65 64 2c 20 61 6e 64 20 74 68   modifed, and th
16980 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68 65 20  ereby limit the 
16990 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72 61 6e  size of the tran
169a0 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20 4f 52 44  saction..The ORD
169b0 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
169c0 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74  used only to det
169d0 65 72 6d 69 6e 65 20 77 68 69 63 68 20 72 6f 77  ermine which row
169e0 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e 20 74 68  s fall.within th
169f0 65 20 4c 49 4d 49 54 2e 20 20 54 68 65 20 6f 72  e LIMIT.  The or
16a00 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
16a10 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69  s are modified i
16a20 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
16a30 69 73 20 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65  is not determine
16a40 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
16a50 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c  Y clause.</p>..<
16a60 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
16a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16ab0 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55  ###.Section VACU
16ac0 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d  UM vacuum VACUUM
16ad0 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
16ae0 76 61 63 75 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f  vacuum-stmt 1.</
16af0 74 63 6c 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 6e  tcl>..<p>When an
16b00 20 6f 62 6a 65 63 74 20 28 74 61 62 6c 65 2c 20   object (table, 
16b10 69 6e 64 65 78 2c 20 6f 72 20 74 72 69 67 67 65  index, or trigge
16b20 72 29 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  r) is dropped fr
16b30 6f 6d 20 74 68 65 20 0a 64 61 74 61 62 61 73 65  om the .database
16b40 2c 20 69 74 20 6c 65 61 76 65 73 20 62 65 68 69  , it leaves behi
16b50 6e 64 20 65 6d 70 74 79 20 73 70 61 63 65 2e 20  nd empty space. 
16b60 0a 54 68 69 73 20 65 6d 70 74 79 20 73 70 61 63  .This empty spac
16b70 65 20 77 69 6c 6c 20 62 65 20 72 65 75 73 65 64  e will be reused
16b80 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 6e   the next time n
16b90 65 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ew information i
16ba0 73 0a 61 64 64 65 64 20 74 6f 20 74 68 65 20 64  s.added to the d
16bb0 61 74 61 62 61 73 65 2e 20 20 42 75 74 20 69 6e  atabase.  But in
16bc0 20 74 68 65 20 6d 65 61 6e 74 69 6d 65 2c 20 74   the meantime, t
16bd0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
16be0 20 6d 69 67 68 74 0a 62 65 20 6c 61 72 67 65 72   might.be larger
16bf0 20 74 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e   than strictly n
16c00 65 63 65 73 73 61 72 79 2e 20 20 41 6c 73 6f 2c  ecessary.  Also,
16c10 20 66 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74   frequent insert
16c20 73 2c 20 75 70 64 61 74 65 73 2c 0a 61 6e 64 20  s, updates,.and 
16c30 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73  deletes can caus
16c40 65 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  e the informatio
16c50 6e 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  n in the databas
16c60 65 20 74 6f 20 62 65 63 6f 6d 65 0a 66 72 61 67  e to become.frag
16c70 6d 65 6e 74 65 64 20 2d 20 73 63 72 61 74 74 65  mented - scratte
16c80 72 65 64 20 6f 75 74 20 61 6c 6c 20 61 63 72 6f  red out all acro
16c90 73 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ss the database 
16ca0 66 69 6c 65 20 72 61 74 68 65 72 0a 74 68 61 6e  file rather.than
16cb0 20 63 6c 75 73 74 65 72 65 64 20 74 6f 67 65 74   clustered toget
16cc0 68 65 72 20 69 6e 20 6f 6e 65 20 70 6c 61 63 65  her in one place
16cd0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 56 41  .</p>..<p>The VA
16ce0 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c 65  CUUM command cle
16cf0 61 6e 73 0a 74 68 65 20 6d 61 69 6e 20 64 61 74  ans.the main dat
16d00 61 62 61 73 65 20 62 79 20 63 6f 70 79 69 6e 67  abase by copying
16d10 20 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 74 6f   its contents to
16d20 20 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74   a temporary dat
16d30 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 0a  abase file and .
16d40 72 65 6c 6f 61 64 69 6e 67 20 74 68 65 20 6f 72  reloading the or
16d50 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20  iginal database 
16d60 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 6f  file from the co
16d70 70 79 2e 20 20 54 68 69 73 20 65 6c 69 6d 69 6e  py.  This elimin
16d80 61 74 65 73 20 0a 66 72 65 65 20 70 61 67 65 73  ates .free pages
16d90 2c 20 20 61 6c 69 67 6e 73 20 74 61 62 6c 65 20  ,  aligns table 
16da0 64 61 74 61 20 74 6f 20 62 65 20 63 6f 6e 74 69  data to be conti
16db0 67 75 6f 75 73 2c 20 61 6e 64 20 6f 74 68 65 72  guous, and other
16dc0 77 69 73 65 20 63 6c 65 61 6e 73 20 0a 75 70 20  wise cleans .up 
16dd0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16de0 65 20 73 74 72 75 63 74 75 72 65 2e 3c 2f 70 3e  e structure.</p>
16df0 0a 0a 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20  ..<p>The VACUUM 
16e00 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e  command may chan
16e10 67 65 20 74 68 65 20 0a 5b 52 4f 57 49 44 20 7c  ge the .[ROWID |
16e20 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72   ROWIDs] of entr
16e30 69 65 73 20 69 6e 20 74 61 62 6c 65 73 20 74 68  ies in tables th
16e40 61 74 20 64 6f 0a 6e 6f 74 20 68 61 76 65 20 61  at do.not have a
16e50 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e 54 45  n explicit [INTE
16e60 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
16e70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 56 41 43 55 55 4d  .</p>..<p>VACUUM
16e80 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
16e90 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
16ea0 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  ..It is not poss
16eb0 69 62 6c 65 20 74 6f 20 56 41 43 55 55 4d 20 61  ible to VACUUM a
16ec0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
16ed0 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
16ee0 70 3e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  p>The VACUUM com
16ef0 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69 6c 20 69  mand will fail i
16f00 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 61 63  f there is an ac
16f10 74 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tive transaction
16f20 2e 0a 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  ..The VACUUM com
16f30 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70 20  mand is a no-op 
16f40 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  for in-memory da
16f50 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a 0a 3c 70  tabases.</p>..<p
16f60 3e 41 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65  >As of SQLite ve
16f70 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c  rsion 3.1, an al
16f80 74 65 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69  ternative to usi
16f90 6e 67 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f  ng the VACUUM co
16fa0 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f 2d 76 61  mmand.is auto-va
16fb0 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c  cuum mode, enabl
16fc0 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 61  ed using the .[a
16fd0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67  uto_vacuum] prag
16fe0 6d 61 2e 20 20 57 68 65 6e 20 5b 61 75 74 6f 5f  ma.  When [auto_
16ff0 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c  vacuum] is enabl
17000 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ed for a databas
17010 65 2c 20 0a 6c 61 72 67 65 20 64 65 6c 65 74 65  e, .large delete
17020 73 20 63 61 75 73 65 0a 74 68 65 20 73 69 7a 65  s cause.the size
17030 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
17040 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2e   file to shrink.
17050 20 20 48 6f 77 65 76 65 72 2c 20 5b 61 75 74 6f    However, [auto
17060 5f 76 61 63 75 75 6d 5d 0a 61 6c 73 6f 20 63 61  _vacuum].also ca
17070 75 73 65 73 20 65 78 63 65 73 73 20 66 72 61 67  uses excess frag
17080 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
17090 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
170a0 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75 75   And [auto_vacuu
170b0 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70  m].does not comp
170c0 61 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66 69  act partially fi
170d0 6c 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74 68  lled pages of th
170e0 65 20 64 61 74 61 62 61 73 65 20 61 73 20 56 41  e database as VA
170f0 43 55 55 4d 0a 64 6f 65 73 2e 3c 2f 70 3e 0a 0a  CUUM.does.</p>..
17100 3c 70 3e 54 68 65 20 5b 70 61 67 65 5f 73 69 7a  <p>The [page_siz
17110 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f  e] and/or [auto_
17120 76 61 63 75 75 6d 5d 20 6d 6f 64 65 20 6f 66 20  vacuum] mode of 
17130 61 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  a database can b
17140 65 20 63 68 61 6e 67 65 64 0a 62 79 20 69 6e 76  e changed.by inv
17150 6f 6b 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f  oking the [page_
17160 73 69 7a 65 20 70 72 61 67 6d 61 5d 20 61 6e 64  size pragma] and
17170 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  /or [auto_vacuum
17180 20 70 72 61 67 6d 61 5d 20 61 6e 64 20 74 68 65   pragma] and the
17190 6e 0a 69 6d 6d 65 64 69 61 74 65 6c 79 20 56 41  n.immediately VA
171a0 43 55 55 4d 69 6e 67 20 74 68 65 20 64 61 74 61  CUUMing the data
171b0 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  base.</p>..<tcl>
171c0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
171d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
171e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
171f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
17210 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
17220 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
17230 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
17240 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
17250 63 6c 3e 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58  cl>.<p>The INDEX
17260 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20  ED BY phrase is 
17270 61 20 53 51 4c 20 65 78 74 65 6e 73 69 6f 6e 20  a SQL extension 
17280 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20 53 51  found only in SQ
17290 4c 69 74 65 20 77 68 69 63 68 20 63 61 6e 0a 62  Lite which can.b
172a0 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
172b0 20 74 68 61 74 20 74 68 65 20 63 6f 72 72 65 63   that the correc
172c0 74 20 69 6e 64 69 63 65 73 20 61 72 65 20 62 65  t indices are be
172d0 69 6e 67 20 75 73 65 64 20 6f 6e 20 61 20 5b 44  ing used on a [D
172e0 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43 54 5d  ELETE],.[SELECT]
172f0 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74  , or [UPDATE] st
17300 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e 44  atement..The IND
17310 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 61  EXED BY phrase a
17320 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 74 68  lways follows th
17330 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c  e name of a tabl
17340 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  e that SQLite wi
17350 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e 20 20  ll.be reading.  
17360 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
17370 68 72 61 73 65 20 63 61 6e 20 62 65 20 73 65 65  hrase can be see
17380 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n in the followi
17390 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67 72 61  ng syntax.diagra
173a0 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 42  ms:</p>..<tcl>.B
173b0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61  ubbleDiagram qua
173c0 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
173d0 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
173e0 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a 3c 2f  single-source.</
173f0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 22 49 4e  tcl>..<p>The "IN
17400 44 45 58 45 44 20 42 59 20 69 6e 64 65 78 2d 6e  DEXED BY index-n
17410 61 6d 65 22 20 63 6c 61 75 73 65 20 73 70 65 63  ame" clause spec
17420 69 66 69 65 73 20 74 68 61 74 20 74 68 65 20 6e  ifies that the n
17430 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73 74 20  amed index.must 
17440 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64 65 72  be used in order
17450 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61 6c 75   to look up valu
17460 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63 65 64  es on the preced
17470 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66 20 69 6e  ing table..If in
17480 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73 20 6e 6f  dex-name does no
17490 74 20 65 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f  t exist or canno
174a0 74 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  t be used for th
174b0 65 20 71 75 65 72 79 2c 20 74 68 65 6e 0a 74 68  e query, then.th
174c0 65 20 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66  e preparation of
174d0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
174e0 6e 74 20 66 61 69 6c 73 2e 0a 54 68 65 20 22 4e  nt fails..The "N
174f0 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75  OT INDEXED" clau
17500 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
17510 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c  t no index shall
17520 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63   be used when.ac
17530 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63  cessing the prec
17540 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63  eding table, inc
17550 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
17560 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79  ndices create by
17570 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d  .UNIQUE and PRIM
17580 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
17590 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  nts.  However, t
175a0 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  he INTEGER PRIMA
175b0 52 59 20 4b 45 59 0a 63 61 6e 20 73 74 69 6c 6c  RY KEY.can still
175c0 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f 6b   be used to look
175d0 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65 6e   up entries even
175e0 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45 58   when "NOT INDEX
175f0 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65 64  ED" is specified
17600 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53  .</p>..<p>Some S
17610 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  QL database engi
17620 6e 65 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d  nes provide non-
17630 73 74 61 6e 64 61 72 64 20 22 68 69 6e 74 22 20  standard "hint" 
17640 6d 65 63 68 61 6e 69 73 6d 73 20 77 68 69 63 68  mechanisms which
17650 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
17660 67 69 76 65 20 74 68 65 20 71 75 65 72 79 20 6f  give the query o
17670 70 74 69 6d 69 7a 65 72 20 63 6c 75 65 73 20 61  ptimizer clues a
17680 62 6f 75 74 20 77 68 61 74 20 69 6e 64 69 63 65  bout what indice
17690 73 20 69 74 20 73 68 6f 75 6c 64 0a 75 73 65 20  s it should.use 
176a0 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
176b0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
176c0 20 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65   INDEX BY clause
176d0 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 0a 3c   of SQLite is .<
176e0 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69  em>not</em> a hi
176f0 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20  nting mechanism 
17700 61 6e 64 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f  and it should no
17710 74 20 62 65 20 75 73 65 64 20 61 73 20 73 75 63  t be used as suc
17720 68 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42  h..The INDEXED B
17730 59 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f  Y clause does no
17740 74 20 67 69 76 65 20 74 68 65 20 6f 70 74 69 6d  t give the optim
17750 69 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75 74  izer hints about
17760 20 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f 20   which index.to 
17770 75 73 65 3b 20 69 74 20 67 69 76 65 73 20 74 68  use; it gives th
17780 65 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72 65  e optimizer a re
17790 71 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68 69  quirement of whi
177a0 63 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65 2e  ch index to use.
177b0 0a 49 66 20 74 68 65 20 71 75 65 72 79 20 6f 70  .If the query op
177c0 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61 62 6c  timizer is unabl
177d0 65 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 64  e to use the ind
177e0 65 78 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ex specified by 
177f0 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63 6c 61  the.INDEX BY cla
17800 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 71 75  use, then the qu
17810 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  ery will fail wi
17820 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
17830 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44  ..<p>The INDEXED
17840 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 3c 65   BY clause is <e
17850 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e  m>not</em> inten
17860 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 20 74  ded for use in t
17870 75 6e 69 6e 67 0a 74 68 65 20 70 72 65 66 6f 72  uning.the prefor
17880 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65 72 79  mance of a query
17890 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20 6f 66  .  The intent of
178a0 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   the INDEXED BY 
178b0 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72 61 69  clause is.to rai
178c0 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72  se a run-time er
178d0 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d 61 20  ror if a schema 
178e0 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61 73 20  change, such as 
178f0 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65 61  dropping or.crea
17900 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20 63  ting an index, c
17910 61 75 73 65 73 20 74 68 65 20 71 75 65 72 79 20  auses the query 
17920 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d  plan for a time-
17930 73 65 6e 73 69 74 69 76 65 20 71 75 65 72 79 0a  sensitive query.
17940 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20  to change.  The 
17950 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
17960 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
17970 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75 6e 64   help detect.und
17980 65 73 69 72 61 62 6c 65 20 71 75 65 72 79 20 70  esirable query p
17990 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75 72 69  lan changes duri
179a0 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ng regression te
179b0 73 74 69 6e 67 2e 0a 44 65 76 65 6c 6f 70 65 72  sting..Developer
179c0 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68 65 64  s are admonished
179d0 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65   to omit all use
179e0 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 64   of INDEXED BY d
179f0 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f  uring.applicatio
17a00 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d  n design, implem
17a10 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e  entation, testin
17a20 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20  g, and tuning.  
17a30 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20 69 73  If.INDEXED BY is
17a40 20 74 6f 20 62 65 20 75 73 65 64 20 61 74 20 61   to be used at a
17a50 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20 62 65  ll, it should be
17a60 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
17a70 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74 68 65   very.end of the
17a80 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f   development pro
17a90 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69  cess when "locki
17aa0 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73 69 67  ng down" a desig
17ab0 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20  n.</p>..<h3>See 
17ac0 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  Also:</h3>..<p>T
17ad0 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  he [sqlite3_stmt
17ae0 5f 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b  _status()] C/C++
17af0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74   interface toget
17b00 68 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51  her with the.[SQ
17b10 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
17b20 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61  FULLSCAN_STEP] a
17b30 6e 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  nd [SQLITE_STMTS
17b40 54 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62  TATUS_SORT] verb
17b50 73 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s.can be used to
17b60 20 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74   detect at run-t
17b70 69 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20  ime when an SQL 
17b80 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74  statement is not
17b90 0a 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76  .making effectiv
17ba0 65 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73  e use of indices
17bb0 2e 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74  .  Many applicat
17bc0 69 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20  ions may prefer 
17bd0 74 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69  to.use the [sqli
17be0 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28  te3_stmt_status(
17bf0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  )] interface to 
17c00 64 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73  detect index mis
17c10 75 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20  use.rather than 
17c20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  the INDEXED BY p
17c30 68 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20  hrase described 
17c40 68 65 72 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  here.</p>..<tcl>
17c50 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
17c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
17ca0 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f   A list of keywo
17cb0 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b  rds.  A asterisk
17cc0 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
17cd0 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20  e keyword if it 
17ce0 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c  is on.# the fall
17cf0 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74  back list..#.set
17d00 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c   keyword_list [l
17d10 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 2a  sort {.   ABORT*
17d20 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52  .   ADD.   AFTER
17d30 2a 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45  *.   ALL.   ALTE
17d40 52 0a 20 20 20 41 4e 41 4c 59 5a 45 2a 0a 20 20  R.   ANALYZE*.  
17d50 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53   AND.   AS.   AS
17d60 43 2a 0a 20 20 20 41 54 54 41 43 48 2a 0a 20 20  C*.   ATTACH*.  
17d70 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
17d80 20 20 42 45 46 4f 52 45 2a 0a 20 20 20 42 45 47    BEFORE*.   BEG
17d90 49 4e 2a 0a 20 20 20 42 45 54 57 45 45 4e 0a 20  IN*.   BETWEEN. 
17da0 20 20 42 59 2a 0a 20 20 20 43 41 53 43 41 44 45    BY*.   CASCADE
17db0 2a 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53  *.   CASE.   CAS
17dc0 54 2a 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43  T*.   CHECK.   C
17dd0 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e  OLLATE.   COLUMN
17de0 2a 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43  *.   COMMIT.   C
17df0 4f 4e 46 4c 49 43 54 2a 0a 20 20 20 43 4f 4e 53  ONFLICT*.   CONS
17e00 54 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45  TRAINT.   CREATE
17e10 0a 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52  .   CROSS.   CUR
17e20 52 45 4e 54 5f 44 41 54 45 2a 0a 20 20 20 43 55  RENT_DATE*.   CU
17e30 52 52 45 4e 54 5f 54 49 4d 45 2a 0a 20 20 20 43  RRENT_TIME*.   C
17e40 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
17e50 2a 0a 20 20 20 44 41 54 41 42 41 53 45 2a 0a 20  *.   DATABASE*. 
17e60 20 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46    DEFAULT.   DEF
17e70 45 52 52 45 44 2a 0a 20 20 20 44 45 46 45 52 52  ERRED*.   DEFERR
17e80 41 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20  ABLE.   DELETE. 
17e90 20 20 44 45 53 43 2a 0a 20 20 20 44 45 54 41 43    DESC*.   DETAC
17ea0 48 2a 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20  H*.   DISTINCT. 
17eb0 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 2a 0a 20    DROP.   END*. 
17ec0 20 20 45 41 43 48 2a 0a 20 20 20 45 4c 53 45 0a    EACH*.   ELSE.
17ed0 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43     ESCAPE.   EXC
17ee0 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45  EPT.   EXCLUSIVE
17ef0 2a 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45  *.   EXISTS.   E
17f00 58 50 4c 41 49 4e 2a 0a 20 20 20 46 41 49 4c 2a  XPLAIN*.   FAIL*
17f10 0a 20 20 20 46 4f 52 2a 0a 20 20 20 46 4f 52 45  .   FOR*.   FORE
17f20 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46  IGN.   FROM.   F
17f30 55 4c 4c 0a 20 20 20 47 4c 4f 42 2a 0a 20 20 20  ULL.   GLOB*.   
17f40 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a  GROUP.   HAVING.
17f50 20 20 20 49 46 2a 0a 20 20 20 49 47 4e 4f 52 45     IF*.   IGNORE
17f60 2a 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 2a 0a  *.   IMMEDIATE*.
17f70 20 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20     IN.   INDEX. 
17f80 20 20 49 4e 44 45 58 45 44 2a 0a 20 20 20 49 4e    INDEXED*.   IN
17f90 49 54 49 41 4c 4c 59 2a 0a 20 20 20 49 4e 4e 45  ITIALLY*.   INNE
17fa0 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49  R.   INSERT.   I
17fb0 4e 53 54 45 41 44 2a 0a 20 20 20 49 4e 54 45 52  NSTEAD*.   INTER
17fc0 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20  SECT.   INTO.   
17fd0 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20  IS.   ISNULL.   
17fe0 4a 4f 49 4e 0a 20 20 20 4b 45 59 2a 0a 20 20 20  JOIN.   KEY*.   
17ff0 4c 45 46 54 0a 20 20 20 4c 49 4b 45 2a 0a 20 20  LEFT.   LIKE*.  
18000 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 2a   LIMIT.   MATCH*
18010 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e  .   NATURAL.   N
18020 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20  OT.   NOTNULL.  
18030 20 4e 55 4c 4c 0a 20 20 20 4f 46 2a 0a 20 20 20   NULL.   OF*.   
18040 4f 46 46 53 45 54 2a 0a 20 20 20 4f 4e 0a 20 20  OFFSET*.   ON.  
18050 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20   OR.   ORDER.   
18060 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 2a 0a 20  OUTER.   PLAN*. 
18070 20 20 50 52 41 47 4d 41 2a 0a 20 20 20 50 52 49    PRAGMA*.   PRI
18080 4d 41 52 59 0a 20 20 20 51 55 45 52 59 2a 0a 20  MARY.   QUERY*. 
18090 20 20 52 41 49 53 45 2a 0a 20 20 20 52 45 46 45    RAISE*.   REFE
180a0 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50  RENCES.   REGEXP
180b0 2a 0a 20 20 20 52 45 49 4e 44 45 58 2a 0a 20 20  *.   REINDEX*.  
180c0 20 52 45 4c 45 41 53 45 2a 0a 20 20 20 52 45 4e   RELEASE*.   REN
180d0 41 4d 45 2a 0a 20 20 20 52 45 50 4c 41 43 45 2a  AME*.   REPLACE*
180e0 0a 20 20 20 52 45 53 54 52 49 43 54 2a 0a 20 20  .   RESTRICT*.  
180f0 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41   RIGHT.   ROLLBA
18100 43 4b 0a 20 20 20 52 4f 57 2a 0a 20 20 20 53 41  CK.   ROW*.   SA
18110 56 45 50 4f 49 4e 54 2a 0a 20 20 20 53 45 4c 45  VEPOINT*.   SELE
18120 43 54 0a 20 20 20 53 45 54 0a 20 20 20 54 41 42  CT.   SET.   TAB
18130 4c 45 0a 20 20 20 54 45 4d 50 2a 0a 20 20 20 54  LE.   TEMP*.   T
18140 45 4d 50 4f 52 41 52 59 2a 0a 20 20 20 54 48 45  EMPORARY*.   THE
18150 4e 0a 20 20 20 54 4f 0a 20 20 20 54 52 41 4e 53  N.   TO.   TRANS
18160 41 43 54 49 4f 4e 0a 20 20 20 54 52 49 47 47 45  ACTION.   TRIGGE
18170 52 2a 0a 20 20 20 55 4e 49 4f 4e 0a 20 20 20 55  R*.   UNION.   U
18180 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54 45 0a  NIQUE.   UPDATE.
18190 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41 43 55     USING.   VACU
181a0 55 4d 2a 0a 20 20 20 56 41 4c 55 45 53 0a 20 20  UM*.   VALUES.  
181b0 20 56 49 45 57 2a 0a 20 20 20 56 49 52 54 55 41   VIEW*.   VIRTUA
181c0 4c 2a 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48  L*.   WHEN.   WH
181d0 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20  ERE.}]..hd_puts 
181e0 7b 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66  {<DIV class="pdf
181f0 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74  _section">}.Sect
18200 69 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77  ion {SQLite Keyw
18210 6f 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b  ords} keywords {
18220 7b 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53  {SQL keyword} {S
18230 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64  QL keywords}}.hd
18240 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c  _puts {</DIV>}.<
18250 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  /tcl>..<p>The SQ
18260 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
18270 66 69 65 73 20 61 20 68 75 67 65 20 6e 75 6d 62  fies a huge numb
18280 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77  er of keywords w
18290 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20  hich may not.be 
182a0 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  used as the name
182b0 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64  s of tables, ind
182c0 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64  ices, columns, d
182d0 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64  atabases, user-d
182e0 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73  efined.functions
182f0 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69  , collations, vi
18300 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
18310 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65  les, or any othe
18320 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a  r named object..
18330 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  The list of keyw
18340 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20  ords is so long 
18350 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20  that few people 
18360 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65  can remember the
18370 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20  m all..For most 
18380 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73  SQL code, your s
18390 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f 20  afest bet is to 
183a0 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e  never use any En
183b0 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77  glish language.w
183c0 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20  ord as the name 
183d0 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  of a user-define
183e0 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c  d object.</p>..<
183f0 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f  p>If you want to
18400 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61   use a keyword a
18410 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65  s a name, you ne
18420 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20  ed to quote it. 
18430 20 54 68 65 72 65 0a 61 72 65 20 74 68 72 65 65   There.are three
18440 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67   ways of quoting
18450 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
18460 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62  ite:</p>..<p>.<b
18470 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
18480 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  e>.<tr>.<td vali
18490 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79  gn="top"><b>'key
184a0 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word'</b></td><t
184b0 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
184c0 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72  d>..<td>A keywor
184d0 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74  d in single quot
184e0 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c  es is a string l
184f0 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
18500 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  >..<tr>.<td vali
18510 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79  gn="top"><b>"key
18520 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word"</b></td><t
18530 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b  d></td>..<td>A k
18540 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65  eyword in double
18550 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64  -quotes is an id
18560 65 6e 74 69 66 69 65 72 3c 2f 74 64 3e 3c 2f 74  entifier</td></t
18570 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
18580 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39  ign="top"><b>&#9
18590 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f  1;keyword&#93;</
185a0 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
185b0 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20  ..<td>A keyword 
185c0 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61  enclosed in squa
185d0 72 65 20 62 72 61 63 6b 65 74 73 20 69 73 20 0a  re brackets is .
185e0 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
185f0 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
18600 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
18610 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
18620 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
18630 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20    is used by MS 
18640 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53  Access and SQL S
18650 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63  erver and is inc
18660 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
18670 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
18680 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
18690 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76  /tr>..<tr>.<td v
186a0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26  align="top"><b>&
186b0 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36 3b  #96;keyword&#96;
186c0 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74  </b></td><td></t
186d0 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72  d>..<td>A keywor
186e0 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 67 72  d enclosed in gr
186f0 61 76 65 20 61 63 63 65 6e 74 73 20 28 41 53 43  ave accents (ASC
18700 49 49 20 63 6f 64 65 20 39 36 29 20 69 73 20 0a  II code 96) is .
18710 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
18720 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
18730 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
18740 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
18750 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
18760 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 79 53    is used by MyS
18770 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  QL and is includ
18780 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
18790 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
187a0 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
187b0 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
187c0 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c  ckquote>.</p>..<
187d0 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e 63 65  p>For resilience
187e0 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74 65 64   when confronted
187f0 20 77 69 74 68 20 68 69 73 74 6f 72 69 63 61 6c   with historical
18800 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c   SQL statements,
18810 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73 6f 6d   SQLite.will som
18820 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68 65 20  etimes bend the 
18830 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20 61 62  quoting rules ab
18840 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  ove:</p>..<ul>.<
18850 6c 69 3e 3c 70 3e 49 66 20 61 20 6b 65 79 77 6f  li><p>If a keywo
18860 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f  rd in single.quo
18870 74 65 73 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79  tes (ex: <b>'key
18880 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f  '</b> or <b>'glo
18890 62 27 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20  b'</b>) is used 
188a0 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65  in a context whe
188b0 72 65 0a 61 6e 20 69 64 65 6e 74 69 66 69 65 72  re.an identifier
188c0 20 69 73 20 61 6c 6c 6f 77 65 64 20 62 75 74 20   is allowed but 
188d0 77 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c  where a string l
188e0 69 74 65 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c  iteral is not al
188f0 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74 68 65 20  lowed, then.the 
18900 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74  token is underst
18910 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20 69 64 65  ood to be an ide
18920 6e 74 69 66 69 65 72 20 69 6e 73 74 65 61 64 20  ntifier instead 
18930 6f 66 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  of a string lite
18940 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  ral..</p></li>..
18950 3c 6c 69 3e 3c 70 3e 49 66 20 61 20 6b 65 79 77  <li><p>If a keyw
18960 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75  ord in double.qu
18970 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65  otes (ex: <b>"ke
18980 79 22 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c  y"</b> or <b>"gl
18990 6f 62 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64  ob"</b>) is used
189a0 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68   in a context wh
189b0 65 72 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere.it cannot be
189c0 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20   resolved to an 
189d0 69 64 65 6e 74 69 66 69 65 72 20 62 75 74 20 77  identifier but w
189e0 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
189f0 74 65 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64  teral.is allowed
18a00 2c 20 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e  , then the token
18a10 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74   is understood t
18a20 6f 20 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69  o be a string li
18a30 74 65 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66  teral instead.of
18a40 20 61 6e 20 69 64 65 6e 74 69 66 65 72 2e 3c 2f   an identifer.</
18a50 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
18a60 70 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  p>Programmers ar
18a70 65 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20  e cautioned not 
18a80 74 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20 65  to use the two e
18a90 78 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69  xceptions descri
18aa0 62 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69  bed in.the previ
18ab0 6f 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65  ous bullets.  We
18ac0 20 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20   emphasize that 
18ad0 74 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20  they exist only 
18ae0 73 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20  so that old.and 
18af0 69 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73  ill-formed SQL s
18b00 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72  tatements will r
18b10 75 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46  un correctly.  F
18b20 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
18b30 66 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63  f.SQLite might c
18b40 68 61 6e 67 65 20 74 6f 20 72 61 69 73 65 20 65  hange to raise e
18b50 72 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66  rrors instead of
18b60 20 61 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d   accepting the m
18b70 61 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65  alformed.stateme
18b80 6e 74 73 20 63 6f 76 65 72 65 64 20 62 79 20 74  nts covered by t
18b90 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62  he exceptions ab
18ba0 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c  ove.</p>..<p>SQL
18bb0 69 74 65 20 69 73 20 65 78 74 65 6e 64 65 64 20  ite is extended 
18bc0 74 6f 20 61 6c 6c 6f 77 20 6d 61 6e 79 20 6b 65  to allow many ke
18bd0 79 77 6f 72 64 73 20 74 6f 20 62 65 20 75 73 65  ywords to be use
18be0 64 20 75 6e 71 75 6f 74 65 64 0a 61 73 20 74 68  d unquoted.as th
18bf0 65 20 6e 61 6d 65 73 20 6f 66 20 64 61 74 61 62  e names of datab
18c00 61 73 65 73 2c 20 74 61 62 6c 65 73 2c 20 69 6e  ases, tables, in
18c10 64 69 63 65 73 2c 20 74 72 69 67 67 65 72 73 2c  dices, triggers,
18c20 20 76 69 65 77 73 2c 20 63 6f 6c 75 6d 6e 73 2c   views, columns,
18c30 0a 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75  .user-defined fu
18c40 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69  nctions, collati
18c50 6f 6e 73 2c 20 61 74 74 61 63 68 65 64 20 64 61  ons, attached da
18c60 74 61 62 61 73 65 73 2c 20 61 6e 64 20 76 69 72  tabases, and vir
18c70 74 75 61 6c 0a 66 75 6e 63 74 69 6f 6e 20 6d 6f  tual.function mo
18c80 64 75 6c 65 73 2e 0a 49 6e 20 74 68 65 20 6c 69  dules..In the li
18c90 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 74  st of keywords t
18ca0 68 61 74 20 66 6f 6c 6c 6f 77 73 2c 20 74 68 6f  hat follows, tho
18cb0 73 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  se that can be u
18cc0 73 65 64 20 61 73 20 69 64 65 6e 74 69 66 69 65  sed as identifie
18cd0 72 73 0a 61 72 65 20 73 68 6f 77 6e 20 69 6e 20  rs.are shown in 
18ce0 61 6e 20 69 74 61 6c 69 63 20 66 6f 6e 74 2e 20  an italic font. 
18cf0 20 4b 65 79 77 6f 72 64 73 20 74 68 61 74 20 6d   Keywords that m
18d00 75 73 74 20 62 65 20 71 75 6f 74 65 64 20 69 6e  ust be quoted in
18d10 20 6f 72 64 65 72 20 74 6f 20 62 65 0a 75 73 65   order to be.use
18d20 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72 73  d as identifiers
18d30 20 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6f   are shown in bo
18d40 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c  ld.</p>..<p>.SQL
18d50 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79  ite adds new key
18d60 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20  words from time 
18d70 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20  to time when it 
18d80 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61  takes on new fea
18d90 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65  tures..So to pre
18da0 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66  vent your code f
18db0 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e  rom being broken
18dc0 20 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e   by future enhan
18dd0 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f  cements, you sho
18de0 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f  uld.normally quo
18df0 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65  te any identifie
18e00 72 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67  r that is an Eng
18e10 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f  lish language wo
18e20 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20  rd, even if.you 
18e30 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a  do not have to..
18e40 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 6f  </p>..<p>.The fo
18e50 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
18e60 6b 65 79 77 6f 72 64 73 20 63 75 72 72 65 6e 74  keywords current
18e70 6c 79 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79  ly recognized by
18e80 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
18e90 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
18ea0 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22 20  le width="100%" 
18eb0 63 6c 61 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f  class="pdf_keywo
18ec0 72 64 73 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  rds">.<tr>.<td a
18ed0 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69  lign="left" vali
18ee0 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22  gn="top" width="
18ef0 32 30 25 22 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74  20%">..<tcl>.set
18f00 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79   n [llength $key
18f10 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e  word_list].set n
18f20 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b  Col 5.set nRow [
18f30 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d  expr {($n+$nCol-
18f40 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69  1)/$nCol}].set i
18f50 20 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20   0.foreach word 
18f60 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a  $keyword_list {.
18f70 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 6e    if {[string in
18f80 64 65 78 20 24 77 6f 72 64 20 65 6e 64 5d 3d 3d  dex $word end]==
18f90 22 2a 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 77  "*"} {.    set w
18fa0 6f 72 64 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  ord [string rang
18fb0 65 20 24 77 6f 72 64 20 30 20 65 6e 64 2d 31 5d  e $word 0 end-1]
18fc0 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20 69 0a  .    set font i.
18fd0 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
18fe0 65 74 20 66 6f 6e 74 20 62 0a 20 20 7d 0a 20 20  et font b.  }.  
18ff0 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b  if {$i==$nRow} {
19000 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f  .    hd_puts "</
19010 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22  td><td valign=\"
19020 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65  top\" align=\"le
19030 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25  ft\" width=\"20%
19040 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31  \">".    set i 1
19050 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
19060 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f  incr i.  }.  hd_
19070 70 75 74 73 20 22 3c 24 66 6f 6e 74 3e 24 77 6f  puts "<$font>$wo
19080 72 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22 0a  rd</$font><br>".
19090 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f  }.</tcl>.</td></
190a0 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  tr></table></blo
190b0 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53 70  ckquote>..<h2>Sp
190c0 65 63 69 61 6c 20 6e 61 6d 65 73 3c 2f 68 32 3e  ecial names</h2>
190d0 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
190e0 6e 67 20 61 72 65 20 6e 6f 74 20 6b 65 79 77 6f  ng are not keywo
190f0 72 64 73 20 69 6e 20 53 51 4c 69 74 65 2c 20 62  rds in SQLite, b
19100 75 74 20 61 72 65 20 75 73 65 64 20 61 73 20 6e  ut are used as n
19110 61 6d 65 73 20 6f 66 20 0a 73 79 73 74 65 6d 20  ames of .system 
19120 6f 62 6a 65 63 74 73 2e 20 20 54 68 65 79 20 63  objects.  They c
19130 61 6e 20 62 65 20 75 73 65 64 20 61 73 20 61 6e  an be used as an
19140 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20   identifier for 
19150 61 20 64 69 66 66 65 72 65 6e 74 20 0a 74 79 70  a different .typ
19160 65 20 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e  e of object.</p>
19170 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 63 6c  ..<blockquote cl
19180 61 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64  ass="pdf_keyword
19190 73 22 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f  s"><b>.  _ROWID_
191a0 3c 62 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a  <br>.  MAIN<br>.
191b0 20 20 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49    OID<br>.  ROWI
191c0 44 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d  D<br>.  SQLITE_M
191d0 41 53 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49  ASTER<br>.  SQLI
191e0 54 45 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a  TE_SEQUENCE<br>.
191f0 20 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41    SQLITE_TEMP_MA
19200 53 54 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c  STER<br>.  TEMP<
19210 62 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71  br>.</b></blockq
19220 75 6f 74 65 3e 0a                                uote>.