Documentation Source Text

Hex Artifact Content
Login

Artifact ada0129c1a8a50b32c0c281ddab48a646bc5f312:


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 6f 72 20 61  er the date or a
f1a0: 6c 74 65 72 20 74 68 65 20 69 6e 74 65 72 70 72  lter the interpr
f1b0: 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
f1c0: 61 74 65 2e 20 0a 54 68 65 20 61 76 61 69 6c 61  ate. .The availa
f1d0: 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72  ble modifiers ar
f1e0: 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70  e as follows.</p
f1f0: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e  >..<ol>.<li> NNN
f200: 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68   days.<li> NNN h
f210: 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69  ours.<li> NNN mi
f220: 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e  nutes.<li> NNN.N
f230: 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e  NNN seconds.<li>
f240: 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e   NNN months.<li>
f250: 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20   NNN years.<li> 
f260: 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c  start of month.<
f270: 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61  li> start of yea
f280: 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  r.<li> start of 
f290: 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79  day.<li> weekday
f2a0: 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63   N.<li> unixepoc
f2b0: 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65  h.<li> localtime
f2c0: 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e  .<li> utc .</ol>
f2d0: 0a 0a 3c 70 3e 54 68 65 20 66 69 72 73 74 20 73  ..<p>The first s
f2e0: 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20  ix modifiers (1 
f2f0: 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70  through 6) .simp
f300: 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63 69  ly add the speci
f310: 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74  fied amount of t
f320: 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65 20  ime to the date 
f330: 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68  .specified by th
f340: 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65  e preceding time
f350: 73 74 72 69 6e 67 2e 0a 4e 6f 74 65 20 74 68 61  string..Note tha
f360: 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d  t "&plusmn;NNN m
f370: 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20  onths" works by 
f380: 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72  rendering the or
f390: 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f  iginal date into
f3a0: 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20  .the YYYY-MM-DD 
f3b0: 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74  format, adding t
f3c0: 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74  he &plusmn;NNN t
f3d0: 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76  o the MM month v
f3e0: 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61  alue, then.norma
f3f0: 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c  lizing the resul
f400: 74 2e 20 20 54 68 75 73 2c 20 66 6f 72 20 65 78  t.  Thus, for ex
f410: 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20  ample, the data 
f420: 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66  2001-03-31 modif
f430: 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68  ied.by '+1 month
f440: 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c  ' initially yiel
f450: 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62  ds 2001-04-31, b
f460: 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61  ut April only ha
f470: 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65  s 30 days.so the
f480: 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69   date is normali
f490: 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30  zed to 2001-05-0
f4a0: 31 2e 20 20 41 20 73 69 6d 69 6c 61 72 20 65 66  1.  A similar ef
f4b0: 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
f4c0: 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
f4d0: 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
f4e0: 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
f4f0: 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
f500: 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
f510: 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
f520: 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
f530: 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   four.</p>..<p>T
f540: 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f  he "start of" mo
f550: 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f 75  difiers (7 throu
f560: 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65 20  gh 9) shift the 
f570: 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a  date backwards .
f580: 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
f590: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
f5a0: 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64  month, year or d
f5b0: 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ay.</p>..<p>The 
f5c0: 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66 69  "weekday" modifi
f5d0: 65 72 20 61 64 76 61 6e 63 65 73 20 74 68 65 20  er advances the 
f5e0: 64 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f 20  date forward to 
f5f0: 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a 77  the next date .w
f600: 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61 79  here the weekday
f610: 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75   number is N. Su
f620: 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61  nday is 0, Monda
f630: 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20 66  y is 1, and so f
f640: 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  orth.</p>..<p>Th
f650: 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
f660: 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79  difier (11) only
f670: 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d   works if it imm
f680: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
f690: 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69   .a timestring i
f6a0: 6e 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  n the DDDDDDDDDD
f6b0: 20 66 6f 72 6d 61 74 2e 20 0a 54 68 69 73 20 6d   format. .This m
f6c0: 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74  odifier causes t
f6d0: 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f  he DDDDDDDDDD to
f6e0: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
f6f0: 6e 6f 74 20 0a 61 73 20 61 20 6a 75 6c 69 61 6e  not .as a julian
f700: 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69   day number as i
f710: 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64  t normally would
f720: 20 62 65 2c 20 62 75 74 20 61 73 0a 3c 61 20 68   be, but as.<a h
f730: 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77  ref="http://en.w
f740: 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
f750: 69 2f 55 6e 69 78 5f 74 69 6d 65 22 3e 55 6e 69  i/Unix_time">Uni
f760: 78 20 54 69 6d 65 3c 2f 61 3e 20 2d 20 74 68 65  x Time</a> - the
f770: 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f   .number of seco
f780: 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e 3c  nds since 1970.<
f790: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 6c 6f 63  /p>..<p>The "loc
f7a0: 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72  altime" modifier
f7b0: 20 28 31 32 29 20 61 64 6a 75 73 74 73 20 74 68   (12) adjusts th
f7c0: 65 20 70 72 65 76 69 6f 75 73 20 74 69 6d 65 0a  e previous time.
f7d0: 73 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69  string so that i
f7e0: 74 20 64 69 73 70 6c 61 79 73 20 74 68 65 20 63  t displays the c
f7f0: 6f 72 72 65 63 74 20 6c 6f 63 61 6c 20 74 69 6d  orrect local tim
f800: 65 2e 20 22 75 74 63 22 20 75 6e 64 6f 65 73 20  e. "utc" undoes 
f810: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45  this.</p>..<h3>E
f820: 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  xamples</h3>..<p
f830: 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75 72  >Compute the cur
f840: 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c  rent date.<p>..<
f850: 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43  blockquote>SELEC
f860: 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b 3c 2f  T date('now');</
f870: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
f880: 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74  Compute the last
f890: 20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72   day of the curr
f8a0: 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a  ent month.</p>..
f8b0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45  <blockquote>SELE
f8c0: 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
f8d0: 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27  tart of month','
f8e0: 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61  +1 month','-1 da
f8f0: 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  y');.</blockquot
f900: 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74  e>..<p>Compute t
f910: 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  he date and time
f920: 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69   given a unix ti
f930: 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34  mestamp 10929414
f940: 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  66.</p>..<blockq
f950: 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45 43 54  uote>.    SELECT
f960: 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
f970: 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
f980: 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
f990: 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  >..<p>Compute th
f9a0: 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
f9b0: 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d  given a unix tim
f9c0: 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36  estamp 109294146
f9d0: 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61  6, and .compensa
f9e0: 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61  te for your loca
f9f0: 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a  l timezone.</p>.
fa00: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
fa10: 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
fa20: 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
fa30: 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74  xepoch', 'localt
fa40: 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  ime');.</blockqu
fa50: 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65  ote>..<p>Compute
fa60: 20 74 68 65 20 63 75 72 72 65 6e 74 20 75 6e 69   the current uni
fa70: 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e  x timestamp.</p>
fa80: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
fa90: 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65   SELECT strftime
faa0: 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f  ('%s','now');.</
fab0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
fac0: 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
fad0: 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
fae0: 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20   the signing of 
faf0: 74 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69  the US Declarati
fb00: 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e  on.of Independen
fb10: 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  t.</p>..<blockqu
fb20: 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75  ote>.  SELECT ju
fb30: 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d  lianday('now') -
fb40: 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36   julianday('1776
fb50: 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63  -07-04');.</bloc
fb60: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70  kquote>..<p>Comp
fb70: 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ute the number o
fb80: 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
fb90: 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d  a particular mom
fba0: 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e  ent in 2004:</p>
fbb0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
fbc0: 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65   SELECT strftime
fbd0: 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73  ('%s','now') - s
fbe0: 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 32 30  trftime('%s','20
fbf0: 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34 3a 35  04-01-01 02:34:5
fc00: 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  6');.</blockquot
fc10: 65 3e 0a 0a 3c 70 3e 0a 43 6f 6d 70 75 74 65 20  e>..<p>.Compute 
fc20: 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20  the date of the 
fc30: 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e  first Tuesday in
fc40: 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65   October.for the
fc50: 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c   current year..<
fc60: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
fc70: 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28  >.  SELECT date(
fc80: 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
fc90: 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73  year','+9 months
fca0: 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a  ','weekday 2');.
fcb0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
fcc0: 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 74 69  p>Compute the ti
fcd0: 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75 6e 69  me since the uni
fce0: 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e  x epoch in secon
fcf0: 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66 74 69  ds .(like strfti
fd00: 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 65  me('%s','now') e
fd10: 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73 20 66  xcept includes f
fd20: 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a  ractional part):
fd30: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
fd40: 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a 75 6c  e>.  SELECT (jul
fd50: 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20  ianday('now') - 
fd60: 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34 30 30  2440587.5)*86400
fd70: 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  .0;.</blockquote
fd80: 3e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41  >..<h3>Caveats A
fd90: 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70  nd Bugs</h3>..<p
fda0: 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e  >The computation
fdb0: 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64   of local time d
fdc0: 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f  epends heavily o
fdd0: 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70  n the whim .of p
fde0: 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69  oliticians and i
fdf0: 73 20 74 68 75 73 20 64 69 66 66 69 63 75 6c 74  s thus difficult
fe00: 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20   to get correct 
fe10: 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73  for .all locales
fe20: 2e 20 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d  . In this implem
fe30: 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74  entation, the st
fe40: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
fe50: 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c   .function local
fe60: 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64  time_r() is used
fe70: 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68   to assist in th
fe80: 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66  e calculation of
fe90: 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 54   .local time.  T
fea0: 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28  he .localtime_r(
feb0: 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72  ) C function nor
fec0: 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73  mally only works
fed0: 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65   for years.betwe
fee0: 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37  en 1970 and 2037
fef0: 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  . For dates outs
ff00: 69 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20  ide this range, 
ff10: 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73  SQLite .attempts
ff20: 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72   to map the year
ff30: 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c   into an equival
ff40: 65 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20  ent year within 
ff50: 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20  .this range, do 
ff60: 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c  the calculation,
ff70: 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65   then map the ye
ff80: 61 72 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 0a 3c  ar back.</p>...<
ff90: 70 3e 44 61 74 65 20 63 6f 6d 70 75 74 61 74 69  p>Date computati
ffa0: 6f 6e 73 20 64 6f 20 6e 6f 74 20 67 69 76 65 20  ons do not give 
ffb0: 63 6f 72 72 65 63 74 20 72 65 73 75 6c 74 73 20  correct results 
ffc0: 66 6f 72 20 64 61 74 65 73 20 0a 62 65 66 6f 72  for dates .befor
ffd0: 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d  e Julian day num
ffe0: 62 65 72 20 30 20 28 2d 34 37 31 33 2d 31 31 2d  ber 0 (-4713-11-
fff0: 32 34 20 31 32 3a 30 30 3a 30 30 29 2e 3c 2f 70  24 12:00:00).</p
10000 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20  >..<p>Non-Vista 
10010 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
10020 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f  s only support o
10030 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75  ne set of DST ru
10040 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79  les. .Vista only
10050 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54   supports two. T
10060 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65  herefore, on the
10070 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68  se platforms, .h
10080 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61  istorical DST ca
10090 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20  lculations will 
100a0 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46  be incorrect. .F
100b0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74  or example, in t
100c0 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74  he US, in 2007 t
100d0 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61  he DST rules cha
100e0 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61  nged. .Non-Vista
100f0 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
10100 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77  ms apply the new
10110 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20   2007 DST rules 
10120 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73  .to all previous
10130 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20   years as well. 
10140 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77  Vista does somew
10150 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69  hat better.getti
10160 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65  ng results corre
10170 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c  ct back to 1986,
10180 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20   when the rules 
10190 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65  were also change
101a0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69  d.</p>..<p>All i
101b0 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74  nternal computat
101c0 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20  ions assume the 
101d0 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f  .<a href="http:/
101e0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
101f0 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e  g/wiki/Gregorian
10200 5f 63 61 6c 65 6e 64 61 72 22 3e 0a 47 72 65 67  _calendar">.Greg
10210 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 3c 2f  orian calendar</
10220 61 3e 20 73 79 73 74 65 6d 2e 20 20 49 74 20 69  a> system.  It i
10230 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74  s also assumed t
10240 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73  hat every.day is
10250 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73   exactly 86400 s
10260 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69  econds in durati
10270 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  on.</p>..<tcl>.#
10280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102c0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
102d0 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65  ction {Aggregate
102e0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   Functions} aggf
102f0 75 6e 63 20 7b 61 67 67 66 75 6e 63 7d 0a 3c 2f  unc {aggfunc}.</
10300 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67  tcl>..<p>.The ag
10310 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10320 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
10330 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
10340 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69 6f  efault.  Additio
10350 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66 75  nal.aggregate fu
10360 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20  nctions written 
10370 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64 65  in C may be adde
10380 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73 71  d using the .[sq
10390 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
103a0 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49  ction()]</a>.API
103b0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 61 6e  .</p>..<p>.In an
103c0 79 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  y aggregate func
103d0 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 20  tion that takes 
103e0 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
103f0 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  t, that argument
10400 0a 63 61 6e 20 62 65 20 70 72 65 63 65 65 64 65  .can be preceede
10410 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72 64  d by the keyword
10420 20 44 49 53 54 49 4e 43 54 2e 20 20 49 6e 20 73   DISTINCT.  In s
10430 75 63 68 20 63 61 73 65 73 2c 20 64 75 70 6c 69  uch cases, dupli
10440 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72  cate.elements ar
10450 65 20 66 69 6c 74 65 72 65 64 20 62 65 66 6f 72  e filtered befor
10460 65 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 69  e being passed i
10470 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67 61 74  nto the aggregat
10480 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 46 6f 72 20  e function..For 
10490 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e  example, the fun
104a0 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73  ction "count(dis
104b0 74 69 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72  tinct X)" will r
104c0 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
104d0 0a 6f 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c  .of distinct val
104e0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20  ues of column X 
104f0 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 74  instead of the t
10500 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e  otal number of n
10510 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69  on-null.values i
10520 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e  n column X..</p>
10530 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
10540 30 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30  0 cellpadding=10
10550 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20  >.<tcl>.funcdef 
10560 7b 61 76 67 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  {avg(X)} {} {.  
10570 52 65 74 75 72 6e 20 74 68 65 20 61 76 65 72 61  Return the avera
10580 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20  ge value of all 
10590 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69  non-NULL <i>X</i
105a0 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72 6f  > within a.  gro
105b0 75 70 2e 20 20 53 74 72 69 6e 67 20 61 6e 64 20  up.  String and 
105c0 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68 61 74  BLOB values that
105d0 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b   do not look lik
105e0 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 20 20  e numbers are.  
105f0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 30  interpreted as 0
10600 2e 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f  ..  The result o
10610 66 20 61 76 67 28 29 20 69 73 20 61 6c 77 61 79  f avg() is alway
10620 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  s a floating poi
10630 6e 74 20 76 61 6c 75 65 20 65 76 65 6e 20 69 66  nt value even if
10640 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72   all.  inputs ar
10650 65 20 69 6e 74 65 67 65 72 73 2e 0a 7d 0a 0a 66  e integers..}..f
10660 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29  uncdef {count(X)
10670 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 7d 20 7b 0a   count(*)} {} {.
10680 20 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d    The first form
10690 20 72 65 74 75 72 6e 20 61 20 63 6f 75 6e 74 20   return a count 
106a0 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
106b0 20 74 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69   times.  that <i
106c0 3e 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55  >X</i> is not NU
106d0 4c 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20  LL in a group.  
106e0 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
106f0 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e  (with no argumen
10700 74 29 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65  t).  returns the
10710 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
10720 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
10730 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
10740 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20  group_concat(X) 
10750 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59  group_concat(X,Y
10760 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65 20 72 65  )} {} {.  The re
10770 73 75 6c 74 20 69 73 20 61 20 73 74 72 69 6e 67  sult is a string
10780 20 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f   which is the co
10790 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20  ncatenation of. 
107a0 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
107b0 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  lues of <i>X</i>
107c0 2e 20 20 49 66 20 70 61 72 61 6d 65 74 65 72 20  .  If parameter 
107d0 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>Y</i> is the 
107e0 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74 77  separator.  betw
107f0 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f 66  een instances of
10800 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 41 20 63 6f   <i>X</i>.  A co
10810 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75 73 65  mma (",") is use
10820 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
10830 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e  or.  if <i>Y</i>
10840 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a   is omitted..}..
10850 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 29 7d  funcdef {max(X)}
10860 20 7b 6d 61 78 41 67 67 46 75 6e 63 20 61 67 67   {maxAggFunc agg
10870 5f 6d 61 78 7d 20 7b 0a 20 20 52 65 74 75 72 6e  _max} {.  Return
10880 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c   the maximum val
10890 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
108a0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
108b0 20 54 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20   The usual sort 
108c0 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f  order is used to
108d0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6d   determine the m
108e0 61 78 69 6d 75 6d 2e 0a 7d 0a 0a 66 75 6e 63 64  aximum..}..funcd
108f0 65 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 6d 69 6e  ef {min(X)} {min
10900 41 67 67 46 75 6e 63 20 61 67 67 5f 6d 69 6e 7d  AggFunc agg_min}
10910 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20   {.  Return the 
10920 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c  minimum non-NULL
10930 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
10940 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
10950 70 2e 0a 20 20 54 68 65 20 75 73 75 61 6c 20 73  p..  The usual s
10960 6f 72 74 20 6f 72 64 65 72 20 69 73 20 75 73 65  ort order is use
10970 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
10980 68 65 20 6d 69 6e 69 6d 75 6d 2e 20 20 0a 20 20  he minimum.  .  
10990 4e 55 4c 4c 20 69 73 20 6f 6e 6c 79 20 72 65 74  NULL is only ret
109a0 75 72 6e 65 64 0a 20 20 69 66 20 61 6c 6c 20 76  urned.  if all v
109b0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
109c0 75 70 20 61 72 65 20 4e 55 4c 4c 2e 0a 7d 0a 0a  up are NULL..}..
109d0 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29 20  funcdef {sum(X) 
109e0 74 6f 74 61 6c 28 58 29 7d 20 7b 73 75 6d 46 75  total(X)} {sumFu
109f0 6e 63 20 73 75 6d 20 74 6f 74 61 6c 7d 20 7b 0a  nc sum total} {.
10a00 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d    Return the num
10a10 65 72 69 63 20 73 75 6d 20 6f 66 20 61 6c 6c 20  eric sum of all 
10a20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
10a30 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
10a40 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
10a50 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72  non-NULL input r
10a60 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72  ows then sum() r
10a70 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75  eturns.  NULL bu
10a80 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e  t total() return
10a90 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73  s 0.0..  NULL is
10aa0 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20   not normally a 
10ab0 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66  helpful result f
10ac0 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f  or the sum of no
10ad0 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20   rows.  but the 
10ae0 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71  SQL standard req
10af0 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73  uires it and mos
10b00 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61  t other.  SQL da
10b10 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
10b20 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74  mplement sum() t
10b30 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74  hat way so SQLit
10b40 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65  e does it in the
10b50 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f  .  same way in o
10b60 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61  rder to be compa
10b70 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e  tible.   The non
10b80 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28  -standard total(
10b90 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20  ) function.  is 
10ba0 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f  provided as a co
10bb0 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20  nvenient way to 
10bc0 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73  work around this
10bd0 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a   design problem.
10be0 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e    in the SQL lan
10bf0 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  guage.</p>..  <p
10c00 3e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74  >The result of t
10c10 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79 73  otal() is always
10c20 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
10c30 74 20 76 61 6c 75 65 2e 0a 20 20 54 68 65 20 72  t value..  The r
10c40 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69  esult of sum() i
10c50 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  s an integer val
10c60 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue if all non-NU
10c70 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  LL inputs are in
10c80 74 65 67 65 72 73 2e 0a 20 20 49 66 20 61 6e 79  tegers..  If any
10c90 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29 20   input to sum() 
10ca0 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69 6e  is neither an in
10cb0 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c 0a  teger or a NULL.
10cc0 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74    then sum() ret
10cd0 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  urns a floating 
10ce0 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77 68  point value.  wh
10cf0 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e 20  ich might be an 
10d00 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74 6f  approximation to
10d10 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c 2f   the true sum.</
10d20 70 3e 0a 0a 20 20 3c 70 3e 53 75 6d 28 29 20 77  p>..  <p>Sum() w
10d30 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22 69 6e  ill throw an "in
10d40 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 22 20  teger overflow" 
10d50 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61 6c 6c  exception if all
10d60 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20 69 6e   inputs.  are in
10d70 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c 0a 20  tegers or NULL. 
10d80 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65 72 20   and an integer 
10d90 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 20  overflow occurs 
10da0 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64 75 72  at any point dur
10db0 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74 61 74  ing the computat
10dc0 69 6f 6e 2e 0a 20 20 54 6f 74 61 6c 28 29 20 6e  ion..  Total() n
10dd0 65 76 65 72 20 74 68 72 6f 77 73 20 61 6e 20 65  ever throws an e
10de0 78 63 65 70 74 69 6f 6e 2e 0a 7d 0a 3c 2f 74 63  xception..}.</tc
10df0 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63  l>.</table>..<tc
10e00 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
10e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10e50 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54  #.Section INSERT
10e60 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20   insert {INSERT 
10e70 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62 62 6c 65  INSERTs}..Bubble
10e80 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74 2d 73  Diagram insert-s
10e90 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
10ea0 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74  >The INSERT stat
10eb0 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74  ement comes in t
10ec0 77 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20  wo basic forms. 
10ed0 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 0a   The first form.
10ee0 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45  (with the "VALUE
10ef0 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61  S" keyword) crea
10f00 74 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  tes a single new
10f10 20 72 6f 77 20 69 6e 20 61 6e 20 65 78 69 73 74   row in an exist
10f20 69 6e 67 20 74 61 62 6c 65 2e 0a 49 66 20 6e 6f  ing table..If no
10f30 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20   column-list is 
10f40 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74  specified then t
10f50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
10f60 75 65 73 20 6d 75 73 74 0a 62 65 20 74 68 65 20  ues must.be the 
10f70 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
10f80 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10f90 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
10fa0 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73  a column-list.is
10fb0 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
10fc0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
10fd0 61 6c 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68  alues must match
10fe0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73   the number of.s
10ff0 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
11000 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  .  Columns of th
11010 65 20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20  e table that do 
11020 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
11030 65 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72  e.column list ar
11040 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68  e filled with th
11050 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c  e default value,
11060 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66   or with NULL if
11070 20 6e 6f 0a 64 65 66 61 75 6c 74 20 76 61 6c 75   no.default valu
11080 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
11090 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 65 63  </p>..<p>The sec
110a0 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ond form of the 
110b0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
110c0 20 74 61 6b 65 73 20 69 74 20 64 61 74 61 20 66   takes it data f
110d0 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74 61  rom a.SELECT sta
110e0 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 75 6d  tement.  The num
110f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
11100 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
11110 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74 20  the.SELECT must 
11120 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
11130 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11140 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
11150 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c 69   if.no column li
11160 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  st is specified,
11170 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74 63   or it must matc
11180 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
11190 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20 69 6e 20  columns.name in 
111a0 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e  the column list.
111b0 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
111c0 20 6d 61 64 65 20 69 6e 20 74 68 65 20 74 61 62   made in the tab
111d0 6c 65 0a 66 6f 72 20 65 76 65 72 79 20 72 6f 77  le.for every row
111e0 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 72   of the SELECT r
111f0 65 73 75 6c 74 2e 20 20 54 68 65 20 53 45 4c 45  esult.  The SELE
11200 43 54 20 6d 61 79 20 62 65 20 73 69 6d 70 6c 65  CT may be simple
11210 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  .or compound.</p
11220 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e  >..<p>The option
11230 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  al conflict-clau
11240 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70  se allows the sp
11250 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61  ecification of a
11260 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f  n alternative.co
11270 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
11280 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
11290 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75  orithm to use du
112a0 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 63 6f  ring this one co
112b0 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
112c0 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f  ection titled.[O
112d0 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
112e0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
112f0 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70  mation..For comp
11300 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
11310 79 53 51 4c 2c 20 74 68 65 20 70 61 72 73 65 72  ySQL, the parser
11320 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20   allows the use 
11330 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65  of the.single ke
11340 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c  yword <a href="l
11350 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c  ang_replace.html
11360 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73  ">REPLACE</a> as
11370 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22   an .alias for "
11380 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
11390 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  E"..</p>..<tcl>.
113a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
113f0 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c  ection {ON CONFL
11400 49 43 54 20 63 6c 61 75 73 65 7d 20 63 6f 6e 66  ICT clause} conf
11410 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69 63 74 20  lict {{conflict 
11420 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46  clause} {ON CONF
11430 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c 65 44 69  LICT}}..BubbleDi
11440 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74 2d 63  agram conflict-c
11450 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause.</tcl>..<p
11460 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
11470 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61   clause is not a
11480 20 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f   separate SQL co
11490 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a  mmand.  It is a.
114a0 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61  non-standard cla
114b0 75 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70  use that can app
114c0 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65  ear in many othe
114d0 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a  r SQL commands..
114e0 49 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20  It is given its 
114f0 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74  own section in t
11500 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63  his document bec
11510 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70  ause it is not.p
11520 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20  art of standard 
11530 53 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72  SQL and therefor
11540 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66  e might not be f
11550 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70  amiliar.</p>..<p
11560 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20  >The syntax for 
11570 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
11580 63 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f  clause is as sho
11590 77 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65  wn above for.the
115a0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
115b0 6d 6d 61 6e 64 2e 20 20 46 6f 72 20 74 68 65 20  mmand.  For the 
115c0 49 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41 54  INSERT and.UPDAT
115d0 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20  E commands, the 
115e0 6b 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e  keywords "ON CON
115f0 46 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c 61  FLICT" are repla
11600 63 65 64 20 62 79 20 22 4f 52 22 2c 20 74 6f 20  ced by "OR", to 
11610 6d 61 6b 65 0a 74 68 65 20 73 79 6e 74 61 78 20  make.the syntax 
11620 73 65 65 6d 20 6d 6f 72 65 20 6e 61 74 75 72 61  seem more natura
11630 6c 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  l.  For example,
11640 20 69 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53   instead of."INS
11650 45 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ERT ON CONFLICT 
11660 49 47 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20  IGNORE" we have 
11670 22 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52  "INSERT OR IGNOR
11680 45 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73  E"..The keywords
11690 20 63 68 61 6e 67 65 20 62 75 74 20 74 68 65 20   change but the 
116a0 6d 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63  meaning of the c
116b0 6c 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d  lause is the sam
116c0 65 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70  e.either way.</p
116d0 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
116e0 46 4c 49 43 54 20 63 6c 61 75 73 65 20 73 70 65  FLICT clause spe
116f0 63 69 66 69 65 73 20 61 6e 20 61 6c 67 6f 72 69  cifies an algori
11700 74 68 6d 20 75 73 65 64 20 74 6f 20 72 65 73 6f  thm used to reso
11710 6c 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63  lve.constraint c
11720 6f 6e 66 6c 69 63 74 73 2e 20 20 54 68 65 72 65  onflicts.  There
11730 20 61 72 65 20 66 69 76 65 20 63 68 6f 69 63 65   are five choice
11740 73 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f  s: ROLLBACK, ABO
11750 52 54 2c 0a 46 41 49 4c 2c 20 49 47 4e 4f 52 45  RT,.FAIL, IGNORE
11760 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 20 54  , and REPLACE. T
11770 68 65 20 64 65 66 61 75 6c 74 20 61 6c 67 6f 72  he default algor
11780 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20  ithm is ABORT.  
11790 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65  This.is what the
117a0 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c  y mean:</p>..<dl
117b0 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43  >.<dt><b>ROLLBAC
117c0 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  K</b></dt>.<dd><
117d0 70 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61  p>When a constra
117e0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
117f0 63 75 72 73 2c 20 61 6e 20 69 6d 6d 65 64 69 61  curs, an immedia
11800 74 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f 63 63 75  te ROLLBACK.occu
11810 72 73 2c 20 74 68 75 73 20 65 6e 64 69 6e 67 20  rs, thus ending 
11820 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
11830 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65  saction, and the
11840 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 0a   command aborts.
11850 77 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f  with a return co
11860 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e  de of SQLITE_CON
11870 53 54 52 41 49 4e 54 2e 20 20 49 66 20 6e 6f 20  STRAINT.  If no 
11880 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61  transaction is.a
11890 63 74 69 76 65 20 28 6f 74 68 65 72 20 74 68 61  ctive (other tha
118a0 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72  n the implied tr
118b0 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69  ansaction that i
118c0 73 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65  s created on eve
118d0 72 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e  ry.command) then
118e0 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20   this algorithm 
118f0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
11900 73 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c 2f 64 64  s ABORT.</p></dd
11910 3e 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c  >..<dt><b>ABORT<
11920 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
11930 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e  When a constrain
11940 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
11950 72 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  rs, the command 
11960 62 61 63 6b 73 20 6f 75 74 0a 61 6e 79 20 70 72  backs out.any pr
11970 69 6f 72 20 63 68 61 6e 67 65 73 20 69 74 20 6d  ior changes it m
11980 69 67 68 74 20 68 61 76 65 20 6d 61 64 65 20 61  ight have made a
11990 6e 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61  nd aborts with a
119a0 20 72 65 74 75 72 6e 20 63 6f 64 65 0a 6f 66 20   return code.of 
119b0 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
119c0 54 2e 20 20 42 75 74 20 6e 6f 20 52 4f 4c 4c 42  T.  But no ROLLB
119d0 41 43 4b 20 69 73 20 65 78 65 63 75 74 65 64 20  ACK is executed 
119e0 73 6f 20 63 68 61 6e 67 65 73 0a 66 72 6f 6d 20  so changes.from 
119f0 70 72 69 6f 72 20 63 6f 6d 6d 61 6e 64 73 20 77  prior commands w
11a00 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74  ithin the same t
11a10 72 61 6e 73 61 63 74 69 6f 6e 0a 61 72 65 20 70  ransaction.are p
11a20 72 65 73 65 72 76 65 64 2e 20 20 54 68 69 73 20  reserved.  This 
11a30 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  is the default b
11a40 65 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c 2f 64 64  ehavior.</p></dd
11a50 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f  >..<dt><b>FAIL</
11a60 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57  b></dt>.<dd><p>W
11a70 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hen a constraint
11a80 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
11a90 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61  s, the command a
11aa0 62 6f 72 74 73 20 77 69 74 68 20 61 0a 72 65 74  borts with a.ret
11ab0 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
11ac0 43 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42 75 74  CONSTRAINT.  But
11ad0 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20   any changes to 
11ae0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61  the database tha
11af0 74 0a 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6d 61  t.the command ma
11b00 64 65 20 70 72 69 6f 72 20 74 6f 20 65 6e 63 6f  de prior to enco
11b10 75 6e 74 65 72 69 6e 67 20 74 68 65 20 63 6f 6e  untering the con
11b20 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11b30 6e 0a 61 72 65 20 70 72 65 73 65 72 76 65 64 20  n.are preserved 
11b40 61 6e 64 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  and are not back
11b50 65 64 20 6f 75 74 2e 20 20 46 6f 72 20 65 78 61  ed out.  For exa
11b60 6d 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41  mple, if an UPDA
11b70 54 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63  TE.statement enc
11b80 6f 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74  ountered a const
11b90 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
11ba0 6f 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77  on the 100th row
11bb0 20 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74   that.it attempt
11bc0 73 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65  s to update, the
11bd0 6e 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72  n the first 99 r
11be0 6f 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70  ow changes are p
11bf0 72 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61  reserved.but cha
11c00 6e 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30  nges to rows 100
11c10 20 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65   and beyond neve
11c20 72 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64  r occur.</p></dd
11c30 3e 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45  >..<dt><b>IGNORE
11c40 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
11c50 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  >When a constrai
11c60 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
11c70 75 72 73 2c 20 74 68 65 20 6f 6e 65 20 72 6f 77  urs, the one row
11c80 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74   that contains.t
11c90 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
11ca0 6f 6c 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 69  olation is not i
11cb0 6e 73 65 72 74 65 64 20 6f 72 20 63 68 61 6e 67  nserted or chang
11cc0 65 64 2e 20 20 42 75 74 20 74 68 65 20 63 6f 6d  ed.  But the com
11cd0 6d 61 6e 64 0a 63 6f 6e 74 69 6e 75 65 73 20 65  mand.continues e
11ce0 78 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c  xecuting normall
11cf0 79 2e 20 20 4f 74 68 65 72 20 72 6f 77 73 20 62  y.  Other rows b
11d00 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20  efore and after 
11d10 74 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e  the row that.con
11d20 74 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74  tained the const
11d30 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
11d40 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 69  continue to be i
11d50 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
11d60 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f  ed.normally.  No
11d70 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
11d80 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ed.</p></dd>..<d
11d90 74 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e  t><b>REPLACE</b>
11da0 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65  </dt>.<dd><p>Whe
11db0 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  n a UNIQUE const
11dc0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
11dd0 6f 63 63 75 72 73 2c 20 74 68 65 20 70 72 65 2d  occurs, the pre-
11de0 65 78 69 73 74 69 6e 67 20 72 6f 77 73 0a 74 68  existing rows.th
11df0 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74  at are causing t
11e00 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
11e10 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
11e20 76 65 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 73  ved prior to ins
11e30 65 72 74 69 6e 67 0a 6f 72 20 75 70 64 61 74 69  erting.or updati
11e40 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  ng the current r
11e50 6f 77 2e 20 20 54 68 75 73 20 74 68 65 20 69 6e  ow.  Thus the in
11e60 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 20 61  sert or update a
11e70 6c 77 61 79 73 20 6f 63 63 75 72 73 2e 0a 54 68  lways occurs..Th
11e80 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e  e command contin
11e90 75 65 73 20 65 78 65 63 75 74 69 6e 67 20 6e 6f  ues executing no
11ea0 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72 6f  rmally.  No erro
11eb0 72 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 49  r is returned..I
11ec0 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  f a NOT NULL con
11ed0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11ee0 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 4e 55  n occurs, the NU
11ef0 4c 4c 20 76 61 6c 75 65 20 69 73 20 72 65 70 6c  LL value is repl
11f00 61 63 65 64 0a 62 79 20 74 68 65 20 64 65 66 61  aced.by the defa
11f10 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
11f20 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  at column.  If t
11f30 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f  he column has no
11f40 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20   default.value, 
11f50 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61  then the ABORT a
11f60 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64  lgorithm is used
11f70 2e 20 20 49 66 20 61 20 43 48 45 43 4b 20 63 6f  .  If a CHECK co
11f80 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
11f90 6f 6e 0a 6f 63 63 75 72 73 20 74 68 65 6e 20 74  on.occurs then t
11fa0 68 65 20 49 47 4e 4f 52 45 20 61 6c 67 6f 72 69  he IGNORE algori
11fb0 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e  thm is used.</p>
11fc0 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 69 73 20 63  ..<p>When this c
11fd0 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
11fe0 6f 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c 65  on strategy dele
11ff0 74 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65  tes rows in orde
12000 72 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63  r to.satisfy a c
12010 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20 64 6f  onstraint, it do
12020 65 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 20 64 65  es not invoke de
12030 6c 65 74 65 20 74 72 69 67 67 65 72 73 20 6f 6e  lete triggers on
12040 20 74 68 6f 73 65 0a 72 6f 77 73 2e 20 20 54 68   those.rows.  Th
12050 69 73 20 62 65 68 61 76 69 6f 72 20 6d 69 67 68  is behavior migh
12060 74 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75  t change in a fu
12070 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70  ture release.</p
12080 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20  >.</dl>..<p>The 
12090 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
120a0 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c  ied in the OR cl
120b0 61 75 73 65 20 6f 66 20 61 20 49 4e 53 45 52 54  ause of a INSERT
120c0 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72   or UPDATE.overr
120d0 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74  ides any algorit
120e0 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
120f0 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a  a CREATE TABLE..
12100 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20  If no algorithm 
12110 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 79  is specified any
12120 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54  where, the ABORT
12130 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
12140 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
12150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12190 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
121a0 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65  ction REINDEX re
121b0 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 42  index REINDEX..B
121c0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69  ubbleDiagram rei
121d0 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  ndex-stmt 1.</tc
121e0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 52 45 49 4e 44  l>..<p>The REIND
121f0 45 58 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  EX command is us
12200 65 64 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64  ed to delete and
12210 20 72 65 63 72 65 61 74 65 20 69 6e 64 69 63 65   recreate indice
12220 73 20 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a  s from scratch..
12230 54 68 69 73 20 69 73 20 75 73 65 66 75 6c 20 77  This is useful w
12240 68 65 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69  hen the definiti
12250 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f  on of a collatio
12260 6e 20 73 65 71 75 65 6e 63 65 20 68 61 73 20 63  n sequence has c
12270 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  hanged..</p>..<p
12280 3e 49 6e 20 74 68 65 20 66 69 72 73 74 20 66 6f  >In the first fo
12290 72 6d 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 20  rm, all indices 
122a0 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  in all attached 
122b0 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75  databases that u
122c0 73 65 20 74 68 65 0a 6e 61 6d 65 64 20 63 6f 6c  se the.named col
122d0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
122e0 61 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 49  are recreated. I
122f0 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
12300 6d 2c 20 69 66 20 0a 3c 69 3e 26 23 39 31 3b 64  m, if .<i>&#91;d
12310 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39  atabase-name.&#9
12320 33 3b 74 61 62 6c 65 2f 69 6e 64 65 78 2d 6e 61  3;table/index-na
12330 6d 65 3c 2f 69 3e 20 69 64 65 6e 74 69 66 69 65  me</i> identifie
12340 73 20 61 20 74 61 62 6c 65 2c 0a 74 68 65 6e 20  s a table,.then 
12350 61 6c 6c 20 69 6e 64 69 63 65 73 0a 61 73 73 6f  all indices.asso
12360 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
12370 74 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c  table are rebuil
12380 74 2e 20 49 66 20 61 6e 20 69 6e 64 65 78 20 69  t. If an index i
12390 73 20 69 64 65 6e 74 69 66 69 65 64 2c 20 74 68  s identified, th
123a0 65 6e 20 6f 6e 6c 79 0a 74 68 69 73 20 73 70 65  en only.this spe
123b0 63 69 66 69 63 20 69 6e 64 65 78 20 69 73 20 64  cific index is d
123c0 65 6c 65 74 65 64 20 61 6e 64 20 72 65 63 72 65  eleted and recre
123d0 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49  ated..</p>..<p>I
123e0 66 20 6e 6f 20 3c 69 3e 64 61 74 61 62 61 73 65  f no <i>database
123f0 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 73 70 65  -name</i> is spe
12400 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 72 65  cified and there
12410 20 65 78 69 73 74 73 20 62 6f 74 68 20 61 20 74   exists both a t
12420 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 61 6e  able or.index an
12430 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
12440 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 73 70  quence of the sp
12450 65 63 69 66 69 65 64 20 6e 61 6d 65 2c 20 74 68  ecified name, th
12460 65 6e 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63  en indices assoc
12470 69 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 63  iated.with the c
12480 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
12490 65 20 6f 6e 6c 79 20 61 72 65 20 72 65 63 6f 6e  e only are recon
124a0 73 74 72 75 63 74 65 64 2e 20 54 68 69 73 20 61  structed. This a
124b0 6d 62 69 67 75 69 74 79 20 6d 61 79 20 62 65 0a  mbiguity may be.
124c0 64 69 73 70 65 6c 6c 65 64 20 62 79 20 61 6c 77  dispelled by alw
124d0 61 79 73 20 73 70 65 63 69 66 79 69 6e 67 20 61  ays specifying a
124e0 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
124f0 65 3c 2f 69 3e 20 77 68 65 6e 20 72 65 69 6e 64  e</i> when reind
12500 65 78 69 6e 67 20 61 0a 73 70 65 63 69 66 69 63  exing a.specific
12510 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
12520 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
12530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12570 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
12580 52 45 50 4c 41 43 45 20 72 65 70 6c 61 63 65 20  REPLACE replace 
12590 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a  REPLACE..</tcl>.
125a0 0a 3c 70 3e 54 68 65 20 52 45 50 4c 41 43 45 20  .<p>The REPLACE 
125b0 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c  command is an al
125c0 69 61 73 20 66 6f 72 20 74 68 65 20 22 49 4e 53  ias for the "INS
125d0 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 20  ERT OR REPLACE" 
125e0 76 61 72 69 61 6e 74 0a 6f 66 20 74 68 65 20 3c  variant.of the <
125f0 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 69 6e 73  a href="lang_ins
12600 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53 45 52 54  ert.html">INSERT
12610 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a  </a> command.  .
12620 54 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72  This alias is pr
12630 6f 76 69 64 65 64 20 66 6f 72 0a 63 6f 6d 70 61  ovided for.compa
12640 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79  tibility with My
12650 53 51 4c 2e 20 20 53 65 65 20 74 68 65 20 0a 3c  SQL.  See the .<
12660 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 69 6e 73  a href="lang_ins
12670 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53 45 52 54  ert.html">INSERT
12680 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20 64 6f 63  </a> command doc
12690 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  umentation for a
126a0 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f 72 6d  dditional.inform
126b0 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74  ation.</p>  ..<t
126c0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
126d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12710 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45  ###.Section SELE
12720 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43  CT select {SELEC
12730 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62 6c 65  T query}..Bubble
12740 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 73  Diagram select-s
12750 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
12760 72 61 6d 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  ram result-colum
12770 6e 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  n.BubbleDiagram 
12780 6a 6f 69 6e 2d 73 6f 75 72 63 65 0a 42 75 62 62  join-source.Bubb
12790 6c 65 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65  leDiagram single
127a0 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
127b0 61 67 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75  agram join-op.Bu
127c0 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
127d0 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62  -constraint.Bubb
127e0 6c 65 44 69 61 67 72 61 6d 20 6f 72 64 65 72 69  leDiagram orderi
127f0 6e 67 2d 74 65 72 6d 0a 42 75 62 62 6c 65 44 69  ng-term.BubbleDi
12800 61 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f  agram compound-o
12810 70 65 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a  perator.</tcl>..
12820 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74  <p>The SELECT st
12830 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20  atement is used 
12840 74 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74  to query the dat
12850 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75  abase.  The.resu
12860 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69  lt of a SELECT i
12870 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72  s zero or more r
12880 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72  ows of data wher
12890 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61  e each row.has a
128a0 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66   fixed number of
128b0 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 20 6e   columns.  The n
128c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
128d0 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74 20 69   in the.result i
128e0 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
128f0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  he expression li
12900 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  st in between th
12910 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46 52 4f  e.SELECT and FRO
12920 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 6e 79  M keywords.  Any
12930 20 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65   arbitrary expre
12940 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ssion can be use
12950 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e 20 20  d.as a result.  
12960 49 66 20 61 20 72 65 73 75 6c 74 20 65 78 70 72  If a result expr
12970 65 73 73 69 6f 6e 20 69 73 20 7d 0a 68 64 5f 70  ession is }.hd_p
12980 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 2a  uts "[Operator *
12990 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d  ] then all colum
129a0 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  ns of all tables
129b0 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64   are substituted
129c0 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22 66 6f 72  \n".hd_puts "for
129d0 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73   that one expres
129e0 73 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 65 78  sion.  If the ex
129f0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
12a00 6e 61 6d 65 20 6f 66 5c 6e 22 0a 68 64 5f 70 75  name of\n".hd_pu
12a10 74 73 20 22 61 20 74 61 62 6c 65 20 66 6f 6c 6c  ts "a table foll
12a20 6f 77 65 64 20 62 79 20 5b 4f 70 65 72 61 74 6f  owed by [Operato
12a30 72 20 2e 2a 5d 20 74 68 65 6e 20 74 68 65 20 72  r .*] then the r
12a40 65 73 75 6c 74 20 69 73 20 61 6c 6c 20 63 6f 6c  esult is all col
12a50 75 6d 6e 73 5c 6e 22 0a 68 64 5f 70 75 74 73 20  umns\n".hd_puts 
12a60 7b 69 6e 20 74 68 61 74 20 6f 6e 65 20 74 61 62  {in that one tab
12a70 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  le.</p>..<p>The 
12a80 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
12a90 20 63 61 75 73 65 73 20 61 20 73 75 62 73 65 74   causes a subset
12aa0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
12ab0 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 2c 20  to be returned, 
12ac0 0a 69 6e 20 77 68 69 63 68 20 65 61 63 68 20 72  .in which each r
12ad0 65 73 75 6c 74 20 72 6f 77 20 69 73 20 64 69 66  esult row is dif
12ae0 66 65 72 65 6e 74 2e 20 20 4e 55 4c 4c 20 76 61  ferent.  NULL va
12af0 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 74 72 65  lues are not tre
12b00 61 74 65 64 20 61 73 20 0a 64 69 73 74 69 6e 63  ated as .distinc
12b10 74 20 66 72 6f 6d 20 65 61 63 68 20 6f 74 68 65  t from each othe
12b20 72 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  r.  The default 
12b30 62 65 68 61 76 69 6f 72 20 69 73 20 74 68 61 74  behavior is that
12b40 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73   all result rows
12b50 20 0a 62 65 20 72 65 74 75 72 6e 65 64 2c 20 77   .be returned, w
12b60 68 69 63 68 20 63 61 6e 20 62 65 20 6d 61 64 65  hich can be made
12b70 20 65 78 70 6c 69 63 69 74 20 77 69 74 68 20 74   explicit with t
12b80 68 65 20 6b 65 79 77 6f 72 64 20 41 4c 4c 2e 3c  he keyword ALL.<
12b90 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 71 75 65 72  /p>..<p>The quer
12ba0 79 20 69 73 20 65 78 65 63 75 74 65 64 20 61 67  y is executed ag
12bb0 61 69 6e 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72  ainst one or mor
12bc0 65 20 74 61 62 6c 65 73 20 73 70 65 63 69 66 69  e tables specifi
12bd0 65 64 20 61 66 74 65 72 0a 74 68 65 20 46 52 4f  ed after.the FRO
12be0 4d 20 6b 65 79 77 6f 72 64 2e 20 20 49 66 20 6d  M keyword.  If m
12bf0 75 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20 6e  ultiple tables n
12c00 61 6d 65 73 20 61 72 65 20 73 65 70 61 72 61 74  ames are separat
12c10 65 64 20 62 79 20 63 6f 6d 6d 61 73 2c 0a 74 68  ed by commas,.th
12c20 65 6e 20 74 68 65 20 71 75 65 72 79 20 69 73 20  en the query is 
12c30 61 67 61 69 6e 73 74 20 74 68 65 20 63 72 6f 73  against the cros
12c40 73 20 6a 6f 69 6e 20 6f 66 20 74 68 65 20 76 61  s join of the va
12c50 72 69 6f 75 73 20 74 61 62 6c 65 73 2e 0a 54 68  rious tables..Th
12c60 65 20 66 75 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f  e full SQL-92 jo
12c70 69 6e 20 73 79 6e 74 61 78 20 63 61 6e 20 61 6c  in syntax can al
12c80 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 70  so be used to sp
12c90 65 63 69 66 79 20 6a 6f 69 6e 73 2e 0a 41 20 73  ecify joins..A s
12ca0 75 62 2d 71 75 65 72 79 0a 69 6e 20 70 61 72 65  ub-query.in pare
12cb0 6e 74 68 65 73 65 73 20 6d 61 79 20 62 65 20 73  ntheses may be s
12cc0 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 61  ubstituted for a
12cd0 6e 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  ny table name in
12ce0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
12cf0 2e 0a 54 68 65 20 65 6e 74 69 72 65 20 46 52 4f  ..The entire FRO
12d00 4d 20 63 6c 61 75 73 65 20 6d 61 79 20 62 65 20  M clause may be 
12d10 6f 6d 69 74 74 65 64 2c 20 69 6e 20 77 68 69 63  omitted, in whic
12d20 68 20 63 61 73 65 20 74 68 65 20 72 65 73 75 6c  h case the resul
12d30 74 20 69 73 20 61 0a 73 69 6e 67 6c 65 20 72 6f  t is a.single ro
12d40 77 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  w consisting of 
12d50 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
12d60 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  e expression lis
12d70 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  t..</p>..<p>The 
12d80 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e  WHERE clause can
12d90 20 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   be used to limi
12da0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
12db0 72 6f 77 73 20 6f 76 65 72 0a 77 68 69 63 68 20  rows over.which 
12dc0 74 68 65 20 71 75 65 72 79 20 6f 70 65 72 61 74  the query operat
12dd0 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  es.</p>..<p>The 
12de0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
12df0 63 61 75 73 65 73 20 6f 6e 65 20 6f 72 20 6d 6f  causes one or mo
12e00 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 72  re rows of the r
12e10 65 73 75 6c 74 20 74 6f 0a 62 65 20 63 6f 6d 62  esult to.be comb
12e20 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67  ined into a sing
12e30 6c 65 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74  le row of output
12e40 2e 20 20 54 68 69 73 20 69 73 20 65 73 70 65 63  .  This is espec
12e50 69 61 6c 6c 79 20 75 73 65 66 75 6c 0a 77 68 65  ially useful.whe
12e60 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  n the result con
12e70 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
12e80 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
12e90 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 0a 74  expressions in.t
12ea0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
12eb0 73 65 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se do <em>not</e
12ec0 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65 78  m> have to be ex
12ed0 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 0a 61  pressions that.a
12ee0 70 70 65 61 72 20 69 6e 20 74 68 65 20 72 65 73  ppear in the res
12ef0 75 6c 74 2e 20 20 54 68 65 20 48 41 56 49 4e 47  ult.  The HAVING
12f00 20 63 6c 61 75 73 65 20 69 73 20 73 69 6d 69 6c   clause is simil
12f10 61 72 20 74 6f 20 57 48 45 52 45 20 65 78 63 65  ar to WHERE exce
12f20 70 74 0a 74 68 61 74 20 48 41 56 49 4e 47 20 61  pt.that HAVING a
12f30 70 70 6c 69 65 73 20 61 66 74 65 72 20 67 72 6f  pplies after gro
12f40 75 70 69 6e 67 20 68 61 73 20 6f 63 63 75 72 72  uping has occurr
12f50 65 64 2e 20 20 54 68 65 20 48 41 56 49 4e 47 20  ed.  The HAVING 
12f60 65 78 70 72 65 73 73 69 6f 6e 0a 6d 61 79 20 72  expression.may r
12f70 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20  efer to values, 
12f80 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66  even aggregate f
12f90 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61  unctions, that a
12fa0 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65  re not in the re
12fb0 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  sult.</p>..<p>Th
12fc0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
12fd0 65 20 63 61 75 73 65 73 20 74 68 65 20 6f 75 74  e causes the out
12fe0 70 75 74 20 72 6f 77 73 20 74 6f 20 62 65 20 73  put rows to be s
12ff0 6f 72 74 65 64 2e 20 20 0a 54 68 65 20 61 72 67  orted.  .The arg
13000 75 6d 65 6e 74 20 74 6f 20 4f 52 44 45 52 20 42  ument to ORDER B
13010 59 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 65  Y is a list of e
13020 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
13030 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 0a  are used as the.
13040 6b 65 79 20 66 6f 72 20 74 68 65 20 73 6f 72 74  key for the sort
13050 2e 20 20 54 68 65 20 65 78 70 72 65 73 73 69 6f  .  The expressio
13060 6e 73 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74  ns do not have t
13070 6f 20 62 65 20 70 61 72 74 20 6f 66 20 74 68 65  o be part of the
13080 0a 72 65 73 75 6c 74 20 66 6f 72 20 61 20 73 69  .result for a si
13090 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 62 75 74  mple SELECT, but
130a0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53   in a compound S
130b0 45 4c 45 43 54 20 65 61 63 68 20 73 6f 72 74 0a  ELECT each sort.
130c0 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 20  expression must 
130d0 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 6f 6e  exactly match on
130e0 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  e of the result 
130f0 63 6f 6c 75 6d 6e 73 2e 20 20 45 61 63 68 0a 73  columns.  Each.s
13100 6f 72 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  ort expression m
13110 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
13120 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 43   followed by a C
13130 4f 4c 4c 41 54 45 20 6b 65 79 77 6f 72 64 20 61  OLLATE keyword a
13140 6e 64 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  nd.the name of a
13150 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
13160 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 6f 72 64  ion used for ord
13170 65 72 69 6e 67 20 74 65 78 74 20 61 6e 64 2f 6f  ering text and/o
13180 72 0a 6b 65 79 77 6f 72 64 73 20 41 53 43 20 6f  r.keywords ASC o
13190 72 20 44 45 53 43 20 74 6f 20 73 70 65 63 69 66  r DESC to specif
131a0 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72  y the sort order
131b0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 74  .</p>..<p>Each t
131c0 65 72 6d 20 6f 66 20 61 6e 20 4f 52 44 45 52 20  erm of an ORDER 
131d0 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
131e0 20 70 72 6f 63 65 73 73 65 64 20 61 73 20 66 6f   processed as fo
131f0 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows:</p>..<ol>
13200 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74 68 65 20 4f  .<li><p>If the O
13210 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
13220 6f 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74  on is a constant
13230 20 69 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20   integer K then 
13240 74 68 65 0a 6f 75 74 70 75 74 20 69 73 20 6f 72  the.output is or
13250 64 65 72 65 64 20 62 79 20 74 68 65 20 4b 2d 74  dered by the K-t
13260 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
13270 72 65 73 75 6c 74 20 73 65 74 2e 3c 2f 70 3e 3c  result set.</p><
13280 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74  /li>.<li><p>If t
13290 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
132a0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65  ession is an ide
132b0 6e 74 69 66 69 65 72 20 61 6e 64 20 6f 6e 65 20  ntifier and one 
132c0 6f 66 20 74 68 65 0a 6f 75 74 70 75 74 20 63 6f  of the.output co
132d0 6c 75 6d 6e 73 20 61 73 20 61 6e 20 61 6c 69 61  lumns as an alia
132e0 73 20 62 79 20 74 68 65 20 73 61 6d 65 20 6e 61  s by the same na
132f0 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 75 74  me, then the out
13300 70 75 74 20 69 73 0a 6f 72 64 65 72 65 64 20 62  put is.ordered b
13310 79 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 64  y the identified
13320 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69   column.</p></li
13330 3e 0a 3c 6c 69 3e 3c 70 3e 4f 74 68 65 72 77 69  >.<li><p>Otherwi
13340 73 65 2c 20 74 68 65 20 4f 52 44 45 52 20 42 59  se, the ORDER BY
13350 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
13360 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
13370 20 6f 75 74 70 75 74 20 0a 69 73 20 6f 72 64 65   output .is orde
13380 72 65 64 20 62 79 20 74 68 65 20 76 61 6c 75 65  red by the value
13390 20 6f 66 20 74 68 61 74 20 65 78 70 72 65 73 73   of that express
133a0 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f  ion.</p></li>.</
133b0 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 20 63 6f 6d  ol>..<p>In a com
133c0 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 73 74 61  pound SELECT sta
133d0 74 65 6d 65 6e 74 2c 20 74 68 65 20 74 68 69 72  tement, the thir
133e0 64 20 4f 52 44 45 52 20 42 59 20 6d 61 74 63 68  d ORDER BY match
133f0 69 6e 67 20 72 75 6c 65 0a 72 65 71 75 69 72 65  ing rule.require
13400 73 20 74 68 61 74 20 74 68 65 20 65 78 70 72 65  s that the expre
13410 73 73 69 6f 6e 20 62 65 20 69 64 65 6e 74 69 63  ssion be identic
13420 61 6c 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  al to one of the
13430 20 63 6f 6c 75 6d 6e 73 20 69 6e 0a 74 68 65 20   columns in.the 
13440 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65  result set.  The
13450 20 74 68 72 65 65 20 72 75 6c 65 73 20 61 72 65   three rules are
13460 20 66 69 72 73 74 20 61 70 70 6c 69 65 64 20 74   first applied t
13470 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a  o the left-most.
13480 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f  SELECT in the co
13490 6d 70 6f 75 6e 64 2e 20 20 49 66 20 61 20 6d 61  mpound.  If a ma
134a0 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
134b0 65 20 73 65 61 72 63 68 20 73 74 6f 70 73 2e 20  e search stops. 
134c0 20 4f 74 68 65 72 77 69 73 65 2c 0a 74 68 65 20   Otherwise,.the 
134d0 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74  next SELECT to t
134e0 68 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65  he right is trie
134f0 64 2e 20 20 54 68 69 73 20 63 6f 6e 74 69 6e 75  d.  This continu
13500 65 73 20 75 6e 74 69 6c 20 61 20 6d 61 74 63 68  es until a match
13510 0a 69 73 20 66 6f 75 6e 64 2e 20 20 45 61 63 68  .is found.  Each
13520 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
13530 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
13540 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
13550 74 65 6c 79 20 0a 61 6e 64 20 6d 61 79 20 63 6f  tely .and may co
13560 6d 65 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e  me from differen
13570 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
13580 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  nts in the compo
13590 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  und.</p>..<p>The
135a0 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 70 6c   LIMIT clause pl
135b0 61 63 65 73 20 61 6e 20 75 70 70 65 72 20 62 6f  aces an upper bo
135c0 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  und on the numbe
135d0 72 20 6f 66 20 72 6f 77 73 0a 72 65 74 75 72 6e  r of rows.return
135e0 65 64 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ed in the result
135f0 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 4c 49  .  A negative LI
13600 4d 49 54 20 69 6e 64 69 63 61 74 65 73 20 6e 6f  MIT indicates no
13610 20 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a 54 68   upper bound..Th
13620 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45  e optional OFFSE
13630 54 20 66 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49  T following LIMI
13640 54 20 73 70 65 63 69 66 69 65 73 20 68 6f 77 20  T specifies how 
13650 6d 61 6e 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69  many.rows to ski
13660 70 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  p at the beginni
13670 6e 67 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ng of the result
13680 20 73 65 74 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f   set..In a compo
13690 75 6e 64 20 71 75 65 72 79 2c 20 74 68 65 20 4c  und query, the L
136a0 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20  IMIT clause may 
136b0 6f 6e 6c 79 20 61 70 70 65 61 72 20 6f 6e 20 74  only appear on t
136c0 68 65 0a 66 69 6e 61 6c 20 53 45 4c 45 43 54 20  he.final SELECT 
136d0 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6c  statement..The l
136e0 69 6d 69 74 20 69 73 20 61 70 70 6c 69 65 64 20  imit is applied 
136f0 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 71 75  to the entire qu
13700 65 72 79 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69  ery not.to the i
13710 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43 54  ndividual SELECT
13720 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 77 68   statement to wh
13730 69 63 68 20 69 74 20 69 73 20 61 74 74 61 63 68  ich it is attach
13740 65 64 2e 0a 4e 6f 74 65 20 74 68 61 74 20 69 66  ed..Note that if
13750 20 74 68 65 20 4f 46 46 53 45 54 20 6b 65 79 77   the OFFSET keyw
13760 6f 72 64 20 69 73 20 75 73 65 64 20 69 6e 20 74  ord is used in t
13770 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c  he LIMIT clause,
13780 20 74 68 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20   then the.limit 
13790 69 73 20 74 68 65 20 66 69 72 73 74 20 6e 75 6d  is the first num
137a0 62 65 72 20 61 6e 64 20 74 68 65 20 6f 66 66 73  ber and the offs
137b0 65 74 20 69 73 20 74 68 65 20 73 65 63 6f 6e 64  et is the second
137c0 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 61 0a 63   number.  If a.c
137d0 6f 6d 6d 61 20 69 73 20 75 73 65 64 20 69 6e 73  omma is used ins
137e0 74 65 61 64 20 6f 66 20 74 68 65 20 4f 46 46 53  tead of the OFFS
137f0 45 54 20 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e  ET keyword, then
13800 20 74 68 65 20 6f 66 66 73 65 74 20 69 73 20 74   the offset is t
13810 68 65 0a 66 69 72 73 74 20 6e 75 6d 62 65 72 20  he.first number 
13820 61 6e 64 20 74 68 65 20 6c 69 6d 69 74 20 69 73  and the limit is
13830 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62   the second numb
13840 65 72 2e 20 20 54 68 69 73 20 73 65 65 6d 69 6e  er.  This seemin
13850 67 0a 63 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69  g.contradition i
13860 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20  s intentional - 
13870 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d  it maximizes com
13880 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
13890 6c 65 67 61 63 79 0a 53 51 4c 20 64 61 74 61 62  legacy.SQL datab
138a0 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70  ase systems..</p
138b0 3e 0a 0a 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64  >..<p>A compound
138c0 20 53 45 4c 45 43 54 20 69 73 20 66 6f 72 6d 65   SELECT is forme
138d0 64 20 66 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f  d from two or mo
138e0 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  re simple SELECT
138f0 73 20 63 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f  s connected.by o
13900 6e 65 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74  ne of the operat
13910 6f 72 73 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  ors UNION, UNION
13920 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c   ALL, INTERSECT,
13930 20 6f 72 20 45 58 43 45 50 54 2e 20 20 49 6e 0a   or EXCEPT.  In.
13940 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
13950 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74  T, all the const
13960 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d  ituent SELECTs m
13970 75 73 74 20 73 70 65 63 69 66 79 20 74 68 65 0a  ust specify the.
13980 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 72  same number of r
13990 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20  esult columns.  
139a0 54 68 65 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c  There may be onl
139b0 79 20 61 20 73 69 6e 67 6c 65 20 4f 52 44 45 52  y a single ORDER
139c0 20 42 59 0a 63 6c 61 75 73 65 20 61 74 20 74 68   BY.clause at th
139d0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d  e end of the com
139e0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 20 54  pound SELECT.  T
139f0 68 65 20 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49  he UNION and UNI
13a00 4f 4e 20 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73  ON ALL.operators
13a10 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 72 65 73   combine the res
13a20 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45  ults of the SELE
13a30 43 54 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  CTs to the right
13a40 20 61 6e 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61   and left into.a
13a50 20 73 69 6e 67 6c 65 20 62 69 67 20 74 61 62 6c   single big tabl
13a60 65 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  e.  The differen
13a70 63 65 20 69 73 20 74 68 61 74 20 69 6e 20 55 4e  ce is that in UN
13a80 49 4f 4e 20 61 6c 6c 20 72 65 73 75 6c 74 20 72  ION all result r
13a90 6f 77 73 0a 61 72 65 20 64 69 73 74 69 6e 63 74  ows.are distinct
13aa0 20 77 68 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20   where in UNION 
13ab0 41 4c 4c 20 74 68 65 72 65 20 6d 61 79 20 62 65  ALL there may be
13ac0 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 54 68 65   duplicates..The
13ad0 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
13ae0 74 6f 72 20 74 61 6b 65 73 20 74 68 65 20 69 6e  tor takes the in
13af0 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
13b00 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
13b10 0a 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20  .left and right 
13b20 53 45 4c 45 43 54 73 2e 20 20 45 58 43 45 50 54  SELECTs.  EXCEPT
13b30 20 74 61 6b 65 73 20 74 68 65 20 72 65 73 75 6c   takes the resul
13b40 74 20 6f 66 20 6c 65 66 74 20 53 45 4c 45 43 54  t of left SELECT
13b50 20 61 66 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20   after.removing 
13b60 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
13b70 68 65 20 72 69 67 68 74 20 53 45 4c 45 43 54 2e  he right SELECT.
13b80 20 20 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20    When three or 
13b90 6d 6f 72 65 20 53 45 4c 45 43 54 73 0a 61 72 65  more SELECTs.are
13ba0 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
13bb0 61 20 63 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79  a compound, they
13bc0 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74   group from left
13bd0 20 74 6f 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 0a   to right.</p>..
13be0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
13bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c30 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50  #####.Section UP
13c40 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50 44  DATE update {UPD
13c50 41 54 45 20 55 50 44 41 54 45 73 7d 0a 0a 42 75  ATE UPDATEs}..Bu
13c60 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61  bbleDiagram upda
13c70 74 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65  te-stmt 1.Bubble
13c80 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65  Diagram qualifie
13c90 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74  d-table-name.</t
13ca0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 55 50 44 41  cl>..<p>The UPDA
13cb0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
13cc0 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74  used to change t
13cd0 68 65 20 76 61 6c 75 65 20 6f 66 20 63 6f 6c 75  he value of colu
13ce0 6d 6e 73 20 69 6e 20 0a 73 65 6c 65 63 74 65 64  mns in .selected
13cf0 20 72 6f 77 73 20 6f 66 20 61 20 74 61 62 6c 65   rows of a table
13d00 2e 20 20 45 61 63 68 20 61 73 73 69 67 6e 6d 65  .  Each assignme
13d10 6e 74 20 69 6e 20 61 6e 20 55 50 44 41 54 45 20  nt in an UPDATE 
13d20 73 70 65 63 69 66 69 65 73 0a 61 20 63 6f 6c 75  specifies.a colu
13d30 6d 6e 20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c  mn name to the l
13d40 65 66 74 20 6f 66 20 74 68 65 20 65 71 75 61 6c  eft of the equal
13d50 73 20 73 69 67 6e 20 61 6e 64 20 61 6e 20 61 72  s sign and an ar
13d60 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
13d70 6f 6e 0a 74 6f 20 74 68 65 20 72 69 67 68 74 2e  on.to the right.
13d80 20 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e    The expression
13d90 73 20 6d 61 79 20 75 73 65 20 74 68 65 20 76 61  s may use the va
13da0 6c 75 65 73 20 6f 66 20 6f 74 68 65 72 20 63 6f  lues of other co
13db0 6c 75 6d 6e 73 2e 0a 41 6c 6c 20 65 78 70 72 65  lumns..All expre
13dc0 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75  ssions are evalu
13dd0 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20  ated before any 
13de0 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
13df0 6d 61 64 65 2e 0a 41 20 57 48 45 52 45 20 63 6c  made..A WHERE cl
13e00 61 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64  ause can be used
13e10 20 74 6f 20 72 65 73 74 72 69 63 74 20 77 68 69   to restrict whi
13e20 63 68 20 72 6f 77 73 20 61 72 65 20 75 70 64 61  ch rows are upda
13e30 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ted.</p>..<p>The
13e40 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69   optional confli
13e50 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73  ct-clause allows
13e60 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69   the specificati
13e70 6f 6e 20 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61  on of an alterna
13e80 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20  tive.constraint 
13e90 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
13ea0 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  ion algorithm to
13eb0 20 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73   use during this
13ec0 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65   one command..Se
13ed0 65 20 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69  e the section ti
13ee0 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43  tled.[ON CONFLIC
13ef0 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  T] for additiona
13f00 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  l information.</
13f10 70 3e 0a 0a 3c 70 3e 49 66 20 53 51 4c 69 74 65  p>..<p>If SQLite
13f20 20 69 73 20 62 75 69 6c 74 20 77 69 74 68 20 74   is built with t
13f30 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
13f40 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
13f50 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74  LIMIT].compile-t
13f60 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20  ime option then 
13f70 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  the syntax of th
13f80 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
13f90 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77  nt is extended.w
13fa0 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44  ith optional ORD
13fb0 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
13fc0 63 6c 61 75 73 65 73 20 61 73 20 66 6f 6c 6c 6f  clauses as follo
13fd0 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  ws:</p>..<tcl>Bu
13fe0 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61  bbleDiagram upda
13ff0 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c  te-stmt-limited<
14000 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70  /tcl>..<p>The op
14010 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 63 6c 61  tional LIMIT cla
14020 75 73 65 20 63 61 6e 20 62 65 20 75 73 65 64 20  use can be used 
14030 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d  to limit the num
14040 62 65 72 20 6f 66 0a 72 6f 77 73 20 6d 6f 64 69  ber of.rows modi
14050 66 65 64 2c 20 61 6e 64 20 74 68 65 72 65 62 79  fed, and thereby
14060 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20   limit the size 
14070 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
14080 6f 6e 2e 0a 54 68 65 20 4f 52 44 45 52 20 42 59  on..The ORDER BY
14090 20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20   clause is used 
140a0 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e  only to determin
140b0 65 20 77 68 69 63 68 20 72 6f 77 73 20 66 61 6c  e which rows fal
140c0 6c 0a 77 69 74 68 69 6e 20 74 68 65 20 4c 49 4d  l.within the LIM
140d0 49 54 2e 20 20 54 68 65 20 6f 72 64 65 72 20 69  IT.  The order i
140e0 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61 72 65  n which rows are
140f0 20 6d 6f 64 69 66 69 65 64 20 69 73 20 61 72 62   modified is arb
14100 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e 6f  itrary.and is no
14110 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  t determined by 
14120 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
14130 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  use.</p>..<tcl>.
14140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
14190 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76 61  ection VACUUM va
141a0 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75 62  cuum VACUUM..Bub
141b0 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75 75  bleDiagram vacuu
141c0 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  m-stmt 1.</tcl>.
141d0 0a 3c 70 3e 57 68 65 6e 20 61 6e 20 6f 62 6a 65  .<p>When an obje
141e0 63 74 20 28 74 61 62 6c 65 2c 20 69 6e 64 65 78  ct (table, index
141f0 2c 20 6f 72 20 74 72 69 67 67 65 72 29 20 69 73  , or trigger) is
14200 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68   dropped from th
14210 65 20 0a 64 61 74 61 62 61 73 65 2c 20 69 74 20  e .database, it 
14220 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d  leaves behind em
14230 70 74 79 20 73 70 61 63 65 2e 20 20 54 68 69 73  pty space.  This
14240 20 6d 61 6b 65 73 20 74 68 65 20 64 61 74 61 62   makes the datab
14250 61 73 65 20 0a 66 69 6c 65 20 6c 61 72 67 65 72  ase .file larger
14260 20 74 68 61 6e 20 69 74 20 6e 65 65 64 73 20 74   than it needs t
14270 6f 20 62 65 2c 20 62 75 74 20 63 61 6e 20 73 70  o be, but can sp
14280 65 65 64 20 75 70 20 69 6e 73 65 72 74 73 2e 20  eed up inserts. 
14290 20 49 6e 20 74 69 6d 65 20 0a 69 6e 73 65 72 74   In time .insert
142a0 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 63 61  s and deletes ca
142b0 6e 20 6c 65 61 76 65 20 74 68 65 20 64 61 74 61  n leave the data
142c0 62 61 73 65 20 66 69 6c 65 20 73 74 72 75 63 74  base file struct
142d0 75 72 65 20 66 72 61 67 6d 65 6e 74 65 64 2c 20  ure fragmented, 
142e0 0a 77 68 69 63 68 20 73 6c 6f 77 73 20 64 6f 77  .which slows dow
142f0 6e 20 64 69 73 6b 20 61 63 63 65 73 73 20 74 6f  n disk access to
14300 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14310 6e 74 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ntents.</p>..<p>
14320 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61  The VACUUM comma
14330 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d 61  nd cleans.the ma
14340 69 6e 20 64 61 74 61 62 61 73 65 20 62 79 20 63  in database by c
14350 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e 74 65  opying its conte
14360 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f 72 61  nts to a tempora
14370 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
14380 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67 20   and .reloading 
14390 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74  the original dat
143a0 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f 6d 20  abase file from 
143b0 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69 73 20  the copy.  This 
143c0 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72 65 65  eliminates .free
143d0 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e 73 20   pages,  aligns 
143e0 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20 62 65  table data to be
143f0 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e 64   contiguous, and
14400 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65 61 6e   otherwise clean
14410 73 20 0a 75 70 20 74 68 65 20 64 61 74 61 62 61  s .up the databa
14420 73 65 20 66 69 6c 65 20 73 74 72 75 63 74 75 72  se file structur
14430 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 56  e.</p>..<p>The V
14440 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
14450 79 20 63 68 61 6e 67 65 20 74 68 65 20 0a 3c 61  y change the .<a
14460 20 68 72 65 66 3d 22 6c 61 6e 67 5f 63 72 65 61   href="lang_crea
14470 74 65 74 61 62 6c 65 2e 68 74 6d 6c 23 72 6f 77  tetable.html#row
14480 69 64 22 3e 52 4f 57 49 44 3c 2f 61 3e 20 6f 66  id">ROWID</a> of
14490 20 65 6e 74 69 72 65 73 20 69 6e 20 74 61 62 6c   entires in tabl
144a0 65 73 20 74 68 61 74 20 64 6f 0a 6e 6f 74 20 68  es that do.not h
144b0 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20  ave an explicit 
144c0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
144d0 4b 45 59 2e 3c 2f 70 3e 0a 0a 3c 70 3e 56 41 43  KEY.</p>..<p>VAC
144e0 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  UUM only works o
144f0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
14500 61 73 65 2e 0a 49 74 20 69 73 20 6e 6f 74 20 70  ase..It is not p
14510 6f 73 73 69 62 6c 65 20 74 6f 20 56 41 43 55 55  ossible to VACUU
14520 4d 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  M an attached da
14530 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
14540 0a 0a 3c 70 3e 54 68 65 20 56 41 43 55 55 4d 20  ..<p>The VACUUM 
14550 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
14560 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  l if there is an
14570 20 61 63 74 69 76 65 20 74 72 61 6e 73 61 63 74   active transact
14580 69 6f 6e 2e 0a 54 68 65 20 56 41 43 55 55 4d 20  ion..The VACUUM 
14590 63 6f 6d 6d 61 6e 64 20 69 73 20 61 20 6e 6f 2d  command is a no-
145a0 6f 70 20 66 6f 72 20 69 6e 2d 6d 65 6d 6f 72 79  op for in-memory
145b0 20 64 61 74 61 62 61 73 65 73 2e 3c 2f 70 3e 0a   databases.</p>.
145c0 0a 3c 70 3e 41 73 20 6f 66 20 53 51 4c 69 74 65  .<p>As of SQLite
145d0 20 76 65 72 73 69 6f 6e 20 33 2e 31 2c 20 61 6e   version 3.1, an
145e0 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
145f0 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
14600 20 63 6f 6d 6d 61 6e 64 0a 69 73 20 61 75 74 6f   command.is auto
14610 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
14620 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20  abled using the 
14630 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70  .[auto_vacuum] p
14640 72 61 67 6d 61 2e 20 20 57 68 65 6e 20 5b 61 75  ragma.  When [au
14650 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e  to_vacuum] is en
14660 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61  abled for a data
14670 62 61 73 65 2c 20 0a 6c 61 72 67 65 20 64 65 6c  base, .large del
14680 65 74 65 73 20 63 61 75 73 65 0a 74 68 65 20 73  etes cause.the s
14690 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
146a0 61 73 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69  ase file to shri
146b0 6e 6b 2e 20 20 48 6f 77 65 76 65 72 2c 20 5b 61  nk.  However, [a
146c0 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 61 6c 73 6f  uto_vacuum].also
146d0 20 63 61 75 73 65 73 20 65 78 63 65 73 73 20 66   causes excess f
146e0 72 61 67 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ragmentation of 
146f0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
14700 65 2e 20 20 41 6e 64 20 5b 61 75 74 6f 5f 76 61  e.  And [auto_va
14710 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20 63  cuum].does not c
14720 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c 79  ompact partially
14730 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f 66   filled pages of
14740 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 73   the database as
14750 20 56 41 43 55 55 4d 0a 64 6f 65 73 2e 0a 3c 2f   VACUUM.does..</
14760 70 3e 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  p>.<tcl>.#######
14770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147b0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
147c0 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64  {INDEXED BY} ind
147d0 65 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44  exedby {{INDEXED
147e0 20 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45   BY} {NOT INDEXE
147f0 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  D}}..</tcl>.<p>T
14800 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
14810 72 61 73 65 20 69 73 20 61 20 53 51 4c 20 65 78  rase is a SQL ex
14820 74 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e  tension found on
14830 6c 79 20 69 6e 20 53 51 4c 69 74 65 20 77 68 69  ly in SQLite whi
14840 63 68 20 63 61 6e 0a 62 65 20 75 73 65 64 20 74  ch can.be used t
14850 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
14860 65 20 63 6f 72 72 65 63 74 20 69 6e 64 69 63 65  e correct indice
14870 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64  s are being used
14880 20 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 0a   on a [DELETE],.
14890 5b 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50  [SELECT], or [UP
148a0 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  DATE] statement.
148b0 0a 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  .The INDEXED BY 
148c0 70 68 72 61 73 65 20 61 6c 77 61 79 73 20 66 6f  phrase always fo
148d0 6c 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65 20 6f  llows the name o
148e0 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 53  f a table that S
148f0 51 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20 72 65  QLite will.be re
14900 61 64 69 6e 67 2e 20 20 54 68 65 20 49 4e 44 45  ading.  The INDE
14910 58 45 44 20 42 59 20 70 68 72 61 73 65 20 63 61  XED BY phrase ca
14920 6e 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65  n be seen in the
14930 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61   following synta
14940 78 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a  x.diagrams:</p>.
14950 0a 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44 69 61  .<tcl>.BubbleDia
14960 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
14970 61 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  able-name.Bubble
14980 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73  Diagram single-s
14990 6f 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  ource.</tcl>..<p
149a0 3e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59  >The "INDEXED BY
149b0 20 69 6e 64 65 78 2d 6e 61 6d 65 22 20 63 6c 61   index-name" cla
149c0 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
149d0 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64  at the named ind
149e0 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20  ex.must be used 
149f0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b  in order to look
14a00 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68   up values on th
14a10 65 20 70 72 65 63 65 65 64 69 6e 67 20 74 61 62  e preceeding tab
14a20 6c 65 2e 0a 49 66 20 69 6e 64 65 78 2d 6e 61 6d  le..If index-nam
14a30 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
14a40 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73   or cannot be us
14a50 65 64 20 66 6f 72 20 74 68 65 20 71 75 65 72 79  ed for the query
14a60 2c 20 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61  , then.the prepa
14a70 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51  ration of the SQ
14a80 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c  L statement fail
14a90 73 2e 0a 54 68 65 20 22 4e 4f 54 20 49 4e 44 45  s..The "NOT INDE
14aa0 58 45 44 22 20 63 6c 61 75 73 65 20 73 70 65 63  XED" clause spec
14ab0 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e  ifies that no in
14ac0 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65  dex shall be use
14ad0 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67  d when.accessing
14ae0 20 74 68 65 20 70 72 65 63 65 65 64 69 6e 67 20   the preceeding 
14af0 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67  table, including
14b00 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73   implied indices
14b10 20 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55   create by.UNIQU
14b20 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
14b30 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  Y constraints.  
14b40 48 6f 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54  However, the INT
14b50 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
14b60 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73  .can still be us
14b70 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e  ed to look up en
14b80 74 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20  tries even when 
14b90 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73  "NOT INDEXED" is
14ba0 20 73 70 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a   specified.</p>.
14bb0 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74  .<p>Some SQL dat
14bc0 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72  abase engines pr
14bd0 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61  ovide non-standa
14be0 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e  rd "hint" mechan
14bf0 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62  isms which.can b
14c00 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74  e used to give t
14c10 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
14c20 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77  er clues about w
14c30 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73  hat indices it s
14c40 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20  hould.use for a 
14c50 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65  particular state
14c60 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58  ment.  The INDEX
14c70 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51   BY clause of SQ
14c80 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74  Lite is .<em>not
14c90 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20  </em> a hinting 
14ca0 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74  mechanism and it
14cb0 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
14cc0 73 65 64 20 61 73 20 73 75 63 68 2e 0a 54 68 65  sed as such..The
14cd0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
14ce0 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65  se does not give
14cf0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68   the optimizer h
14d00 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68  ints about which
14d10 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69   index.to use; i
14d20 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69  t gives the opti
14d30 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d  mizer a requirem
14d40 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64  ent of which ind
14d50 65 78 20 74 6f 20 75 73 65 2e 0a 49 66 20 74 68  ex to use..If th
14d60 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
14d70 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75  r is unable to u
14d80 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70 65  se the index spe
14d90 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e  cified by the.IN
14da0 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DEX BY clause, t
14db0 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77 69  hen the query wi
14dc0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
14dd0 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  error.</p>..<p>T
14de0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
14df0 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c  ause is <em>not<
14e00 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f  /em> intended fo
14e10 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a  r use in tuning.
14e20 74 68 65 20 70 72 65 66 6f 72 6d 61 6e 63 65 20  the preformance 
14e30 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65  of a query.  The
14e40 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49   intent of the I
14e50 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
14e60 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72   is.to raise a r
14e70 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66  un-time error if
14e80 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65   a schema change
14e90 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69  , such as droppi
14ea0 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61  ng or.creating a
14eb0 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20  n index, causes 
14ec0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66  the query plan f
14ed0 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74  or a time-sensit
14ee0 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61  ive query.to cha
14ef0 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45  nge.  The INDEXE
14f00 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 64  D BY clause is d
14f10 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20  esigned to help 
14f20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62  detect.undesirab
14f30 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68  le query plan ch
14f40 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65 67  anges during reg
14f50 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e  ression testing.
14f60 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20  .Developers are 
14f70 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d  admonished to om
14f80 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e  it all use of IN
14f90 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67 0a  DEXED BY during.
14fa0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73 69  application desi
14fb0 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  gn, implementati
14fc0 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e 64  on, testing, and
14fd0 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44   tuning.  If.IND
14fe0 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62 65  EXED BY is to be
14ff0 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69 74   used at all, it
15000 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65 72   should be inser
15010 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 0a  ted at the very.
15020 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65 6c  end of the devel
15030 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20 77  opment process w
15040 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77  hen "locking dow
15050 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e  n" a design.</p>
15060 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
15070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
150a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
150b0 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f  #####.# A list o
150c0 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61  f keywords.  A a
150d0 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61  sterisk occurs a
150e0 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64  fter the keyword
150f0 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74   if it is on.# t
15100 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74  he fallback list
15110 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f  ..#.set keyword_
15120 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20  list [lsort {.  
15130 20 41 42 4f 52 54 2a 0a 20 20 20 41 44 44 0a 20   ABORT*.   ADD. 
15140 20 20 41 46 54 45 52 2a 0a 20 20 20 41 4c 4c 0a    AFTER*.   ALL.
15150 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c     ALTER.   ANAL
15160 59 5a 45 2a 0a 20 20 20 41 4e 44 0a 20 20 20 41  YZE*.   AND.   A
15170 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54 54  S.   ASC*.   ATT
15180 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43 52  ACH*.   AUTOINCR
15190 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 2a  EMENT.   BEFORE*
151a0 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42 45  .   BEGIN*.   BE
151b0 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20 20 43  TWEEN.   BY.   C
151c0 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53 45 0a  ASCADE*.   CASE.
151d0 20 20 20 43 41 53 54 2a 0a 20 20 20 43 48 45 43     CAST*.   CHEC
151e0 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20  K.   COLLATE.   
151f0 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54  COLUMN.   COMMIT
15200 0a 20 20 20 43 4f 4e 46 4c 49 43 54 2a 0a 20 20  .   CONFLICT*.  
15210 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43   CONSTRAINT.   C
15220 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20  REATE.   CROSS. 
15230 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2a 0a    CURRENT_DATE*.
15240 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2a     CURRENT_TIME*
15250 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  .   CURRENT_TIME
15260 53 54 41 4d 50 2a 0a 20 20 20 44 41 54 41 42 41  STAMP*.   DATABA
15270 53 45 2a 0a 20 20 20 44 45 46 41 55 4c 54 0a 20  SE*.   DEFAULT. 
15280 20 20 44 45 46 45 52 52 45 44 2a 0a 20 20 20 44    DEFERRED*.   D
15290 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c  EFERRABLE.   DEL
152a0 45 54 45 0a 20 20 20 44 45 53 43 2a 0a 20 20 20  ETE.   DESC*.   
152b0 44 45 54 41 43 48 2a 0a 20 20 20 44 49 53 54 49  DETACH*.   DISTI
152c0 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45  NCT.   DROP.   E
152d0 4e 44 2a 0a 20 20 20 45 41 43 48 2a 0a 20 20 20  ND*.   EACH*.   
152e0 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45 0a 20  ELSE.   ESCAPE. 
152f0 20 20 45 58 43 45 50 54 0a 20 20 20 45 58 43 4c    EXCEPT.   EXCL
15300 55 53 49 56 45 2a 0a 20 20 20 45 58 49 53 54 53  USIVE*.   EXISTS
15310 0a 20 20 20 45 58 50 4c 41 49 4e 2a 0a 20 20 20  .   EXPLAIN*.   
15320 46 41 49 4c 2a 0a 20 20 20 46 4f 52 2a 0a 20 20  FAIL*.   FOR*.  
15330 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d   FOREIGN.   FROM
15340 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42  .   FULL.   GLOB
15350 2a 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 48 41  *.   GROUP.   HA
15360 56 49 4e 47 0a 20 20 20 49 46 2a 0a 20 20 20 49  VING.   IF*.   I
15370 47 4e 4f 52 45 2a 0a 20 20 20 49 4d 4d 45 44 49  GNORE*.   IMMEDI
15380 41 54 45 2a 0a 20 20 20 49 4e 0a 20 20 20 49 4e  ATE*.   IN.   IN
15390 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44 2a 0a  DEX.   INDEXED*.
153a0 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a 20 20     INITIALLY*.  
153b0 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52 54   INNER.   INSERT
153c0 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20 20 20  .   INSTEAD*.   
153d0 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
153e0 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
153f0 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
15400 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b  *.   LEFT.   LIK
15410 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d  E*.   LIMIT.   M
15420 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52 41 4c  ATCH*.   NATURAL
15430 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55  .   NOT.   NOTNU
15440 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46  LL.   NULL.   OF
15450 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20 20 20  *.   OFFSET*.   
15460 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45  ON.   OR.   ORDE
15470 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50 4c  R.   OUTER.   PL
15480 41 4e 2a 0a 20 20 20 50 52 41 47 4d 41 2a 0a 20  AN*.   PRAGMA*. 
15490 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45    PRIMARY.   QUE
154a0 52 59 2a 0a 20 20 20 52 41 49 53 45 2a 0a 20 20  RY*.   RAISE*.  
154b0 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52   REFERENCES.   R
154c0 45 47 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58  EGEXP.   REINDEX
154d0 2a 0a 20 20 20 52 45 4e 41 4d 45 2a 0a 20 20 20  *.   RENAME*.   
154e0 52 45 50 4c 41 43 45 2a 0a 20 20 20 52 45 53 54  REPLACE*.   REST
154f0 52 49 43 54 2a 0a 20 20 20 52 49 47 48 54 0a 20  RICT*.   RIGHT. 
15500 20 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f    ROLLBACK.   RO
15510 57 2a 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20  W*.   SELECT.   
15520 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20  SET.   TABLE.   
15530 54 45 4d 50 2a 0a 20 20 20 54 45 4d 50 4f 52 41  TEMP*.   TEMPORA
15540 52 59 2a 0a 20 20 20 54 48 45 4e 0a 20 20 20 54  RY*.   THEN.   T
15550 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e  O.   TRANSACTION
15560 0a 20 20 20 54 52 49 47 47 45 52 2a 0a 20 20 20  .   TRIGGER*.   
15570 55 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a  UNION.   UNIQUE.
15580 20 20 20 55 50 44 41 54 45 0a 20 20 20 55 53 49     UPDATE.   USI
15590 4e 47 0a 20 20 20 56 41 43 55 55 4d 2a 0a 20 20  NG.   VACUUM*.  
155a0 20 56 41 4c 55 45 53 0a 20 20 20 56 49 45 57 2a   VALUES.   VIEW*
155b0 0a 20 20 20 56 49 52 54 55 41 4c 2a 0a 20 20 20  .   VIRTUAL*.   
155c0 57 48 45 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d  WHEN.   WHERE.}]
155d0 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49 56 20  ..hd_puts {<DIV 
155e0 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63 74 69  class="pdf_secti
155f0 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53  on">}.Section {S
15600 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73 7d 20  QLite Keywords} 
15610 6b 65 79 77 6f 72 64 73 20 7b 7b 53 51 4c 20 6b  keywords {{SQL k
15620 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79  eyword} {SQL key
15630 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20  words}}.hd_puts 
15640 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a  {</DIV>}.</tcl>.
15650 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73 74 61 6e  .<p>The SQL stan
15660 64 61 72 64 20 73 70 65 63 69 66 69 65 73 20 61  dard specifies a
15670 20 68 75 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   huge number of 
15680 6b 65 79 77 6f 72 64 73 20 77 68 69 63 68 20 6d  keywords which m
15690 61 79 20 6e 6f 74 0a 62 65 20 75 73 65 64 20 61  ay not.be used a
156a0 73 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  s the names of t
156b0 61 62 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20  ables, indices, 
156c0 63 6f 6c 75 6d 6e 73 2c 20 64 61 74 61 62 61 73  columns, databas
156d0 65 73 2c 20 75 73 65 72 2d 64 65 66 69 6e 65 64  es, user-defined
156e0 0a 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c  .functions, coll
156f0 61 74 69 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20  ations, virtual 
15700 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f  table modules, o
15710 72 20 61 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65  r any other name
15720 64 20 6f 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69  d object..The li
15730 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 69  st of keywords i
15740 73 20 73 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66  s so long that f
15750 65 77 20 70 65 6f 70 6c 65 20 63 61 6e 20 72 65  ew people can re
15760 6d 65 6d 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e  member them all.
15770 0a 46 6f 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f  .For most SQL co
15780 64 65 2c 20 79 6f 75 72 20 73 61 66 65 73 74 20  de, your safest 
15790 62 65 74 20 69 73 20 74 6f 20 6e 65 76 65 72 20  bet is to never 
157a0 75 73 65 20 61 6e 79 20 45 6e 67 6c 69 73 68 20  use any English 
157b0 6c 61 6e 67 75 61 67 65 0a 77 6f 72 64 20 61 73  language.word as
157c0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 75   the name of a u
157d0 73 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  ser-defined obje
157e0 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79  ct.</p>..<p>If y
157f0 6f 75 20 77 61 6e 74 20 74 6f 20 75 73 65 20 61  ou want to use a
15800 20 6b 65 79 77 6f 72 64 20 61 73 20 61 20 6e 61   keyword as a na
15810 6d 65 2c 20 79 6f 75 20 6e 65 65 64 20 74 6f 20  me, you need to 
15820 71 75 6f 74 65 20 69 74 2e 20 20 54 68 65 72 65  quote it.  There
15830 0a 61 72 65 20 74 68 72 65 65 20 77 61 79 73 20  .are three ways 
15840 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f  of quoting keywo
15850 72 64 73 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f  rds in SQLite:</
15860 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75  p>..<p>.<blockqu
15870 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72  ote>.<table>.<tr
15880 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
15890 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c  p"><b>'keyword'<
158a0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /b></td><td widt
158b0 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74  h="20"></td>..<t
158c0 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73  d>A keyword in s
158d0 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20  ingle quotes is 
158e0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
158f0 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e 67 0a   literal string.
15900 20 20 20 20 20 20 20 20 69 66 20 69 74 20 6f 63          if it oc
15910 63 75 72 73 20 69 6e 20 61 20 63 6f 6e 74 65 78  curs in a contex
15920 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e 67  t where a string
15930 20 6c 69 74 65 72 61 6c 20 69 73 20 61 6c 6c 6f   literal is allo
15940 77 65 64 2c 20 6f 74 68 65 72 77 69 73 65 0a 09  wed, otherwise..
15950 69 74 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  it is understood
15960 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   as an identifie
15970 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72  r.</td></tr>.<tr
15980 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
15990 70 22 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c  p"><b>"keyword"<
159a0 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64  /b></td><td></td
159b0 3e 0a 09 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64  >..<td>A keyword
159c0 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65   in double-quote
159d0 73 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  s is interpreted
159e0 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   as an identifie
159f0 72 20 69 66 0a 20 20 20 20 20 20 20 20 69 74 20  r if.        it 
15a00 6d 61 74 63 68 65 73 20 61 20 6b 6e 6f 77 6e 20  matches a known 
15a10 69 64 65 6e 74 69 66 69 65 72 2e 20 20 4f 74 68  identifier.  Oth
15a20 65 72 77 69 73 65 20 69 74 20 69 73 20 69 6e 74  erwise it is int
15a30 65 72 70 72 65 74 65 64 20 61 73 20 61 0a 20 20  erpreted as a.  
15a40 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 74        string lit
15a50 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  eral.</td></tr>.
15a60 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
15a70 22 74 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65  "top"><b>&#91;ke
15a80 79 77 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f  yword&#93;</b></
15a90 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
15aa0 64 3e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c  d>A keyword encl
15ab0 6f 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62  osed in square b
15ac0 72 61 63 6b 65 74 73 20 69 73 20 61 6c 77 61 79  rackets is alway
15ad0 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 61 73 0a  s understood as.
15ae0 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e 74          an ident
15af0 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73 20  ifier.  This is 
15b00 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
15b10 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67 20  .  This quoting 
15b20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20 20  mechanism.      
15b30 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53 20    is used by MS 
15b40 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20 53  Access and SQL S
15b50 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e 63  erver and is inc
15b60 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  luded in SQLite 
15b70 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  for.        comp
15b80 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c  atibility.</td><
15b90 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
15ba0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e  blockquote>.</p>
15bb0 0a 0a 3c 70 3e 51 75 6f 74 65 64 20 6b 65 79 77  ..<p>Quoted keyw
15bc0 6f 72 64 73 20 61 72 65 20 75 6e 61 65 73 74 68  ords are unaesth
15bd0 65 74 69 63 2e 0a 54 6f 20 68 65 6c 70 20 79 6f  etic..To help yo
15be0 75 20 61 76 6f 69 64 20 74 68 65 6d 2c 20 53 51  u avoid them, SQ
15bf0 4c 69 74 65 20 61 6c 6c 6f 77 73 20 6d 61 6e 79  Lite allows many
15c00 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 62 65 20   keywords to be 
15c10 75 73 65 64 20 75 6e 71 75 6f 74 65 64 0a 61 73  used unquoted.as
15c20 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 64 61   the names of da
15c30 74 61 62 61 73 65 73 2c 20 74 61 62 6c 65 73 2c  tabases, tables,
15c40 20 69 6e 64 69 63 65 73 2c 20 74 72 69 67 67 65   indices, trigge
15c50 72 73 2c 20 76 69 65 77 73 2c 20 63 6f 6c 75 6d  rs, views, colum
15c60 6e 73 2c 0a 75 73 65 72 2d 64 65 66 69 6e 65 64  ns,.user-defined
15c70 20 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c   functions, coll
15c80 61 74 69 6f 6e 73 2c 20 61 74 74 61 63 68 65 64  ations, attached
15c90 20 64 61 74 61 62 61 73 65 73 2c 20 61 6e 64 20   databases, and 
15ca0 76 69 72 74 75 61 6c 0a 66 75 6e 63 74 69 6f 6e  virtual.function
15cb0 20 6d 6f 64 75 6c 65 73 2e 0a 49 6e 20 74 68 65   modules..In the
15cc0 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64   list of keyword
15cd0 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 2c 20  s that follows, 
15ce0 74 68 6f 73 65 20 74 68 61 74 20 63 61 6e 20 62  those that can b
15cf0 65 20 75 73 65 64 20 61 73 20 69 64 65 6e 74 69  e used as identi
15d00 66 69 65 72 73 0a 61 72 65 20 73 68 6f 77 6e 20  fiers.are shown 
15d10 69 6e 20 61 6e 20 69 74 61 6c 69 63 20 66 6f 6e  in an italic fon
15d20 74 2e 20 20 4b 65 79 77 6f 72 64 73 20 74 68 61  t.  Keywords tha
15d30 74 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64  t must be quoted
15d40 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 0a   in order to be.
15d50 75 73 65 64 20 61 73 20 69 64 65 6e 74 69 66 69  used as identifi
15d60 65 72 73 20 61 72 65 20 73 68 6f 77 6e 20 69 6e  ers are shown in
15d70 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a   bold.</p>..<p>.
15d80 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
15d90 6b 65 79 77 6f 72 64 73 20 66 72 6f 6d 20 74 69  keywords from ti
15da0 6d 65 20 74 6f 20 74 69 6d 65 20 77 68 65 6e 20  me to time when 
15db0 69 74 20 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20  it takes on new 
15dc0 66 65 61 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20  features..So to 
15dd0 70 72 65 76 65 6e 74 20 79 6f 75 72 20 63 6f 64  prevent your cod
15de0 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f  e from being bro
15df0 6b 65 6e 20 62 79 20 66 75 74 75 72 65 20 65 6e  ken by future en
15e00 68 61 6e 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20  hancements, you 
15e10 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20  should.normally 
15e20 71 75 6f 74 65 20 61 6e 79 20 69 6e 64 65 6e 74  quote any indent
15e30 69 66 69 65 72 20 74 68 61 74 20 69 73 20 61 6e  ifier that is an
15e40 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
15e50 65 20 77 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a  e word, even if.
15e60 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  you do not have 
15e70 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  to..</p>..<p>.Th
15e80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
15e90 74 68 65 20 6b 65 79 77 6f 72 64 73 20 63 75 72  the keywords cur
15ea0 72 65 6e 74 6c 79 20 72 65 63 6f 67 6e 69 7a 65  rently recognize
15eb0 64 20 62 79 20 53 51 4c 69 74 65 3a 0a 3c 2f 70  d by SQLite:.</p
15ec0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
15ed0 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30  <table width="10
15ee0 30 25 22 20 63 6c 61 73 73 3d 22 70 64 66 5f 6b  0%" class="pdf_k
15ef0 65 79 77 6f 72 64 73 22 3e 0a 3c 74 72 3e 0a 3c  eywords">.<tr>.<
15f00 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20  td align="left" 
15f10 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69 64  valign="top" wid
15f20 74 68 3d 22 32 30 25 22 3e 0a 0a 3c 74 63 6c 3e  th="20%">..<tcl>
15f30 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20  .set n [llength 
15f40 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73  $keyword_list].s
15f50 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52  et nCol 5.set nR
15f60 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e  ow [expr {($n+$n
15f70 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73  Col-1)/$nCol}].s
15f80 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77  et i 0.foreach w
15f90 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  ord $keyword_lis
15fa0 74 20 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e  t {.  if {[strin
15fb0 67 20 69 6e 64 65 78 20 24 77 6f 72 64 20 65 6e  g index $word en
15fc0 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20 20 20 20 73  d]=="*"} {.    s
15fd0 65 74 20 77 6f 72 64 20 5b 73 74 72 69 6e 67 20  et word [string 
15fe0 72 61 6e 67 65 20 24 77 6f 72 64 20 30 20 65 6e  range $word 0 en
15ff0 64 2d 31 5d 0a 20 20 20 20 73 65 74 20 66 6f 6e  d-1].    set fon
16000 74 20 69 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20  t i.  } else {. 
16010 20 20 20 73 65 74 20 66 6f 6e 74 20 62 0a 20 20     set font b.  
16020 7d 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f  }.  if {$i==$nRo
16030 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75 74 73  w} {.    hd_puts
16040 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67   "</td><td valig
16050 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d  n=\"top\" align=
16060 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68 3d 5c  \"left\" width=\
16070 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73 65 74  "20%\">".    set
16080 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a   i 1.  } else {.
16090 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20      incr i.  }. 
160a0 20 68 64 5f 70 75 74 73 20 22 3c 24 66 6f 6e 74   hd_puts "<$font
160b0 3e 24 77 6f 72 64 3c 2f 24 66 6f 6e 74 3e 3c 62  >$word</$font><b
160c0 72 3e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  r>".}.</tcl>.</t
160d0 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c  d></tr></table><
160e0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68  /blockquote>..<h
160f0 32 3e 53 70 65 63 69 61 6c 20 6e 61 6d 65 73 3c  2>Special names<
16100 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h2>..<p>The fol
16110 6c 6f 77 69 6e 67 20 61 72 65 20 6e 6f 74 20 6b  lowing are not k
16120 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74  eywords in SQLit
16130 65 2c 20 62 75 74 20 61 72 65 20 75 73 65 64 20  e, but are used 
16140 61 73 20 6e 61 6d 65 73 20 6f 66 20 0a 73 79 73  as names of .sys
16150 74 65 6d 20 6f 62 6a 65 63 74 73 2e 20 20 54 68  tem objects.  Th
16160 65 79 20 63 61 6e 20 62 65 20 75 73 65 64 20 61  ey can be used a
16170 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  s an identifier 
16180 66 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74 20  for a different 
16190 0a 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 2e  .type of object.
161a0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
161b0 65 20 63 6c 61 73 73 3d 22 70 64 66 5f 6b 65 79  e class="pdf_key
161c0 77 6f 72 64 73 22 3e 3c 62 3e 0a 20 20 5f 52 4f  words"><b>.  _RO
161d0 57 49 44 5f 3c 62 72 3e 0a 20 20 4d 41 49 4e 3c  WID_<br>.  MAIN<
161e0 62 72 3e 0a 20 20 4f 49 44 3c 62 72 3e 0a 20 20  br>.  OID<br>.  
161f0 52 4f 57 49 44 3c 62 72 3e 0a 20 20 53 51 4c 49  ROWID<br>.  SQLI
16200 54 45 5f 4d 41 53 54 45 52 3c 62 72 3e 0a 20 20  TE_MASTER<br>.  
16210 53 51 4c 49 54 45 5f 53 45 51 55 45 4e 43 45 3c  SQLITE_SEQUENCE<
16220 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f 54 45 4d  br>.  SQLITE_TEM
16230 50 5f 4d 41 53 54 45 52 3c 62 72 3e 0a 20 20 54  P_MASTER<br>.  T
16240 45 4d 50 3c 62 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c  EMP<br>.</b></bl
16250 6f 63 6b 71 75 6f 74 65 3e 0a                    ockquote>.