Documentation Source Text

Hex Artifact Content
Login

Artifact d1a0218078021ba245f23ddb7e2bdce235ed9940:


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 69 73 20 6f 6d 69 74 74 65   WHERE is omitte
7ea0: 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20  d from a DELETE 
7eb0: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
7ec0: 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65  e table.being de
7ed0: 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69  leted has no tri
7ee0: 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73  ggers,.SQLite us
7ef0: 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  es an optimizati
7f00: 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65 20  on to erase the 
7f10: 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e  entire table con
7f20: 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76  tent.without hav
7f30: 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61 63  ing to visit eac
7f40: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
7f50: 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 2e 0a 54  le individual..T
7f60: 68 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f  his "truncate" o
7f70: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65  ptimization make
7f80: 73 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e  s the delete run
7f90: 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 48 6f   much faster..Ho
7fa0: 77 65 76 65 72 2c 20 69 74 20 61 6c 73 6f 20 6d  wever, it also m
7fb0: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 5b 73  eans that the [s
7fc0: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
7fd0: 5d 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74  ] and.[sqlite3_t
7fe0: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20  otal_changes()] 
7ff0: 69 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74  interfaces.and t
8000: 68 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65  he [count_change
8010: 73 5d 20 50 52 41 47 4d 41 0a 77 69 6c 6c 20 6e  s] PRAGMA.will n
8020: 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75  ot actually retu
8030: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
8040: 20 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20   deleted rows.  
8050: 0a 49 66 20 79 6f 75 20 6e 65 65 64 20 74 6f 20  .If you need to 
8060: 64 65 6c 65 74 65 20 65 76 65 72 79 20 72 6f 77  delete every row
8070: 20 6f 66 20 61 20 74 61 62 6c 65 20 61 6e 64 20   of a table and 
8080: 61 6c 73 6f 20 68 61 76 65 0a 61 6e 20 61 63 63  also have.an acc
8090: 75 72 61 74 65 20 63 6f 75 6e 74 20 6f 66 20 74  urate count of t
80a0: 68 65 20 72 6f 77 73 20 64 65 6c 65 74 65 64 20  he rows deleted 
80b0: 79 6f 75 20 63 61 6e 0a 75 73 65 20 57 48 45 52  you can.use WHER
80c0: 45 20 63 6c 61 75 73 65 20 74 68 61 74 20 69 73  E clause that is
80d0: 20 61 6c 77 61 79 73 20 74 72 75 65 3a 3c 2f 70   always true:</p
80e0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
80f0: 70 72 65 3e 0a 44 45 4c 45 54 45 20 46 52 4f 4d  pre>.DELETE FROM
8100: 20 73 6f 6d 65 74 61 62 6c 65 20 57 48 45 52 45   sometable WHERE
8110: 20 31 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63   1;.</pre></bloc
8120: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
8130: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
8140: 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 64 69 73  ation can be dis
8150: 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
8160: 65 72 69 65 73 20 62 79 20 72 65 63 6f 6d 70 69  eries by recompi
8170: 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
8180: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
8190: 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
81a0: 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
81b0: 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
81c0: 3e 0a 0a 3c 70 3e 49 66 20 53 51 4c 69 74 65 20  >..<p>If SQLite 
81d0: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
81e0: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
81f0: 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
8200: 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
8210: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68  -time option, th
8220: 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
8230: 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
8240: 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64 65  ement is.extende
8250: 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69 6f  d by the additio
8260: 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  n of optional OR
8270: 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
8280: 20 63 6c 61 75 73 65 73 3a 3c 2f 70 3e 0a 0a 3c   clauses:</p>..<
8290: 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61  tcl>BubbleDiagra
82a0: 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69  m delete-stmt-li
82b0: 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mited</tcl>..<p>
82c0: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d  The optional LIM
82d0: 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65  IT clause can be
82e0: 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74   used to limit t
82f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77  he number of.row
8300: 73 20 64 65 6c 65 74 65 64 2c 20 61 6e 64 20 74  s deleted, and t
8310: 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74 68 65  hereby limit the
8320: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74 72 61   size of the tra
8330: 6e 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20 4f 52  nsaction..The OR
8340: 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
8350: 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65   used only to de
8360: 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 72 6f  termine which ro
8370: 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e 20 74  ws fall.within t
8380: 68 65 20 4c 49 4d 49 54 2e 20 20 54 68 65 20 6f  he LIMIT.  The o
8390: 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
83a0: 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
83b0: 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
83c0: 69 73 20 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65  is not determine
83d0: 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
83e0: 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c  Y clause.</p>..<
83f0: 70 3e 54 68 65 20 70 72 65 73 65 6e 63 65 20 6f  p>The presence o
8400: 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  f a LIMIT clause
8410: 20 64 65 66 65 61 74 73 20 74 68 65 20 74 72 75   defeats the tru
8420: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
8430: 6f 6e 0a 63 61 75 73 69 6e 67 20 61 6c 6c 20 72  on.causing all r
8440: 6f 77 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ows being delete
8450: 64 20 74 6f 20 62 65 20 76 69 73 69 74 65 64 2e  d to be visited.
8460: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
8470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
84b0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
84c0: 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41  ion {DETACH DATA
84d0: 42 41 53 45 7d 20 64 65 74 61 63 68 20 44 45 54  BASE} detach DET
84e0: 41 43 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  ACH..BubbleDiagr
84f0: 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74 20 31  am detach-stmt 1
8500: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73  .</tcl>..<p>This
8510: 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74 61 63   statement detac
8520: 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f 6e 61  hes an additiona
8530: 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  l database conne
8540: 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79  ction previously
8550: 20 0a 61 74 74 61 63 68 65 64 20 75 73 69 6e 67   .attached using
8560: 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20 73 74   the [ATTACH] st
8570: 61 74 65 6d 65 6e 74 2e 20 20 0a 49 74 20 69 73  atement.  .It is
8580: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76   possible to hav
8590: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
85a0: 61 73 65 20 66 69 6c 65 20 61 74 74 61 63 68 65  ase file attache
85b0: 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
85c0: 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e   using .differen
85d0: 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74  t names, and det
85e0: 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65  aching one conne
85f0: 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20  ction to a file 
8600: 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a  will leave the .
8610: 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f  others intact.</
8620: 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 74 61 74  p>..<p>This stat
8630: 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20  ement will fail 
8640: 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e 20  if SQLite is in 
8650: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
8660: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
8670: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
8680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
86a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
86b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
86c0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
86d0: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f  {DROP INDEX} dro
86e0: 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e  pindex {{DROP IN
86f0: 44 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  DEX}}..BubbleDia
8700: 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d  gram drop-index-
8710: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
8720: 70 3e 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58  p>The DROP INDEX
8730: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76   statement remov
8740: 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65  es an index adde
8750: 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45 41  d.with the [CREA
8760: 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  TE INDEX] statem
8770: 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20  ent.  The index 
8780: 6e 61 6d 65 64 20 69 73 20 63 6f 6d 70 6c 65 74  named is complet
8790: 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  ely removed from
87a0: 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20  .the disk.  The 
87b0: 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f  only way to reco
87c0: 76 65 72 20 74 68 65 20 69 6e 64 65 78 20 69 73  ver the index is
87d0: 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a   to reenter the.
87e0: 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45  appropriate [CRE
87f0: 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61  ATE INDEX] comma
8800: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  nd.</p>..<p>The 
8810: 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65  DROP INDEX state
8820: 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72 65  ment does not re
8830: 64 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66  duce the size of
8840: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66   the database .f
8850: 69 6c 65 20 69 6e 20 74 68 65 20 64 65 66 61 75  ile in the defau
8860: 6c 74 20 6d 6f 64 65 2e 0a 45 6d 70 74 79 20 73  lt mode..Empty s
8870: 70 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61  pace in the data
8880: 62 61 73 65 20 69 73 20 72 65 74 61 69 6e 65 64  base is retained
8890: 20 66 6f 72 20 6c 61 74 65 72 20 5b 49 4e 53 45   for later [INSE
88a0: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  RT] statements. 
88b0: 20 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72 65 65   To .remove free
88c0: 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61   space in the da
88d0: 74 61 62 61 73 65 2c 20 75 73 65 20 74 68 65 20  tabase, use the 
88e0: 5b 56 41 43 55 55 4d 5d 0a 63 6f 6d 6d 61 6e 64  [VACUUM].command
88f0: 2e 20 20 49 66 20 5b 61 75 74 6f 5f 76 61 63 75  .  If [auto_vacu
8900: 75 6d 5d 20 6d 6f 64 65 20 69 73 20 65 6e 61 62  um] mode is enab
8910: 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  led for a databa
8920: 73 65 20 74 68 65 6e 20 73 70 61 63 65 0a 77 69  se then space.wi
8930: 6c 6c 20 62 65 20 66 72 65 65 64 20 61 75 74 6f  ll be freed auto
8940: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 44 52 4f  matically by DRO
8950: 50 20 49 4e 44 45 58 2e 3c 2f 70 3e 0a 0a 0a 3c  P INDEX.</p>...<
8960: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
8970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
89a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
89b0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f  ###.Section {DRO
89c0: 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62  P TABLE} droptab
89d0: 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d  le {{DROP TABLE}
89e0: 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  }..BubbleDiagram
89f0: 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74   drop-table-stmt
8a00: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
8a10: 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  e DROP TABLE sta
8a20: 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
8a30: 20 74 61 62 6c 65 20 61 64 64 65 64 20 77 69 74   table added wit
8a40: 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  h the.[CREATE TA
8a50: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
8a60: 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66   The name specif
8a70: 69 65 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65  ied is the.table
8a80: 20 6e 61 6d 65 2e 20 20 49 74 20 69 73 20 63 6f   name.  It is co
8a90: 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64  mpletely removed
8aa0: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
8ab0: 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20 74 68  se schema and th
8ac0: 65 20 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20 54  e .disk file.  T
8ad0: 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74  he table can not
8ae0: 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20   be recovered.  
8af0: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
8b00: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
8b10: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
8b20: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
8b30: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ted.</p>..<p>The
8b40: 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74   DROP TABLE stat
8b50: 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72  ement does not r
8b60: 65 64 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f  educe the size o
8b70: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  f the database .
8b80: 66 69 6c 65 20 69 6e 20 74 68 65 20 64 65 66 61  file in the defa
8b90: 75 6c 74 20 6d 6f 64 65 2e 20 20 45 6d 70 74 79  ult mode.  Empty
8ba0: 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61   space in the da
8bb0: 74 61 62 61 73 65 20 69 73 20 72 65 74 61 69 6e  tabase is retain
8bc0: 65 64 20 66 6f 72 0a 6c 61 74 65 72 20 5b 49 4e  ed for.later [IN
8bd0: 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  SERT] statements
8be0: 2e 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72  .  To .remove fr
8bf0: 65 65 20 73 70 61 63 65 20 69 6e 20 74 68 65 20  ee space in the 
8c00: 64 61 74 61 62 61 73 65 2c 20 0a 75 73 65 20 74  database, .use t
8c10: 68 65 20 5b 56 41 43 55 55 4d 5d 20 73 74 61 74  he [VACUUM] stat
8c20: 65 6d 65 6e 74 2e 0a 49 66 20 5b 61 75 74 6f 5f  ement..If [auto_
8c30: 76 61 63 75 75 6d 5d 20 6d 6f 64 65 20 69 73 20  vacuum] mode is 
8c40: 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61  enabled for a da
8c50: 74 61 62 61 73 65 20 74 68 65 6e 20 73 70 61 63  tabase then spac
8c60: 65 0a 77 69 6c 6c 20 62 65 20 66 72 65 65 64 20  e.will be freed 
8c70: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
8c80: 20 44 52 4f 50 20 54 41 42 4c 45 2e 3c 2f 70 3e   DROP TABLE.</p>
8c90: 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
8ca0: 6c 20 49 46 20 45 58 49 53 54 53 20 63 6c 61 75  l IF EXISTS clau
8cb0: 73 65 20 73 75 70 70 72 65 73 73 65 73 20 74 68  se suppresses th
8cc0: 65 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75  e error that wou
8cd0: 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75  ld normally.resu
8ce0: 6c 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  lt if the table 
8cf0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c  does not exist.<
8d00: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
8d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d50: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
8d60: 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
8d70: 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
8d80: 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42  ROP TRIGGER}}..B
8d90: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
8da0: 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31  p-trigger-stmt 1
8db0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
8dc0: 44 52 4f 50 20 54 52 49 47 47 45 52 20 73 74 61  DROP TRIGGER sta
8dd0: 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61  tement removes a
8de0: 20 74 72 69 67 67 65 72 20 63 72 65 61 74 65 64   trigger created
8df0: 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41 54 45   by the .[CREATE
8e00: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
8e10: 65 6e 74 2e 20 20 54 68 65 20 74 72 69 67 67 65  ent.  The trigge
8e20: 72 20 69 73 20 0a 64 65 6c 65 74 65 64 20 66 72  r is .deleted fr
8e30: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
8e40: 73 63 68 65 6d 61 2e 20 4e 6f 74 65 20 74 68 61  schema. Note tha
8e50: 74 20 74 72 69 67 67 65 72 73 20 61 72 65 20 61  t triggers are a
8e60: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 0a 64 72  utomatically .dr
8e70: 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65 20 61  opped when the a
8e80: 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c 65 20  ssociated table 
8e90: 69 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a  is dropped.</p>.
8ea0: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
8eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ef0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
8f00: 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69  ROP VIEW} dropvi
8f10: 65 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d  ew {{DROP VIEW}}
8f20: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
8f30: 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31  drop-view-stmt 1
8f40: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
8f50: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
8f60: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
8f70: 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
8f80: 65 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e.[CREATE VIEW] 
8f90: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
8fa0: 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 69  name specified i
8fb0: 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61 6d 65  s the .view name
8fc0: 2e 20 20 49 74 20 69 73 20 72 65 6d 6f 76 65 64  .  It is removed
8fd0: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
8fe0: 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74 20 6e  se schema, but n
8ff0: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 0a 69  o actual data .i
9000: 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  n the underlying
9010: 20 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20   base tables is 
9020: 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c  modified.</p>..<
9030: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
9040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9080: 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58 50 4c  ###.Section EXPL
9090: 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58 50 4c  AIN explain EXPL
90a0: 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  AIN..BubbleDiagr
90b0: 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63  am sql-stmt.</tc
90c0: 6c 3e 0a 0a 3c 70 3e 41 6e 20 53 51 4c 20 73 74  l>..<p>An SQL st
90d0: 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65 20 70  atement can be p
90e0: 72 65 63 65 64 65 64 20 62 79 20 74 68 65 20 6b  receded by the k
90f0: 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49 4e 22  eyword "EXPLAIN"
9100: 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72 61 73   or.by the phras
9110: 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59  e "EXPLAIN QUERY
9120: 20 50 4c 41 4e 22 2e 20 20 45 69 74 68 65 72 20   PLAN".  Either 
9130: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 63 61 75  modification cau
9140: 73 65 73 20 74 68 65 0a 53 51 4c 20 73 74 61 74  ses the.SQL stat
9150: 65 6d 65 6e 74 20 74 6f 20 62 65 68 61 76 65 20  ement to behave 
9160: 61 73 20 61 20 71 75 65 72 79 20 61 6e 64 20 74  as a query and t
9170: 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f 72 6d 61  o return informa
9180: 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77 20 74  tion about.how t
9190: 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
91a0: 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 70 65 72   would have oper
91b0: 61 74 65 64 20 69 66 20 74 68 65 20 45 58 50 4c  ated if the EXPL
91c0: 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72 0a 70  AIN keyword or.p
91d0: 68 72 61 73 65 20 68 61 64 20 62 65 65 6e 20 6f  hrase had been o
91e0: 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mitted.</p>..<p>
91f0: 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  When the EXPLAIN
9200: 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73   keyword appears
9210: 20 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61   by itself it ca
9220: 75 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65  uses the stateme
9230: 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20  nt.to behave as 
9240: 61 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74  a query that ret
9250: 75 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63  urns the sequenc
9260: 65 20 6f 66 20 0a 3c 61 20 68 72 65 66 3d 22 6f  e of .<a href="o
9270: 70 63 6f 64 65 2e 68 74 6d 6c 22 3e 76 69 72 74  pcode.html">virt
9280: 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74  ual machine inst
9290: 72 75 63 74 69 6f 6e 73 3c 2f 61 3e 20 69 74 20  ructions</a> it 
92a0: 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65 64 20  would have.used 
92b0: 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 63  to execute the c
92c0: 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65 20 45  ommand had the E
92d0: 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e  XPLAIN keyword n
92e0: 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e 74 2e  ot been present.
92f0: 0a 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49  .When the EXPLAI
9300: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 70 68 72  N QUERY PLAN phr
9310: 61 73 65 20 61 70 70 65 61 72 73 2c 20 74 68 65  ase appears, the
9320: 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72   statement retur
9330: 6e 73 0a 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e  ns.high-level in
9340: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
9350: 77 68 61 74 20 69 6e 64 69 63 65 73 20 77 6f 75  what indices wou
9360: 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73 65  ld have been use
9370: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f  d.</p>..<p>The o
9380: 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c 41  utput from EXPLA
9390: 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20 51  IN and EXPLAIN Q
93a0: 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e 74  UERY PLAN is int
93b0: 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72 61  ended for.intera
93c0: 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20 61  ctive analysis a
93d0: 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69  nd troubleshooti
93e0: 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64 65  ng only.  The de
93f0: 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f 75  tails of the .ou
9400: 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65 20  tput format are 
9410: 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67  subject to chang
9420: 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65 61  e from one relea
9430: 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20  se of SQLite to 
9440: 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69 63  the next..Applic
9450: 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f  ations should no
9460: 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f 72  t use EXPLAIN or
9470: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
9480: 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72 20  LAN since.their 
9490: 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 6f  behavior is undo
94a0: 63 75 6d 65 6e 74 65 64 2c 20 75 6e 73 70 65 63  cumented, unspec
94b0: 69 66 69 65 64 2c 20 61 6e 64 20 76 61 72 69 61  ified, and varia
94c0: 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ble.</p>..<tcl>.
94d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
9520: 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73 69 6f  ection expressio
9530: 6e 20 65 78 70 72 20 7b 65 78 70 72 65 73 73 69  n expr {expressi
9540: 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 73  on {expression s
9550: 79 6e 74 61 78 7d 7d 0a 0a 42 75 62 62 6c 65 44  yntax}}..BubbleD
9560: 69 61 67 72 61 6d 20 65 78 70 72 20 31 0a 42 75  iagram expr 1.Bu
9570: 62 62 6c 65 44 69 61 67 72 61 6d 20 6c 69 74 65  bbleDiagram lite
9580: 72 61 6c 2d 76 61 6c 75 65 0a 42 75 62 62 6c 65  ral-value.Bubble
9590: 44 69 61 67 72 61 6d 20 73 69 67 6e 65 64 2d 6e  Diagram signed-n
95a0: 75 6d 62 65 72 0a 42 75 62 62 6c 65 44 69 61 67  umber.BubbleDiag
95b0: 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69  ram raise-functi
95c0: 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  on.</tcl>..<p>Th
95d0: 69 73 20 73 65 63 74 69 6f 6e 20 69 73 20 64 69  is section is di
95e0: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
95f0: 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f   others.  Most o
9600: 74 68 65 72 20 73 65 63 74 69 6f 6e 73 20 6f 66  ther sections of
9610: 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 74  .this document t
9620: 61 6c 6b 73 20 61 62 6f 75 74 20 61 20 70 61 72  alks about a par
9630: 74 69 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d  ticular SQL comm
9640: 61 6e 64 2e 20 20 54 68 69 73 20 73 65 63 74 69  and.  This secti
9650: 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b  on does.not talk
9660: 20 61 62 6f 75 74 20 61 20 73 74 61 6e 64 61 6c   about a standal
9670: 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20  one command but 
9680: 61 62 6f 75 74 20 22 65 78 70 72 65 73 73 69 6f  about "expressio
9690: 6e 73 22 20 77 68 69 63 68 20 61 72 65 20 0a 73  ns" which are .s
96a0: 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20  ubcomponents of 
96b0: 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61  most other comma
96c0: 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c  nds.</p>..<p>SQL
96d0: 69 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ite understands 
96e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69  the following bi
96f0: 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20  nary operators, 
9700: 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69  in order from.hi
9710: 67 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20  ghest to lowest 
9720: 70 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a  precedence:</p>.
9730: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
9740: 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22  e>.<font color="
9750: 23 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c  #2c2cf0"><big>||
9760: 0a 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20  .*    /    %.+  
9770: 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26    -.&lt;&lt;   &
9780: 67 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20  gt;&gt;   &amp; 
9790: 20 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74     |.&lt;    &lt
97a0: 3b 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74  ;=   &gt;    &gt
97b0: 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20  ;=.=    ==   != 
97c0: 20 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62    &lt;&gt;   </b
97d0: 69 67 3e 49 4e 0a 41 4e 44 20 20 20 0a 4f 52 3c  ig>IN.AND   .OR<
97e0: 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62  /font>.</pre></b
97f0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 53  lockquote>..<p>S
9800: 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
9810: 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
9820: 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
9830: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
9840: 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
9850: 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
9860: 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
9870: 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
9880: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
9890: 0a 0a 3c 70 3e 54 68 65 20 43 4f 4c 4c 41 54 45  ..<p>The COLLATE
98a0: 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
98b0: 20 74 68 6f 75 67 68 74 20 6f 66 20 61 73 20 61   thought of as a
98c0: 20 75 6e 61 72 79 20 70 6f 73 74 66 69 78 0a 6f   unary postfix.o
98d0: 70 65 72 61 74 6f 72 2e 20 20 54 68 65 20 43 4f  perator.  The CO
98e0: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68  LLATE operator h
98f0: 61 73 20 74 68 65 20 68 69 67 68 65 73 74 20 70  as the highest p
9900: 72 65 63 65 64 65 6e 63 65 2e 0a 49 74 20 61 6c  recedence..It al
9910: 77 61 79 73 20 62 69 6e 64 73 20 6d 6f 72 65 20  ways binds more 
9920: 74 69 67 68 74 6c 79 20 74 68 61 6e 20 61 6e 79  tightly than any
9930: 20 70 72 65 66 69 78 20 75 6e 61 72 79 20 6f 70   prefix unary op
9940: 65 72 61 74 6f 72 20 6f 72 0a 61 6e 79 20 62 69  erator or.any bi
9950: 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 3c 2f  nary operator.</
9960: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73  p>..<tcl>hd_puts
9970: 20 22 0a 3c 70 3e 54 68 65 20 75 6e 61 72 79 20   ".<p>The unary 
9980: 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
9990: 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f 70  or +] is a no-op
99a0: 2e 20 20 49 74 20 63 61 6e 20 62 65 20 61 70 70  .  It can be app
99b0: 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c  lied.to strings,
99c0: 20 6e 75 6d 62 65 72 73 2c 20 6f 72 20 62 6c 6f   numbers, or blo
99d0: 62 73 20 61 6e 64 20 69 74 20 61 6c 77 61 79 73  bs and it always
99e0: 20 67 69 76 65 73 20 61 73 20 69 74 73 20 72 65   gives as its re
99f0: 73 75 6c 74 20 74 68 65 0a 76 61 6c 75 65 20 6f  sult the.value o
9a00: 66 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f  f the operand.</
9a10: 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f  p>"</tcl>..<p>No
9a20: 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72  te that there ar
9a30: 65 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73  e two variations
9a40: 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61   of the equals a
9a50: 6e 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70  nd not equals.op
9a60: 65 72 61 74 6f 72 73 2e 20 20 45 71 75 61 6c 73  erators.  Equals
9a70: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a   can be either..
9a80: 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b  <tcl>.hd_puts "[
9a90: 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b  Operator =] or [
9aa0: 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 54 68  Operator ==]..Th
9ab0: 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65  e non-equals ope
9ac0: 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74  rator can be eit
9ad0: 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d  her.[Operator !=
9ae0: 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b  ] or [Operator {
9af0: 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 54 68 65 20  &lt;&gt;}]..The 
9b00: 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f 70  [Operator ||] op
9b10: 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e 63  erator is \"conc
9b20: 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20 6a  atenate\" - it j
9b30: 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74 68  oins together.th
9b40: 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f 66  e two strings of
9b50: 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a 54   its operands..T
9b60: 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65  he operator [Ope
9b70: 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75 74 73  rator %] outputs
9b80: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f   the remainder o
9b90: 66 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72  f its left .oper
9ba0: 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72  and modulo its r
9bb0: 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70  ight operand.</p
9bc0: 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73 75 6c 74  >..<p>The result
9bd0: 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f   of any binary o
9be0: 70 65 72 61 74 6f 72 20 69 73 20 61 20 6e 75 6d  perator is a num
9bf0: 65 72 69 63 20 76 61 6c 75 65 2c 20 65 78 63 65  eric value, exce
9c00: 70 74 0a 66 6f 72 20 74 68 65 20 5b 4f 70 65 72  pt.for the [Oper
9c10: 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65  ator ||] concate
9c20: 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20  nation operator 
9c30: 77 68 69 63 68 20 67 69 76 65 73 20 61 20 73 74  which gives a st
9c40: 72 69 6e 67 0a 72 65 73 75 6c 74 2e 3c 2f 70 3e  ring.result.</p>
9c50: 22 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d 65  "</tcl>..<a name
9c60: 3d 22 6c 69 74 65 72 61 6c 5f 76 61 6c 75 65 22  ="literal_value"
9c70: 3e 3c 2f 61 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65  ></a>.<p>.A lite
9c80: 72 61 6c 20 76 61 6c 75 65 20 69 73 20 61 6e 20  ral value is an 
9c90: 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f  integer number o
9ca0: 72 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  r a floating poi
9cb0: 6e 74 20 6e 75 6d 62 65 72 2e 0a 53 63 69 65 6e  nt number..Scien
9cc0: 74 69 66 69 63 20 6e 6f 74 61 74 69 6f 6e 20 69  tific notation i
9cd0: 73 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54 68  s supported.  Th
9ce0: 65 20 22 2e 22 20 63 68 61 72 61 63 74 65 72 20  e "." character 
9cf0: 69 73 20 61 6c 77 61 79 73 20 75 73 65 64 0a 61  is always used.a
9d00: 73 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  s the decimal po
9d10: 69 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20  int even if the 
9d20: 6c 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73  locale setting s
9d30: 70 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72  pecifies "," for
9d40: 0a 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65  .this role - the
9d50: 20 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20   use of "," for 
9d60: 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
9d70: 74 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69  t would result i
9d80: 6e 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69  n.syntactic ambi
9d90: 67 75 69 74 79 2e 20 20 41 20 73 74 72 69 6e 67  guity.  A string
9da0: 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72   constant is for
9db0: 6d 65 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67  med by enclosing
9dc0: 20 74 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73   the.string in s
9dd0: 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29  ingle quotes (')
9de0: 2e 20 20 41 20 73 69 6e 67 6c 65 20 71 75 6f 74  .  A single quot
9df0: 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 74 72  e within the str
9e00: 69 6e 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64  ing can.be encod
9e10: 65 64 20 62 79 20 70 75 74 74 69 6e 67 20 74 77  ed by putting tw
9e20: 6f 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20  o single quotes 
9e30: 69 6e 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e  in a row - as in
9e40: 20 50 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65   Pascal..C-style
9e50: 20 65 73 63 61 70 65 73 20 75 73 69 6e 67 20 74   escapes using t
9e60: 68 65 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61  he backslash cha
9e70: 72 61 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73  racter are not s
9e80: 75 70 70 6f 72 74 65 64 20 62 65 63 61 75 73 65  upported because
9e90: 0a 74 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74  .they are not st
9ea0: 61 6e 64 61 72 64 20 53 51 4c 2e 0a 42 4c 4f 42  andard SQL..BLOB
9eb0: 20 6c 69 74 65 72 61 6c 73 20 61 72 65 20 73 74   literals are st
9ec0: 72 69 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f  ring literals co
9ed0: 6e 74 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63  ntaining hexadec
9ee0: 69 6d 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72  imal data and.pr
9ef0: 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67  eceded by a sing
9f00: 6c 65 20 22 78 22 20 6f 72 20 22 58 22 20 63 68  le "x" or "X" ch
9f10: 61 72 61 63 74 65 72 2e 20 20 46 6f 72 20 65 78  aracter.  For ex
9f20: 61 6d 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ample:</p>..<blo
9f30: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27  ckquote><pre>.X'
9f40: 35 33 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f  53514C697465'.</
9f50: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
9f60: 3e 0a 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c  >..<p>.A literal
9f70: 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20   value can also 
9f80: 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55  be the token "NU
9f90: 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41  LL"..</p>..<p>.A
9fa0: 20 70 61 72 61 6d 65 74 65 72 20 73 70 65 63 69   parameter speci
9fb0: 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64  fies a placehold
9fc0: 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  er in the expres
9fd0: 73 69 6f 6e 20 66 6f 72 20 61 20 6c 69 74 65 72  sion for a liter
9fe0: 61 6c 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73  al.value that is
9ff0: 20 66 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75   filled in at ru
a000: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a  ntime using the.
a010: 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  [sqlite3_bind_bl
a020: 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62  ob() | sqlite3_b
a030: 69 6e 64 28 29 5d 20 41 50 49 73 2e 0a 50 61 72  ind()] APIs..Par
a040: 61 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65  ameters can take
a050: 20 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a   several forms:.
a060: 3c 2f 70 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  </p..<blockquote
a070: 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c  >.<table>.<tr>.<
a080: 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
a090: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
a0a0: 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e  >?</b><i>NNN</i>
a0b0: 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
a0c0: 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20  20"></td>.<td>A 
a0d0: 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f  question mark fo
a0e0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
a0f0: 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f  er <i>NNN</i> ho
a100: 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74  lds a spot for t
a110: 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65  he.NNN-th parame
a120: 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62  ter.  NNN must b
a130: 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
a140: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
a150: 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 3c 2f 74  ABLE_NUMBER].</t
a160: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
a170: 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
a180: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
a190: 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  ?</b></td><td wi
a1a0: 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
a1b0: 74 64 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61  td>A question ma
a1c0: 72 6b 20 74 68 61 74 20 69 73 20 6e 6f 74 20 66  rk that is not f
a1d0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d  ollowed by a num
a1e0: 62 65 72 20 68 6f 6c 64 73 20 61 20 73 70 6f 74  ber holds a spot
a1f0: 20 66 6f 72 0a 74 68 65 20 6e 65 78 74 20 75 6e   for.the next un
a200: 75 73 65 64 20 70 61 72 61 6d 65 74 65 72 2e 3c  used parameter.<
a210: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
a220: 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
a230: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
a240: 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>:</b><i>AAAA</
a250: 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
a260: 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
a270: 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64  A colon followed
a280: 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
a290: 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73  r name holds a s
a2a0: 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a  pot for a named.
a2b0: 70 61 72 61 6d 65 74 65 72 20 77 69 74 68 20 74  parameter with t
a2c0: 68 65 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 4e  he name AAAA.  N
a2d0: 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72 73 20  amed parameters 
a2e0: 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65 72 65  are also numbere
a2f0: 64 2e 0a 54 68 65 20 6e 75 6d 62 65 72 20 61 73  d..The number as
a300: 73 69 67 6e 65 64 20 69 73 20 74 68 65 20 6e 65  signed is the ne
a310: 78 74 20 75 6e 75 73 65 64 20 6e 75 6d 62 65 72  xt unused number
a320: 2e 20 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66  .  To avoid conf
a330: 75 73 69 6f 6e 2c 0a 69 74 20 69 73 20 62 65 73  usion,.it is bes
a340: 74 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e  t to avoid mixin
a350: 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62  g named and numb
a360: 65 72 65 64 20 70 61 72 61 6d 65 74 65 72 73 2e  ered parameters.
a370: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
a380: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
a390: 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
a3a0: 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c  <b>@</b><i>AAAA<
a3b0: 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
a3c0: 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
a3d0: 3e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f  >An "at" sign wo
a3e0: 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
a3f0: 20 61 20 63 6f 6c 6f 6e 2e 3c 2f 74 64 3e 0a 3c   a colon.</td>.<
a400: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
a410: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
a420: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62  gn="top"><b>$</b
a430: 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
a440: 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
a450: 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 64 6f 6c 6c  </td>.<td>A doll
a460: 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64  ar-sign followed
a470: 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
a480: 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64  r name also hold
a490: 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e  s a spot for a n
a4a0: 61 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77  amed.parameter w
a4b0: 69 74 68 20 74 68 65 20 6e 61 6d 65 20 41 41 41  ith the name AAA
a4c0: 41 2e 20 20 54 68 65 20 69 64 65 6e 74 69 66 69  A.  The identifi
a4d0: 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73 20  er name in this 
a4e0: 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  case can include
a4f0: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63 63  .one or more occ
a500: 75 72 61 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20  urances of "::" 
a510: 61 6e 64 20 61 20 73 75 66 66 69 78 20 65 6e 63  and a suffix enc
a520: 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22  losed in "(...)"
a530: 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20   containing.any 
a540: 74 65 78 74 20 61 74 20 61 6c 6c 2e 20 20 54 68  text at all.  Th
a550: 69 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65  is syntax is the
a560: 20 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61   form of a varia
a570: 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20  ble name in the 
a580: 54 63 6c 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20  Tcl.programming 
a590: 6c 61 6e 67 75 61 67 65 2e 3c 2f 74 64 3e 0a 3c  language.</td>.<
a5a0: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
a5b0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
a5c0: 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  Parameters that 
a5d0: 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64  are not assigned
a5e0: 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73   values using.[s
a5f0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
a600: 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
a610: 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64  d()] are treated
a620: 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c  .as NULL.</p>..<
a630: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
a640: 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45  like LIKE ESCAPE
a650: 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 4c 49  </tcl>.<p>The LI
a660: 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65 73  KE operator does
a670: 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68   a pattern match
a680: 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  ing comparison. 
a690: 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f 20 74  The operand.to t
a6a0: 68 65 20 72 69 67 68 74 20 63 6f 6e 74 61 69 6e  he right contain
a6b0: 73 20 74 68 65 20 70 61 74 74 65 72 6e 2c 20 74  s the pattern, t
a6c0: 68 65 20 6c 65 66 74 20 68 61 6e 64 20 6f 70 65  he left hand ope
a6d0: 72 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68  rand contains th
a6e0: 65 0a 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63  e.string to matc
a6f0: 68 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61  h against the pa
a700: 74 74 65 72 6e 2e 20 0a 0a 3c 74 63 6c 3e 68 64  ttern. ..<tcl>hd
a710: 5f 70 75 74 73 20 22 41 20 70 65 72 63 65 6e 74  _puts "A percent
a720: 20 73 79 6d 62 6f 6c 20 5b 4f 70 65 72 61 74 6f   symbol [Operato
a730: 72 20 25 5d 20 69 6e 20 74 68 65 20 70 61 74 74  r %] in the patt
a740: 65 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a  ern matches any.
a750: 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f  sequence of zero
a760: 20 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74   or more charact
a770: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
a780: 67 2e 20 20 41 6e 20 75 6e 64 65 72 73 63 6f 72  g.  An underscor
a790: 65 0a 5b 4f 70 65 72 61 74 6f 72 20 5f 5d 20 69  e.[Operator _] i
a7a0: 6e 20 74 68 65 20 70 61 74 74 65 72 6e 20 6d 61  n the pattern ma
a7b0: 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65  tches any single
a7c0: 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
a7d0: 65 0a 73 74 72 69 6e 67 2e 20 20 41 6e 79 20 6f  e.string.  Any o
a7e0: 74 68 65 72 20 63 68 61 72 61 63 74 65 72 20 6d  ther character m
a7f0: 61 74 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72  atches itself or
a800: 20 69 74 27 73 20 6c 6f 77 65 72 2f 75 70 70 65   it's lower/uppe
a810: 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65 6e  r case.equivalen
a820: 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73  t (i.e. case-ins
a830: 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69 6e  ensitive matchin
a840: 67 29 2e 20 20 28 41 20 62 75 67 3a 20 53 51 4c  g).  (A bug: SQL
a850: 69 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74  ite only.underst
a860: 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72  ands upper/lower
a870: 20 63 61 73 65 20 66 6f 72 20 37 2d 62 69 74 20   case for 7-bit 
a880: 4c 61 74 69 6e 20 63 68 61 72 61 63 74 65 72 73  Latin characters
a890: 2e 20 20 48 65 6e 63 65 20 74 68 65 0a 4c 49 4b  .  Hence the.LIK
a8a0: 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61  E operator is ca
a8b0: 73 65 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72  se sensitive for
a8c0: 20 38 2d 62 69 74 20 69 73 6f 38 38 35 39 20 63   8-bit iso8859 c
a8d0: 68 61 72 61 63 74 65 72 73 20 6f 72 20 55 54 46  haracters or UTF
a8e0: 2d 38 0a 63 68 61 72 61 63 74 65 72 73 2e 20 20  -8.characters.  
a8f0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
a900: 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e 27   expression <b>'
a910: 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  a'&nbsp;LIKE&nbs
a920: 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52 55  p;'A'</b>.is TRU
a930: 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69 67  E but <b>'&aelig
a940: 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  ;'&nbsp;LIKE&nbs
a950: 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20  p;'&AElig;'</b> 
a960: 69 73 20 46 41 4c 53 45 2e 29 2e 3c 2f 70 3e 22  is FALSE.).</p>"
a970: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 49 66 20 74 68  </tcl>..<p>If th
a980: 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
a990: 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
a9a0: 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78  ent, then the ex
a9b0: 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69  pression.followi
a9c0: 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65  ng the ESCAPE ke
a9d0: 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75  yword must evalu
a9e0: 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ate to a string 
a9f0: 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20  consisting of.a 
aa00: 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
aa10: 2e 20 54 68 69 73 20 63 68 61 72 61 63 74 65 72  . This character
aa20: 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e 20   may be used in 
aa30: 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e  the LIKE pattern
aa40: 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65  .to include lite
aa50: 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75  ral percent or u
aa60: 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61 63  nderscore charac
aa70: 74 65 72 73 2e 20 54 68 65 20 65 73 63 61 70 65  ters. The escape
aa80: 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f  .character follo
aa90: 77 65 64 20 62 79 20 61 20 70 65 72 63 65 6e 74  wed by a percent
aaa0: 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63   symbol, undersc
aab0: 6f 72 65 20 6f 72 20 69 74 73 65 6c 66 20 6d 61  ore or itself ma
aac0: 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61 6c 20  tches a.literal 
aad0: 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20  percent symbol, 
aae0: 75 6e 64 65 72 73 63 6f 72 65 20 6f 72 20 65 73  underscore or es
aaf0: 63 61 70 65 20 63 68 61 72 61 63 74 65 72 20 69  cape character i
ab00: 6e 20 74 68 65 20 73 74 72 69 6e 67 2c 0a 72 65  n the string,.re
ab10: 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 20  spectively. The 
ab20: 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70 65 72 61  infix LIKE opera
ab30: 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
ab40: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
ab50: 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  e.application-de
ab60: 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69  fined SQL functi
ab70: 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f  ons [like(<i>Y</
ab80: 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 6f 72  i>,<i>X</i>)] or
ab90: 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c  .[like(<i>Y</i>,
aba0: 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69  <i>X</i>,<i>Z</i
abb0: 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 54 68  >)]</a>.</p>..Th
abc0: 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
abd0: 69 73 20 6e 6f 74 20 63 61 73 65 20 73 65 6e 73  is not case sens
abe0: 69 74 69 76 65 20 61 6e 64 20 77 69 6c 6c 20 6d  itive and will m
abf0: 61 74 63 68 20 75 70 70 65 72 20 63 61 73 65 0a  atch upper case.
ac00: 63 68 61 72 61 63 74 65 72 73 20 6f 6e 20 6f 6e  characters on on
ac10: 65 20 73 69 64 65 20 61 67 61 69 6e 73 74 20 6c  e side against l
ac20: 6f 77 65 72 20 63 61 73 65 20 63 68 61 72 61 63  ower case charac
ac30: 74 65 72 73 20 6f 6e 20 74 68 65 20 6f 74 68 65  ters on the othe
ac40: 72 2e 20 20 0a 28 41 20 62 75 67 3a 20 53 51 4c  r.  .(A bug: SQL
ac50: 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74  ite only underst
ac60: 61 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72  ands upper/lower
ac70: 20 63 61 73 65 20 66 6f 72 20 37 2d 62 69 74 20   case for 7-bit 
ac80: 4c 61 74 69 6e 0a 63 68 61 72 61 63 74 65 72 73  Latin.characters
ac90: 2e 20 20 48 65 6e 63 65 20 74 68 65 20 4c 49 4b  .  Hence the LIK
aca0: 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61  E operator is ca
acb0: 73 65 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72  se sensitive for
acc0: 20 38 2d 62 69 74 0a 69 73 6f 38 38 35 39 20 63   8-bit.iso8859 c
acd0: 68 61 72 61 63 74 65 72 73 20 6f 72 20 55 54 46  haracters or UTF
ace0: 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e 20 20  -8 characters.  
acf0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
ad00: 20 65 78 70 72 65 73 73 69 6f 6e 0a 3c 62 3e 27   expression.<b>'
ad10: 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  a'&nbsp;LIKE&nbs
ad20: 70 3b 27 41 27 3c 2f 62 3e 20 69 73 20 54 52 55  p;'A'</b> is TRU
ad30: 45 20 62 75 74 0a 3c 62 3e 27 26 61 65 6c 69 67  E but.<b>'&aelig
ad40: 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62 73  ;'&nbsp;LIKE&nbs
ad50: 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e 20  p;'&AElig;'</b> 
ad60: 69 73 20 46 41 4c 53 45 2e 29 2e 3c 2f 70 3e 0a  is FALSE.).</p>.
ad70: 0a 3c 70 3e 54 68 65 20 69 6e 66 69 78 20 4c 49  .<p>The infix LI
ad80: 4b 45 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  KE.operator is i
ad90: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
ada0: 6c 6c 69 6e 67 20 74 68 65 20 75 73 65 72 20 66  lling the user f
adb0: 75 6e 63 74 69 6f 6e 20 3c 61 20 68 72 65 66 3d  unction <a href=
adc0: 22 23 6c 69 6b 65 46 75 6e 63 22 3e 0a 6c 69 6b  "#likeFunc">.lik
add0: 65 28 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 59 3c  e(<i>X</i>,<i>Y<
ade0: 2f 69 3e 29 3c 2f 61 3e 2e 20 20 49 66 20 61 6e  /i>)</a>.  If an
adf0: 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69   ESCAPE clause i
ae00: 73 20 70 72 65 73 65 6e 74 2c 20 69 74 20 61 64  s present, it ad
ae10: 64 73 0a 61 20 74 68 69 72 64 20 70 61 72 61 6d  ds.a third param
ae20: 65 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63  eter to the func
ae30: 74 69 6f 6e 20 63 61 6c 6c 2e 20 49 66 20 74 68  tion call. If th
ae40: 65 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  e functionality 
ae50: 6f 66 20 4c 49 4b 45 20 63 61 6e 20 62 65 0a 6f  of LIKE can be.o
ae60: 76 65 72 72 69 64 64 65 6e 20 62 79 20 64 65 66  verridden by def
ae70: 69 6e 69 6e 67 20 61 6e 20 61 6c 74 65 72 6e 61  ining an alterna
ae80: 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
ae90: 69 6f 6e 20 6f 66 20 74 68 65 0a 6c 69 6b 65 28  ion of the.like(
aea0: 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 3c  ) SQL function.<
aeb0: 2f 70 3e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  /p>.</p>..<tcl>h
aec0: 64 5f 66 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20  d_fragment glob 
aed0: 47 4c 4f 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68  GLOB</tcl>.<p>Th
aee0: 65 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20  e GLOB operator 
aef0: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49  is similar to LI
af00: 4b 45 20 62 75 74 20 75 73 65 73 20 74 68 65 20  KE but uses the 
af10: 55 6e 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69  Unix.file globbi
af20: 6e 67 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74  ng syntax for it
af30: 73 20 77 69 6c 64 63 61 72 64 73 2e 20 20 41 6c  s wildcards.  Al
af40: 73 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65  so, GLOB is case
af50: 0a 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69  .sensitive, unli
af60: 6b 65 20 4c 49 4b 45 2e 20 20 42 6f 74 68 20 47  ke LIKE.  Both G
af70: 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79  LOB and LIKE may
af80: 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a   be preceded by.
af90: 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20  the NOT keyword 
afa0: 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65  to invert the se
afb0: 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e  nse of the test.
afc0: 20 20 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42    The infix GLOB
afd0: 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d   .operator is im
afe0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
aff0: 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ling the functio
b000: 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e  n.[glob(<i>Y</i>
b010: 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20  ,<i>X</i>)] and 
b020: 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20  can be modified 
b030: 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68  by overriding.th
b040: 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e  at function.</p>
b050: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b060: 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58 50  nt regexp REGEXP
b070: 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 52 45  </tcl>.<p>The RE
b080: 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69 73  GEXP operator is
b090: 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61   a special synta
b0a0: 78 20 66 6f 72 20 74 68 65 20 72 65 67 65 78 70  x for the regexp
b0b0: 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ().user function
b0c0: 2e 20 20 4e 6f 20 72 65 67 65 78 70 28 29 20 75  .  No regexp() u
b0d0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser function is 
b0e0: 64 65 66 69 6e 65 64 20 62 79 20 64 65 66 61 75  defined by defau
b0f0: 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66  lt.and so use of
b100: 20 74 68 65 20 52 45 47 45 58 50 20 6f 70 65 72   the REGEXP oper
b110: 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c  ator will normal
b120: 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a  ly result in an.
b130: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20  error message.  
b140: 49 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  If a user-define
b150: 64 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64  d function named
b160: 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64 64   "regexp".is add
b170: 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c 20  ed at run-time, 
b180: 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  that function wi
b190: 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69 6e 20  ll be called in 
b1a0: 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65 6d 65  order.to impleme
b1b0: 6e 74 20 74 68 65 20 52 45 47 45 58 50 20 6f 70  nt the REGEXP op
b1c0: 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  erator.</p>..<tc
b1d0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61  l>hd_fragment ma
b1e0: 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a  tch MATCH</tcl>.
b1f0: 3c 70 3e 54 68 65 20 4d 41 54 43 48 20 6f 70 65  <p>The MATCH ope
b200: 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63 69  rator is a speci
b210: 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68  al syntax for th
b220: 65 20 6d 61 74 63 68 28 29 0a 75 73 65 72 20 66  e match().user f
b230: 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65  unction.  The de
b240: 66 61 75 6c 74 20 6d 61 74 63 68 28 29 20 66 75  fault match() fu
b250: 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
b260: 61 74 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e 64  ation.raises and
b270: 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 20 69   exception and i
b280: 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73 65  s not really use
b290: 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e 67  ful for anything
b2a0: 2e 0a 42 75 74 20 65 78 74 65 6e 73 69 6f 6e 73  ..But extensions
b2b0: 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68   can override th
b2c0: 65 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69  e match() functi
b2d0: 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c  on with more.hel
b2e0: 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a  pful logic.</p>.
b2f0: 0a 3c 70 3e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d  .<p>A column nam
b300: 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20  e can be any of 
b310: 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65  the names define
b320: 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  d in the [CREATE
b330: 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
b340: 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  t or one of the 
b350: 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61  following specia
b360: 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  l identifiers: "
b370: 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22  <b>ROWID</b>",."
b380: 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20  <b>OID</b>", or 
b390: 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22  "<b>_ROWID_</b>"
b3a0: 2e 0a 54 68 65 73 65 20 73 70 65 63 69 61 6c 20  ..These special 
b3b0: 69 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20  identifiers all 
b3c0: 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69  describe the.uni
b3d0: 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  que integer key 
b3e0: 28 74 68 65 20 22 72 6f 77 20 6b 65 79 22 29 20  (the "row key") 
b3f0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
b400: 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76  every .row of ev
b410: 65 72 79 20 74 61 62 6c 65 2e 0a 54 68 65 20 73  ery table..The s
b420: 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65  pecial identifie
b430: 72 73 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f  rs only refer to
b440: 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20   the row key if 
b450: 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  the [CREATE TABL
b460: 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  E].statement doe
b470: 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72  s not define a r
b480: 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  eal column with 
b490: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 20  the same name.  
b4a0: 52 6f 77 20 6b 65 79 73 0a 61 63 74 20 6c 69 6b  Row keys.act lik
b4b0: 65 20 72 65 61 64 2d 6f 6e 6c 79 20 63 6f 6c 75  e read-only colu
b4c0: 6d 6e 73 2e 20 20 41 20 72 6f 77 20 6b 65 79 20  mns.  A row key 
b4d0: 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79 77  can be used anyw
b4e0: 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a 63  here a regular.c
b4f0: 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73 65  olumn can be use
b500: 64 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 79  d, except that y
b510: 6f 75 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65  ou cannot change
b520: 20 74 68 65 20 76 61 6c 75 65 0a 6f 66 20 61 20   the value.of a 
b530: 72 6f 77 20 6b 65 79 20 69 6e 20 61 6e 20 5b 55  row key in an [U
b540: 50 44 41 54 45 5d 20 6f 72 20 5b 49 4e 53 45 52  PDATE] or [INSER
b550: 54 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 22 53  T] statement.."S
b560: 45 4c 45 43 54 20 2a 20 2e 2e 2e 22 20 64 6f 65  ELECT * ..." doe
b570: 73 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  s not return the
b580: 20 72 6f 77 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c   row key.</p>..<
b590: 70 3e 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  p>[SELECT] state
b5a0: 6d 65 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72  ments can appear
b5b0: 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20   in expressions 
b5c0: 61 73 20 65 69 74 68 65 72 20 74 68 65 0a 72 69  as either the.ri
b5d0: 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
b5e0: 20 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72 61   of the IN opera
b5f0: 74 6f 72 2c 20 61 73 20 61 20 73 63 61 6c 61 72  tor, as a scalar
b600: 20 71 75 61 6e 74 69 74 79 2c 20 6f 72 0a 61 73   quantity, or.as
b610: 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20   the operand of 
b620: 61 6e 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  an EXISTS operat
b630: 6f 72 2e 0a 41 73 20 61 20 73 63 61 6c 61 72 20  or..As a scalar 
b640: 71 75 61 6e 74 69 74 79 20 6f 72 20 74 68 65 20  quantity or the 
b650: 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
b660: 20 6f 70 65 72 61 74 6f 72 2c 0a 74 68 65 20 53   operator,.the S
b670: 45 4c 45 43 54 20 73 68 6f 75 6c 64 20 68 61 76  ELECT should hav
b680: 65 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20  e only a single 
b690: 63 6f 6c 75 6d 6e 20 69 6e 20 69 74 73 0a 72 65  column in its.re
b6a0: 73 75 6c 74 2e 20 20 43 6f 6d 70 6f 75 6e 64 20  sult.  Compound 
b6b0: 53 45 4c 45 43 54 73 20 28 63 6f 6e 6e 65 63 74  SELECTs (connect
b6c0: 65 64 20 77 69 74 68 20 6b 65 79 77 6f 72 64 73  ed with keywords
b6d0: 20 6c 69 6b 65 20 55 4e 49 4f 4e 20 6f 72 0a 45   like UNION or.E
b6e0: 58 43 45 50 54 29 20 61 72 65 20 61 6c 6c 6f 77  XCEPT) are allow
b6f0: 65 64 2e 0a 57 69 74 68 20 74 68 65 20 45 58 49  ed..With the EXI
b700: 53 54 53 20 6f 70 65 72 61 74 6f 72 2c 20 74 68  STS operator, th
b710: 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
b720: 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 74   result set of t
b730: 68 65 20 5b 53 45 4c 45 43 54 5d 20 61 72 65 0a  he [SELECT] are.
b740: 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
b750: 65 78 70 72 65 73 73 69 6f 6e 20 72 65 74 75 72  expression retur
b760: 6e 73 20 54 52 55 45 20 69 66 20 6f 6e 65 20 6f  ns TRUE if one o
b770: 72 20 6d 6f 72 65 20 72 6f 77 73 20 65 78 69 73  r more rows exis
b780: 74 0a 61 6e 64 20 46 41 4c 53 45 20 69 66 20 74  t.and FALSE if t
b790: 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  he result set is
b7a0: 20 65 6d 70 74 79 2e 0a 49 66 20 6e 6f 20 74 65   empty..If no te
b7b0: 72 6d 73 20 69 6e 20 74 68 65 20 5b 53 45 4c 45  rms in the [SELE
b7c0: 43 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 20 72  CT] expression r
b7d0: 65 66 65 72 20 74 6f 20 76 61 6c 75 65 20 69 6e  efer to value in
b7e0: 20 74 68 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a   the containing.
b7f0: 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20  query, then the 
b800: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
b810: 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 70 72 69  aluated once pri
b820: 6f 72 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 0a  or to any other.
b830: 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64 20 74  processing and t
b840: 68 65 20 72 65 73 75 6c 74 20 69 73 20 72 65 75  he result is reu
b850: 73 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79  sed as necessary
b860: 2e 20 20 49 66 20 74 68 65 20 5b 53 45 4c 45 43  .  If the [SELEC
b870: 54 5d 20 65 78 70 72 65 73 73 69 6f 6e 0a 64 6f  T] expression.do
b880: 65 73 20 63 6f 6e 74 61 69 6e 20 76 61 72 69 61  es contain varia
b890: 62 6c 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 75  bles from the ou
b8a0: 74 65 72 20 71 75 65 72 79 2c 20 74 68 65 6e 20  ter query, then 
b8b0: 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 69 73 20  the [SELECT] is 
b8c0: 72 65 65 76 61 6c 75 61 74 65 64 0a 65 76 65 72  reevaluated.ever
b8d0: 79 20 74 69 6d 65 20 69 74 20 69 73 20 6e 65 65  y time it is nee
b8e0: 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65  ded.</p>..<p>Whe
b8f0: 6e 20 61 20 53 45 4c 45 43 54 20 69 73 20 74 68  n a SELECT is th
b900: 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
b910: 6f 66 20 74 68 65 20 49 4e 20 6f 70 65 72 61 74  of the IN operat
b920: 6f 72 2c 20 74 68 65 20 49 4e 0a 6f 70 65 72 61  or, the IN.opera
b930: 74 6f 72 20 72 65 74 75 72 6e 73 20 54 52 55 45  tor returns TRUE
b940: 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
b950: 66 20 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61  f the left opera
b960: 6e 64 20 69 73 20 61 6e 79 20 6f 66 0a 74 68 65  nd is any of.the
b970: 20 76 61 6c 75 65 73 20 67 65 6e 65 72 61 74 65   values generate
b980: 64 20 62 79 20 74 68 65 20 73 65 6c 65 63 74 2e  d by the select.
b990: 20 20 54 68 65 20 49 4e 20 6f 70 65 72 61 74 6f    The IN operato
b9a0: 72 20 6d 61 79 20 62 65 20 70 72 65 63 65 64 65  r may be precede
b9b0: 64 0a 62 79 20 74 68 65 20 4e 4f 54 20 6b 65 79  d.by the NOT key
b9c0: 77 6f 72 64 20 74 6f 20 69 6e 76 65 72 74 20 74  word to invert t
b9d0: 68 65 20 73 65 6e 73 65 20 6f 66 20 74 68 65 20  he sense of the 
b9e0: 74 65 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68  test.</p>..<p>Wh
b9f0: 65 6e 20 61 20 53 45 4c 45 43 54 20 61 70 70 65  en a SELECT appe
ba00: 61 72 73 20 77 69 74 68 69 6e 20 61 6e 20 65 78  ars within an ex
ba10: 70 72 65 73 73 69 6f 6e 20 62 75 74 20 69 73 20  pression but is 
ba20: 6e 6f 74 20 74 68 65 20 72 69 67 68 74 0a 6f 70  not the right.op
ba30: 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f  erand of an IN o
ba40: 70 65 72 61 74 6f 72 2c 20 74 68 65 6e 20 74 68  perator, then th
ba50: 65 20 66 69 72 73 74 20 72 6f 77 20 6f 66 20 74  e first row of t
ba60: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
ba70: 0a 53 45 4c 45 43 54 20 62 65 63 6f 6d 65 73 20  .SELECT becomes 
ba80: 74 68 65 20 76 61 6c 75 65 20 75 73 65 64 20 69  the value used i
ba90: 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
baa0: 2e 20 20 49 66 20 74 68 65 20 53 45 4c 45 43 54  .  If the SELECT
bab0: 20 79 69 65 6c 64 73 0a 6d 6f 72 65 20 74 68 61   yields.more tha
bac0: 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72 6f 77  n one result row
bad0: 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74 65 72  , all rows after
bae0: 20 74 68 65 20 66 69 72 73 74 20 61 72 65 20 69   the first are i
baf0: 67 6e 6f 72 65 64 2e 20 20 49 66 0a 74 68 65 20  gnored.  If.the 
bb00: 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20 6e 6f  SELECT yields no
bb10: 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 20   rows, then the 
bb20: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 53 45 4c  value of the SEL
bb30: 45 43 54 20 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e  ECT is NULL.</p>
bb40: 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72  ..<p>A CAST expr
bb50: 65 73 73 69 6f 6e 20 63 68 61 6e 67 65 73 20 74  ession changes t
bb60: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
bb70: 68 65 20 3c 65 78 70 72 3e 20 69 6e 74 6f 20 74  he <expr> into t
bb80: 68 65 0a 74 79 70 65 20 73 70 65 63 69 66 69 65  he.type specifie
bb90: 64 20 62 79 20 26 6c 74 3b 74 79 70 65 26 67 74  d by &lt;type&gt
bba0: 3b 2e 20 0a 26 6c 74 3b 74 79 70 65 26 67 74 3b  ;. .&lt;type&gt;
bbb0: 20 63 61 6e 20 62 65 20 61 6e 79 20 6e 6f 6e 2d   can be any non-
bbc0: 65 6d 70 74 79 20 74 79 70 65 20 6e 61 6d 65 20  empty type name 
bbd0: 74 68 61 74 20 69 73 20 76 61 6c 69 64 0a 66 6f  that is valid.fo
bbe0: 72 20 74 68 65 20 74 79 70 65 20 69 6e 20 61 20  r the type in a 
bbf0: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
bc00: 6e 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54  n of a [CREATE T
bc10: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
bc20: 3c 2f 70 3e 0a 0a 3c 70 3e 42 6f 74 68 20 5b 63  </p>..<p>Both [c
bc30: 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 20  orefunc|simple] 
bc40: 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67 67  and [aggfunc|agg
bc50: 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f 6e  regate] function
bc60: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  s are supported.
bc70: 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74 69  .(For presentati
bc80: 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69 6d  on purposes, sim
bc90: 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ple functions ar
bca0: 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69 76  e further subdiv
bcb0: 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65 66  ided into.[coref
bcc0: 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63 74  unc | core funct
bcd0: 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65 66  ions] and [datef
bce0: 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65 20  unc | date-time 
bcf0: 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 41 20 73  functions].).A s
bd00: 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 63  imple function c
bd10: 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 61 6e  an be used in an
bd20: 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 53  y expression.  S
bd30: 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  imple functions 
bd40: 72 65 74 75 72 6e 0a 61 20 72 65 73 75 6c 74 20  return.a result 
bd50: 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 61 73 65  immediately base
bd60: 64 20 6f 6e 20 74 68 65 69 72 20 69 6e 70 75 74  d on their input
bd70: 73 2e 20 20 41 67 67 72 65 67 61 74 65 20 66 75  s.  Aggregate fu
bd80: 6e 63 74 69 6f 6e 73 0a 6d 61 79 20 6f 6e 6c 79  nctions.may only
bd90: 20 62 65 20 75 73 65 64 20 69 6e 20 61 20 53 45   be used in a SE
bda0: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
bdb0: 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
bdc0: 69 6f 6e 73 20 63 6f 6d 70 75 74 65 0a 74 68 65  ions compute.the
bdd0: 69 72 20 72 65 73 75 6c 74 20 61 63 72 6f 73 73  ir result across
bde0: 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68 65   all rows of the
bdf0: 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e   result set.</p>
be00: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
be10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
be20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
be30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
be40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
be50: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
be60: 43 6f 72 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20  Core Functions} 
be70: 63 6f 72 65 66 75 6e 63 20 7b 63 6f 72 65 66 75  corefunc {corefu
be80: 6e 63 7d 0a 70 72 6f 63 20 66 75 6e 63 64 65 66  nc}.proc funcdef
be90: 20 7b 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64   {syntax keyword
bea0: 73 20 64 65 73 63 7d 20 7b 0a 20 20 68 64 5f 70  s desc} {.  hd_p
beb0: 75 74 73 20 7b 3c 74 72 3e 7d 0a 20 20 72 65 67  uts {<tr>}.  reg
bec0: 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d 20 5b  sub -all {\s+} [
bed0: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 79 6e  string trim $syn
bee0: 74 61 78 5d 20 7b 3c 62 72 3e 3c 2f 62 72 3e 7d  tax] {<br></br>}
bef0: 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
bf00: 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b   -all {\(([^*)]+
bf10: 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c  )\)} $syntax {(<
bf20: 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61  i>\1</i>)} synta
bf30: 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
bf40: 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69  {,} $syntax {</i
bf50: 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20  >,<i>} syntax.  
bf60: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e  regsub -all {<i>
bf70: 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e  \.\.\.</i>} $syn
bf80: 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78  tax {...} syntax
bf90: 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 74 64 20  .  hd_puts "<td 
bfa0: 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61  valign=\"top\" a
bfb0: 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c 22 20 77  lign=\"right\" w
bfc0: 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e 24 73 79  idth=\"120\">$sy
bfd0: 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20 68 64 5f  ntax</td>".  hd_
bfe0: 70 75 74 73 20 7b 3c 74 64 20 76 61 6c 69 67 6e  puts {<td valign
bff0: 3d 22 74 6f 70 22 3e 7d 0a 20 20 69 66 20 7b 5b  ="top">}.  if {[
c000: 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64  llength $keyword
c010: 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67  s]==0} {.    reg
c020: 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73  exp {[a-z_]+} $s
c030: 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68  yntax name.    h
c040: 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65  d_fragment $name
c050: 20 24 6e 61 6d 65 0a 20 20 7d 20 65 6c 73 65 20   $name.  } else 
c060: 7b 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 66 72  {.    eval hd_fr
c070: 61 67 6d 65 6e 74 20 24 6b 65 79 77 6f 72 64 73  agment $keywords
c080: 0a 20 20 20 20 68 64 5f 6b 65 79 77 6f 72 64 73  .    hd_keywords
c090: 20 24 6b 65 79 77 6f 72 64 73 0a 20 20 7d 0a 20   $keywords.  }. 
c0a0: 20 68 64 5f 72 65 73 6f 6c 76 65 20 24 64 65 73   hd_resolve $des
c0b0: 63 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 74  c.  hd_puts {</t
c0c0: 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c  d></tr>}.}.</tcl
c0d0: 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65 20 66  >..<p>The core f
c0e0: 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62  unctions shown b
c0f0: 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c 61 62  elow are availab
c100: 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 0a  le by default. .
c110: 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61 74 65  [datefunc | Date
c120: 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63   &amp; Time func
c130: 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b 61 67 67 66  tions] and.[aggf
c140: 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
c150: 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64  functions] are d
c160: 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61  ocumented separa
c170: 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63  tely.  An.applic
c180: 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65  ation may define
c190: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63   additional.func
c1a0: 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e  tions written in
c1b0: 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20   C and added to 
c1c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  the database eng
c1d0: 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73  ine using.the [s
c1e0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
c1f0: 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f  nction()] API.</
c200: 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
c210: 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
c220: 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65  10>.<tcl>.funcde
c230: 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a  f {abs(X)} {} {.
c240: 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 62 73    Return the abs
c250: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
c260: 68 65 20 6e 75 6d 65 72 69 63 0a 20 20 61 72 67  he numeric.  arg
c270: 75 6d 65 6e 74 20 3c 69 3e 58 3c 2f 69 3e 2e 20  ument <i>X</i>. 
c280: 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20   Return NULL if 
c290: 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 4e 55 4c 4c  <i>X</i> is NULL
c2a0: 2e 20 20 52 65 74 75 72 6e 20 30 2e 30 20 69 66  .  Return 0.0 if
c2b0: 0a 20 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e  .  <i>X</i> is n
c2c0: 6f 74 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  ot a numeric val
c2d0: 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ue..}..funcdef {
c2e0: 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c 2e 2e 2e  coalesce(X,Y,...
c2f0: 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
c300: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66   a copy of the f
c310: 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
c320: 67 75 6d 65 6e 74 2e 20 20 49 66 0a 20 20 61 6c  gument.  If.  al
c330: 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  l arguments are 
c340: 4e 55 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c 20 69  NULL then NULL i
c350: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 54 68 65  s returned.  The
c360: 72 65 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65  re must be at le
c370: 61 73 74 20 0a 20 20 32 20 61 72 67 75 6d 65 6e  ast .  2 argumen
c380: 74 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ts..}..funcdef {
c390: 67 6c 6f 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  glob(X,Y)} {} {.
c3a0: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
c3b0: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
c3c0: 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62 3e 59  ment the.  "<b>Y
c3d0: 20 47 4c 4f 42 20 58 3c 2f 62 3e 22 20 73 79 6e   GLOB X</b>" syn
c3e0: 74 61 78 20 6f 66 20 53 51 4c 69 74 65 2e 0a 20  tax of SQLite.. 
c3f0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
c400: 20 61 6e 64 20 59 20 61 72 67 75 6d 65 6e 74 73   and Y arguments
c410: 20 61 72 65 20 72 65 76 65 72 73 65 64 20 69 6e   are reversed in
c420: 20 74 68 65 20 67 6c 6f 62 28 29 20 66 75 6e 63   the glob() func
c430: 74 69 6f 6e 0a 20 20 72 65 6c 61 74 69 76 65 20  tion.  relative 
c440: 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 47 4c  to the infix [GL
c450: 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  OB] operator..  
c460: 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  The [sqlite3_cre
c470: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 0a  ate_function()].
c480: 20 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 0a    interface can.
c490: 20 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65    be used to ove
c4a0: 72 72 69 64 65 20 74 68 69 73 20 66 75 6e 63 74  rride this funct
c4b0: 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20  ion and thereby 
c4c0: 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61  change the opera
c4d0: 74 69 6f 6e 0a 20 20 6f 66 20 74 68 65 20 5b 47  tion.  of the [G
c4e0: 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 2e 3c 2f  LOB] operator.</
c4f0: 74 64 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  td>.}..funcdef {
c500: 69 66 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20  ifnull(X,Y)} {} 
c510: 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 63 6f 70  {.  Return a cop
c520: 79 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e  y of the first n
c530: 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
c540: 2e 20 20 49 66 0a 20 20 62 6f 74 68 20 61 72 67  .  If.  both arg
c550: 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 20  uments are NULL 
c560: 74 68 65 6e 20 4e 55 4c 4c 20 69 73 20 72 65 74  then NULL is ret
c570: 75 72 6e 65 64 2e 20 54 68 69 73 20 62 65 68 61  urned. This beha
c580: 76 65 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  ves the same as 
c590: 0a 20 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 2e  .  [coalesce()].
c5a0: 3c 2f 74 64 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  </td>.}..funcdef
c5b0: 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20   {hex(X)} {} {. 
c5c0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
c5d0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
c5e0: 61 20 42 4c 4f 42 2e 20 20 54 68 65 20 72 65 73  a BLOB.  The res
c5f0: 75 6c 74 0a 20 20 69 73 20 61 20 68 65 78 61 64  ult.  is a hexad
c600: 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
c610: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
c620: 6f 66 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a  of that blob..}.
c630: 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69  .funcdef {last_i
c640: 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b  nsert_rowid()} {
c650: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
c660: 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74 68   [ROWID].  of th
c670: 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65 72  e last row inser
c680: 74 20 66 72 6f 6d 20 74 68 69 73 0a 20 20 63 6f  t from this.  co
c690: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20  nnection to the 
c6a0: 64 61 74 61 62 61 73 65 2e 20 0a 20 20 54 68 69  database. .  Thi
c6b0: 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 76 61  s is the same va
c6c0: 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
c6d0: 65 20 72 65 74 75 72 6e 65 64 0a 20 20 66 72 6f  e returned.  fro
c6e0: 6d 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c  m the [sqlite3_l
c6f0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
c700: 28 29 5d 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ()] API function
c710: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 65  ..}..funcdef {le
c720: 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  ngth(X)} {} {.  
c730: 52 65 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e  Return the strin
c740: 67 20 6c 65 6e 67 74 68 20 6f 66 20 3c 69 3e 58  g length of <i>X
c750: 3c 2f 69 3e 20 69 6e 20 63 68 61 72 61 63 74 65  </i> in characte
c760: 72 73 2e 0a 20 20 49 66 20 53 51 4c 69 74 65 20  rs..  If SQLite 
c770: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  is configured to
c780: 20 73 75 70 70 6f 72 74 20 55 54 46 2d 38 2c 20   support UTF-8, 
c790: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
c7a0: 6f 66 20 55 54 46 2d 38 0a 20 20 63 68 61 72 61  of UTF-8.  chara
c7b0: 63 74 65 72 73 20 69 73 20 72 65 74 75 72 6e 65  cters is returne
c7c0: 64 2c 20 6e 6f 74 20 74 68 65 20 6e 75 6d 62 65  d, not the numbe
c7d0: 72 20 6f 66 20 62 79 74 65 73 2e 0a 7d 0a 0a 66  r of bytes..}..f
c7e0: 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59  uncdef {like(X,Y
c7f0: 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b  ) like(X,Y,Z)} {
c800: 7d 20 7b 0a 20 20 54 68 69 73 20 66 75 6e 63 74  } {.  This funct
c810: 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
c820: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 22 3c 62  mplement the "<b
c830: 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45  >Y LIKE X &#91;E
c840: 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e  SCAPE Z&#93;</b>
c850: 22 0a 20 20 73 79 6e 74 61 78 20 6f 66 20 53 51  ".  syntax of SQ
c860: 4c 2e 20 49 66 20 74 68 65 20 6f 70 74 69 6f 6e  L. If the option
c870: 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  al ESCAPE clause
c880: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65   is present, the
c890: 6e 20 74 68 65 0a 20 20 75 73 65 72 2d 66 75 6e  n the.  user-fun
c8a0: 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65 64  ction is invoked
c8b0: 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75   with three argu
c8c0: 6d 65 6e 74 73 2e 20 4f 74 68 65 72 77 69 73 65  ments. Otherwise
c8d0: 2c 20 69 74 20 69 73 0a 20 20 69 6e 76 6f 6b 65  , it is.  invoke
c8e0: 64 20 77 69 74 68 20 74 77 6f 20 61 72 67 75 6d  d with two argum
c8f0: 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20  ents only. Note 
c900: 74 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59  that the X and Y
c910: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0a   parameters are.
c920: 20 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68    reversed in th
c930: 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
c940: 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68  n relative to th
c950: 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45 5d 20 6f  e infix [LIKE] o
c960: 70 65 72 61 74 6f 72 2e 0a 20 20 54 68 65 20 5b  perator..  The [
c970: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
c980: 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72  unction()] inter
c990: 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65 64  face can be used
c9a0: 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69   to override thi
c9b0: 73 0a 20 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  s.  function and
c9c0: 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
c9d0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
c9e0: 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70   the.  [LIKE] op
c9f0: 65 72 61 74 6f 72 2e 20 57 68 65 6e 20 64 6f 69  erator. When doi
ca00: 6e 67 20 74 68 69 73 2c 20 69 74 20 6d 61 79 20  ng this, it may 
ca10: 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74  be important.  t
ca20: 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68 20  o override both 
ca30: 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72 65  the two and thre
ca40: 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69  e argument versi
ca50: 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65 28  ons of the like(
ca60: 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f  ) .  function. O
ca70: 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65 72  therwise, differ
ca80: 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65 20  ent code may be 
ca90: 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d  called to implem
caa0: 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d  ent the.  [LIKE]
cab0: 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e 64   operator depend
cac0: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
cad0: 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45 20  r not an ESCAPE 
cae0: 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73 70  clause was .  sp
caf0: 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75 6e 63  ecified..}..func
cb00: 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73  def {load_extens
cb10: 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65  ion(X) load_exte
cb20: 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 6c 6f 61  nsion(X,Y)} {loa
cb30: 64 5f 65 78 74 65 6e 73 69 6f 6e 7d 20 7b 0a 20  d_extension} {. 
cb40: 20 4c 6f 61 64 20 53 51 4c 69 74 65 20 65 78 74   Load SQLite ext
cb50: 65 6e 73 69 6f 6e 73 20 6f 75 74 20 6f 66 20 74  ensions out of t
cb60: 68 65 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  he shared librar
cb70: 79 0a 20 20 66 69 6c 65 20 6e 61 6d 65 64 20 3c  y.  file named <
cb80: 69 3e 58 3c 2f 69 3e 20 75 73 69 6e 67 20 74 68  i>X</i> using th
cb90: 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 3c 69  e entry point <i
cba0: 3e 59 3c 2f 69 3e 2e 20 20 54 68 65 20 72 65 73  >Y</i>.  The res
cbb0: 75 6c 74 0a 20 20 69 73 20 61 20 4e 55 4c 4c 2e  ult.  is a NULL.
cbc0: 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73    If <i>Y</i> is
cbd0: 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
cbe0: 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
cbf0: 70 6f 69 6e 74 0a 20 20 6f 66 20 3c 62 3e 73 71  point.  of <b>sq
cc00: 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e 5f  lite3_extension_
cc10: 69 6e 69 74 3c 2f 62 3e 20 69 73 20 75 73 65 64  init</b> is used
cc20: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
cc30: 20 72 61 69 73 65 73 0a 20 20 61 6e 20 65 78 63   raises.  an exc
cc40: 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65 78  eption if the ex
cc50: 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74 6f  tension fails to
cc60: 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74 69 61 6c   load or initial
cc70: 69 7a 65 20 63 6f 72 72 65 63 74 6c 79 2e 0a 0a  ize correctly...
cc80: 20 20 3c 70 3e 54 68 69 73 20 66 75 6e 63 74 69    <p>This functi
cc90: 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  on will fail if 
cca0: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 74  the extension at
ccb0: 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66 79  tempts to modify
ccc0: 0a 20 20 6f 72 20 64 65 6c 65 74 65 20 61 20 53  .  or delete a S
ccd0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63  QL function or c
cce0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
ccf0: 65 2e 20 20 54 68 65 0a 20 20 65 78 74 65 6e 73  e.  The.  extens
cd00: 69 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20  ion can add new 
cd10: 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
cd20: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
cd30: 2c 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d  , but cannot.  m
cd40: 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20  odify or delete 
cd50: 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f  existing functio
cd60: 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
cd70: 73 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73  sequences becaus
cd80: 65 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69  e.  those functi
cd90: 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61  ons and/or colla
cda0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d  ting sequences m
cdb0: 69 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73  ight be used els
cdc0: 65 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20  ewhere.  in the 
cdd0: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
cde0: 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  g SQL statement.
cdf0: 20 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74    To load an ext
ce00: 65 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68  ension that.  ch
ce10: 61 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73  anges or deletes
ce20: 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
ce30: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ce40: 73 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71  s, use the.  [sq
ce50: 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
ce60: 73 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61  sion()] C-langua
ce70: 67 65 20 41 50 49 2e 3c 2f 70 3e 0a 7d 0a 0a 66  ge API.</p>.}..f
ce80: 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29  uncdef {lower(X)
ce90: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
cea0: 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69 6e 67  a copy of string
ceb0: 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 20 61   <i>X</i> with a
cec0: 6c 6c 20 41 53 43 49 49 20 63 68 61 72 61 63 74  ll ASCII charact
ced0: 65 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20  ers.  converted 
cee0: 74 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20  to lower case.  
cef0: 54 68 65 20 43 20 6c 69 62 72 61 72 79 20 3c 62  The C library <b
cf00: 3e 74 6f 6c 6f 77 65 72 28 29 3c 2f 62 3e 20 72  >tolower()</b> r
cf10: 6f 75 74 69 6e 65 20 69 73 20 75 73 65 64 0a 20  outine is used. 
cf20: 20 66 6f 72 20 74 68 65 20 63 6f 6e 76 65 72 73   for the convers
cf30: 69 6f 6e 2c 20 77 68 69 63 68 20 6d 65 61 6e 73  ion, which means
cf40: 20 74 68 61 74 20 74 68 69 73 20 66 75 6e 63 74   that this funct
cf50: 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 0a 20 20  ion might not.  
cf60: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
cf70: 6e 20 6e 6f 6e 2d 41 53 43 49 49 20 55 54 46 2d  n non-ASCII UTF-
cf80: 38 20 63 68 61 72 61 63 74 65 72 73 2e 0a 7d 0a  8 characters..}.
cf90: 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28  .funcdef {ltrim(
cfa0: 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b  X) ltrim(X,Y)} {
cfb0: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 73  } {.  Return a s
cfc0: 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
cfd0: 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
cfe0: 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
cff0: 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
d000: 20 3c 69 3e 59 3c 2f 69 3e 20 66 72 6f 6d 20 74   <i>Y</i> from t
d010: 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
d020: 3c 69 3e 58 3c 2f 69 3e 2e 0a 20 20 49 66 20 74  <i>X</i>..  If t
d030: 68 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75  he <i>Y</i> argu
d040: 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
d050: 20 73 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f   spaces are remo
d060: 76 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ved..}..funcdef 
d070: 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {max(X,Y,...)} {
d080: 6d 61 78 43 6f 72 65 46 75 6e 63 20 6d 61 78 7d  maxCoreFunc max}
d090: 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20   {.  Return the 
d0a0: 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68  argument with th
d0b0: 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2e  e maximum value.
d0c0: 20 20 41 72 67 75 6d 65 6e 74 73 0a 20 20 6d 61    Arguments.  ma
d0d0: 79 20 62 65 20 73 74 72 69 6e 67 73 20 69 6e 20  y be strings in 
d0e0: 61 64 64 69 74 69 6f 6e 20 74 6f 20 6e 75 6d 62  addition to numb
d0f0: 65 72 73 2e 20 20 54 68 65 20 6d 61 78 69 6d 75  ers.  The maximu
d100: 6d 20 76 61 6c 75 65 20 69 73 20 64 65 74 65 72  m value is deter
d110: 6d 69 6e 65 64 0a 20 20 62 79 20 74 68 65 20 75  mined.  by the u
d120: 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e  sual sort order.
d130: 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
d140: 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  ax()</b> is a si
d150: 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
d160: 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72  en.  it has 2 or
d170: 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20   more arguments 
d180: 62 75 74 20 63 6f 6e 76 65 72 74 73 20 74 6f 20  but converts to 
d190: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
d1a0: 63 74 69 6f 6e 20 69 66 20 67 69 76 65 6e 0a 20  ction if given. 
d1b0: 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61   only a single a
d1c0: 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63  rgument..}..func
d1d0: 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e  def {min(X,Y,...
d1e0: 29 7d 20 7b 6d 69 6e 43 6f 72 65 46 75 6e 63 20  )} {minCoreFunc 
d1f0: 6d 69 6e 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  min} {.  Return 
d200: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74  the argument wit
d210: 68 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61  h the minimum va
d220: 6c 75 65 2e 20 20 41 72 67 75 6d 65 6e 74 73 0a  lue.  Arguments.
d230: 20 20 6d 61 79 20 62 65 20 73 74 72 69 6e 67 73    may be strings
d240: 20 69 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20   in addition to 
d250: 6e 75 6d 62 65 72 73 2e 20 20 54 68 65 20 6d 69  numbers.  The mi
d260: 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 64  nimum value is d
d270: 65 74 65 72 6d 69 6e 65 64 0a 20 20 62 79 20 74  etermined.  by t
d280: 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72  he usual sort or
d290: 64 65 72 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  der.  Note that 
d2a0: 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20  <b>min()</b> is 
d2b0: 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f  a simple functio
d2c0: 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20  n when.  it has 
d2d0: 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65  2 or more argume
d2e0: 6e 74 73 20 62 75 74 20 63 6f 6e 76 65 72 74 73  nts but converts
d2f0: 20 74 6f 20 61 6e 20 61 67 67 72 65 67 61 74 65   to an aggregate
d300: 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 67 69 76   function if giv
d310: 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67  en.  only a sing
d320: 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a  le argument..}..
d330: 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28  funcdef {nullif(
d340: 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74  X,Y)} {} {.  Ret
d350: 75 72 6e 20 74 68 65 20 66 69 72 73 74 20 61 72  urn the first ar
d360: 67 75 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72  gument if the ar
d370: 67 75 6d 65 6e 74 73 20 61 72 65 20 64 69 66 66  guments are diff
d380: 65 72 65 6e 74 2c 20 0a 20 20 6f 74 68 65 72 77  erent, .  otherw
d390: 69 73 65 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e  ise return NULL.
d3a0: 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f  .}..funcdef {quo
d3b0: 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 54 68  te(X)} {} {.  Th
d3c0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
d3d0: 6e 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  ns a string whic
d3e0: 68 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  h is the value o
d3f0: 66 0a 20 20 69 74 73 20 61 72 67 75 6d 65 6e 74  f.  its argument
d400: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e   suitable for in
d410: 63 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 6f  clusion into ano
d420: 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65  ther SQL stateme
d430: 6e 74 2e 0a 20 20 53 74 72 69 6e 67 73 20 61 72  nt..  Strings ar
d440: 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20  e surrounded by 
d450: 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69  single-quotes wi
d460: 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e  th escapes on in
d470: 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20  terior quotes.  
d480: 61 73 20 6e 65 65 64 65 64 2e 20 20 42 4c 4f 42  as needed.  BLOB
d490: 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73  s are encoded as
d4a0: 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69 74   hexadecimal lit
d4b0: 65 72 61 6c 73 2e 0a 20 20 54 68 65 20 69 6d 70  erals..  The imp
d4c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 5b  lementation of [
d4d0: 56 41 43 55 55 4d 5d 20 75 73 65 73 20 74 68 69  VACUUM] uses thi
d4e0: 73 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 20  s function. The 
d4f0: 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20 61 6c  function.  is al
d500: 73 6f 20 75 73 65 66 75 6c 20 77 68 65 6e 20 77  so useful when w
d510: 72 69 74 69 6e 67 20 74 72 69 67 67 65 72 73 20  riting triggers 
d520: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 75 6e 64  to implement und
d530: 6f 2f 72 65 64 6f 20 66 75 6e 63 74 69 6f 6e 61  o/redo functiona
d540: 6c 69 74 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lity..}..funcdef
d550: 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b   {random()} {} {
d560: 0a 20 20 52 65 74 75 72 6e 20 61 20 70 73 65 75  .  Return a pseu
d570: 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65  do-random intege
d580: 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32 32  r.  between -922
d590: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
d5a0: 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33 36   and +9223372036
d5b0: 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75  854775807..}..fu
d5c0: 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f  ncdef {randomblo
d5d0: 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74  b(N)} {} {.  Ret
d5e0: 75 72 6e 20 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 2d  urn an <i>N</i>-
d5f0: 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69  byte blob contai
d600: 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64  ning pseudo-rand
d610: 6f 6d 20 62 79 74 65 73 2e 0a 20 20 3c 69 3e 4e  om bytes..  <i>N
d620: 3c 2f 69 3e 20 73 68 6f 75 6c 64 20 62 65 20 61  </i> should be a
d630: 20 70 6f 73 74 69 76 65 20 69 6e 74 65 67 65 72   postive integer
d640: 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61  ...  <p>Hint:  a
d650: 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
d660: 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c  generate globall
d670: 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66  y unique identif
d680: 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69  iers.  using thi
d690: 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74  s function toget
d6a0: 68 65 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d  her with [hex()]
d6b0: 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72   and/or.  [lower
d6c0: 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f  ()] like this:</
d6d0: 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74  p>..  <blockquot
d6e0: 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62  e>.  hex(randomb
d6f0: 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72  lob(16))<br></br
d700: 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61  >.  lower(hex(ra
d710: 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20  ndomblob(16))). 
d720: 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d   </blockquote>.}
d730: 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61  ..funcdef {repla
d740: 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a  ce(X,Y,Z)} {} {.
d750: 20 20 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e    Return a strin
d760: 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73  g formed by subs
d770: 74 69 74 75 74 69 6e 67 20 73 74 72 69 6e 67 20  tituting string 
d780: 3c 69 3e 5a 3c 2f 69 3e 20 66 6f 72 0a 20 20 65  <i>Z</i> for.  e
d790: 76 65 72 79 20 6f 63 63 75 72 72 61 6e 63 65 20  very occurrance 
d7a0: 6f 66 20 73 74 72 69 6e 67 20 3c 69 3e 59 3c 2f  of string <i>Y</
d7b0: 69 3e 20 69 6e 20 73 74 72 69 6e 67 20 3c 69 3e  i> in string <i>
d7c0: 58 3c 2f 69 3e 2e 20 20 54 68 65 20 5b 42 49 4e  X</i>.  The [BIN
d7d0: 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67  ARY].  collating
d7e0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65   sequence is use
d7f0: 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  d for comparison
d800: 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  s..}..funcdef {r
d810: 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c  ound(X) round(X,
d820: 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 6f 75 6e 64  Y)} {} {.  Round
d830: 20 6f 66 66 20 74 68 65 20 6e 75 6d 62 65 72 20   off the number 
d840: 3c 69 3e 58 3c 2f 69 3e 20 74 6f 20 3c 69 3e 59  <i>X</i> to <i>Y
d850: 3c 2f 69 3e 20 64 69 67 69 74 73 20 74 6f 20 74  </i> digits to t
d860: 68 65 0a 20 20 72 69 67 68 74 20 6f 66 20 74 68  he.  right of th
d870: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e  e decimal point.
d880: 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f 69    If the <i>Y</i
d890: 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  > argument is om
d8a0: 69 74 74 65 64 2c 20 30 20 69 73 20 0a 20 20 61  itted, 0 is .  a
d8b0: 73 73 75 6d 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  ssumed..}..funcd
d8c0: 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72  ef {rtrim(X) rtr
d8d0: 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
d8e0: 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20  Return a string 
d8f0: 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
d900: 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
d910: 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
d920: 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c   appear in <i>Y<
d930: 2f 69 3e 20 66 72 6f 6d 20 74 68 65 20 72 69 67  /i> from the rig
d940: 68 74 20 73 69 64 65 20 6f 66 20 3c 69 3e 58 3c  ht side of <i>X<
d950: 2f 69 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c 69  /i>..  If the <i
d960: 3e 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20  >Y</i> argument 
d970: 69 73 20 6f 6d 69 74 74 65 64 2c 20 73 70 61 63  is omitted, spac
d980: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a  es are removed..
d990: 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e  }..funcdef {soun
d9a0: 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 43  dex(X)} {} {.  C
d9b0: 6f 6d 70 75 74 65 20 74 68 65 20 73 6f 75 6e 64  ompute the sound
d9c0: 65 78 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  ex encoding of t
d9d0: 68 65 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f  he string <i>X</
d9e0: 69 3e 2e 0a 20 20 54 68 65 20 73 74 72 69 6e 67  i>..  The string
d9f0: 20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72   "?000" is retur
da00: 6e 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d  ned if the argum
da10: 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 54  ent is NULL..  T
da20: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
da30: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c  omitted from SQL
da40: 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a  ite by default..
da50: 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61    It is only ava
da60: 69 6c 61 62 6c 65 20 74 68 65 20 2d 44 53 51 4c  ilable the -DSQL
da70: 49 54 45 5f 53 4f 55 4e 44 45 58 3d 31 20 63 6f  ITE_SOUNDEX=1 co
da80: 6d 70 69 6c 65 72 20 6f 70 74 69 6f 6e 0a 20 20  mpiler option.  
da90: 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c  is used when SQL
daa0: 69 74 65 20 69 73 20 62 75 69 6c 74 2e 0a 7d 0a  ite is built..}.
dab0: 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65  .funcdef {sqlite
dac0: 5f 76 65 72 73 69 6f 6e 28 58 29 7d 20 7b 73 71  _version(X)} {sq
dad0: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 7d 20 7b 0a  lite_version} {.
dae0: 20 20 52 65 74 75 72 6e 20 74 68 65 20 76 65 72    Return the ver
daf0: 73 69 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20  sion string for 
db00: 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
db10: 72 79 0a 20 20 74 68 61 74 20 69 73 20 72 75 6e  ry.  that is run
db20: 6e 69 6e 67 2e 20 20 45 78 61 6d 70 6c 65 3a 20  ning.  Example: 
db30: 20 22 33 2e 35 2e 39 22 0a 7d 0a 0a 66 75 6e 63   "3.5.9".}..func
db40: 64 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c  def {substr(X,Y,
db50: 5a 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20  Z) substr(X,Y)} 
db60: 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20  {} {.  Return a 
db70: 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70  substring of inp
db80: 75 74 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f  ut string <i>X</
db90: 69 3e 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20  i> that begins. 
dba0: 20 77 69 74 68 20 74 68 65 20 3c 69 3e 59 3c 2f   with the <i>Y</
dbb0: 69 3e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20  i>-th character 
dbc0: 61 6e 64 20 77 68 69 63 68 20 69 73 20 3c 69 3e  and which is <i>
dbd0: 5a 3c 2f 69 3e 20 63 68 61 72 61 63 74 65 72 73  Z</i> characters
dbe0: 20 6c 6f 6e 67 2e 0a 20 20 49 66 20 3c 69 3e 5a   long..  If <i>Z
dbf0: 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 20  </i> is omitted 
dc00: 74 68 65 6e 20 61 6c 6c 20 63 68 61 72 61 63 74  then all charact
dc10: 65 72 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  er through the e
dc20: 6e 64 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  nd of the string
dc30: 0a 20 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e  .  are returned.
dc40: 0a 20 20 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74  .  The left-most
dc50: 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 3c 69   character of <i
dc60: 3e 58 3c 2f 69 3e 20 69 73 20 6e 75 6d 62 65 72  >X</i> is number
dc70: 20 31 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e   1.  If <i>Y</i>
dc80: 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74   is negative.  t
dc90: 68 65 20 74 68 65 20 66 69 72 73 74 20 63 68 61  he the first cha
dca0: 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75  racter of the su
dcb0: 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64  bstring is found
dcc0: 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f   by counting fro
dcd0: 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61  m the.  right ra
dce0: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65  ther than the le
dcf0: 66 74 2e 20 20 49 66 20 3c 69 3e 58 3c 2f 69 3e  ft.  If <i>X</i>
dd00: 20 69 73 20 73 74 72 69 6e 67 0a 20 20 74 68 65   is string.  the
dd10: 6e 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 64  n characters ind
dd20: 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 61 63  ices refer to ac
dd30: 74 75 61 6c 20 55 54 46 2d 38 20 63 68 61 72 61  tual UTF-8 chara
dd40: 63 74 65 72 73 2e 20 20 49 66 0a 20 20 3c 69 3e  cters.  If.  <i>
dd50: 58 3c 2f 69 3e 20 69 73 20 61 20 42 4c 4f 42 20  X</i> is a BLOB 
dd60: 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73  then the indices
dd70: 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e   refer to bytes.
dd80: 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69  .}..funcdef {tri
dd90: 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20  m(X) trim(X,Y)} 
dda0: 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20  {} {.  Return a 
ddb0: 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
ddc0: 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e   removing any an
ddd0: 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65  d all.  characte
dde0: 72 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69  rs that appear i
ddf0: 6e 20 3c 69 3e 59 3c 2f 69 3e 20 66 72 6f 6d 20  n <i>Y</i> from 
de00: 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 3c 69 3e  both ends of <i>
de10: 58 3c 2f 69 3e 2e 0a 20 20 49 66 20 74 68 65 20  X</i>..  If the 
de20: 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e  <i>Y</i> argumen
de30: 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 73 70  t is omitted, sp
de40: 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  aces are removed
de50: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79  ..}..funcdef {ty
de60: 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  peof(X)} {} {.  
de70: 52 65 74 75 72 6e 20 74 68 65 20 74 79 70 65 20  Return the type 
de80: 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
de90: 6e 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 54 68 65  n <i>X</i>.  The
dea0: 20 6f 6e 6c 79 20 0a 20 20 72 65 74 75 72 6e 20   only .  return 
deb0: 76 61 6c 75 65 73 20 61 72 65 20 22 6e 75 6c 6c  values are "null
dec0: 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72  ", "integer", "r
ded0: 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 61 6e  eal", "text", an
dee0: 64 20 22 62 6c 6f 62 22 2e 0a 20 20 53 51 4c 69  d "blob"..  SQLi
def0: 74 65 27 73 20 74 79 70 65 20 68 61 6e 64 6c 69  te's type handli
df00: 6e 67 20 69 73 20 0a 20 20 65 78 70 6c 61 69 6e  ng is .  explain
df10: 65 64 20 69 6e 20 3c 61 20 68 72 65 66 3d 22 64  ed in <a href="d
df20: 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22 3e 44  atatype3.html">D
df30: 61 74 61 74 79 70 65 73 20 69 6e 20 53 51 4c 69  atatypes in SQLi
df40: 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f 61 3e  te Version 3</a>
df50: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70  ..}..funcdef {up
df60: 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52  per(X)} {} {.  R
df70: 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20  eturn a copy of 
df80: 69 6e 70 75 74 20 73 74 72 69 6e 67 20 3c 69 3e  input string <i>
df90: 58 3c 2f 69 3e 20 63 6f 6e 76 65 72 74 65 64 20  X</i> converted 
dfa0: 74 6f 20 61 6c 6c 0a 20 20 75 70 70 65 72 2d 63  to all.  upper-c
dfb0: 61 73 65 20 6c 65 74 74 65 72 73 2e 20 20 54 68  ase letters.  Th
dfc0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
dfd0: 20 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f   of this functio
dfe0: 6e 20 75 73 65 73 20 74 68 65 20 43 20 6c 69 62  n uses the C lib
dff0: 72 61 72 79 0a 20 20 72 6f 75 74 69 6e 65 20 3c  rary.  routine <
e000: 62 3e 74 6f 75 70 70 65 72 28 29 3c 2f 62 3e 20  b>toupper()</b> 
e010: 77 68 69 63 68 20 6d 65 61 6e 73 20 69 74 20 6d  which means it m
e020: 61 79 20 6e 6f 74 20 77 6f 72 6b 20 63 6f 72 72  ay not work corr
e030: 65 63 74 6c 79 20 6f 6e 20 0a 20 20 6e 6f 6e 2d  ectly on .  non-
e040: 41 53 43 49 49 20 55 54 46 2d 38 20 73 74 72 69  ASCII UTF-8 stri
e050: 6e 67 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ngs..}..funcdef 
e060: 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
e070: 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 42 4c   {.  Return a BL
e080: 4f 42 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  OB consisting of
e090: 20 4e 20 62 79 74 65 73 20 6f 66 20 30 78 30 30   N bytes of 0x00
e0a0: 2e 20 20 53 51 4c 69 74 65 0a 20 20 6d 61 6e 61  .  SQLite.  mana
e0b0: 67 65 73 20 74 68 65 73 65 20 7a 65 72 6f 62 6c  ges these zerobl
e0c0: 6f 62 73 20 76 65 72 79 20 65 66 66 69 63 69 65  obs very efficie
e0d0: 6e 74 6c 79 2e 20 20 5a 65 72 6f 62 6c 6f 62 73  ntly.  Zeroblobs
e0e0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 0a   can be used to.
e0f0: 20 20 72 65 73 65 72 76 65 20 73 70 61 63 65 20    reserve space 
e100: 66 6f 72 20 61 20 42 4c 4f 42 20 74 68 61 74 20  for a BLOB that 
e110: 69 73 20 6c 61 74 65 72 20 77 72 69 74 74 65 6e  is later written
e120: 20 75 73 69 6e 67 20 0a 20 20 5b 73 71 6c 69 74   using .  [sqlit
e130: 65 33 5f 62 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c  e3_blob_open() |
e140: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f   incremental BLO
e150: 42 20 49 2f 4f 5d 2e 0a 7d 0a 3c 2f 74 63 6c 3e  B I/O]..}.</tcl>
e160: 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e  .</table>..<tcl>
e170: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
e180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e1c0: 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20 41 6e  Section {Date An
e1d0: 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f 6e 73  d Time Functions
e1e0: 7d 20 64 61 74 65 66 75 6e 63 20 7b 64 61 74 65  } datefunc {date
e1f0: 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  func}.</tcl>..<p
e200: 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  >.SQLite support
e210: 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20  s five date and 
e220: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  time functions a
e230: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a  s follows:.</p>.
e240: 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c  .<p>.<ol>.<li> <
e250: 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69  b>date(</b><i>ti
e260: 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
e270: 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
e280: 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f  .</i><b>)</b> </
e290: 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 74 69 6d 65  li>.<li> <b>time
e2a0: 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
e2b0: 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
e2c0: 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
e2d0: 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c  b>)</b> </li>.<l
e2e0: 69 3e 20 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c  i> <b>datetime(<
e2f0: 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
e300: 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
e310: 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
e320: 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  )</b> </li>.<li>
e330: 20 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f   <b>julianday(</
e340: 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c  b><i>timestring,
e350: 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66   modifier, modif
e360: 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29  ier, ...</i><b>)
e370: 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  </b> </li>.<li> 
e380: 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e  <b>strftime(</b>
e390: 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73  <i>format, times
e3a0: 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
e3b0: 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
e3c0: 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e  i><b>)</b> </li>
e3d0: 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 41 6c 6c 20  .</ol>..<p>.All 
e3e0: 66 69 76 65 20 66 75 6e 63 74 69 6f 6e 73 20 74  five functions t
e3f0: 61 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e  ake a time strin
e400: 67 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  g as an argument
e410: 2e 20 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e  . The time strin
e420: 67 0a 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  g.is followed by
e430: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f   zero or more mo
e440: 64 69 66 69 65 72 73 2e 20 0a 54 68 65 20 73 74  difiers. .The st
e450: 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  rftime() functio
e460: 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66  n also takes a f
e470: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20  ormat string as 
e480: 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
e490: 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  nt..</p>..<p>.Th
e4a0: 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f  e date() functio
e4b0: 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  n returns the da
e4c0: 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61  te in this forma
e4d0: 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a  t: YYYY-MM-DD. .
e4e0: 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74  The time() funct
e4f0: 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
e500: 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53  time as HH:MM:SS
e510: 2e 20 0a 54 68 65 20 64 61 74 65 74 69 6d 65 28  . .The datetime(
e520: 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
e530: 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48  ns "YYYY-MM-DD H
e540: 48 3a 4d 4d 3a 53 53 22 2e 20 0a 54 68 65 20 6a  H:MM:SS". .The j
e550: 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e 63 74  ulianday() funct
e560: 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
e570: 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f  .<a href="http:/
e580: 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
e590: 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61  g/wiki/Julian_da
e5a0: 79 22 3e 6a 75 6c 69 61 6e 20 64 61 79 3c 2f 61  y">julian day</a
e5b0: 3e 20 2d 20 0a 6e 75 6d 62 65 72 20 6f 66 20 64  > - .number of d
e5c0: 61 79 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69  ays since noon i
e5d0: 6e 20 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e  n Greenwich on N
e5e0: 6f 76 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34  ovember 24, 4714
e5f0: 20 42 2e 43 2e 20 0a 28 3c 61 20 68 72 65 66 3d   B.C. .(<a href=
e600: 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  "http://en.wikip
e610: 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72  edia.org/wiki/Pr
e620: 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61  oleptic_Gregoria
e630: 6e 5f 63 61 6c 65 6e 64 61 72 22 3e 0a 50 72 6f  n_calendar">.Pro
e640: 6c 65 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e  leptic Gregorian
e650: 20 63 61 6c 65 6e 64 61 72 3c 2f 61 3e 29 2e 20   calendar</a>). 
e660: 0a 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20  .The strftime() 
e670: 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
e680: 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61 74 74  the date formatt
e690: 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ed according to 
e6a0: 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69  .the format stri
e6b0: 6e 67 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ng specified as 
e6c0: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
e6d0: 6e 74 2e 0a 54 68 65 20 66 6f 72 6d 61 74 20 73  nt..The format s
e6e0: 74 72 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74  tring supports t
e6f0: 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73  he most common s
e700: 75 62 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75  ubstitutions fou
e710: 6e 64 20 69 6e 20 74 68 65 20 0a 3c 61 20 68 72  nd in the .<a hr
e720: 65 66 3d 22 68 74 74 70 3a 2f 2f 6f 70 65 6e 67  ef="http://openg
e730: 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70  roup.org/onlinep
e740: 75 62 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73  ubs/007908799/xs
e750: 68 2f 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 22  h/strftime.html"
e760: 3e 0a 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e  >.strftime() fun
e770: 63 74 69 6f 6e 3c 2f 61 3e 20 66 72 6f 6d 20 0a  ction</a> from .
e780: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
e790: 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20  ibrary plus two 
e7a0: 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e  new substitution
e7b0: 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 54 68  s, %f and %J..Th
e7c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
e7d0: 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74 20 6f   complete list o
e7e0: 66 20 76 61 6c 69 64 20 73 74 72 66 74 69 6d 65  f valid strftime
e7f0: 28 29 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73  () substitutions
e800: 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
e810: 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ote>.<table bord
e820: 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64 69  er="0" cellpaddi
e830: 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63 69  ng="0" cellspaci
e840: 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e  ng="0">.<tr><td>
e850: 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22 3e 3c  <td width="10"><
e860: 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74  td></tr>..<tr><t
e870: 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %d <td><td> d
e880: 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30 30 0a  ay of month: 00.
e890: 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74 64 3e  <tr><td> %f <td>
e8a0: 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61 6c 20  <td> fractional 
e8b0: 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53 53 0a  seconds: SS.SSS.
e8c0: 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74 64 3e  <tr><td> %H <td>
e8d0: 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d 32 34  <td> hour: 00-24
e8e0: 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20 3c 74   .<tr><td> %j <t
e8f0: 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 79 65  d><td> day of ye
e900: 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74 72 3e  ar: 001-366.<tr>
e910: 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74 64 3e  <td> %J <td><td>
e920: 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
e930: 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d 20 3c  er.<tr><td> %m <
e940: 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a 20 30  td><td> month: 0
e950: 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d  1-12.<tr><td> %M
e960: 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75 74 65   <td><td> minute
e970: 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e  : 00-59.<tr><td>
e980: 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %s <td><td> sec
e990: 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2d  onds since 1970-
e9a0: 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e 20 25  01-01.<tr><td> %
e9b0: 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e  S <td><td> secon
e9c0: 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  ds: 00-59.<tr><t
e9d0: 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %w <td><td> d
e9e0: 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36 20 77  ay of week 0-6 w
e9f0: 69 74 68 20 73 75 6e 64 61 79 3d 3d 30 0a 3c 74  ith sunday==0.<t
ea00: 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e 3c 74  r><td> %W <td><t
ea10: 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61 72 3a  d> week of year:
ea20: 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64 3e 20   00-53.<tr><td> 
ea30: 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65 61 72  %Y <td><td> year
ea40: 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74 72 3e  : 0000-9999.<tr>
ea50: 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74 64 3e  <td> %% <td><td>
ea60: 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c   %.</table>.</bl
ea70: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 4e  ockquote>..<p>.N
ea80: 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f  otice that all o
ea90: 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69  ther date and ti
eaa0: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e  me functions can
eab0: 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e   be expressed.in
eac0: 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69   terms of strfti
ead0: 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  me():.</p>..<blo
eae0: 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
eaf0: 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
eb00: 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
eb10: 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
eb20: 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c  <td><b>Function<
eb30: 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30  /b><td width="30
eb40: 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c  "><td><b>Equival
eb50: 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f  ent strftime()</
eb60: 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  b>.<tr><td>   da
eb70: 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64  te(...)      <td
eb80: 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
eb90: 22 25 59 2d 25 6d 2d 25 64 22 2c 20 2e 2e 2e 29  "%Y-%m-%d", ...)
eba0: 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65  .<tr><td>   time
ebb0: 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c  (...)      <td><
ebc0: 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 22 25  td>  strftime("%
ebd0: 48 3a 25 4d 3a 25 53 22 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S", ...).<
ebe0: 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69  tr><td>   dateti
ebf0: 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64  me(...)  <td><td
ec00: 3e 20 20 73 74 72 66 74 69 6d 65 28 22 25 59 2d  >  strftime("%Y-
ec10: 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 22 2c  %m-%d %H:%M:%S",
ec20: 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
ec30: 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20   julianday(...) 
ec40: 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
ec50: 6d 65 28 22 25 4a 22 2c 20 2e 2e 2e 29 0a 3c 2f  me("%J", ...).</
ec60: 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
ec70: 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e  ote>..<p>.The on
ec80: 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70  ly reasons for p
ec90: 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f  roviding functio
eca0: 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74  ns other than st
ecb0: 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20  rftime() is.for 
ecc0: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20  convenience and 
ecd0: 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a  for efficiency..
ece0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53  </p>..<h3>Time S
ecf0: 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  trings</h3>..<p>
ed00: 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61  A time string ca
ed10: 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20 74  n be in any of t
ed20: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
ed30: 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  mats:</p>..<ol>.
ed40: 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
ed50: 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  DD</i>.<li> <i>Y
ed60: 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c  YYY-MM-DD HH:MM<
ed70: 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
ed80: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 3c  -MM-DD HH:MM:SS<
ed90: 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
eda0: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 2e  -MM-DD HH:MM:SS.
edb0: 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  SSS</i>.<li> <i>
edc0: 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62  YYYY-MM-DD</i><b
edd0: 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f  >T</b><i>HH:MM</
ede0: 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
edf0: 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62  MM-DD</i><b>T</b
ee00: 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e  ><i>HH:MM:SS</i>
ee10: 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
ee20: 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
ee30: 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
ee40: 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
ee50: 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a  </i>.<li> <i>HH:
ee60: 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
ee70: 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f  i>HH:MM:SS.SSS</
ee80: 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f  i>.<li> <b>now</
ee90: 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44 44  b>.<li> <i>DDDDD
eea0: 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 0a  DDDDD</i>.</ol>.
eeb0: 0a 3c 70 3e 0a 49 6e 20 66 6f 72 6d 61 74 73 20  .<p>.In formats 
eec0: 35 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65  5 through 7, the
eed0: 20 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61   "T" is a litera
eee0: 6c 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61  l character sepa
eef0: 72 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65  rating .the date
ef00: 20 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61   and the time, a
ef10: 73 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 3c  s required by .<
ef20: 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77  a href="http://w
ef30: 77 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f  ww.w3c.org/TR/NO
ef40: 54 45 2d 64 61 74 65 74 69 6d 65 22 3e 49 53 4f  TE-datetime">ISO
ef50: 2d 38 36 30 31 3c 2f 61 3e 2e 20 0a 46 6f 72 6d  -8601</a>. .Form
ef60: 61 74 73 20 38 20 74 68 72 6f 75 67 68 20 31 30  ats 8 through 10
ef70: 20 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e   that specify on
ef80: 6c 79 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65  ly a time assume
ef90: 20 61 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30   a date of .2000
efa0: 2d 30 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31  -01-01. Format 1
efb0: 31 2c 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e  1, the string 'n
efc0: 6f 77 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65  ow', is converte
efd0: 64 20 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72  d into the .curr
efe0: 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ent date and tim
eff0: 65 20 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72  e as obtained fr
f000: 6f 6d 20 74 68 65 20 78 43 75 72 72 65 6e 74 54  om the xCurrentT
f010: 69 6d 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68  ime method.of th
f020: 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20  e [sqlite3_vfs] 
f030: 6f 62 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 3c  object in use..<
f040: 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65  a href="http://e
f050: 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f  n.wikipedia.org/
f060: 77 69 6b 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64  wiki/Coordinated
f070: 5f 55 6e 69 76 65 72 73 61 6c 5f 54 69 6d 65 22  _Universal_Time"
f080: 3e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  >.Universal Coor
f090: 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
f0a0: 43 29 3c 2f 61 3e 20 69 73 20 75 73 65 64 2e 20  C)</a> is used. 
f0b0: 0a 46 6f 72 6d 61 74 20 31 32 20 69 73 20 74 68  .Format 12 is th
f0c0: 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70  e .<a href="http
f0d0: 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
f0e0: 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f  org/wiki/Julian_
f0f0: 64 61 79 22 3e 6a 75 6c 69 61 6e 20 64 61 79 20  day">julian day 
f100: 6e 75 6d 62 65 72 3c 2f 61 3e 0a 65 78 70 72 65  number</a>.expre
f110: 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69  ssed as a floati
f120: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
f130: 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69  </p>..<h3>Modifi
f140: 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ers</h3>..<p>The
f150: 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e   time string can
f160: 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
f170: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
f180: 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74  ifiers that .alt
f190: 65 72 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  er the date and 
f1a0: 74 69 6d 65 20 73 74 72 69 6e 67 2e 20 20 45 61  time string.  Ea
f1b0: 63 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61  ch modifier.is a
f1c0: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
f1d0: 74 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20  that is applied 
f1e0: 74 6f 20 74 68 65 20 74 69 6d 65 20 73 74 72 69  to the time stri
f1f0: 6e 67 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a  ng to its left..
f200: 4d 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70  Modifiers are ap
f210: 70 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  plied from left 
f220: 74 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20  to right; order 
f230: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 54 68  is important..Th
f240: 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64 69  e available modi
f250: 66 69 65 72 73 20 61 72 65 20 61 73 20 66 6f 6c  fiers are as fol
f260: 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows.</p>..<ol>.
f270: 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c  <li> NNN days.<l
f280: 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69  i> NNN hours.<li
f290: 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c  > NNN minutes.<l
f2a0: 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f  i> NNN.NNNN seco
f2b0: 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e  nds.<li> NNN mon
f2c0: 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61  ths.<li> NNN yea
f2d0: 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66  rs.<li> start of
f2e0: 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61 72   month.<li> star
f2f0: 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20 73  t of year.<li> s
f300: 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69 3e  tart of day.<li>
f310: 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20   weekday N.<li> 
f320: 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c  unixepoch.<li> l
f330: 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75 74  ocaltime.<li> ut
f340: 63 20 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65  c .</ol>..<p>The
f350: 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66   first six modif
f360: 69 65 72 73 20 28 31 20 74 68 72 6f 75 67 68 20  iers (1 through 
f370: 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74  6) .simply add t
f380: 68 65 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f  he specified amo
f390: 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74  unt of time to t
f3a0: 68 65 20 64 61 74 65 20 0a 73 70 65 63 69 66 69  he date .specifi
f3b0: 65 64 20 62 79 20 74 68 65 20 70 72 65 63 65 64  ed by the preced
f3c0: 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 2e 0a  ing timestring..
f3d0: 4e 6f 74 65 20 74 68 61 74 20 22 26 70 6c 75 73  Note that "&plus
f3e0: 6d 6e 3b 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77  mn;NNN months" w
f3f0: 6f 72 6b 73 20 62 79 20 72 65 6e 64 65 72 69 6e  orks by renderin
f400: 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  g the original d
f410: 61 74 65 20 69 6e 74 6f 0a 74 68 65 20 59 59 59  ate into.the YYY
f420: 59 2d 4d 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20  Y-MM-DD format, 
f430: 61 64 64 69 6e 67 20 74 68 65 20 26 70 6c 75 73  adding the &plus
f440: 6d 6e 3b 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d  mn;NNN to the MM
f450: 20 6d 6f 6e 74 68 20 76 61 6c 75 65 2c 20 74 68   month value, th
f460: 65 6e 0a 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74  en.normalizing t
f470: 68 65 20 72 65 73 75 6c 74 2e 20 20 54 68 75 73  he result.  Thus
f480: 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
f490: 68 65 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d  he data 2001-03-
f4a0: 33 31 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27  31 modified.by '
f4b0: 2b 31 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61  +1 month' initia
f4c0: 6c 6c 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d  lly yields 2001-
f4d0: 30 34 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c  04-31, but April
f4e0: 20 6f 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79   only has 30 day
f4f0: 73 0a 73 6f 20 74 68 65 20 64 61 74 65 20 69 73  s.so the date is
f500: 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32   normalized to 2
f510: 30 30 31 2d 30 35 2d 30 31 2e 20 20 41 20 73 69  001-05-01.  A si
f520: 6d 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63  milar effect occ
f530: 75 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69  urs when.the ori
f540: 67 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65  ginal date is Fe
f550: 62 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c  bruary 29 of a l
f560: 65 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20  eapyear and the 
f570: 6d 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75  modifier is.&plu
f580: 73 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72  smn;N years wher
f590: 65 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c  e N is not a mul
f5a0: 74 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f  tiple of four.</
f5b0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 73 74 61 72  p>..<p>The "star
f5c0: 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
f5d0: 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
f5e0: 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
f5f0: 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
f600: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
f610: 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
f620: 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
f630: 0a 3c 70 3e 54 68 65 20 22 77 65 65 6b 64 61 79  .<p>The "weekday
f640: 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61 6e  " modifier advan
f650: 63 65 73 20 74 68 65 20 64 61 74 65 20 66 6f 72  ces the date for
f660: 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78 74  ward to the next
f670: 20 64 61 74 65 20 0a 77 68 65 72 65 20 74 68 65   date .where the
f680: 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20   weekday number 
f690: 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20  is N. Sunday is 
f6a0: 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 20  0, Monday is 1, 
f6b0: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70  and so forth.</p
f6c0: 3e 0a 0a 3c 70 3e 54 68 65 20 22 75 6e 69 78 65  >..<p>The "unixe
f6d0: 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 28  poch" modifier (
f6e0: 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  11) only works i
f6f0: 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  f it immediately
f700: 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65   follows .a time
f710: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 44 44  string in the DD
f720: 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61 74 2e  DDDDDDDD format.
f730: 20 0a 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20   .This modifier 
f740: 63 61 75 73 65 73 20 74 68 65 20 44 44 44 44 44  causes the DDDDD
f750: 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65  DDDDD to be inte
f760: 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20  rpreted not .as 
f770: 61 20 6a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  a julian day num
f780: 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c  ber as it normal
f790: 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74  ly would be, but
f7a0: 20 61 73 0a 3c 61 20 68 72 65 66 3d 22 68 74 74   as.<a href="htt
f7b0: 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
f7c0: 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74  .org/wiki/Unix_t
f7d0: 69 6d 65 22 3e 55 6e 69 78 20 54 69 6d 65 3c 2f  ime">Unix Time</
f7e0: 61 3e 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72  a> - the .number
f7f0: 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
f800: 65 20 31 39 37 30 2e 20 20 49 66 20 74 68 65 20  e 1970.  If the 
f810: 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
f820: 66 69 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f  fier does not.fo
f830: 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e  llow a timestrin
f840: 67 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44  g of the form DD
f850: 44 44 44 44 44 44 44 44 20 77 68 69 63 68 20 65  DDDDDDDD which e
f860: 78 70 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d  xpresses the num
f870: 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber.of seconds s
f880: 69 6e 63 65 20 31 39 37 30 20 6f 72 20 69 66 20  ince 1970 or if 
f890: 6f 74 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a  other modifiers.
f8a0: 73 65 70 61 72 61 74 65 20 74 68 65 20 22 75 6e  separate the "un
f8b0: 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65  ixepoch" modifie
f8c0: 72 20 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44  r from prior DDD
f8d0: 44 44 44 44 44 44 44 20 74 68 65 6e 20 74 68 65  DDDDDDD then the
f8e0: 0a 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64  .behavior is und
f8f0: 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  efined.</p>..<p>
f900: 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20  The "localtime" 
f910: 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61 73  modifier (12) as
f920: 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20 73  sumes the time s
f930: 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65 66  tring to its lef
f940: 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73 61  t is in.Universa
f950: 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69  l Coordinated Ti
f960: 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64 6a  me (UTC) and adj
f970: 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73 74  usts the time.st
f980: 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74 20  ring so that it 
f990: 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69  displays localti
f9a0: 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74 69  me.  If "localti
f9b0: 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69  me".follows a ti
f9c0: 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 55  me that is not U
f9d0: 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68  TC, then the beh
f9e0: 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
f9f0: 65 64 2e 0a 54 68 65 20 22 75 74 63 22 20 69 73  ed..The "utc" is
fa00: 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66   the opposite of
fa10: 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22   "localtime".  "
fa20: 75 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61  utc" assumes tha
fa30: 74 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20  t the string.to 
fa40: 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74  its left is in t
fa50: 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  he local timezon
fa60: 65 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68  e and adjusts th
fa70: 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20  at string to be 
fa80: 69 6e 20 55 54 43 2e 0a 49 66 20 74 68 65 20 70  in UTC..If the p
fa90: 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e  rior string is n
faa0: 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c  ot in localtime,
fab0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
fac0: 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64   of "utc" is.und
fad0: 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  efined.</p>..<h3
fae0: 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
faf0: 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
fb00: 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a  urrent date.<p>.
fb10: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
fb20: 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b  ECT date('now');
fb30: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
fb40: 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61  p>Compute the la
fb50: 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75  st day of the cu
fb60: 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e  rrent month.</p>
fb70: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
fb80: 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
fb90: 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27  'start of month'
fba0: 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20  ,'+1 month','-1 
fbb0: 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  day');.</blockqu
fbc0: 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65  ote>..<p>Compute
fbd0: 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
fbe0: 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20  me given a unix 
fbf0: 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34  timestamp 109294
fc00: 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  1466.</p>..<bloc
fc10: 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45  kquote>.    SELE
fc20: 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
fc30: 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
fc40: 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ch');.</blockquo
fc50: 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20  te>..<p>Compute 
fc60: 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
fc70: 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
fc80: 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
fc90: 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e  466, and .compen
fca0: 73 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f  sate for your lo
fcb0: 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70  cal timezone.</p
fcc0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
fcd0: 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d    SELECT datetim
fce0: 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75  e(1092941466, 'u
fcf0: 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61  nixepoch', 'loca
fd00: 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ltime');.</block
fd10: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75  quote>..<p>Compu
fd20: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75  te the current u
fd30: 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f  nix timestamp.</
fd40: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
fd50: 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
fd60: 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a  me('%s','now');.
fd70: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
fd80: 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
fd90: 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
fda0: 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f  ce the signing o
fdb0: 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61  f the US Declara
fdc0: 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64  tion.of Independ
fdd0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ent.</p>..<block
fde0: 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
fdf0: 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
fe00: 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37   - julianday('17
fe10: 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c  76-07-04');.</bl
fe20: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f  ockquote>..<p>Co
fe30: 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
fe40: 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
fe50: 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
fe60: 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
fe70: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
fe80: 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
fe90: 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
fea0: 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
feb0: 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
fec0: 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
fed0: 6f 74 65 3e 0a 0a 3c 70 3e 0a 43 6f 6d 70 75 74  ote>..<p>.Comput
fee0: 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
fef0: 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
ff00: 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
ff10: 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
ff20: 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
ff30: 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
ff40: 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
ff50: 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
ff60: 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
ff70: 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  ;.</blockquote>.
ff80: 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  .<p>Compute the 
ff90: 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75  time since the u
ffa0: 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63  nix epoch in sec
ffb0: 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66  onds .(like strf
ffc0: 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
ffd0: 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73   except includes
ffe0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
fff0: 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ):</p>..<blockqu
10000 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a  ote>.  SELECT (j
10010 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
10020 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34  - 2440587.5)*864
10030 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  00.0;.</blockquo
10040 74 65 3e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73  te>..<h3>Caveats
10050 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a   And Bugs</h3>..
10060 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69  <p>The computati
10070 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65  on of local time
10080 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79   depends heavily
10090 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66   on the whim .of
100a0 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64   politicians and
100b0 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75   is thus difficu
100c0 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63  lt to get correc
100d0 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c  t for .all local
100e0 65 73 2e 20 49 6e 20 74 68 69 73 20 69 6d 70 6c  es. In this impl
100f0 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
10100 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
10110 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63  ry .function loc
10120 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73  altime_r() is us
10130 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20  ed to assist in 
10140 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20  the calculation 
10150 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20  of .local time. 
10160 20 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f   The .localtime_
10170 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e  r() C function n
10180 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72  ormally only wor
10190 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74  ks for years.bet
101a0 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30  ween 1970 and 20
101b0 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75  37. For dates ou
101c0 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65  tside this range
101d0 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70  , SQLite .attemp
101e0 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65  ts to map the ye
101f0 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76  ar into an equiv
10200 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69  alent year withi
10210 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64  n .this range, d
10220 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  o the calculatio
10230 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20  n, then map the 
10240 79 65 61 72 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a  year back.</p>..
10250 0a 3c 70 3e 44 61 74 65 20 63 6f 6d 70 75 74 61  .<p>Date computa
10260 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 67 69 76  tions do not giv
10270 65 20 63 6f 72 72 65 63 74 20 72 65 73 75 6c 74  e correct result
10280 73 20 66 6f 72 20 64 61 74 65 73 20 0a 62 65 66  s for dates .bef
10290 6f 72 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e  ore Julian day n
102a0 75 6d 62 65 72 20 30 20 28 2d 34 37 31 33 2d 31  umber 0 (-4713-1
102b0 31 2d 32 34 20 31 32 3a 30 30 3a 30 30 29 2e 3c  1-24 12:00:00).<
102c0 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74  /p>..<p>Non-Vist
102d0 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f  a Windows platfo
102e0 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74  rms only support
102f0 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20   one set of DST 
10300 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e  rules. .Vista on
10310 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e  ly supports two.
10320 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74   Therefore, on t
10330 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20  hese platforms, 
10340 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20  .historical DST 
10350 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c  calculations wil
10360 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  l be incorrect. 
10370 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e  .For example, in
10380 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37   the US, in 2007
10390 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20 63   the DST rules c
103a0 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73  hanged. .Non-Vis
103b0 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
103c0 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e  orms apply the n
103d0 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c 65  ew 2007 DST rule
103e0 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f  s .to all previo
103f0 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c  us years as well
10400 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d  . Vista does som
10410 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65 74  ewhat better.get
10420 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72  ting results cor
10430 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38  rect back to 198
10440 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65  6, when the rule
10450 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e  s were also chan
10460 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c  ged.</p>..<p>All
10470 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74   internal comput
10480 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68  ations assume th
10490 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70  e .<a href="http
104a0 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
104b0 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69  org/wiki/Gregori
104c0 61 6e 5f 63 61 6c 65 6e 64 61 72 22 3e 0a 47 72  an_calendar">.Gr
104d0 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72  egorian calendar
104e0 3c 2f 61 3e 20 73 79 73 74 65 6d 2e 20 20 49 74  </a> system.  It
104f0 20 69 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64   is also assumed
10500 20 74 68 61 74 20 65 76 65 72 79 0a 64 61 79 20   that every.day 
10510 69 73 20 65 78 61 63 74 6c 79 20 38 36 34 30 30  is exactly 86400
10520 20 73 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61   seconds in dura
10530 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  tion.</p>..<tcl>
10540 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
10550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
10590 53 65 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61  Section {Aggrega
105a0 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te Functions} ag
105b0 67 66 75 6e 63 20 7b 61 67 67 66 75 6e 63 7d 0a  gfunc {aggfunc}.
105c0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20  </tcl>..<p>.The 
105d0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
105e0 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
105f0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
10600 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
10610 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20  ional.aggregate 
10620 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
10630 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64  n in C may be ad
10640 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b  ded using the .[
10650 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
10660 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41  unction()]</a>.A
10670 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20  PI.</p>..<p>.In 
10680 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75  any aggregate fu
10690 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  nction that take
106a0 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  s a single argum
106b0 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65  ent, that argume
106c0 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 65  nt.can be precee
106d0 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f  ded by the keywo
106e0 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 49 6e  rd DISTINCT.  In
106f0 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70   such cases, dup
10700 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20  licate.elements 
10710 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66  are filtered bef
10720 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64  ore being passed
10730 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67   into the aggreg
10740 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 46 6f  ate function..Fo
10750 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66  r example, the f
10760 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64  unction "count(d
10770 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c  istinct X)" will
10780 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
10790 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76  er.of distinct v
107a0 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20  alues of column 
107b0 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  X instead of the
107c0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
107d0 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73   non-null.values
107e0 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f   in column X..</
107f0 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  p>..<table borde
10800 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=0 cellpadding=
10810 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65  10>.<tcl>.funcde
10820 66 20 7b 61 76 67 28 58 29 7d 20 7b 7d 20 7b 0a  f {avg(X)} {} {.
10830 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 76 65    Return the ave
10840 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c  rage value of al
10850 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c  l non-NULL <i>X<
10860 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67  /i> within a.  g
10870 72 6f 75 70 2e 20 20 53 74 72 69 6e 67 20 61 6e  roup.  String an
10880 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68  d BLOB values th
10890 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c  at do not look l
108a0 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ike numbers are.
108b0 20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73    interpreted as
108c0 20 30 2e 0a 20 20 54 68 65 20 72 65 73 75 6c 74   0..  The result
108d0 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c 77   of avg() is alw
108e0 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ays a floating p
108f0 6f 69 6e 74 20 76 61 6c 75 65 20 65 76 65 6e 20  oint value even 
10900 69 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20  if all.  inputs 
10910 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a 7d 0a  are integers..}.
10920 0a 66 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28  .funcdef {count(
10930 58 29 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 7d 20  X) count(*)} {} 
10940 7b 0a 20 20 54 68 65 20 66 69 72 73 74 20 66 6f  {.  The first fo
10950 72 6d 20 72 65 74 75 72 6e 20 61 20 63 6f 75 6e  rm return a coun
10960 74 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  t of the number 
10970 6f 66 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20  of times.  that 
10980 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20  <i>X</i> is not 
10990 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e  NULL in a group.
109a0 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
109b0 6d 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d  m (with no argum
109c0 65 6e 74 29 0a 20 20 72 65 74 75 72 6e 73 20 74  ent).  returns t
109d0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
109e0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  of rows in the g
109f0 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
10a00 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58   {group_concat(X
10a10 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58  ) group_concat(X
10a20 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65 20  ,Y)} {} {.  The 
10a30 72 65 73 75 6c 74 20 69 73 20 61 20 73 74 72 69  result is a stri
10a40 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
10a50 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66  concatenation of
10a60 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20  .  all non-NULL 
10a70 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  values of <i>X</
10a80 69 3e 2e 20 20 49 66 20 70 61 72 61 6d 65 74 65  i>.  If paramete
10a90 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 74 68  r <i>Y</i> is th
10aa0 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65  e separator.  be
10ab0 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20  tween instances 
10ac0 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 41 20  of <i>X</i>.  A 
10ad0 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75  comma (",") is u
10ae0 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
10af0 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f  ator.  if <i>Y</
10b00 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 7d  i> is omitted..}
10b10 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
10b20 29 7d 20 7b 6d 61 78 41 67 67 46 75 6e 63 20 61  )} {maxAggFunc a
10b30 67 67 5f 6d 61 78 7d 20 7b 0a 20 20 52 65 74 75  gg_max} {.  Retu
10b40 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76  rn the maximum v
10b50 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75  alue of all valu
10b60 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
10b70 0a 20 20 54 68 65 20 75 73 75 61 6c 20 73 6f 72  .  The usual sor
10b80 74 20 6f 72 64 65 72 20 69 73 20 75 73 65 64 20  t order is used 
10b90 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
10ba0 20 6d 61 78 69 6d 75 6d 2e 0a 7d 0a 0a 66 75 6e   maximum..}..fun
10bb0 63 64 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 6d  cdef {min(X)} {m
10bc0 69 6e 41 67 67 46 75 6e 63 20 61 67 67 5f 6d 69  inAggFunc agg_mi
10bd0 6e 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68  n} {.  Return th
10be0 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55  e minimum non-NU
10bf0 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  LL value of all 
10c00 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72  values in the gr
10c10 6f 75 70 2e 0a 20 20 54 68 65 20 75 73 75 61 6c  oup..  The usual
10c20 20 73 6f 72 74 20 6f 72 64 65 72 20 69 73 20 75   sort order is u
10c30 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
10c40 20 74 68 65 20 6d 69 6e 69 6d 75 6d 2e 20 20 0a   the minimum.  .
10c50 20 20 4e 55 4c 4c 20 69 73 20 6f 6e 6c 79 20 72    NULL is only r
10c60 65 74 75 72 6e 65 64 0a 20 20 69 66 20 61 6c 6c  eturned.  if all
10c70 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
10c80 72 6f 75 70 20 61 72 65 20 4e 55 4c 4c 2e 0a 7d  roup are NULL..}
10c90 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58  ..funcdef {sum(X
10ca0 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 73 75 6d  ) total(X)} {sum
10cb0 46 75 6e 63 20 73 75 6d 20 74 6f 74 61 6c 7d 20  Func sum total} 
10cc0 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e  {.  Return the n
10cd0 75 6d 65 72 69 63 20 73 75 6d 20 6f 66 20 61 6c  umeric sum of al
10ce0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  l non-NULL value
10cf0 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
10d00 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
10d10 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  o non-NULL input
10d20 20 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29   rows then sum()
10d30 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20   returns.  NULL 
10d40 62 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75  but total() retu
10d50 72 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20  rns 0.0..  NULL 
10d60 69 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20  is not normally 
10d70 61 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74  a helpful result
10d80 20 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20   for the sum of 
10d90 6e 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68  no rows.  but th
10da0 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72  e SQL standard r
10db0 65 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d  equires it and m
10dc0 6f 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20  ost other.  SQL 
10dd0 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
10de0 20 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29   implement sum()
10df0 20 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c   that way so SQL
10e00 69 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74  ite does it in t
10e10 68 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e  he.  same way in
10e20 20 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d   order to be com
10e30 70 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e  patible.   The n
10e40 6f 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61  on-standard tota
10e50 6c 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69  l() function.  i
10e60 73 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20  s provided as a 
10e70 63 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74  convenient way t
10e80 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68  o work around th
10e90 69 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65  is design proble
10ea0 6d 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  m.  in the SQL l
10eb0 61 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20  anguage.</p>..  
10ec0 3c 70 3e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  <p>The result of
10ed0 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61   total() is alwa
10ee0 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
10ef0 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 54 68 65  int value..  The
10f00 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29   result of sum()
10f10 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76   is an integer v
10f20 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d  alue if all non-
10f30 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20  NULL inputs are 
10f40 69 6e 74 65 67 65 72 73 2e 0a 20 20 49 66 20 61  integers..  If a
10f50 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28  ny input to sum(
10f60 29 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20  ) is neither an 
10f70 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c  integer or a NUL
10f80 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72  L.  then sum() r
10f90 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e  eturns a floatin
10fa0 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20  g point value.  
10fb0 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61  which might be a
10fc0 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  n approximation 
10fd0 74 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e  to the true sum.
10fe0 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 53 75 6d 28 29  </p>..  <p>Sum()
10ff0 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22   will throw an "
11000 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
11010 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61  " exception if a
11020 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20  ll inputs.  are 
11030 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c  integers or NULL
11040 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65  .  and an intege
11050 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  r overflow occur
11060 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64  s at any point d
11070 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74  uring the comput
11080 61 74 69 6f 6e 2e 0a 20 20 54 6f 74 61 6c 28 29  ation..  Total()
11090 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e   never throws an
110a0 20 65 78 63 65 70 74 69 6f 6e 2e 0a 7d 0a 3c 2f   exception..}.</
110b0 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  tcl>.</table>..<
110c0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
110d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
110f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11110 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45  ###.Section INSE
11120 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52  RT insert {INSER
11130 54 20 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62 62  T INSERTs}..Bubb
11140 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74  leDiagram insert
11150 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
11160 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74  <p>The INSERT st
11170 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e  atement comes in
11180 20 74 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73   two basic forms
11190 2e 20 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  .  The first for
111a0 6d 0a 28 77 69 74 68 20 74 68 65 20 22 56 41 4c  m.(with the "VAL
111b0 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72  UES" keyword) cr
111c0 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e  eates a single n
111d0 65 77 20 72 6f 77 20 69 6e 20 61 6e 20 65 78 69  ew row in an exi
111e0 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66 20  sting table..If 
111f0 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69  no column-list i
11200 73 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  s specified then
11210 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
11220 61 6c 75 65 73 20 6d 75 73 74 0a 62 65 20 74 68  alues must.be th
11230 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
11240 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11250 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
11260 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a  f a column-list.
11270 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
11280 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
11290 20 76 61 6c 75 65 73 20 6d 75 73 74 20 6d 61 74   values must mat
112a0 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ch the number of
112b0 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d  .specified colum
112c0 6e 73 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20  ns.  Columns of 
112d0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 64  the table that d
112e0 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20  o not appear in 
112f0 74 68 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74 20  the.column list 
11300 61 72 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20  are filled with 
11310 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
11320 65 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20  e, or with NULL 
11330 69 66 20 6e 6f 0a 64 65 66 61 75 6c 74 20 76 61  if no.default va
11340 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65 64  lue is specified
11350 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  ..</p>..<p>The s
11360 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
11370 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
11380 6e 74 20 74 61 6b 65 73 20 69 74 20 64 61 74 61  nt takes it data
11390 20 66 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73   from a.SELECT s
113a0 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e  tatement.  The n
113b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
113c0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f   in the result o
113d0 66 20 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73  f the.SELECT mus
113e0 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  t exactly match 
113f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
11400 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
11410 6c 65 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20  le if.no column 
11420 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
11430 64 2c 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61  d, or it must ma
11440 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
11450 66 20 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20 69  f columns.name i
11460 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73  n the column lis
11470 74 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  t.  A new entry 
11480 69 73 20 6d 61 64 65 20 69 6e 20 74 68 65 20 74  is made in the t
11490 61 62 6c 65 0a 66 6f 72 20 65 76 65 72 79 20 72  able.for every r
114a0 6f 77 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ow of the SELECT
114b0 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20 53 45   result.  The SE
114c0 4c 45 43 54 20 6d 61 79 20 62 65 20 73 69 6d 70  LECT may be simp
114d0 6c 65 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e 3c  le.or compound.<
114e0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69  /p>..<p>The opti
114f0 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  onal conflict-cl
11500 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  ause allows the 
11510 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66  specification of
11520 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a   an alternative.
11530 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c  constraint confl
11540 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
11550 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
11560 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20  during this one 
11570 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65  command..See the
11580 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a   section titled.
11590 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f  [ON CONFLICT] fo
115a0 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
115b0 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f  ormation..For co
115c0 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
115d0 20 4d 79 53 51 4c 2c 20 74 68 65 20 70 61 72 73   MySQL, the pars
115e0 65 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73  er allows the us
115f0 65 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20  e of the.single 
11600 6b 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d  keyword <a href=
11610 22 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74  "lang_replace.ht
11620 6d 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20  ml">REPLACE</a> 
11630 61 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72  as an .alias for
11640 20 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c   "INSERT OR REPL
11650 41 43 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ACE"..</p>..<tcl
11660 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
11670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
116a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
116b0 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e  .Section {ON CON
116c0 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f  FLICT clause} co
116d0 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69 63  nflict {{conflic
116e0 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43 4f  t clause} {ON CO
116f0 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c 65  NFLICT}}..Bubble
11700 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74  Diagram conflict
11710 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
11720 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
11730 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74  CT clause is not
11740 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c 20   a separate SQL 
11750 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20  command.  It is 
11760 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63  a.non-standard c
11770 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20 61  lause that can a
11780 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74  ppear in many ot
11790 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73  her SQL commands
117a0 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69 74  ..It is given it
117b0 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e  s own section in
117c0 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62   this document b
117d0 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
117e0 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72  .part of standar
117f0 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66  d SQL and theref
11800 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ore might not be
11810 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a   familiar.</p>..
11820 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f  <p>The syntax fo
11830 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  r the ON CONFLIC
11840 54 20 63 6c 61 75 73 65 20 69 73 20 61 73 20 73  T clause is as s
11850 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74  hown above for.t
11860 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
11870 63 6f 6d 6d 61 6e 64 2e 20 20 46 6f 72 20 74 68  command.  For th
11880 65 20 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44  e INSERT and.UPD
11890 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68  ATE commands, th
118a0 65 20 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43  e keywords "ON C
118b0 4f 4e 46 4c 49 43 54 22 20 61 72 65 20 72 65 70  ONFLICT" are rep
118c0 6c 61 63 65 64 20 62 79 20 22 4f 52 22 2c 20 74  laced by "OR", t
118d0 6f 20 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74 61  o make.the synta
118e0 78 20 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74 75  x seem more natu
118f0 72 61 6c 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ral.  For exampl
11900 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 0a 22 49  e, instead of."I
11910 4e 53 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43  NSERT ON CONFLIC
11920 54 20 49 47 4e 4f 52 45 22 20 77 65 20 68 61 76  T IGNORE" we hav
11930 65 20 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e  e "INSERT OR IGN
11940 4f 52 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72  ORE"..The keywor
11950 64 73 20 63 68 61 6e 67 65 20 62 75 74 20 74 68  ds change but th
11960 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65  e meaning of the
11970 20 63 6c 61 75 73 65 20 69 73 20 74 68 65 20 73   clause is the s
11980 61 6d 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c  ame.either way.<
11990 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  /p>..<p>The ON C
119a0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 73  ONFLICT clause s
119b0 70 65 63 69 66 69 65 73 20 61 6e 20 61 6c 67 6f  pecifies an algo
119c0 72 69 74 68 6d 20 75 73 65 64 20 74 6f 20 72 65  rithm used to re
119d0 73 6f 6c 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74  solve.constraint
119e0 20 63 6f 6e 66 6c 69 63 74 73 2e 20 20 54 68 65   conflicts.  The
119f0 72 65 20 61 72 65 20 66 69 76 65 20 63 68 6f 69  re are five choi
11a00 63 65 73 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20 41  ces: ROLLBACK, A
11a10 42 4f 52 54 2c 0a 46 41 49 4c 2c 20 49 47 4e 4f  BORT,.FAIL, IGNO
11a20 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e  RE, and REPLACE.
11a30 20 54 68 65 20 64 65 66 61 75 6c 74 20 61 6c 67   The default alg
11a40 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
11a50 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74    This.is what t
11a60 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c  hey mean:</p>..<
11a70 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42  dl>.<dt><b>ROLLB
11a80 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACK</b></dt>.<dd
11a90 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74  ><p>When a const
11aa0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
11ab0 6f 63 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65 64  occurs, an immed
11ac0 69 61 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f 63  iate ROLLBACK.oc
11ad0 63 75 72 73 2c 20 74 68 75 73 20 65 6e 64 69 6e  curs, thus endin
11ae0 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  g the current tr
11af0 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ansaction, and t
11b00 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74  he command abort
11b10 73 0a 77 69 74 68 20 61 20 72 65 74 75 72 6e 20  s.with a return 
11b20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 43  code of SQLITE_C
11b30 4f 4e 53 54 52 41 49 4e 54 2e 20 20 49 66 20 6e  ONSTRAINT.  If n
11b40 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
11b50 0a 61 63 74 69 76 65 20 28 6f 74 68 65 72 20 74  .active (other t
11b60 68 61 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20  han the implied 
11b70 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74  transaction that
11b80 20 69 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65   is created on e
11b90 76 65 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68  very.command) th
11ba0 65 6e 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68  en this algorith
11bb0 6d 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65  m works the same
11bc0 20 61 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c 2f   as ABORT.</p></
11bd0 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52  dd>..<dt><b>ABOR
11be0 54 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  T</b></dt>.<dd><
11bf0 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  p>When a constra
11c00 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
11c10 63 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e  curs, the comman
11c20 64 20 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79 20  d backs out.any 
11c30 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 69 74  prior changes it
11c40 20 6d 69 67 68 74 20 68 61 76 65 20 6d 61 64 65   might have made
11c50 20 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68   and aborts with
11c60 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 6f   a return code.o
11c70 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  f SQLITE_CONSTRA
11c80 49 4e 54 2e 20 20 42 75 74 20 6e 6f 20 52 4f 4c  INT.  But no ROL
11c90 4c 42 41 43 4b 20 69 73 20 65 78 65 63 75 74 65  LBACK is execute
11ca0 64 20 73 6f 20 63 68 61 6e 67 65 73 0a 66 72 6f  d so changes.fro
11cb0 6d 20 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64 73  m prior commands
11cc0 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
11cd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72 65   transaction.are
11ce0 20 70 72 65 73 65 72 76 65 64 2e 20 20 54 68 69   preserved.  Thi
11cf0 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  s is the default
11d00 20 62 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c 2f   behavior.</p></
11d10 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c  dd>..<dt><b>FAIL
11d20 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
11d30 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  >When a constrai
11d40 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
11d50 75 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64  urs, the command
11d60 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 0a 72   aborts with a.r
11d70 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
11d80 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42  E_CONSTRAINT.  B
11d90 75 74 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74  ut any changes t
11da0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  o the database t
11db0 68 61 74 0a 74 68 65 20 63 6f 6d 6d 61 6e 64 20  hat.the command 
11dc0 6d 61 64 65 20 70 72 69 6f 72 20 74 6f 20 65 6e  made prior to en
11dd0 63 6f 75 6e 74 65 72 69 6e 67 20 74 68 65 20 63  countering the c
11de0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
11df0 69 6f 6e 0a 61 72 65 20 70 72 65 73 65 72 76 65  ion.are preserve
11e00 64 20 61 6e 64 20 61 72 65 20 6e 6f 74 20 62 61  d and are not ba
11e10 63 6b 65 64 20 6f 75 74 2e 20 20 46 6f 72 20 65  cked out.  For e
11e20 78 61 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50  xample, if an UP
11e30 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65  DATE.statement e
11e40 6e 63 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e  ncountered a con
11e50 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11e60 6e 20 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72  n on the 100th r
11e70 6f 77 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d  ow that.it attem
11e80 70 74 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74  pts to update, t
11e90 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 39 39  hen the first 99
11ea0 20 72 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65   row changes are
11eb0 20 70 72 65 73 65 72 76 65 64 0a 62 75 74 20 63   preserved.but c
11ec0 68 61 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31  hanges to rows 1
11ed0 30 30 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65  00 and beyond ne
11ee0 76 65 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f  ver occur.</p></
11ef0 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f  dd>..<dt><b>IGNO
11f00 52 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  RE</b></dt>.<dd>
11f10 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72  <p>When a constr
11f20 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
11f30 63 63 75 72 73 2c 20 74 68 65 20 6f 6e 65 20 72  ccurs, the one r
11f40 6f 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ow that contains
11f50 0a 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  .the constraint 
11f60 76 69 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f 74  violation is not
11f70 20 69 6e 73 65 72 74 65 64 20 6f 72 20 63 68 61   inserted or cha
11f80 6e 67 65 64 2e 20 20 42 75 74 20 74 68 65 20 63  nged.  But the c
11f90 6f 6d 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65 73  ommand.continues
11fa0 20 65 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61   executing norma
11fb0 6c 6c 79 2e 20 20 4f 74 68 65 72 20 72 6f 77 73  lly.  Other rows
11fc0 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
11fd0 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63  r the row that.c
11fe0 6f 6e 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e  ontained the con
11ff0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
12000 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  n continue to be
12010 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
12020 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 20  ated.normally.  
12030 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  No error is retu
12040 72 6e 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  rned.</p></dd>..
12050 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f  <dt><b>REPLACE</
12060 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57  b></dt>.<dd><p>W
12070 68 65 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  hen a UNIQUE con
12080 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
12090 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 70 72  n occurs, the pr
120a0 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 0a  e-existing rows.
120b0 74 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67  that are causing
120c0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
120d0 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
120e0 6d 6f 76 65 64 20 70 72 69 6f 72 20 74 6f 20 69  moved prior to i
120f0 6e 73 65 72 74 69 6e 67 0a 6f 72 20 75 70 64 61  nserting.or upda
12100 74 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  ting the current
12110 20 72 6f 77 2e 20 20 54 68 75 73 20 74 68 65 20   row.  Thus the 
12120 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
12130 20 61 6c 77 61 79 73 20 6f 63 63 75 72 73 2e 0a   always occurs..
12140 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74  The command cont
12150 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67 20  inues executing 
12160 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72  normally.  No er
12170 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ror is returned.
12180 0a 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  .If a NOT NULL c
12190 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
121a0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
121b0 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 72 65  NULL value is re
121c0 70 6c 61 63 65 64 0a 62 79 20 74 68 65 20 64 65  placed.by the de
121d0 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
121e0 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49 66  that column.  If
121f0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20   the column has 
12200 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65  no default.value
12210 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54  , then the ABORT
12220 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
12230 65 64 2e 20 20 49 66 20 61 20 43 48 45 43 4b 20  ed.  If a CHECK 
12240 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
12250 74 69 6f 6e 0a 6f 63 63 75 72 73 20 74 68 65 6e  tion.occurs then
12260 20 74 68 65 20 49 47 4e 4f 52 45 20 61 6c 67 6f   the IGNORE algo
12270 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
12280 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 69 73  p>..<p>When this
12290 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
122a0 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65  tion strategy de
122b0 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72  letes rows in or
122c0 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61  der to.satisfy a
122d0 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20   constraint, it 
122e0 64 6f 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 20  does not invoke 
122f0 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 20  delete triggers 
12300 6f 6e 20 74 68 6f 73 65 0a 72 6f 77 73 2e 20 20  on those.rows.  
12310 54 68 69 73 20 62 65 68 61 76 69 6f 72 20 6d 69  This behavior mi
12320 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61 20  ght change in a 
12330 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c  future release.<
12340 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68  /p>.</dl>..<p>Th
12350 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  e algorithm spec
12360 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20  ified in the OR 
12370 63 6c 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45  clause of a INSE
12380 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65  RT or UPDATE.ove
12390 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72  rrides any algor
123a0 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
123b0 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  n a CREATE TABLE
123c0 2e 0a 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  ..If no algorith
123d0 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
123e0 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
123f0 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
12400 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
12410 0a 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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
12460 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
12470 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
12480 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
12490 65 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f  eindex-stmt 1.</
124a0 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 52 45 49  tcl>..<p>The REI
124b0 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20  NDEX command is 
124c0 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61  used to delete a
124d0 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e 64 69  nd recreate indi
124e0 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ces from scratch
124f0 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66 75 6c  ..This is useful
12500 20 77 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69   when the defini
12510 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74  tion of a collat
12520 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73  ion sequence has
12530 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a   changed..</p>..
12540 3c 70 3e 49 6e 20 74 68 65 20 66 69 72 73 74 20  <p>In the first 
12550 66 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64 69 63 65  form, all indice
12560 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s in all attache
12570 64 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74  d databases that
12580 20 75 73 65 20 74 68 65 0a 6e 61 6d 65 64 20 63   use the.named c
12590 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
125a0 65 20 61 72 65 20 72 65 63 72 65 61 74 65 64 2e  e are recreated.
125b0 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66   In the second f
125c0 6f 72 6d 2c 20 69 66 20 0a 3c 69 3e 26 23 39 31  orm, if .<i>&#91
125d0 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26  ;database-name.&
125e0 23 39 33 3b 74 61 62 6c 65 2f 69 6e 64 65 78 2d  #93;table/index-
125f0 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e 74 69 66  name</i> identif
12600 69 65 73 20 61 20 74 61 62 6c 65 2c 0a 74 68 65  ies a table,.the
12610 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 61 73  n all indices.as
12620 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
12630 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 62 75  e table are rebu
12640 69 6c 74 2e 20 49 66 20 61 6e 20 69 6e 64 65 78  ilt. If an index
12650 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 2c 20   is identified, 
12660 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73 20 73  then only.this s
12670 70 65 63 69 66 69 63 20 69 6e 64 65 78 20 69 73  pecific index is
12680 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72 65 63   deleted and rec
12690 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  reated..</p>..<p
126a0 3e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61  >If no <i>databa
126b0 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73  se-name</i> is s
126c0 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 68 65  pecified and the
126d0 72 65 20 65 78 69 73 74 73 20 62 6f 74 68 20 61  re exists both a
126e0 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20   table or.index 
126f0 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  and a collation 
12700 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
12710 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20  specified name, 
12720 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61 73 73  then indices ass
12730 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74 68 65  ociated.with the
12740 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
12750 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72 65 63  nce only are rec
12760 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68 69 73  onstructed. This
12770 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79 20 62   ambiguity may b
12780 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79 20 61  e.dispelled by a
12790 6c 77 61 79 73 20 73 70 65 63 69 66 79 69 6e 67  lways specifying
127a0 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e   a <i>database-n
127b0 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69  ame</i> when rei
127c0 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63 69 66  ndexing a.specif
127d0 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ic table or inde
127e0 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  x...<tcl>.######
127f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12830 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
12840 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63  n REPLACE replac
12850 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c  e REPLACE..</tcl
12860 3e 0a 0a 3c 70 3e 54 68 65 20 52 45 50 4c 41 43  >..<p>The REPLAC
12870 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20  E command is an 
12880 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 22 49  alias for the "I
12890 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45  NSERT OR REPLACE
128a0 22 20 76 61 72 69 61 6e 74 0a 6f 66 20 74 68 65  " variant.of the
128b0 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 69   <a href="lang_i
128c0 6e 73 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53 45  nsert.html">INSE
128d0 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 2e 20  RT</a> command. 
128e0 20 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73 20   .This alias is 
128f0 70 72 6f 76 69 64 65 64 20 66 6f 72 0a 63 6f 6d  provided for.com
12900 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
12910 4d 79 53 51 4c 2e 20 20 53 65 65 20 74 68 65 20  MySQL.  See the 
12920 0a 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 69  .<a href="lang_i
12930 6e 73 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53 45  nsert.html">INSE
12940 52 54 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20 64  RT</a> command d
12950 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
12960 20 61 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f   additional.info
12970 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
12980 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
12990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
129a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
129b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
129c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
129d0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45  #####.Section SE
129e0 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c  LECT select {SEL
129f0 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62  ECT query}..Bubb
12a00 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
12a10 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
12a20 61 67 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f 6c  agram result-col
12a30 75 6d 6e 0a 42 75 62 62 6c 65 44 69 61 67 72 61  umn.BubbleDiagra
12a40 6d 20 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42 75  m join-source.Bu
12a50 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67  bbleDiagram sing
12a60 6c 65 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65  le-source.Bubble
12a70 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a  Diagram join-op.
12a80 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f  BubbleDiagram jo
12a90 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75  in-constraint.Bu
12aa0 62 62 6c 65 44 69 61 67 72 61 6d 20 6f 72 64 65  bbleDiagram orde
12ab0 72 69 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c 65  ring-term.Bubble
12ac0 44 69 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64  Diagram compound
12ad0 2d 6f 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e  -operator.</tcl>
12ae0 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  ..<p>The SELECT 
12af0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
12b00 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64  d to query the d
12b10 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65  atabase.  The.re
12b20 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54  sult of a SELECT
12b30 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
12b40 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68   rows of data wh
12b50 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73  ere each row.has
12b60 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20   a fixed number 
12b70 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65  of columns.  The
12b80 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
12b90 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74  ns in the.result
12ba0 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
12bb0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
12bc0 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20  list in between 
12bd0 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46  the.SELECT and F
12be0 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 41  ROM keywords.  A
12bf0 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78 70  ny arbitrary exp
12c00 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
12c10 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e  sed.as a result.
12c20 20 20 49 66 20 61 20 72 65 73 75 6c 74 20 65 78    If a result ex
12c30 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a 68 64  pression is }.hd
12c40 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  _puts "[Operator
12c50 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c   *] then all col
12c60 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  umns of all tabl
12c70 65 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  es are substitut
12c80 65 64 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22 66  ed\n".hd_puts "f
12c90 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72  or that one expr
12ca0 65 73 73 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  ession.  If the 
12cb0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68  expression is th
12cc0 65 20 6e 61 6d 65 20 6f 66 5c 6e 22 0a 68 64 5f  e name of\n".hd_
12cd0 70 75 74 73 20 22 61 20 74 61 62 6c 65 20 66 6f  puts "a table fo
12ce0 6c 6c 6f 77 65 64 20 62 79 20 5b 4f 70 65 72 61  llowed by [Opera
12cf0 74 6f 72 20 2e 2a 5d 20 74 68 65 6e 20 74 68 65  tor .*] then the
12d00 20 72 65 73 75 6c 74 20 69 73 20 61 6c 6c 20 63   result is all c
12d10 6f 6c 75 6d 6e 73 5c 6e 22 0a 68 64 5f 70 75 74  olumns\n".hd_put
12d20 73 20 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20 74  s {in that one t
12d30 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  able.</p>..<p>Th
12d40 65 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  e DISTINCT keywo
12d50 72 64 20 63 61 75 73 65 73 20 61 20 73 75 62 73  rd causes a subs
12d60 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
12d70 73 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  s to be returned
12d80 2c 20 0a 69 6e 20 77 68 69 63 68 20 65 61 63 68  , .in which each
12d90 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 64   result row is d
12da0 69 66 66 65 72 65 6e 74 2e 20 20 4e 55 4c 4c 20  ifferent.  NULL 
12db0 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 74  values are not t
12dc0 72 65 61 74 65 64 20 61 73 20 0a 64 69 73 74 69  reated as .disti
12dd0 6e 63 74 20 66 72 6f 6d 20 65 61 63 68 20 6f 74  nct from each ot
12de0 68 65 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c  her.  The defaul
12df0 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 74 68  t behavior is th
12e00 61 74 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f  at all result ro
12e10 77 73 20 0a 62 65 20 72 65 74 75 72 6e 65 64 2c  ws .be returned,
12e20 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 6d 61   which can be ma
12e30 64 65 20 65 78 70 6c 69 63 69 74 20 77 69 74 68  de explicit with
12e40 20 74 68 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c   the keyword ALL
12e50 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 71 75  .</p>..<p>The qu
12e60 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
12e70 61 67 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d  against one or m
12e80 6f 72 65 20 74 61 62 6c 65 73 20 73 70 65 63 69  ore tables speci
12e90 66 69 65 64 20 61 66 74 65 72 0a 74 68 65 20 46  fied after.the F
12ea0 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 20 49 66  ROM keyword.  If
12eb0 20 6d 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73   multiple tables
12ec0 20 6e 61 6d 65 73 20 61 72 65 20 73 65 70 61 72   names are separ
12ed0 61 74 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a  ated by commas,.
12ee0 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 69  then the query i
12ef0 73 20 61 67 61 69 6e 73 74 20 74 68 65 20 63 72  s against the cr
12f00 6f 73 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20  oss join of the 
12f10 76 61 72 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a  various tables..
12f20 54 68 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32 20  The full SQL-92 
12f30 6a 6f 69 6e 20 73 79 6e 74 61 78 20 63 61 6e 20  join syntax can 
12f40 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
12f50 73 70 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a 41  specify joins..A
12f60 20 73 75 62 2d 71 75 65 72 79 0a 69 6e 20 70 61   sub-query.in pa
12f70 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20 62 65  rentheses may be
12f80 20 73 75 62 73 74 69 74 75 74 65 64 20 66 6f 72   substituted for
12f90 20 61 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65 20   any table name 
12fa0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
12fb0 73 65 2e 0a 54 68 65 20 65 6e 74 69 72 65 20 46  se..The entire F
12fc0 52 4f 4d 20 63 6c 61 75 73 65 20 6d 61 79 20 62  ROM clause may b
12fd0 65 20 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77 68  e omitted, in wh
12fe0 69 63 68 20 63 61 73 65 20 74 68 65 20 72 65 73  ich case the res
12ff0 75 6c 74 20 69 73 20 61 0a 73 69 6e 67 6c 65 20  ult is a.single 
13000 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  row consisting o
13010 66 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  f the values of 
13020 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  the expression l
13030 69 73 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ist..</p>..<p>Th
13040 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  e WHERE clause c
13050 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69  an be used to li
13060 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
13070 66 20 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63  f rows over.whic
13080 68 20 74 68 65 20 71 75 65 72 79 20 6f 70 65 72  h the query oper
13090 61 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ates.</p>..<p>Th
130a0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
130b0 65 20 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20  e causes one or 
130c0 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65  more rows of the
130d0 20 72 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f   result to.be co
130e0 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69  mbined into a si
130f0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70  ngle row of outp
13100 75 74 2e 20 20 54 68 69 73 20 69 73 20 65 73 70  ut.  This is esp
13110 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77  ecially useful.w
13120 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63  hen the result c
13130 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
13140 65 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68  e functions.  Th
13150 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
13160 0a 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c  .the GROUP BY cl
13170 61 75 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c  ause do <em>not<
13180 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20  /em> have to be 
13190 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
131a0 0a 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 72  .appear in the r
131b0 65 73 75 6c 74 2e 20 20 54 68 65 20 48 41 56 49  esult.  The HAVI
131c0 4e 47 20 63 6c 61 75 73 65 20 69 73 20 73 69 6d  NG clause is sim
131d0 69 6c 61 72 20 74 6f 20 57 48 45 52 45 20 65 78  ilar to WHERE ex
131e0 63 65 70 74 0a 74 68 61 74 20 48 41 56 49 4e 47  cept.that HAVING
131f0 20 61 70 70 6c 69 65 73 20 61 66 74 65 72 20 67   applies after g
13200 72 6f 75 70 69 6e 67 20 68 61 73 20 6f 63 63 75  rouping has occu
13210 72 72 65 64 2e 20 20 54 68 65 20 48 41 56 49 4e  rred.  The HAVIN
13220 47 20 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61 79  G expression.may
13230 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73   refer to values
13240 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65  , even aggregate
13250 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74   functions, that
13260 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20   are not in the 
13270 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  result.</p>..<p>
13280 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
13290 75 73 65 20 63 61 75 73 65 73 20 74 68 65 20 6f  use causes the o
132a0 75 74 70 75 74 20 72 6f 77 73 20 74 6f 20 62 65  utput rows to be
132b0 20 73 6f 72 74 65 64 2e 20 20 0a 54 68 65 20 61   sorted.  .The a
132c0 72 67 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52  rgument to ORDER
132d0 20 42 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66   BY is a list of
132e0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
132f0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  t are used as th
13300 65 0a 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f  e.key for the so
13310 72 74 2e 20 20 54 68 65 20 65 78 70 72 65 73 73  rt.  The express
13320 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76 65  ions do not have
13330 20 74 6f 20 62 65 20 70 61 72 74 20 6f 66 20 74   to be part of t
13340 68 65 0a 72 65 73 75 6c 74 20 66 6f 72 20 61 20  he.result for a 
13350 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 62  simple SELECT, b
13360 75 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ut in a compound
13370 20 53 45 4c 45 43 54 20 65 61 63 68 20 73 6f 72   SELECT each sor
13380 74 0a 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73  t.expression mus
13390 74 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  t exactly match 
133a0 6f 6e 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c  one of the resul
133b0 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 61 63 68  t columns.  Each
133c0 0a 73 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e  .sort expression
133d0 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
133e0 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
133f0 20 43 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64   COLLATE keyword
13400 20 61 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66   and.the name of
13410 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
13420 63 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f  ction used for o
13430 72 64 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64  rdering text and
13440 2f 6f 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43  /or.keywords ASC
13450 20 6f 72 20 44 45 53 43 20 74 6f 20 73 70 65 63   or DESC to spec
13460 69 66 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64  ify the sort ord
13470 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  er.</p>..<p>Each
13480 20 74 65 72 6d 20 6f 66 20 61 6e 20 4f 52 44 45   term of an ORDE
13490 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
134a0 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73 20  is processed as 
134b0 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
134c0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74 68 65  l>.<li><p>If the
134d0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
134e0 73 69 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74 61  sion is a consta
134f0 6e 74 20 69 6e 74 65 67 65 72 20 4b 20 74 68 65  nt integer K the
13500 6e 20 74 68 65 0a 6f 75 74 70 75 74 20 69 73 20  n the.output is 
13510 6f 72 64 65 72 65 64 20 62 79 20 74 68 65 20 4b  ordered by the K
13520 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  -th column of th
13530 65 20 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70  e result set.</p
13540 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 49 66  ></li>.<li><p>If
13550 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
13560 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69  pression is an i
13570 64 65 6e 74 69 66 69 65 72 20 61 6e 64 20 6f 6e  dentifier and on
13580 65 20 6f 66 20 74 68 65 0a 6f 75 74 70 75 74 20  e of the.output 
13590 63 6f 6c 75 6d 6e 73 20 61 73 20 61 6e 20 61 6c  columns as an al
135a0 69 61 73 20 62 79 20 74 68 65 20 73 61 6d 65 20  ias by the same 
135b0 6e 61 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 6f  name, then the o
135c0 75 74 70 75 74 20 69 73 0a 6f 72 64 65 72 65 64  utput is.ordered
135d0 20 62 79 20 74 68 65 20 69 64 65 6e 74 69 66 69   by the identifi
135e0 65 64 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 3c 2f  ed column.</p></
135f0 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 4f 74 68 65 72  li>.<li><p>Other
13600 77 69 73 65 2c 20 74 68 65 20 4f 52 44 45 52 20  wise, the ORDER 
13610 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
13620 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74   evaluated and t
13630 68 65 20 6f 75 74 70 75 74 20 0a 69 73 20 6f 72  he output .is or
13640 64 65 72 65 64 20 62 79 20 74 68 65 20 76 61 6c  dered by the val
13650 75 65 20 6f 66 20 74 68 61 74 20 65 78 70 72 65  ue of that expre
13660 73 73 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ssion.</p></li>.
13670 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 63  </ol>..<p>In a c
13680 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 73  ompound SELECT s
13690 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20 74 68  tatement, the th
136a0 69 72 64 20 4f 52 44 45 52 20 42 59 20 6d 61 74  ird ORDER BY mat
136b0 63 68 69 6e 67 20 72 75 6c 65 0a 72 65 71 75 69  ching rule.requi
136c0 72 65 73 20 74 68 61 74 20 74 68 65 20 65 78 70  res that the exp
136d0 72 65 73 73 69 6f 6e 20 62 65 20 69 64 65 6e 74  ression be ident
136e0 69 63 61 6c 20 74 6f 20 6f 6e 65 20 6f 66 20 74  ical to one of t
136f0 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 0a 74 68  he columns in.th
13700 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
13710 68 65 20 74 68 72 65 65 20 72 75 6c 65 73 20 61  he three rules a
13720 72 65 20 66 69 72 73 74 20 61 70 70 6c 69 65 64  re first applied
13730 20 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   to the left-mos
13740 74 0a 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20  t.SELECT in the 
13750 63 6f 6d 70 6f 75 6e 64 2e 20 20 49 66 20 61 20  compound.  If a 
13760 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
13770 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
13780 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 0a 74 68  .  Otherwise,.th
13790 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
137a0 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
137b0 69 65 64 2e 20 20 54 68 69 73 20 63 6f 6e 74 69  ied.  This conti
137c0 6e 75 65 73 20 75 6e 74 69 6c 20 61 20 6d 61 74  nues until a mat
137d0 63 68 0a 69 73 20 66 6f 75 6e 64 2e 20 20 45 61  ch.is found.  Ea
137e0 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f  ch term of the O
137f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
13800 73 20 70 72 6f 63 65 73 73 65 64 20 73 65 70 61  s processed sepa
13810 72 61 74 65 6c 79 20 0a 61 6e 64 20 6d 61 79 20  rately .and may 
13820 63 6f 6d 65 20 66 72 6f 6d 20 64 69 66 66 65 72  come from differ
13830 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61 74 65  ent SELECT state
13840 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d  ments in the com
13850 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  pound.</p>..<p>T
13860 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
13870 70 6c 61 63 65 73 20 61 6e 20 75 70 70 65 72 20  places an upper 
13880 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d  bound on the num
13890 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75  ber of rows.retu
138a0 72 6e 65 64 20 69 6e 20 74 68 65 20 72 65 73 75  rned in the resu
138b0 6c 74 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20  lt.  A negative 
138c0 4c 49 4d 49 54 20 69 6e 64 69 63 61 74 65 73 20  LIMIT indicates 
138d0 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a  no upper bound..
138e0 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46  The optional OFF
138f0 53 45 54 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49  SET following LI
13900 4d 49 54 20 73 70 65 63 69 66 69 65 73 20 68 6f  MIT specifies ho
13910 77 20 6d 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73  w many.rows to s
13920 6b 69 70 20 61 74 20 74 68 65 20 62 65 67 69 6e  kip at the begin
13930 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75  ning of the resu
13940 6c 74 20 73 65 74 2e 0a 49 6e 20 61 20 63 6f 6d  lt set..In a com
13950 70 6f 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65  pound query, the
13960 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61   LIMIT clause ma
13970 79 20 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e  y only appear on
13980 20 74 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43   the.final SELEC
13990 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65  T statement..The
139a0 20 6c 69 6d 69 74 20 69 73 20 61 70 70 6c 69 65   limit is applie
139b0 64 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  d to the entire 
139c0 71 75 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65  query not.to the
139d0 20 69 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45   individual SELE
139e0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  CT statement to 
139f0 77 68 69 63 68 20 69 74 20 69 73 20 61 74 74 61  which it is atta
13a00 63 68 65 64 2e 0a 4e 6f 74 65 20 74 68 61 74 20  ched..Note that 
13a10 69 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65  if the OFFSET ke
13a20 79 77 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e  yword is used in
13a30 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
13a40 65 2c 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69  e, then the.limi
13a50 74 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  t is the first n
13a60 75 6d 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66  umber and the of
13a70 66 73 65 74 20 69 73 20 74 68 65 20 73 65 63 6f  fset is the seco
13a80 6e 64 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 61  nd number.  If a
13a90 0a 63 6f 6d 6d 61 20 69 73 20 75 73 65 64 20 69  .comma is used i
13aa0 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 4f 46  nstead of the OF
13ab0 46 53 45 54 20 6b 65 79 77 6f 72 64 2c 20 74 68  FSET keyword, th
13ac0 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 69 73  en the offset is
13ad0 20 74 68 65 0a 66 69 72 73 74 20 6e 75 6d 62 65   the.first numbe
13ae0 72 20 61 6e 64 20 74 68 65 20 6c 69 6d 69 74 20  r and the limit 
13af0 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75  is the second nu
13b00 6d 62 65 72 2e 20 20 54 68 69 73 20 73 65 65 6d  mber.  This seem
13b10 69 6e 67 0a 63 6f 6e 74 72 61 64 69 74 69 6f 6e  ing.contradition
13b20 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 20   is intentional 
13b30 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63  - it maximizes c
13b40 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
13b50 68 20 6c 65 67 61 63 79 0a 53 51 4c 20 64 61 74  h legacy.SQL dat
13b60 61 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 3c  abase systems..<
13b70 2f 70 3e 0a 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75  /p>..<p>A compou
13b80 6e 64 20 53 45 4c 45 43 54 20 69 73 20 66 6f 72  nd SELECT is for
13b90 6d 65 64 20 66 72 6f 6d 20 74 77 6f 20 6f 72 20  med from two or 
13ba0 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  more simple SELE
13bb0 43 54 73 20 63 6f 6e 6e 65 63 74 65 64 0a 62 79  CTs connected.by
13bc0 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65 72   one of the oper
13bd0 61 74 6f 72 73 20 55 4e 49 4f 4e 2c 20 55 4e 49  ators UNION, UNI
13be0 4f 4e 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43  ON ALL, INTERSEC
13bf0 54 2c 20 6f 72 20 45 58 43 45 50 54 2e 20 20 49  T, or EXCEPT.  I
13c00 6e 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  n.a compound SEL
13c10 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e  ECT, all the con
13c20 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73  stituent SELECTs
13c30 20 6d 75 73 74 20 73 70 65 63 69 66 79 20 74 68   must specify th
13c40 65 0a 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66  e.same number of
13c50 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e   result columns.
13c60 20 20 54 68 65 72 65 20 6d 61 79 20 62 65 20 6f    There may be o
13c70 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 4f 52 44  nly a single ORD
13c80 45 52 20 42 59 0a 63 6c 61 75 73 65 20 61 74 20  ER BY.clause at 
13c90 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63  the end of the c
13ca0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20  ompound SELECT. 
13cb0 20 54 68 65 20 55 4e 49 4f 4e 20 61 6e 64 20 55   The UNION and U
13cc0 4e 49 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61 74 6f  NION ALL.operato
13cd0 72 73 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 72  rs combine the r
13ce0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45  esults of the SE
13cf0 4c 45 43 54 73 20 74 6f 20 74 68 65 20 72 69 67  LECTs to the rig
13d00 68 74 20 61 6e 64 20 6c 65 66 74 20 69 6e 74 6f  ht and left into
13d10 0a 61 20 73 69 6e 67 6c 65 20 62 69 67 20 74 61  .a single big ta
13d20 62 6c 65 2e 20 20 54 68 65 20 64 69 66 66 65 72  ble.  The differ
13d30 65 6e 63 65 20 69 73 20 74 68 61 74 20 69 6e 20  ence is that in 
13d40 55 4e 49 4f 4e 20 61 6c 6c 20 72 65 73 75 6c 74  UNION all result
13d50 20 72 6f 77 73 0a 61 72 65 20 64 69 73 74 69 6e   rows.are distin
13d60 63 74 20 77 68 65 72 65 20 69 6e 20 55 4e 49 4f  ct where in UNIO
13d70 4e 20 41 4c 4c 20 74 68 65 72 65 20 6d 61 79 20  N ALL there may 
13d80 62 65 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 54  be duplicates..T
13d90 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65  he INTERSECT ope
13da0 72 61 74 6f 72 20 74 61 6b 65 73 20 74 68 65 20  rator takes the 
13db0 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
13dc0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
13dd0 68 65 0a 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he.left and righ
13de0 74 20 53 45 4c 45 43 54 73 2e 20 20 45 58 43 45  t SELECTs.  EXCE
13df0 50 54 20 74 61 6b 65 73 20 74 68 65 20 72 65 73  PT takes the res
13e00 75 6c 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45  ult of left SELE
13e10 43 54 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e  CT after.removin
13e20 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  g the results of
13e30 20 74 68 65 20 72 69 67 68 74 20 53 45 4c 45 43   the right SELEC
13e40 54 2e 20 20 57 68 65 6e 20 74 68 72 65 65 20 6f  T.  When three o
13e50 72 20 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a 61  r more SELECTs.a
13e60 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74  re connected int
13e70 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68  o a compound, th
13e80 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
13e90 66 74 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e  ft to right.</p>
13ea0 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
13eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ef0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
13f00 55 50 44 41 54 45 20 75 70 64 61 74 65 20 7b 55  UPDATE update {U
13f10 50 44 41 54 45 20 55 50 44 41 54 45 73 7d 0a 0a  PDATE UPDATEs}..
13f20 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70  BubbleDiagram up
13f30 64 61 74 65 2d 73 74 6d 74 20 31 0a 42 75 62 62  date-stmt 1.Bubb
13f40 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66  leDiagram qualif
13f50 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c  ied-table-name.<
13f60 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 55 50  /tcl>..<p>The UP
13f70 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
13f80 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65  s used to change
13f90 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 63 6f   the value of co
13fa0 6c 75 6d 6e 73 20 69 6e 20 0a 73 65 6c 65 63 74  lumns in .select
13fb0 65 64 20 72 6f 77 73 20 6f 66 20 61 20 74 61 62  ed rows of a tab
13fc0 6c 65 2e 20 20 45 61 63 68 20 61 73 73 69 67 6e  le.  Each assign
13fd0 6d 65 6e 74 20 69 6e 20 61 6e 20 55 50 44 41 54  ment in an UPDAT
13fe0 45 20 73 70 65 63 69 66 69 65 73 0a 61 20 63 6f  E specifies.a co
13ff0 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65  lumn name to the
14000 20 6c 65 66 74 20 6f 66 20 74 68 65 20 65 71 75   left of the equ
14010 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 6e 20  als sign and an 
14020 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73  arbitrary expres
14030 73 69 6f 6e 0a 74 6f 20 74 68 65 20 72 69 67 68  sion.to the righ
14040 74 2e 20 20 54 68 65 20 65 78 70 72 65 73 73 69  t.  The expressi
14050 6f 6e 73 20 6d 61 79 20 75 73 65 20 74 68 65 20  ons may use the 
14060 76 61 6c 75 65 73 20 6f 66 20 6f 74 68 65 72 20  values of other 
14070 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c 20 65 78 70  columns..All exp
14080 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61  ressions are eva
14090 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e  luated before an
140a0 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72  y assignments ar
140b0 65 20 6d 61 64 65 2e 0a 41 20 57 48 45 52 45 20  e made..A WHERE 
140c0 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73  clause can be us
140d0 65 64 20 74 6f 20 72 65 73 74 72 69 63 74 20 77  ed to restrict w
140e0 68 69 63 68 20 72 6f 77 73 20 61 72 65 20 75 70  hich rows are up
140f0 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  dated.</p>..<p>T
14100 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
14110 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
14120 77 73 20 74 68 65 20 73 70 65 63 69 66 69 63 61  ws the specifica
14130 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72  tion of an alter
14140 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e  native.constrain
14150 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  t conflict resol
14160 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
14170 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74 68  to use during th
14180 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a  is one command..
14190 53 65 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20  See the section 
141a0 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c  titled.[ON CONFL
141b0 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
141c0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
141d0 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 53 51 4c 69  </p>..<p>If SQLi
141e0 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68  te is built with
141f0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
14200 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
14210 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65  E_LIMIT].compile
14220 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65  -time option the
14230 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20  n the syntax of 
14240 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
14250 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64  ment is extended
14260 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f  .with optional O
14270 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
14280 54 20 63 6c 61 75 73 65 73 20 61 73 20 66 6f 6c  T clauses as fol
14290 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  lows:</p>..<tcl>
142a0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70  BubbleDiagram up
142b0 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  date-stmt-limite
142c0 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  d</tcl>..<p>The 
142d0 6f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63  optional LIMIT c
142e0 6c 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65  lause can be use
142f0 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  d to limit the n
14300 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 6d 6f  umber of.rows mo
14310 64 69 66 65 64 2c 20 61 6e 64 20 74 68 65 72 65  difed, and there
14320 62 79 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a  by limit the siz
14330 65 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63  e of the transac
14340 74 69 6f 6e 2e 0a 54 68 65 20 4f 52 44 45 52 20  tion..The ORDER 
14350 42 59 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  BY clause is use
14360 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d  d only to determ
14370 69 6e 65 20 77 68 69 63 68 20 72 6f 77 73 20 66  ine which rows f
14380 61 6c 6c 0a 77 69 74 68 69 6e 20 74 68 65 20 4c  all.within the L
14390 49 4d 49 54 2e 20 20 54 68 65 20 6f 72 64 65 72  IMIT.  The order
143a0 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
143b0 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61  re modified is a
143c0 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20  rbitrary.and is 
143d0 6e 6f 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62  not determined b
143e0 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  y the ORDER BY c
143f0 6c 61 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lause.</p>..<tcl
14400 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
14410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14450 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20  .Section VACUUM 
14460 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42  vacuum VACUUM..B
14470 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63  ubbleDiagram vac
14480 75 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  uum-stmt 1.</tcl
14490 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 6e 20 6f 62  >..<p>When an ob
144a0 6a 65 63 74 20 28 74 61 62 6c 65 2c 20 69 6e 64  ject (table, ind
144b0 65 78 2c 20 6f 72 20 74 72 69 67 67 65 72 29 20  ex, or trigger) 
144c0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
144d0 74 68 65 20 0a 64 61 74 61 62 61 73 65 2c 20 69  the .database, i
144e0 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20  t leaves behind 
144f0 65 6d 70 74 79 20 73 70 61 63 65 2e 20 20 54 68  empty space.  Th
14500 69 73 20 6d 61 6b 65 73 20 74 68 65 20 64 61 74  is makes the dat
14510 61 62 61 73 65 20 0a 66 69 6c 65 20 6c 61 72 67  abase .file larg
14520 65 72 20 74 68 61 6e 20 69 74 20 6e 65 65 64 73  er than it needs
14530 20 74 6f 20 62 65 2c 20 62 75 74 20 63 61 6e 20   to be, but can 
14540 73 70 65 65 64 20 75 70 20 69 6e 73 65 72 74 73  speed up inserts
14550 2e 20 20 49 6e 20 74 69 6d 65 20 0a 69 6e 73 65  .  In time .inse
14560 72 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20  rts and deletes 
14570 63 61 6e 20 6c 65 61 76 65 20 74 68 65 20 64 61  can leave the da
14580 74 61 62 61 73 65 20 66 69 6c 65 20 73 74 72 75  tabase file stru
14590 63 74 75 72 65 20 66 72 61 67 6d 65 6e 74 65 64  cture fragmented
145a0 2c 20 0a 77 68 69 63 68 20 73 6c 6f 77 73 20 64  , .which slows d
145b0 6f 77 6e 20 64 69 73 6b 20 61 63 63 65 73 73 20  own disk access 
145c0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
145d0 63 6f 6e 74 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  contents.</p>..<
145e0 70 3e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  p>The VACUUM com
145f0 6d 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20  mand cleans.the 
14600 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 62 79  main database by
14610 20 63 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e   copying its con
14620 74 65 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f  tents to a tempo
14630 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  rary database fi
14640 6c 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e  le and .reloadin
14650 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  g the original d
14660 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f  atabase file fro
14670 6d 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  m the copy.  Thi
14680 73 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72  s eliminates .fr
14690 65 65 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e  ee pages,  align
146a0 73 20 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20  s table data to 
146b0 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61  be contiguous, a
146c0 6e 64 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65  nd otherwise cle
146d0 61 6e 73 20 0a 75 70 20 74 68 65 20 64 61 74 61  ans .up the data
146e0 62 61 73 65 20 66 69 6c 65 20 73 74 72 75 63 74  base file struct
146f0 75 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ure.</p>..<p>The
14700 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
14710 6d 61 79 20 63 68 61 6e 67 65 20 74 68 65 20 0a  may change the .
14720 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 63 72  <a href="lang_cr
14730 65 61 74 65 74 61 62 6c 65 2e 68 74 6d 6c 23 72  eatetable.html#r
14740 6f 77 69 64 22 3e 52 4f 57 49 44 3c 2f 61 3e 20  owid">ROWID</a> 
14750 6f 66 20 65 6e 74 69 72 65 73 20 69 6e 20 74 61  of entires in ta
14760 62 6c 65 73 20 74 68 61 74 20 64 6f 0a 6e 6f 74  bles that do.not
14770 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69   have an explici
14780 74 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  t INTEGER PRIMAR
14790 59 20 4b 45 59 2e 3c 2f 70 3e 0a 0a 3c 70 3e 56  Y KEY.</p>..<p>V
147a0 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73  ACUUM only works
147b0 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   on the main dat
147c0 61 62 61 73 65 2e 0a 49 74 20 69 73 20 6e 6f 74  abase..It is not
147d0 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43   possible to VAC
147e0 55 55 4d 20 61 6e 20 61 74 74 61 63 68 65 64 20  UUM an attached 
147f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f  database file.</
14800 70 3e 0a 0a 3c 70 3e 54 68 65 20 56 41 43 55 55  p>..<p>The VACUU
14810 4d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66  M command will f
14820 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20  ail if there is 
14830 61 6e 20 61 63 74 69 76 65 20 74 72 61 6e 73 61  an active transa
14840 63 74 69 6f 6e 2e 0a 54 68 65 20 56 41 43 55 55  ction..The VACUU
14850 4d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 20 6e  M command is a n
14860 6f 2d 6f 70 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f  o-op for in-memo
14870 72 79 20 64 61 74 61 62 61 73 65 73 2e 3c 2f 70  ry databases.</p
14880 3e 0a 0a 3c 70 3e 41 73 20 6f 66 20 53 51 4c 69  >..<p>As of SQLi
14890 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20  te version 3.1, 
148a0 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74  an alternative t
148b0 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43 55  o using the VACU
148c0 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75  UM command.is au
148d0 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20  to-vacuum mode, 
148e0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
148f0 65 20 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  e .[auto_vacuum]
14900 20 70 72 61 67 6d 61 2e 20 20 57 68 65 6e 20 5b   pragma.  When [
14910 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20  auto_vacuum] is 
14920 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61  enabled for a da
14930 74 61 62 61 73 65 2c 20 0a 6c 61 72 67 65 20 64  tabase, .large d
14940 65 6c 65 74 65 73 20 63 61 75 73 65 0a 74 68 65  eletes cause.the
14950 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
14960 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 73 68  abase file to sh
14970 72 69 6e 6b 2e 20 20 48 6f 77 65 76 65 72 2c 20  rink.  However, 
14980 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 61 6c  [auto_vacuum].al
14990 73 6f 20 63 61 75 73 65 73 20 65 78 63 65 73 73  so causes excess
149a0 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 20 6f   fragmentation o
149b0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
149c0 69 6c 65 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f  ile.  And [auto_
149d0 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74  vacuum].does not
149e0 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c   compact partial
149f0 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20  ly filled pages 
14a00 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
14a10 61 73 20 56 41 43 55 55 4d 0a 64 6f 65 73 2e 0a  as VACUUM.does..
14a20 3c 2f 70 3e 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  </p>.<tcl>.#####
14a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a70 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
14a80 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69  n {INDEXED BY} i
14a90 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58  ndexedby {{INDEX
14aa0 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45  ED BY} {NOT INDE
14ab0 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70  XED}}..</tcl>.<p
14ac0 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  >The INDEXED BY 
14ad0 70 68 72 61 73 65 20 69 73 20 61 20 53 51 4c 20  phrase is a SQL 
14ae0 65 78 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20  extension found 
14af0 6f 6e 6c 79 20 69 6e 20 53 51 4c 69 74 65 20 77  only in SQLite w
14b00 68 69 63 68 20 63 61 6e 0a 62 65 20 75 73 65 64  hich can.be used
14b10 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
14b20 74 68 65 20 63 6f 72 72 65 63 74 20 69 6e 64 69  the correct indi
14b30 63 65 73 20 61 72 65 20 62 65 69 6e 67 20 75 73  ces are being us
14b40 65 64 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d  ed on a [DELETE]
14b50 2c 0a 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b  ,.[SELECT], or [
14b60 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e  UPDATE] statemen
14b70 74 2e 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42  t..The INDEXED B
14b80 59 20 70 68 72 61 73 65 20 61 6c 77 61 79 73 20  Y phrase always 
14b90 66 6f 6c 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65  follows the name
14ba0 20 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61 74   of a table that
14bb0 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20   SQLite will.be 
14bc0 72 65 61 64 69 6e 67 2e 20 20 54 68 65 20 49 4e  reading.  The IN
14bd0 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
14be0 63 61 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74  can be seen in t
14bf0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e  he following syn
14c00 74 61 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70  tax.diagrams:</p
14c10 3e 0a 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44  >..<tcl>.BubbleD
14c20 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64  iagram qualified
14c30 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62  -table-name.Bubb
14c40 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65  leDiagram single
14c50 2d 73 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a  -source.</tcl>..
14c60 3c 70 3e 54 68 65 20 22 49 4e 44 45 58 45 44 20  <p>The "INDEXED 
14c70 42 59 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20 63  BY index-name" c
14c80 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
14c90 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69  that the named i
14ca0 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65  ndex.must be use
14cb0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f  d in order to lo
14cc0 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20  ok up values on 
14cd0 74 68 65 20 70 72 65 63 65 65 64 69 6e 67 20 74  the preceeding t
14ce0 61 62 6c 65 2e 0a 49 66 20 69 6e 64 65 78 2d 6e  able..If index-n
14cf0 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ame does not exi
14d00 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20  st or cannot be 
14d10 75 73 65 64 20 66 6f 72 20 74 68 65 20 71 75 65  used for the que
14d20 72 79 2c 20 74 68 65 6e 0a 74 68 65 20 70 72 65  ry, then.the pre
14d30 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  paration of the 
14d40 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61  SQL statement fa
14d50 69 6c 73 2e 0a 54 68 65 20 22 4e 4f 54 20 49 4e  ils..The "NOT IN
14d60 44 45 58 45 44 22 20 63 6c 61 75 73 65 20 73 70  DEXED" clause sp
14d70 65 63 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20  ecifies that no 
14d80 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75  index shall be u
14d90 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69  sed when.accessi
14da0 6e 67 20 74 68 65 20 70 72 65 63 65 65 64 69 6e  ng the preceedin
14db0 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69  g table, includi
14dc0 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63  ng implied indic
14dd0 65 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49  es create by.UNI
14de0 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20  QUE and PRIMARY 
14df0 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  KEY constraints.
14e00 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49    However, the I
14e10 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
14e20 45 59 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20  EY.can still be 
14e30 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  used to look up 
14e40 65 6e 74 72 69 65 73 20 65 76 65 6e 20 77 68 65  entries even whe
14e50 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  n "NOT INDEXED" 
14e60 69 73 20 73 70 65 63 69 66 69 65 64 2e 3c 2f 70  is specified.</p
14e70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64  >..<p>Some SQL d
14e80 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
14e90 70 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e  provide non-stan
14ea0 64 61 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68  dard "hint" mech
14eb0 61 6e 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e  anisms which.can
14ec0 20 62 65 20 75 73 65 64 20 74 6f 20 67 69 76 65   be used to give
14ed0 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
14ee0 69 7a 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74  izer clues about
14ef0 20 77 68 61 74 20 69 6e 64 69 63 65 73 20 69 74   what indices it
14f00 20 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20   should.use for 
14f10 61 20 70 61 72 74 69 63 75 6c 61 72 20 73 74 61  a particular sta
14f20 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44  tement.  The IND
14f30 45 58 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20  EX BY clause of 
14f40 53 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e  SQLite is .<em>n
14f50 6f 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e  ot</em> a hintin
14f60 67 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20  g mechanism and 
14f70 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  it should not be
14f80 20 75 73 65 64 20 61 73 20 73 75 63 68 2e 0a 54   used as such..T
14f90 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
14fa0 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69  ause does not gi
14fb0 76 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ve the optimizer
14fc0 20 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69   hints about whi
14fd0 63 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b  ch index.to use;
14fe0 20 69 74 20 67 69 76 65 73 20 74 68 65 20 6f 70   it gives the op
14ff0 74 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72  timizer a requir
15000 65 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69  ement of which i
15010 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a 49 66 20  ndex to use..If 
15020 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
15030 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f  zer is unable to
15040 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73   use the index s
15050 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a  pecified by the.
15060 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c  INDEX BY clause,
15070 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   then the query 
15080 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
15090 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
150a0 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  >The INDEXED BY 
150b0 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f  clause is <em>no
150c0 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20  t</em> intended 
150d0 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e  for use in tunin
150e0 67 0a 74 68 65 20 70 72 65 66 6f 72 6d 61 6e 63  g.the preformanc
150f0 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54  e of a query.  T
15100 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65  he intent of the
15110 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
15120 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61  se is.to raise a
15130 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20   run-time error 
15140 69 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e  if a schema chan
15150 67 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70  ge, such as drop
15160 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67  ping or.creating
15170 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65   an index, cause
15180 73 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  s the query plan
15190 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73   for a time-sens
151a0 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63  itive query.to c
151b0 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45  hange.  The INDE
151c0 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
151d0 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c   designed to hel
151e0 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72  p detect.undesir
151f0 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20  able query plan 
15200 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72  changes during r
15210 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e  egression testin
15220 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72  g..Developers ar
15230 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20  e admonished to 
15240 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20  omit all use of 
15250 49 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e  INDEXED BY durin
15260 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65  g.application de
15270 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61  sign, implementa
15280 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61  tion, testing, a
15290 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49  nd tuning.  If.I
152a0 4e 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20  NDEXED BY is to 
152b0 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20  be used at all, 
152c0 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73  it should be ins
152d0 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72  erted at the ver
152e0 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76  y.end of the dev
152f0 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73  elopment process
15300 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64   when "locking d
15310 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f  own" a design.</
15320 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
15330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15370 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74  #######.# A list
15380 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41   of keywords.  A
15390 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73   asterisk occurs
153a0 20 61 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f   after the keywo
153b0 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23  rd if it is on.#
153c0 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69   the fallback li
153d0 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72  st..#.set keywor
153e0 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a  d_list [lsort {.
153f0 20 20 20 41 42 4f 52 54 2a 0a 20 20 20 41 44 44     ABORT*.   ADD
15400 0a 20 20 20 41 46 54 45 52 2a 0a 20 20 20 41 4c  .   AFTER*.   AL
15410 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e  L.   ALTER.   AN
15420 41 4c 59 5a 45 2a 0a 20 20 20 41 4e 44 0a 20 20  ALYZE*.   AND.  
15430 20 41 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41   AS.   ASC*.   A
15440 54 54 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e  TTACH*.   AUTOIN
15450 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52  CREMENT.   BEFOR
15460 45 2a 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20  E*.   BEGIN*.   
15470 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20  BETWEEN.   BY.  
15480 20 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53   CASCADE*.   CAS
15490 45 0a 20 20 20 43 41 53 54 2a 0a 20 20 20 43 48  E.   CAST*.   CH
154a0 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20  ECK.   COLLATE. 
154b0 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d    COLUMN.   COMM
154c0 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 2a 0a  IT.   CONFLICT*.
154d0 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20     CONSTRAINT.  
154e0 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53   CREATE.   CROSS
154f0 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45  .   CURRENT_DATE
15500 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  *.   CURRENT_TIM
15510 45 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  E*.   CURRENT_TI
15520 4d 45 53 54 41 4d 50 2a 0a 20 20 20 44 41 54 41  MESTAMP*.   DATA
15530 42 41 53 45 2a 0a 20 20 20 44 45 46 41 55 4c 54  BASE*.   DEFAULT
15540 0a 20 20 20 44 45 46 45 52 52 45 44 2a 0a 20 20  .   DEFERRED*.  
15550 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44   DEFERRABLE.   D
15560 45 4c 45 54 45 0a 20 20 20 44 45 53 43 2a 0a 20  ELETE.   DESC*. 
15570 20 20 44 45 54 41 43 48 2a 0a 20 20 20 44 49 53    DETACH*.   DIS
15580 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20  TINCT.   DROP.  
15590 20 45 4e 44 2a 0a 20 20 20 45 41 43 48 2a 0a 20   END*.   EACH*. 
155a0 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45    ELSE.   ESCAPE
155b0 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45 58  .   EXCEPT.   EX
155c0 43 4c 55 53 49 56 45 2a 0a 20 20 20 45 58 49 53  CLUSIVE*.   EXIS
155d0 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 2a 0a 20  TS.   EXPLAIN*. 
155e0 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f 52 2a 0a    FAIL*.   FOR*.
155f0 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52     FOREIGN.   FR
15600 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c  OM.   FULL.   GL
15610 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a 20 20 20  OB*.   GROUP.   
15620 48 41 56 49 4e 47 0a 20 20 20 49 46 2a 0a 20 20  HAVING.   IF*.  
15630 20 49 47 4e 4f 52 45 2a 0a 20 20 20 49 4d 4d 45   IGNORE*.   IMME
15640 44 49 41 54 45 2a 0a 20 20 20 49 4e 0a 20 20 20  DIATE*.   IN.   
15650 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44  INDEX.   INDEXED
15660 2a 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a  *.   INITIALLY*.
15670 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45     INNER.   INSE
15680 52 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20  RT.   INSTEAD*. 
15690 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49    INTERSECT.   I
156a0 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e  NTO.   IS.   ISN
156b0 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b  ULL.   JOIN.   K
156c0 45 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c  EY*.   LEFT.   L
156d0 49 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20  IKE*.   LIMIT.  
156e0 20 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52   MATCH*.   NATUR
156f0 41 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54  AL.   NOT.   NOT
15700 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20  NULL.   NULL.   
15710 4f 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20  OF*.   OFFSET*. 
15720 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52    ON.   OR.   OR
15730 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20  DER.   OUTER.   
15740 50 4c 41 4e 2a 0a 20 20 20 50 52 41 47 4d 41 2a  PLAN*.   PRAGMA*
15750 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51  .   PRIMARY.   Q
15760 55 45 52 59 2a 0a 20 20 20 52 41 49 53 45 2a 0a  UERY*.   RAISE*.
15770 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
15780 20 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44   REGEXP.   REIND
15790 45 58 2a 0a 20 20 20 52 45 4e 41 4d 45 2a 0a 20  EX*.   RENAME*. 
157a0 20 20 52 45 50 4c 41 43 45 2a 0a 20 20 20 52 45    REPLACE*.   RE
157b0 53 54 52 49 43 54 2a 0a 20 20 20 52 49 47 48 54  STRICT*.   RIGHT
157c0 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20  .   ROLLBACK.   
157d0 52 4f 57 2a 0a 20 20 20 53 45 4c 45 43 54 0a 20  ROW*.   SELECT. 
157e0 20 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20    SET.   TABLE. 
157f0 20 20 54 45 4d 50 2a 0a 20 20 20 54 45 4d 50 4f    TEMP*.   TEMPO
15800 52 41 52 59 2a 0a 20 20 20 54 48 45 4e 0a 20 20  RARY*.   THEN.  
15810 20 54 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49   TO.   TRANSACTI
15820 4f 4e 0a 20 20 20 54 52 49 47 47 45 52 2a 0a 20  ON.   TRIGGER*. 
15830 20 20 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55    UNION.   UNIQU
15840 45 0a 20 20 20 55 50 44 41 54 45 0a 20 20 20 55  E.   UPDATE.   U
15850 53 49 4e 47 0a 20 20 20 56 41 43 55 55 4d 2a 0a  SING.   VACUUM*.
15860 20 20 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45     VALUES.   VIE
15870 57 2a 0a 20 20 20 56 49 52 54 55 41 4c 2a 0a 20  W*.   VIRTUAL*. 
15880 20 20 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a    WHEN.   WHERE.
15890 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49  }]..hd_puts {<DI
158a0 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63  V class="pdf_sec
158b0 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20  tion">}.Section 
158c0 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73  {SQLite Keywords
158d0 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 53 51 4c  } keywords {{SQL
158e0 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b   keyword} {SQL k
158f0 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74  eywords}}.hd_put
15900 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c  s {</DIV>}.</tcl
15910 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74  >..<p>The SQL st
15920 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65 73  andard specifies
15930 20 61 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f   a huge number o
15940 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68  f keywords which
15950 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64   may not.be used
15960 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66   as the names of
15970 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73   tables, indices
15980 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62  , columns, datab
15990 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e  ases, user-defin
159a0 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f  ed.functions, co
159b0 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61  llations, virtua
159c0 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c  l table modules,
159d0 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61   or any other na
159e0 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20  med object..The 
159f0 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73  list of keywords
15a00 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74   is so long that
15a10 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20   few people can 
15a20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c  remember them al
15a30 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20  l..For most SQL 
15a40 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73  code, your safes
15a50 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65  t bet is to neve
15a60 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73  r use any Englis
15a70 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20  h language.word 
15a80 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  as the name of a
15a90 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62   user-defined ob
15aa0 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  ject.</p>..<p>If
15ab0 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65   you want to use
15ac0 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20   a keyword as a 
15ad0 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74  name, you need t
15ae0 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65  o quote it.  The
15af0 72 65 0a 61 72 65 20 74 68 72 65 65 20 77 61 79  re.are three way
15b00 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79  s of quoting key
15b10 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a  words in SQLite:
15b20 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b  </p>..<p>.<block
15b30 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
15b40 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
15b50 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64  top"><b>'keyword
15b60 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  '</b></td><td wi
15b70 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09  dth="20"></td>..
15b80 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e  <td>A keyword in
15b90 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69   single quotes i
15ba0 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
15bb0 20 61 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e   a literal strin
15bc0 67 0a 20 20 20 20 20 20 20 20 69 66 20 69 74 20  g.        if it 
15bd0 6f 63 63 75 72 73 20 69 6e 20 61 20 63 6f 6e 74  occurs in a cont
15be0 65 78 74 20 77 68 65 72 65 20 61 20 73 74 72 69  ext where a stri
15bf0 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20 61 6c  ng literal is al
15c00 6c 6f 77 65 64 2c 20 6f 74 68 65 72 77 69 73 65  lowed, otherwise
15c10 0a 09 69 74 20 69 73 20 75 6e 64 65 72 73 74 6f  ..it is understo
15c20 6f 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66  od as an identif
15c30 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c  ier.</td></tr>.<
15c40 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
15c50 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64  top"><b>"keyword
15c60 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  "</b></td><td></
15c70 74 64 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f  td>..<td>A keywo
15c80 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f  rd in double-quo
15c90 74 65 73 20 69 73 20 69 6e 74 65 72 70 72 65 74  tes is interpret
15ca0 65 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66  ed as an identif
15cb0 69 65 72 20 69 66 0a 20 20 20 20 20 20 20 20 69  ier if.        i
15cc0 74 20 6d 61 74 63 68 65 73 20 61 20 6b 6e 6f 77  t matches a know
15cd0 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 4f  n identifier.  O
15ce0 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 69  therwise it is i
15cf0 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 0a  nterpreted as a.
15d00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
15d10 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72  iteral.</td></tr
15d20 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
15d30 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b  n="top"><b>&#91;
15d40 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e  keyword&#93;</b>
15d50 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
15d60 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 65 6e  <td>A keyword en
15d70 63 6c 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65  closed in square
15d80 20 62 72 61 63 6b 65 74 73 20 69 73 20 61 6c 77   brackets is alw
15d90 61 79 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 61  ays understood a
15da0 73 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65  s.        an ide
15db0 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
15dc0 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
15dd0 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
15de0 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
15df0 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
15e00 53 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c  S Access and SQL
15e10 20 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69   Server and is i
15e20 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
15e30 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
15e40 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
15e50 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  ></tr>.</table>.
15e60 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f  </blockquote>.</
15e70 70 3e 0a 0a 3c 70 3e 51 75 6f 74 65 64 20 6b 65  p>..<p>Quoted ke
15e80 79 77 6f 72 64 73 20 61 72 65 20 75 6e 61 65 73  ywords are unaes
15e90 74 68 65 74 69 63 2e 0a 54 6f 20 68 65 6c 70 20  thetic..To help 
15ea0 79 6f 75 20 61 76 6f 69 64 20 74 68 65 6d 2c 20  you avoid them, 
15eb0 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 6d 61  SQLite allows ma
15ec0 6e 79 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 62  ny keywords to b
15ed0 65 20 75 73 65 64 20 75 6e 71 75 6f 74 65 64 0a  e used unquoted.
15ee0 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  as the names of 
15ef0 64 61 74 61 62 61 73 65 73 2c 20 74 61 62 6c 65  databases, table
15f00 73 2c 20 69 6e 64 69 63 65 73 2c 20 74 72 69 67  s, indices, trig
15f10 67 65 72 73 2c 20 76 69 65 77 73 2c 20 63 6f 6c  gers, views, col
15f20 75 6d 6e 73 2c 0a 75 73 65 72 2d 64 65 66 69 6e  umns,.user-defin
15f30 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f  ed functions, co
15f40 6c 6c 61 74 69 6f 6e 73 2c 20 61 74 74 61 63 68  llations, attach
15f50 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 61 6e  ed databases, an
15f60 64 20 76 69 72 74 75 61 6c 0a 66 75 6e 63 74 69  d virtual.functi
15f70 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0a 49 6e 20 74  on modules..In t
15f80 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f  he list of keywo
15f90 72 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  rds that follows
15fa0 2c 20 74 68 6f 73 65 20 74 68 61 74 20 63 61 6e  , those that can
15fb0 20 62 65 20 75 73 65 64 20 61 73 20 69 64 65 6e   be used as iden
15fc0 74 69 66 69 65 72 73 0a 61 72 65 20 73 68 6f 77  tifiers.are show
15fd0 6e 20 69 6e 20 61 6e 20 69 74 61 6c 69 63 20 66  n in an italic f
15fe0 6f 6e 74 2e 20 20 4b 65 79 77 6f 72 64 73 20 74  ont.  Keywords t
15ff0 68 61 74 20 6d 75 73 74 20 62 65 20 71 75 6f 74  hat must be quot
16000 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ed in order to b
16010 65 0a 75 73 65 64 20 61 73 20 69 64 65 6e 74 69  e.used as identi
16020 66 69 65 72 73 20 61 72 65 20 73 68 6f 77 6e 20  fiers are shown 
16030 69 6e 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70  in bold.</p>..<p
16040 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65  >.SQLite adds ne
16050 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20  w keywords from 
16060 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65  time to time whe
16070 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65  n it takes on ne
16080 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74  w features..So t
16090 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63  o prevent your c
160a0 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62  ode from being b
160b0 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20  roken by future 
160c0 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f  enhancements, yo
160d0 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c  u should.normall
160e0 79 20 71 75 6f 74 65 20 61 6e 79 20 69 6e 64 65  y quote any inde
160f0 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73 20  ntifier that is 
16100 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  an English langu
16110 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69  age word, even i
16120 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76  f.you do not hav
16130 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  e to..</p>..<p>.
16140 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
16150 65 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 63  e the keywords c
16160 75 72 72 65 6e 74 6c 79 20 72 65 63 6f 67 6e 69  urrently recogni
16170 7a 65 64 20 62 79 20 53 51 4c 69 74 65 3a 0a 3c  zed by SQLite:.<
16180 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
16190 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
161a0 31 30 30 25 22 20 63 6c 61 73 73 3d 22 70 64 66  100%" class="pdf
161b0 5f 6b 65 79 77 6f 72 64 73 22 3e 0a 3c 74 72 3e  _keywords">.<tr>
161c0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74  .<td align="left
161d0 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77  " valign="top" w
161e0 69 64 74 68 3d 22 32 30 25 22 3e 0a 0a 3c 74 63  idth="20%">..<tc
161f0 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74  l>.set n [llengt
16200 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d  h $keyword_list]
16210 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20  .set nCol 5.set 
16220 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b  nRow [expr {($n+
16230 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d  $nCol-1)/$nCol}]
16240 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68  .set i 0.foreach
16250 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c   word $keyword_l
16260 69 73 74 20 7b 0a 20 20 69 66 20 7b 5b 73 74 72  ist {.  if {[str
16270 69 6e 67 20 69 6e 64 65 78 20 24 77 6f 72 64 20  ing index $word 
16280 65 6e 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20 20 20  end]=="*"} {.   
16290 20 73 65 74 20 77 6f 72 64 20 5b 73 74 72 69 6e   set word [strin
162a0 67 20 72 61 6e 67 65 20 24 77 6f 72 64 20 30 20  g range $word 0 
162b0 65 6e 64 2d 31 5d 0a 20 20 20 20 73 65 74 20 66  end-1].    set f
162c0 6f 6e 74 20 69 0a 20 20 7d 20 65 6c 73 65 20 7b  ont i.  } else {
162d0 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20 62 0a  .    set font b.
162e0 20 20 7d 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e    }.  if {$i==$n
162f0 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75  Row} {.    hd_pu
16300 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  ts "</td><td val
16310 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67  ign=\"top\" alig
16320 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68  n=\"left\" width
16330 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73  =\"20%\">".    s
16340 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20  et i 1.  } else 
16350 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d  {.    incr i.  }
16360 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 24 66 6f  .  hd_puts "<$fo
16370 6e 74 3e 24 77 6f 72 64 3c 2f 24 66 6f 6e 74 3e  nt>$word</$font>
16380 3c 62 72 3e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  <br>".}.</tcl>.<
16390 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65  /td></tr></table
163a0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
163b0 3c 68 32 3e 53 70 65 63 69 61 6c 20 6e 61 6d 65  <h2>Special name
163c0 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66  s</h2>..<p>The f
163d0 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 6e 6f 74  ollowing are not
163e0 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
163f0 69 74 65 2c 20 62 75 74 20 61 72 65 20 75 73 65  ite, but are use
16400 64 20 61 73 20 6e 61 6d 65 73 20 6f 66 20 0a 73  d as names of .s
16410 79 73 74 65 6d 20 6f 62 6a 65 63 74 73 2e 20 20  ystem objects.  
16420 54 68 65 79 20 63 61 6e 20 62 65 20 75 73 65 64  They can be used
16430 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   as an identifie
16440 72 20 66 6f 72 20 61 20 64 69 66 66 65 72 65 6e  r for a differen
16450 74 20 0a 74 79 70 65 20 6f 66 20 6f 62 6a 65 63  t .type of objec
16460 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  t.</p>..<blockqu
16470 6f 74 65 20 63 6c 61 73 73 3d 22 70 64 66 5f 6b  ote class="pdf_k
16480 65 79 77 6f 72 64 73 22 3e 3c 62 3e 0a 20 20 5f  eywords"><b>.  _
16490 52 4f 57 49 44 5f 3c 62 72 3e 0a 20 20 4d 41 49  ROWID_<br>.  MAI
164a0 4e 3c 62 72 3e 0a 20 20 4f 49 44 3c 62 72 3e 0a  N<br>.  OID<br>.
164b0 20 20 52 4f 57 49 44 3c 62 72 3e 0a 20 20 53 51    ROWID<br>.  SQ
164c0 4c 49 54 45 5f 4d 41 53 54 45 52 3c 62 72 3e 0a  LITE_MASTER<br>.
164d0 20 20 53 51 4c 49 54 45 5f 53 45 51 55 45 4e 43    SQLITE_SEQUENC
164e0 45 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 54  E<br>.  SQLITE_T
164f0 45 4d 50 5f 4d 41 53 54 45 52 3c 62 72 3e 0a 20  EMP_MASTER<br>. 
16500 20 54 45 4d 50 3c 62 72 3e 0a 3c 2f 62 3e 3c 2f   TEMP<br>.</b></
16510 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a              blockquote>.