Documentation Source Text

Hex Artifact Content
Login

Artifact 047956c1506099c33a546a181b26a8dfc879e3a7:


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 50 52 41 47 4d 41  ction}.  {PRAGMA
0680: 20 70 72 61 67 6d 61 2e 68 74 6d 6c 7d 0a 20 20   pragma.html}.  
0690: 7b 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  {{ON CONFLICT cl
06a0: 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a  ause} conflict}.
06b0: 20 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d    {{CREATE VIEW}
06c0: 20 63 72 65 61 74 65 76 69 65 77 7d 0a 20 20 7b   createview}.  {
06d0: 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70  {DROP VIEW} drop
06e0: 76 69 65 77 7d 0a 20 20 7b 7b 43 52 45 41 54 45  view}.  {{CREATE
06f0: 20 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65   TRIGGER} create
0700: 74 72 69 67 67 65 72 7d 0a 20 20 7b 7b 44 52 4f  trigger}.  {{DRO
0710: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
0720: 72 69 67 67 65 72 7d 0a 20 20 7b 7b 41 54 54 41  rigger}.  {{ATTA
0730: 43 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74  CH DATABASE} att
0740: 61 63 68 7d 0a 20 20 7b 7b 44 45 54 41 43 48 20  ach}.  {{DETACH 
0750: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
0760: 7d 0a 20 20 7b 52 45 49 4e 44 45 58 20 72 65 69  }.  {REINDEX rei
0770: 6e 64 65 78 7d 0a 20 20 7b 7b 41 4c 54 45 52 20  ndex}.  {{ALTER 
0780: 54 41 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c  TABLE} altertabl
0790: 65 7d 0a 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20  e}.  {{ANALYZE} 
07a0: 61 6e 61 6c 79 7a 65 7d 0a 20 20 7b 7b 49 4e 44  analyze}.  {{IND
07b0: 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64  EXED BY} indexed
07c0: 62 79 7d 0a 20 20 7b 7b 61 67 67 72 65 67 61 74  by}.  {{aggregat
07d0: 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67  e functions} agg
07e0: 66 75 6e 63 7d 0a 20 20 7b 7b 63 6f 72 65 20 66  func}.  {{core f
07f0: 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75  unctions} corefu
0800: 6e 63 7d 0a 20 20 7b 7b 64 61 74 65 20 61 6e 64  nc}.  {{date and
0810: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 7d   time functions}
0820: 20 64 61 74 65 66 75 6e 63 7d 0a 20 20 7b 6b 65   datefunc}.  {ke
0830: 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73 7d  ywords keywords}
0840: 0a 7d 0a 73 65 74 20 6c 61 6e 67 5f 73 65 63 74  .}.set lang_sect
0850: 69 6f 6e 5f 62 72 65 61 6b 20 5b 65 78 70 72 20  ion_break [expr 
0860: 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6c 61 6e 67  {([llength $lang
0870: 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 2b 32  _section_list]+2
0880: 29 2f 33 7d 5d 0a 66 6f 72 65 61 63 68 20 7b 73  )/3}].foreach {s
0890: 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d  ection} [lsort -
08a0: 69 6e 64 65 78 20 30 20 2d 64 69 63 74 69 6f 6e  index 0 -diction
08b0: 61 72 79 20 24 6c 61 6e 67 5f 73 65 63 74 69 6f  ary $lang_sectio
08c0: 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20 66 6f 72 65  n_list] {.  fore
08d0: 61 63 68 20 7b 73 5f 74 69 74 6c 65 20 73 5f 74  ach {s_title s_t
08e0: 61 67 7d 20 24 73 65 63 74 69 6f 6e 20 7b 7d 0a  ag} $section {}.
08f0: 20 20 69 66 20 7b 24 73 5f 74 61 67 3d 3d 22 70    if {$s_tag=="p
0900: 72 61 67 6d 61 2e 68 74 6d 6c 22 7d 20 7b 0a 20  ragma.html"} {. 
0910: 20 20 20 73 65 74 20 75 72 6c 20 24 73 5f 74 61     set url $s_ta
0920: 67 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  g.  } else {.   
0930: 20 73 65 74 20 75 72 6c 20 6c 61 6e 67 5f 24 73   set url lang_$s
0940: 5f 74 61 67 2e 68 74 6d 6c 0a 20 20 7d 0a 20 20  _tag.html.  }.  
0950: 68 64 5f 70 75 74 73 20 22 3c 6c 69 3e 3c 61 20  hd_puts "<li><a 
0960: 68 72 65 66 3d 5c 22 24 75 72 6c 5c 22 3e 24 73  href=\"$url\">$s
0970: 5f 74 69 74 6c 65 3c 2f 61 3e 3c 2f 6c 69 3e 22  _title</a></li>"
0980: 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66 20 7b  .  incr i.  if {
0990: 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74 69 6f  $i==$lang_sectio
09a0: 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d 3d 32  n_break || $i==2
09b0: 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62  *$lang_section_b
09c0: 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64 5f 70  reak} {.    hd_p
09d0: 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  uts "</ul></td><
09e0: 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
09f0: 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a 3c 2f  "><ul>".  }.}.</
0a00: 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64 3e 3c  tcl>.</ul></td><
0a10: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70  /tr></table>..<p
0a20: 3e 54 68 65 20 67 65 6e 65 72 61 6c 20 6f 75 74  >The general out
0a30: 6c 69 6e 65 20 6f 66 20 61 6c 6c 20 53 51 4c 20  line of all SQL 
0a40: 73 74 61 74 65 6d 65 6e 74 73 20 75 6e 64 65 72  statements under
0a50: 73 74 6f 6f 64 20 62 79 0a 53 51 4c 69 74 65 20  stood by.SQLite 
0a60: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  is as follows:</
0a70: 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44  p>..<tcl>BubbleD
0a80: 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 3c  iagram sql-stmt<
0a90: 2f 74 63 6c 3e 0a 0a 3c 74 63 6c 3e 0a 70 72 6f  /tcl>..<tcl>.pro
0aa0: 63 20 4f 70 65 72 61 74 6f 72 20 7b 6e 61 6d 65  c Operator {name
0ab0: 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 66  } {.  return "<f
0ac0: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32  ont color=\"#2c2
0ad0: 63 66 30 5c 22 3e 3c 62 69 67 3e 24 6e 61 6d 65  cf0\"><big>$name
0ae0: 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d  </big></font>".}
0af0: 0a 70 72 6f 63 20 4e 6f 6e 74 65 72 6d 69 6e 61  .proc Nontermina
0b00: 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  l {name} {.  ret
0b10: 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f  urn "<i><font co
0b20: 6c 6f 72 3d 5c 22 23 66 66 33 34 33 34 5c 22 3e  lor=\"#ff3434\">
0b30: 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e  $name</font></i>
0b40: 22 0a 7d 0a 70 72 6f 63 20 4b 65 79 77 6f 72 64  ".}.proc Keyword
0b50: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
0b60: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
0b70: 5c 22 23 32 63 32 63 66 30 5c 22 3e 24 6e 61 6d  \"#2c2cf0\">$nam
0b80: 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63  e</font>".}.proc
0b90: 20 45 78 61 6d 70 6c 65 20 7b 74 65 78 74 7d 20   Example {text} 
0ba0: 7b 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 62 6c  {.  hd_puts "<bl
0bb0: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 24 74  ockquote><pre>$t
0bc0: 65 78 74 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  ext</pre></block
0bd0: 71 75 6f 74 65 3e 22 0a 7d 0a 0a 70 72 6f 63 20  quote>".}..proc 
0be0: 53 65 63 74 69 6f 6e 20 7b 6e 61 6d 65 20 6c 61  Section {name la
0bf0: 62 65 6c 20 6b 65 79 77 6f 72 64 73 7d 20 7b 0a  bel keywords} {.
0c00: 20 20 67 6c 6f 62 61 6c 20 44 4f 43 0a 20 20 68    global DOC.  h
0c10: 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a 20 20 68  d_close_main.  h
0c20: 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 6c 61 6e 67  d_open_main lang
0c30: 5f 24 6c 61 62 65 6c 2e 68 74 6d 6c 0a 20 20 68  _$label.html.  h
0c40: 64 5f 68 65 61 64 65 72 20 22 53 51 4c 69 74 65  d_header "SQLite
0c50: 20 51 75 65 72 79 20 4c 61 6e 67 75 61 67 65 3a   Query Language:
0c60: 20 24 6e 61 6d 65 22 20 24 44 4f 43 2f 70 61 67   $name" $DOC/pag
0c70: 65 73 2f 6c 61 6e 67 2e 69 6e 0a 20 20 65 76 61  es/lang.in.  eva
0c80: 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 24 6b  l hd_keywords $k
0c90: 65 79 77 6f 72 64 73 0a 20 20 68 64 5f 70 75 74  eywords.  hd_put
0ca0: 73 20 7b 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67  s {<a href="lang
0cb0: 2e 68 74 6d 6c 22 3e 3c 68 32 3e 53 51 4c 20 41  .html"><h2>SQL A
0cc0: 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20  s Understood By 
0cd0: 53 51 4c 69 74 65 3c 2f 68 32 3e 3c 2f 61 3e 7d  SQLite</h2></a>}
0ce0: 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 68 33 3e  .  hd_puts "<h3>
0cf0: 24 6e 61 6d 65 3c 2f 68 33 3e 22 0a 7d 0a 0a 23  $name</h3>".}..#
0d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
0d50: 65 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41  ection {ALTER TA
0d60: 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20  BLE} altertable 
0d70: 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b  {{ALTER TABLE} {
0d80: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0d90: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0da0: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0db0: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0dc0: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0dd0: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0de0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0df0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0e00: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0e10: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0e20: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0e30: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0e40: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0e50: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0e60: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0e70: 61 6d 65 20 61 20 63 6f 6c 75 6d 2c 20 72 65 6d  ame a colum, rem
0e80: 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f 72  ove a column, or
0e90: 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20 63   add or remove c
0ea0: 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d 20  onstraints from 
0eb0: 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c  a table..</p>..<
0ec0: 70 3e 54 68 65 20 52 45 4e 41 4d 45 20 54 4f 20  p>The RENAME TO 
0ed0: 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 20 74  syntax is used t
0ee0: 6f 20 72 65 6e 61 6d 65 20 74 68 65 20 74 61 62  o rename the tab
0ef0: 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  le identified by
0f00: 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61   .<i>&#91;databa
0f10: 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62  se-name.&#93;tab
0f20: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f 20 3c  le-name</i> to <
0f30: 69 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65  i>new-table-name
0f40: 3c 2f 69 3e 2e 0a 54 68 69 73 20 63 6f 6d 6d 61  </i>..This comma
0f50: 6e 64 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73  nd .cannot be us
0f60: 65 64 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62  ed to move a tab
0f70: 6c 65 20 62 65 74 77 65 65 6e 20 61 74 74 61 63  le between attac
0f80: 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f  hed databases, o
0f90: 6e 6c 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61  nly to rename .a
0fa0: 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68   table within th
0fb0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e  e same database.
0fc0: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
0fd0: 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61  table being rena
0fe0: 6d 65 64 20 68 61 73 20 74 72 69 67 67 65 72 73  med has triggers
0ff0: 20 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65   or indices, the
1000: 6e 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61  n these remain.a
1010: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74  ttached to the t
1020: 61 62 6c 65 20 61 66 74 65 72 20 69 74 20 68 61  able after it ha
1030: 73 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20  s been renamed. 
1040: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
1050: 65 20 61 72 65 0a 61 6e 79 20 76 69 65 77 20 64  e are.any view d
1060: 65 66 69 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73  efinitions, or s
1070: 74 61 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74  tatements execut
1080: 65 64 20 62 79 20 74 72 69 67 67 65 72 73 20 74  ed by triggers t
1090: 68 61 74 20 72 65 66 65 72 20 74 6f 0a 74 68 65  hat refer to.the
10a0: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e   table being ren
10b0: 61 6d 65 64 2c 20 74 68 65 73 65 20 61 72 65 20  amed, these are 
10c0: 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  not automaticall
10d0: 79 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 75 73  y modified to us
10e0: 65 20 74 68 65 20 6e 65 77 0a 74 61 62 6c 65 20  e the new.table 
10f0: 6e 61 6d 65 2e 20 49 66 20 74 68 69 73 20 69 73  name. If this is
1100: 20 72 65 71 75 69 72 65 64 2c 20 74 68 65 20 74   required, the t
1110: 72 69 67 67 65 72 73 20 6f 72 20 76 69 65 77 20  riggers or view 
1120: 64 65 66 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74  definitions must
1130: 20 62 65 0a 64 72 6f 70 70 65 64 20 61 6e 64 20   be.dropped and 
1140: 72 65 63 72 65 61 74 65 64 20 74 6f 20 75 73 65  recreated to use
1150: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 6e   the new table n
1160: 61 6d 65 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70  ame by hand..</p
1170: 3e 0a 0a 3c 70 3e 54 68 65 20 41 44 44 20 43 4f  >..<p>The ADD CO
1180: 4c 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75  LUMN syntax.is u
1190: 73 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77  sed to add a new
11a0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78   column to an ex
11b0: 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 54 68  isting table..Th
11c0: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20  e new column is 
11d0: 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20  always appended 
11e0: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
11f0: 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69  e list of existi
1200: 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20  ng columns..The 
1210: 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c  [column-def] rul
1220: 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68  e defines the ch
1230: 61 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66  aracteristics of
1240: 20 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e   the new column.
1250: 0a 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  .The new column 
1260: 6d 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66 20  may take any of 
1270: 74 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69 73  the forms permis
1280: 73 61 62 6c 65 20 69 6e 20 61 20 5b 43 52 45 41  sable in a [CREA
1290: 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d  TE TABLE].statem
12a0: 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f  ent, with the fo
12b0: 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74  llowing restrict
12c0: 69 6f 6e 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54  ions:.<ul>.<li>T
12d0: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
12e0: 74 20 68 61 76 65 20 61 20 50 52 49 4d 41 52 59  t have a PRIMARY
12f0: 20 4b 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63   KEY or UNIQUE c
1300: 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a  onstraint.</li>.
1310: 3c 6c 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d  <li>The column m
1320: 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65  ay not have a de
1330: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43  fault value of C
1340: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
1350: 52 45 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f  RENT_DATE .    o
1360: 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  r CURRENT_TIMEST
1370: 41 4d 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 49 66  AMP.</li>.<li>If
1380: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
1390: 74 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66  traint is specif
13a0: 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ied, then the co
13b0: 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61  lumn must have a
13c0: 0a 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c  .    default val
13d0: 75 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55  ue other than NU
13e0: 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68  LL..</ul>..<p>Th
13f0: 65 20 65 78 65 63 75 74 69 6f 6e 20 74 69 6d 65  e execution time
1400: 20 6f 66 20 74 68 65 20 41 4c 54 45 52 20 54 41   of the ALTER TA
1410: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  BLE command is i
1420: 6e 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a 74 68  ndependent of.th
1430: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61  e amount of data
1440: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
1450: 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20  The ALTER TABLE 
1460: 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61 73 20  command runs as 
1470: 71 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74 61 62  quickly.on a tab
1480: 6c 65 20 77 69 74 68 20 31 30 20 6d 69 6c 6c 69  le with 10 milli
1490: 6f 6e 20 72 6f 77 73 20 61 73 20 69 74 20 64 6f  on rows as it do
14a0: 65 73 20 6f 6e 20 61 20 74 61 62 6c 65 20 77 69  es on a table wi
14b0: 74 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e 0a 0a  th 1 row..</p>..
14c0: 3c 70 3e 41 66 74 65 72 20 41 44 44 20 43 4f 4c  <p>After ADD COL
14d0: 55 4d 4e 20 68 61 73 20 62 65 65 6e 20 72 75 6e  UMN has been run
14e0: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2c 20   on a database, 
14f0: 74 68 61 74 20 64 61 74 61 62 61 73 65 20 77 69  that database wi
1500: 6c 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64 61 62  ll not.be readab
1510: 6c 65 20 62 79 20 53 51 4c 69 74 65 20 76 65 72  le by SQLite ver
1520: 73 69 6f 6e 20 33 2e 31 2e 33 20 61 6e 64 20 65  sion 3.1.3 and e
1530: 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  arlier.</p>..<tc
1540: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1590: 23 0a 53 65 63 74 69 6f 6e 20 7b 41 4e 41 4c 59  #.Section {ANALY
15a0: 5a 45 7d 20 61 6e 61 6c 79 7a 65 20 41 4e 41 4c  ZE} analyze ANAL
15b0: 59 5a 45 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  YZE..BubbleDiagr
15c0: 61 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 20  am analyze-stmt 
15d0: 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  1.</tcl>..<p>The
15e0: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
15f0: 20 67 61 74 68 65 72 73 20 73 74 61 74 69 73 74   gathers statist
1600: 69 63 73 20 61 62 6f 75 74 20 69 6e 64 69 63 65  ics about indice
1610: 73 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 65  s and stores the
1620: 6d 0a 69 6e 20 61 20 73 70 65 63 69 61 6c 20 74  m.in a special t
1630: 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74  ables in the dat
1640: 61 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20  abase where the 
1650: 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
1660: 63 61 6e 20 75 73 65 0a 74 68 65 6d 20 74 6f 20  can use.them to 
1670: 68 65 6c 70 20 6d 61 6b 65 20 62 65 74 74 65 72  help make better
1680: 20 69 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 0a   index choices..
1690: 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20  If no arguments 
16a0: 61 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 69  are given, all i
16b0: 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c 20 61 74  ndices in all at
16c0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
16d0: 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20   are.analyzed.  
16e0: 49 66 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  If a database na
16f0: 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20 74  me is given as t
1700: 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 61 6c 6c  he argument, all
1710: 20 69 6e 64 69 63 65 73 0a 69 6e 20 74 68 61 74   indices.in that
1720: 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61 72   one database ar
1730: 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 49 66 20  e analyzed.  If 
1740: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
1750: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c 0a 74 68  a table name,.th
1760: 65 6e 20 6f 6e 6c 79 20 69 6e 64 69 63 65 73 20  en only indices 
1770: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1780: 74 68 61 74 20 6f 6e 65 20 74 61 62 6c 65 20 61  that one table a
1790: 72 65 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e  re analyzed.</p>
17a0: 0a 0a 3c 70 3e 54 68 65 20 69 6e 69 74 69 61 6c  ..<p>The initial
17b0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
17c0: 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69  stores all stati
17d0: 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c  stics in a singl
17e0: 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 3c 62  e.table named <b
17f0: 3e 73 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f 62  >sqlite_stat1</b
1800: 3e 2e 20 20 46 75 74 75 72 65 20 65 6e 68 61 6e  >.  Future enhan
1810: 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65 61  cements may crea
1820: 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74 61  te.additional ta
1830: 62 6c 65 73 20 77 69 74 68 20 74 68 65 20 73 61  bles with the sa
1840: 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e 20  me name pattern 
1850: 65 78 63 65 70 74 20 77 69 74 68 20 74 68 65 20  except with the 
1860: 22 31 22 0a 63 68 61 6e 67 65 64 20 74 6f 20 61  "1".changed to a
1870: 20 64 69 66 66 65 72 65 6e 74 20 64 69 67 69 74   different digit
1880: 2e 20 20 54 68 65 20 5b 44 52 4f 50 20 54 41 42  .  The [DROP TAB
1890: 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73  LE] command does
18a0: 0a 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65  .not work on the
18b0: 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31   <b>sqlite_stat1
18c0: 3c 2f 62 3e 20 74 61 62 6c 65 2c 0a 62 75 74 20  </b> table,.but 
18d0: 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  all the content 
18e0: 63 61 6e 20 62 65 20 72 65 6d 6f 76 65 64 20 75  can be removed u
18f0: 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54 45  sing the [DELETE
1900: 5d 20 63 6f 6d 6d 61 6e 64 2c 0a 77 68 69 63 68  ] command,.which
1910: 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 65 66   has the same ef
1920: 66 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  fect.</p>..<tcl>
1930: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
1980: 53 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20  Section {ATTACH 
1990: 44 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68  DATABASE} attach
19a0: 20 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44   ATTACH..BubbleD
19b0: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
19c0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
19d0: 54 68 65 20 41 54 54 41 43 48 20 44 41 54 41 42  The ATTACH DATAB
19e0: 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64  ASE statement ad
19f0: 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62  ds another datab
1a00: 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65  ase .file to the
1a10: 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73   current databas
1a20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49  e connection.  I
1a30: 66 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 63  f the filename c
1a40: 6f 6e 74 61 69 6e 73 20 0a 70 75 6e 63 74 75 61  ontains .punctua
1a50: 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 20  tion characters 
1a60: 69 74 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65  it must be quote
1a70: 64 2e 20 20 54 68 65 20 6e 61 6d 65 73 20 27 6d  d.  The names 'm
1a80: 61 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27  ain' and .'temp'
1a90: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61   refer to the ma
1aa0: 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  in database and 
1ab0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
1ac0: 64 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79  d for .temporary
1ad0: 20 74 61 62 6c 65 73 2e 20 20 54 68 65 73 65 20   tables.  These 
1ae0: 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 61 63 68  cannot be detach
1af0: 65 64 2e 20 20 41 74 74 61 63 68 65 64 20 64 61  ed.  Attached da
1b00: 74 61 62 61 73 65 73 20 0a 61 72 65 20 72 65 6d  tabases .are rem
1b10: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
1b20: 44 45 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e  DETACH] statemen
1b30: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63  t.</p>..<p>You c
1b40: 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 61 20 6e  annot create a n
1b50: 65 77 20 74 61 62 6c 65 20 77 69 74 68 20 74 68  ew table with th
1b60: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
1b70: 20 74 61 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74   table in .an at
1b80: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2c  tached database,
1b90: 20 62 75 74 20 79 6f 75 20 63 61 6e 20 61 74 74   but you can att
1ba0: 61 63 68 20 61 20 64 61 74 61 62 61 73 65 20 77  ach a database w
1bb0: 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61  hich contains.ta
1bc0: 62 6c 65 73 20 77 68 6f 73 65 20 6e 61 6d 65 73  bles whose names
1bd0: 20 61 72 65 20 64 75 70 6c 69 63 61 74 65 73 20   are duplicates 
1be0: 6f 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  of tables in the
1bf0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
1c00: 20 49 74 20 69 73 20 0a 61 6c 73 6f 20 70 65 72   It is .also per
1c10: 6d 69 73 73 69 62 6c 65 20 74 6f 20 61 74 74 61  missible to atta
1c20: 63 68 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ch the same data
1c30: 62 61 73 65 20 66 69 6c 65 20 6d 75 6c 74 69 70  base file multip
1c40: 6c 65 20 74 69 6d 65 73 2e 3c 2f 70 3e 0a 0a 3c  le times.</p>..<
1c50: 70 3e 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61  p>Tables in an a
1c60: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1c70: 20 63 61 6e 20 62 65 20 72 65 66 65 72 72 65 64   can be referred
1c80: 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79   to using the sy
1c90: 6e 74 61 78 20 0a 3c 69 3e 64 61 74 61 62 61 73  ntax .<i>databas
1ca0: 65 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d  e-name.table-nam
1cb0: 65 3c 2f 69 3e 2e 20 20 49 66 20 61 6e 20 61 74  e</i>.  If an at
1cc0: 74 61 63 68 65 64 20 74 61 62 6c 65 20 64 6f 65  tached table doe
1cd0: 73 6e 27 74 20 68 61 76 65 20 0a 61 20 64 75 70  sn't have .a dup
1ce0: 6c 69 63 61 74 65 20 74 61 62 6c 65 20 6e 61 6d  licate table nam
1cf0: 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
1d00: 74 61 62 61 73 65 2c 20 69 74 20 64 6f 65 73 6e  tabase, it doesn
1d10: 27 74 20 72 65 71 75 69 72 65 20 61 20 0a 64 61  't require a .da
1d20: 74 61 62 61 73 65 20 6e 61 6d 65 20 70 72 65 66  tabase name pref
1d30: 69 78 2e 20 20 57 68 65 6e 20 61 20 64 61 74 61  ix.  When a data
1d40: 62 61 73 65 20 69 73 20 61 74 74 61 63 68 65 64  base is attached
1d50: 2c 20 61 6c 6c 20 6f 66 20 69 74 73 20 0a 74 61  , all of its .ta
1d60: 62 6c 65 73 20 77 68 69 63 68 20 64 6f 6e 27 74  bles which don't
1d70: 20 68 61 76 65 20 64 75 70 6c 69 63 61 74 65 20   have duplicate 
1d80: 6e 61 6d 65 73 20 62 65 63 6f 6d 65 20 74 68 65  names become the
1d90: 20 64 65 66 61 75 6c 74 20 74 61 62 6c 65 0a 6f   default table.o
1da0: 66 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 41 6e  f that name.  An
1db0: 79 20 74 61 62 6c 65 73 20 6f 66 20 74 68 61 74  y tables of that
1dc0: 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20 61   name attached a
1dd0: 66 74 65 72 77 61 72 64 73 20 72 65 71 75 69 72  fterwards requir
1de0: 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 70  e the.database p
1df0: 72 65 66 69 78 2e 20 49 66 20 74 68 65 20 64 65  refix. If the de
1e00: 66 61 75 6c 74 20 74 61 62 6c 65 20 6f 66 20 61  fault table of a
1e10: 20 67 69 76 65 6e 20 6e 61 6d 65 20 69 73 20 64   given name is d
1e20: 65 74 61 63 68 65 64 2c 20 74 68 65 6e 0a 74 68  etached, then.th
1e30: 65 20 6c 61 73 74 20 74 61 62 6c 65 20 6f 66 20  e last table of 
1e40: 74 68 61 74 20 6e 61 6d 65 20 61 74 74 61 63 68  that name attach
1e50: 65 64 20 62 65 63 6f 6d 65 73 20 74 68 65 20 6e  ed becomes the n
1e60: 65 77 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a  ew default.</p>.
1e70: 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e  .<p>.Transaction
1e80: 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
1e90: 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64 61  iple attached da
1ea0: 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d  tabases are atom
1eb0: 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61  ic,.assuming tha
1ec0: 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
1ed0: 61 73 65 20 69 73 20 6e 6f 74 20 22 3a 6d 65 6d  ase is not ":mem
1ee0: 6f 72 79 3a 22 2e 20 20 49 66 20 74 68 65 20 6d  ory:".  If the m
1ef0: 61 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20  ain.database is 
1f00: 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 20  ":memory:" then 
1f10: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f  .transactions co
1f20: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f  ntinue to be ato
1f30: 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63 68 20  mic within each 
1f40: 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62  individual.datab
1f50: 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66  ase file. But if
1f60: 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74   the host comput
1f70: 65 72 20 63 72 61 73 68 65 73 20 69 6e 20 74 68  er crashes in th
1f80: 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43  e middle.of a [C
1f90: 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f  OMMIT] where two
1fa0: 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73   or more databas
1fb0: 65 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61  e files are upda
1fc0: 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f  ted,.some of tho
1fd0: 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67  se files might g
1fe0: 65 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77  et the changes w
1ff0: 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68  here others.migh
2000: 74 20 6e 6f 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  t not..</p>..<p>
2010: 54 68 65 72 65 20 69 73 20 61 20 63 6f 6d 70 69  There is a compi
2020: 6c 65 2d 74 69 6d 65 20 6c 69 6d 69 74 20 6f 66  le-time limit of
2030: 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54   [SQLITE_MAX_ATT
2040: 41 43 48 45 44 5d 0a 61 74 74 61 63 68 65 64 20  ACHED].attached 
2050: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 3c  database files.<
2060: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
2070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
20c0: 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41  on {BEGIN TRANSA
20d0: 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69  CTION} transacti
20e0: 6f 6e 20 7b 42 45 47 49 4e 20 43 4f 4d 4d 49 54  on {BEGIN COMMIT
20f0: 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62   ROLLBACK}..Bubb
2100: 6c 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d  leDiagram begin-
2110: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
2120: 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42  am commit-stmt.B
2130: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c  ubbleDiagram rol
2140: 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c  lback-stmt.</tcl
2150: 3e 0a 0a 3c 70 3e 0a 4e 6f 20 63 68 61 6e 67 65  >..<p>.No change
2160: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
2170: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78   the database ex
2180: 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72  cept within a tr
2190: 61 6e 73 61 63 74 69 6f 6e 2e 0a 41 6e 79 20 63  ansaction..Any c
21a0: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e  ommand that chan
21b0: 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ges the database
21c0: 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79   (basically, any
21d0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68   SQL command.oth
21e0: 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d  er than [SELECT]
21f0: 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  ) will automatic
2200: 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72 61  ally start a tra
2210: 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20  nsaction if.one 
2220: 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69  is not already i
2230: 6e 20 65 66 66 65 63 74 2e 20 20 41 75 74 6f 6d  n effect.  Autom
2240: 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64  atically started
2250: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72   transactions.ar
2260: 65 20 63 6f 6d 6d 69 74 74 65 64 20 61 74 20 74  e committed at t
2270: 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e 20 6f 66  he conclusion of
2280: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 0a 3c 2f   the command..</
2290: 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74  p>..<p>.Transact
22a0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72  ions can be star
22b0: 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69  ted manually usi
22c0: 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d  ng the BEGIN.com
22d0: 6d 61 6e 64 2e 20 20 53 75 63 68 20 74 72 61 6e  mand.  Such tran
22e0: 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79  sactions usually
22f0: 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20 74   persist until t
2300: 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20 6f  he next.COMMIT o
2310: 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  r ROLLBACK comma
2320: 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e 73  nd.  But a trans
2330: 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f  action will also
2340: 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74 68   .ROLLBACK if th
2350: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c  e database is cl
2360: 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65 72  osed or if an er
2370: 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20 74  ror occurs.and t
2380: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66  he ROLLBACK conf
2390: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
23a0: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
23b0: 63 69 66 69 65 64 2e 0a 53 65 65 20 74 68 65 20  cified..See the 
23c0: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
23d0: 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43   the [ON CONFLIC
23e0: 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72 20 61 64  T].clause for ad
23f0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
2400: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 52  tion about the R
2410: 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74  OLLBACK.conflict
2420: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2430: 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  rithm..</p>..<p>
2440: 0a 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e  .END TRANSACTION
2450: 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   is an alias for
2460: 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c   COMMIT..</p>..<
2470: 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 74  p>The optional t
2480: 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d 65 20  ransaction name 
2490: 69 73 20 69 67 6e 6f 72 65 64 2e 20 53 51 4c 69  is ignored. SQLi
24a0: 74 65 20 0a 64 6f 65 73 20 6e 6f 74 20 72 65 63  te .does not rec
24b0: 6f 67 6e 69 7a 65 20 6e 65 73 74 65 64 20 74 72  ognize nested tr
24c0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 74 20 74 68  ansactions at th
24d0: 69 73 20 74 69 6d 65 2e 0a 48 6f 77 65 76 65 72  is time..However
24e0: 2c 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  , future version
24f0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20  s of SQLite may 
2500: 62 65 20 65 6e 68 61 6e 63 65 64 20 74 6f 20 73  be enhanced to s
2510: 75 70 70 6f 72 74 20 6e 65 73 74 65 64 0a 74 72  upport nested.tr
2520: 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 20 74  ansactions and t
2530: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  he transaction n
2540: 61 6d 65 20 77 6f 75 6c 64 20 74 68 65 6e 20 62  ame would then b
2550: 65 63 6f 6d 65 20 73 69 67 6e 69 66 69 63 61 6e  ecome significan
2560: 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 20 61  t..Application a
2570: 72 65 20 61 64 76 69 73 65 64 20 6e 6f 74 20 74  re advised not t
2580: 6f 20 75 73 65 20 74 68 65 20 74 72 61 6e 73 61  o use the transa
2590: 63 74 69 6f 6e 20 6e 61 6d 65 20 69 6e 20 6f 72  ction name in or
25a0: 64 65 72 0a 74 6f 20 61 76 6f 69 64 20 66 75 74  der.to avoid fut
25b0: 75 72 65 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ure compatibilit
25c0: 79 20 70 72 6f 62 6c 65 6d 73 2e 3c 2f 70 3e 0a  y problems.</p>.
25d0: 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e  .<p>.Transaction
25e0: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
25f0: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
2600: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 54 68   exclusive.  .Th
2610: 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61  e default transa
2620: 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69  ction behavior i
2630: 73 20 64 65 66 65 72 72 65 64 2e 0a 44 65 66 65  s deferred..Defe
2640: 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20  rred means that 
2650: 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71  no locks are acq
2660: 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74  uired.on the dat
2670: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
2680: 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73  database is firs
2690: 74 20 61 63 63 65 73 73 65 64 2e 20 20 54 68 75  t accessed.  Thu
26a0: 73 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65  s with a.deferre
26b0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
26c0: 68 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65  he BEGIN stateme
26d0: 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e  nt itself does n
26e0: 6f 74 68 69 6e 67 2e 20 20 4c 6f 63 6b 73 0a 61  othing.  Locks.a
26f0: 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65 64 20  re not acquired 
2700: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
2710: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 6f 70  read or write op
2720: 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 66 69  eration.  The fi
2730: 72 73 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69  rst read.operati
2740: 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 64 61 74  on against a dat
2750: 61 62 61 73 65 20 63 72 65 61 74 65 73 20 61 20  abase creates a 
2760: 5b 53 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e  [SHARED] lock an
2770: 64 20 74 68 65 20 66 69 72 73 74 0a 77 72 69 74  d the first.writ
2780: 65 20 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61  e operation crea
2790: 74 65 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d  tes a [RESERVED]
27a0: 20 6c 6f 63 6b 2e 20 20 20 42 65 63 61 75 73 65   lock.   Because
27b0: 20 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e   the acquisition
27c0: 20 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66   of.locks is def
27d0: 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79  erred until they
27e0: 20 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20   are needed, it 
27f0: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2800: 20 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20   another.thread 
2810: 6f 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64  or process could
2820: 20 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61   create a separa
2830: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
2840: 6e 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20  nd write to.the 
2850: 64 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74  database after t
2860: 68 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20  he BEGIN on the 
2870: 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68  current thread h
2880: 61 73 20 65 78 65 63 75 74 65 64 2e 0a 49 66 20  as executed..If 
2890: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
28a0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
28b0: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
28c0: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
28d0: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
28e0: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
28f0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
2900: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
2910: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
2920: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
2930: 62 65 20 75 73 65 64 2e 20 20 41 66 74 65 72 20  be used.  After 
2940: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
2950: 45 2c 20 79 6f 75 20 61 72 65 20 67 75 61 72 61  E, you are guara
2960: 6e 74 65 65 64 20 74 68 61 74 0a 6e 6f 20 6f 74  nteed that.no ot
2970: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
2980: 6f 63 65 73 73 20 77 69 6c 6c 20 62 65 20 61 62  ocess will be ab
2990: 6c 65 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74  le to write to t
29a0: 68 65 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64  he database or.d
29b0: 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49  o a BEGIN IMMEDI
29c0: 41 54 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43  ATE or BEGIN EXC
29d0: 4c 55 53 49 56 45 2e 20 20 4f 74 68 65 72 20 70  LUSIVE.  Other p
29e0: 72 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e  rocesses can con
29f0: 74 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72  tinue.to read fr
2a00: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  om the database,
2a10: 20 68 6f 77 65 76 65 72 2e 20 20 41 6e 20 65 78   however.  An ex
2a20: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
2a30: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
2a40: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
2a50: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
2a60: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 41  ll databases.  A
2a70: 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43  fter a BEGIN.EXC
2a80: 4c 55 53 49 56 45 2c 20 79 6f 75 20 61 72 65 20  LUSIVE, you are 
2a90: 67 75 61 72 61 6e 74 65 65 64 20 74 68 61 74 20  guaranteed that 
2aa0: 6e 6f 20 6f 74 68 65 72 20 74 68 72 65 61 64 20  no other thread 
2ab0: 6f 72 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 0a  or process will.
2ac0: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
2ad0: 6f 72 20 77 72 69 74 65 20 74 68 65 20 64 61 74  or write the dat
2ae0: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
2af0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63  transaction is.c
2b00: 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c  omplete..</p>..<
2b10: 70 3e 0a 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f  p>.The COMMIT co
2b20: 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  mmand does not a
2b30: 63 74 75 61 6c 6c 79 20 70 65 72 66 6f 72 6d 20  ctually perform 
2b40: 61 20 63 6f 6d 6d 69 74 20 75 6e 74 69 6c 20 61  a commit until a
2b50: 6c 6c 0a 70 65 6e 64 69 6e 67 20 53 51 4c 20 63  ll.pending SQL c
2b60: 6f 6d 6d 61 6e 64 73 20 66 69 6e 69 73 68 2e 20  ommands finish. 
2b70: 20 54 68 75 73 20 69 66 20 6f 6e 65 20 6f 72 20   Thus if one or 
2b80: 6d 6f 72 65 20 5b 53 45 4c 45 43 54 5d 20 73 74  more [SELECT] st
2b90: 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 69 6e 20  atements.are in 
2ba0: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 70 72  the middle of pr
2bb0: 6f 63 65 73 73 69 6e 67 20 61 6e 64 20 61 20 43  ocessing and a C
2bc0: 4f 4d 4d 49 54 20 69 73 20 65 78 65 63 75 74 65  OMMIT is execute
2bd0: 64 2c 20 74 68 65 20 63 6f 6d 6d 69 74 0a 77 69  d, the commit.wi
2be0: 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  ll not actually 
2bf0: 6f 63 63 75 72 20 75 6e 74 69 6c 20 61 6c 6c 20  occur until all 
2c00: 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
2c10: 6e 74 73 20 68 61 76 65 20 62 65 65 6e 0a 5b 73  nts have been.[s
2c20: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c  qlite3_reset() |
2c30: 20 72 65 73 65 74 5d 20 6f 72 20 5b 73 71 6c 69   reset] or [sqli
2c40: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c  te3_finalize() |
2c50: 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 0a 3c 2f 70   finalized]..</p
2c60: 3e 0a 0a 3c 70 3e 0a 41 6e 20 61 74 74 65 6d 70  >..<p>.An attemp
2c70: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
2c80: 4d 49 54 20 6d 69 67 68 74 20 72 65 73 75 6c 74  MIT might result
2c90: 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42   in an [SQLITE_B
2ca0: 55 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65  USY] return code
2cb0: 2e 0a 54 68 69 73 20 69 6e 64 69 63 61 74 65 73  ..This indicates
2cc0: 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 74 68   that another th
2cd0: 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20  read or process 
2ce0: 68 61 64 20 61 20 0a 5b 73 68 61 72 65 64 20 6c  had a .[shared l
2cf0: 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61  ock] on the data
2d00: 62 61 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e  base.that preven
2d10: 74 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ted the database
2d20: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61   from being upda
2d30: 74 65 64 2e 20 20 57 68 65 6e 20 43 4f 4d 4d 49  ted.  When COMMI
2d40: 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a  T fails in this.
2d50: 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63  way, the transac
2d60: 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74  tion remains act
2d70: 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d  ive and the COMM
2d80: 49 54 20 63 61 6e 20 62 65 20 72 65 74 72 69 65  IT can be retrie
2d90: 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68  d later.after th
2da0: 65 20 72 65 61 64 65 72 20 68 61 73 20 68 61 64  e reader has had
2db0: 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65   a chance to cle
2dc0: 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65  ar..</p>..<h3>Re
2dd0: 73 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73  sponse To Errors
2de0: 20 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61   Within A Transa
2df0: 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  ction</h3>..<p>I
2e00: 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73 20  f certain kinds 
2e10: 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72 20  of errors occur 
2e20: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
2e30: 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61  tion, the.transa
2e40: 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79  ction may or may
2e50: 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20 62   not be rolled b
2e60: 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ack automaticall
2e70: 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20 74  y.  The.errors t
2e80: 68 61 74 20 63 61 75 73 65 20 74 68 65 20 62 65  hat cause the be
2e90: 68 61 76 69 6f 72 20 69 6e 63 6c 75 64 65 3a 3c  havior include:<
2ea0: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b  /p>..<ul>.<li> [
2eb0: 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61  SQLITE_FULL]: da
2ec0: 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66  tabase or disk f
2ed0: 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ull.<li> [SQLITE
2ee0: 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f  _IOERR]: disk I/
2ef0: 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51  O error.<li> [SQ
2f00: 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61  LITE_BUSY]: data
2f10: 62 61 73 65 20 69 6e 20 75 73 65 20 62 79 20 61  base in use by a
2f20: 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c  nother process.<
2f30: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45  li> [SQLITE_NOME
2f40: 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72  M]: out or memor
2f50: 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  y.<li> [SQLITE_I
2f60: 4e 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63 65  NTERRUPT]: proce
2f70: 73 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69  ssing [sqlite3_i
2f80: 6e 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72 75  nterrupt|interru
2f90: 70 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61 70  pted].     by ap
2fa0: 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65 73  plication reques
2fb0: 74 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 0a 46 6f 72  t.</ul>..<p>.For
2fc0: 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65 72   all of these er
2fd0: 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74 74  rors, SQLite att
2fe0: 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75  empts to undo ju
2ff0: 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74 65  st the one state
3000: 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72 6b  ment.it was work
3010: 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65  ing on and leave
3020: 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70 72   changes from pr
3030: 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ior statements w
3040: 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20 74  ithin the.same t
3050: 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61 63  ransaction intac
3060: 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77  t and continue w
3070: 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ith the transact
3080: 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20 0a  ion.  However, .
3090: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
30a0: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
30b0: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74   evaluated and t
30c0: 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63  he point at whic
30d0: 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75  h the.error occu
30e0: 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  rs, it might be 
30f0: 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 53 51  necessary for SQ
3100: 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  Lite to rollback
3110: 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20   and.cancel the 
3120: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 6e  transaction.  An
3130: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e   application can
3140: 20 74 65 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72   tell which.cour
3150: 73 65 20 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c  se of action SQL
3160: 69 74 65 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e  ite took by usin
3170: 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67  g the.[sqlite3_g
3180: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d  et_autocommit()]
3190: 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65   C-language inte
31a0: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  rface.</p>..<p>I
31b0: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
31c0: 20 74 68 61 74 20 61 70 70 6c 69 63 61 74 69 6f   that applicatio
31d0: 6e 73 20 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  ns respond to th
31e0: 65 20 65 72 72 6f 72 73 0a 6c 69 73 74 65 64 20  e errors.listed 
31f0: 61 62 6f 76 65 20 62 79 20 65 78 70 6c 69 63 69  above by explici
3200: 74 6c 79 20 69 73 73 75 69 6e 67 20 61 20 52 4f  tly issuing a RO
3210: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20  LLBACK command. 
3220: 20 49 66 20 74 68 65 20 0a 74 72 61 6e 73 61 63   If the .transac
3230: 74 69 6f 6e 20 68 61 73 20 61 6c 72 65 61 64 79  tion has already
3240: 20 62 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63   been rolled bac
3250: 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  k automatically.
3260: 62 79 20 74 68 65 20 65 72 72 6f 72 20 72 65 73  by the error res
3270: 70 6f 6e 73 65 2c 20 74 68 65 6e 20 74 68 65 20  ponse, then the 
3280: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
3290: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
32a0: 61 6e 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f  an.error, but no
32b0: 20 68 61 72 6d 20 69 73 20 63 61 75 73 65 64 20   harm is caused 
32c0: 62 79 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70  by this.</p>..<p
32d0: 3e 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73  >Future versions
32e0: 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20 65   of SQLite may e
32f0: 78 74 65 6e 64 20 74 68 65 20 6c 69 73 74 20 6f  xtend the list o
3300: 66 20 65 72 72 6f 72 73 20 77 68 69 63 68 0a 6d  f errors which.m
3310: 69 67 68 74 20 63 61 75 73 65 20 61 75 74 6f 6d  ight cause autom
3320: 61 74 69 63 20 74 72 61 6e 73 61 63 74 69 6f 6e  atic transaction
3330: 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75   rollback.  Futu
3340: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  re versions of.S
3350: 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e  QLite might chan
3360: 67 65 20 74 68 65 20 65 72 72 6f 72 20 72 65 73  ge the error res
3370: 70 6f 6e 73 65 2e 20 20 49 6e 20 70 61 72 74 69  ponse.  In parti
3380: 63 75 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63 68  cular, we may.ch
3390: 6f 6f 73 65 20 74 6f 20 73 69 6d 70 6c 69 66 79  oose to simplify
33a0: 20 74 68 65 20 69 6e 74 65 72 66 61 63 65 20 69   the interface i
33b0: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
33c0: 73 20 6f 66 20 53 51 4c 69 74 65 20 62 79 0a 63  s of SQLite by.c
33d0: 61 75 73 69 6e 67 20 74 68 65 20 65 72 72 6f 72  ausing the error
33e0: 73 20 61 62 6f 76 65 20 74 6f 20 66 6f 72 63 65  s above to force
33f0: 20 61 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   an unconditiona
3400: 6c 20 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a  l rollback.</p>.
3410: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
3420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3460: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63  ######.Section c
3470: 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b  omment comment {
3480: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 73  comment comments
3490: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
34a0: 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a   comment-syntax.
34b0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 65  </tcl>..<p>Comme
34c0: 6e 74 73 20 61 72 65 6e 27 74 20 53 51 4c 20 63  nts aren't SQL c
34d0: 6f 6d 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e  ommands, but can
34e0: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68   occur within th
34f0: 65 20 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75  e text of.SQL qu
3500: 65 72 69 65 73 20 70 61 73 73 65 64 20 74 6f 20  eries passed to 
3510: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
3520: 5f 76 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74  _v2()] and relat
3530: 65 64 20 69 6e 74 65 72 66 61 63 65 73 2e 2e 0a  ed interfaces...
3540: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 0a 74 72  Comments are .tr
3550: 65 61 74 65 64 20 61 73 20 77 68 69 74 65 73 70  eated as whitesp
3560: 61 63 65 20 62 79 20 74 68 65 20 70 61 72 73 65  ace by the parse
3570: 72 2e 20 20 54 68 65 79 20 63 61 6e 20 62 65 67  r.  They can beg
3580: 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  in anywhere whit
3590: 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66  espace .can be f
35a0: 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ound, including 
35b0: 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f  inside expressio
35c0: 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c  ns that span mul
35d0: 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70  tiple lines..</p
35e0: 3e 0a 0a 3c 70 3e 20 53 51 4c 20 63 6f 6d 6d 65  >..<p> SQL comme
35f0: 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20 74  nts begin with t
3600: 77 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22  wo consecutive "
3610: 2d 22 20 63 68 61 72 61 63 74 65 72 73 20 28 41  -" characters (A
3620: 53 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65  SCII 0x2d).and e
3630: 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20  xtend up to and 
3640: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65  including the ne
3650: 78 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61  xt newline chara
3660: 63 74 65 72 20 28 41 53 43 49 49 20 30 78 30 61  cter (ASCII 0x0a
3670: 29 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65  ).or until the e
3680: 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69  nd of input, whi
3690: 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72  chever comes fir
36a0: 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 43 20 63  st.</p>..<p> C c
36b0: 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 73 70 61 6e  omments can span
36c0: 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 6c   any number of l
36d0: 69 6e 65 73 2e 20 20 43 2d 73 74 79 6c 65 20 63  ines.  C-style c
36e0: 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69  omments begin.wi
36f0: 74 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65  th "/*" and exte
3700: 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63  nd up to and inc
3710: 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20  luding the next 
3720: 22 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70  "*/" character p
3730: 61 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65  air.or until the
3740: 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77   end of input, w
3750: 68 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66  hichever comes f
3760: 69 72 73 74 2e 20 20 43 2d 73 74 79 6c 65 20 63  irst.  C-style c
3770: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
3780: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
3790: 20 3c 2f 70 3e 0a 0a 3c 70 3e 20 43 6f 6d 6d 65   </p>..<p> Comme
37a0: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
37b0: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
37c0: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
37d0: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
37e0: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
37f0: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
3800: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
3810: 65 6e 74 73 2e 0a 43 6f 6d 6d 65 6e 74 73 20 64  ents..Comments d
3820: 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e  o not nest..</p>
3830: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
3840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3880: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
3890: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63  {CREATE INDEX} c
38a0: 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45  reateindex {{CRE
38b0: 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75 62  ATE INDEX}}..Bub
38c0: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
38d0: 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 42  e-index-stmt 1.B
38e0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 64  ubbleDiagram ind
38f0: 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74 63  exed-column.</tc
3900: 6c 3e 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41 54  l>..<p>The CREAT
3910: 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20  E INDEX command 
3920: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
3930: 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45  keywords "CREATE
3940: 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64   INDEX" followed
3950: 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  .by the name of 
3960: 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74  the new index, t
3970: 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c  he keyword "ON",
3980: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70   the name of a p
3990: 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65  reviously.create
39a0: 64 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  d table that is 
39b0: 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61  to be indexed, a
39c0: 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  nd a parenthesiz
39d0: 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73  ed list of names
39e0: 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of.columns in t
39f0: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72  he table that ar
3a00: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 69  e used for the i
3a10: 6e 64 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c  ndex key.</p>..<
3a20: 70 3e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61  p>Each column na
3a30: 6d 65 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77  me can be follow
3a40: 65 64 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ed by one of the
3a50: 20 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22   "ASC" or "DESC"
3a60: 20 6b 65 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64   keywords.to ind
3a70: 69 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72  icate sort order
3a80: 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65  .  The sort orde
3a90: 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  r may or may not
3aa0: 20 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65   be ignored depe
3ab0: 6e 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74  nding.on the dat
3ac0: 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61  abase file forma
3ad0: 74 2e 20 20 54 68 65 20 22 6c 65 67 61 63 79 22  t.  The "legacy"
3ae0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 67 6e   file format ign
3af0: 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20  ores index.sort 
3b00: 6f 72 64 65 72 2e 20 20 54 68 65 20 64 65 73 63  order.  The desc
3b10: 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 69 6c  ending index fil
3b20: 65 20 66 6f 72 6d 61 74 20 74 61 6b 65 73 20 69  e format takes i
3b30: 6e 64 65 78 20 73 6f 72 74 20 6f 72 64 65 72 0a  ndex sort order.
3b40: 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2e 20 20 4f  into account.  O
3b50: 6e 6c 79 20 63 6f 70 69 65 73 20 6f 66 20 53 51  nly copies of SQ
3b60: 4c 69 74 65 20 6e 65 77 65 72 20 74 68 61 6e 20  Lite newer than 
3b70: 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 20  [version 3.3.0] 
3b80: 0a 28 72 65 6c 65 61 73 65 64 20 6f 6e 20 32 30  .(released on 20
3b90: 30 36 2d 30 31 2d 31 30 29 20 61 72 65 20 61 62  06-01-10) are ab
3ba0: 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64  le to understand
3bb0: 20 74 68 65 20 6e 65 77 65 72 20 64 65 73 63 65   the newer desce
3bc0: 6e 64 69 6e 67 0a 69 6e 64 65 78 20 66 69 6c 65  nding.index file
3bd0: 20 66 6f 72 6d 61 74 20 61 6e 64 20 73 6f 20 66   format and so f
3be0: 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  or compatibility
3bf0: 20 77 69 74 68 20 6f 6c 64 65 72 20 76 65 72 73   with older vers
3c00: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 2c 20  ions of.SQLite, 
3c10: 74 68 65 20 6c 65 67 61 63 79 20 66 69 6c 65 20  the legacy file 
3c20: 66 6f 72 6d 61 74 20 69 73 20 67 65 6e 65 72 61  format is genera
3c30: 74 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ted by default. 
3c40: 20 55 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79   Use the.[legacy
3c50: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72  _file_format] pr
3c60: 61 67 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74  agma to modify t
3c70: 68 69 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64  his behavior and
3c80: 20 67 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61   generate.databa
3c90: 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
3ca0: 20 6e 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d   newer file form
3cb0: 61 74 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  at.  Future vers
3cc0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d  ions of SQLite.m
3cd0: 61 79 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65  ay begin to gene
3ce0: 72 61 74 65 20 74 68 65 20 6e 65 77 65 72 20 66  rate the newer f
3cf0: 69 6c 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65  ile format by de
3d00: 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  fault.</p>..<p>T
3d10: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
3d20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68  e following each
3d30: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66   column name def
3d40: 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67  ines a collating
3d50: 0a 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66  .sequence used f
3d60: 6f 72 20 74 65 78 74 20 65 6e 74 69 72 65 73 20  or text entires 
3d70: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20  in that column. 
3d80: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
3d90: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
3da0: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
3db0: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
3dc0: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
3dd0: 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  n in the.[CREATE
3de0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
3df0: 74 2e 20 20 4f 72 20 69 66 20 6e 6f 20 63 6f 6c  t.  Or if no col
3e00: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
3e10: 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66  is otherwise def
3e20: 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d  ined,.the built-
3e30: 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74  in BINARY collat
3e40: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
3e50: 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  used.</p>..<p>Th
3e60: 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74  ere are no arbit
3e70: 72 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74  rary limits on t
3e80: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64  he number of ind
3e90: 69 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65  ices that can be
3ea0: 0a 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73  .attached to a s
3eb0: 69 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 54 68  ingle table.  Th
3ec0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
3ed0: 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  mns in an index 
3ee0: 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 5b  is .limited to [
3ef0: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
3f00: 4e 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74  N].</p>..<p>If t
3f10: 68 65 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72  he UNIQUE keywor
3f20: 64 20 61 70 70 65 61 72 73 20 62 65 74 77 65 65  d appears betwee
3f30: 6e 20 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44  n CREATE and IND
3f40: 45 58 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74  EX then duplicat
3f50: 65 0a 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e.index entries 
3f60: 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e  are not allowed.
3f70: 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    Any attempt to
3f80: 20 69 6e 73 65 72 74 20 61 20 64 75 70 6c 69 63   insert a duplic
3f90: 61 74 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72  ate entry.will r
3fa0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f  esult in an erro
3fb0: 72 2e 20 20 46 6f 72 20 74 68 65 20 70 75 72 70  r.  For the purp
3fc0: 6f 73 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69  oses of unique i
3fd0: 6e 64 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c  ndices, all NULL
3fe0: 20 76 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73   values.are cons
3ff0: 69 64 65 72 65 64 20 74 6f 20 64 69 66 66 65 72  idered to differ
4000: 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68  ent from all oth
4010: 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  er NULL values a
4020: 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e 69 71  nd are thus uniq
4030: 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ue.</p>..<p>The 
4040: 74 65 78 74 0a 6f 66 20 65 61 63 68 20 43 52 45  text.of each CRE
4050: 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ATE INDEX statem
4060: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ent is stored in
4070: 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d   the <b>sqlite_m
4080: 61 73 74 65 72 3c 2f 62 3e 0a 6f 72 20 3c 62 3e  aster</b>.or <b>
4090: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
40a0: 65 72 3c 2f 62 3e 20 74 61 62 6c 65 2c 20 64 65  er</b> table, de
40b0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
40c0: 65 72 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69  er the table.bei
40d0: 6e 67 20 69 6e 64 65 78 65 64 20 69 73 20 74 65  ng indexed is te
40e0: 6d 70 6f 72 61 72 79 2e 20 20 45 76 65 72 79 20  mporary.  Every 
40f0: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
4100: 65 20 69 73 20 6f 70 65 6e 65 64 2c 0a 61 6c 6c  e is opened,.all
4110: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74   CREATE INDEX st
4120: 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 72 65 61  atements.are rea
4130: 64 20 66 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71  d from the <b>sq
4140: 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 20  lite_master</b> 
4150: 74 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74  table and used t
4160: 6f 20 72 65 67 65 6e 65 72 61 74 65 0a 53 51 4c  o regenerate.SQL
4170: 69 74 65 27 73 20 69 6e 74 65 72 6e 61 6c 20 72  ite's internal r
4180: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
4190: 20 74 68 65 20 69 6e 64 65 78 20 6c 61 79 6f 75   the index layou
41a0: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68  t.</p>..<p>If th
41b0: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f  e optional IF NO
41c0: 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20  T EXISTS clause 
41d0: 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 61  is present and a
41e0: 6e 6f 74 68 65 72 20 69 6e 64 65 78 0a 77 69 74  nother index.wit
41f0: 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
4200: 61 6c 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  aleady exists, t
4210: 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  hen this command
4220: 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
4230: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 64 65 78 65  .</p>..<p>Indexe
4240: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69  s are removed wi
4250: 74 68 20 74 68 65 20 3c 61 20 68 72 65 66 3d 22  th the <a href="
4260: 6c 61 6e 67 5f 64 72 6f 70 69 6e 64 65 78 2e 68  lang_dropindex.h
4270: 74 6d 6c 22 3e 44 52 4f 50 20 49 4e 44 45 58 3c  tml">DROP INDEX<
4280: 2f 61 3e 20 0a 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  /a> .command.</p
4290: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
42a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42e0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
42f0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20   {CREATE TABLE} 
4300: 7b 63 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b  {createtable} {{
4310: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a  CREATE TABLE}}..
4320: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72  BubbleDiagram cr
4330: 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74 20  eate-table-stmt 
4340: 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  1.BubbleDiagram 
4350: 63 6f 6c 75 6d 6e 2d 64 65 66 0a 42 75 62 62 6c  column-def.Bubbl
4360: 65 44 69 61 67 72 61 6d 20 74 79 70 65 2d 6e 61  eDiagram type-na
4370: 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  me.BubbleDiagram
4380: 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69   column-constrai
4390: 6e 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  nt.BubbleDiagram
43a0: 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e   table-constrain
43b0: 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  t.BubbleDiagram 
43c0: 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75  foreign-key-clau
43d0: 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20  se.</tcl>..<p>A 
43e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
43f0: 74 65 6d 65 6e 74 20 69 73 20 62 61 73 69 63 61  tement is basica
4400: 6c 6c 79 20 74 68 65 20 6b 65 79 77 6f 72 64 73  lly the keywords
4410: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 22 0a   "CREATE TABLE".
4420: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20  followed by the 
4430: 6e 61 6d 65 20 6f 66 20 61 20 6e 65 77 20 74 61  name of a new ta
4440: 62 6c 65 20 61 6e 64 20 61 20 70 61 72 65 6e 74  ble and a parent
4450: 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
4460: 63 6f 6c 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f  column.definitio
4470: 6e 73 20 61 6e 64 20 63 6f 6e 73 74 72 61 69 6e  ns and constrain
4480: 74 73 2e 20 20 0a 54 61 62 6c 65 73 20 6e 61 6d  ts.  .Tables nam
4490: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
44a0: 74 68 20 22 3c 62 3e 73 71 6c 69 74 65 5f 3c 2f  th "<b>sqlite_</
44b0: 62 3e 22 20 61 72 65 20 72 65 73 65 72 76 65 64  b>" are reserved
44c0: 0a 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20  .for use by the 
44d0: 65 6e 67 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  engine.</p>..<p>
44e0: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66 69  Each column defi
44f0: 6e 69 74 69 6f 6e 20 69 73 20 74 68 65 20 6e 61  nition is the na
4500: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
4510: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
4520: 0a 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68  .datatype for th
4530: 61 74 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20  at column, then 
4540: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70 74 69  one or more opti
4550: 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 20 63 6f 6e 73  onal column cons
4560: 74 72 61 69 6e 74 73 2e 0a 54 68 65 20 64 61 74  traints..The dat
4570: 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 63 6f  atype for the co
4580: 6c 75 6d 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65  lumn does not re
4590: 73 74 72 69 63 74 20 77 68 61 74 20 64 61 74 61  strict what data
45a0: 20 6d 61 79 20 62 65 20 70 75 74 0a 69 6e 20 74   may be put.in t
45b0: 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 53 65 65 20  hat column..See 
45c0: 3c 61 20 68 72 65 66 3d 22 64 61 74 61 74 79 70  <a href="datatyp
45d0: 65 33 2e 68 74 6d 6c 22 3e 44 61 74 61 74 79 70  e3.html">Datatyp
45e0: 65 73 20 49 6e 20 53 51 4c 69 74 65 20 56 65 72  es In SQLite Ver
45f0: 73 69 6f 6e 20 33 3c 2f 61 3e 20 66 6f 72 0a 61  sion 3</a> for.a
4600: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
4610: 61 74 69 6f 6e 2e 0a 54 68 65 20 55 4e 49 51 55  ation..The UNIQU
4620: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 61 75  E constraint cau
4630: 73 65 73 20 61 6e 20 75 6e 69 71 75 65 20 69 6e  ses an unique in
4640: 64 65 78 20 74 6f 20 62 65 20 63 72 65 61 74 65  dex to be create
4650: 64 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69  d on the specifi
4660: 65 64 0a 63 6f 6c 75 6d 6e 73 2e 20 20 41 6c 6c  ed.columns.  All
4670: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
4680: 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66 66   considered diff
4690: 65 72 65 6e 74 20 66 72 6f 6d 20 65 61 63 68 20  erent from each 
46a0: 6f 74 68 65 72 20 61 6e 64 20 66 72 6f 6d 0a 61  other and from.a
46b0: 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20  ll other values 
46c0: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 20  for the purpose 
46d0: 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 75  of determining u
46e0: 6e 69 71 75 65 6e 65 73 73 2c 20 68 65 6e 63 65  niqueness, hence
46f0: 20 61 20 55 4e 49 51 55 45 0a 63 6f 6c 75 6d 6e   a UNIQUE.column
4700: 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 6d 75 6c   may contain mul
4710: 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 77 69  tiple entries wi
4720: 74 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  th the value of 
4730: 4e 55 4c 4c 2e 0a 54 68 65 20 43 4f 4c 4c 41 54  NULL..The COLLAT
4740: 45 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  E clause specifi
4750: 65 73 20 77 68 61 74 20 74 65 78 74 20 0a 5b 63  es what text .[c
4760: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
4770: 6e 5d 20 74 6f 20 75 73 65 20 77 68 65 6e 20 63  n] to use when c
4780: 6f 6d 70 61 72 69 6e 67 20 74 65 78 74 20 65 6e  omparing text en
4790: 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 6f  tries for the co
47a0: 6c 75 6d 6e 2e 20 20 0a 54 68 65 20 62 75 69 6c  lumn.  .The buil
47b0: 74 2d 69 6e 20 5b 42 49 4e 41 52 59 5d 20 63 6f  t-in [BINARY] co
47c0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
47d0: 20 69 73 20 75 73 65 64 20 62 79 20 64 65 66 61   is used by defa
47e0: 75 6c 74 2e 0a 3c 70 3e 0a 54 68 65 20 44 45 46  ult..<p>.The DEF
47f0: 41 55 4c 54 20 63 6f 6e 73 74 72 61 69 6e 74 20  AULT constraint 
4800: 73 70 65 63 69 66 69 65 73 20 61 20 64 65 66 61  specifies a defa
4810: 75 6c 74 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ult value to use
4820: 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20 5b   when doing an [
4830: 49 4e 53 45 52 54 5d 2e 0a 54 68 65 20 76 61 6c  INSERT]..The val
4840: 75 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2c 20  ue may be NULL, 
4850: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
4860: 74 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 53  t or a number. S
4870: 74 61 72 74 69 6e 67 20 77 69 74 68 0a 5b 76 65  tarting with.[ve
4880: 72 73 69 6f 6e 20 33 2e 31 2e 30 5d 2c 0a 74 68  rsion 3.1.0],.th
4890: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
48a0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20  may also be one 
48b0: 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 20 63  of the special c
48c0: 61 73 65 2d 69 6e 64 65 70 65 6e 64 61 6e 74 0a  ase-independant.
48d0: 6b 65 79 77 6f 72 64 73 20 43 55 52 52 45 4e 54  keywords CURRENT
48e0: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
48f0: 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54  ATE or CURRENT_T
4900: 49 4d 45 53 54 41 4d 50 2e 20 49 66 20 74 68 65  IMESTAMP. If the
4910: 20 76 61 6c 75 65 20 69 73 0a 4e 55 4c 4c 2c 20   value is.NULL, 
4920: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e  a string constan
4930: 74 20 6f 72 20 6e 75 6d 62 65 72 2c 20 69 74 20  t or number, it 
4940: 69 73 20 6c 69 74 65 72 61 6c 6c 79 20 69 6e 73  is literally ins
4950: 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 63  erted into the c
4960: 6f 6c 75 6d 6e 0a 77 68 65 6e 65 76 65 72 20 61  olumn.whenever a
4970: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
4980: 6e 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  nt that does not
4990: 20 73 70 65 63 69 66 79 20 61 20 76 61 6c 75 65   specify a value
49a0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
49b0: 69 73 0a 65 78 65 63 75 74 65 64 2e 20 49 66 20  is.executed. If 
49c0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 43 55 52  the value is CUR
49d0: 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45  RENT_TIME, CURRE
49e0: 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45  NT_DATE or CURRE
49f0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
4a00: 65 6e 0a 74 68 65 20 63 75 72 72 65 6e 74 20 55  en.the current U
4a10: 54 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  TC date and/or t
4a20: 69 6d 65 20 69 73 20 69 6e 73 65 72 74 65 64 20  ime is inserted 
4a30: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 73  into the columns
4a40: 2e 20 46 6f 72 0a 43 55 52 52 45 4e 54 5f 54 49  . For.CURRENT_TI
4a50: 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74 20 69  ME, the format i
4a60: 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 46 6f 72 20  s HH:MM:SS. For 
4a70: 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 59 59  CURRENT_DATE, YY
4a80: 59 59 2d 4d 4d 2d 44 44 2e 20 54 68 65 20 66 6f  YY-MM-DD. The fo
4a90: 72 6d 61 74 0a 66 6f 72 20 43 55 52 52 45 4e 54  rmat.for CURRENT
4aa0: 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59  _TIMESTAMP is "Y
4ab0: 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
4ac0: 53 53 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  SS"..</p>..<tcl>
4ad0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77 69  hd_fragment rowi
4ae0: 64 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  d {INTEGER PRIMA
4af0: 52 59 20 4b 45 59 7d 20 52 4f 57 49 44 3c 2f 74  RY KEY} ROWID</t
4b00: 63 6c 3e 0a 3c 70 3e 53 70 65 63 69 66 79 69 6e  cl>.<p>Specifyin
4b10: 67 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  g a PRIMARY KEY 
4b20: 6e 6f 72 6d 61 6c 6c 79 20 6a 75 73 74 20 63 72  normally just cr
4b30: 65 61 74 65 73 20 61 20 55 4e 49 51 55 45 20 69  eates a UNIQUE i
4b40: 6e 64 65 78 0a 6f 6e 20 74 68 65 20 63 6f 72 72  ndex.on the corr
4b50: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
4b60: 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  s.  However, if 
4b70: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 6f  primary key is o
4b80: 6e 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  n a single colum
4b90: 6e 0a 74 68 61 74 20 68 61 73 20 64 61 74 61 74  n.that has datat
4ba0: 79 70 65 20 49 4e 54 45 47 45 52 2c 20 74 68 65  ype INTEGER, the
4bb0: 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73  n that column is
4bc0: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
4bd0: 0a 61 73 20 74 68 65 20 61 63 74 75 61 6c 20 6b  .as the actual k
4be0: 65 79 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65  ey of the B-Tree
4bf0: 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e 20   for the table. 
4c00: 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74   This means that
4c10: 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 6d 61 79 20   the column.may 
4c20: 6f 6e 6c 79 20 68 6f 6c 64 20 75 6e 69 71 75 65  only hold unique
4c30: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2e   integer values.
4c40: 20 20 28 45 78 63 65 70 74 20 66 6f 72 20 74 68    (Except for th
4c50: 69 73 20 6f 6e 65 20 63 61 73 65 2c 0a 53 51 4c  is one case,.SQL
4c60: 69 74 65 20 69 67 6e 6f 72 65 73 20 74 68 65 20  ite ignores the 
4c70: 64 61 74 61 74 79 70 65 20 73 70 65 63 69 66 69  datatype specifi
4c80: 63 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  cation of column
4c90: 73 20 61 6e 64 20 61 6c 6c 6f 77 73 0a 61 6e 79  s and allows.any
4ca0: 20 6b 69 6e 64 20 6f 66 20 64 61 74 61 20 74 6f   kind of data to
4cb0: 20 62 65 20 70 75 74 20 69 6e 20 61 20 63 6f 6c   be put in a col
4cc0: 75 6d 6e 20 72 65 67 61 72 64 6c 65 73 73 20 6f  umn regardless o
4cd0: 66 20 69 74 73 20 64 65 63 6c 61 72 65 64 0a 64  f its declared.d
4ce0: 61 74 61 74 79 70 65 2e 29 20 20 49 66 20 61 20  atatype.)  If a 
4cf0: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 68  table does not h
4d00: 61 76 65 20 61 6e 20 49 4e 54 45 47 45 52 20 50  ave an INTEGER P
4d10: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
4d20: 6e 2c 0a 74 68 65 6e 20 74 68 65 20 42 2d 54 72  n,.then the B-Tr
4d30: 65 65 20 6b 65 79 20 77 69 6c 6c 20 62 65 20 61  ee key will be a
4d40: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67   automatically g
4d50: 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65 72  enerated integer
4d60: 2e 0a 54 68 65 20 42 2d 54 72 65 65 20 6b 65 79  ..The B-Tree key
4d70: 20 66 6f 72 20 61 20 72 6f 77 20 63 61 6e 20 61   for a row can a
4d80: 6c 77 61 79 73 20 62 65 20 61 63 63 65 73 73 65  lways be accesse
4d90: 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74  d using one of t
4da0: 68 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 73  he.special names
4db0: 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c   "<b>ROWID</b>",
4dc0: 20 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f   "<b>OID</b>", o
4dd0: 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62  r "<b>_ROWID_</b
4de0: 3e 22 2e 0a 54 68 69 73 20 69 73 20 74 72 75 65  >"..This is true
4df0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
4e00: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
4e10: 65 72 65 20 69 73 20 61 6e 20 49 4e 54 45 47 45  ere is an INTEGE
4e20: 52 0a 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  R.PRIMARY KEY.  
4e30: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
4e40: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20 63 61  RY KEY column ca
4e50: 6e 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65 20 74  n also include t
4e60: 68 65 0a 6b 65 79 77 6f 72 64 20 5b 41 55 54 4f  he.keyword [AUTO
4e70: 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20 54 68 65  INCREMENT].  The
4e80: 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d   [AUTOINCREMENT]
4e90: 20 6b 65 79 77 6f 72 64 20 6d 6f 64 69 66 69 65   keyword modifie
4ea0: 64 20 74 68 65 20 77 61 79 0a 74 68 61 74 20 42  d the way.that B
4eb0: 2d 54 72 65 65 20 6b 65 79 73 20 61 72 65 20 61  -Tree keys are a
4ec0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
4ed0: 65 72 61 74 65 64 2e 20 20 41 64 64 69 74 69 6f  erated.  Additio
4ee0: 6e 61 6c 20 64 65 74 61 69 6c 0a 6f 6e 20 61 75  nal detail.on au
4ef0: 74 6f 6d 61 74 69 63 20 42 2d 54 72 65 65 20 6b  tomatic B-Tree k
4f00: 65 79 20 67 65 6e 65 72 61 74 69 6f 6e 20 69 73  ey generation is
4f10: 20 61 76 61 69 6c 61 62 6c 65 0a 3c 61 20 68 72   available.<a hr
4f20: 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c  ef="autoinc.html
4f30: 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e  ">separately</a>
4f40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 63 63 6f 72 64  .</p>..<p>Accord
4f50: 69 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20 73  ing to the SQL s
4f60: 74 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52 59  tandard, PRIMARY
4f70: 20 4b 45 59 20 73 68 6f 75 6c 64 20 69 6d 70 6c   KEY should impl
4f80: 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 55 6e 66 6f  y NOT NULL..Unfo
4f90: 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74  rtunately, due t
4fa0: 6f 20 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e  o a long-standin
4fb0: 67 20 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67  g coding oversig
4fc0: 68 74 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ht, this is not 
4fd0: 0a 74 68 65 20 63 61 73 65 20 69 6e 20 53 51 4c  .the case in SQL
4fe0: 69 74 65 2e 20 20 53 51 4c 69 74 65 20 61 6c 6c  ite.  SQLite all
4ff0: 6f 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a  ows NULL values.
5000: 69 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  in a PRIMARY KEY
5010: 20 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f 75   column.  We cou
5020: 6c 64 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65  ld change SQLite
5030: 20 74 6f 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74   to conform to t
5040: 68 65 0a 73 74 61 6e 64 61 72 64 20 28 61 6e 64  he.standard (and
5050: 20 77 65 20 6d 69 67 68 74 20 64 6f 20 73 6f 20   we might do so 
5060: 69 6e 20 74 68 65 20 66 75 74 75 72 65 29 2c 20  in the future), 
5070: 62 75 74 20 62 79 20 74 68 65 20 74 69 6d 65 20  but by the time 
5080: 74 68 65 0a 6f 76 65 72 73 69 67 68 74 20 77 61  the.oversight wa
5090: 73 20 64 69 73 63 6f 76 65 72 65 64 2c 20 53 51  s discovered, SQ
50a0: 4c 69 74 65 20 77 61 73 20 69 6e 20 73 75 63 68  Lite was in such
50b0: 20 77 69 64 65 20 75 73 65 20 74 68 61 74 20 77   wide use that w
50c0: 65 20 66 65 61 72 65 64 0a 62 72 65 61 6b 69 6e  e feared.breakin
50d0: 67 20 6c 65 67 61 63 79 20 63 6f 64 65 20 69 66  g legacy code if
50e0: 20 77 65 20 66 69 78 65 64 20 74 68 65 20 70 72   we fixed the pr
50f0: 6f 62 6c 65 6d 2e 20 20 53 6f 20 66 6f 72 20 6e  oblem.  So for n
5100: 6f 77 20 77 65 20 68 61 76 65 0a 63 68 6f 73 65  ow we have.chose
5110: 6e 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20 61 6c  n to continue al
5120: 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73 20 69 6e 20  lowing NULLs in 
5130: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
5140: 6d 6e 73 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20  mns..Developers 
5150: 73 68 6f 75 6c 64 20 62 65 20 61 77 61 72 65 2c  should be aware,
5160: 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 20 77   however, that w
5170: 65 20 6d 61 79 20 63 68 61 6e 67 65 20 53 51 4c  e may change SQL
5180: 69 74 65 20 74 6f 0a 63 6f 6e 66 6f 72 6d 20 74  ite to.conform t
5190: 6f 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  o the SQL standa
51a0: 72 64 20 69 6e 20 66 75 74 75 72 65 20 61 6e 64  rd in future and
51b0: 20 73 68 6f 75 6c 64 20 64 65 73 69 67 6e 20 6e   should design n
51c0: 65 77 20 70 72 6f 67 72 61 6d 73 0a 61 63 63 6f  ew programs.acco
51d0: 72 64 69 6e 67 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70  rdingly.</p>..<p
51e0: 3e 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f  >If the "TEMP" o
51f0: 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65  r "TEMPORARY" ke
5200: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20  yword occurs in 
5210: 62 65 74 77 65 65 6e 20 22 43 52 45 41 54 45 22  between "CREATE"
5220: 0a 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68 65  .and "TABLE" the
5230: 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  n the table that
5240: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
5250: 6e 6c 79 20 76 69 73 69 62 6c 65 0a 77 69 74 68  nly visible.with
5260: 69 6e 20 74 68 61 74 20 73 61 6d 65 20 64 61 74  in that same dat
5270: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
5280: 0a 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69  .and is automati
5290: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68  cally deleted wh
52a0: 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  en.the database 
52b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
52c0: 6f 73 65 64 2e 20 20 41 6e 79 20 69 6e 64 69 63  osed.  Any indic
52d0: 65 73 20 63 72 65 61 74 65 64 20 6f 6e 20 61 20  es created on a 
52e0: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 0a  temporary table.
52f0: 61 72 65 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61  are also tempora
5300: 72 79 2e 20 20 54 65 6d 70 6f 72 61 72 79 20 74  ry.  Temporary t
5310: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
5320: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
5330: 61 0a 73 65 70 61 72 61 74 65 20 66 69 6c 65 20  a.separate file 
5340: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 74 68  distinct from th
5350: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
5360: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49  file.</p>..<p> I
5370: 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  f a &lt;database
5380: 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65  -name&gt; is spe
5390: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
53a0: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
53b0: 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20  d in .the named 
53c0: 64 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20  database. It is 
53d0: 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63  an error to spec
53e0: 69 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64  ify both a &lt;d
53f0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
5400: 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65  .and the TEMP ke
5410: 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68  yword, unless th
5420: 65 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  e &lt;database-n
5430: 61 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70  ame&gt; is "temp
5440: 22 2e 20 49 66 20 6e 6f 0a 64 61 74 61 62 61 73  ". If no.databas
5450: 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  e name is specif
5460: 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d  ied, and the TEM
5470: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
5480: 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 74 61   present,.the ta
5490: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
54a0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
54b0: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ase.</p>..<p>The
54c0: 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c   optional [confl
54d0: 69 63 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c  ict clause] foll
54e0: 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74  owing each const
54f0: 72 61 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65  raint.allows the
5500: 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f   specification o
5510: 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  f an alternative
5520: 20 64 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61   default.constra
5530: 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
5540: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
5550: 6d 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74  m for that const
5560: 72 61 69 6e 74 2e 0a 54 68 65 20 64 65 66 61 75  raint..The defau
5570: 6c 74 20 69 73 20 61 62 6f 72 74 20 41 42 4f 52  lt is abort ABOR
5580: 54 2e 20 20 44 69 66 66 65 72 65 6e 74 20 63 6f  T.  Different co
5590: 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68 69 6e  nstraints within
55a0: 20 74 68 65 20 73 61 6d 65 0a 74 61 62 6c 65 20   the same.table 
55b0: 6d 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65  may have differe
55c0: 6e 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c  nt default confl
55d0: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
55e0: 6c 67 6f 72 69 74 68 6d 73 2e 0a 49 66 20 61 6e  lgorithms..If an
55f0: 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50   [INSERT] or [UP
5600: 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 20  DATE] statement 
5610: 73 70 65 63 69 66 69 65 73 20 61 20 64 69 66 66  specifies a diff
5620: 65 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 0a 72  erent conflict.r
5630: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
5640: 74 68 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 61  thm, then that a
5650: 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
5660: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65   in place of the
5670: 0a 64 65 66 61 75 6c 74 20 61 6c 67 6f 72 69 74  .default algorit
5680: 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
5690: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
56a0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 53 65 65 20   statement..See 
56b0: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
56c0: 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed.[ON CONFLICT]
56d0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
56e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
56f0: 0a 0a 3c 70 3e 43 48 45 43 4b 20 63 6f 6e 73 74  ..<p>CHECK const
5700: 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
5710: 72 74 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73  rted as of [vers
5720: 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 20 50 72 69  ion 3.3.0].  Pri
5730: 6f 72 0a 74 6f 20 76 65 72 73 69 6f 6e 20 33 2e  or.to version 3.
5740: 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74  3.0, CHECK const
5750: 72 61 69 6e 74 73 20 77 65 72 65 20 70 61 72 73  raints were pars
5760: 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72  ed but not enfor
5770: 63 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ced.</p>..<p>The
5780: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
5790: 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73  ns in a table is
57a0: 20 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65 0a   limited by the.
57b0: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55  [SQLITE_MAX_COLU
57c0: 4d 4e 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  MN] compile-time
57d0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 41 20 73 69   parameter..A si
57e0: 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61  ngle row of a ta
57f0: 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65  ble cannot store
5800: 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49   more than.[SQLI
5810: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62  TE_MAX_LENGTH] b
5820: 79 74 65 73 20 6f 66 20 64 61 74 61 2e 0a 42 6f  ytes of data..Bo
5830: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
5840: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
5850: 64 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  d at runtime usi
5860: 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
5870: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
5880: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a  nterface.</p>...
5890: 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 54 41  <p>The CREATE TA
58a0: 42 4c 45 20 41 53 20 66 6f 72 6d 20 64 65 66 69  BLE AS form defi
58b0: 6e 65 73 20 74 68 65 20 74 61 62 6c 65 20 74 6f  nes the table to
58c0: 20 62 65 0a 74 68 65 20 72 65 73 75 6c 74 20 73   be.the result s
58d0: 65 74 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20  et of a query.  
58e0: 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  The names of the
58f0: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 61   table columns a
5900: 72 65 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  re.the names of 
5910: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  the columns in t
5920: 68 65 20 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a  he result.</p>..
5930: 3c 70 3e 54 68 65 20 74 65 78 74 0a 6f 66 20 65  <p>The text.of e
5940: 61 63 68 20 43 52 45 41 54 45 20 54 41 42 4c 45  ach CREATE TABLE
5950: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
5960: 6f 72 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73  ored in the <b>s
5970: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e  qlite_master</b>
5980: 0a 74 61 62 6c 65 2e 20 20 45 76 65 72 79 20 74  .table.  Every t
5990: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
59a0: 20 69 73 20 6f 70 65 6e 65 64 2c 20 61 6c 6c 20   is opened, all 
59b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
59c0: 74 65 6d 65 6e 74 73 0a 61 72 65 20 72 65 61 64  tements.are read
59d0: 20 66 72 6f 6d 20 74 68 65 20 3c 62 3e 73 71 6c   from the <b>sql
59e0: 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74  ite_master</b> t
59f0: 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74 6f  able and used to
5a00: 20 72 65 67 65 6e 65 72 61 74 65 0a 53 51 4c 69   regenerate.SQLi
5a10: 74 65 27 73 20 69 6e 74 65 72 6e 61 6c 20 72 65  te's internal re
5a20: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
5a30: 74 68 65 20 74 61 62 6c 65 20 6c 61 79 6f 75 74  the table layout
5a40: 2e 0a 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61  ..If the origina
5a50: 6c 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 61 20  l command was a 
5a60: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20  CREATE TABLE AS 
5a70: 74 68 65 6e 20 74 68 65 6e 20 61 6e 20 65 71 75  then then an equ
5a80: 69 76 61 6c 65 6e 74 0a 43 52 45 41 54 45 20 54  ivalent.CREATE T
5a90: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
5aa0: 73 20 73 79 6e 74 68 65 73 69 7a 65 64 20 61 6e  s synthesized an
5ab0: 64 20 73 74 6f 72 65 20 69 6e 20 3c 62 3e 73 71  d store in <b>sq
5ac0: 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a  lite_master</b>.
5ad0: 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20  in place of the 
5ae0: 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64  original command
5af0: 2e 0a 54 68 65 20 74 65 78 74 20 6f 66 20 43 52  ..The text of CR
5b00: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
5b10: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 20  ABLE statements 
5b20: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
5b30: 65 0a 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d 70  e.<b>sqlite_temp
5b40: 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62 6c  _master</b> tabl
5b50: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74  e..</p>..<p>If t
5b60: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 4e  he optional IF N
5b70: 4f 54 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  OT EXISTS clause
5b80: 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20   is present and 
5b90: 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 0a 77 69  another table.wi
5ba0: 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
5bb0: 20 61 6c 65 61 64 79 20 65 78 69 73 74 73 2c 20   aleady exists, 
5bc0: 74 68 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e  then this comman
5bd0: 64 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  d becomes a no-o
5be0: 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 61 62 6c 65  p.</p>..<p>Table
5bf0: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73  s are removed us
5c00: 69 6e 67 20 74 68 65 20 3c 61 20 68 72 65 66 3d  ing the <a href=
5c10: 22 6c 61 6e 67 5f 64 72 6f 70 74 61 62 6c 65 2e  "lang_droptable.
5c20: 68 74 6d 6c 22 3e 44 52 4f 50 20 54 41 42 4c 45  html">DROP TABLE
5c30: 3c 2f 61 3e 20 0a 73 74 61 74 65 6d 65 6e 74 2e  </a> .statement.
5c40: 20 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23    </p>..<tcl>.##
5c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5c90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
5ca0: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49  tion {CREATE TRI
5cb0: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
5cc0: 67 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49  ger {{CREATE TRI
5cd0: 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  GGER}}..BubbleDi
5ce0: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69  agram create-tri
5cf0: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
5d00: 6c 3e 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41 54  l>..<p>The CREAT
5d10: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
5d20: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  ent is used to a
5d30: 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74  dd triggers to t
5d40: 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68  he .database sch
5d50: 65 6d 61 2e 20 54 72 69 67 67 65 72 73 20 61 72  ema. Triggers ar
5d60: 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72 61  e database opera
5d70: 74 69 6f 6e 73 20 28 74 68 65 20 3c 69 3e 74 72  tions (the <i>tr
5d80: 69 67 67 65 72 2d 61 63 74 69 6f 6e 3c 2f 69 3e  igger-action</i>
5d90: 29 20 0a 74 68 61 74 20 61 72 65 20 61 75 74 6f  ) .that are auto
5da0: 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f 72  matically perfor
5db0: 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65 63 69  med when a speci
5dc0: 66 69 65 64 20 64 61 74 61 62 61 73 65 20 65 76  fied database ev
5dd0: 65 6e 74 20 28 74 68 65 0a 3c 69 3e 64 61 74 61  ent (the.<i>data
5de0: 62 61 73 65 2d 65 76 65 6e 74 3c 2f 69 3e 29 20  base-event</i>) 
5df0: 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c  occurs.  </p>..<
5e00: 70 3e 41 20 74 72 69 67 67 65 72 20 6d 61 79 20  p>A trigger may 
5e10: 62 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20  be specified to 
5e20: 66 69 72 65 20 77 68 65 6e 65 76 65 72 20 61 20  fire whenever a 
5e30: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
5e40: 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20  T],.or [UPDATE] 
5e50: 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20  of a.particular 
5e60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
5e70: 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76  ccurs, or whenev
5e80: 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f  er an [UPDATE] o
5e90: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 73 70  f one or more.sp
5ea0: 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20  ecified columns 
5eb0: 6f 66 20 61 20 74 61 62 6c 65 20 61 72 65 20 75  of a table are u
5ec0: 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  pdated.</p>..<p>
5ed0: 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c  At this time SQL
5ee0: 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c  ite supports onl
5ef0: 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74  y FOR EACH ROW t
5f00: 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52  riggers, not FOR
5f10: 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20   EACH.STATEMENT 
5f20: 74 72 69 67 67 65 72 73 2e 20 48 65 6e 63 65 20  triggers. Hence 
5f30: 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69  explicitly speci
5f40: 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52  fying FOR EACH R
5f50: 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20  OW is optional. 
5f60: 20 46 4f 52 0a 45 41 43 48 20 52 4f 57 20 69 6d   FOR.EACH ROW im
5f70: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53  plies that the S
5f80: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
5f90: 65 63 69 66 69 65 64 20 61 73 20 3c 69 3e 74 72  ecified as <i>tr
5fa0: 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e 20  igger-steps</i> 
5fb0: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
5fc0: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
5fd0: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
5fe0: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
5ff0: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
6000: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
6010: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
6020: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
6030: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
6040: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42   fire.</p>..<p>B
6050: 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61  oth the WHEN cla
6060: 75 73 65 20 61 6e 64 20 74 68 65 20 3c 69 3e 74  use and the <i>t
6070: 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e  rigger-steps</i>
6080: 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65 6d   may access elem
6090: 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f 77  ents of .the row
60a0: 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2c   being inserted,
60b0: 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64 61   deleted or upda
60c0: 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72 65  ted using refere
60d0: 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  nces of the form
60e0: 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e   ."NEW.<i>column
60f0: 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22  -name</i>" and "
6100: 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  OLD.<i>column-na
6110: 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c  me</i>", where.<
6120: 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69  i>column-name</i
6130: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
6140: 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74   a column from t
6150: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
6160: 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73 73  e trigger.is ass
6170: 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 4f 4c  ociated with. OL
6180: 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65  D and NEW refere
6190: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  nces may only be
61a0: 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72   used in trigger
61b0: 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67 65 72 2d  s on.<i>trigger-
61c0: 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f 72 20 77  event</i>s for w
61d0: 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65  hich they are re
61e0: 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f  levant, as follo
61f0: 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  ws:</p>..<table 
6200: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
6210: 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74  ding=10>.<tr>.<t
6220: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
6230: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64  lign="right" wid
6240: 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54  th=120><i>INSERT
6250: 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  </i></td>.<td va
6260: 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72  lign="top">NEW r
6270: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
6280: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
6290: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
62a0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
62b0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
62c0: 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  UPDATE</i></td>.
62d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
62e0: 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66  >NEW and OLD ref
62f0: 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69  erences are vali
6300: 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  d</td>.</tr>.<tr
6310: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
6320: 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
6330: 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45   width=120><i>DE
6340: 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74  LETE</i></td>.<t
6350: 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f  d valign="top">O
6360: 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72  LD references ar
6370: 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74  e valid</td>.</t
6380: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e  r>.</table>.</p>
6390: 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45 4e 20 63  ..<p>If a WHEN c
63a0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
63b0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
63c0: 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
63d0: 61 73 20 0a 3c 69 3e 74 72 69 67 67 65 72 2d 73  as .<i>trigger-s
63e0: 74 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f 6e 6c  teps</i> are onl
63f0: 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 72  y executed for r
6400: 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
6410: 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69 73  e WHEN.clause is
6420: 20 74 72 75 65 2e 20 49 66 20 6e 6f 20 57 48 45   true. If no WHE
6430: 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70  N clause is supp
6440: 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74  lied, the SQL st
6450: 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78 65  atements.are exe
6460: 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f  cuted for all ro
6470: 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ws.</p>..<p>The 
6480: 73 70 65 63 69 66 69 65 64 20 3c 69 3e 74 72 69  specified <i>tri
6490: 67 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20 64 65  gger-time</i> de
64a0: 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74 68  termines when th
64b0: 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74 65  e <i>trigger-ste
64c0: 70 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65 20 65  ps</i>.will be e
64d0: 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65  xecuted relative
64e0: 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f   to the insertio
64f0: 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  n, modification 
6500: 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68  or removal of th
6510: 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77  e.associated row
6520: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 5b 4f 4e  .</p>..<p>An [ON
6530: 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73   CONFLICT] claus
6540: 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69  e may be specifi
6550: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
6560: 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e   [UPDATE] or [IN
6570: 53 45 52 54 5d 0a 3c 69 3e 74 72 69 67 67 65 72  SERT].<i>trigger
6580: 2d 73 74 65 70 3c 2f 69 3e 2e 20 48 6f 77 65 76  -step</i>. Howev
6590: 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e  er if an [ON CON
65a0: 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69 73  FLICT] clause is
65b0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
65c0: 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74 65  rt of .the state
65d0: 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65  ment causing the
65e0: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
65f0: 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6e 66  , then this conf
6600: 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f  lict handling.po
6610: 6c 69 63 79 20 69 73 20 75 73 65 64 20 69 6e 73  licy is used ins
6620: 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 72  tead.</p>..<p>Tr
6630: 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d  iggers are autom
6640: 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65 64  atically dropped
6650: 20 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   when the table 
6660: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61  that they are .a
6670: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 69  ssociated with i
6680: 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a 0a  s dropped.</p>..
6690: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
66a0: 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67   instead_of_trig
66b0: 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d  ger {INSTEAD OF}
66c0: 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69   {INSTEAD OF tri
66d0: 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  gger}</tcl>.<p>T
66e0: 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 20 63  riggers may be c
66f0: 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77 73  reated on [views
6700: 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f 72  ], as well as or
6710: 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 62  dinary tables, b
6720: 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e 53  y.specifying INS
6730: 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20 43  TEAD OF in the C
6740: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73 74  REATE TRIGGER st
6750: 61 74 65 6d 65 6e 74 2e 20 0a 49 66 20 6f 6e 65  atement. .If one
6760: 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45   or more ON INSE
6770: 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72  RT, ON DELETE.or
6780: 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67 67   ON UPDATE trigg
6790: 65 72 73 20 61 72 65 20 64 65 66 69 6e 65 64 20  ers are defined 
67a0: 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20  on a view, then 
67b0: 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72  it is not an.err
67c0: 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  or to execute an
67d0: 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20   INSERT, DELETE 
67e0: 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
67f0: 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c  ent on the view,
6800: 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20   .respectively. 
6810: 54 68 65 72 65 61 66 74 65 72 2c 0a 65 78 65 63  Thereafter,.exec
6820: 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c  uting an INSERT,
6830: 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54   DELETE or UPDAT
6840: 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63 61  E on the view ca
6850: 75 73 65 73 20 74 68 65 20 61 73 73 6f 63 69 61  uses the associa
6860: 74 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f 20  ted.triggers to 
6870: 66 69 72 65 2e 20 54 68 65 20 72 65 61 6c 20 74  fire. The real t
6880: 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67  ables underlying
6890: 20 74 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f   the view are no
68a0: 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65  t modified.(exce
68b0: 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c  pt possibly expl
68c0: 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69  icitly, by a tri
68d0: 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f  gger program).</
68e0: 70 3e 0a 0a 3c 70 3e 3c 62 3e 45 78 61 6d 70 6c  p>..<p><b>Exampl
68f0: 65 3a 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 41  e:</b></p>..<p>A
6900: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75 73  ssuming that cus
6910: 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61 72  tomer records ar
6920: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
6930: 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62 6c  "customers" tabl
6940: 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64 65  e, and.that orde
6950: 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73 74  r records are st
6960: 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72 64  ored in the "ord
6970: 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65 20  ers" table, the 
6980: 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67 65  following trigge
6990: 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20 61  r.ensures that a
69a0: 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72  ll associated or
69b0: 64 65 72 73 20 61 72 65 20 72 65 64 69 72 65 63  ders are redirec
69c0: 74 65 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f  ted when a custo
69d0: 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20  mer changes.his 
69e0: 6f 72 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c  or her address:<
69f0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c  /p>..<tcl>Exampl
6a00: 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47 47  e {.CREATE TRIGG
6a10: 45 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f 6d  ER update_custom
6a20: 65 72 5f 61 64 64 72 65 73 73 20 55 50 44 41 54  er_address UPDAT
6a30: 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e 20  E OF address ON 
6a40: 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45 47  customers .  BEG
6a50: 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f 72  IN.    UPDATE or
6a60: 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73  ders SET address
6a70: 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20 57   = new.address W
6a80: 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61  HERE customer_na
6a90: 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20  me = old.name;. 
6aa0: 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c   END;.}</tcl>..<
6ab0: 70 3e 57 69 74 68 20 74 68 69 73 20 74 72 69 67  p>With this trig
6ac0: 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65  ger installed, e
6ad0: 78 65 63 75 74 69 6e 67 20 74 68 65 20 73 74 61  xecuting the sta
6ae0: 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63  tement:</p>..<tc
6af0: 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41  l>Example {.UPDA
6b00: 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45 54  TE customers SET
6b10: 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61   address = '1 Ma
6b20: 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e 61  in St.' WHERE na
6b30: 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73  me = 'Jack Jones
6b40: 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63  ';.}</tcl>..<p>c
6b50: 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77  auses the follow
6b60: 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d 61  ing to be automa
6b70: 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64  tically executed
6b80: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
6b90: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64  ple {.UPDATE ord
6ba0: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
6bb0: 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57  = '1 Main St.' W
6bc0: 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61  HERE customer_na
6bd0: 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73  me = 'Jack Jones
6be0: 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e  ';.}</tcl>..<p>N
6bf0: 6f 74 65 20 74 68 61 74 20 63 75 72 72 65 6e 74  ote that current
6c00: 6c 79 2c 20 74 72 69 67 67 65 72 73 20 6d 61 79  ly, triggers may
6c10: 20 62 65 68 61 76 65 20 6f 64 64 6c 79 20 77 68   behave oddly wh
6c20: 65 6e 20 63 72 65 61 74 65 64 20 6f 6e 20 74 61  en created on ta
6c30: 62 6c 65 73 0a 20 20 77 69 74 68 20 5b 49 4e 54  bles.  with [INT
6c40: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
6c50: 5d 20 66 69 65 6c 64 73 2e 20 49 66 20 61 20 42  ] fields. If a B
6c60: 45 46 4f 52 45 20 74 72 69 67 67 65 72 20 70 72  EFORE trigger pr
6c70: 6f 67 72 61 6d 20 6d 6f 64 69 66 69 65 73 20 74  ogram modifies t
6c80: 68 65 20 0a 20 20 5b 49 4e 54 45 47 45 52 20 50  he .  [INTEGER P
6c90: 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 69 65 6c  RIMARY KEY] fiel
6ca0: 64 20 6f 66 20 61 20 72 6f 77 20 74 68 61 74 20  d of a row that 
6cb0: 77 69 6c 6c 20 62 65 20 73 75 62 73 65 71 75 65  will be subseque
6cc0: 6e 74 6c 79 20 75 70 64 61 74 65 64 20 62 79 20  ntly updated by 
6cd0: 74 68 65 0a 20 20 73 74 61 74 65 6d 65 6e 74 20  the.  statement 
6ce0: 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20  that causes the 
6cf0: 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2c  trigger to fire,
6d00: 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
6d10: 20 6d 61 79 20 6e 6f 74 20 6f 63 63 75 72 2e 20   may not occur. 
6d20: 0a 20 20 54 68 65 20 77 6f 72 6b 61 72 6f 75 6e  .  The workaroun
6d30: 64 20 69 73 20 74 6f 20 64 65 63 6c 61 72 65 20  d is to declare 
6d40: 74 68 65 20 74 61 62 6c 65 20 77 69 74 68 20 61  the table with a
6d50: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
6d60: 75 6d 6e 20 69 6e 73 74 65 61 64 0a 20 20 6f 66  umn instead.  of
6d70: 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49   an [INTEGER PRI
6d80: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e  MARY KEY] column
6d90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 73 70 65 63  .</p>..<p>A spec
6da0: 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ial SQL function
6db0: 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20   RAISE() may be 
6dc0: 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72  used within a tr
6dd0: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 0a 77  igger-program,.w
6de0: 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
6df0: 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c  g syntax</p> ..<
6e00: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
6e10: 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e  m raise-function
6e20: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 68 65 6e 20  </tcl>..<p>When 
6e30: 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  one of the first
6e40: 20 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20   three forms is 
6e50: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72  called during tr
6e60: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78  igger-program.ex
6e70: 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65  ecution, the spe
6e80: 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  cified [ON CONFL
6e90: 49 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20  ICT] processing 
6ea0: 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69  is performed.(ei
6eb0: 74 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c  ther ABORT, FAIL
6ec0: 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e   or ROLLBACK) an
6ed0: 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 71 75  d the current qu
6ee0: 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a  ery terminates..
6ef0: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  An error code of
6f00: 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   [SQLITE_CONSTRA
6f10: 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64  INT] is returned
6f20: 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74   to the applicat
6f30: 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20  ion,.along with 
6f40: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 72  the specified er
6f50: 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e  ror message.</p>
6f60: 0a 0a 3c 70 3e 57 68 65 6e 20 52 41 49 53 45 28  ..<p>When RAISE(
6f70: 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65  IGNORE) is calle
6f80: 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  d, the remainder
6f90: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
6fa0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
6fb0: 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74  .the statement t
6fc0: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74  hat caused the t
6fd0: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74  rigger program t
6fe0: 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e  o execute and an
6ff0: 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69  y subsequent.tri
7000: 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68  gger programs th
7010: 61 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e  at would of been
7020: 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62   executed are ab
7030: 61 6e 64 6f 6e 65 64 2e 20 4e 6f 20 64 61 74 61  andoned. No data
7040: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65  base.changes are
7050: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 49   rolled back.  I
7060: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
7070: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
7080: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
7090: 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69 74  to execute is it
70a0: 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74  self part of a t
70b0: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20  rigger program, 
70c0: 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67 65  then that trigge
70d0: 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65  r program.resume
70e0: 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74  s execution at t
70f0: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
7100: 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c  the next step..<
7110: 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73  /p>..<p>Triggers
7120: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
7130: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49  ng the [DROP TRI
7140: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
7150: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
7160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
71a0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
71b0: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45  tion {CREATE VIE
71c0: 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20  W} {createview} 
71d0: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 76  {{CREATE VIEW} v
71e0: 69 65 77 20 76 69 65 77 73 7d 0a 0a 42 75 62 62  iew views}..Bubb
71f0: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
7200: 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f 74  -view-stmt 1.</t
7210: 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41  cl>..<p>The CREA
7220: 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20  TE VIEW command 
7230: 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74  assigns a name t
7240: 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64  o a pre-packaged
7250: 20 0a 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f   .<a href="lang_
7260: 73 65 6c 65 63 74 2e 68 74 6d 6c 22 3e 53 45 4c  select.html">SEL
7270: 45 43 54 3c 2f 61 3e 0a 73 74 61 74 65 6d 65 6e  ECT</a>.statemen
7280: 74 2e 20 20 4f 6e 63 65 20 74 68 65 20 76 69 65  t.  Once the vie
7290: 77 20 69 73 20 63 72 65 61 74 65 64 2c 20 69 74  w is created, it
72a0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
72b0: 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a  the FROM clause.
72c0: 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45  of another [SELE
72d0: 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  CT] in place of 
72e0: 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f  a table name..</
72f0: 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 22 54  p>..<p>If the "T
7300: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
7310: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
7320: 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 22 43  rs in between "C
7330: 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49 45 57  REATE".and "VIEW
7340: 22 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  " then the view 
7350: 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
7360: 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20  is only visible 
7370: 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73 20 74  to the.process t
7380: 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65 20 64  hat opened the d
7390: 61 74 61 62 61 73 65 20 61 6e 64 20 69 73 20 61  atabase and is a
73a0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
73b0: 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64 61  eted when.the da
73c0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
73d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20 61 20  .</p>..<p> If a 
73e0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
73f0: 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69  e&gt; is specifi
7400: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76 69 65  ed, then the vie
7410: 77 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  w is created in 
7420: 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62  .the named datab
7430: 61 73 65 2e 20 49 74 20 69 73 20 61 6e 20 65 72  ase. It is an er
7440: 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62  ror to specify b
7450: 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61  oth a &lt;databa
7460: 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20  se-name&gt;.and 
7470: 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64  the TEMP keyword
7480: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26 6c 74  , unless the &lt
7490: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
74a0: 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20 49 66  t; is "temp". If
74b0: 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e 61 6d   no.database nam
74c0: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
74d0: 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79  and the TEMP key
74e0: 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73  word is not pres
74f0: 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65 20 69  ent,.the table i
7500: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
7510: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 3c   main database.<
7520: 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e  /p>..<p>You cann
7530: 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e  ot [DELETE], [IN
7540: 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54  SERT], or [UPDAT
7550: 45 5d 20 61 20 76 69 65 77 2e 20 20 56 69 65 77  E] a view.  View
7560: 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20  s are read-only 
7570: 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 48 6f 77  .in SQLite.  How
7580: 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61  ever, in many ca
7590: 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73 65 20  ses you can use 
75a0: 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46 20 74  an.[INSTEAD OF t
75b0: 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65 20 76  rigger] on the v
75c0: 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73  iew to accomplis
75d0: 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68 69 6e  h .the same thin
75e0: 67 2e 20 20 56 69 65 77 73 20 61 72 65 20 72 65  g.  Views are re
75f0: 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68 65 20  moved .with the 
7600: 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d  [DROP VIEW] comm
7610: 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  and.</p>..<tcl>.
7620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
7670: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
7680: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63  IRTUAL TABLE} {c
7690: 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43 52 45  reatevtab} {{CRE
76a0: 41 54 45 20 56 49 52 54 55 41 4c 5f 54 41 42 4c  ATE VIRTUAL_TABL
76b0: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
76c0: 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74 75 61  am create-virtua
76d0: 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c  l-table-stmt 1.<
76e0: 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 69 72 74  /tcl>..<p>A virt
76f0: 75 61 6c 20 74 61 62 6c 65 20 69 73 20 61 6e 20  ual table is an 
7700: 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20  interface to an 
7710: 65 78 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65  external storage
7720: 20 6f 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a   or computation.
7730: 65 6e 67 69 6e 65 20 74 68 61 74 20 61 70 70 65  engine that appe
7740: 61 72 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c  ars to be a tabl
7750: 65 20 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61  e but does not a
7760: 63 74 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e  ctually store in
7770: 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65  formation.in the
7780: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
7790: 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72  /p>..<p>In gener
77a0: 61 6c 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61  al, you can do a
77b0: 6e 79 74 68 69 6e 67 20 77 69 74 68 20 61 20 76  nything with a v
77c0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74 68 61  irtual table tha
77d0: 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69  t can be done.wi
77e0: 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  th an ordinary t
77f0: 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61  able, except tha
7800: 74 20 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65  t you cannot cre
7810: 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74  ate indices or t
7820: 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72  riggers on a.vir
7830: 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 53 6f 6d  tual table.  Som
7840: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
7850: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
7860: 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64  might impose add
7870: 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74  itional.restrict
7880: 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  ions.  For examp
7890: 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c  le, many virtual
78a0: 20 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64   tables are read
78b0: 2d 6f 6e 6c 79 2e 0a 56 69 72 74 75 61 6c 20 74  -only..Virtual t
78c0: 61 62 6c 65 73 20 63 61 6e 6e 6f 74 20 62 65 20  ables cannot be 
78d0: 75 73 65 64 20 69 6e 0a 5b 73 71 6c 69 74 65 33  used in.[sqlite3
78e0: 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
78f0: 61 63 68 65 20 7c 20 73 68 61 72 65 64 20 63 61  ache | shared ca
7900: 63 68 65 20 6d 6f 64 65 5d 2e 3c 2f 70 3e 0a 0a  che mode].</p>..
7910: 3c 70 3e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c  <p>The &lt;modul
7920: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 74 68  e-name&gt; is th
7930: 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a  e name of an obj
7940: 65 63 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ect that impleme
7950: 6e 74 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20  nts.the virtual 
7960: 74 61 62 6c 65 2e 20 20 54 68 65 20 26 6c 74 3b  table.  The &lt;
7970: 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20  module-name&gt; 
7980: 6d 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72  must be register
7990: 65 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69  ed with.the SQLi
79a0: 74 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  te database conn
79b0: 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a 73 71 6c  ection using.sql
79c0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
79d0: 6c 65 28 29 0a 70 72 69 6f 72 20 74 6f 20 69 73  le().prior to is
79e0: 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54 45  suing the CREATE
79f0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
7a00: 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6d 6f  tatement..The mo
7a10: 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72 6f 20  dule takes zero 
7a20: 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65  or more comma-se
7a30: 70 61 72 61 74 65 64 20 61 72 67 75 6d 65 6e 74  parated argument
7a40: 73 2e 0a 54 68 65 20 61 72 67 75 6d 65 6e 74 73  s..The arguments
7a50: 20 63 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f   can be just abo
7a60: 75 74 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c  ut any text as l
7a70: 6f 6e 67 20 61 73 20 69 74 20 68 61 73 20 62 61  ong as it has ba
7a80: 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73  lanced.parenthes
7a90: 65 73 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e  es.  The argumen
7aa0: 74 20 73 79 6e 74 61 78 20 69 73 20 73 75 66 66  t syntax is suff
7ab0: 69 63 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c  iciently general
7ac0: 20 74 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65   that the.argume
7ad0: 6e 74 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  nts can be made 
7ae0: 74 6f 20 61 70 70 65 61 72 20 61 73 20 63 6f 6c  to appear as col
7af0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 20  umn definitions 
7b00: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
7b10: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
7b20: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 53 51 4c  statement.  .SQL
7b30: 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20 6d  ite passes the m
7b40: 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20  odule arguments 
7b50: 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20  directly.to the 
7b60: 6d 6f 64 75 6c 65 20 77 69 74 68 6f 75 74 20 61  module without a
7b70: 6e 79 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  ny interpretatio
7b80: 6e 2e 20 20 49 74 20 69 73 20 74 68 65 20 72 65  n.  It is the re
7b90: 73 70 6f 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20  sponsibility.of 
7ba0: 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
7bb0: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 70 61 72  mentation to par
7bc0: 73 65 20 61 6e 64 20 69 6e 74 65 72 70 72 65 74  se and interpret
7bd0: 20 69 74 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e   its own argumen
7be0: 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 76 69  ts.</p>..<p>A vi
7bf0: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64  rtual table is d
7c00: 65 73 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74  estroyed using t
7c10: 68 65 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f  he ordinary.[DRO
7c20: 50 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  P TABLE] stateme
7c30: 6e 74 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f  nt.  There is no
7c40: 0a 44 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41  .DROP VIRTUAL TA
7c50: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f  BLE statement.</
7c60: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
7c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7cb0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
7cc0: 20 44 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b   DELETE delete {
7cd0: 44 45 4c 45 54 45 20 44 45 4c 45 54 45 73 7d 0a  DELETE DELETEs}.
7ce0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
7cf0: 65 6c 65 74 65 2d 73 74 6d 74 20 31 0a 42 75 62  elete-stmt 1.Bub
7d00: 62 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69  bleDiagram quali
7d10: 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a  fied-table-name.
7d20: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44  </tcl>..<p>The D
7d30: 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73  ELETE command is
7d40: 20 75 73 65 64 20 74 6f 20 72 65 6d 6f 76 65 20   used to remove 
7d50: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 61 20 74  records from a t
7d60: 61 62 6c 65 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e  able..The comman
7d70: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
7d80: 65 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20  e "DELETE FROM" 
7d90: 6b 65 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65  keywords followe
7da0: 64 20 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66  d by.the name of
7db0: 20 74 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20   the table from 
7dc0: 77 68 69 63 68 20 72 65 63 6f 72 64 73 20 61 72  which records ar
7dd0: 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e  e to be removed.
7de0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68 6f 75  .</p>..<p>Withou
7df0: 74 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  t a WHERE clause
7e00: 2c 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  , all rows of th
7e10: 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f  e table are remo
7e20: 76 65 64 2e 0a 49 66 20 61 20 57 48 45 52 45 20  ved..If a WHERE 
7e30: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
7e40: 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  ed, then only th
7e50: 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20 6d 61  ose rows that ma
7e60: 74 63 68 0a 74 68 65 20 65 78 70 72 65 73 73 69  tch.the expressi
7e70: 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c  on are removed.<
7e80: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65  /p>..<p>When the
7e90: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
7ea0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
7eb0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
7ec0: 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61 6e  ,.SQLite uses an
7ed0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f   optimization to
7ee0: 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69 72   erase the entir
7ef0: 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a  e table content.
7f00: 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
7f10: 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f 77  o visit each row
7f20: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
7f30: 64 69 76 69 64 75 61 6c 2e 0a 54 68 69 73 20 22  dividual..This "
7f40: 74 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69  truncate" optimi
7f50: 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65  zation makes the
7f60: 20 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68   delete run much
7f70: 20 66 61 73 74 65 72 2e 0a 48 6f 77 65 76 65 72   faster..However
7f80: 2c 20 69 74 20 61 6c 73 6f 20 6d 65 61 6e 73 20  , it also means 
7f90: 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65  that the [sqlite
7fa0: 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  3_changes()] int
7fb0: 65 72 66 61 63 65 0a 61 6e 64 20 74 68 65 20 5b  erface.and the [
7fc0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 5d 20 50  count_changes] P
7fd0: 52 41 47 4d 41 0a 77 69 6c 6c 20 6e 6f 74 20 61  RAGMA.will not a
7fe0: 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74  ctually return t
7ff0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c  he number of del
8000: 65 74 65 64 20 72 6f 77 73 2e 20 20 49 66 20 79  eted rows.  If y
8010: 6f 75 0a 6e 65 65 64 20 74 6f 20 64 65 6c 65 74  ou.need to delet
8020: 65 20 65 76 65 72 79 20 72 6f 77 20 6f 66 20 61  e every row of a
8030: 20 74 61 62 6c 65 20 61 6e 64 20 73 74 69 6c 6c   table and still
8040: 20 68 61 76 65 0a 5b 73 71 6c 69 74 65 33 5f 63   have.[sqlite3_c
8050: 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 63  hanges()] and [c
8060: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 5d 20 77 6f  ount_changes] wo
8070: 72 6b 20 63 6f 72 72 65 63 74 6c 79 2c 20 74 68  rk correctly, th
8080: 65 6e 0a 75 73 65 20 57 48 45 52 45 20 63 6c 61  en.use WHERE cla
8090: 75 73 65 20 74 68 61 74 20 69 73 20 61 6c 77 61  use that is alwa
80a0: 79 73 20 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 62  ys true:</p>..<b
80b0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
80c0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 73 6f 6d 65  DELETE FROM some
80d0: 74 61 62 6c 65 20 57 48 45 52 45 20 31 3b 0a 3c  table WHERE 1;.<
80e0: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
80f0: 65 3e 0a 0a 3c 70 3e 49 66 20 53 51 4c 69 74 65  e>..<p>If SQLite
8100: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
8110: 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
8120: 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
8130: 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
8140: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74  e-time option, t
8150: 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
8160: 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
8170: 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64  tement is.extend
8180: 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69  ed by the additi
8190: 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f  on of optional O
81a0: 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
81b0: 54 20 63 6c 61 75 73 65 73 3a 3c 2f 70 3e 0a 0a  T clauses:</p>..
81c0: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
81d0: 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c  am delete-stmt-l
81e0: 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70  imited</tcl>..<p
81f0: 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49  >The optional LI
8200: 4d 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62  MIT clause can b
8210: 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  e used to limit 
8220: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  the number of.ro
8230: 77 73 20 64 65 6c 65 74 65 64 2c 20 61 6e 64 20  ws deleted, and 
8240: 74 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68  thereby limit th
8250: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72  e size of the tr
8260: 61 6e 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20 4f  ansaction..The O
8270: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
8280: 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
8290: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 72  etermine which r
82a0: 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e 20  ows fall.within 
82b0: 74 68 65 20 4c 49 4d 49 54 2e 20 20 54 68 65 20  the LIMIT.  The 
82c0: 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
82d0: 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20  ows are deleted 
82e0: 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64  is arbitrary.and
82f0: 20 69 73 20 6e 6f 74 20 64 65 74 65 72 6d 69 6e   is not determin
8300: 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20  ed by the ORDER 
8310: 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a  BY clause.</p>..
8320: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
8330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8370: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
8380: 45 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  ETACH DATABASE} 
8390: 64 65 74 61 63 68 20 44 45 54 41 43 48 0a 0a 42  detach DETACH..B
83a0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74  ubbleDiagram det
83b0: 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ach-stmt 1.</tcl
83c0: 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 74 61 74 65  >..<p>This state
83d0: 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20 61 6e  ment detaches an
83e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61   additional data
83f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
8400: 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74 61  previously .atta
8410: 63 68 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  ched using the [
8420: 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e  ATTACH] statemen
8430: 74 2e 20 20 0a 49 74 20 69 73 20 70 6f 73 73 69  t.  .It is possi
8440: 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68 65 20  ble to have the 
8450: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69  same database fi
8460: 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75 6c 74  le attached mult
8470: 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69 6e 67  iple times using
8480: 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65   .different name
8490: 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69 6e 67  s, and detaching
84a0: 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   one connection 
84b0: 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c  to a file will l
84c0: 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65 72 73  eave the .others
84d0: 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70   intact.</p>..<p
84e0: 3e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20  >This statement 
84f0: 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c  will fail if SQL
8500: 69 74 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69  ite is in the mi
8510: 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61  ddle of a transa
8520: 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  ction.</p>...<tc
8530: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
8540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8580: 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  #.Section {DROP 
8590: 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78  INDEX} dropindex
85a0: 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a   {{DROP INDEX}}.
85b0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
85c0: 72 6f 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31  rop-index-stmt 1
85d0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
85e0: 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65  DROP INDEX state
85f0: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20  ment removes an 
8600: 69 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68  index added.with
8610: 20 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44   the [CREATE IND
8620: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  EX] statement.  
8630: 54 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  The index named 
8640: 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65  is completely re
8650: 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64  moved from.the d
8660: 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77  isk.  The only w
8670: 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68  ay to recover th
8680: 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65  e index is to re
8690: 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70  enter the.approp
86a0: 72 69 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e  riate [CREATE IN
86b0: 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  DEX] command.</p
86c0: 3e 0a 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 49  >..<p>The DROP I
86d0: 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 64  NDEX statement d
86e0: 6f 65 73 20 6e 6f 74 20 72 65 64 75 63 65 20 74  oes not reduce t
86f0: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
8700: 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 69 6e  atabase .file in
8710: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 6f 64   the default mod
8720: 65 2e 0a 45 6d 70 74 79 20 73 70 61 63 65 20 69  e..Empty space i
8730: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  n the database i
8740: 73 20 72 65 74 61 69 6e 65 64 20 66 6f 72 20 6c  s retained for l
8750: 61 74 65 72 20 5b 49 4e 53 45 52 54 5d 20 73 74  ater [INSERT] st
8760: 61 74 65 6d 65 6e 74 73 2e 20 20 54 6f 20 0a 72  atements.  To .r
8770: 65 6d 6f 76 65 20 66 72 65 65 20 73 70 61 63 65  emove free space
8780: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
8790: 2c 20 75 73 65 20 74 68 65 20 5b 56 41 43 55 55  , use the [VACUU
87a0: 4d 5d 0a 63 6f 6d 6d 61 6e 64 2e 20 20 49 66 20  M].command.  If 
87b0: 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 6f  [auto_vacuum] mo
87c0: 64 65 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f  de is enabled fo
87d0: 72 20 61 20 64 61 74 61 62 61 73 65 20 74 68 65  r a database the
87e0: 6e 20 73 70 61 63 65 0a 77 69 6c 6c 20 62 65 20  n space.will be 
87f0: 66 72 65 65 64 20 61 75 74 6f 6d 61 74 69 63 61  freed automatica
8800: 6c 6c 79 20 62 79 20 44 52 4f 50 20 49 4e 44 45  lly by DROP INDE
8810: 58 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  X.</p>...<tcl>.#
8820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8860: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
8870: 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 41 42 4c  ction {DROP TABL
8880: 45 7d 20 64 72 6f 70 74 61 62 6c 65 20 7b 7b 44  E} droptable {{D
8890: 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62  ROP TABLE}}..Bub
88a0: 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d  bleDiagram drop-
88b0: 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74  table-stmt 1.</t
88c0: 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 52 4f 50  cl>..<p>The DROP
88d0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
88e0: 20 72 65 6d 6f 76 65 73 20 61 20 74 61 62 6c 65   removes a table
88f0: 20 61 64 64 65 64 20 77 69 74 68 20 74 68 65 0a   added with the.
8900: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
8910: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e  tatement.  The n
8920: 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69 73  ame specified is
8930: 20 74 68 65 0a 74 61 62 6c 65 20 6e 61 6d 65 2e   the.table name.
8940: 20 20 49 74 20 69 73 20 63 6f 6d 70 6c 65 74 65    It is complete
8950: 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  ly removed from 
8960: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
8970: 65 6d 61 20 61 6e 64 20 74 68 65 20 0a 64 69 73  ema and the .dis
8980: 6b 20 66 69 6c 65 2e 20 20 54 68 65 20 74 61 62  k file.  The tab
8990: 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65 20 72 65  le can not be re
89a0: 63 6f 76 65 72 65 64 2e 20 20 41 6c 6c 20 69 6e  covered.  All in
89b0: 64 69 63 65 73 20 61 6e 64 20 74 72 69 67 67 65  dices and trigge
89c0: 72 73 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs.associated wi
89d0: 74 68 20 74 68 65 20 74 61 62 6c 65 20 61 72 65  th the table are
89e0: 20 61 6c 73 6f 20 64 65 6c 65 74 65 64 2e 3c 2f   also deleted.</
89f0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20  p>..<p>The DROP 
8a00: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
8a10: 64 6f 65 73 20 6e 6f 74 20 72 65 64 75 63 65 20  does not reduce 
8a20: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
8a30: 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20 69  database .file i
8a40: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 6f  n the default mo
8a50: 64 65 2e 20 20 45 6d 70 74 79 20 73 70 61 63 65  de.  Empty space
8a60: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
8a70: 20 69 73 20 72 65 74 61 69 6e 65 64 20 66 6f 72   is retained for
8a80: 0a 6c 61 74 65 72 20 5b 49 4e 53 45 52 54 5d 20  .later [INSERT] 
8a90: 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 6f 20  statements.  To 
8aa0: 0a 72 65 6d 6f 76 65 20 66 72 65 65 20 73 70 61  .remove free spa
8ab0: 63 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ce in the databa
8ac0: 73 65 2c 20 0a 75 73 65 20 74 68 65 20 5b 56 41  se, .use the [VA
8ad0: 43 55 55 4d 5d 20 73 74 61 74 65 6d 65 6e 74 2e  CUUM] statement.
8ae0: 0a 49 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  .If [auto_vacuum
8af0: 5d 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65  ] mode is enable
8b00: 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
8b10: 20 74 68 65 6e 20 73 70 61 63 65 0a 77 69 6c 6c   then space.will
8b20: 20 62 65 20 66 72 65 65 64 20 61 75 74 6f 6d 61   be freed automa
8b30: 74 69 63 61 6c 6c 79 20 62 79 20 44 52 4f 50 20  tically by DROP 
8b40: 54 41 42 4c 45 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  TABLE.</p>..<p>T
8b50: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45  he optional IF E
8b60: 58 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70  XISTS clause sup
8b70: 70 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f  presses the erro
8b80: 72 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72  r that would nor
8b90: 6d 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20  mally.result if 
8ba0: 74 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e  the table does n
8bb0: 6f 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c  ot exist.</p>..<
8bc0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
8bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8c10: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
8c20: 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74  P TRIGGER} dropt
8c30: 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54 52  rigger {{DROP TR
8c40: 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  IGGER}}..BubbleD
8c50: 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69 67  iagram drop-trig
8c60: 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ger-stmt 1.</tcl
8c70: 3e 0a 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 54  >..<p>The DROP T
8c80: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
8c90: 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69 67 67   removes a trigg
8ca0: 65 72 20 63 72 65 61 74 65 64 20 62 79 20 74 68  er created by th
8cb0: 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49 47 47  e .[CREATE TRIGG
8cc0: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
8cd0: 54 68 65 20 74 72 69 67 67 65 72 20 69 73 20 0a  The trigger is .
8ce0: 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65  deleted from the
8cf0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
8d00: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 72 69 67  . Note that trig
8d10: 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74  gers are automat
8d20: 69 63 61 6c 6c 79 20 0a 64 72 6f 70 70 65 64 20  ically .dropped 
8d30: 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61  when the associa
8d40: 74 65 64 20 74 61 62 6c 65 20 69 73 20 64 72 6f  ted table is dro
8d50: 70 70 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  pped.</p>..<tcl>
8d60: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
8d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
8db0: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49  Section {DROP VI
8dc0: 45 57 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44  EW} dropview {{D
8dd0: 52 4f 50 20 56 49 45 57 7d 7d 0a 0a 42 75 62 62  ROP VIEW}}..Bubb
8de0: 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 76  leDiagram drop-v
8df0: 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  iew-stmt 1.</tcl
8e00: 3e 0a 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 56  >..<p>The DROP V
8e10: 49 45 57 20 73 74 61 74 65 6d 65 6e 74 20 72 65  IEW statement re
8e20: 6d 6f 76 65 73 20 61 20 76 69 65 77 20 63 72 65  moves a view cre
8e30: 61 74 65 64 20 62 79 20 74 68 65 0a 5b 43 52 45  ated by the.[CRE
8e40: 41 54 45 20 56 49 45 57 5d 20 73 74 61 74 65 6d  ATE VIEW] statem
8e50: 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73  ent.  The name s
8e60: 70 65 63 69 66 69 65 64 20 69 73 20 74 68 65 20  pecified is the 
8e70: 0a 76 69 65 77 20 6e 61 6d 65 2e 20 20 49 74 20  .view name.  It 
8e80: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
8e90: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
8ea0: 65 6d 61 2c 20 62 75 74 20 6e 6f 20 61 63 74 75  ema, but no actu
8eb0: 61 6c 20 64 61 74 61 20 0a 69 6e 20 74 68 65 20  al data .in the 
8ec0: 75 6e 64 65 72 6c 79 69 6e 67 20 62 61 73 65 20  underlying base 
8ed0: 74 61 62 6c 65 73 20 69 73 20 6d 6f 64 69 66 69  tables is modifi
8ee0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
8ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8f00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
8f40: 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78  ction EXPLAIN ex
8f50: 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42  plain EXPLAIN..B
8f60: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
8f70: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
8f80: 3e 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  >An SQL statemen
8f90: 74 20 63 61 6e 20 62 65 20 70 72 65 63 65 64 65  t can be precede
8fa0: 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64  d by the keyword
8fb0: 20 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62 79   "EXPLAIN" or.by
8fc0: 20 74 68 65 20 70 68 72 61 73 65 20 22 45 58 50   the phrase "EXP
8fd0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 22  LAIN QUERY PLAN"
8fe0: 2e 20 20 45 69 74 68 65 72 20 6d 6f 64 69 66 69  .  Either modifi
8ff0: 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  cation causes th
9000: 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  e.SQL statement 
9010: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
9020: 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65 74 75  uery and to retu
9030: 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  rn information a
9040: 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53 51 4c  bout.how the SQL
9050: 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
9060: 20 68 61 76 65 20 6f 70 65 72 61 74 65 64 20 69   have operated i
9070: 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  f the EXPLAIN ke
9080: 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73 65 20  yword or.phrase 
9090: 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74 65 64  had been omitted
90a0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74  .</p>..<p>When t
90b0: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
90c0: 72 64 20 61 70 70 65 61 72 73 20 62 79 20 69 74  rd appears by it
90d0: 73 65 6c 66 20 69 74 20 63 61 75 73 65 73 20 74  self it causes t
90e0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 74 6f 20  he statement.to 
90f0: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
9100: 79 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  y that returns t
9110: 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 0a  he sequence of .
9120: 3c 61 20 68 72 65 66 3d 22 6f 70 63 6f 64 65 2e  <a href="opcode.
9130: 68 74 6d 6c 22 3e 76 69 72 74 75 61 6c 20 6d 61  html">virtual ma
9140: 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f  chine instructio
9150: 6e 73 3c 2f 61 3e 20 69 74 20 77 6f 75 6c 64 20  ns</a> it would 
9160: 68 61 76 65 0a 75 73 65 64 20 74 6f 20 65 78 65  have.used to exe
9170: 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64  cute the command
9180: 20 68 61 64 20 74 68 65 20 45 58 50 4c 41 49 4e   had the EXPLAIN
9190: 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62 65 65   keyword not bee
91a0: 6e 20 70 72 65 73 65 6e 74 2e 0a 57 68 65 6e 20  n present..When 
91b0: 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
91c0: 59 20 50 4c 41 4e 20 70 68 72 61 73 65 20 61 70  Y PLAN phrase ap
91d0: 70 65 61 72 73 2c 20 74 68 65 20 73 74 61 74 65  pears, the state
91e0: 6d 65 6e 74 20 72 65 74 75 72 6e 73 0a 68 69 67  ment returns.hig
91f0: 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74  h-level informat
9200: 69 6f 6e 20 61 62 6f 75 74 20 77 68 61 74 20 69  ion about what i
9210: 6e 64 69 63 65 73 20 77 6f 75 6c 64 20 68 61 76  ndices would hav
9220: 65 20 62 65 65 6e 20 75 73 65 64 2e 3c 2f 70 3e  e been used.</p>
9230: 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
9240: 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
9250: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
9260: 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
9270: 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
9280: 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
9290: 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
92a0: 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
92b0: 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
92c0: 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
92d0: 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
92e0: 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
92f0: 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
9300: 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
9310: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
9320: 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
9330: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
9340: 6e 63 65 0a 74 68 65 69 72 20 62 65 68 61 76 69  nce.their behavi
9350: 6f 72 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  or is undocument
9360: 65 64 2c 20 75 6e 73 70 65 63 69 66 69 65 64 2c  ed, unspecified,
9370: 20 61 6e 64 20 76 61 72 69 61 62 6c 65 2e 3c 2f   and variable.</
9380: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
9390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
93d0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
93e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72   expression expr
93f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 7b 65 78   {expression {ex
9400: 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78 7d  pression syntax}
9410: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
9420: 20 65 78 70 72 20 31 0a 42 75 62 62 6c 65 44 69   expr 1.BubbleDi
9430: 61 67 72 61 6d 20 6c 69 74 65 72 61 6c 2d 76 61  agram literal-va
9440: 6c 75 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  lue.BubbleDiagra
9450: 6d 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 0a  m signed-number.
9460: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 61  BubbleDiagram ra
9470: 69 73 65 2d 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74  ise-function.</t
9480: 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63  cl>..<p>This sec
9490: 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e  tion is differen
94a0: 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  t from the other
94b0: 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73  s.  Most other s
94c0: 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20  ections of.this 
94d0: 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61  document talks a
94e0: 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61  bout a particula
94f0: 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20  r SQL command.  
9500: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65  This section doe
9510: 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74  s.not talk about
9520: 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f   a standalone co
9530: 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20  mmand but about 
9540: 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68  "expressions" wh
9550: 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70  ich are .subcomp
9560: 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f  onents of most o
9570: 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f  ther commands.</
9580: 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75 6e  p>..<p>SQLite un
9590: 64 65 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f  derstands the fo
95a0: 6c 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79 20 6f  llowing binary o
95b0: 70 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64  perators, in ord
95c0: 65 72 20 66 72 6f 6d 0a 68 69 67 68 65 73 74 20  er from.highest 
95d0: 74 6f 20 6c 6f 77 65 73 74 20 70 72 65 63 65 64  to lowest preced
95e0: 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ence:</p>..<bloc
95f0: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f  kquote><pre>.<fo
9600: 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66  nt color="#2c2cf
9610: 30 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20  0"><big>||.*    
9620: 2f 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c  /    %.+    -.&l
9630: 74 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26 67 74  t;&lt;   &gt;&gt
9640: 3b 20 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26  ;   &amp;    |.&
9650: 6c 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20 26  lt;    &lt;=   &
9660: 67 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20  gt;    &gt;=.=  
9670: 20 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b    ==   !=   &lt;
9680: 26 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49 4e 0a  &gt;   </big>IN.
9690: 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e  AND   .OR</font>
96a0: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
96b0: 6f 74 65 3e 0a 0a 3c 70 3e 53 75 70 70 6f 72 74  ote>..<p>Support
96c0: 65 64 20 75 6e 61 72 79 20 70 72 65 66 69 78 20  ed unary prefix 
96d0: 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 74 68  operators are th
96e0: 65 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ese:</p>..<block
96f0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e  quote><pre>.<fon
9700: 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30  t color="#2c2cf0
9710: 22 3e 3c 62 69 67 3e 2d 20 20 20 20 2b 20 20 20  "><big>-    +   
9720: 20 7e 20 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c   ~    NOT</big><
9730: 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
9740: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
9750: 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  he COLLATE opera
9760: 74 6f 72 20 63 61 6e 20 62 65 20 74 68 6f 75 67  tor can be thoug
9770: 68 74 20 6f 66 20 61 73 20 61 20 75 6e 61 72 79  ht of as a unary
9780: 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
9790: 72 2e 20 20 54 68 65 20 43 4f 4c 4c 41 54 45 20  r.  The COLLATE 
97a0: 6f 70 65 72 61 74 6f 72 20 68 61 73 20 74 68 65  operator has the
97b0: 20 68 69 67 68 65 73 74 20 70 72 65 63 65 64 65   highest precede
97c0: 6e 63 65 2e 0a 49 74 20 61 6c 77 61 79 73 20 62  nce..It always b
97d0: 69 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c  inds more tightl
97e0: 79 20 74 68 61 6e 20 61 6e 79 20 70 72 65 66 69  y than any prefi
97f0: 78 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  x unary operator
9800: 20 6f 72 0a 61 6e 79 20 62 69 6e 61 72 79 20 6f   or.any binary o
9810: 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74  perator.</p>..<t
9820: 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e  cl>hd_puts ".<p>
9830: 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74  The unary operat
9840: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20  or [Operator +] 
9850: 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 74 20  is a no-op.  It 
9860: 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74  can be applied.t
9870: 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65  o strings, numbe
9880: 72 73 2c 20 6f 72 20 62 6c 6f 62 73 20 61 6e 64  rs, or blobs and
9890: 20 69 74 20 61 6c 77 61 79 73 20 67 69 76 65 73   it always gives
98a0: 20 61 73 20 69 74 73 20 72 65 73 75 6c 74 20 74   as its result t
98b0: 68 65 0a 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he.value of the 
98c0: 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74  operand.</p>"</t
98d0: 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  cl>..<p>Note tha
98e0: 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  t there are two 
98f0: 76 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68  variations of th
9900: 65 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74  e equals and not
9910: 20 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72   equals.operator
9920: 73 2e 20 20 45 71 75 61 6c 73 20 63 61 6e 20 62  s.  Equals can b
9930: 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a  e either..<tcl>.
9940: 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
9950: 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  or =] or [Operat
9960: 6f 72 20 3d 3d 5d 2e 0a 54 68 65 20 6e 6f 6e 2d  or ==]..The non-
9970: 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20  equals operator 
9980: 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f  can be either.[O
9990: 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b  perator !=] or [
99a0: 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67  Operator {&lt;&g
99b0: 74 3b 7d 5d 2e 0a 54 68 65 20 5b 4f 70 65 72 61  t;}]..The [Opera
99c0: 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72  tor ||] operator
99d0: 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74   is \"concatenat
99e0: 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74  e\" - it joins t
99f0: 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20  ogether.the two 
9a00: 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f  strings of its o
9a10: 70 65 72 61 6e 64 73 2e 0a 54 68 65 20 6f 70 65  perands..The ope
9a20: 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  rator [Operator 
9a30: 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20 72  %] outputs the r
9a40: 65 6d 61 69 6e 64 65 72 20 6f 66 20 69 74 73 20  emainder of its 
9a50: 6c 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f  left .operand mo
9a60: 64 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f  dulo its right o
9a70: 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  perand.</p>..<p>
9a80: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
9a90: 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
9aa0: 72 20 69 73 20 61 20 6e 75 6d 65 72 69 63 20 76  r is a numeric v
9ab0: 61 6c 75 65 2c 20 65 78 63 65 70 74 0a 66 6f 72  alue, except.for
9ac0: 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c   the [Operator |
9ad0: 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e  |] concatenation
9ae0: 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20   operator which 
9af0: 67 69 76 65 73 20 61 20 73 74 72 69 6e 67 0a 72  gives a string.r
9b00: 65 73 75 6c 74 2e 3c 2f 70 3e 22 3c 2f 74 63 6c  esult.</p>"</tcl
9b10: 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69 74 65  >..<a name="lite
9b20: 72 61 6c 5f 76 61 6c 75 65 22 3e 3c 2f 61 3e 0a  ral_value"></a>.
9b30: 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61  <p>.A literal va
9b40: 6c 75 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  lue is an intege
9b50: 72 20 6e 75 6d 62 65 72 20 6f 72 20 61 20 66 6c  r number or a fl
9b60: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
9b70: 62 65 72 2e 0a 53 63 69 65 6e 74 69 66 69 63 20  ber..Scientific 
9b80: 6e 6f 74 61 74 69 6f 6e 20 69 73 20 73 75 70 70  notation is supp
9b90: 6f 72 74 65 64 2e 20 20 54 68 65 20 22 2e 22 20  orted.  The "." 
9ba0: 63 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77  character is alw
9bb0: 61 79 73 20 75 73 65 64 0a 61 73 20 74 68 65 20  ays used.as the 
9bc0: 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
9bd0: 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
9be0: 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
9bf0: 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
9c00: 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
9c10: 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
9c20: 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
9c30: 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
9c40: 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
9c50: 20 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 73 74    A string const
9c60: 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62 79  ant is formed by
9c70: 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73   enclosing the.s
9c80: 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20  tring in single 
9c90: 71 75 6f 74 65 73 20 28 27 29 2e 20 20 41 20 73  quotes (').  A s
9ca0: 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68  ingle quote with
9cb0: 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63 61  in the string ca
9cc0: 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20  n.be encoded by 
9cd0: 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67  putting two sing
9ce0: 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72  le quotes in a r
9cf0: 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61  ow - as in Pasca
9d00: 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70  l..C-style escap
9d10: 65 73 20 75 73 69 6e 67 20 74 68 65 20 62 61 63  es using the bac
9d20: 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74 65 72  kslash character
9d30: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
9d40: 65 64 20 62 65 63 61 75 73 65 0a 74 68 65 79 20  ed because.they 
9d50: 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64  are not standard
9d60: 20 53 51 4c 2e 0a 42 4c 4f 42 20 6c 69 74 65 72   SQL..BLOB liter
9d70: 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c  als are string l
9d80: 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69  iterals containi
9d90: 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64  ng hexadecimal d
9da0: 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64  ata and.preceded
9db0: 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22   by a single "x"
9dc0: 20 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65   or "X" characte
9dd0: 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  r.  For example:
9de0: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
9df0: 65 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 43  e><pre>.X'53514C
9e00: 36 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f  697465'.</pre></
9e10: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
9e20: 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  .A literal value
9e30: 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65   can also be the
9e40: 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c   token "NULL"..<
9e50: 2f 70 3e 0a 0a 3c 70 3e 0a 41 20 70 61 72 61 6d  /p>..<p>.A param
9e60: 65 74 65 72 20 73 70 65 63 69 66 69 65 73 20 61  eter specifies a
9e70: 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20   placeholder in 
9e80: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66  the expression f
9e90: 6f 72 20 61 20 6c 69 74 65 72 61 6c 0a 76 61 6c  or a literal.val
9ea0: 75 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65  ue that is fille
9eb0: 64 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20  d in at runtime 
9ec0: 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
9ed0: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c  e3_bind_blob() |
9ee0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d   sqlite3_bind()]
9ef0: 20 41 50 49 73 2e 0a 50 61 72 61 6d 65 74 65 72   APIs..Parameter
9f00: 73 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72  s can take sever
9f10: 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 0a 0a 3c  al forms:.</p..<
9f20: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
9f30: 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  le>.<tr>.<td ali
9f40: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
9f50: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e  n="top"><b>?</b>
9f60: 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c  <i>NNN</i></td><
9f70: 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
9f80: 74 64 3e 0a 3c 74 64 3e 41 20 71 75 65 73 74 69  td>.<td>A questi
9f90: 6f 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64  on mark followed
9fa0: 20 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e   by a number <i>
9fb0: 4e 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20  NNN</i> holds a 
9fc0: 73 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e  spot for the.NNN
9fd0: 2d 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20  -th parameter.  
9fe0: 4e 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77  NNN must be betw
9ff0: 65 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54  een 1 and [SQLIT
a000: 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
a010: 55 4d 42 45 52 5d 2e 3c 2f 74 64 3e 0a 3c 2f 74  UMBER].</td>.</t
a020: 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
a030: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
a040: 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
a050: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
a060: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 71  0"></td>.<td>A q
a070: 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61  uestion mark tha
a080: 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65  t is not followe
a090: 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 68 6f  d by a number ho
a0a0: 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 0a 74  lds a spot for.t
a0b0: 68 65 20 6e 65 78 74 20 75 6e 75 73 65 64 20 70  he next unused p
a0c0: 61 72 61 6d 65 74 65 72 2e 3c 2f 74 64 3e 0a 3c  arameter.</td>.<
a0d0: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
a0e0: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
a0f0: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62  gn="top"><b>:</b
a100: 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
a110: 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
a120: 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 63 6f 6c 6f  </td>.<td>A colo
a130: 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
a140: 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
a150: 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
a160: 72 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65  r a named.parame
a170: 74 65 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d  ter with the nam
a180: 65 20 41 41 41 41 2e 20 20 4e 61 6d 65 64 20 70  e AAAA.  Named p
a190: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c  arameters are al
a1a0: 73 6f 20 6e 75 6d 62 65 72 65 64 2e 0a 54 68 65  so numbered..The
a1b0: 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64   number assigned
a1c0: 20 69 73 20 74 68 65 20 6e 65 78 74 20 75 6e 75   is the next unu
a1d0: 73 65 64 20 6e 75 6d 62 65 72 2e 20 20 54 6f 20  sed number.  To 
a1e0: 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c  avoid confusion,
a1f0: 0a 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61  .it is best to a
a200: 76 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65  void mixing name
a210: 64 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 20 70  d and numbered p
a220: 61 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a  arameters.</td>.
a230: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61  </tr>.<tr>.<td a
a240: 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c  lign="right" val
a250: 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f  ign="top"><b>@</
a260: 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74  b><i>AAAA</i></t
a270: 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
a280: 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 6e 20 22 61  ></td>.<td>An "a
a290: 74 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78  t" sign works ex
a2a0: 61 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c  actly like a col
a2b0: 6f 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  on.</td>.</tr>.<
a2c0: 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
a2d0: 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
a2e0: 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41  p"><b>$</b><i>AA
a2f0: 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
a300: 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
a310: 3c 74 64 3e 41 20 64 6f 6c 6c 61 72 2d 73 69 67  <td>A dollar-sig
a320: 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  n followed by an
a330: 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
a340: 20 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70   also holds a sp
a350: 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70  ot for a named.p
a360: 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68  arameter with th
a370: 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 54 68  e name AAAA.  Th
a380: 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d  e identifier nam
a390: 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63  e in this case c
a3a0: 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f  an include.one o
a3b0: 72 20 6d 6f 72 65 20 6f 63 63 75 72 61 6e 63 65  r more occurance
a3c0: 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20  s of "::" and a 
a3d0: 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20  suffix enclosed 
a3e0: 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61  in "(...)" conta
a3f0: 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61  ining.any text a
a400: 74 20 61 6c 6c 2e 20 20 54 68 69 73 20 73 79 6e  t all.  This syn
a410: 74 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20  tax is the form 
a420: 6f 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61  of a variable na
a430: 6d 65 20 69 6e 20 74 68 65 20 54 63 6c 0a 70 72  me in the Tcl.pr
a440: 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61  ogramming langua
a450: 67 65 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  ge.</td>.</tr>.<
a460: 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
a470: 75 6f 74 65 3e 0a 0a 3c 70 3e 50 61 72 61 6d 65  uote>..<p>Parame
a480: 74 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ters that are no
a490: 74 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65  t assigned value
a4a0: 73 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33  s using.[sqlite3
a4b0: 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73  _bind_blob() | s
a4c0: 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61  qlite3_bind()] a
a4d0: 72 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55  re treated.as NU
a4e0: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  LL.</p>..<tcl>hd
a4f0: 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c  _fragment like L
a500: 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e  IKE ESCAPE</tcl>
a510: 0a 3c 70 3e 54 68 65 20 4c 49 4b 45 20 6f 70 65  .<p>The LIKE ope
a520: 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61 74  rator does a pat
a530: 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f  tern matching co
a540: 6d 70 61 72 69 73 6f 6e 2e 20 54 68 65 20 6f 70  mparison. The op
a550: 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67  erand.to the rig
a560: 68 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ht contains the 
a570: 70 61 74 74 65 72 6e 2c 20 74 68 65 20 6c 65 66  pattern, the lef
a580: 74 20 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 63  t hand operand c
a590: 6f 6e 74 61 69 6e 73 20 74 68 65 0a 73 74 72 69  ontains the.stri
a5a0: 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
a5b0: 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e  nst the pattern.
a5c0: 20 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20   ..<tcl>hd_puts 
a5d0: 22 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  "A percent symbo
a5e0: 6c 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 69  l [Operator %] i
a5f0: 6e 20 74 68 65 20 70 61 74 74 65 72 6e 20 6d 61  n the pattern ma
a600: 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e  tches any.sequen
a610: 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  ce of zero or mo
a620: 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  re characters in
a630: 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 41 6e   the string.  An
a640: 20 75 6e 64 65 72 73 63 6f 72 65 0a 5b 4f 70 65   underscore.[Ope
a650: 72 61 74 6f 72 20 5f 5d 20 69 6e 20 74 68 65 20  rator _] in the 
a660: 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
a670: 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61  any single chara
a680: 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69  cter in the.stri
a690: 6e 67 2e 20 20 41 6e 79 20 6f 74 68 65 72 20 63  ng.  Any other c
a6a0: 68 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73  haracter matches
a6b0: 20 69 74 73 65 6c 66 20 6f 72 20 69 74 27 73 20   itself or it's 
a6c0: 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65  lower/upper case
a6d0: 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65  .equivalent (i.e
a6e0: 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  . case-insensiti
a6f0: 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 20 20 28  ve matching).  (
a700: 41 20 62 75 67 3a 20 53 51 4c 69 74 65 20 6f 6e  A bug: SQLite on
a710: 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
a720: 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
a730: 66 6f 72 20 37 2d 62 69 74 20 4c 61 74 69 6e 20  for 7-bit Latin 
a740: 63 68 61 72 61 63 74 65 72 73 2e 20 20 48 65 6e  characters.  Hen
a750: 63 65 20 74 68 65 0a 4c 49 4b 45 20 6f 70 65 72  ce the.LIKE oper
a760: 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e  ator is case sen
a770: 73 69 74 69 76 65 20 66 6f 72 20 38 2d 62 69 74  sitive for 8-bit
a780: 20 69 73 6f 38 38 35 39 20 63 68 61 72 61 63 74   iso8859 charact
a790: 65 72 73 20 6f 72 20 55 54 46 2d 38 0a 63 68 61  ers or UTF-8.cha
a7a0: 72 61 63 74 65 72 73 2e 20 20 46 6f 72 20 65 78  racters.  For ex
a7b0: 61 6d 70 6c 65 2c 20 74 68 65 20 65 78 70 72 65  ample, the expre
a7c0: 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73  ssion <b>'a'&nbs
a7d0: 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c  p;LIKE&nbsp;'A'<
a7e0: 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75 74 20  /b>.is TRUE but 
a7f0: 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73  <b>'&aelig;'&nbs
a800: 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45  p;LIKE&nbsp;'&AE
a810: 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c  lig;'</b> is FAL
a820: 53 45 2e 29 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e  SE.).</p>"</tcl>
a830: 0a 0a 3c 70 3e 49 66 20 74 68 65 20 6f 70 74 69  ..<p>If the opti
a840: 6f 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75  onal ESCAPE clau
a850: 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  se is present, t
a860: 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69  hen the expressi
a870: 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  on.following the
a880: 20 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64 20   ESCAPE keyword 
a890: 6d 75 73 74 20 65 76 61 6c 75 61 74 65 20 74 6f  must evaluate to
a8a0: 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73   a string consis
a8b0: 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65  ting of.a single
a8c0: 20 63 68 61 72 61 63 74 65 72 2e 20 54 68 69 73   character. This
a8d0: 20 63 68 61 72 61 63 74 65 72 20 6d 61 79 20 62   character may b
a8e0: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49  e used in the LI
a8f0: 4b 45 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e  KE pattern.to in
a900: 63 6c 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65  clude literal pe
a910: 72 63 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63  rcent or undersc
a920: 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 2e 20  ore characters. 
a930: 54 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61  The escape.chara
a940: 63 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79  cter followed by
a950: 20 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f   a percent symbo
a960: 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 6f 72  l, underscore or
a970: 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20   itself matches 
a980: 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  a.literal percen
a990: 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73  t symbol, unders
a9a0: 63 6f 72 65 20 6f 72 20 65 73 63 61 70 65 20 63  core or escape c
a9b0: 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 20  haracter in the 
a9c0: 73 74 72 69 6e 67 2c 0a 72 65 73 70 65 63 74 69  string,.respecti
a9d0: 76 65 6c 79 2e 20 54 68 65 20 69 6e 66 69 78 20  vely. The infix 
a9e0: 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LIKE operator is
a9f0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
aa00: 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c  calling the.appl
aa10: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
aa20: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c  SQL functions [l
aa30: 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
aa40: 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65  X</i>)] or.[like
aa50: 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
aa60: 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61  i>,<i>Z</i>)]</a
aa70: 3e 2e 3c 2f 70 3e 0a 0a 54 68 65 20 4c 49 4b 45  >.</p>..The LIKE
aa80: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 6e 6f 74   operator is not
aa90: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
aaa0: 61 6e 64 20 77 69 6c 6c 20 6d 61 74 63 68 20 75  and will match u
aab0: 70 70 65 72 20 63 61 73 65 0a 63 68 61 72 61 63  pper case.charac
aac0: 74 65 72 73 20 6f 6e 20 6f 6e 65 20 73 69 64 65  ters on one side
aad0: 20 61 67 61 69 6e 73 74 20 6c 6f 77 65 72 20 63   against lower c
aae0: 61 73 65 20 63 68 61 72 61 63 74 65 72 73 20 6f  ase characters o
aaf0: 6e 20 74 68 65 20 6f 74 68 65 72 2e 20 20 0a 28  n the other.  .(
ab00: 41 20 62 75 67 3a 20 53 51 4c 69 74 65 20 6f 6e  A bug: SQLite on
ab10: 6c 79 20 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly understands u
ab20: 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
ab30: 66 6f 72 20 37 2d 62 69 74 20 4c 61 74 69 6e 0a  for 7-bit Latin.
ab40: 63 68 61 72 61 63 74 65 72 73 2e 20 20 48 65 6e  characters.  Hen
ab50: 63 65 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72  ce the LIKE oper
ab60: 61 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e  ator is case sen
ab70: 73 69 74 69 76 65 20 66 6f 72 20 38 2d 62 69 74  sitive for 8-bit
ab80: 0a 69 73 6f 38 38 35 39 20 63 68 61 72 61 63 74  .iso8859 charact
ab90: 65 72 73 20 6f 72 20 55 54 46 2d 38 20 63 68 61  ers or UTF-8 cha
aba0: 72 61 63 74 65 72 73 2e 20 20 46 6f 72 20 65 78  racters.  For ex
abb0: 61 6d 70 6c 65 2c 20 74 68 65 20 65 78 70 72 65  ample, the expre
abc0: 73 73 69 6f 6e 0a 3c 62 3e 27 61 27 26 6e 62 73  ssion.<b>'a'&nbs
abd0: 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c  p;LIKE&nbsp;'A'<
abe0: 2f 62 3e 20 69 73 20 54 52 55 45 20 62 75 74 0a  /b> is TRUE but.
abf0: 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73  <b>'&aelig;'&nbs
ac00: 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45  p;LIKE&nbsp;'&AE
ac10: 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c  lig;'</b> is FAL
ac20: 53 45 2e 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  SE.).</p>..<p>Th
ac30: 65 20 69 6e 66 69 78 20 4c 49 4b 45 0a 6f 70 65  e infix LIKE.ope
ac40: 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65  rator is impleme
ac50: 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
ac60: 74 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f  the user functio
ac70: 6e 20 3c 61 20 68 72 65 66 3d 22 23 6c 69 6b 65  n <a href="#like
ac80: 46 75 6e 63 22 3e 0a 6c 69 6b 65 28 3c 69 3e 58  Func">.like(<i>X
ac90: 3c 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f  </i>,<i>Y</i>)</
aca0: 61 3e 2e 20 20 49 66 20 61 6e 20 45 53 43 41 50  a>.  If an ESCAP
acb0: 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
acc0: 65 6e 74 2c 20 69 74 20 61 64 64 73 0a 61 20 74  ent, it adds.a t
acd0: 68 69 72 64 20 70 61 72 61 6d 65 74 65 72 20 74  hird parameter t
ace0: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63  o the function c
acf0: 61 6c 6c 2e 20 49 66 20 74 68 65 20 66 75 6e 63  all. If the func
ad00: 74 69 6f 6e 61 6c 69 74 79 20 6f 66 20 4c 49 4b  tionality of LIK
ad10: 45 20 63 61 6e 20 62 65 0a 6f 76 65 72 72 69 64  E can be.overrid
ad20: 64 65 6e 20 62 79 20 64 65 66 69 6e 69 6e 67 20  den by defining 
ad30: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69  an alternative i
ad40: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
ad50: 20 74 68 65 0a 6c 69 6b 65 28 29 20 53 51 4c 20   the.like() SQL 
ad60: 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f  function.</p>.</
ad70: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
ad80: 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f  ment glob GLOB</
ad90: 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 47 4c 4f 42  tcl>.<p>The GLOB
ada0: 20 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d   operator is sim
adb0: 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74  ilar to LIKE but
adc0: 20 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66   uses the Unix.f
add0: 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e  ile globbing syn
ade0: 74 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64  tax for its wild
adf0: 63 61 72 64 73 2e 20 20 41 6c 73 6f 2c 20 47 4c  cards.  Also, GL
ae00: 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69  OB is case.sensi
ae10: 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b  tive, unlike LIK
ae20: 45 2e 20 20 42 6f 74 68 20 47 4c 4f 42 20 61 6e  E.  Both GLOB an
ae30: 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72  d LIKE may be pr
ae40: 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f  eceded by.the NO
ae50: 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76  T keyword to inv
ae60: 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66  ert the sense of
ae70: 20 74 68 65 20 74 65 73 74 2e 20 20 54 68 65 20   the test.  The 
ae80: 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72  infix GLOB .oper
ae90: 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
aea0: 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
aeb0: 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f  he function.[glo
aec0: 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  b(<i>Y</i>,<i>X<
aed0: 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65  /i>)] and can be
aee0: 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65   modified by ove
aef0: 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e  rriding.that fun
af00: 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ction.</p>..<tcl
af10: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67  >hd_fragment reg
af20: 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e  exp REGEXP</tcl>
af30: 0a 3c 70 3e 54 68 65 20 52 45 47 45 58 50 20 6f  .<p>The REGEXP o
af40: 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
af50: 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
af60: 74 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65  the regexp().use
af70: 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 4e 6f 20  r function.  No 
af80: 72 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75  regexp() user fu
af90: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
afa0: 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64  d by default.and
afb0: 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52   so use of the R
afc0: 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77  EGEXP operator w
afd0: 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73  ill normally res
afe0: 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20  ult in an.error 
aff0: 6d 65 73 73 61 67 65 2e 20 20 49 66 20 61 20 75  message.  If a u
b000: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
b010: 74 69 6f 6e 20 6e 61 6d 65 64 20 22 72 65 67 65  tion named "rege
b020: 78 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20  xp".is added at 
b030: 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20 66  run-time, that f
b040: 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  unction will be 
b050: 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a  called in order.
b060: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
b070: 20 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72   REGEXP operator
b080: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
b090: 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41  ragment match MA
b0a0: 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65  TCH</tcl>.<p>The
b0b0: 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20   MATCH operator 
b0c0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
b0d0: 74 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63  tax for the matc
b0e0: 68 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f  h().user functio
b0f0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default 
b100: 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e  match() function
b110: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a   implementation.
b120: 72 61 69 73 65 73 20 61 6e 64 20 65 78 63 65 70  raises and excep
b130: 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20  tion and is not 
b140: 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f  really useful fo
b150: 72 20 61 6e 79 74 68 69 6e 67 2e 0a 42 75 74 20  r anything..But 
b160: 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f  extensions can o
b170: 76 65 72 72 69 64 65 20 74 68 65 20 6d 61 74 63  verride the matc
b180: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  h() function wit
b190: 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c  h more.helpful l
b1a0: 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  ogic.</p>..<p>A 
b1b0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20  column name can 
b1c0: 62 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e 61  be any of the na
b1d0: 6d 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74  mes defined in t
b1e0: 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he [CREATE TABLE
b1f0: 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f  ].statement or o
b200: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
b210: 69 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65 6e  ing special iden
b220: 74 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57  tifiers: "<b>ROW
b230: 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44  ID</b>",."<b>OID
b240: 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52  </b>", or "<b>_R
b250: 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 54 68 65 73  OWID_</b>"..Thes
b260: 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
b270: 66 69 65 72 73 20 61 6c 6c 20 64 65 73 63 72 69  fiers all descri
b280: 62 65 20 74 68 65 0a 75 6e 69 71 75 65 20 69 6e  be the.unique in
b290: 74 65 67 65 72 20 6b 65 79 20 28 74 68 65 20 22  teger key (the "
b2a0: 72 6f 77 20 6b 65 79 22 29 20 61 73 73 6f 63 69  row key") associ
b2b0: 61 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20  ated with every 
b2c0: 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61  .row of every ta
b2d0: 62 6c 65 2e 0a 54 68 65 20 73 70 65 63 69 61 6c  ble..The special
b2e0: 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c   identifiers onl
b2f0: 79 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72  y refer to the r
b300: 6f 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43  ow key if the [C
b310: 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61  REATE TABLE].sta
b320: 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
b330: 64 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f  define a real co
b340: 6c 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61  lumn with the sa
b350: 6d 65 20 6e 61 6d 65 2e 20 20 52 6f 77 20 6b 65  me name.  Row ke
b360: 79 73 0a 61 63 74 20 6c 69 6b 65 20 72 65 61 64  ys.act like read
b370: 2d 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 73 2e 20 20  -only columns.  
b380: 41 20 72 6f 77 20 6b 65 79 20 63 61 6e 20 62 65  A row key can be
b390: 20 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61   used anywhere a
b3a0: 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20   regular.column 
b3b0: 63 61 6e 20 62 65 20 75 73 65 64 2c 20 65 78 63  can be used, exc
b3c0: 65 70 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e  ept that you can
b3d0: 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 76  not change the v
b3e0: 61 6c 75 65 0a 6f 66 20 61 20 72 6f 77 20 6b 65  alue.of a row ke
b3f0: 79 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d  y in an [UPDATE]
b400: 20 6f 72 20 5b 49 4e 53 45 52 54 5d 20 73 74 61   or [INSERT] sta
b410: 74 65 6d 65 6e 74 2e 0a 22 53 45 4c 45 43 54 20  tement.."SELECT 
b420: 2a 20 2e 2e 2e 22 20 64 6f 65 73 20 6e 6f 74 20  * ..." does not 
b430: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 77 20 6b  return the row k
b440: 65 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5b 53 45 4c  ey.</p>..<p>[SEL
b450: 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ECT] statements 
b460: 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65 78  can appear in ex
b470: 70 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69 74  pressions as eit
b480: 68 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68 61  her the.right-ha
b490: 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68  nd operand of th
b4a0: 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 61  e IN operator, a
b4b0: 73 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74  s a scalar quant
b4c0: 69 74 79 2c 20 6f 72 0a 61 73 20 74 68 65 20 6f  ity, or.as the o
b4d0: 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 45 58 49  perand of an EXI
b4e0: 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 0a 41 73  STS operator..As
b4f0: 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
b500: 74 79 20 6f 72 20 74 68 65 20 6f 70 65 72 61 6e  ty or the operan
b510: 64 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61  d of an IN opera
b520: 74 6f 72 2c 0a 74 68 65 20 53 45 4c 45 43 54 20  tor,.the SELECT 
b530: 73 68 6f 75 6c 64 20 68 61 76 65 20 6f 6e 6c 79  should have only
b540: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
b550: 20 69 6e 20 69 74 73 0a 72 65 73 75 6c 74 2e 20   in its.result. 
b560: 20 43 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   Compound SELECT
b570: 73 20 28 63 6f 6e 6e 65 63 74 65 64 20 77 69 74  s (connected wit
b580: 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20  h keywords like 
b590: 55 4e 49 4f 4e 20 6f 72 0a 45 58 43 45 50 54 29  UNION or.EXCEPT)
b5a0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 57 69   are allowed..Wi
b5b0: 74 68 20 74 68 65 20 45 58 49 53 54 53 20 6f 70  th the EXISTS op
b5c0: 65 72 61 74 6f 72 2c 20 74 68 65 20 63 6f 6c 75  erator, the colu
b5d0: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
b5e0: 74 20 73 65 74 20 6f 66 20 74 68 65 20 5b 53 45  t set of the [SE
b5f0: 4c 45 43 54 5d 20 61 72 65 0a 69 67 6e 6f 72 65  LECT] are.ignore
b600: 64 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  d and the expres
b610: 73 69 6f 6e 20 72 65 74 75 72 6e 73 20 54 52 55  sion returns TRU
b620: 45 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  E if one or more
b630: 20 72 6f 77 73 20 65 78 69 73 74 0a 61 6e 64 20   rows exist.and 
b640: 46 41 4c 53 45 20 69 66 20 74 68 65 20 72 65 73  FALSE if the res
b650: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
b660: 2e 0a 49 66 20 6e 6f 20 74 65 72 6d 73 20 69 6e  ..If no terms in
b670: 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 65 78   the [SELECT] ex
b680: 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 20 74  pression refer t
b690: 6f 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 63  o value in the c
b6a0: 6f 6e 74 61 69 6e 69 6e 67 0a 71 75 65 72 79 2c  ontaining.query,
b6b0: 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
b6c0: 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
b6d0: 64 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20  d once prior to 
b6e0: 61 6e 79 20 6f 74 68 65 72 0a 70 72 6f 63 65 73  any other.proces
b6f0: 73 69 6e 67 20 61 6e 64 20 74 68 65 20 72 65 73  sing and the res
b700: 75 6c 74 20 69 73 20 72 65 75 73 65 64 20 61 73  ult is reused as
b710: 20 6e 65 63 65 73 73 61 72 79 2e 20 20 49 66 20   necessary.  If 
b720: 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 65 78 70  the [SELECT] exp
b730: 72 65 73 73 69 6f 6e 0a 64 6f 65 73 20 63 6f 6e  ression.does con
b740: 74 61 69 6e 20 76 61 72 69 61 62 6c 65 73 20 66  tain variables f
b750: 72 6f 6d 20 74 68 65 20 6f 75 74 65 72 20 71 75  rom the outer qu
b760: 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20 5b 53  ery, then the [S
b770: 45 4c 45 43 54 5d 20 69 73 20 72 65 65 76 61 6c  ELECT] is reeval
b780: 75 61 74 65 64 0a 65 76 65 72 79 20 74 69 6d 65  uated.every time
b790: 20 69 74 20 69 73 20 6e 65 65 64 65 64 2e 3c 2f   it is needed.</
b7a0: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45  p>..<p>When a SE
b7b0: 4c 45 43 54 20 69 73 20 74 68 65 20 72 69 67 68  LECT is the righ
b7c0: 74 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65  t operand of the
b7d0: 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68   IN operator, th
b7e0: 65 20 49 4e 0a 6f 70 65 72 61 74 6f 72 20 72 65  e IN.operator re
b7f0: 74 75 72 6e 73 20 54 52 55 45 20 69 66 20 74 68  turns TRUE if th
b800: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
b810: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20  left operand is 
b820: 61 6e 79 20 6f 66 0a 74 68 65 20 76 61 6c 75 65  any of.the value
b830: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
b840: 68 65 20 73 65 6c 65 63 74 2e 20 20 54 68 65 20  he select.  The 
b850: 49 4e 20 6f 70 65 72 61 74 6f 72 20 6d 61 79 20  IN operator may 
b860: 62 65 20 70 72 65 63 65 64 65 64 0a 62 79 20 74  be preceded.by t
b870: 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74  he NOT keyword t
b880: 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e  o invert the sen
b890: 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 3c  se of the test.<
b8a0: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53  /p>..<p>When a S
b8b0: 45 4c 45 43 54 20 61 70 70 65 61 72 73 20 77 69  ELECT appears wi
b8c0: 74 68 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69  thin an expressi
b8d0: 6f 6e 20 62 75 74 20 69 73 20 6e 6f 74 20 74 68  on but is not th
b8e0: 65 20 72 69 67 68 74 0a 6f 70 65 72 61 6e 64 20  e right.operand 
b8f0: 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f  of an IN operato
b900: 72 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73  r, then the firs
b910: 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73  t row of the res
b920: 75 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43  ult of the.SELEC
b930: 54 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61  T becomes the va
b940: 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  lue used in the 
b950: 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 49 66 20  expression.  If 
b960: 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64  the SELECT yield
b970: 73 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s.more than one 
b980: 72 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20  result row, all 
b990: 72 6f 77 73 20 61 66 74 65 72 20 74 68 65 20 66  rows after the f
b9a0: 69 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64  irst are ignored
b9b0: 2e 20 20 49 66 0a 74 68 65 20 53 45 4c 45 43 54  .  If.the SELECT
b9c0: 20 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c   yields no rows,
b9d0: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
b9e0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73  of the SELECT is
b9f0: 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41   NULL.</p>..<p>A
ba00: 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e   CAST expression
ba10: 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74   changes the dat
ba20: 61 74 79 70 65 20 6f 66 20 74 68 65 20 3c 65 78  atype of the <ex
ba30: 70 72 3e 20 69 6e 74 6f 20 74 68 65 0a 74 79 70  pr> into the.typ
ba40: 65 20 73 70 65 63 69 66 69 65 64 20 62 79 20 26  e specified by &
ba50: 6c 74 3b 74 79 70 65 26 67 74 3b 2e 20 0a 26 6c  lt;type&gt;. .&l
ba60: 74 3b 74 79 70 65 26 67 74 3b 20 63 61 6e 20 62  t;type&gt; can b
ba70: 65 20 61 6e 79 20 6e 6f 6e 2d 65 6d 70 74 79 20  e any non-empty 
ba80: 74 79 70 65 20 6e 61 6d 65 20 74 68 61 74 20 69  type name that i
ba90: 73 20 76 61 6c 69 64 0a 66 6f 72 20 74 68 65 20  s valid.for the 
baa0: 74 79 70 65 20 69 6e 20 61 20 63 6f 6c 75 6d 6e  type in a column
bab0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
bac0: 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20   [CREATE TABLE] 
bad0: 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  statement.</p>..
bae0: 3c 70 3e 42 6f 74 68 20 5b 63 6f 72 65 66 75 6e  <p>Both [corefun
baf0: 63 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b 61  c|simple] and [a
bb00: 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65  ggfunc|aggregate
bb10: 5d 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  ] functions are 
bb20: 73 75 70 70 6f 72 74 65 64 2e 0a 28 46 6f 72 20  supported..(For 
bb30: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75 72  presentation pur
bb40: 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66 75  poses, simple fu
bb50: 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72 74  nctions are furt
bb60: 68 65 72 20 73 75 62 64 69 76 69 64 65 64 20 69  her subdivided i
bb70: 6e 74 6f 0a 5b 63 6f 72 65 66 75 6e 63 20 7c 20  nto.[corefunc | 
bb80: 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  core functions] 
bb90: 61 6e 64 20 5b 64 61 74 65 66 75 6e 63 20 7c 20  and [datefunc | 
bba0: 64 61 74 65 2d 74 69 6d 65 20 66 75 6e 63 74 69  date-time functi
bbb0: 6f 6e 73 5d 2e 29 0a 41 20 73 69 6d 70 6c 65 20  ons].).A simple 
bbc0: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 62 65 20  function can be 
bbd0: 75 73 65 64 20 69 6e 20 61 6e 79 20 65 78 70 72  used in any expr
bbe0: 65 73 73 69 6f 6e 2e 20 20 53 69 6d 70 6c 65 20  ession.  Simple 
bbf0: 66 75 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e  functions return
bc00: 0a 61 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69  .a result immedi
bc10: 61 74 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 74  ately based on t
bc20: 68 65 69 72 20 69 6e 70 75 74 73 2e 20 20 41 67  heir inputs.  Ag
bc30: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
bc40: 73 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73  s.may only be us
bc50: 65 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ed in a SELECT s
bc60: 74 61 74 65 6d 65 6e 74 2e 20 20 41 67 67 72 65  tatement.  Aggre
bc70: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 63  gate functions c
bc80: 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72 65 73  ompute.their res
bc90: 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ult across all r
bca0: 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ows of the resul
bcb0: 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  t set.</p>..<tcl
bcc0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
bcd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bcf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd10: 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46  .Section {Core F
bd20: 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75  unctions} corefu
bd30: 6e 63 20 7b 63 6f 72 65 66 75 6e 63 7d 0a 70 72  nc {corefunc}.pr
bd40: 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e 74  oc funcdef {synt
bd50: 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63  ax keywords desc
bd60: 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c  } {.  hd_puts {<
bd70: 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d 61  tr>}.  regsub -a
bd80: 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67  ll {\s+} [string
bd90: 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b   trim $syntax] {
bda0: 3c 62 72 3e 3c 2f 62 72 3e 7d 20 73 79 6e 74 61  <br></br>} synta
bdb0: 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
bdc0: 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24  {\(([^*)]+)\)} $
bdd0: 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f  syntax {(<i>\1</
bde0: 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  i>)} syntax.  re
bdf0: 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73  gsub -all {,} $s
be00: 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d  yntax {</i>,<i>}
be10: 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
be20: 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e   -all {<i>\.\.\.
be30: 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e  </i>} $syntax {.
be40: 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68 64 5f  ..} syntax.  hd_
be50: 70 75 74 73 20 22 3c 74 64 20 76 61 6c 69 67 6e  puts "<td valign
be60: 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c  =\"top\" align=\
be70: 22 72 69 67 68 74 5c 22 20 77 69 64 74 68 3d 5c  "right\" width=\
be80: 22 31 32 30 5c 22 3e 24 73 79 6e 74 61 78 3c 2f  "120\">$syntax</
be90: 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b  td>".  hd_puts {
bea0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
beb0: 3e 7d 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  >}.  if {[llengt
bec0: 68 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d  h $keywords]==0}
bed0: 20 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b   {.    regexp {[
bee0: 61 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20  a-z_]+} $syntax 
bef0: 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67  name.    hd_frag
bf00: 6d 65 6e 74 20 24 6e 61 6d 65 20 24 6e 61 6d 65  ment $name $name
bf10: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
bf20: 65 76 61 6c 20 68 64 5f 66 72 61 67 6d 65 6e 74  eval hd_fragment
bf30: 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 20 20 68   $keywords.    h
bf40: 64 5f 6b 65 79 77 6f 72 64 73 20 24 6b 65 79 77  d_keywords $keyw
bf50: 6f 72 64 73 0a 20 20 7d 0a 20 20 68 64 5f 72 65  ords.  }.  hd_re
bf60: 73 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64  solve $desc.  hd
bf70: 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72  _puts {</td></tr
bf80: 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  >}.}.</tcl>..<p>
bf90: 54 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f  The core functio
bfa0: 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
bfb0: 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
bfc0: 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66  default. .[datef
bfd0: 75 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b  unc | Date &amp;
bfe0: 20 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d   Time functions]
bff0: 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20   and.[aggfunc | 
c000: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
c010: 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e  ons] are documen
c020: 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20  ted separately. 
c030: 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20   An.application 
c040: 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74  may define addit
c050: 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20  ional.functions 
c060: 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64  written in C and
c070: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61   added to the da
c080: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73  tabase engine us
c090: 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
c0a0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
c0b0: 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74  ()] API.</p>..<t
c0c0: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
c0d0: 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
c0e0: 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73  cl>.funcdef {abs
c0f0: 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  (X)} {} {.  Retu
c100: 72 6e 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  rn the absolute 
c110: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d  value of the num
c120: 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20  eric.  argument 
c130: 3c 69 3e 58 3c 2f 69 3e 2e 20 20 52 65 74 75 72  <i>X</i>.  Retur
c140: 6e 20 4e 55 4c 4c 20 69 66 20 3c 69 3e 58 3c 2f  n NULL if <i>X</
c150: 69 3e 20 69 73 20 4e 55 4c 4c 2e 20 20 52 65 74  i> is NULL.  Ret
c160: 75 72 6e 20 30 2e 30 20 69 66 0a 20 20 3c 69 3e  urn 0.0 if.  <i>
c170: 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 61 20 6e  X</i> is not a n
c180: 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 0a 7d 0a  umeric value..}.
c190: 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73  .funcdef {coales
c1a0: 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20  ce(X,Y,...)} {} 
c1b0: 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 63 6f 70  {.  Return a cop
c1c0: 79 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e  y of the first n
c1d0: 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
c1e0: 2e 20 20 49 66 0a 20 20 61 6c 6c 20 61 72 67 75  .  If.  all argu
c1f0: 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 20 74  ments are NULL t
c200: 68 65 6e 20 4e 55 4c 4c 20 69 73 20 72 65 74 75  hen NULL is retu
c210: 72 6e 65 64 2e 20 20 54 68 65 72 65 20 6d 75 73  rned.  There mus
c220: 74 20 62 65 20 61 74 20 6c 65 61 73 74 20 0a 20  t be at least . 
c230: 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a   2 arguments..}.
c240: 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58  .funcdef {glob(X
c250: 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 69 73  ,Y)} {} {.  This
c260: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
c270: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
c280: 68 65 0a 20 20 22 3c 62 3e 59 20 47 4c 4f 42 20  he.  "<b>Y GLOB 
c290: 58 3c 2f 62 3e 22 20 73 79 6e 74 61 78 20 6f 66  X</b>" syntax of
c2a0: 20 53 51 4c 69 74 65 2e 0a 20 20 4e 6f 74 65 20   SQLite..  Note 
c2b0: 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59  that the X and Y
c2c0: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72   arguments are r
c2d0: 65 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 67  eversed in the g
c2e0: 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  lob() function. 
c2f0: 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65   relative to the
c300: 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70   infix [GLOB] op
c310: 65 72 61 74 6f 72 2e 0a 20 20 54 68 65 20 5b 73  erator..  The [s
c320: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
c330: 6e 63 74 69 6f 6e 28 29 5d 0a 20 20 69 6e 74 65  nction()].  inte
c340: 72 66 61 63 65 20 63 61 6e 0a 20 20 62 65 20 75  rface can.  be u
c350: 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20  sed to override 
c360: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6e  this function an
c370: 64 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65  d thereby change
c380: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 20   the operation. 
c390: 20 6f 66 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f   of the [GLOB] o
c3a0: 70 65 72 61 74 6f 72 2e 3c 2f 74 64 3e 0a 7d 0a  perator.</td>.}.
c3b0: 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c  .funcdef {ifnull
c3c0: 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  (X,Y)} {} {.  Re
c3d0: 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 74  turn a copy of t
c3e0: 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  he first non-NUL
c3f0: 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a  L argument.  If.
c400: 20 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73    both arguments
c410: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e   are NULL then N
c420: 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ULL is returned.
c430: 20 54 68 69 73 20 62 65 68 61 76 65 73 20 74 68   This behaves th
c440: 65 20 73 61 6d 65 20 61 73 20 0a 20 20 5b 63 6f  e same as .  [co
c450: 61 6c 65 73 63 65 28 29 5d 2e 3c 2f 74 64 3e 0a  alesce()].</td>.
c460: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65 78 28  }..funcdef {hex(
c470: 58 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65 20 61  X)} {} {.  The a
c480: 72 67 75 6d 65 6e 74 20 69 73 20 69 6e 74 65 72  rgument is inter
c490: 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f 42  preted as a BLOB
c4a0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 0a 20 20  .  The result.  
c4b0: 69 73 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c  is a hexadecimal
c4c0: 20 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68   rendering of th
c4d0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
c4e0: 74 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64  t blob..}..funcd
c4f0: 65 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f  ef {last_insert_
c500: 72 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  rowid()} {} {.  
c510: 52 65 74 75 72 6e 20 74 68 65 20 5b 52 4f 57 49  Return the [ROWI
c520: 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61 73 74  D].  of the last
c530: 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d   row insert from
c540: 20 74 68 69 73 0a 20 20 63 6f 6e 6e 65 63 74 69   this.  connecti
c550: 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  on to the databa
c560: 73 65 2e 20 0a 20 20 54 68 69 73 20 69 73 20 74  se. .  This is t
c570: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 74 68  he same value th
c580: 61 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75  at would be retu
c590: 72 6e 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20  rned.  from the 
c5a0: 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  [sqlite3_last_in
c5b0: 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 41 50  sert_rowid()] AP
c5c0: 49 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66  I function..}..f
c5d0: 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58  uncdef {length(X
c5e0: 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
c5f0: 20 74 68 65 20 73 74 72 69 6e 67 20 6c 65 6e 67   the string leng
c600: 74 68 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 20 69  th of <i>X</i> i
c610: 6e 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20  n characters..  
c620: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6e  If SQLite is con
c630: 66 69 67 75 72 65 64 20 74 6f 20 73 75 70 70 6f  figured to suppo
c640: 72 74 20 55 54 46 2d 38 2c 20 74 68 65 6e 20 74  rt UTF-8, then t
c650: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 55 54 46  he number of UTF
c660: 2d 38 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  -8.  characters 
c670: 69 73 20 72 65 74 75 72 6e 65 64 2c 20 6e 6f 74  is returned, not
c680: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
c690: 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ytes..}..funcdef
c6a0: 20 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65   {like(X,Y) like
c6b0: 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
c6c0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
c6d0: 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
c6e0: 6e 74 20 74 68 65 20 22 3c 62 3e 59 20 4c 49 4b  nt the "<b>Y LIK
c6f0: 45 20 58 20 26 23 39 31 3b 45 53 43 41 50 45 20  E X &#91;ESCAPE 
c700: 5a 26 23 39 33 3b 3c 2f 62 3e 22 0a 20 20 73 79  Z&#93;</b>".  sy
c710: 6e 74 61 78 20 6f 66 20 53 51 4c 2e 20 49 66 20  ntax of SQL. If 
c720: 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43  the optional ESC
c730: 41 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72  APE clause is pr
c740: 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a  esent, then the.
c750: 20 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20    user-function 
c760: 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  is invoked with 
c770: 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e  three arguments.
c780: 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69   Otherwise, it i
c790: 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68  s.  invoked with
c7a0: 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f   two arguments o
c7b0: 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  nly. Note that t
c7c0: 68 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d  he X and Y param
c7d0: 65 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65  eters are.  reve
c7e0: 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65  rsed in the like
c7f0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61  () function rela
c800: 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69  tive to the infi
c810: 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f  x [LIKE] operato
c820: 72 2e 0a 20 20 54 68 65 20 5b 73 71 6c 69 74 65  r..  The [sqlite
c830: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
c840: 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63  n()] interface c
c850: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76  an be used to ov
c860: 65 72 72 69 64 65 20 74 68 69 73 0a 20 20 66 75  erride this.  fu
c870: 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65  nction and there
c880: 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70  by change the op
c890: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20  eration of the. 
c8a0: 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
c8b0: 2e 20 57 68 65 6e 20 64 6f 69 6e 67 20 74 68 69  . When doing thi
c8c0: 73 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70  s, it may be imp
c8d0: 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72  ortant.  to over
c8e0: 72 69 64 65 20 62 6f 74 68 20 74 68 65 20 74 77  ride both the tw
c8f0: 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72 67 75  o and three argu
c900: 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66  ment versions of
c910: 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20 20 66   the like() .  f
c920: 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69  unction. Otherwi
c930: 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f  se, different co
c940: 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64  de may be called
c950: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
c960: 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  e.  [LIKE] opera
c970: 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  tor depending on
c980: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c990: 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  an ESCAPE clause
c9a0: 20 77 61 73 20 0a 20 20 73 70 65 63 69 66 69 65   was .  specifie
c9b0: 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  d..}..funcdef {l
c9c0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29  oad_extension(X)
c9d0: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
c9e0: 58 2c 59 29 7d 20 7b 6c 6f 61 64 5f 65 78 74 65  X,Y)} {load_exte
c9f0: 6e 73 69 6f 6e 7d 20 7b 0a 20 20 4c 6f 61 64 20  nsion} {.  Load 
ca00: 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
ca10: 73 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61  s out of the sha
ca20: 72 65 64 20 6c 69 62 72 61 72 79 0a 20 20 66 69  red library.  fi
ca30: 6c 65 20 6e 61 6d 65 64 20 3c 69 3e 58 3c 2f 69  le named <i>X</i
ca40: 3e 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72  > using the entr
ca50: 79 20 70 6f 69 6e 74 20 3c 69 3e 59 3c 2f 69 3e  y point <i>Y</i>
ca60: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 0a 20 20  .  The result.  
ca70: 69 73 20 61 20 4e 55 4c 4c 2e 20 20 49 66 20 3c  is a NULL.  If <
ca80: 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74  i>Y</i> is omitt
ca90: 65 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  ed then the defa
caa0: 75 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  ult entry point.
cab0: 20 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65 33 5f    of <b>sqlite3_
cac0: 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 3c 2f  extension_init</
cad0: 62 3e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69  b> is used.  Thi
cae0: 73 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73 65  s function raise
caf0: 73 0a 20 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  s.  an exception
cb00: 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f   if the extensio
cb10: 6e 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61 64 20  n fails to load 
cb20: 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f  or initialize co
cb30: 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 54  rrectly...  <p>T
cb40: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  his function wil
cb50: 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20 65 78  l fail if the ex
cb60: 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74 73  tension attempts
cb70: 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 6f 72 20   to modify.  or 
cb80: 64 65 6c 65 74 65 20 61 20 53 51 4c 20 66 75 6e  delete a SQL fun
cb90: 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69  ction or collati
cba0: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 54 68  ng sequence.  Th
cbb0: 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61  e.  extension ca
cbc0: 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69  n add new functi
cbd0: 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
cbe0: 20 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20   sequences, but 
cbf0: 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20  cannot.  modify 
cc00: 6f 72 20 64 65 6c 65 74 65 20 65 78 69 73 74 69  or delete existi
cc10: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ng functions or 
cc20: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
cc30: 63 65 73 20 62 65 63 61 75 73 65 0a 20 20 74 68  ces because.  th
cc40: 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e  ose functions an
cc50: 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d/or collating s
cc60: 65 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62  equences might b
cc70: 65 20 75 73 65 64 20 65 6c 73 65 77 68 65 72 65  e used elsewhere
cc80: 0a 20 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  .  in the curren
cc90: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20  tly running SQL 
cca0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c  statement.  To l
ccb0: 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  oad an extension
ccc0: 20 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20   that.  changes 
ccd0: 6f 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74  or deletes funct
cce0: 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
ccf0: 67 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65  g sequences, use
cd00: 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
cd10: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
cd20: 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49  ] C-language API
cd30: 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  .</p>.}..funcdef
cd40: 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b   {lower(X)} {} {
cd50: 0a 20 20 52 65 74 75 72 6e 20 61 20 63 6f 70 79  .  Return a copy
cd60: 20 6f 66 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c   of string <i>X<
cd70: 2f 69 3e 20 77 69 74 68 20 61 6c 6c 20 41 53 43  /i> with all ASC
cd80: 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20 20  II characters.  
cd90: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77  converted to low
cda0: 65 72 20 63 61 73 65 2e 20 20 54 68 65 20 43 20  er case.  The C 
cdb0: 6c 69 62 72 61 72 79 20 3c 62 3e 74 6f 6c 6f 77  library <b>tolow
cdc0: 65 72 28 29 3c 2f 62 3e 20 72 6f 75 74 69 6e 65  er()</b> routine
cdd0: 20 69 73 20 75 73 65 64 0a 20 20 66 6f 72 20 74   is used.  for t
cde0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 77  he conversion, w
cdf0: 68 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20  hich means that 
ce00: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 69  this function mi
ce10: 67 68 74 20 6e 6f 74 0a 20 20 77 6f 72 6b 20 63  ght not.  work c
ce20: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 6e 6f 6e 2d  orrectly on non-
ce30: 41 53 43 49 49 20 55 54 46 2d 38 20 63 68 61 72  ASCII UTF-8 char
ce40: 61 63 74 65 72 73 2e 0a 7d 0a 0a 66 75 6e 63 64  acters..}..funcd
ce50: 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72  ef {ltrim(X) ltr
ce60: 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
ce70: 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20  Return a string 
ce80: 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
ce90: 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
cea0: 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
ceb0: 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c   appear in <i>Y<
cec0: 2f 69 3e 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  /i> from the lef
ced0: 74 20 73 69 64 65 20 6f 66 20 3c 69 3e 58 3c 2f  t side of <i>X</
cee0: 69 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c 69 3e  i>..  If the <i>
cef0: 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69  Y</i> argument i
cf00: 73 20 6f 6d 69 74 74 65 64 2c 20 73 70 61 63 65  s omitted, space
cf10: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d  s are removed..}
cf20: 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
cf30: 2c 59 2c 2e 2e 2e 29 7d 20 7b 6d 61 78 43 6f 72  ,Y,...)} {maxCor
cf40: 65 46 75 6e 63 20 6d 61 78 7d 20 7b 0a 20 20 52  eFunc max} {.  R
cf50: 65 74 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65  eturn the argume
cf60: 6e 74 20 77 69 74 68 20 74 68 65 20 6d 61 78 69  nt with the maxi
cf70: 6d 75 6d 20 76 61 6c 75 65 2e 20 20 41 72 67 75  mum value.  Argu
cf80: 6d 65 6e 74 73 0a 20 20 6d 61 79 20 62 65 20 73  ments.  may be s
cf90: 74 72 69 6e 67 73 20 69 6e 20 61 64 64 69 74 69  trings in additi
cfa0: 6f 6e 20 74 6f 20 6e 75 6d 62 65 72 73 2e 20 20  on to numbers.  
cfb0: 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75  The maximum valu
cfc0: 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a  e is determined.
cfd0: 20 20 62 79 20 74 68 65 20 75 73 75 61 6c 20 73    by the usual s
cfe0: 6f 72 74 20 6f 72 64 65 72 2e 20 20 4e 6f 74 65  ort order.  Note
cff0: 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f   that <b>max()</
d000: 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66  b> is a simple f
d010: 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69  unction when.  i
d020: 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20  t has 2 or more 
d030: 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 63 6f  arguments but co
d040: 6e 76 65 72 74 73 20 74 6f 20 61 6e 20 61 67 67  nverts to an agg
d050: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
d060: 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20  if given.  only 
d070: 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
d080: 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  t..}..funcdef {m
d090: 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 6d 69  in(X,Y,...)} {mi
d0a0: 6e 43 6f 72 65 46 75 6e 63 20 6d 69 6e 7d 20 7b  nCoreFunc min} {
d0b0: 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 72  .  Return the ar
d0c0: 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20  gument with the 
d0d0: 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20  minimum value.  
d0e0: 41 72 67 75 6d 65 6e 74 73 0a 20 20 6d 61 79 20  Arguments.  may 
d0f0: 62 65 20 73 74 72 69 6e 67 73 20 69 6e 20 61 64  be strings in ad
d100: 64 69 74 69 6f 6e 20 74 6f 20 6e 75 6d 62 65 72  dition to number
d110: 73 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20  s.  The minimum 
d120: 76 61 6c 75 65 20 69 73 20 64 65 74 65 72 6d 69  value is determi
d130: 6e 65 64 0a 20 20 62 79 20 74 68 65 20 75 73 75  ned.  by the usu
d140: 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20  al sort order.  
d150: 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e  Note that <b>min
d160: 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
d170: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
d180: 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
d190: 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
d1a0: 74 20 63 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e  t converts to an
d1b0: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
d1c0: 69 6f 6e 20 69 66 20 67 69 76 65 6e 0a 20 20 6f  ion if given.  o
d1d0: 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
d1e0: 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ument..}..funcde
d1f0: 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20  f {nullif(X,Y)} 
d200: 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68  {} {.  Return th
d210: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
d220: 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
d230: 73 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2c  s are different,
d240: 20 0a 20 20 6f 74 68 65 72 77 69 73 65 20 72 65   .  otherwise re
d250: 74 75 72 6e 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75  turn NULL..}..fu
d260: 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d  ncdef {quote(X)}
d270: 20 7b 7d 20 7b 0a 20 20 54 68 69 73 20 72 6f 75   {} {.  This rou
d280: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 61 20 73  tine returns a s
d290: 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74  tring which is t
d2a0: 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20 69 74  he value of.  it
d2b0: 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61  s argument suita
d2c0: 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f  ble for inclusio
d2d0: 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 20 53  n into another S
d2e0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  QL statement..  
d2f0: 53 74 72 69 6e 67 73 20 61 72 65 20 73 75 72 72  Strings are surr
d300: 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65  ounded by single
d310: 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65 73 63  -quotes with esc
d320: 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72  apes on interior
d330: 20 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65   quotes.  as nee
d340: 64 65 64 2e 20 20 42 4c 4f 42 73 20 61 72 65 20  ded.  BLOBs are 
d350: 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64  encoded as hexad
d360: 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e  ecimal literals.
d370: 0a 20 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74  .  The implement
d380: 61 74 69 6f 6e 20 6f 66 20 5b 56 41 43 55 55 4d  ation of [VACUUM
d390: 5d 20 75 73 65 73 20 74 68 69 73 20 66 75 6e 63  ] uses this func
d3a0: 74 69 6f 6e 2e 20 54 68 65 20 66 75 6e 63 74 69  tion. The functi
d3b0: 6f 6e 0a 20 20 69 73 20 61 6c 73 6f 20 75 73 65  on.  is also use
d3c0: 66 75 6c 20 77 68 65 6e 20 77 72 69 74 69 6e 67  ful when writing
d3d0: 20 74 72 69 67 67 65 72 73 20 74 6f 20 69 6d 70   triggers to imp
d3e0: 6c 65 6d 65 6e 74 20 75 6e 64 6f 2f 72 65 64 6f  lement undo/redo
d3f0: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a   functionality..
d400: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64  }..funcdef {rand
d410: 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74  om()} {} {.  Ret
d420: 75 72 6e 20 61 20 70 73 65 75 64 6f 2d 72 61 6e  urn a pseudo-ran
d430: 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65  dom integer.  be
d440: 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33  tween -922337203
d450: 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b  6854775808 and +
d460: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
d470: 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  807..}..funcdef 
d480: 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20  {randomblob(N)} 
d490: 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 6e  {} {.  Return an
d4a0: 20 3c 69 3e 4e 3c 2f 69 3e 2d 62 79 74 65 20 62   <i>N</i>-byte b
d4b0: 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  lob containing p
d4c0: 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 62 79 74  seudo-random byt
d4d0: 65 73 2e 0a 20 20 3c 69 3e 4e 3c 2f 69 3e 20 73  es..  <i>N</i> s
d4e0: 68 6f 75 6c 64 20 62 65 20 61 20 70 6f 73 74 69  hould be a posti
d4f0: 76 65 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20 3c  ve integer...  <
d500: 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61  p>Hint:  applica
d510: 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61  tions can genera
d520: 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71  te globally uniq
d530: 75 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20  ue identifiers. 
d540: 20 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63   using this func
d550: 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69  tion together wi
d560: 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f  th [hex()] and/o
d570: 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69  r.  [lower()] li
d580: 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20  ke this:</p>..  
d590: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68  <blockquote>.  h
d5a0: 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
d5b0: 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f  ))<br></br>.  lo
d5c0: 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c  wer(hex(randombl
d5d0: 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f  ob(16))).  </blo
d5e0: 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63  ckquote>.}..func
d5f0: 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59  def {replace(X,Y
d600: 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  ,Z)} {} {.  Retu
d610: 72 6e 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  rn a string form
d620: 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69  ed by substituti
d630: 6e 67 20 73 74 72 69 6e 67 20 3c 69 3e 5a 3c 2f  ng string <i>Z</
d640: 69 3e 20 66 6f 72 0a 20 20 65 76 65 72 79 20 6f  i> for.  every o
d650: 63 63 75 72 72 61 6e 63 65 20 6f 66 20 73 74 72  ccurrance of str
d660: 69 6e 67 20 3c 69 3e 59 3c 2f 69 3e 20 69 6e 20  ing <i>Y</i> in 
d670: 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e  string <i>X</i>.
d680: 20 20 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20    The [BINARY]. 
d690: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
d6a0: 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  nce is used for 
d6b0: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 7d 0a 0a  comparisons..}..
d6c0: 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58  funcdef {round(X
d6d0: 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d  ) round(X,Y)} {}
d6e0: 20 7b 0a 20 20 52 6f 75 6e 64 20 6f 66 66 20 74   {.  Round off t
d6f0: 68 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58 3c 2f  he number <i>X</
d700: 69 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e 20 64  i> to <i>Y</i> d
d710: 69 67 69 74 73 20 74 6f 20 74 68 65 0a 20 20 72  igits to the.  r
d720: 69 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69  ight of the deci
d730: 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66 20 74  mal point.  If t
d740: 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75  he <i>Y</i> argu
d750: 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
d760: 20 30 20 69 73 20 0a 20 20 61 73 73 75 6d 65 64   0 is .  assumed
d770: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74  ..}..funcdef {rt
d780: 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59  rim(X) rtrim(X,Y
d790: 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
d7a0: 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64   a string formed
d7b0: 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
d7c0: 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61   and all.  chara
d7d0: 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61  cters that appea
d7e0: 72 20 69 6e 20 3c 69 3e 59 3c 2f 69 3e 20 66 72  r in <i>Y</i> fr
d7f0: 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64  om the right sid
d800: 65 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 20  e of <i>X</i>.. 
d810: 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e   If the <i>Y</i>
d820: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
d830: 74 74 65 64 2c 20 73 70 61 63 65 73 20 61 72 65  tted, spaces are
d840: 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a 66 75 6e   removed..}..fun
d850: 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29  cdef {soundex(X)
d860: 7d 20 7b 7d 20 7b 0a 20 20 43 6f 6d 70 75 74 65  } {} {.  Compute
d870: 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63   the soundex enc
d880: 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72  oding of the str
d890: 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 20 20  ing <i>X</i>..  
d8a0: 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30  The string "?000
d8b0: 22 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  " is returned if
d8c0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   the argument is
d8d0: 20 4e 55 4c 4c 2e 0a 20 20 54 68 69 73 20 66 75   NULL..  This fu
d8e0: 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65  nction is omitte
d8f0: 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79  d from SQLite by
d900: 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69   default..  It i
d910: 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
d920: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 53 4f   the -DSQLITE_SO
d930: 55 4e 44 45 58 3d 31 20 63 6f 6d 70 69 6c 65 72  UNDEX=1 compiler
d940: 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65   option.  is use
d950: 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73  d when SQLite is
d960: 20 62 75 69 6c 74 2e 0a 7d 0a 0a 66 75 6e 63 64   built..}..funcd
d970: 65 66 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69  ef {sqlite_versi
d980: 6f 6e 28 58 29 7d 20 7b 73 71 6c 69 74 65 5f 76  on(X)} {sqlite_v
d990: 65 72 73 69 6f 6e 7d 20 7b 0a 20 20 52 65 74 75  ersion} {.  Retu
d9a0: 72 6e 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73  rn the version s
d9b0: 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51  tring for the SQ
d9c0: 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 20 20 74  Lite library.  t
d9d0: 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20  hat is running. 
d9e0: 20 45 78 61 6d 70 6c 65 3a 20 20 22 33 2e 35 2e   Example:  "3.5.
d9f0: 39 22 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  9".}..funcdef {s
da00: 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62  ubstr(X,Y,Z) sub
da10: 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  str(X,Y)} {} {. 
da20: 20 52 65 74 75 72 6e 20 61 20 73 75 62 73 74 72   Return a substr
da30: 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74 72  ing of input str
da40: 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 74 68 61  ing <i>X</i> tha
da50: 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20  t begins.  with 
da60: 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74 68 20  the <i>Y</i>-th 
da70: 63 68 61 72 61 63 74 65 72 20 61 6e 64 20 77 68  character and wh
da80: 69 63 68 20 69 73 20 3c 69 3e 5a 3c 2f 69 3e 20  ich is <i>Z</i> 
da90: 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
daa0: 0a 20 20 49 66 20 3c 69 3e 5a 3c 2f 69 3e 20 69  .  If <i>Z</i> i
dab0: 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 61  s omitted then a
dac0: 6c 6c 20 63 68 61 72 61 63 74 65 72 20 74 68 72  ll character thr
dad0: 6f 75 67 68 20 74 68 65 20 65 6e 64 20 6f 66 20  ough the end of 
dae0: 74 68 65 20 73 74 72 69 6e 67 0a 20 20 61 72 65  the string.  are
daf0: 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 54 68 65   returned..  The
db00: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
db10: 63 74 65 72 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  cter of <i>X</i>
db20: 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20 20 49   is number 1.  I
db30: 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6e 65  f <i>Y</i> is ne
db40: 67 61 74 69 76 65 0a 20 20 74 68 65 20 74 68 65  gative.  the the
db50: 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
db60: 20 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e   of the substrin
db70: 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f  g is found by co
db80: 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a  unting from the.
db90: 20 20 72 69 67 68 74 20 72 61 74 68 65 72 20 74    right rather t
dba0: 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 49  han the left.  I
dbb0: 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 73 74  f <i>X</i> is st
dbc0: 72 69 6e 67 0a 20 20 74 68 65 6e 20 63 68 61 72  ring.  then char
dbd0: 61 63 74 65 72 73 20 69 6e 64 69 63 65 73 20 72  acters indices r
dbe0: 65 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55  efer to actual U
dbf0: 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e  TF-8 characters.
dc00: 20 20 49 66 0a 20 20 3c 69 3e 58 3c 2f 69 3e 20    If.  <i>X</i> 
dc10: 69 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74  is a BLOB then t
dc20: 68 65 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  he indices refer
dc30: 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75   to bytes..}..fu
dc40: 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74  ncdef {trim(X) t
dc50: 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
dc60: 20 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67   Return a string
dc70: 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76   formed by remov
dc80: 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a  ing any and all.
dc90: 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61    characters tha
dca0: 74 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59  t appear in <i>Y
dcb0: 3c 2f 69 3e 20 66 72 6f 6d 20 62 6f 74 68 20 65  </i> from both e
dcc0: 6e 64 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  nds of <i>X</i>.
dcd0: 0a 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f  .  If the <i>Y</
dce0: 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  i> argument is o
dcf0: 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73 20 61  mitted, spaces a
dd00: 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a 66  re removed..}..f
dd10: 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
dd20: 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
dd30: 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65   the type of the
dd40: 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 69 3e 58   expression <i>X
dd50: 3c 2f 69 3e 2e 20 20 54 68 65 20 6f 6e 6c 79 20  </i>.  The only 
dd60: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  .  return values
dd70: 20 61 72 65 20 22 6e 75 6c 6c 22 2c 20 22 69 6e   are "null", "in
dd80: 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20  teger", "real", 
dd90: 22 74 65 78 74 22 2c 20 61 6e 64 20 22 62 6c 6f  "text", and "blo
dda0: 62 22 2e 0a 20 20 53 51 4c 69 74 65 27 73 20 74  b"..  SQLite's t
ddb0: 79 70 65 20 68 61 6e 64 6c 69 6e 67 20 69 73 20  ype handling is 
ddc0: 0a 20 20 65 78 70 6c 61 69 6e 65 64 20 69 6e 20  .  explained in 
ddd0: 3c 61 20 68 72 65 66 3d 22 64 61 74 61 74 79 70  <a href="datatyp
dde0: 65 33 2e 68 74 6d 6c 22 3e 44 61 74 61 74 79 70  e3.html">Datatyp
ddf0: 65 73 20 69 6e 20 53 51 4c 69 74 65 20 56 65 72  es in SQLite Ver
de00: 73 69 6f 6e 20 33 3c 2f 61 3e 2e 0a 7d 0a 0a 66  sion 3</a>..}..f
de10: 75 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29  uncdef {upper(X)
de20: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
de30: 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20  a copy of input 
de40: 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20  string <i>X</i> 
de50: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c  converted to all
de60: 0a 20 20 75 70 70 65 72 2d 63 61 73 65 20 6c 65  .  upper-case le
de70: 74 74 65 72 73 2e 20 20 54 68 65 20 69 6d 70 6c  tters.  The impl
de80: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
de90: 69 73 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73  is function uses
dea0: 20 74 68 65 20 43 20 6c 69 62 72 61 72 79 0a 20   the C library. 
deb0: 20 72 6f 75 74 69 6e 65 20 3c 62 3e 74 6f 75 70   routine <b>toup
dec0: 70 65 72 28 29 3c 2f 62 3e 20 77 68 69 63 68 20  per()</b> which 
ded0: 6d 65 61 6e 73 20 69 74 20 6d 61 79 20 6e 6f 74  means it may not
dee0: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20   work correctly 
def0: 6f 6e 20 0a 20 20 6e 6f 6e 2d 41 53 43 49 49 20  on .  non-ASCII 
df00: 55 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 0a 7d  UTF-8 strings..}
df10: 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62  ..funcdef {zerob
df20: 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 52  lob(N)} {} {.  R
df30: 65 74 75 72 6e 20 61 20 42 4c 4f 42 20 63 6f 6e  eturn a BLOB con
df40: 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74  sisting of N byt
df50: 65 73 20 6f 66 20 30 78 30 30 2e 20 20 53 51 4c  es of 0x00.  SQL
df60: 69 74 65 0a 20 20 6d 61 6e 61 67 65 73 20 74 68  ite.  manages th
df70: 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
df80: 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
df90: 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
dfa0: 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
dfb0: 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
dfc0: 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
dfd0: 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
dfe0: 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
dff0: 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
e000: 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
e010: 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
e020: 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
e030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e070: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
e080: 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
e090: 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
e0a0: 66 75 6e 63 20 7b 64 61 74 65 66 75 6e 63 7d 0a  func {datefunc}.
e0b0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  </tcl>..<p>.SQLi
e0c0: 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65  te supports five
e0d0: 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
e0e0: 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c  unctions as foll
e0f0: 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  ows:.</p>..<p>.<
e100: 6f 6c 3e 0a 3c 6c 69 3e 20 3c 62 3e 64 61 74 65  ol>.<li> <b>date
e110: 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
e120: 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
e130: 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
e140: 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c  b>)</b> </li>.<l
e150: 69 3e 20 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c  i> <b>time(</b><
e160: 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  i>timestring, mo
e170: 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
e180: 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
e190: 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e  > </li>.<li> <b>
e1a0: 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e  datetime(</b><i>
e1b0: 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
e1c0: 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
e1d0: 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20  ...</i><b>)</b> 
e1e0: 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6a 75  </li>.<li> <b>ju
e1f0: 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74  lianday(</b><i>t
e200: 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
e210: 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
e220: 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c  ..</i><b>)</b> <
e230: 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 73 74 72  /li>.<li> <b>str
e240: 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72  ftime(</b><i>for
e250: 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c  mat, timestring,
e260: 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
e270: 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
e280: 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  </b> </li>.</ol>
e290: 0a 0a 3c 70 3e 0a 41 6c 6c 20 66 69 76 65 20 66  ..<p>.All five f
e2a0: 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20  unctions take a 
e2b0: 74 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61  time string as a
e2c0: 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54 68 65 20  n argument. The 
e2d0: 74 69 6d 65 20 73 74 72 69 6e 67 0a 69 73 20 66  time string.is f
e2e0: 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
e2f0: 6f 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72  or more modifier
e300: 73 2e 20 0a 54 68 65 20 73 74 72 66 74 69 6d 65  s. .The strftime
e310: 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f  () function also
e320: 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20   takes a format 
e330: 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69  string as its fi
e340: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f  rst argument..</
e350: 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65  p>..<p>.The date
e360: 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
e370: 72 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20  rns the date in 
e380: 74 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59  this format: YYY
e390: 59 2d 4d 4d 2d 44 44 2e 20 0a 54 68 65 20 74 69  Y-MM-DD. .The ti
e3a0: 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
e3b0: 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61  turns the time a
e3c0: 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 54 68 65  s HH:MM:SS. .The
e3d0: 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63   datetime() func
e3e0: 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59  tion returns "YY
e3f0: 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53  YY-MM-DD HH:MM:S
e400: 53 22 2e 20 0a 54 68 65 20 6a 75 6c 69 61 6e 64  S". .The juliand
e410: 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ay() function re
e420: 74 75 72 6e 73 20 74 68 65 20 0a 3c 61 20 68 72  turns the .<a hr
e430: 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ef="http://en.wi
e440: 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
e450: 2f 4a 75 6c 69 61 6e 5f 64 61 79 22 3e 6a 75 6c  /Julian_day">jul
e460: 69 61 6e 20 64 61 79 3c 2f 61 3e 20 2d 20 0a 6e  ian day</a> - .n
e470: 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69  umber of days si
e480: 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65  nce noon in Gree
e490: 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65  nwich on Novembe
e4a0: 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20  r 24, 4714 B.C. 
e4b0: 0a 28 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  .(<a href="http:
e4c0: 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
e4d0: 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69  rg/wiki/Prolepti
e4e0: 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  c_Gregorian_cale
e4f0: 6e 64 61 72 22 3e 0a 50 72 6f 6c 65 70 74 69 63  ndar">.Proleptic
e500: 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e   Gregorian calen
e510: 64 61 72 3c 2f 61 3e 29 2e 20 0a 54 68 65 20 73  dar</a>). .The s
e520: 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e  trftime() routin
e530: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  e returns the da
e540: 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63  te formatted acc
e550: 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66  ording to .the f
e560: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65  ormat string spe
e570: 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69  cified as the fi
e580: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 54 68  rst argument..Th
e590: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
e5a0: 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73  supports the mos
e5b0: 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74  t common substit
e5c0: 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  utions found in 
e5d0: 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74  the .<a href="ht
e5e0: 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f  tp://opengroup.o
e5f0: 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30  rg/onlinepubs/00
e600: 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66  7908799/xsh/strf
e610: 74 69 6d 65 2e 68 74 6d 6c 22 3e 0a 73 74 72 66  time.html">.strf
e620: 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 3c  time() function<
e630: 2f 61 3e 20 66 72 6f 6d 20 0a 74 68 65 20 73 74  /a> from .the st
e640: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
e650: 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75   plus two new su
e660: 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20  bstitutions, %f 
e670: 61 6e 64 20 25 4a 2e 0a 54 68 65 20 66 6f 6c 6c  and %J..The foll
e680: 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c  owing is a compl
e690: 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69  ete list of vali
e6a0: 64 20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62  d strftime() sub
e6b0: 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e  stitutions:.</p>
e6c0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
e6d0: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22  table border="0"
e6e0: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22   cellpadding="0"
e6f0: 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22   cellspacing="0"
e700: 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69  >.<tr><td><td wi
e710: 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74  dth="10"><td></t
e720: 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20  r>..<tr><td> %d 
e730: 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
e740: 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74  month: 00.<tr><t
e750: 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66  d> %f <td><td> f
e760: 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64  ractional second
e770: 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74  s: SS.SSS.<tr><t
e780: 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68  d> %H <td><td> h
e790: 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e  our: 00-24 .<tr>
e7a0: 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e  <td> %j <td><td>
e7b0: 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30   day of year: 00
e7c0: 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25  1-366.<tr><td> %
e7d0: 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61  J <td><td> Julia
e7e0: 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72  n day number.<tr
e7f0: 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64  ><td> %m <td><td
e800: 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c  > month: 01-12.<
e810: 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c  tr><td> %M <td><
e820: 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35  td> minute: 00-5
e830: 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74  9.<tr><td> %s <t
e840: 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73  d><td> seconds s
e850: 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a  ince 1970-01-01.
e860: 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e  <tr><td> %S <td>
e870: 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30  <td> seconds: 00
e880: 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20  -59.<tr><td> %w 
e890: 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
e8a0: 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20 73 75  week 0-6 with su
e8b0: 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e  nday==0.<tr><td>
e8c0: 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65   %W <td><td> wee
e8d0: 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33  k of year: 00-53
e8e0: 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64  .<tr><td> %Y <td
e8f0: 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30  ><td> year: 0000
e900: 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  -9999.<tr><td> %
e910: 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74  % <td><td> %.</t
e920: 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
e930: 74 65 3e 0a 0a 3c 70 3e 0a 4e 6f 74 69 63 65 20  te>..<p>.Notice 
e940: 74 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64  that all other d
e950: 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
e960: 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78  ctions can be ex
e970: 70 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73  pressed.in terms
e980: 20 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a   of strftime():.
e990: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
e9a0: 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  e>.<table border
e9b0: 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  ="0" cellpadding
e9c0: 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67  ="0" cellspacing
e9d0: 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62  ="0">.<tr><td><b
e9e0: 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64  >Function</b><td
e9f0: 20 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e   width="30"><td>
ea00: 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74  <b>Equivalent st
ea10: 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72  rftime()</b>.<tr
ea20: 3e 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e  ><td>   date(...
ea30: 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20  )      <td><td> 
ea40: 20 73 74 72 66 74 69 6d 65 28 22 25 59 2d 25 6d   strftime("%Y-%m
ea50: 2d 25 64 22 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c  -%d", ...).<tr><
ea60: 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20  td>   time(...) 
ea70: 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
ea80: 74 72 66 74 69 6d 65 28 22 25 48 3a 25 4d 3a 25  trftime("%H:%M:%
ea90: 53 22 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  S", ...).<tr><td
eaa0: 3e 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e  >   datetime(...
eab0: 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72  )  <td><td>  str
eac0: 66 74 69 6d 65 28 22 25 59 2d 25 6d 2d 25 64 20  ftime("%Y-%m-%d 
ead0: 25 48 3a 25 4d 3a 25 53 22 2c 20 2e 2e 2e 29 0a  %H:%M:%S", ...).
eae0: 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61  <tr><td>   julia
eaf0: 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74  nday(...) <td><t
eb00: 64 3e 20 20 73 74 72 66 74 69 6d 65 28 22 25 4a  d>  strftime("%J
eb10: 22 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e  ", ...).</table>
eb20: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
eb30: 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61  <p>.The only rea
eb40: 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69  sons for providi
eb50: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68  ng functions oth
eb60: 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65  er than strftime
eb70: 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e  () is.for conven
eb80: 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66  ience and for ef
eb90: 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a  ficiency..</p>..
eba0: 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73  <h3>Time Strings
ebb0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 74 69 6d 65  </h3>..<p>A time
ebc0: 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69   string can be i
ebd0: 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  n any of the fol
ebe0: 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c  lowing formats:<
ebf0: 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c  /p>..<ol>.<li> <
ec00: 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
ec10: 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
ec20: 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  -DD HH:MM</i>.<l
ec30: 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
ec40: 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c   HH:MM:SS</i>.<l
ec50: 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
ec60: 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69   HH:MM:SS.SSS</i
ec70: 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
ec80: 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
ec90: 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
eca0: 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
ecb0: 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
ecc0: 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
ecd0: 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
ece0: 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
ecf0: 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
ed00: 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  > <i>HH:MM</i>.<
ed10: 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  li> <i>HH:MM:SS<
ed20: 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
ed30: 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
ed40: 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69  > <b>now</b>.<li
ed50: 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c  > <i>DDDDDDDDDD<
ed60: 2f 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 49  /i>.</ol>..<p>.I
ed70: 6e 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f  n formats 5 thro
ed80: 75 67 68 20 37 2c 20 74 68 65 20 22 54 22 20 69  ugh 7, the "T" i
ed90: 73 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72  s a literal char
eda0: 61 63 74 65 72 20 73 65 70 61 72 61 74 69 6e 67  acter separating
edb0: 20 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20 74   .the date and t
edc0: 68 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75  he time, as requ
edd0: 69 72 65 64 20 62 79 20 0a 3c 61 20 68 72 65 66  ired by .<a href
ede0: 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63  ="http://www.w3c
edf0: 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74  .org/TR/NOTE-dat
ee00: 65 74 69 6d 65 22 3e 49 53 4f 2d 38 36 30 31 3c  etime">ISO-8601<
ee10: 2f 61 3e 2e 20 0a 46 6f 72 6d 61 74 73 20 38 20  /a>. .Formats 8 
ee20: 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74 20  through 10 that 
ee30: 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74  specify only a t
ee40: 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61 74  ime assume a dat
ee50: 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31  e of .2000-01-01
ee60: 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65  . Format 11, the
ee70: 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69   string 'now', i
ee80: 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
ee90: 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61   the .current da
eea0: 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f  te and time as o
eeb0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
eec0: 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65   xCurrentTime me
eed0: 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c  thod.of the [sql
eee0: 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74  ite3_vfs] object
eef0: 20 69 6e 20 75 73 65 2e 0a 3c 61 20 68 72 65 66   in use..<a href
ef00: 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  ="http://en.wiki
ef10: 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43  pedia.org/wiki/C
ef20: 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65  oordinated_Unive
ef30: 72 73 61 6c 5f 54 69 6d 65 22 3e 0a 55 6e 69 76  rsal_Time">.Univ
ef40: 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65  ersal Coordinate
ef50: 64 20 54 69 6d 65 20 28 55 54 43 29 3c 2f 61 3e  d Time (UTC)</a>
ef60: 20 69 73 20 75 73 65 64 2e 20 0a 46 6f 72 6d 61   is used. .Forma
ef70: 74 20 31 32 20 69 73 20 74 68 65 20 0a 3c 61 20  t 12 is the .<a 
ef80: 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e  href="http://en.
ef90: 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
efa0: 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 22 3e 6a  ki/Julian_day">j
efb0: 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
efc0: 3c 2f 61 3e 0a 65 78 70 72 65 73 73 65 64 20 61  </a>.expressed a
efd0: 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
efe0: 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a  nt value..</p>..
eff0: 3c 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68  <h3>Modifiers</h
f000: 33 3e 0a 0a 3c 70 3e 54 68 65 20 74 69 6d 65 20  3>..<p>The time 
f010: 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f  string can be fo
f020: 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
f030: 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
f040: 20 74 68 61 74 20 0a 61 6c 74 65 72 20 74 68 65   that .alter the
f050: 20 64 61 74 65 20 6f 72 20 61 6c 74 65 72 20 74   date or alter t
f060: 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
f070: 6e 20 6f 66 20 74 68 65 20 64 61 74 65 2e 20 0a  n of the date. .
f080: 54 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f  The available mo
f090: 64 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66  difiers are as f
f0a0: 6f 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows.</p>..<ol
f0b0: 3e 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a  >.<li> NNN days.
f0c0: 3c 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c  <li> NNN hours.<
f0d0: 6c 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a  li> NNN minutes.
f0e0: 3c 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65  <li> NNN.NNNN se
f0f0: 63 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d  conds.<li> NNN m
f100: 6f 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79  onths.<li> NNN y
f110: 65 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20  ears.<li> start 
f120: 6f 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74  of month.<li> st
f130: 61 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e  art of year.<li>
f140: 20 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c   start of day.<l
f150: 69 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69  i> weekday N.<li
f160: 3e 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e  > unixepoch.<li>
f170: 20 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20   localtime.<li> 
f180: 75 74 63 20 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  utc .</ol>..<p>T
f190: 68 65 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64  he first six mod
f1a0: 69 66 69 65 72 73 20 28 31 20 74 68 72 6f 75 67  ifiers (1 throug
f1b0: 68 20 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64  h 6) .simply add
f1c0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61   the specified a
f1d0: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f  mount of time to
f1e0: 20 74 68 65 20 64 61 74 65 20 0a 73 70 65 63 69   the date .speci
f1f0: 66 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63  fied by the prec
f200: 65 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67  eding timestring
f210: 2e 0a 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c  ..Note that "&pl
f220: 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22  usmn;NNN months"
f230: 20 77 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72   works by render
f240: 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
f250: 20 64 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59   date into.the Y
f260: 59 59 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74  YYY-MM-DD format
f270: 2c 20 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c  , adding the &pl
f280: 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20  usmn;NNN to the 
f290: 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20  MM month value, 
f2a0: 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67  then.normalizing
f2b0: 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 54 68   the result.  Th
f2c0: 75 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c  us, for example,
f2d0: 20 74 68 65 20 64 61 74 61 20 32 30 30 31 2d 30   the data 2001-0
f2e0: 33 2d 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79  3-31 modified.by
f2f0: 20 27 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74   '+1 month' init
f300: 69 61 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30  ially yields 200
f310: 31 2d 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72  1-04-31, but Apr
f320: 69 6c 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64  il only has 30 d
f330: 61 79 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20  ays.so the date 
f340: 69 73 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f  is normalized to
f350: 20 32 30 30 31 2d 30 35 2d 30 31 2e 20 20 41 20   2001-05-01.  A 
f360: 73 69 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f  similar effect o
f370: 63 63 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f  ccurs when.the o
f380: 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20  riginal date is 
f390: 46 65 62 72 75 61 72 79 20 32 39 20 6f 66 20 61  February 29 of a
f3a0: 20 6c 65 61 70 79 65 61 72 20 61 6e 64 20 74 68   leapyear and th
f3b0: 65 20 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70  e modifier is.&p
f3c0: 6c 75 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68  lusmn;N years wh
f3d0: 65 72 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d  ere N is not a m
f3e0: 75 6c 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e  ultiple of four.
f3f0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 73 74  </p>..<p>The "st
f400: 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
f410: 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
f420: 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
f430: 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
f440: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
f450: 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
f460: 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
f470: 3e 0a 0a 3c 70 3e 54 68 65 20 22 77 65 65 6b 64  >..<p>The "weekd
f480: 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
f490: 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
f4a0: 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65  orward to the ne
f4b0: 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74  xt date .where t
f4c0: 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
f4d0: 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
f4e0: 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
f4f0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c  , and so forth.<
f500: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 75 6e 69  /p>..<p>The "uni
f510: 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
f520: 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73   (11) only works
f530: 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65   if it immediate
f540: 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69  ly follows .a ti
f550: 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  mestring in the 
f560: 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61  DDDDDDDDDD forma
f570: 74 2e 20 0a 54 68 69 73 20 6d 6f 64 69 66 69 65  t. .This modifie
f580: 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44 44  r causes the DDD
f590: 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e  DDDDDDD to be in
f5a0: 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61  terpreted not .a
f5b0: 73 20 61 20 6a 75 6c 69 61 6e 20 64 61 79 20 6e  s a julian day n
f5c0: 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d  umber as it norm
f5d0: 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62  ally would be, b
f5e0: 75 74 20 61 73 0a 3c 61 20 68 72 65 66 3d 22 68  ut as.<a href="h
f5f0: 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
f600: 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78  ia.org/wiki/Unix
f610: 5f 74 69 6d 65 22 3e 55 6e 69 78 20 54 69 6d 65  _time">Unix Time
f620: 3c 2f 61 3e 20 2d 20 74 68 65 20 0a 6e 75 6d 62  </a> - the .numb
f630: 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
f640: 6e 63 65 20 31 39 37 30 2e 3c 2f 70 3e 0a 0a 3c  nce 1970.</p>..<
f650: 70 3e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65  p>The "localtime
f660: 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20  " modifier (12) 
f670: 61 64 6a 75 73 74 73 20 74 68 65 20 70 72 65 76  adjusts the prev
f680: 69 6f 75 73 20 74 69 6d 65 0a 73 74 72 69 6e 67  ious time.string
f690: 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70   so that it disp
f6a0: 6c 61 79 73 20 74 68 65 20 63 6f 72 72 65 63 74  lays the correct
f6b0: 20 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 22 75 74   local time. "ut
f6c0: 63 22 20 75 6e 64 6f 65 73 20 74 68 69 73 2e 3c  c" undoes this.<
f6d0: 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65  /p>..<h3>Example
f6e0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6d 70 75  s</h3>..<p>Compu
f6f0: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  te the current d
f700: 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ate.<p>..<blockq
f710: 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
f720: 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71  ('now');</blockq
f730: 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74  uote>..<p>Comput
f740: 65 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f  e the last day o
f750: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  f the current mo
f760: 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nth.</p>..<block
f770: 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
f780: 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
f790: 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e  f month','+1 mon
f7a0: 74 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c  th','-1 day');.<
f7b0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
f7c0: 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
f7d0: 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
f7e0: 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
f7f0: 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70  p 1092941466.</p
f800: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
f810: 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74      SELECT datet
f820: 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20  ime(1092941466, 
f830: 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f  'unixepoch');.</
f840: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
f850: 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
f860: 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
f870: 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
f880: 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64   1092941466, and
f890: 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72   .compensate for
f8a0: 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65   your local time
f8b0: 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  zone.</p>..<bloc
f8c0: 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
f8d0: 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
f8e0: 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
f8f0: 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b  ', 'localtime');
f900: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
f910: 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
f920: 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65  urrent unix time
f930: 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  stamp.</p>..<blo
f940: 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
f950: 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
f960: 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  'now');.</blockq
f970: 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74  uote>..<p>Comput
f980: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
f990: 64 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73  days since the s
f9a0: 69 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53  igning of the US
f9b0: 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20   Declaration.of 
f9c0: 49 6e 64 65 70 65 6e 64 65 6e 74 2e 3c 2f 70 3e  Independent.</p>
f9d0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
f9e0: 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
f9f0: 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
fa00: 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
fa10: 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
fa20: 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  >..<p>Compute th
fa30: 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  e number of seco
fa40: 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72 74  nds since a part
fa50: 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e  icular moment in
fa60: 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f   2004:</p>..<blo
fa70: 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
fa80: 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
fa90: 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d  'now') - strftim
faa0: 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d  e('%s','2004-01-
fab0: 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c  01 02:34:56');.<
fac0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
fad0: 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  >.Compute the da
fae0: 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  te of the first 
faf0: 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62  Tuesday in Octob
fb00: 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65  er.for the curre
fb10: 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  nt year..</p>..<
fb20: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
fb30: 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
fb40: 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c  'start of year',
fb50: 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65  '+9 months','wee
fb60: 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63  kday 2');.</bloc
fb70: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70  kquote>..<p>Comp
fb80: 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
fb90: 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
fba0: 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
fbb0: 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
fbc0: 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
fbd0: 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
fbe0: 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
fbf0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
fc00: 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
fc10: 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
fc20: 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
fc30: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 33  blockquote>..<h3
fc40: 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42 75 67  >Caveats And Bug
fc50: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63  s</h3>..<p>The c
fc60: 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f  omputation of lo
fc70: 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73  cal time depends
fc80: 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20   heavily on the 
fc90: 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63  whim .of politic
fca0: 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73  ians and is thus
fcb0: 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65   difficult to ge
fcc0: 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61  t correct for .a
fcd0: 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 49 6e 20 74  ll locales. In t
fce0: 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  his implementati
fcf0: 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64  on, the standard
fd00: 20 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63   C library .func
fd10: 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72  tion localtime_r
fd20: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73  () is used to as
fd30: 73 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63  sist in the calc
fd40: 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61  ulation of .loca
fd50: 6c 20 74 69 6d 65 2e 20 20 54 68 65 20 0a 6c 6f  l time.  The .lo
fd60: 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75  caltime_r() C fu
fd70: 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20  nction normally 
fd80: 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79  only works for y
fd90: 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37  ears.between 197
fda0: 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20  0 and 2037. For 
fdb0: 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
fdc0: 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65  is range, SQLite
fdd0: 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61   .attempts to ma
fde0: 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20  p the year into 
fdf0: 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65  an equivalent ye
fe00: 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20  ar within .this 
fe10: 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61  range, do the ca
fe20: 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20  lculation, then 
fe30: 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63  map the year bac
fe40: 6b 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 44 61 74 65  k.</p>...<p>Date
fe50: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 64 6f   computations do
fe60: 20 6e 6f 74 20 67 69 76 65 20 63 6f 72 72 65 63   not give correc
fe70: 74 20 72 65 73 75 6c 74 73 20 66 6f 72 20 64 61  t results for da
fe80: 74 65 73 20 0a 62 65 66 6f 72 65 20 4a 75 6c 69  tes .before Juli
fe90: 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 30 20  an day number 0 
fea0: 28 2d 34 37 31 33 2d 31 31 2d 32 34 20 31 32 3a  (-4713-11-24 12:
feb0: 30 30 3a 30 30 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e  00:00).</p>..<p>
fec0: 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
fed0: 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79  s platforms only
fee0: 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74   support one set
fef0: 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a   of DST rules. .
ff00: 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f  Vista only suppo
ff10: 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f  rts two. Therefo
ff20: 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61  re, on these pla
ff30: 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69  tforms, .histori
ff40: 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74  cal DST calculat
ff50: 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63  ions will be inc
ff60: 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61  orrect. .For exa
ff70: 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c  mple, in the US,
ff80: 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54   in 2007 the DST
ff90: 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20   rules changed. 
ffa0: 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  .Non-Vista Windo
ffb0: 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70  ws platforms app
ffc0: 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20  ly the new 2007 
ffd0: 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c  DST rules .to al
ffe0: 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73  l previous years
fff0: 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20   as well. Vista 
10000 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65  does somewhat be
10010 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73  tter.getting res
10020 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63  ults correct bac
10030 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20  k to 1986, when 
10040 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61  the rules were a
10050 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e  lso changed.</p>
10060 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61  ..<p>All interna
10070 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61  l computations a
10080 73 73 75 6d 65 20 74 68 65 20 0a 3c 61 20 68 72  ssume the .<a hr
10090 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ef="http://en.wi
100a0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
100b0 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  /Gregorian_calen
100c0 64 61 72 22 3e 0a 47 72 65 67 6f 72 69 61 6e 20  dar">.Gregorian 
100d0 63 61 6c 65 6e 64 61 72 3c 2f 61 3e 20 73 79 73  calendar</a> sys
100e0 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  tem.  It is also
100f0 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76   assumed that ev
10100 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74  ery.day is exact
10110 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73  ly 86400 seconds
10120 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70   in duration.</p
10130 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
10140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10180 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
10190 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74  {Aggregate Funct
101a0 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 61  ions} aggfunc {a
101b0 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a  ggfunc}.</tcl>..
101c0 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74  <p>.The aggregat
101d0 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
101e0 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
101f0 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
10200 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67  .  Additional.ag
10210 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10220 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d  s written in C m
10230 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e  ay be added usin
10240 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f  g the .[sqlite3_
10250 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
10260 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a  )]</a>.API.</p>.
10270 0a 3c 70 3e 0a 49 6e 20 61 6e 79 20 61 67 67 72  .<p>.In any aggr
10280 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74  egate function t
10290 68 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67  hat takes a sing
102a0 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61  le argument, tha
102b0 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62  t argument.can b
102c0 65 20 70 72 65 63 65 65 64 65 64 20 62 79 20 74  e preceeded by t
102d0 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49  he keyword DISTI
102e0 4e 43 54 2e 20 20 49 6e 20 73 75 63 68 20 63 61  NCT.  In such ca
102f0 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65  ses, duplicate.e
10300 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74  lements are filt
10310 65 72 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  ered before bein
10320 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68  g passed into th
10330 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
10340 74 69 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d 70 6c  tion..For exampl
10350 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  e, the function 
10360 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  "count(distinct 
10370 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  X)" will return 
10380 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69  the number.of di
10390 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66  stinct values of
103a0 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61   column X instea
103b0 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e  d of the total n
103c0 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c  umber of non-nul
103d0 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75  l.values in colu
103e0 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62  mn X..</p>..<tab
103f0 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
10400 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c  padding=10>.<tcl
10410 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58  >.funcdef {avg(X
10420 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
10430 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
10440 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
10450 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
10460 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 53  in a.  group.  S
10470 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76  tring and BLOB v
10480 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  alues that do no
10490 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62  t look like numb
104a0 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70  ers are.  interp
104b0 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 54 68  reted as 0..  Th
104c0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
104d0 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
104e0 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
104f0 75 65 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20  ue even if all. 
10500 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
10510 67 65 72 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  gers..}..funcdef
10520 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74   {count(X) count
10530 28 2a 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65 20  (*)} {} {.  The 
10540 66 69 72 73 74 20 66 6f 72 6d 20 72 65 74 75 72  first form retur
10550 6e 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65  n a count of the
10560 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
10570 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e  .  that <i>X</i>
10580 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20   is not NULL in 
10590 61 20 67 72 6f 75 70 2e 20 20 54 68 65 20 73 65  a group.  The se
105a0 63 6f 6e 64 20 66 6f 72 6d 20 28 77 69 74 68 20  cond form (with 
105b0 6e 6f 20 61 72 67 75 6d 65 6e 74 29 0a 20 20 72  no argument).  r
105c0 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
105d0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
105e0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
105f0 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
10600 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
10610 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 7d 20  concat(X,Y)} {} 
10620 7b 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20 69  {.  The result i
10630 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  s a string which
10640 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e   is the concaten
10650 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e  ation of.  all n
10660 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f  on-NULL values o
10670 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 49 66 20  f <i>X</i>.  If 
10680 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f  parameter <i>Y</
10690 69 3e 20 69 73 20 74 68 65 20 73 65 70 61 72 61  i> is the separa
106a0 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e  tor.  between in
106b0 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c  stances of <i>X<
106c0 2f 69 3e 2e 20 20 41 20 63 6f 6d 6d 61 20 28 22  /i>.  A comma ("
106d0 2c 22 29 20 69 73 20 75 73 65 64 20 61 73 20 74  ,") is used as t
106e0 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69  he separator.  i
106f0 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d  f <i>Y</i> is om
10700 69 74 74 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  itted..}..funcde
10710 66 20 7b 6d 61 78 28 58 29 7d 20 7b 6d 61 78 41  f {max(X)} {maxA
10720 67 67 46 75 6e 63 20 61 67 67 5f 6d 61 78 7d 20  ggFunc agg_max} 
10730 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 6d  {.  Return the m
10740 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20  aximum value of 
10750 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  all values in th
10760 65 20 67 72 6f 75 70 2e 0a 20 20 54 68 65 20 75  e group..  The u
10770 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20  sual sort order 
10780 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
10790 6d 69 6e 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  mine the maximum
107a0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
107b0 6e 28 58 29 7d 20 7b 6d 69 6e 41 67 67 46 75 6e  n(X)} {minAggFun
107c0 63 20 61 67 67 5f 6d 69 6e 7d 20 7b 0a 20 20 52  c agg_min} {.  R
107d0 65 74 75 72 6e 20 74 68 65 20 6d 69 6e 69 6d 75  eturn the minimu
107e0 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  m non-NULL value
107f0 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
10800 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 54  n the group..  T
10810 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72  he usual sort or
10820 64 65 72 20 69 73 20 75 73 65 64 20 74 6f 20 64  der is used to d
10830 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6d 69 6e  etermine the min
10840 69 6d 75 6d 2e 20 20 0a 20 20 4e 55 4c 4c 20 69  imum.  .  NULL i
10850 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64 0a  s only returned.
10860 20 20 69 66 20 61 6c 6c 20 76 61 6c 75 65 73 20    if all values 
10870 69 6e 20 74 68 65 20 67 72 6f 75 70 20 61 72 65  in the group are
10880 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65   NULL..}..funcde
10890 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28  f {sum(X) total(
108a0 58 29 7d 20 7b 73 75 6d 46 75 6e 63 20 73 75 6d  X)} {sumFunc sum
108b0 20 74 6f 74 61 6c 7d 20 7b 0a 20 20 52 65 74 75   total} {.  Retu
108c0 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20 73  rn the numeric s
108d0 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  um of all non-NU
108e0 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  LL values in the
108f0 20 67 72 6f 75 70 2e 0a 20 20 49 66 20 74 68 65   group..  If the
10900 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
10910 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74 68  LL input rows th
10920 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73  en sum() returns
10930 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61  .  NULL but tota
10940 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30 2e  l() returns 0.0.
10950 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e  .  NULL is not n
10960 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66 75  ormally a helpfu
10970 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68 65  l result for the
10980 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a   sum of no rows.
10990 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73 74    but the SQL st
109a0 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73 20  andard requires 
109b0 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65  it and most othe
109c0 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73 65  r.  SQL database
109d0 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65   engines impleme
109e0 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77 61  nt sum() that wa
109f0 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73  y so SQLite does
10a00 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d   it in the.  sam
10a10 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74  e way in order t
10a20 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e  o be compatible.
10a30 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64     The non-stand
10a40 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63  ard total() func
10a50 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69 64  tion.  is provid
10a60 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65  ed as a convenie
10a70 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61  nt way to work a
10a80 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69 67  round this desig
10a90 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74  n problem.  in t
10aa0 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
10ab0 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 54 68 65 20 72  </p>..  <p>The r
10ac0 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29  esult of total()
10ad0 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
10ae0 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
10af0 65 2e 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20  e..  The result 
10b00 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69  of sum() is an i
10b10 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
10b20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70  all non-NULL inp
10b30 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73  uts are integers
10b40 2e 0a 20 20 49 66 20 61 6e 79 20 69 6e 70 75 74  ..  If any input
10b50 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
10b60 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
10b70 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e  or a NULL.  then
10b80 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
10b90 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
10ba0 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69  value.  which mi
10bb0 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78  ght be an approx
10bc0 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  imation to the t
10bd0 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20  rue sum.</p>..  
10be0 3c 70 3e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68  <p>Sum() will th
10bf0 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20  row an "integer 
10c00 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74  overflow" except
10c10 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74  ion if all input
10c20 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73  s.  are integers
10c30 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61   or NULL.  and a
10c40 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
10c50 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79  ow occurs at any
10c60 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68   point during th
10c70 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20  e computation.. 
10c80 20 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74   Total() never t
10c90 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69  hrows an excepti
10ca0 6f 6e 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  on..}.</tcl>.</t
10cb0 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
10cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d00 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
10d10 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72  ion INSERT inser
10d20 74 20 7b 49 4e 53 45 52 54 20 49 4e 53 45 52 54  t {INSERT INSERT
10d30 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  s}..BubbleDiagra
10d40 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 20 31 0a  m insert-stmt 1.
10d50 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49  </tcl>..<p>The I
10d60 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
10d70 63 6f 6d 65 73 20 69 6e 20 74 77 6f 20 62 61 73  comes in two bas
10d80 69 63 20 66 6f 72 6d 73 2e 20 20 54 68 65 20 66  ic forms.  The f
10d90 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74 68 20  irst form.(with 
10da0 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65 79  the "VALUES" key
10db0 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 61 20  word) creates a 
10dc0 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69  single new row i
10dd0 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  n an existing ta
10de0 62 6c 65 2e 0a 49 66 20 6e 6f 20 63 6f 6c 75 6d  ble..If no colum
10df0 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66  n-list is specif
10e00 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ied then the num
10e10 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d 75  ber of values mu
10e20 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65 20 61  st.be the same a
10e30 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
10e40 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
10e50 61 62 6c 65 2e 20 20 49 66 20 61 20 63 6f 6c 75  able.  If a colu
10e60 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70 65 63 69  mn-list.is speci
10e70 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e  fied, then the n
10e80 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
10e90 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e  must match the n
10ea0 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69  umber of.specifi
10eb0 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 43 6f 6c  ed columns.  Col
10ec0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
10ed0 65 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70  e that do not ap
10ee0 70 65 61 72 20 69 6e 20 74 68 65 0a 63 6f 6c 75  pear in the.colu
10ef0 6d 6e 20 6c 69 73 74 20 61 72 65 20 66 69 6c 6c  mn list are fill
10f00 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61  ed with the defa
10f10 75 6c 74 20 76 61 6c 75 65 2c 20 6f 72 20 77 69  ult value, or wi
10f20 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 0a 64 65  th NULL if no.de
10f30 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73  fault value is s
10f40 70 65 63 69 66 69 65 64 2e 0a 3c 2f 70 3e 0a 0a  pecified..</p>..
10f50 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  <p>The second fo
10f60 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54  rm of the INSERT
10f70 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65 73   statement takes
10f80 20 69 74 20 64 61 74 61 20 66 72 6f 6d 20 61 0a   it data from a.
10f90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
10fa0 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
10fb0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
10fc0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53 45  result of the.SE
10fd0 4c 45 43 54 20 6d 75 73 74 20 65 78 61 63 74 6c  LECT must exactl
10fe0 79 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62  y match the numb
10ff0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
11000 20 74 68 65 20 74 61 62 6c 65 20 69 66 0a 6e 6f   the table if.no
11010 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 69 73 20   column list is 
11020 73 70 65 63 69 66 69 65 64 2c 20 6f 72 20 69 74  specified, or it
11030 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20   must match the 
11040 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
11050 73 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 63 6f  s.name in the co
11060 6c 75 6d 6e 20 6c 69 73 74 2e 20 20 41 20 6e 65  lumn list.  A ne
11070 77 20 65 6e 74 72 79 20 69 73 20 6d 61 64 65 20  w entry is made 
11080 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 66 6f 72  in the table.for
11090 20 65 76 65 72 79 20 72 6f 77 20 6f 66 20 74 68   every row of th
110a0 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74 2e  e SELECT result.
110b0 20 20 54 68 65 20 53 45 4c 45 43 54 20 6d 61 79    The SELECT may
110c0 20 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20 63 6f   be simple.or co
110d0 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mpound.</p>..<p>
110e0 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e  The optional con
110f0 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c  flict-clause all
11100 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63  ows the specific
11110 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65  ation of an alte
11120 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69  rnative.constrai
11130 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
11140 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
11150 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
11160 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e  his one command.
11170 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e  .See the section
11180 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46   titled.[ON CONF
11190 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
111a0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
111b0 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c  ..For compatibil
111c0 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c 20  ity with MySQL, 
111d0 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f 77  the parser allow
111e0 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65  s the use of the
111f0 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20  .single keyword 
11200 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65  <a href="lang_re
11210 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c  place.html">REPL
11220 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61  ACE</a> as an .a
11230 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52 54  lias for "INSERT
11240 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 3c 2f   OR REPLACE"..</
11250 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
11260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
112a0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
112b0 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c   {ON CONFLICT cl
112c0 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b  ause} conflict {
112d0 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65  {conflict clause
112e0 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d  } {ON CONFLICT}}
112f0 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
11300 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a  conflict-clause.
11310 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f  </tcl>..<p>The O
11320 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
11330 65 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61 72  e is not a separ
11340 61 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e  ate SQL command.
11350 20 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74    It is a.non-st
11360 61 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74 68  andard clause th
11370 61 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e  at can appear in
11380 20 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20   many other SQL 
11390 63 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20  commands..It is 
113a0 67 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65  given its own se
113b0 63 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f  ction in this do
113c0 63 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69  cument because i
113d0 74 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66  t is not.part of
113e0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e   standard SQL an
113f0 64 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68  d therefore migh
11400 74 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61  t not be familia
11410 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  r.</p>..<p>The s
11420 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e  yntax for the ON
11430 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
11440 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f   is as shown abo
11450 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54  ve for.the CREAT
11460 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e  E TABLE command.
11470 20 20 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54    For the INSERT
11480 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d   and.UPDATE comm
11490 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72  ands, the keywor
114a0 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22  ds "ON CONFLICT"
114b0 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
114c0 20 22 4f 52 22 2c 20 74 6f 20 6d 61 6b 65 0a 74   "OR", to make.t
114d0 68 65 20 73 79 6e 74 61 78 20 73 65 65 6d 20 6d  he syntax seem m
114e0 6f 72 65 20 6e 61 74 75 72 61 6c 2e 20 20 46 6f  ore natural.  Fo
114f0 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65  r example, inste
11500 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e  ad of."INSERT ON
11510 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45   CONFLICT IGNORE
11520 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45 52  " we have "INSER
11530 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68  T OR IGNORE"..Th
11540 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e 67  e keywords chang
11550 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69 6e  e but the meanin
11560 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65 20  g of the clause 
11570 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74 68  is the same.eith
11580 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  er way.</p>..<p>
11590 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
115a0 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
115b0 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20 75 73   an algorithm us
115c0 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 0a 63 6f  ed to resolve.co
115d0 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
115e0 74 73 2e 20 20 54 68 65 72 65 20 61 72 65 20 66  ts.  There are f
115f0 69 76 65 20 63 68 6f 69 63 65 73 3a 20 52 4f 4c  ive choices: ROL
11600 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 0a 46 41  LBACK, ABORT,.FA
11610 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20  IL, IGNORE, and 
11620 52 45 50 4c 41 43 45 2e 20 54 68 65 20 64 65 66  REPLACE. The def
11630 61 75 6c 74 20 61 6c 67 6f 72 69 74 68 6d 20 69  ault algorithm i
11640 73 20 41 42 4f 52 54 2e 20 20 54 68 69 73 0a 69  s ABORT.  This.i
11650 73 20 77 68 61 74 20 74 68 65 79 20 6d 65 61 6e  s what they mean
11660 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e  :</p>..<dl>.<dt>
11670 3c 62 3e 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c  <b>ROLLBACK</b><
11680 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e  /dt>.<dd><p>When
11690 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
116a0 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
116b0 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 52 4f 4c  an immediate ROL
116c0 4c 42 41 43 4b 0a 6f 63 63 75 72 73 2c 20 74 68  LBACK.occurs, th
116d0 75 73 20 65 6e 64 69 6e 67 20 74 68 65 20 63 75  us ending the cu
116e0 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
116f0 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61  n, and the comma
11700 6e 64 20 61 62 6f 72 74 73 0a 77 69 74 68 20 61  nd aborts.with a
11710 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20   return code of 
11720 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
11730 54 2e 20 20 49 66 20 6e 6f 20 74 72 61 6e 73 61  T.  If no transa
11740 63 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20  ction is.active 
11750 28 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  (other than the 
11760 69 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74  implied transact
11770 69 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65 61  ion that is crea
11780 74 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d  ted on every.com
11790 6d 61 6e 64 29 20 74 68 65 6e 20 74 68 69 73 20  mand) then this 
117a0 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20  algorithm works 
117b0 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52  the same as ABOR
117c0 54 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  T.</p></dd>..<dt
117d0 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64  ><b>ABORT</b></d
117e0 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61  t>.<dd><p>When a
117f0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
11800 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
11810 65 20 63 6f 6d 6d 61 6e 64 20 62 61 63 6b 73 20  e command backs 
11820 6f 75 74 0a 61 6e 79 20 70 72 69 6f 72 20 63 68  out.any prior ch
11830 61 6e 67 65 73 20 69 74 20 6d 69 67 68 74 20 68  anges it might h
11840 61 76 65 20 6d 61 64 65 20 61 6e 64 20 61 62 6f  ave made and abo
11850 72 74 73 20 77 69 74 68 20 61 20 72 65 74 75 72  rts with a retur
11860 6e 20 63 6f 64 65 0a 6f 66 20 53 51 4c 49 54 45  n code.of SQLITE
11870 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42 75  _CONSTRAINT.  Bu
11880 74 20 6e 6f 20 52 4f 4c 4c 42 41 43 4b 20 69 73  t no ROLLBACK is
11890 20 65 78 65 63 75 74 65 64 20 73 6f 20 63 68 61   executed so cha
118a0 6e 67 65 73 0a 66 72 6f 6d 20 70 72 69 6f 72 20  nges.from prior 
118b0 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 69 6e 20  commands within 
118c0 74 68 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63  the same transac
118d0 74 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72 76  tion.are preserv
118e0 65 64 2e 20 20 54 68 69 73 20 69 73 20 74 68 65  ed.  This is the
118f0 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
11900 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
11910 3e 3c 62 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74  ><b>FAIL</b></dt
11920 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20  >.<dd><p>When a 
11930 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
11940 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65  tion occurs, the
11950 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 20   command aborts 
11960 77 69 74 68 20 61 0a 72 65 74 75 72 6e 20 63 6f  with a.return co
11970 64 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  de SQLITE_CONSTR
11980 41 49 4e 54 2e 20 20 42 75 74 20 61 6e 79 20 63  AINT.  But any c
11990 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
119a0 74 61 62 61 73 65 20 74 68 61 74 0a 74 68 65 20  tabase that.the 
119b0 63 6f 6d 6d 61 6e 64 20 6d 61 64 65 20 70 72 69  command made pri
119c0 6f 72 20 74 6f 20 65 6e 63 6f 75 6e 74 65 72 69  or to encounteri
119d0 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
119e0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 61 72 65 20  t violation.are 
119f0 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 61 72  preserved and ar
11a00 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
11a10 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
11a20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61  if an UPDATE.sta
11a30 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72  tement encounter
11a40 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ed a constraint 
11a50 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65  violation on the
11a60 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a   100th row that.
11a70 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  it attempts to u
11a80 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20  pdate, then the 
11a90 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61  first 99 row cha
11aa0 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76  nges are preserv
11ab0 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74  ed.but changes t
11ac0 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62  o rows 100 and b
11ad0 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75  eyond never occu
11ae0 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
11af0 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f  ><b>IGNORE</b></
11b00 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20  dt>.<dd><p>When 
11b10 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
11b20 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
11b30 68 65 20 6f 6e 65 20 72 6f 77 20 74 68 61 74 20  he one row that 
11b40 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e  contains.the con
11b50 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11b60 6e 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  n is not inserte
11b70 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 20 20 42  d or changed.  B
11b80 75 74 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 63  ut the command.c
11b90 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75 74 69  ontinues executi
11ba0 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4f 74  ng normally.  Ot
11bb0 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20  her rows before 
11bc0 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f  and after the ro
11bd0 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64  w that.contained
11be0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
11bf0 76 69 6f 6c 61 74 69 6f 6e 20 63 6f 6e 74 69 6e  violation contin
11c00 75 65 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  ue to be inserte
11c10 64 20 6f 72 20 75 70 64 61 74 65 64 0a 6e 6f 72  d or updated.nor
11c20 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72 6f 72  mally.  No error
11c30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 3c 2f 70   is returned.</p
11c40 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52  ></dd>..<dt><b>R
11c50 45 50 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a  EPLACE</b></dt>.
11c60 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 55 4e  <dd><p>When a UN
11c70 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
11c80 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
11c90 2c 20 74 68 65 20 70 72 65 2d 65 78 69 73 74 69  , the pre-existi
11ca0 6e 67 20 72 6f 77 73 0a 74 68 61 74 20 61 72 65  ng rows.that are
11cb0 20 63 61 75 73 69 6e 67 20 74 68 65 20 63 6f 6e   causing the con
11cc0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11cd0 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 70 72  n are removed pr
11ce0 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67  ior to inserting
11cf0 0a 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65  .or updating the
11d00 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 20 20 54   current row.  T
11d10 68 75 73 20 74 68 65 20 69 6e 73 65 72 74 20 6f  hus the insert o
11d20 72 20 75 70 64 61 74 65 20 61 6c 77 61 79 73 20  r update always 
11d30 6f 63 63 75 72 73 2e 0a 54 68 65 20 63 6f 6d 6d  occurs..The comm
11d40 61 6e 64 20 63 6f 6e 74 69 6e 75 65 73 20 65 78  and continues ex
11d50 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79  ecuting normally
11d60 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73 20 72  .  No error is r
11d70 65 74 75 72 6e 65 64 2e 0a 49 66 20 61 20 4e 4f  eturned..If a NO
11d80 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
11d90 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
11da0 72 73 2c 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  rs, the NULL val
11db0 75 65 20 69 73 20 72 65 70 6c 61 63 65 64 0a 62  ue is replaced.b
11dc0 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  y the default va
11dd0 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
11de0 75 6d 6e 2e 20 20 49 66 20 74 68 65 20 63 6f 6c  umn.  If the col
11df0 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
11e00 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
11e10 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
11e20 68 6d 20 69 73 20 75 73 65 64 2e 20 20 49 66 20  hm is used.  If 
11e30 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
11e40 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 6f 63 63  nt violation.occ
11e50 75 72 73 20 74 68 65 6e 20 74 68 65 20 49 47 4e  urs then the IGN
11e60 4f 52 45 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ORE algorithm is
11e70 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57   used.</p>..<p>W
11e80 68 65 6e 20 74 68 69 73 20 63 6f 6e 66 6c 69 63  hen this conflic
11e90 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
11ea0 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f  ategy deletes ro
11eb0 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73  ws in order to.s
11ec0 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61  atisfy a constra
11ed0 69 6e 74 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  int, it does not
11ee0 20 69 6e 76 6f 6b 65 20 64 65 6c 65 74 65 20 74   invoke delete t
11ef0 72 69 67 67 65 72 73 20 6f 6e 20 74 68 6f 73 65  riggers on those
11f00 0a 72 6f 77 73 2e 20 20 54 68 69 73 20 62 65 68  .rows.  This beh
11f10 61 76 69 6f 72 20 6d 69 67 68 74 20 63 68 61 6e  avior might chan
11f20 67 65 20 69 6e 20 61 20 66 75 74 75 72 65 20 72  ge in a future r
11f30 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
11f40 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c 67 6f 72 69  >..<p>The algori
11f50 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
11f60 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f   the OR clause o
11f70 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20 55 50  f a INSERT or UP
11f80 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
11f90 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
11fa0 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
11fb0 54 45 20 54 41 42 4c 45 2e 0a 49 66 20 6e 6f 20  TE TABLE..If no 
11fc0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70 65  algorithm is spe
11fd0 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65 2c  cified anywhere,
11fe0 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
11ff0 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70  ithm is used.</p
12000 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
12010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12050 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
12060 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78 20  REINDEX reindex 
12070 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c 65 44  REINDEX..BubbleD
12080 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d 73  iagram reindex-s
12090 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
120a0 3e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d  >The REINDEX com
120b0 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
120c0 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65  delete and recre
120d0 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d  ate indices from
120e0 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69   scratch..This i
120f0 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68  s useful when th
12100 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
12110 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
12120 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64  ence has changed
12130 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 74 68  ..</p>..<p>In th
12140 65 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 61 6c  e first form, al
12150 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c  l indices in all
12160 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
12170 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
12180 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  .named collation
12190 20 73 65 71 75 65 6e 63 65 20 61 72 65 20 72 65   sequence are re
121a0 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 65 20  created. In the 
121b0 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69 66 20  second form, if 
121c0 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61 73  .<i>&#91;databas
121d0 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62 6c  e-name.&#93;tabl
121e0 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 69 3e  e/index-name</i>
121f0 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 74 61   identifies a ta
12200 62 6c 65 2c 0a 74 68 65 6e 20 61 6c 6c 20 69 6e  ble,.then all in
12210 64 69 63 65 73 0a 61 73 73 6f 63 69 61 74 65 64  dices.associated
12220 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
12230 61 72 65 20 72 65 62 75 69 6c 74 2e 20 49 66 20  are rebuilt. If 
12240 61 6e 20 69 6e 64 65 78 20 69 73 20 69 64 65 6e  an index is iden
12250 74 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  tified, then onl
12260 79 0a 74 68 69 73 20 73 70 65 63 69 66 69 63 20  y.this specific 
12270 69 6e 64 65 78 20 69 73 20 64 65 6c 65 74 65 64  index is deleted
12280 20 61 6e 64 20 72 65 63 72 65 61 74 65 64 2e 0a   and recreated..
12290 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6e 6f 20 3c  </p>..<p>If no <
122a0 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c  i>database-name<
122b0 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69 65 64  /i> is specified
122c0 20 61 6e 64 20 74 68 65 72 65 20 65 78 69 73 74   and there exist
122d0 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f  s both a table o
122e0 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f  r.index and a co
122f0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
12300 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
12310 64 20 6e 61 6d 65 2c 20 74 68 65 6e 20 69 6e 64  d name, then ind
12320 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 0a  ices associated.
12330 77 69 74 68 20 74 68 65 20 63 6f 6c 6c 61 74 69  with the collati
12340 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 6e 6c 79  on sequence only
12350 20 61 72 65 20 72 65 63 6f 6e 73 74 72 75 63 74   are reconstruct
12360 65 64 2e 20 54 68 69 73 20 61 6d 62 69 67 75 69  ed. This ambigui
12370 74 79 20 6d 61 79 20 62 65 0a 64 69 73 70 65 6c  ty may be.dispel
12380 6c 65 64 20 62 79 20 61 6c 77 61 79 73 20 73 70  led by always sp
12390 65 63 69 66 79 69 6e 67 20 61 20 3c 69 3e 64 61  ecifying a <i>da
123a0 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
123b0 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67 20  when reindexing 
123c0 61 0a 73 70 65 63 69 66 69 63 20 74 61 62 6c 65  a.specific table
123d0 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c   or index...<tcl
123e0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
123f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12430 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41 43  #.Section REPLAC
12440 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41 43  E replace REPLAC
12450 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  E..</tcl>..<p>Th
12460 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e  e REPLACE comman
12470 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  d is an alias fo
12480 72 20 74 68 65 20 22 49 4e 53 45 52 54 20 4f 52  r the "INSERT OR
12490 20 52 45 50 4c 41 43 45 22 20 76 61 72 69 61 6e   REPLACE" varian
124a0 74 0a 6f 66 20 74 68 65 20 3c 61 20 68 72 65 66  t.of the <a href
124b0 3d 22 6c 61 6e 67 5f 69 6e 73 65 72 74 2e 68 74  ="lang_insert.ht
124c0 6d 6c 22 3e 49 4e 53 45 52 54 3c 2f 61 3e 20 63  ml">INSERT</a> c
124d0 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
124e0 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
124f0 20 66 6f 72 0a 63 6f 6d 70 61 74 69 62 69 6c 69   for.compatibili
12500 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2e 20 20  ty with MySQL.  
12510 53 65 65 20 74 68 65 20 0a 3c 61 20 68 72 65 66  See the .<a href
12520 3d 22 6c 61 6e 67 5f 69 6e 73 65 72 74 2e 68 74  ="lang_insert.ht
12530 6d 6c 22 3e 49 4e 53 45 52 54 3c 2f 61 3e 20 63  ml">INSERT</a> c
12540 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
12550 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
12560 6e 61 6c 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal.information.
12570 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
12580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
125c0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
125d0 63 74 69 6f 6e 20 53 45 4c 45 43 54 20 73 65 6c  ction SELECT sel
125e0 65 63 74 20 7b 53 45 4c 45 43 54 20 71 75 65 72  ect {SELECT quer
125f0 79 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  y}..BubbleDiagra
12600 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 31 0a  m select-stmt 1.
12610 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65  BubbleDiagram re
12620 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75 62 62  sult-column.Bubb
12630 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 73  leDiagram join-s
12640 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67  ource.BubbleDiag
12650 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63  ram single-sourc
12660 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
12670 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65 44 69  join-op.BubbleDi
12680 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e 73 74  agram join-const
12690 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69 61 67  raint.BubbleDiag
126a0 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74 65 72  ram ordering-ter
126b0 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  m.BubbleDiagram 
126c0 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f  compound-operato
126d0 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  r.</tcl>..<p>The
126e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
126f0 74 20 69 73 20 75 73 65 64 20 74 6f 20 71 75 65  t is used to que
12700 72 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ry the database.
12710 20 20 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20    The.result of 
12720 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f  a SELECT is zero
12730 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66   or more rows of
12740 20 64 61 74 61 20 77 68 65 72 65 20 65 61 63 68   data where each
12750 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64   row.has a fixed
12760 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
12770 6e 73 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  ns.  The number 
12780 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
12790 65 0a 72 65 73 75 6c 74 20 69 73 20 73 70 65 63  e.result is spec
127a0 69 66 69 65 64 20 62 79 20 74 68 65 20 65 78 70  ified by the exp
127b0 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69 6e 20  ression list in 
127c0 62 65 74 77 65 65 6e 20 74 68 65 0a 53 45 4c 45  between the.SELE
127d0 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77  CT and FROM keyw
127e0 6f 72 64 73 2e 20 20 41 6e 79 20 61 72 62 69 74  ords.  Any arbit
127f0 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20  rary expression 
12800 63 61 6e 20 62 65 20 75 73 65 64 0a 61 73 20 61  can be used.as a
12810 20 72 65 73 75 6c 74 2e 20 20 49 66 20 61 20 72   result.  If a r
12820 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
12830 20 69 73 20 7d 0a 68 64 5f 70 75 74 73 20 22 5b   is }.hd_puts "[
12840 4f 70 65 72 61 74 6f 72 20 2a 5d 20 74 68 65 6e  Operator *] then
12850 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   all columns of 
12860 61 6c 6c 20 74 61 62 6c 65 73 20 61 72 65 20 73  all tables are s
12870 75 62 73 74 69 74 75 74 65 64 5c 6e 22 0a 68 64  ubstituted\n".hd
12880 5f 70 75 74 73 20 22 66 6f 72 20 74 68 61 74 20  _puts "for that 
12890 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  one expression. 
128a0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
128b0 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  on is the name o
128c0 66 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22 61 20  f\n".hd_puts "a 
128d0 74 61 62 6c 65 20 66 6f 6c 6c 6f 77 65 64 20 62  table followed b
128e0 79 20 5b 4f 70 65 72 61 74 6f 72 20 2e 2a 5d 20  y [Operator .*] 
128f0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
12900 69 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 5c 6e  is all columns\n
12910 22 0a 68 64 5f 70 75 74 73 20 7b 69 6e 20 74 68  ".hd_puts {in th
12920 61 74 20 6f 6e 65 20 74 61 62 6c 65 2e 3c 2f 70  at one table.</p
12930 3e 0a 0a 3c 70 3e 54 68 65 20 44 49 53 54 49 4e  >..<p>The DISTIN
12940 43 54 20 6b 65 79 77 6f 72 64 20 63 61 75 73 65  CT keyword cause
12950 73 20 61 20 73 75 62 73 65 74 20 6f 66 20 72 65  s a subset of re
12960 73 75 6c 74 20 72 6f 77 73 20 74 6f 20 62 65 20  sult rows to be 
12970 72 65 74 75 72 6e 65 64 2c 20 0a 69 6e 20 77 68  returned, .in wh
12980 69 63 68 20 65 61 63 68 20 72 65 73 75 6c 74 20  ich each result 
12990 72 6f 77 20 69 73 20 64 69 66 66 65 72 65 6e 74  row is different
129a0 2e 20 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  .  NULL values a
129b0 72 65 20 6e 6f 74 20 74 72 65 61 74 65 64 20 61  re not treated a
129c0 73 20 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  s .distinct from
129d0 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 54 68   each other.  Th
129e0 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69  e default behavi
129f0 6f 72 20 69 73 20 74 68 61 74 20 61 6c 6c 20 72  or is that all r
12a00 65 73 75 6c 74 20 72 6f 77 73 20 0a 62 65 20 72  esult rows .be r
12a10 65 74 75 72 6e 65 64 2c 20 77 68 69 63 68 20 63  eturned, which c
12a20 61 6e 20 62 65 20 6d 61 64 65 20 65 78 70 6c 69  an be made expli
12a30 63 69 74 20 77 69 74 68 20 74 68 65 20 6b 65 79  cit with the key
12a40 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a 0a 3c  word ALL.</p>..<
12a50 70 3e 54 68 65 20 71 75 65 72 79 20 69 73 20 65  p>The query is e
12a60 78 65 63 75 74 65 64 20 61 67 61 69 6e 73 74 20  xecuted against 
12a70 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  one or more tabl
12a80 65 73 20 73 70 65 63 69 66 69 65 64 20 61 66 74  es specified aft
12a90 65 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65 79 77  er.the FROM keyw
12aa0 6f 72 64 2e 20 20 49 66 20 6d 75 6c 74 69 70 6c  ord.  If multipl
12ab0 65 20 74 61 62 6c 65 73 20 6e 61 6d 65 73 20 61  e tables names a
12ac0 72 65 20 73 65 70 61 72 61 74 65 64 20 62 79 20  re separated by 
12ad0 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20 74 68 65  commas,.then the
12ae0 20 71 75 65 72 79 20 69 73 20 61 67 61 69 6e 73   query is agains
12af0 74 20 74 68 65 20 63 72 6f 73 73 20 6a 6f 69 6e  t the cross join
12b00 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75 73 20   of the various 
12b10 74 61 62 6c 65 73 2e 0a 54 68 65 20 66 75 6c 6c  tables..The full
12b20 20 53 51 4c 2d 39 32 20 6a 6f 69 6e 20 73 79 6e   SQL-92 join syn
12b30 74 61 78 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  tax can also be 
12b40 75 73 65 64 20 74 6f 20 73 70 65 63 69 66 79 20  used to specify 
12b50 6a 6f 69 6e 73 2e 0a 41 20 73 75 62 2d 71 75 65  joins..A sub-que
12b60 72 79 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 65  ry.in parenthese
12b70 73 20 6d 61 79 20 62 65 20 73 75 62 73 74 69 74  s may be substit
12b80 75 74 65 64 20 66 6f 72 20 61 6e 79 20 74 61 62  uted for any tab
12b90 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46  le name in the F
12ba0 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 54 68 65 20  ROM clause..The 
12bb0 65 6e 74 69 72 65 20 46 52 4f 4d 20 63 6c 61 75  entire FROM clau
12bc0 73 65 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65  se may be omitte
12bd0 64 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  d, in which case
12be0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
12bf0 0a 73 69 6e 67 6c 65 20 72 6f 77 20 63 6f 6e 73  .single row cons
12c00 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20 76 61  isting of the va
12c10 6c 75 65 73 20 6f 66 20 74 68 65 20 65 78 70 72  lues of the expr
12c20 65 73 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c 2f 70  ession list..</p
12c30 3e 0a 0a 3c 70 3e 54 68 65 20 57 48 45 52 45 20  >..<p>The WHERE 
12c40 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73  clause can be us
12c50 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  ed to limit the 
12c60 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6f  number of rows o
12c70 76 65 72 0a 77 68 69 63 68 20 74 68 65 20 71 75  ver.which the qu
12c80 65 72 79 20 6f 70 65 72 61 74 65 73 2e 3c 2f 70  ery operates.</p
12c90 3e 0a 0a 3c 70 3e 54 68 65 20 47 52 4f 55 50 20  >..<p>The GROUP 
12ca0 42 59 20 63 6c 61 75 73 65 20 63 61 75 73 65 73  BY clause causes
12cb0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77   one or more row
12cc0 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
12cd0 74 6f 0a 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to.be combined i
12ce0 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  nto a single row
12cf0 20 6f 66 20 6f 75 74 70 75 74 2e 20 20 54 68 69   of output.  Thi
12d00 73 20 69 73 20 65 73 70 65 63 69 61 6c 6c 79 20  s is especially 
12d10 75 73 65 66 75 6c 0a 77 68 65 6e 20 74 68 65 20  useful.when the 
12d20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20  result contains 
12d30 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
12d40 6f 6e 73 2e 20 20 54 68 65 20 65 78 70 72 65 73  ons.  The expres
12d50 73 69 6f 6e 73 20 69 6e 0a 74 68 65 20 47 52 4f  sions in.the GRO
12d60 55 50 20 42 59 20 63 6c 61 75 73 65 20 64 6f 20  UP BY clause do 
12d70 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76  <em>not</em> hav
12d80 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 69  e to be expressi
12d90 6f 6e 73 20 74 68 61 74 0a 61 70 70 65 61 72 20  ons that.appear 
12da0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  in the result.  
12db0 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
12dc0 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  e is similar to 
12dd0 57 48 45 52 45 20 65 78 63 65 70 74 0a 74 68 61  WHERE except.tha
12de0 74 20 48 41 56 49 4e 47 20 61 70 70 6c 69 65 73  t HAVING applies
12df0 20 61 66 74 65 72 20 67 72 6f 75 70 69 6e 67 20   after grouping 
12e00 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20 20 54  has occurred.  T
12e10 68 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73  he HAVING expres
12e20 73 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72 20 74  sion.may refer t
12e30 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61  o values, even a
12e40 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
12e50 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ns, that are not
12e60 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c   in the result.<
12e70 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 52 44 45  /p>..<p>The ORDE
12e80 52 20 42 59 20 63 6c 61 75 73 65 20 63 61 75 73  R BY clause caus
12e90 65 73 20 74 68 65 20 6f 75 74 70 75 74 20 72 6f  es the output ro
12ea0 77 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64 2e  ws to be sorted.
12eb0 20 20 0a 54 68 65 20 61 72 67 75 6d 65 6e 74 20    .The argument 
12ec0 74 6f 20 4f 52 44 45 52 20 42 59 20 69 73 20 61  to ORDER BY is a
12ed0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
12ee0 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 75 73  ions that are us
12ef0 65 64 20 61 73 20 74 68 65 0a 6b 65 79 20 66 6f  ed as the.key fo
12f00 72 20 74 68 65 20 73 6f 72 74 2e 20 20 54 68 65  r the sort.  The
12f10 20 65 78 70 72 65 73 73 69 6f 6e 73 20 64 6f 20   expressions do 
12f20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20 70  not have to be p
12f30 61 72 74 20 6f 66 20 74 68 65 0a 72 65 73 75 6c  art of the.resul
12f40 74 20 66 6f 72 20 61 20 73 69 6d 70 6c 65 20 53  t for a simple S
12f50 45 4c 45 43 54 2c 20 62 75 74 20 69 6e 20 61 20  ELECT, but in a 
12f60 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
12f70 65 61 63 68 20 73 6f 72 74 0a 65 78 70 72 65 73  each sort.expres
12f80 73 69 6f 6e 20 6d 75 73 74 20 65 78 61 63 74 6c  sion must exactl
12f90 79 20 6d 61 74 63 68 20 6f 6e 65 20 6f 66 20 74  y match one of t
12fa0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
12fb0 73 2e 20 20 45 61 63 68 0a 73 6f 72 74 20 65 78  s.  Each.sort ex
12fc0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20  pression may be 
12fd0 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
12fe0 77 65 64 20 62 79 20 61 20 43 4f 4c 4c 41 54 45  wed by a COLLATE
12ff0 20 6b 65 79 77 6f 72 64 20 61 6e 64 0a 74 68 65   keyword and.the
13000 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c 6c 61   name of a colla
13010 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 75 73  ting function us
13020 65 64 20 66 6f 72 20 6f 72 64 65 72 69 6e 67 20  ed for ordering 
13030 74 65 78 74 20 61 6e 64 2f 6f 72 0a 6b 65 79 77  text and/or.keyw
13040 6f 72 64 73 20 41 53 43 20 6f 72 20 44 45 53 43  ords ASC or DESC
13050 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
13060 73 6f 72 74 20 6f 72 64 65 72 2e 3c 2f 70 3e 0a  sort order.</p>.
13070 0a 3c 70 3e 45 61 63 68 20 74 65 72 6d 20 6f 66  .<p>Each term of
13080 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65 78 70   an ORDER BY exp
13090 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65  ression is proce
130a0 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ssed as follows:
130b0 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ol>.<li><
130c0 70 3e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  p>If the ORDER B
130d0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
130e0 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
130f0 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 6f 75  er K then the.ou
13100 74 70 75 74 20 69 73 20 6f 72 64 65 72 65 64 20  tput is ordered 
13110 62 79 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c 75  by the K-th colu
13120 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
13130 20 73 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c   set.</p></li>.<
13140 6c 69 3e 3c 70 3e 49 66 20 74 68 65 20 4f 52 44  li><p>If the ORD
13150 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
13160 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   is an identifie
13170 72 20 61 6e 64 20 6f 6e 65 20 6f 66 20 74 68 65  r and one of the
13180 0a 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73 20  .output columns 
13190 61 73 20 61 6e 20 61 6c 69 61 73 20 62 79 20 74  as an alias by t
131a0 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68  he same name, th
131b0 65 6e 20 74 68 65 20 6f 75 74 70 75 74 20 69 73  en the output is
131c0 0a 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20  .ordered by the 
131d0 69 64 65 6e 74 69 66 69 65 64 20 63 6f 6c 75 6d  identified colum
131e0 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e  n.</p></li>.<li>
131f0 3c 70 3e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  <p>Otherwise, th
13200 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
13210 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
13220 65 64 20 61 6e 64 20 74 68 65 20 6f 75 74 70 75  ed and the outpu
13230 74 20 0a 69 73 20 6f 72 64 65 72 65 64 20 62 79  t .is ordered by
13240 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
13250 61 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 3c 2f  at expression.</
13260 70 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  p></li>.</ol>..<
13270 70 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  p>In a compound 
13280 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
13290 2c 20 74 68 65 20 74 68 69 72 64 20 4f 52 44 45  , the third ORDE
132a0 52 20 42 59 20 6d 61 74 63 68 69 6e 67 20 72 75  R BY matching ru
132b0 6c 65 0a 72 65 71 75 69 72 65 73 20 74 68 61 74  le.requires that
132c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
132d0 62 65 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20  be identical to 
132e0 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  one of the colum
132f0 6e 73 20 69 6e 0a 74 68 65 20 72 65 73 75 6c 74  ns in.the result
13300 20 73 65 74 2e 20 20 54 68 65 20 74 68 72 65 65   set.  The three
13310 20 72 75 6c 65 73 20 61 72 65 20 66 69 72 73 74   rules are first
13320 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20   applied to the 
13330 6c 65 66 74 2d 6d 6f 73 74 0a 53 45 4c 45 43 54  left-most.SELECT
13340 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   in the compound
13350 2e 20 20 49 66 20 61 20 6d 61 74 63 68 20 69 73  .  If a match is
13360 20 66 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72   found, the sear
13370 63 68 20 73 74 6f 70 73 2e 20 20 4f 74 68 65 72  ch stops.  Other
13380 77 69 73 65 2c 0a 74 68 65 20 6e 65 78 74 20 53  wise,.the next S
13390 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67  ELECT to the rig
133a0 68 74 20 69 73 20 74 72 69 65 64 2e 20 20 54 68  ht is tried.  Th
133b0 69 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  is continues unt
133c0 69 6c 20 61 20 6d 61 74 63 68 0a 69 73 20 66 6f  il a match.is fo
133d0 75 6e 64 2e 20 20 45 61 63 68 20 74 65 72 6d 20  und.  Each term 
133e0 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  of the ORDER BY 
133f0 63 6c 61 75 73 65 20 69 73 20 70 72 6f 63 65 73  clause is proces
13400 73 65 64 20 73 65 70 61 72 61 74 65 6c 79 20 0a  sed separately .
13410 61 6e 64 20 6d 61 79 20 63 6f 6d 65 20 66 72 6f  and may come fro
13420 6d 20 64 69 66 66 65 72 65 6e 74 20 53 45 4c 45  m different SELE
13430 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  CT statements in
13440 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f   the compound.</
13450 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d 49 54  p>..<p>The LIMIT
13460 20 63 6c 61 75 73 65 20 70 6c 61 63 65 73 20 61   clause places a
13470 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
13480 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
13490 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 69 6e 20  ows.returned in 
134a0 74 68 65 20 72 65 73 75 6c 74 2e 20 20 41 20 6e  the result.  A n
134b0 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 69 6e  egative LIMIT in
134c0 64 69 63 61 74 65 73 20 6e 6f 20 75 70 70 65 72  dicates no upper
134d0 20 62 6f 75 6e 64 2e 0a 54 68 65 20 6f 70 74 69   bound..The opti
134e0 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66 6f 6c 6c  onal OFFSET foll
134f0 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73 70 65 63  owing LIMIT spec
13500 69 66 69 65 73 20 68 6f 77 20 6d 61 6e 79 0a 72  ifies how many.r
13510 6f 77 73 20 74 6f 20 73 6b 69 70 20 61 74 20 74  ows to skip at t
13520 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
13530 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
13540 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75  In a compound qu
13550 65 72 79 2c 20 74 68 65 20 4c 49 4d 49 54 20 63  ery, the LIMIT c
13560 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c 79 20 61  lause may only a
13570 70 70 65 61 72 20 6f 6e 20 74 68 65 0a 66 69 6e  ppear on the.fin
13580 61 6c 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  al SELECT statem
13590 65 6e 74 2e 0a 54 68 65 20 6c 69 6d 69 74 20 69  ent..The limit i
135a0 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  s applied to the
135b0 20 65 6e 74 69 72 65 20 71 75 65 72 79 20 6e 6f   entire query no
135c0 74 0a 74 6f 20 74 68 65 20 69 6e 64 69 76 69 64  t.to the individ
135d0 75 61 6c 20 53 45 4c 45 43 54 20 73 74 61 74 65  ual SELECT state
135e0 6d 65 6e 74 20 74 6f 20 77 68 69 63 68 20 69 74  ment to which it
135f0 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a 4e 6f   is attached..No
13600 74 65 20 74 68 61 74 20 69 66 20 74 68 65 20 4f  te that if the O
13610 46 46 53 45 54 20 6b 65 79 77 6f 72 64 20 69 73  FFSET keyword is
13620 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4d   used in the LIM
13630 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  IT clause, then 
13640 74 68 65 0a 6c 69 6d 69 74 20 69 73 20 74 68 65  the.limit is the
13650 20 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e   first number an
13660 64 20 74 68 65 20 6f 66 66 73 65 74 20 69 73 20  d the offset is 
13670 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65  the second numbe
13680 72 2e 20 20 49 66 20 61 0a 63 6f 6d 6d 61 20 69  r.  If a.comma i
13690 73 20 75 73 65 64 20 69 6e 73 74 65 61 64 20 6f  s used instead o
136a0 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79  f the OFFSET key
136b0 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20 6f  word, then the o
136c0 66 66 73 65 74 20 69 73 20 74 68 65 0a 66 69 72  ffset is the.fir
136d0 73 74 20 6e 75 6d 62 65 72 20 61 6e 64 20 74 68  st number and th
136e0 65 20 6c 69 6d 69 74 20 69 73 20 74 68 65 20 73  e limit is the s
136f0 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20 20 54  econd number.  T
13700 68 69 73 20 73 65 65 6d 69 6e 67 0a 63 6f 6e 74  his seeming.cont
13710 72 61 64 69 74 69 6f 6e 20 69 73 20 69 6e 74 65  radition is inte
13720 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20 6d 61 78  ntional - it max
13730 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69 62 69  imizes compatibi
13740 6c 69 74 79 20 77 69 74 68 20 6c 65 67 61 63 79  lity with legacy
13750 0a 53 51 4c 20 64 61 74 61 62 61 73 65 20 73 79  .SQL database sy
13760 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  stems..</p>..<p>
13770 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  A compound SELEC
13780 54 20 69 73 20 66 6f 72 6d 65 64 20 66 72 6f 6d  T is formed from
13790 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 73 69 6d   two or more sim
137a0 70 6c 65 20 53 45 4c 45 43 54 73 20 63 6f 6e 6e  ple SELECTs conn
137b0 65 63 74 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20  ected.by one of 
137c0 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20 55 4e  the operators UN
137d0 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20  ION, UNION ALL, 
137e0 49 4e 54 45 52 53 45 43 54 2c 20 6f 72 20 45 58  INTERSECT, or EX
137f0 43 45 50 54 2e 20 20 49 6e 0a 61 20 63 6f 6d 70  CEPT.  In.a comp
13800 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c  ound SELECT, all
13810 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74   the constituent
13820 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20 73 70   SELECTs must sp
13830 65 63 69 66 79 20 74 68 65 0a 73 61 6d 65 20 6e  ecify the.same n
13840 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
13850 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 72 65 20  columns.  There 
13860 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61 20 73 69  may be only a si
13870 6e 67 6c 65 20 4f 52 44 45 52 20 42 59 0a 63 6c  ngle ORDER BY.cl
13880 61 75 73 65 20 61 74 20 74 68 65 20 65 6e 64 20  ause at the end 
13890 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
138a0 53 45 4c 45 43 54 2e 20 20 54 68 65 20 55 4e 49  SELECT.  The UNI
138b0 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20 41 4c 4c  ON and UNION ALL
138c0 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f 6d 62 69  .operators combi
138d0 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
138e0 66 20 74 68 65 20 53 45 4c 45 43 54 73 20 74 6f  f the SELECTs to
138f0 20 74 68 65 20 72 69 67 68 74 20 61 6e 64 20 6c   the right and l
13900 65 66 74 20 69 6e 74 6f 0a 61 20 73 69 6e 67 6c  eft into.a singl
13910 65 20 62 69 67 20 74 61 62 6c 65 2e 20 20 54 68  e big table.  Th
13920 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
13930 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e 20 61 6c  that in UNION al
13940 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 0a 61 72  l result rows.ar
13950 65 20 64 69 73 74 69 6e 63 74 20 77 68 65 72 65  e distinct where
13960 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c 20 74 68   in UNION ALL th
13970 65 72 65 20 6d 61 79 20 62 65 20 64 75 70 6c 69  ere may be dupli
13980 63 61 74 65 73 2e 0a 54 68 65 20 49 4e 54 45 52  cates..The INTER
13990 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 74 61  SECT operator ta
139a0 6b 65 73 20 74 68 65 20 69 6e 74 65 72 73 65 63  kes the intersec
139b0 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 73 75  tion of the resu
139c0 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65 66 74 20  lts of the.left 
139d0 61 6e 64 20 72 69 67 68 74 20 53 45 4c 45 43 54  and right SELECT
139e0 73 2e 20 20 45 58 43 45 50 54 20 74 61 6b 65 73  s.  EXCEPT takes
139f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 6c   the result of l
13a00 65 66 74 20 53 45 4c 45 43 54 20 61 66 74 65 72  eft SELECT after
13a10 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65 20 72 65  .removing the re
13a20 73 75 6c 74 73 20 6f 66 20 74 68 65 20 72 69 67  sults of the rig
13a30 68 74 20 53 45 4c 45 43 54 2e 20 20 57 68 65 6e  ht SELECT.  When
13a40 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 53   three or more S
13a50 45 4c 45 43 54 73 0a 61 72 65 20 63 6f 6e 6e 65  ELECTs.are conne
13a60 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d 70  cted into a comp
13a70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72 6f 75 70  ound, they group
13a80 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
13a90 67 68 74 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ght.</p>...<tcl>
13aa0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
13ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
13af0 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20 75  Section UPDATE u
13b00 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 55 50  pdate {UPDATE UP
13b10 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65 44 69  DATEs}..BubbleDi
13b20 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
13b30 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  t 1.BubbleDiagra
13b40 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  m qualified-tabl
13b50 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c  e-name.</tcl>..<
13b60 70 3e 54 68 65 20 55 50 44 41 54 45 20 73 74 61  p>The UPDATE sta
13b70 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
13b80 6f 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c  o change the val
13b90 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ue of columns in
13ba0 20 0a 73 65 6c 65 63 74 65 64 20 72 6f 77 73 20   .selected rows 
13bb0 6f 66 20 61 20 74 61 62 6c 65 2e 20 20 45 61 63  of a table.  Eac
13bc0 68 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 20  h assignment in 
13bd0 61 6e 20 55 50 44 41 54 45 20 73 70 65 63 69 66  an UPDATE specif
13be0 69 65 73 0a 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ies.a column nam
13bf0 65 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66  e to the left of
13c00 20 74 68 65 20 65 71 75 61 6c 73 20 73 69 67 6e   the equals sign
13c10 20 61 6e 64 20 61 6e 20 61 72 62 69 74 72 61 72   and an arbitrar
13c20 79 20 65 78 70 72 65 73 73 69 6f 6e 0a 74 6f 20  y expression.to 
13c30 74 68 65 20 72 69 67 68 74 2e 20 20 54 68 65 20  the right.  The 
13c40 65 78 70 72 65 73 73 69 6f 6e 73 20 6d 61 79 20  expressions may 
13c50 75 73 65 20 74 68 65 20 76 61 6c 75 65 73 20 6f  use the values o
13c60 66 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e 73 2e  f other columns.
13c70 0a 41 6c 6c 20 65 78 70 72 65 73 73 69 6f 6e 73  .All expressions
13c80 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 62   are evaluated b
13c90 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69 67 6e  efore any assign
13ca0 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65 2e 0a  ments are made..
13cb0 41 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  A WHERE clause c
13cc0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  an be used to re
13cd0 73 74 72 69 63 74 20 77 68 69 63 68 20 72 6f 77  strict which row
13ce0 73 20 61 72 65 20 75 70 64 61 74 65 64 2e 3c 2f  s are updated.</
13cf0 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f  p>..<p>The optio
13d00 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61  nal conflict-cla
13d10 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73  use allows the s
13d20 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20  pecification of 
13d30 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
13d40 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69  onstraint confli
13d50 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
13d60 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64  gorithm to use d
13d70 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 63  uring this one c
13d80 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20  ommand..See the 
13d90 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b  section titled.[
13da0 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
13db0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
13dc0 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70  rmation.</p>..<p
13dd0 3e 49 66 20 53 51 4c 69 74 65 20 69 73 20 62 75  >If SQLite is bu
13de0 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b 53 51  ilt with the [SQ
13df0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
13e00 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
13e10 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70  .compile-time op
13e20 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79  tion then the sy
13e30 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50 44 41  ntax of the UPDA
13e40 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
13e50 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70  extended.with op
13e60 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20  tional ORDER BY 
13e70 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  and LIMIT clause
13e80 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  s as follows:</p
13e90 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
13ea0 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
13eb0 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
13ec0 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  .<p>The optional
13ed0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 63 61   LIMIT clause ca
13ee0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d  n be used to lim
13ef0 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
13f00 0a 72 6f 77 73 20 6d 6f 64 69 66 65 64 2c 20 61  .rows modifed, a
13f10 6e 64 20 74 68 65 72 65 62 79 20 6c 69 6d 69 74  nd thereby limit
13f20 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
13f30 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 54 68   transaction..Th
13f40 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
13f50 65 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74  e is used only t
13f60 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  o determine whic
13f70 68 20 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68  h rows fall.with
13f80 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 54  in the LIMIT.  T
13f90 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
13fa0 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66  h rows are modif
13fb0 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ied is arbitrary
13fc0 0a 61 6e 64 20 69 73 20 6e 6f 74 20 64 65 74 65  .and is not dete
13fd0 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 4f 52  rmined by the OR
13fe0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f  DER BY clause.</
13ff0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
14000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14040 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
14050 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
14060 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44 69 61  ACUUM..BubbleDia
14070 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74 6d 74  gram vacuum-stmt
14080 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 68   1.</tcl>..<p>Wh
14090 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20 28 74 61  en an object (ta
140a0 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20 74  ble, index, or t
140b0 72 69 67 67 65 72 29 20 69 73 20 64 72 6f 70 70  rigger) is dropp
140c0 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 64 61 74  ed from the .dat
140d0 61 62 61 73 65 2c 20 69 74 20 6c 65 61 76 65 73  abase, it leaves
140e0 20 62 65 68 69 6e 64 20 65 6d 70 74 79 20 73 70   behind empty sp
140f0 61 63 65 2e 20 20 54 68 69 73 20 6d 61 6b 65 73  ace.  This makes
14100 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66   the database .f
14110 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20  ile larger than 
14120 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 2c 20  it needs to be, 
14130 62 75 74 20 63 61 6e 20 73 70 65 65 64 20 75 70  but can speed up
14140 20 69 6e 73 65 72 74 73 2e 20 20 49 6e 20 74 69   inserts.  In ti
14150 6d 65 20 0a 69 6e 73 65 72 74 73 20 61 6e 64 20  me .inserts and 
14160 64 65 6c 65 74 65 73 20 63 61 6e 20 6c 65 61 76  deletes can leav
14170 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
14180 69 6c 65 20 73 74 72 75 63 74 75 72 65 20 66 72  ile structure fr
14190 61 67 6d 65 6e 74 65 64 2c 20 0a 77 68 69 63 68  agmented, .which
141a0 20 73 6c 6f 77 73 20 64 6f 77 6e 20 64 69 73 6b   slows down disk
141b0 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 64   access to the d
141c0 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 73  atabase contents
141d0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 56 41  .</p>..<p>The VA
141e0 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c 65  CUUM command cle
141f0 61 6e 73 0a 74 68 65 20 6d 61 69 6e 20 64 61 74  ans.the main dat
14200 61 62 61 73 65 20 62 79 20 63 6f 70 79 69 6e 67  abase by copying
14210 20 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 74 6f   its contents to
14220 20 61 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74   a temporary dat
14230 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 0a  abase file and .
14240 72 65 6c 6f 61 64 69 6e 67 20 74 68 65 20 6f 72  reloading the or
14250 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20  iginal database 
14260 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 6f  file from the co
14270 70 79 2e 20 20 54 68 69 73 20 65 6c 69 6d 69 6e  py.  This elimin
14280 61 74 65 73 20 0a 66 72 65 65 20 70 61 67 65 73  ates .free pages
14290 2c 20 20 61 6c 69 67 6e 73 20 74 61 62 6c 65 20  ,  aligns table 
142a0 64 61 74 61 20 74 6f 20 62 65 20 63 6f 6e 74 69  data to be conti
142b0 67 75 6f 75 73 2c 20 61 6e 64 20 6f 74 68 65 72  guous, and other
142c0 77 69 73 65 20 63 6c 65 61 6e 73 20 0a 75 70 20  wise cleans .up 
142d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
142e0 65 20 73 74 72 75 63 74 75 72 65 2e 3c 2f 70 3e  e structure.</p>
142f0 0a 0a 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20  ..<p>The VACUUM 
14300 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e  command may chan
14310 67 65 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d  ge the .<a href=
14320 22 6c 61 6e 67 5f 63 72 65 61 74 65 74 61 62 6c  "lang_createtabl
14330 65 2e 68 74 6d 6c 23 72 6f 77 69 64 22 3e 52 4f  e.html#rowid">RO
14340 57 49 44 3c 2f 61 3e 20 6f 66 20 65 6e 74 69 72  WID</a> of entir
14350 65 73 20 69 6e 20 74 61 62 6c 65 73 20 74 68 61  es in tables tha
14360 74 20 64 6f 0a 6e 6f 74 20 68 61 76 65 20 61 6e  t do.not have an
14370 20 65 78 70 6c 69 63 69 74 20 49 4e 54 45 47 45   explicit INTEGE
14380 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 3c 2f  R PRIMARY KEY.</
14390 70 3e 0a 0a 3c 70 3e 56 41 43 55 55 4d 20 6f 6e  p>..<p>VACUUM on
143a0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20  ly works on the 
143b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 49  main database..I
143c0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
143d0 65 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 20 61  e to VACUUM an a
143e0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
143f0 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   file.</p>..<p>T
14400 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
14410 64 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 74  d will fail if t
14420 68 65 72 65 20 69 73 20 61 6e 20 61 63 74 69 76  here is an activ
14430 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 54  e transaction..T
14440 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
14450 64 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  d is a no-op for
14460 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
14470 61 73 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73  ases.</p>..<p>As
14480 20 6f 66 20 53 51 4c 69 74 65 20 76 65 72 73 69   of SQLite versi
14490 6f 6e 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72  on 3.1, an alter
144a0 6e 61 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20  native to using 
144b0 74 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  the VACUUM comma
144c0 6e 64 0a 69 73 20 61 75 74 6f 2d 76 61 63 75 75  nd.is auto-vacuu
144d0 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20  m mode, enabled 
144e0 75 73 69 6e 67 20 74 68 65 20 0a 5b 61 75 74 6f  using the .[auto
144f0 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e  _vacuum] pragma.
14500 20 20 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63    When [auto_vac
14510 75 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20  uum] is enabled 
14520 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 2c 20  for a database, 
14530 0a 6c 61 72 67 65 20 64 65 6c 65 74 65 73 20 63  .large deletes c
14540 61 75 73 65 0a 74 68 65 20 73 69 7a 65 20 6f 66  ause.the size of
14550 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
14560 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48  le to shrink.  H
14570 6f 77 65 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61  owever, [auto_va
14580 63 75 75 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65  cuum].also cause
14590 73 20 65 78 63 65 73 73 20 66 72 61 67 6d 65 6e  s excess fragmen
145a0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
145b0 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 41 6e  tabase file.  An
145c0 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a  d [auto_vacuum].
145d0 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74  does not compact
145e0 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65   partially fille
145f0 64 20 70 61 67 65 73 20 6f 66 20 74 68 65 20 64  d pages of the d
14600 61 74 61 62 61 73 65 20 61 73 20 56 41 43 55 55  atabase as VACUU
14610 4d 0a 64 6f 65 73 2e 0a 3c 2f 70 3e 0a 3c 74 63  M.does..</p>.<tc
14620 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
14630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14670 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58  #.Section {INDEX
14680 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
14690 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 0a 0a 3c   {INDEXED BY}..<
146a0 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 49 4e 44  /tcl>.<p>The IND
146b0 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20 69  EXED BY phrase i
146c0 73 20 61 20 53 51 4c 20 65 78 74 65 6e 73 69 6f  s a SQL extensio
146d0 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20  n found only in 
146e0 53 51 4c 69 74 65 20 77 68 69 63 68 20 63 61 6e  SQLite which can
146f0 0a 62 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  .be used to veri
14700 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 72 72  fy that the corr
14710 65 63 74 20 69 6e 64 69 63 65 73 20 61 72 65 20  ect indices are 
14720 62 65 69 6e 67 20 75 73 65 64 20 6f 6e 20 61 20  being used on a 
14730 5b 44 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43  [DELETE],.[SELEC
14740 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
14750 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 49  statement..The I
14760 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
14770 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
14780 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61  the name of a ta
14790 62 6c 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ble that SQLite 
147a0 77 69 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67 2e  will.be reading.
147b0 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59    The INDEXED BY
147c0 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20 73   phrase can be s
147d0 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  een in the follo
147e0 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61 67  wing syntax.diag
147f0 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  rams:</p>..<tcl>
14800 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71  .BubbleDiagram q
14810 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
14820 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  ame.BubbleDiagra
14830 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65 0a  m single-source.
14840 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 22  </tcl>..<p>The "
14850 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64 65 78  INDEXED BY index
14860 2d 6e 61 6d 65 22 20 63 6c 61 75 73 65 20 73 70  -name" clause sp
14870 65 63 69 66 69 65 73 20 74 68 61 74 20 74 68 65  ecifies that the
14880 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75 73   named index.mus
14890 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64  t be used in ord
148a0 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76 61  er to look up va
148b0 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65 63  lues on the prec
148c0 65 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66  eeding table..If
148d0 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f 65 73   index-name does
148e0 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20 63 61   not exist or ca
148f0 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66 6f 72  nnot be used for
14900 20 74 68 65 20 71 75 65 72 79 2c 20 74 68 65 6e   the query, then
14910 0a 74 68 65 20 70 72 65 70 61 72 61 74 69 6f 6e  .the preparation
14920 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
14930 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 54 68 65  ement fails..The
14940 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 63   "NOT INDEXED" c
14950 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
14960 74 68 61 74 20 6e 6f 20 69 6e 64 65 78 20 73 68  that no index sh
14970 61 6c 6c 20 62 65 20 75 73 65 64 20 77 68 65 6e  all be used when
14980 0a 61 63 63 65 73 73 69 6e 67 20 74 68 65 20 70  .accessing the p
14990 72 65 63 65 65 64 69 6e 67 20 74 61 62 6c 65 2c  receeding table,
149a0 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69   including impli
149b0 65 64 20 69 6e 64 69 63 65 73 20 63 72 65 61 74  ed indices creat
149c0 65 20 62 79 0a 55 4e 49 51 55 45 20 61 6e 64 20  e by.UNIQUE and 
149d0 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73  PRIMARY KEY cons
149e0 74 72 61 69 6e 74 73 2e 20 20 48 6f 77 65 76 65  traints.  Howeve
149f0 72 2c 20 74 68 65 20 49 4e 54 45 47 45 52 20 50  r, the INTEGER P
14a00 52 49 4d 41 52 59 20 4b 45 59 0a 63 61 6e 20 73  RIMARY KEY.can s
14a10 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  till be used to 
14a20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20  look up entries 
14a30 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49  even when "NOT I
14a40 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69  NDEXED" is speci
14a50 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f  fied.</p>..<p>So
14a60 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  me SQL database 
14a70 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20  engines provide 
14a80 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69  non-standard "hi
14a90 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77  nt" mechanisms w
14aa0 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64  hich.can be used
14ab0 20 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65   to give the que
14ac0 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75  ry optimizer clu
14ad0 65 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e  es about what in
14ae0 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a  dices it should.
14af0 75 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63  use for a partic
14b00 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20  ular statement. 
14b10 20 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c   The INDEX BY cl
14b20 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69  ause of SQLite i
14b30 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  s .<em>not</em> 
14b40 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e  a hinting mechan
14b50 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c  ism and it shoul
14b60 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73  d not be used as
14b70 20 73 75 63 68 2e 0a 54 68 65 20 49 4e 44 45 58   such..The INDEX
14b80 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
14b90 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
14ba0 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
14bb0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
14bc0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
14bd0 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
14be0 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
14bf0 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
14c00 75 73 65 2e 0a 49 66 20 74 68 65 20 71 75 65 72  use..If the quer
14c10 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 75  y optimizer is u
14c20 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68 65  nable to use the
14c30 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65 64   index specified
14c40 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42 59   by the.INDEX BY
14c50 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
14c60 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61 69  e query will fai
14c70 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 2e  l with an error.
14c80 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 44  </p>..<p>The IND
14c90 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
14ca0 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69  s <em>not</em> i
14cb0 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20  ntended for use 
14cc0 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70 72  in tuning.the pr
14cd0 65 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20 71  eformance of a q
14ce0 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65 6e  uery.  The inten
14cf0 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45 44  t of the INDEXED
14d00 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74 6f   BY clause is.to
14d10 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69 6d   raise a run-tim
14d20 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63 68  e error if a sch
14d30 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63 68  ema change, such
14d40 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72 0a   as dropping or.
14d50 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64 65  creating an inde
14d60 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71 75  x, causes the qu
14d70 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20 74  ery plan for a t
14d80 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71 75  ime-sensitive qu
14d90 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20 20  ery.to change.  
14da0 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
14db0 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e 65  lause is designe
14dc0 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63 74  d to help detect
14dd0 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75 65  .undesirable que
14de0 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73 20  ry plan changes 
14df0 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69 6f  during regressio
14e00 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65 76 65 6c  n testing..Devel
14e10 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69  opers are admoni
14e20 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c  shed to omit all
14e30 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20   use of INDEXED 
14e40 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63  BY during.applic
14e50 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d  ation design, im
14e60 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65  plementation, te
14e70 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e  sting, and tunin
14e80 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42  g.  If.INDEXED B
14e90 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  Y is to be used 
14ea0 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c  at all, it shoul
14eb0 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61 74  d be inserted at
14ec0 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66   the very.end of
14ed0 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74   the development
14ee0 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c   process when "l
14ef0 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64  ocking down" a d
14f00 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  esign.</p>..<tcl
14f10 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
14f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
14f60 23 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77  # A list of keyw
14f70 6f 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73  ords.  A asteris
14f80 6b 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74  k occurs after t
14f90 68 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74  he keyword if it
14fa0 20 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c   is on.# the fal
14fb0 6c 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65  lback list..#.se
14fc0 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b  t keyword_list [
14fd0 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54  lsort {.   ABORT
14fe0 2a 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45  *.   ADD.   AFTE
14ff0 52 2a 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54  R*.   ALL.   ALT
15000 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 2a 0a 20  ER.   ANALYZE*. 
15010 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41    AND.   AS.   A
15020 53 43 2a 0a 20 20 20 41 54 54 41 43 48 2a 0a 20  SC*.   ATTACH*. 
15030 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a    AUTOINCREMENT.
15040 20 20 20 42 45 46 4f 52 45 2a 0a 20 20 20 42 45     BEFORE*.   BE
15050 47 49 4e 2a 0a 20 20 20 42 45 54 57 45 45 4e 0a  GIN*.   BETWEEN.
15060 20 20 20 42 59 0a 20 20 20 43 41 53 43 41 44 45     BY.   CASCADE
15070 2a 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53  *.   CASE.   CAS
15080 54 2a 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43  T*.   CHECK.   C
15090 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e  OLLATE.   COLUMN
150a0 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f  .   COMMIT.   CO
150b0 4e 46 4c 49 43 54 2a 0a 20 20 20 43 4f 4e 53 54  NFLICT*.   CONST
150c0 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a  RAINT.   CREATE.
150d0 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52     CROSS.   CURR
150e0 45 4e 54 5f 44 41 54 45 2a 0a 20 20 20 43 55 52  ENT_DATE*.   CUR
150f0 52 45 4e 54 5f 54 49 4d 45 2a 0a 20 20 20 43 55  RENT_TIME*.   CU
15100 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2a  RRENT_TIMESTAMP*
15110 0a 20 20 20 44 41 54 41 42 41 53 45 2a 0a 20 20  .   DATABASE*.  
15120 20 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45   DEFAULT.   DEFE
15130 52 52 45 44 2a 0a 20 20 20 44 45 46 45 52 52 41  RRED*.   DEFERRA
15140 42 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20  BLE.   DELETE.  
15150 20 44 45 53 43 2a 0a 20 20 20 44 45 54 41 43 48   DESC*.   DETACH
15160 2a 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20  *.   DISTINCT.  
15170 20 44 52 4f 50 0a 20 20 20 45 4e 44 2a 0a 20 20   DROP.   END*.  
15180 20 45 41 43 48 2a 0a 20 20 20 45 4c 53 45 0a 20   EACH*.   ELSE. 
15190 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45    ESCAPE.   EXCE
151a0 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 2a  PT.   EXCLUSIVE*
151b0 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58  .   EXISTS.   EX
151c0 50 4c 41 49 4e 2a 0a 20 20 20 46 41 49 4c 2a 0a  PLAIN*.   FAIL*.
151d0 20 20 20 46 4f 52 2a 0a 20 20 20 46 4f 52 45 49     FOR*.   FOREI
151e0 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55  GN.   FROM.   FU
151f0 4c 4c 0a 20 20 20 47 4c 4f 42 2a 0a 20 20 20 47  LL.   GLOB*.   G
15200 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20  ROUP.   HAVING. 
15210 20 20 49 46 2a 0a 20 20 20 49 47 4e 4f 52 45 2a    IF*.   IGNORE*
15220 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 2a 0a 20  .   IMMEDIATE*. 
15230 20 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20    IN.   INDEX.  
15240 20 49 4e 44 45 58 45 44 2a 0a 20 20 20 49 4e 49   INDEXED*.   INI
15250 54 49 41 4c 4c 59 2a 0a 20 20 20 49 4e 4e 45 52  TIALLY*.   INNER
15260 0a 20 20 20 49 4e 53 45 52 54 0a 20 20 20 49 4e  .   INSERT.   IN
15270 53 54 45 41 44 2a 0a 20 20 20 49 4e 54 45 52 53  STEAD*.   INTERS
15280 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20 20 20 49  ECT.   INTO.   I
15290 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20 20 20 4a  S.   ISNULL.   J
152a0 4f 49 4e 0a 20 20 20 4b 45 59 2a 0a 20 20 20 4c  OIN.   KEY*.   L
152b0 45 46 54 0a 20 20 20 4c 49 4b 45 2a 0a 20 20 20  EFT.   LIKE*.   
152c0 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43 48 2a 0a  LIMIT.   MATCH*.
152d0 20 20 20 4e 41 54 55 52 41 4c 0a 20 20 20 4e 4f     NATURAL.   NO
152e0 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a 20 20 20  T.   NOTNULL.   
152f0 4e 55 4c 4c 0a 20 20 20 4f 46 2a 0a 20 20 20 4f  NULL.   OF*.   O
15300 46 46 53 45 54 2a 0a 20 20 20 4f 4e 0a 20 20 20  FFSET*.   ON.   
15310 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20 20 20 4f  OR.   ORDER.   O
15320 55 54 45 52 0a 20 20 20 50 4c 41 4e 2a 0a 20 20  UTER.   PLAN*.  
15330 20 50 52 41 47 4d 41 2a 0a 20 20 20 50 52 49 4d   PRAGMA*.   PRIM
15340 41 52 59 0a 20 20 20 51 55 45 52 59 2a 0a 20 20  ARY.   QUERY*.  
15350 20 52 41 49 53 45 2a 0a 20 20 20 52 45 46 45 52   RAISE*.   REFER
15360 45 4e 43 45 53 0a 20 20 20 52 45 47 45 58 50 0a  ENCES.   REGEXP.
15370 20 20 20 52 45 49 4e 44 45 58 2a 0a 20 20 20 52     REINDEX*.   R
15380 45 4e 41 4d 45 2a 0a 20 20 20 52 45 50 4c 41 43  ENAME*.   REPLAC
15390 45 2a 0a 20 20 20 52 45 53 54 52 49 43 54 2a 0a  E*.   RESTRICT*.
153a0 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c     RIGHT.   ROLL
153b0 42 41 43 4b 0a 20 20 20 52 4f 57 2a 0a 20 20 20  BACK.   ROW*.   
153c0 53 45 4c 45 43 54 0a 20 20 20 53 45 54 0a 20 20  SELECT.   SET.  
153d0 20 54 41 42 4c 45 0a 20 20 20 54 45 4d 50 2a 0a   TABLE.   TEMP*.
153e0 20 20 20 54 45 4d 50 4f 52 41 52 59 2a 0a 20 20     TEMPORARY*.  
153f0 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20 20 54   THEN.   TO.   T
15400 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20 54 52  RANSACTION.   TR
15410 49 47 47 45 52 2a 0a 20 20 20 55 4e 49 4f 4e 0a  IGGER*.   UNION.
15420 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44     UNIQUE.   UPD
15430 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20  ATE.   USING.   
15440 56 41 43 55 55 4d 2a 0a 20 20 20 56 41 4c 55 45  VACUUM*.   VALUE
15450 53 0a 20 20 20 56 49 45 57 2a 0a 20 20 20 56 49  S.   VIEW*.   VI
15460 52 54 55 41 4c 2a 0a 20 20 20 57 48 45 4e 0a 20  RTUAL*.   WHEN. 
15470 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70    WHERE.}]..hd_p
15480 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d  uts {<DIV class=
15490 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a  "pdf_section">}.
154a0 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20  Section {SQLite 
154b0 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72  Keywords} keywor
154c0 64 73 20 7b 7b 53 51 4c 20 6b 65 79 77 6f 72 64  ds {{SQL keyword
154d0 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d  } {SQL keywords}
154e0 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49 56  }.hd_puts {</DIV
154f0 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  >}.</tcl>..<p>Th
15500 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 73  e SQL standard s
15510 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65 20  pecifies a huge 
15520 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f 72  number of keywor
15530 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74  ds which may not
15540 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20  .be used as the 
15550 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 2c  names of tables,
15560 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e   indices, column
15570 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75 73  s, databases, us
15580 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63 74  er-defined.funct
15590 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73  ions, collations
155a0 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  , virtual table 
155b0 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20  modules, or any 
155c0 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65  other named obje
155d0 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66 20  ct..The list of 
155e0 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20 6c  keywords is so l
155f0 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65 6f  ong that few peo
15600 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65 72  ple can remember
15610 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d   them all..For m
15620 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f  ost SQL code, yo
15630 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69 73  ur safest bet is
15640 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61 6e   to never use an
15650 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  y English langua
15660 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20 6e  ge.word as the n
15670 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64 65  ame of a user-de
15680 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70  fined object.</p
15690 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e  >..<p>If you wan
156a0 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77 6f  t to use a keywo
156b0 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f  rd as a name, yo
156c0 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65 20  u need to quote 
156d0 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20 74  it.  There.are t
156e0 68 72 65 65 20 77 61 79 73 20 6f 66 20 71 75 6f  hree ways of quo
156f0 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e  ting keywords in
15700 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70   SQLite:</p>..<p
15710 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  >.<blockquote>.<
15720 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20  table>.<tr>.<td 
15730 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
15740 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74  'keyword'</b></t
15750 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
15760 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65  ></td>..<td>A ke
15770 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 20  yword in single 
15780 71 75 6f 74 65 73 20 69 73 20 69 6e 74 65 72 70  quotes is interp
15790 72 65 74 65 64 20 61 73 20 61 20 6c 69 74 65 72  reted as a liter
157a0 61 6c 20 73 74 72 69 6e 67 0a 20 20 20 20 20 20  al string.      
157b0 20 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 69    if it occurs i
157c0 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
157d0 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72  e a string liter
157e0 61 6c 20 69 73 20 61 6c 6c 6f 77 65 64 2c 20 6f  al is allowed, o
157f0 74 68 65 72 77 69 73 65 0a 09 69 74 20 69 73 20  therwise..it is 
15800 75 6e 64 65 72 73 74 6f 6f 64 20 61 73 20 61 6e  understood as an
15810 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64   identifier.</td
15820 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c 74 64 20  ></tr>.<tr>.<td 
15830 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
15840 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74  "keyword"</b></t
15850 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64  d><td></td>..<td
15860 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f  >A keyword in do
15870 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 69  uble-quotes is i
15880 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
15890 20 69 64 65 6e 74 69 66 69 65 72 20 69 66 0a 20   identifier if. 
158a0 20 20 20 20 20 20 20 69 74 20 6d 61 74 63 68 65         it matche
158b0 73 20 61 20 6b 6e 6f 77 6e 20 69 64 65 6e 74 69  s a known identi
158c0 66 69 65 72 2e 20 20 4f 74 68 65 72 77 69 73 65  fier.  Otherwise
158d0 20 69 74 20 69 73 20 69 6e 74 65 72 70 72 65 74   it is interpret
158e0 65 64 20 61 73 20 61 0a 20 20 20 20 20 20 20 20  ed as a.        
158f0 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c  string literal.<
15900 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c  /td></tr>.<tr>.<
15910 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
15920 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64 26  <b>&#91;keyword&
15930 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #93;</b></td><td
15940 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65  ></td>..<td>A ke
15950 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69  yword enclosed i
15960 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
15970 73 20 69 73 20 61 6c 77 61 79 73 20 75 6e 64 65  s is always unde
15980 72 73 74 6f 6f 64 20 61 73 0a 20 20 20 20 20 20  rstood as.      
15990 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e    an identifier.
159a0 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74    This is not st
159b0 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69  andard SQL.  Thi
159c0 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e  s quoting mechan
159d0 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75  ism.        is u
159e0 73 65 64 20 62 79 20 4d 53 20 41 63 63 65 73 73  sed by MS Access
159f0 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20   and SQL Server 
15a00 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20  and is included 
15a10 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20  in SQLite for.  
15a20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c        compatibil
15a30 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ity.</td></tr>.<
15a40 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
15a50 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 51  uote>.</p>..<p>Q
15a60 75 6f 74 65 64 20 6b 65 79 77 6f 72 64 73 20 61  uoted keywords a
15a70 72 65 20 75 6e 61 65 73 74 68 65 74 69 63 2e 0a  re unaesthetic..
15a80 54 6f 20 68 65 6c 70 20 79 6f 75 20 61 76 6f 69  To help you avoi
15a90 64 20 74 68 65 6d 2c 20 53 51 4c 69 74 65 20 61  d them, SQLite a
15aa0 6c 6c 6f 77 73 20 6d 61 6e 79 20 6b 65 79 77 6f  llows many keywo
15ab0 72 64 73 20 74 6f 20 62 65 20 75 73 65 64 20 75  rds to be used u
15ac0 6e 71 75 6f 74 65 64 0a 61 73 20 74 68 65 20 6e  nquoted.as the n
15ad0 61 6d 65 73 20 6f 66 20 64 61 74 61 62 61 73 65  ames of database
15ae0 73 2c 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63  s, tables, indic
15af0 65 73 2c 20 74 72 69 67 67 65 72 73 2c 20 76 69  es, triggers, vi
15b00 65 77 73 2c 20 63 6f 6c 75 6d 6e 73 2c 0a 75 73  ews, columns,.us
15b10 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
15b20 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73  ions, collations
15b30 2c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  , attached datab
15b40 61 73 65 73 2c 20 61 6e 64 20 76 69 72 74 75 61  ases, and virtua
15b50 6c 0a 66 75 6e 63 74 69 6f 6e 20 6d 6f 64 75 6c  l.function modul
15b60 65 73 2e 0a 49 6e 20 74 68 65 20 6c 69 73 74 20  es..In the list 
15b70 6f 66 20 6b 65 79 77 6f 72 64 73 20 74 68 61 74  of keywords that
15b80 20 66 6f 6c 6c 6f 77 73 2c 20 74 68 6f 73 65 20   follows, those 
15b90 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
15ba0 20 61 73 20 69 64 65 6e 74 69 66 69 65 72 73 0a   as identifiers.
15bb0 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 61 6e 20  are shown in an 
15bc0 69 74 61 6c 69 63 20 66 6f 6e 74 2e 20 20 4b 65  italic font.  Ke
15bd0 79 77 6f 72 64 73 20 74 68 61 74 20 6d 75 73 74  ywords that must
15be0 20 62 65 20 71 75 6f 74 65 64 20 69 6e 20 6f 72   be quoted in or
15bf0 64 65 72 20 74 6f 20 62 65 0a 75 73 65 64 20 61  der to be.used a
15c00 73 20 69 64 65 6e 74 69 66 69 65 72 73 20 61 72  s identifiers ar
15c10 65 20 73 68 6f 77 6e 20 69 6e 20 62 6f 6c 64 2e  e shown in bold.
15c20 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
15c30 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72   adds new keywor
15c40 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20  ds from time to 
15c50 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b  time when it tak
15c60 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  es on new featur
15c70 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
15c80 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d  t your code from
15c90 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79   being broken by
15ca0 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d   future enhancem
15cb0 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64  ents, you should
15cc0 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20  .normally quote 
15cd0 61 6e 79 20 69 6e 64 65 6e 74 69 66 69 65 72 20  any indentifier 
15ce0 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69  that is an Engli
15cf0 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64  sh language word
15d00 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f  , even if.you do
15d10 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f   not have to..</
15d20 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c  p>..<p>.The foll
15d30 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6b 65  owing are the ke
15d40 79 77 6f 72 64 73 20 63 75 72 72 65 6e 74 6c 79  ywords currently
15d50 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 53   recognized by S
15d60 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  QLite:.</p>..<bl
15d70 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
15d80 20 77 69 64 74 68 3d 22 31 30 30 25 22 20 63 6c   width="100%" cl
15d90 61 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64  ass="pdf_keyword
15da0 73 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  s">.<tr>.<td ali
15db0 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c 69 67 6e  gn="left" valign
15dc0 3d 22 74 6f 70 22 20 77 69 64 74 68 3d 22 32 30  ="top" width="20
15dd0 25 22 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6e  %">..<tcl>.set n
15de0 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f   [llength $keywo
15df0 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20 6e 43 6f  rd_list].set nCo
15e00 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20 5b 65 78  l 5.set nRow [ex
15e10 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c 2d 31 29  pr {($n+$nCol-1)
15e20 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20 69 20 30  /$nCol}].set i 0
15e30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 24 6b  .foreach word $k
15e40 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b 0a 20 20  eyword_list {.  
15e50 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 6e 64 65  if {[string inde
15e60 78 20 24 77 6f 72 64 20 65 6e 64 5d 3d 3d 22 2a  x $word end]=="*
15e70 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 77 6f 72  "} {.    set wor
15e80 64 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  d [string range 
15e90 24 77 6f 72 64 20 30 20 65 6e 64 2d 31 5d 0a 20  $word 0 end-1]. 
15ea0 20 20 20 73 65 74 20 66 6f 6e 74 20 69 0a 20 20     set font i.  
15eb0 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74  } else {.    set
15ec0 20 66 6f 6e 74 20 62 0a 20 20 7d 0a 20 20 69 66   font b.  }.  if
15ed0 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20 7b 0a 20   {$i==$nRow} {. 
15ee0 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f 74 64     hd_puts "</td
15ef0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
15f00 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c 65 66 74  p\" align=\"left
15f10 5c 22 20 77 69 64 74 68 3d 5c 22 32 30 25 5c 22  \" width=\"20%\"
15f20 3e 22 0a 20 20 20 20 73 65 74 20 69 20 31 0a 20  >".    set i 1. 
15f30 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 69 6e   } else {.    in
15f40 63 72 20 69 0a 20 20 7d 0a 20 20 68 64 5f 70 75  cr i.  }.  hd_pu
15f50 74 73 20 22 3c 24 66 6f 6e 74 3e 24 77 6f 72 64  ts "<$font>$word
15f60 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22 0a 7d 0a  </$font><br>".}.
15f70 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72  </tcl>.</td></tr
15f80 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b  ></table></block
15f90 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53 70 65 63  quote>..<h2>Spec
15fa0 69 61 6c 20 6e 61 6d 65 73 3c 2f 68 32 3e 0a 0a  ial names</h2>..
15fb0 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
15fc0 20 61 72 65 20 6e 6f 74 20 6b 65 79 77 6f 72 64   are not keyword
15fd0 73 20 69 6e 20 53 51 4c 69 74 65 2c 20 62 75 74  s in SQLite, but
15fe0 20 61 72 65 20 75 73 65 64 20 61 73 20 6e 61 6d   are used as nam
15ff0 65 73 20 6f 66 20 0a 73 79 73 74 65 6d 20 6f 62  es of .system ob
16000 6a 65 63 74 73 2e 20 20 54 68 65 79 20 63 61 6e  jects.  They can
16010 20 62 65 20 75 73 65 64 20 61 73 20 61 6e 20 69   be used as an i
16020 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 61 20  dentifier for a 
16030 64 69 66 66 65 72 65 6e 74 20 0a 74 79 70 65 20  different .type 
16040 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a  of object.</p>..
16050 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 63 6c 61 73  <blockquote clas
16060 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72 64 73 22  s="pdf_keywords"
16070 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44 5f 3c 62  ><b>.  _ROWID_<b
16080 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e 0a 20 20  r>.  MAIN<br>.  
16090 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57 49 44 3c  OID<br>.  ROWID<
160a0 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 4d 41 53  br>.  SQLITE_MAS
160b0 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45  TER<br>.  SQLITE
160c0 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e 0a 20 20  _SEQUENCE<br>.  
160d0 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d 41 53 54  SQLITE_TEMP_MAST
160e0 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50 3c 62 72  ER<br>.  TEMP<br
160f0 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  >.</b></blockquo
16100 74 65 3e 0a                                      te>.