Documentation Source Text

Hex Artifact Content
Login

Artifact 9c60d72ab6c1d9a3bc02e3f75f28107cf99dfc2e:


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 20 20 73 65 74 20 69 20 30 0a 20 20 73 65 74  .  set i 0.  set
0490: 20 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69   lang_section_li
04a0: 73 74 20 7b 0a 20 20 7b 7b 43 52 45 41 54 45 20  st {.  {{CREATE 
04b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
04c0: 6c 65 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20 56  le}.  {{CREATE V
04d0: 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20 63 72  IRTUAL TABLE} cr
04e0: 65 61 74 65 76 74 61 62 7d 0a 20 20 7b 7b 43 52  eatevtab}.  {{CR
04f0: 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65 61  EATE INDEX} crea
0500: 74 65 69 6e 64 65 78 7d 0a 20 20 7b 56 41 43 55  teindex}.  {VACU
0510: 55 4d 20 76 61 63 75 75 6d 7d 0a 20 20 7b 7b 44  UM vacuum}.  {{D
0520: 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
0530: 61 62 6c 65 7d 0a 20 20 7b 7b 44 52 4f 50 20 49  able}.  {{DROP I
0540: 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 7d  NDEX} dropindex}
0550: 0a 20 20 7b 49 4e 53 45 52 54 20 69 6e 73 65 72  .  {INSERT inser
0560: 74 7d 0a 20 20 7b 52 45 50 4c 41 43 45 20 72 65  t}.  {REPLACE re
0570: 70 6c 61 63 65 7d 0a 20 20 7b 44 45 4c 45 54 45  place}.  {DELETE
0580: 20 64 65 6c 65 74 65 7d 0a 20 20 7b 55 50 44 41   delete}.  {UPDA
0590: 54 45 20 75 70 64 61 74 65 7d 0a 20 20 7b 53 45  TE update}.  {SE
05a0: 4c 45 43 54 20 73 65 6c 65 63 74 7d 0a 20 20 7b  LECT select}.  {
05b0: 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 7d  comment comment}
05c0: 0a 20 20 7b 45 58 50 4c 41 49 4e 20 65 78 70 6c  .  {EXPLAIN expl
05d0: 61 69 6e 7d 0a 20 20 7b 65 78 70 72 65 73 73 69  ain}.  {expressi
05e0: 6f 6e 20 65 78 70 72 7d 0a 20 20 7b 7b 42 45 47  on expr}.  {{BEG
05f0: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20  IN TRANSACTION} 
0600: 74 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b  transaction}.  {
0610: 7b 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54  {COMMIT TRANSACT
0620: 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e  ION} transaction
0630: 20 43 4f 4d 4d 49 54 7d 0a 20 20 7b 7b 45 4e 44   COMMIT}.  {{END
0640: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0650: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0660: 7d 0a 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b 20 54  }.  {{ROLLBACK T
0670: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0680: 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41 43 4b  saction ROLLBACK
0690: 7d 0a 20 20 7b 53 41 56 45 50 4f 49 4e 54 20 73  }.  {SAVEPOINT s
06a0: 61 76 65 70 6f 69 6e 74 7d 0a 20 20 7b 7b 52 45  avepoint}.  {{RE
06b0: 4c 45 41 53 45 20 53 41 56 45 50 4f 49 4e 54 7d  LEASE SAVEPOINT}
06c0: 20 73 61 76 65 70 6f 69 6e 74 20 53 41 56 45 50   savepoint SAVEP
06d0: 4f 49 4e 54 7d 0a 20 20 7b 50 52 41 47 4d 41 20  OINT}.  {PRAGMA 
06e0: 70 72 61 67 6d 61 2e 68 74 6d 6c 7d 0a 20 20 7b  pragma.html}.  {
06f0: 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
0700: 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a 20  use} conflict}. 
0710: 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20   {{CREATE VIEW} 
0720: 63 72 65 61 74 65 76 69 65 77 7d 0a 20 20 7b 7b  createview}.  {{
0730: 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76  DROP VIEW} dropv
0740: 69 65 77 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20  iew}.  {{CREATE 
0750: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0760: 72 69 67 67 65 72 7d 0a 20 20 7b 7b 44 52 4f 50  rigger}.  {{DROP
0770: 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70 74 72   TRIGGER} droptr
0780: 69 67 67 65 72 7d 0a 20 20 7b 7b 41 54 54 41 43  igger}.  {{ATTAC
0790: 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74 61  H DATABASE} atta
07a0: 63 68 7d 0a 20 20 7b 7b 44 45 54 41 43 48 20 44  ch}.  {{DETACH D
07b0: 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 7d  ATABASE} detach}
07c0: 0a 20 20 7b 52 45 49 4e 44 45 58 20 72 65 69 6e  .  {REINDEX rein
07d0: 64 65 78 7d 0a 20 20 7b 7b 41 4c 54 45 52 20 54  dex}.  {{ALTER T
07e0: 41 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65  ABLE} altertable
07f0: 7d 0a 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61  }.  {{ANALYZE} a
0800: 6e 61 6c 79 7a 65 7d 0a 20 20 7b 7b 49 4e 44 45  nalyze}.  {{INDE
0810: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0820: 79 7d 0a 20 20 7b 7b 61 67 67 72 65 67 61 74 65  y}.  {{aggregate
0830: 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   functions} aggf
0840: 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20 20 7b  unc aggfunc}.  {
0850: 7b 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 7d  {core functions}
0860: 20 63 6f 72 65 66 75 6e 63 20 63 6f 72 65 66 75   corefunc corefu
0870: 6e 63 7d 0a 20 20 7b 7b 64 61 74 65 20 61 6e 64  nc}.  {{date and
0880: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 7d   time functions}
0890: 20 64 61 74 65 66 75 6e 63 20 64 61 74 65 66 75   datefunc datefu
08a0: 6e 63 7d 0a 20 20 7b 6b 65 79 77 6f 72 64 73 20  nc}.  {keywords 
08b0: 6b 65 79 77 6f 72 64 73 20 7b 53 51 4c 20 6b 65  keywords {SQL ke
08c0: 79 77 6f 72 64 73 7d 7d 0a 20 20 7d 0a 20 20 73  ywords}}.  }.  s
08d0: 65 74 20 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  et lang_section_
08e0: 62 72 65 61 6b 20 5b 65 78 70 72 20 7b 28 5b 6c  break [expr {([l
08f0: 6c 65 6e 67 74 68 20 24 6c 61 6e 67 5f 73 65 63  length $lang_sec
0900: 74 69 6f 6e 5f 6c 69 73 74 5d 2b 32 29 2f 33 7d  tion_list]+2)/3}
0910: 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 65 63  ].  foreach {sec
0920: 74 69 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e  tion} [lsort -in
0930: 64 65 78 20 30 20 2d 64 69 63 74 69 6f 6e 61 72  dex 0 -dictionar
0940: 79 20 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f  y $lang_section_
0950: 6c 69 73 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63  list] {.  foreac
0960: 68 20 7b 73 5f 74 69 74 6c 65 20 73 5f 74 61 67  h {s_title s_tag
0970: 20 73 5f 6b 77 7d 20 24 73 65 63 74 69 6f 6e 20   s_kw} $section 
0980: 7b 7d 0a 20 20 69 66 20 7b 24 73 5f 6b 77 20 3d  {}.  if {$s_kw =
0990: 3d 20 22 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  = ""} {.    set 
09a0: 73 5f 6b 77 20 24 73 5f 74 69 74 6c 65 0a 20 20  s_kw $s_title.  
09b0: 7d 0a 20 20 69 66 20 7b 24 73 5f 74 61 67 3d 3d  }.  if {$s_tag==
09c0: 22 70 72 61 67 6d 61 2e 68 74 6d 6c 22 7d 20 7b  "pragma.html"} {
09d0: 0a 20 20 20 20 73 65 74 20 75 72 6c 20 24 73 5f  .    set url $s_
09e0: 74 61 67 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20  tag.  } else {. 
09f0: 20 20 20 73 65 74 20 75 72 6c 20 6c 61 6e 67 5f     set url lang_
0a00: 24 73 5f 74 61 67 2e 68 74 6d 6c 0a 20 20 7d 0a  $s_tag.html.  }.
0a10: 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 6c    hd_resolve "<l
0a20: 69 3e 5c 5b 24 73 5f 6b 77 7c 24 73 5f 74 69 74  i>\[$s_kw|$s_tit
0a30: 6c 65 5c 5d 3c 2f 6c 69 3e 22 0a 20 20 69 6e 63  le\]</li>".  inc
0a40: 72 20 69 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6c  r i.  if {$i==$l
0a50: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 62 72 65 61  ang_section_brea
0a60: 6b 20 7c 7c 20 24 69 3d 3d 32 2a 24 6c 61 6e 67  k || $i==2*$lang
0a70: 5f 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 7d 20  _section_break} 
0a80: 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
0a90: 2f 75 6c 3e 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  /ul></td><td val
0aa0: 69 67 6e 3d 5c 22 74 6f 70 5c 22 3e 3c 75 6c 3e  ign=\"top\"><ul>
0ab0: 22 0a 20 20 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c  ".  }.}.</tcl>.<
0ac0: 2f 75 6c 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f  /ul></td></tr></
0ad0: 74 61 62 6c 65 3e 0a 0a 3c 70 3e 54 68 65 20 72  table>..<p>The r
0ae0: 6f 75 74 69 6e 65 73 20 5b 73 71 6c 69 74 65 33  outines [sqlite3
0af0: 5f 70 72 65 70 61 72 65 5f 76 32 28 29 5d 2c 20  _prepare_v2()], 
0b00: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
0b10: 28 29 5d 2c 0a 5b 73 71 6c 69 74 65 33 5f 70 72  ()],.[sqlite3_pr
0b20: 65 70 61 72 65 31 36 28 29 5d 2c 20 5b 73 71 6c  epare16()], [sql
0b30: 69 74 65 33 5f 65 78 65 63 28 29 5d 2c 20 61 6e  ite3_exec()], an
0b40: 64 20 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  d [sqlite3_get_t
0b50: 61 62 6c 65 28 29 5d 20 61 63 63 65 70 74 0a 61  able()] accept.a
0b60: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
0b70: 6c 69 73 74 20 28 73 71 6c 2d 73 74 6d 74 2d 6c  list (sql-stmt-l
0b80: 69 73 74 29 20 77 68 69 63 68 20 69 73 20 61 20  ist) which is a 
0b90: 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65 70 61 72 61  semicolon-separa
0ba0: 74 65 64 0a 6c 69 73 74 20 6f 66 20 73 74 61 74  ted.list of stat
0bb0: 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 74 63  ements.</p>..<tc
0bc0: 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  l>BubbleDiagram 
0bd0: 73 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 3c 2f 74  sql-stmt-list</t
0be0: 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68 20 53 51 4c  cl>..<p>Each SQL
0bf0: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68   statement in th
0c00: 65 20 73 74 61 74 65 6d 65 6e 74 20 6c 69 73 74  e statement list
0c10: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
0c20: 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f 77 69 6e 67  of the.following
0c30: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62  :</p>..<tcl>Bubb
0c40: 6c 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74  leDiagram sql-st
0c50: 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c 3e 0a  mt</tcl>..<tcl>.
0c60: 70 72 6f 63 20 4f 70 65 72 61 74 6f 72 20 7b 6e  proc Operator {n
0c70: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
0c80: 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23  "<font color=\"#
0c90: 32 63 32 63 66 30 5c 22 3e 3c 62 69 67 3e 24 6e  2c2cf0\"><big>$n
0ca0: 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  ame</big></font>
0cb0: 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e 74 65 72 6d  ".}.proc Nonterm
0cc0: 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20  inal {name} {.  
0cd0: 72 65 74 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e 74  return "<i><font
0ce0: 20 63 6f 6c 6f 72 3d 5c 22 23 66 66 33 34 33 34   color=\"#ff3434
0cf0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 3c  \">$name</font><
0d00: 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20 4b 65 79 77  /i>".}.proc Keyw
0d10: 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72  ord {name} {.  r
0d20: 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c  eturn "<font col
0d30: 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 24  or=\"#2c2cf0\">$
0d40: 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70  name</font>".}.p
0d50: 72 6f 63 20 45 78 61 6d 70 6c 65 20 7b 74 65 78  roc Example {tex
0d60: 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 22  t} {.  hd_puts "
0d70: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
0d80: 3e 24 74 65 78 74 3c 2f 70 72 65 3e 3c 2f 62 6c  >$text</pre></bl
0d90: 6f 63 6b 71 75 6f 74 65 3e 22 0a 20 20 7d 0a 0a  ockquote>".  }..
0da0: 20 20 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b    proc Section {
0db0: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0dc0: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0dd0: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0de0: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0df0: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0e00: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0e10: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0e20: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0e30: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0e40: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0e50: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0e60: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0e70: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0e80: 3d 20 2d 31 7d 20 7b 0a 20 20 20 20 65 76 61 6c  = -1} {.    eval
0e90: 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 20 24   hd_keywords { $
0ea0: 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20 20 68 64 5f  name }.  }.  hd_
0eb0: 70 75 74 73 20 7b 3c 61 20 68 72 65 66 3d 22 6c  puts {<a href="l
0ec0: 61 6e 67 2e 68 74 6d 6c 22 3e 0a 20 20 20 20 20  ang.html">.     
0ed0: 20 20 20 20 20 20 3c 68 32 20 61 6c 69 67 6e 3d        <h2 align=
0ee0: 22 63 65 6e 74 65 72 22 3e 53 51 4c 20 41 73 20  "center">SQL As 
0ef0: 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20 53 51  Understood By SQ
0f00: 4c 69 74 65 3c 2f 68 32 3e 3c 2f 61 3e 7d 0a 20  Lite</h2></a>}. 
0f10: 20 68 64 5f 70 75 74 73 20 22 3c 68 31 3e 24 6e   hd_puts "<h1>$n
0f20: 61 6d 65 3c 2f 68 31 3e 22 0a 7d 0a 0a 23 23 23  ame</h1>".}..###
0f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f70: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
0f80: 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42 4c  tion {ALTER TABL
0f90: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b 7b  E} altertable {{
0fa0: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 41 4c  ALTER TABLE} {AL
0fb0: 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  TER}}..BubbleDia
0fc0: 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62 6c 65  gram alter-table
0fd0: 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
0fe0: 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72  <p>SQLite suppor
0ff0: 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73 75 62  ts a limited sub
1000: 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54 41 42  set of ALTER TAB
1010: 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20 54 41  LE..The ALTER TA
1020: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53  BLE command in S
1030: 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
1040: 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d 65 20   user to rename 
1050: 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64  a table.or to ad
1060: 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74  d a new column t
1070: 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61  o an existing ta
1080: 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70  ble. It is not p
1090: 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e 61 6d  ossible.to renam
10a0: 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65 6d 6f  e a column, remo
10b0: 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20  ve a column, or 
10c0: 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20 63 6f  add or remove co
10d0: 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d 20 61  nstraints from a
10e0: 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70   table..</p>..<p
10f0: 3e 54 68 65 20 52 45 4e 41 4d 45 20 54 4f 20 73  >The RENAME TO s
1100: 79 6e 74 61 78 20 69 73 20 75 73 65 64 20 74 6f  yntax is used to
1110: 20 72 65 6e 61 6d 65 20 74 68 65 20 74 61 62 6c   rename the tabl
1120: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
1130: 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62 61 73  .<i>&#91;databas
1140: 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61 62 6c  e-name.&#93;tabl
1150: 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 6f 20 3c 69  e-name</i> to <i
1160: 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c  >new-table-name<
1170: 2f 69 3e 2e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e  /i>..This comman
1180: 64 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65  d .cannot be use
1190: 64 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c  d to move a tabl
11a0: 65 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68  e between attach
11b0: 65 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e  ed databases, on
11c0: 6c 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20  ly to rename .a 
11d0: 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65  table within the
11e0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 3c   same database.<
11f0: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 74  /p>..<p>If the t
1200: 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61 6d  able being renam
1210: 65 64 20 68 61 73 20 74 72 69 67 67 65 72 73 20  ed has triggers 
1220: 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65 6e  or indices, then
1230: 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61 74   these remain.at
1240: 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74 61  tached to the ta
1250: 62 6c 65 20 61 66 74 65 72 20 69 74 20 68 61 73  ble after it has
1260: 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20 48   been renamed. H
1270: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
1280: 20 61 72 65 0a 61 6e 79 20 76 69 65 77 20 64 65   are.any view de
1290: 66 69 6e 69 74 69 6f 6e 73 2c 20 6f 72 20 73 74  finitions, or st
12a0: 61 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65  atements execute
12b0: 64 20 62 79 20 74 72 69 67 67 65 72 73 20 74 68  d by triggers th
12c0: 61 74 20 72 65 66 65 72 20 74 6f 0a 74 68 65 20  at refer to.the 
12d0: 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61  table being rena
12e0: 6d 65 64 2c 20 74 68 65 73 65 20 61 72 65 20 6e  med, these are n
12f0: 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ot automatically
1300: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 75 73 65   modified to use
1310: 20 74 68 65 20 6e 65 77 0a 74 61 62 6c 65 20 6e   the new.table n
1320: 61 6d 65 2e 20 49 66 20 74 68 69 73 20 69 73 20  ame. If this is 
1330: 72 65 71 75 69 72 65 64 2c 20 74 68 65 20 74 72  required, the tr
1340: 69 67 67 65 72 73 20 6f 72 20 76 69 65 77 20 64  iggers or view d
1350: 65 66 69 6e 69 74 69 6f 6e 73 20 6d 75 73 74 20  efinitions must 
1360: 62 65 0a 64 72 6f 70 70 65 64 20 61 6e 64 20 72  be.dropped and r
1370: 65 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20  ecreated to use 
1380: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 6e 61  the new table na
1390: 6d 65 20 62 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e  me by hand..</p>
13a0: 0a 0a 3c 70 3e 54 68 65 20 41 44 44 20 43 4f 4c  ..<p>The ADD COL
13b0: 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75 73  UMN syntax.is us
13c0: 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  ed to add a new 
13d0: 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69  column to an exi
13e0: 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 54 68 65  sting table..The
13f0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 61   new column is a
1400: 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64 20 74  lways appended t
1410: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
1420: 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74 69 6e   list of existin
1430: 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b  g columns..The [
1440: 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c 65  column-def] rule
1450: 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 68 61   defines the cha
1460: 72 61 63 74 65 72 69 73 74 69 63 73 20 6f 66 20  racteristics of 
1470: 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a  the new column..
1480: 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d  The new column m
1490: 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66 20 74  ay take any of t
14a0: 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69 73 73  he forms permiss
14b0: 61 62 6c 65 20 69 6e 20 61 20 5b 43 52 45 41 54  able in a [CREAT
14c0: 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65  E TABLE].stateme
14d0: 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c  nt, with the fol
14e0: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
14f0: 6f 6e 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68  ons:.<ul>.<li>Th
1500: 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74  e column may not
1510: 20 68 61 76 65 20 61 20 50 52 49 4d 41 52 59 20   have a PRIMARY 
1520: 4b 45 59 20 6f 72 20 55 4e 49 51 55 45 20 63 6f  KEY or UNIQUE co
1530: 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c  nstraint.</li>.<
1540: 6c 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61  li>The column ma
1550: 79 20 6e 6f 74 20 68 61 76 65 20 61 20 64 65 66  y not have a def
1560: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 43 55  ault value of CU
1570: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
1580: 45 4e 54 5f 44 41 54 45 20 0a 20 20 20 20 6f 72  ENT_DATE .    or
1590: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
15a0: 4d 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 49 66 20  MP.</li>.<li>If 
15b0: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
15c0: 72 61 69 6e 74 20 69 73 20 73 70 65 63 69 66 69  raint is specifi
15d0: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  ed, then the col
15e0: 75 6d 6e 20 6d 75 73 74 20 68 61 76 65 20 61 0a  umn must have a.
15f0: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
1600: 65 20 6f 74 68 65 72 20 74 68 61 6e 20 4e 55 4c  e other than NUL
1610: 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e 6f 74  L..</ul>..<p>Not
1620: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
1630: 20 61 64 64 69 6e 67 20 61 20 43 48 45 43 4b 20   adding a CHECK 
1640: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20  constraint, the 
1650: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
1660: 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61  .is not tested a
1670: 67 61 69 6e 73 74 20 70 72 65 65 78 69 73 74 69  gainst preexisti
1680: 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74  ng rows of the t
1690: 61 62 6c 65 2e 0a 54 68 69 73 20 63 61 6e 20 72  able..This can r
16a0: 65 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65  esult in a table
16b0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64   that contains d
16c0: 61 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76  ata that.is in v
16d0: 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  iolation of the 
16e0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
16f0: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
1700: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67  ns of SQLite mig
1710: 68 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c  ht.change to val
1720: 69 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73  idate CHECK cons
1730: 74 72 61 69 6e 74 73 20 61 73 20 74 68 65 79 20  traints as they 
1740: 61 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a  are added.</p>..
1750: 3c 70 3e 54 68 65 20 65 78 65 63 75 74 69 6f 6e  <p>The execution
1760: 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54   time of the ALT
1770: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1780: 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20   is independent 
1790: 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  of.the amount of
17a0: 20 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62   data in the tab
17b0: 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54  le.  The ALTER T
17c0: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  ABLE command run
17d0: 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20  s as quickly.on 
17e0: 61 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20  a table with 10 
17f0: 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20  million rows as 
1800: 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62  it does on a tab
1810: 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c  le with 1 row..<
1820: 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44  /p>..<p>After AD
1830: 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65  D COLUMN has bee
1840: 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62  n run on a datab
1850: 61 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61  ase, that databa
1860: 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72  se will not.be r
1870: 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74  eadable by SQLit
1880: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
1890: 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e  and earlier.</p>
18a0: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
18b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18f0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
1900: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
1910: 20 41 4e 41 4c 59 5a 45 0a 0a 42 75 62 62 6c 65   ANALYZE..Bubble
1920: 44 69 61 67 72 61 6d 20 61 6e 61 6c 79 7a 65 2d  Diagram analyze-
1930: 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1940: 70 3e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63 6f  p>The ANALYZE co
1950: 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73 74  mmand gathers st
1960: 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20 69  atistics about i
1970: 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72 65  ndices and store
1980: 73 20 74 68 65 6d 0a 69 6e 20 61 20 73 70 65 63  s them.in a spec
1990: 69 61 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  ial tables in th
19a0: 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72 65  e database where
19b0: 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
19c0: 69 7a 65 72 20 63 61 6e 20 75 73 65 0a 74 68 65  izer can use.the
19d0: 6d 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  m to help make b
19e0: 65 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f 69  etter index choi
19f0: 63 65 73 2e 0a 49 66 20 6e 6f 20 61 72 67 75 6d  ces..If no argum
1a00: 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20  ents are given, 
1a10: 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
1a20: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1a30: 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a  bases are.analyz
1a40: 65 64 2e 20 20 49 66 20 61 20 64 61 74 61 62 61  ed.  If a databa
1a50: 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e  se name is given
1a60: 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
1a70: 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 69 6e  , all indices.in
1a80: 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61   that one databa
1a90: 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e  se are analyzed.
1aa0: 20 20 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e    If the argumen
1ab0: 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d  t is a table nam
1ac0: 65 2c 0a 74 68 65 6e 20 6f 6e 6c 79 20 69 6e 64  e,.then only ind
1ad0: 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ices associated 
1ae0: 77 69 74 68 20 74 68 61 74 20 6f 6e 65 20 74 61  with that one ta
1af0: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
1b00: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 64 65  .</p>..<p>The de
1b10: 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61  fault implementa
1b20: 74 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20  tion stores all 
1b30: 73 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20  statistics in a 
1b40: 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d  single.table nam
1b50: 65 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61  ed <b>sqlite_sta
1b60: 74 31 3c 2f 62 3e 2e 20 20 49 66 20 53 51 4c 69  t1</b>.  If SQLi
1b70: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1b80: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
1b90: 45 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 6f 70  ENABLE_STAT2] op
1ba0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
1bb0: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
1bc0: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
1bd0: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
1be0: 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 32 3c  <b>sqlite_stat2<
1bf0: 2f 62 3e 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  /b>..Future enha
1c00: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1c10: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74  ate.additional t
1c20: 61 62 6c 65 73 20 77 69 74 68 20 74 68 65 20 73  ables with the s
1c30: 61 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e  ame name pattern
1c40: 20 65 78 63 65 70 74 20 77 69 74 68 20 74 68 65   except with the
1c50: 20 22 31 22 0a 6f 72 20 22 32 22 20 63 68 61 6e   "1".or "2" chan
1c60: 67 65 64 20 74 6f 20 61 20 64 69 66 66 65 72 65  ged to a differe
1c70: 6e 74 20 64 69 67 69 74 2e 3c 2f 70 3e 0a 0a 3c  nt digit.</p>..<
1c80: 70 3e 54 68 65 20 5b 44 52 4f 50 20 54 41 42 4c  p>The [DROP TABL
1c90: 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a  E] command does.
1ca0: 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20  not work on the 
1cb0: 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31 3c  <b>sqlite_stat1<
1cc0: 2f 62 3e 20 6f 72 20 3c 62 3e 73 71 6c 69 74 65  /b> or <b>sqlite
1cd0: 5f 73 74 61 74 32 3c 2f 62 3e 20 74 61 62 6c 65  _stat2</b> table
1ce0: 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63  s,.but all the c
1cf0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65 20  ontent of those 
1d00: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
1d10: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
1d20: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
1d30: 64 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e 74  deleted, augment
1d40: 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  ed, or modified 
1d50: 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54  using the [DELET
1d60: 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61 6e  E],.[INSERT], an
1d70: 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61  d [UPDATE] comma
1d80: 6e 64 73 2e 0a 41 70 70 72 6f 70 72 69 61 74 65  nds..Appropriate
1d90: 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20   care should be 
1da0: 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69  used when changi
1db0: 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
1dc0: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
1dd0: 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c  .tables as inval
1de0: 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63  id content can c
1df0: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73  ause SQLite to s
1e00: 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e  elect inefficien
1e10: 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20  t.query plans.  
1e20: 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69  Generally speaki
1e30: 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e  ng, one should n
1e40: 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  ot modify the co
1e50: 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61  ntent of.the sta
1e60: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62  tistics tables b
1e70: 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20  y any mechanism 
1e80: 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b  other than invok
1e90: 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20  ing the.ANALYZE 
1ea0: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
1eb0: 3e 53 74 61 74 69 73 74 69 63 73 20 67 61 74 68  >Statistics gath
1ec0: 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20  ered by ANALYZE 
1ed0: 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61  are <u>not</u> a
1ee0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
1ef0: 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74  ated as.the cont
1f00: 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  ent of the datab
1f10: 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66  ase changes.  If
1f20: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1f30: 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61  the database.cha
1f40: 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74  nges significant
1f50: 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61  ly, or if the da
1f60: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
1f70: 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20  anges, then one 
1f80: 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20  should.consider 
1f90: 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e  rerunning the AN
1fa0: 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  ALYZE command in
1fb0: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
1fc0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e   the statistics.
1fd0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2020: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
2030: 6f 6e 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  on {ATTACH DATAB
2040: 41 53 45 7d 20 61 74 74 61 63 68 20 41 54 54 41  ASE} attach ATTA
2050: 43 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  CH..BubbleDiagra
2060: 6d 20 61 74 74 61 63 68 2d 73 74 6d 74 20 31 0a  m attach-stmt 1.
2070: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 41  </tcl>..<p>The A
2080: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 73  TTACH DATABASE s
2090: 74 61 74 65 6d 65 6e 74 20 61 64 64 73 20 61 6e  tatement adds an
20a0: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20 0a  other database .
20b0: 66 69 6c 65 20 74 6f 20 74 68 65 20 63 75 72 72  file to the curr
20c0: 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ent database con
20d0: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  nection.  If the
20e0: 20 66 69 6c 65 6e 61 6d 65 20 63 6f 6e 74 61 69   filename contai
20f0: 6e 73 20 0a 70 75 6e 63 74 75 61 74 69 6f 6e 20  ns .punctuation 
2100: 63 68 61 72 61 63 74 65 72 73 20 69 74 20 6d 75  characters it mu
2110: 73 74 20 62 65 20 71 75 6f 74 65 64 2e 20 20 54  st be quoted.  T
2120: 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  he database-name
2130: 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a 27 74  s 'main' and .'t
2140: 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20 74 68  emp' refer to th
2150: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2160: 61 6e 64 20 74 68 65 20 64 61 74 61 62 61 73 65  and the database
2170: 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d 70 6f   used for .tempo
2180: 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 54 68  rary tables.  Th
2190: 65 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 64 65  ese cannot be de
21a0: 74 61 63 68 65 64 2e 20 20 41 74 74 61 63 68 65  tached.  Attache
21b0: 64 20 64 61 74 61 62 61 73 65 73 20 0a 61 72 65  d databases .are
21c0: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
21d0: 68 65 20 5b 44 45 54 41 43 48 5d 20 73 74 61 74  he [DETACH] stat
21e0: 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59  ement.</p>..<p>Y
21f0: 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  ou cannot create
2200: 20 61 20 6e 65 77 20 74 61 62 6c 65 20 77 69 74   a new table wit
2210: 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
2220: 61 73 20 61 20 74 61 62 6c 65 20 69 6e 20 0a 61  as a table in .a
2230: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2240: 61 73 65 2c 20 62 75 74 20 79 6f 75 20 63 61 6e  ase, but you can
2250: 20 61 74 74 61 63 68 20 61 20 64 61 74 61 62 61   attach a databa
2260: 73 65 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e  se which contain
2270: 73 0a 74 61 62 6c 65 73 20 77 68 6f 73 65 20 6e  s.tables whose n
2280: 61 6d 65 73 20 61 72 65 20 64 75 70 6c 69 63 61  ames are duplica
2290: 74 65 73 20 6f 66 20 74 61 62 6c 65 73 20 69 6e  tes of tables in
22a0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
22b0: 73 65 2e 20 20 49 74 20 69 73 20 0a 61 6c 73 6f  se.  It is .also
22c0: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 74 6f 20   permissible to 
22d0: 61 74 74 61 63 68 20 74 68 65 20 73 61 6d 65 20  attach the same 
22e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 75  database file mu
22f0: 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 3c 2f 70  ltiple times.</p
2300: 3e 0a 0a 3c 70 3e 54 61 62 6c 65 73 20 69 6e 20  >..<p>Tables in 
2310: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2320: 62 61 73 65 20 63 61 6e 20 62 65 20 72 65 66 65  base can be refe
2330: 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20 74 68  rred to using th
2340: 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64 61 74  e syntax .<i>dat
2350: 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62 6c 65  abase-name.table
2360: 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 20 49 66 20 61  -name</i>.  If a
2370: 6e 20 61 74 74 61 63 68 65 64 20 74 61 62 6c 65  n attached table
2380: 20 64 6f 65 73 6e 27 74 20 68 61 76 65 20 0a 61   doesn't have .a
2390: 20 64 75 70 6c 69 63 61 74 65 20 74 61 62 6c 65   duplicate table
23a0: 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 6d 61 69   name in the mai
23b0: 6e 20 64 61 74 61 62 61 73 65 2c 20 69 74 20 64  n database, it d
23c0: 6f 65 73 20 6e 6f 74 20 72 65 71 75 69 72 65 20  oes not require 
23d0: 61 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  a .<i>database-n
23e0: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 2e 20  ame</i> prefix. 
23f0: 20 57 68 65 6e 20 61 20 64 61 74 61 62 61 73 65   When a database
2400: 20 69 73 20 61 74 74 61 63 68 65 64 2c 20 61 6c   is attached, al
2410: 6c 20 6f 66 20 69 74 73 20 0a 74 61 62 6c 65 73  l of its .tables
2420: 20 77 68 69 63 68 20 64 6f 6e 27 74 20 68 61 76   which don't hav
2430: 65 20 64 75 70 6c 69 63 61 74 65 20 6e 61 6d 65  e duplicate name
2440: 73 20 62 65 63 6f 6d 65 20 74 68 65 20 64 65 66  s become the def
2450: 61 75 6c 74 20 74 61 62 6c 65 0a 6f 66 20 74 68  ault table.of th
2460: 61 74 20 6e 61 6d 65 2e 20 20 41 6e 79 20 74 61  at name.  Any ta
2470: 62 6c 65 73 20 6f 66 20 74 68 61 74 20 6e 61 6d  bles of that nam
2480: 65 20 61 74 74 61 63 68 65 64 20 61 66 74 65 72  e attached after
2490: 77 61 72 64 73 20 72 65 71 75 69 72 65 20 74 68  wards require th
24a0: 65 0a 64 61 74 61 62 61 73 65 20 70 72 65 66 69  e.database prefi
24b0: 78 2e 20 49 66 20 74 68 65 20 64 65 66 61 75 6c  x. If the defaul
24c0: 74 20 74 61 62 6c 65 20 6f 66 20 61 20 67 69 76  t table of a giv
24d0: 65 6e 20 6e 61 6d 65 20 69 73 20 64 65 74 61 63  en name is detac
24e0: 68 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 6c 61  hed, then.the la
24f0: 73 74 20 74 61 62 6c 65 20 6f 66 20 74 68 61 74  st table of that
2500: 20 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20 62   name attached b
2510: 65 63 6f 6d 65 73 20 74 68 65 20 6e 65 77 20 64  ecomes the new d
2520: 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  efault.</p>..<p>
2530: 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e  .Transactions in
2540: 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
2550: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2560: 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a  ses are atomic,.
2570: 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68  assuming that th
2580: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2590: 69 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79  is not "[:memory
25a0: 3a 5d 22 2e 20 20 49 66 20 74 68 65 20 6d 61 69  :]".  If the mai
25b0: 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22 3a  n.database is ":
25c0: 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 20 0a 74  memory:" then .t
25d0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e 74  ransactions cont
25e0: 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d 69  inue to be atomi
25f0: 63 20 77 69 74 68 69 6e 20 65 61 63 68 20 69 6e  c within each in
2600: 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61 73  dividual.databas
2610: 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20 74  e file. But if t
2620: 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72  he host computer
2630: 20 63 72 61 73 68 65 73 20 69 6e 20 74 68 65 20   crashes in the 
2640: 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f 4d  middle.of a [COM
2650: 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20 6f  MIT] where two o
2660: 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65 20  r more database 
2670: 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74 65  files are update
2680: 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73 65  d,.some of those
2690: 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65 74   files might get
26a0: 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68 65   the changes whe
26b0: 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74 20  re others.might 
26c0: 6e 6f 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  not..</p>..<p>Th
26d0: 65 72 65 20 69 73 20 61 20 63 6f 6d 70 69 6c 65  ere is a compile
26e0: 2d 74 69 6d 65 20 6c 69 6d 69 74 20 6f 66 20 5b  -time limit of [
26f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
2700: 48 45 44 5d 0a 61 74 74 61 63 68 65 64 20 64 61  HED].attached da
2710: 74 61 62 61 73 65 20 66 69 6c 65 73 2e 3c 2f 70  tabase files.</p
2720: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
2730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2770: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
2780: 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54   {BEGIN TRANSACT
2790: 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e  ION} transaction
27a0: 20 7b 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20 52   {BEGIN COMMIT R
27b0: 4f 4c 4c 42 41 43 4b 7d 0a 0a 42 75 62 62 6c 65  OLLBACK}..Bubble
27c0: 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74  Diagram begin-st
27d0: 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d  mt.BubbleDiagram
27e0: 20 63 6f 6d 6d 69 74 2d 73 74 6d 74 0a 42 75 62   commit-stmt.Bub
27f0: 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62  bleDiagram rollb
2800: 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ack-stmt.</tcl>.
2810: 0a 3c 70 3e 0a 4e 6f 20 63 68 61 6e 67 65 73 20  .<p>.No changes 
2820: 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
2830: 68 65 20 64 61 74 61 62 61 73 65 20 65 78 63 65  he database exce
2840: 70 74 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  pt within a tran
2850: 73 61 63 74 69 6f 6e 2e 0a 41 6e 79 20 63 6f 6d  saction..Any com
2860: 6d 61 6e 64 20 74 68 61 74 20 63 68 61 6e 67 65  mand that change
2870: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  s the database (
2880: 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53  basically, any S
2890: 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72  QL command.other
28a0: 20 74 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20   than [SELECT]) 
28b0: 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
28c0: 6c 79 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ly start a trans
28d0: 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73  action if.one is
28e0: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20   not already in 
28f0: 65 66 66 65 63 74 2e 20 20 41 75 74 6f 6d 61 74  effect.  Automat
2900: 69 63 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74  ically started t
2910: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20  ransactions.are 
2920: 63 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74  committed when t
2930: 68 65 20 6c 61 73 74 20 71 75 65 72 79 20 66 69  he last query fi
2940: 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  nishes..</p>..<p
2950: 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63  >.Transactions c
2960: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61  an be started ma
2970: 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65  nually using the
2980: 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20   BEGIN.command. 
2990: 20 53 75 63 68 20 74 72 61 6e 73 61 63 74 69 6f   Such transactio
29a0: 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72 73 69  ns usually persi
29b0: 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  st until the nex
29c0: 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  t.COMMIT or ROLL
29d0: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42  BACK command.  B
29e0: 75 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ut a transaction
29f0: 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c   will also .ROLL
2a00: 42 41 43 4b 20 69 66 20 74 68 65 20 64 61 74 61  BACK if the data
2a10: 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 6f  base is closed o
2a20: 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  r if an error oc
2a30: 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c  curs.and the ROL
2a40: 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72  LBACK conflict r
2a50: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
2a60: 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64  thm is specified
2a70: 2e 0a 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65  ..See the docume
2a80: 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b  ntation on the [
2a90: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61  ON CONFLICT].cla
2aa0: 75 73 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  use for addition
2ab0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  al information a
2ac0: 62 6f 75 74 20 74 68 65 20 52 4f 4c 4c 42 41 43  bout the ROLLBAC
2ad0: 4b 0a 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  K.conflict resol
2ae0: 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e  ution algorithm.
2af0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 4e 44 20 54  .</p>..<p>.END T
2b00: 52 41 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e  RANSACTION is an
2b10: 20 61 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49   alias for COMMI
2b20: 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 61 6e  T..</p>..<p>Tran
2b30: 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64  sactions created
2b40: 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43   using BEGIN...C
2b50: 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73  OMMIT do not nes
2b60: 74 2e 0a 46 6f 72 20 6e 65 73 74 65 64 20 74 72  t..For nested tr
2b70: 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20  ansactions, use 
2b80: 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20  the [SAVEPOINT] 
2b90: 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f  and [RELEASE] co
2ba0: 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20  mmands..The "TO 
2bb0: 53 41 56 45 50 4f 49 4e 54 20 3c 69 3e 6e 61 6d  SAVEPOINT <i>nam
2bc0: 65 3c 2f 69 3e 22 20 63 6c 61 75 73 65 20 6f 66  e</i>" clause of
2bd0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
2be0: 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a 69 6e 20 74  mmand shown.in t
2bf0: 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
2c00: 6d 20 61 62 6f 76 65 20 69 73 20 6f 6e 6c 79 20  m above is only 
2c10: 61 70 70 6c 69 63 61 62 6c 65 20 74 6f 20 5b 53  applicable to [S
2c20: 41 56 45 50 4f 49 4e 54 5d 0a 74 72 61 6e 73 61  AVEPOINT].transa
2c30: 63 74 69 6f 6e 73 2e 20 20 41 6e 20 61 74 74 65  ctions.  An atte
2c40: 6d 70 74 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68  mpt to invoke th
2c50: 65 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20  e BEGIN command 
2c60: 77 69 74 68 69 6e 0a 61 20 74 72 61 6e 73 61 63  within.a transac
2c70: 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77  tion will fail w
2c80: 69 74 68 20 61 6e 20 65 72 72 6f 72 2c 20 72 65  ith an error, re
2c90: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2ca0: 68 65 72 0a 74 68 65 20 74 72 61 6e 73 61 63 74  her.the transact
2cb0: 69 6f 6e 20 77 61 73 20 73 74 61 72 74 65 64 20  ion was started 
2cc0: 62 79 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f  by [SAVEPOINT] o
2cd0: 72 20 61 20 70 72 69 6f 72 20 42 45 47 49 4e 2e  r a prior BEGIN.
2ce0: 0a 54 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  .The COMMIT comm
2cf0: 61 6e 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c  and and the ROLL
2d00: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74  BACK command wit
2d10: 68 6f 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75  hout the TO clau
2d20: 73 65 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65  se.work the same
2d30: 20 6f 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20   on [SAVEPOINT] 
2d40: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20  transactions as 
2d50: 74 68 65 79 20 64 6f 20 77 69 74 68 20 74 72 61  they do with tra
2d60: 6e 73 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65  nsactions.starte
2d70: 64 20 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a  d by BEGIN.</p>.
2d80: 0a 3c 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e  .<p>.Transaction
2d90: 73 20 63 61 6e 20 62 65 20 64 65 66 65 72 72 65  s can be deferre
2da0: 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72  d, immediate, or
2db0: 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a 54 68   exclusive.  .Th
2dc0: 65 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61  e default transa
2dd0: 63 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69  ction behavior i
2de0: 73 20 64 65 66 65 72 72 65 64 2e 0a 44 65 66 65  s deferred..Defe
2df0: 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20  rred means that 
2e00: 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71  no locks are acq
2e10: 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74  uired.on the dat
2e20: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
2e30: 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73  database is firs
2e40: 74 20 61 63 63 65 73 73 65 64 2e 20 20 54 68 75  t accessed.  Thu
2e50: 73 20 77 69 74 68 20 61 0a 64 65 66 65 72 72 65  s with a.deferre
2e60: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
2e70: 68 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d 65  he BEGIN stateme
2e80: 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20 6e  nt itself does n
2e90: 6f 74 68 69 6e 67 2e 20 20 4c 6f 63 6b 73 0a 61  othing.  Locks.a
2ea0: 72 65 20 6e 6f 74 20 61 63 71 75 69 72 65 64 20  re not acquired 
2eb0: 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74 20  until the first 
2ec0: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 6f 70  read or write op
2ed0: 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 66 69  eration.  The fi
2ee0: 72 73 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69  rst read.operati
2ef0: 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 64 61 74  on against a dat
2f00: 61 62 61 73 65 20 63 72 65 61 74 65 73 20 61 20  abase creates a 
2f10: 5b 53 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e  [SHARED] lock an
2f20: 64 20 74 68 65 20 66 69 72 73 74 0a 77 72 69 74  d the first.writ
2f30: 65 20 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61  e operation crea
2f40: 74 65 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d  tes a [RESERVED]
2f50: 20 6c 6f 63 6b 2e 20 20 20 42 65 63 61 75 73 65   lock.   Because
2f60: 20 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e   the acquisition
2f70: 20 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66   of.locks is def
2f80: 65 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79  erred until they
2f90: 20 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20   are needed, it 
2fa0: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2fb0: 20 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20   another.thread 
2fc0: 6f 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64  or process could
2fd0: 20 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61   create a separa
2fe0: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  te transaction a
2ff0: 6e 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20  nd write to.the 
3000: 64 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74  database after t
3010: 68 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20  he BEGIN on the 
3020: 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68  current thread h
3030: 61 73 20 65 78 65 63 75 74 65 64 2e 0a 49 66 20  as executed..If 
3040: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
3050: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
3060: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
3070: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
3080: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
3090: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
30a0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
30b0: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
30c0: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
30d0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
30e0: 62 65 20 75 73 65 64 2e 20 20 41 66 74 65 72 20  be used.  After 
30f0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
3100: 45 2c 20 79 6f 75 20 61 72 65 20 67 75 61 72 61  E, you are guara
3110: 6e 74 65 65 64 20 74 68 61 74 0a 6e 6f 20 6f 74  nteed that.no ot
3120: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
3130: 6f 63 65 73 73 20 77 69 6c 6c 20 62 65 20 61 62  ocess will be ab
3140: 6c 65 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74  le to write to t
3150: 68 65 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64  he database or.d
3160: 6f 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49  o a BEGIN IMMEDI
3170: 41 54 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43  ATE or BEGIN EXC
3180: 4c 55 53 49 56 45 2e 20 20 4f 74 68 65 72 20 70  LUSIVE.  Other p
3190: 72 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e  rocesses can con
31a0: 74 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72  tinue.to read fr
31b0: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  om the database,
31c0: 20 68 6f 77 65 76 65 72 2e 20 20 41 6e 20 65 78   however.  An ex
31d0: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
31e0: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
31f0: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
3200: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
3210: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 41  ll databases.  A
3220: 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43  fter a BEGIN.EXC
3230: 4c 55 53 49 56 45 2c 20 79 6f 75 20 61 72 65 20  LUSIVE, you are 
3240: 67 75 61 72 61 6e 74 65 65 64 20 74 68 61 74 20  guaranteed that 
3250: 6e 6f 20 6f 74 68 65 72 20 74 68 72 65 61 64 20  no other thread 
3260: 6f 72 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 0a  or process will.
3270: 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20  be able to read 
3280: 6f 72 20 77 72 69 74 65 20 74 68 65 20 64 61 74  or write the dat
3290: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
32a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 63  transaction is.c
32b0: 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c  omplete..</p>..<
32c0: 70 3e 0a 41 6e 20 69 6d 70 6c 69 63 69 74 20 74  p>.An implicit t
32d0: 72 61 6e 73 61 63 74 69 6f 6e 20 28 61 20 74 72  ransaction (a tr
32e0: 61 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69  ansaction that i
32f0: 73 20 73 74 61 72 74 65 64 20 61 75 74 6f 6d 61  s started automa
3300: 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74  tically,.not a t
3310: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72 74  ransaction start
3320: 65 64 20 62 79 20 42 45 47 49 4e 29 20 69 73 20  ed by BEGIN) is 
3330: 63 6f 6d 6d 69 74 74 65 64 20 61 75 74 6f 6d 61  committed automa
3340: 74 69 63 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65  tically when.the
3350: 20 6c 61 73 74 20 61 63 74 69 76 65 20 73 74 61   last active sta
3360: 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 2e  tement finishes.
3370: 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20 66 69    A statement fi
3380: 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 73 0a  nishes when its.
3390: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
33a0: 6e 74 20 69 73 20 5b 73 71 6c 69 74 65 33 5f 72  nt is [sqlite3_r
33b0: 65 73 65 74 28 29 20 7c 20 72 65 73 65 74 5d 20  eset() | reset] 
33c0: 6f 72 0a 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61  or.[sqlite3_fina
33d0: 6c 69 7a 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a  lize() | finaliz
33e0: 65 64 5d 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73  ed].  An open [s
33f0: 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65  qlite3_blob] use
3400: 64 20 66 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61  d for.incrementa
3410: 6c 20 42 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74  l BLOB I/O count
3420: 73 20 61 73 20 61 6e 20 75 6e 66 69 6e 69 73 68  s as an unfinish
3430: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
3440: 68 65 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  he [sqlite3_blob
3450: 5d 0a 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20  ].finishes when 
3460: 69 74 20 69 73 20 5b 73 71 6c 69 74 65 33 5f 62  it is [sqlite3_b
3470: 6c 6f 62 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c  lob_close() | cl
3480: 6f 73 65 64 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  osed]..</p>..<p>
3490: 0a 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  .The explicit CO
34a0: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
34b0: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
34c0: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
34d0: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
34e0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 48  ] statements.  H
34f0: 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72 65  owever, if there
3500: 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69   are pending.wri
3510: 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74  te operations, t
3520: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
3530: 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  d.will fail with
3540: 20 61 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53   a error code [S
3550: 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70  QLITE_BUSY]..</p
3560: 3e 0a 0a 3c 70 3e 0a 41 6e 20 61 74 74 65 6d 70  >..<p>.An attemp
3570: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
3580: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
3590: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
35a0: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
35b0: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
35c0: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
35d0: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
35e0: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
35f0: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
3600: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
3610: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
3620: 20 75 70 64 61 74 65 64 2e 20 20 57 68 65 6e 20   updated.  When 
3630: 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20  COMMIT fails in 
3640: 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72  this.way, the tr
3650: 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e  ansaction remain
3660: 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65  s active and the
3670: 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72   COMMIT can be r
3680: 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74  etried later.aft
3690: 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61  er the reader ha
36a0: 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74  s had a chance t
36b0: 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  o clear..</p>..<
36c0: 70 3e 0a 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  p>.The ROLLBACK 
36d0: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
36e0: 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  n error code [SQ
36f0: 4c 49 54 45 5f 42 55 53 59 5d 20 69 66 20 74 68  LITE_BUSY] if th
3700: 65 72 65 0a 61 72 65 20 61 6e 79 20 70 65 6e 64  ere.are any pend
3710: 69 6e 67 20 71 75 65 72 69 65 73 2e 20 20 42 6f  ing queries.  Bo
3720: 74 68 20 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64  th read-only and
3730: 20 72 65 61 64 2f 77 72 69 74 65 20 71 75 65 72   read/write quer
3740: 69 65 73 20 77 69 6c 6c 0a 63 61 75 73 65 20 61  ies will.cause a
3750: 20 52 4f 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69   ROLLBACK to fai
3760: 6c 2e 20 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d  l.  A ROLLBACK m
3770: 75 73 74 20 66 61 69 6c 20 69 66 20 74 68 65 72  ust fail if ther
3780: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 72 65  e are pending.re
3790: 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 75  ad operations (u
37a0: 6e 6c 69 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69  nlike COMMIT whi
37b0: 63 68 20 63 61 6e 20 73 75 63 63 65 65 64 29 20  ch can succeed) 
37c0: 62 65 63 61 75 73 65 20 62 61 64 20 74 68 69 6e  because bad thin
37d0: 67 73 0a 77 69 6c 6c 20 68 61 70 70 65 6e 20 69  gs.will happen i
37e0: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
37f0: 69 6d 61 67 65 20 6f 66 20 74 68 65 20 64 61 74  image of the dat
3800: 61 62 61 73 65 20 69 73 20 63 68 61 6e 67 65 64  abase is changed
3810: 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a   out from under.
3820: 61 6e 20 61 63 74 69 76 65 20 71 75 65 72 79 2e  an active query.
3830: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50  .</p>..<p>.If [P
3840: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
3850: 64 65 5d 20 69 73 20 73 65 74 20 74 6f 20 4f 46  de] is set to OF
3860: 46 20 28 74 68 75 73 20 64 69 73 61 62 6c 69 6e  F (thus disablin
3870: 67 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  g the rollback j
3880: 6f 75 72 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65  ournal.file) the
3890: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f  n the behavior o
38a0: 66 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  f the ROLLBACK c
38b0: 6f 6d 6d 61 6e 64 20 69 73 20 75 6e 64 65 66 69  ommand is undefi
38c0: 6e 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52  ned..</p>..<h3>R
38d0: 65 73 70 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72  esponse To Error
38e0: 73 20 57 69 74 68 69 6e 20 41 20 54 72 61 6e 73  s Within A Trans
38f0: 61 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e  action</h3>..<p>
3900: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
3910: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
3920: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
3930: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
3940: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
3950: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
3960: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
3970: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
3980: 74 68 61 74 20 63 61 75 73 65 20 74 68 65 20 62  that cause the b
3990: 65 68 61 76 69 6f 72 20 69 6e 63 6c 75 64 65 3a  ehavior include:
39a0: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20  </p>..<ul>.<li> 
39b0: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64  [SQLITE_FULL]: d
39c0: 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20  atabase or disk 
39d0: 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  full.<li> [SQLIT
39e0: 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49  E_IOERR]: disk I
39f0: 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53  /O error.<li> [S
3a00: 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74  QLITE_BUSY]: dat
3a10: 61 62 61 73 65 20 69 6e 20 75 73 65 20 62 79 20  abase in use by 
3a20: 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a  another process.
3a30: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d  <li> [SQLITE_NOM
3a40: 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f  EM]: out or memo
3a50: 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ry.<li> [SQLITE_
3a60: 49 4e 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63  INTERRUPT]: proc
3a70: 65 73 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f  essing [sqlite3_
3a80: 69 6e 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72  interrupt|interr
3a90: 75 70 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61  upted].     by a
3aa0: 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65  pplication reque
3ab0: 73 74 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 0a 46 6f  st.</ul>..<p>.Fo
3ac0: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
3ad0: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
3ae0: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
3af0: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
3b00: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
3b10: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
3b20: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
3b30: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
3b40: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
3b50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
3b60: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
3b70: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
3b80: 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 20  tion.  However, 
3b90: 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68  .depending on th
3ba0: 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
3bb0: 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  g evaluated and 
3bc0: 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68 69  the point at whi
3bd0: 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63 63  ch the.error occ
3be0: 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62 65  urs, it might be
3bf0: 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 53   necessary for S
3c00: 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63  QLite to rollbac
3c10: 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65  k and.cancel the
3c20: 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
3c30: 69 6f 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63 61  ion.  An applica
3c40: 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68  tion can tell wh
3c50: 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63  ich.course of ac
3c60: 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b  tion SQLite took
3c70: 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73   by using the.[s
3c80: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
3c90: 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75  ommit()] C-langu
3ca0: 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  age interface.</
3cb0: 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63  p>..<p>It is rec
3cc0: 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70  ommended that ap
3cd0: 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f  plications respo
3ce0: 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73  nd to the errors
3cf0: 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20 62 79  .listed above by
3d00: 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75   explicitly issu
3d10: 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63  ing a ROLLBACK c
3d20: 6f 6d 6d 61 6e 64 2e 20 20 49 66 20 74 68 65 20  ommand.  If the 
3d30: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73  .transaction has
3d40: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f   already been ro
3d50: 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61  lled back automa
3d60: 74 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65  tically.by the e
3d70: 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74  rror response, t
3d80: 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  hen the ROLLBACK
3d90: 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61   command will fa
3da0: 69 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72  il with an.error
3db0: 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73  , but no harm is
3dc0: 20 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e   caused by this.
3dd0: 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20  </p>..<p>Future 
3de0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
3df0: 74 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68  te may extend th
3e00: 65 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73  e list of errors
3e10: 20 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75   which.might cau
3e20: 73 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61  se automatic tra
3e30: 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63  nsaction rollbac
3e40: 6b 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  k.  Future versi
3e50: 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69  ons of.SQLite mi
3e60: 67 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65  ght change the e
3e70: 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20  rror response.  
3e80: 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77  In particular, w
3e90: 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20  e may.choose to 
3ea0: 73 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74  simplify the int
3eb0: 65 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65  erface in future
3ec0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
3ed0: 69 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74  ite by.causing t
3ee0: 68 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20  he errors above 
3ef0: 74 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f  to force an unco
3f00: 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61  nditional rollba
3f10: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ck.</p>..<tcl>.#
3f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
3f70: 65 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e  ection {SAVEPOIN
3f80: 54 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41  T} savepoint {SA
3f90: 56 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d  VEPOINT RELEASE}
3fa0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
3fb0: 73 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 42  savepoint-stmt.B
3fc0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c  ubbleDiagram rel
3fd0: 65 61 73 65 2d 73 74 6d 74 0a 42 75 62 62 6c 65  ease-stmt.Bubble
3fe0: 44 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b  Diagram rollback
3ff0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
4000: 3e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  >SAVEPOINTs are 
4010: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
4020: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
4030: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
4040: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
4050: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
4060: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
4070: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
4080: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
4090: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
40a0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 53 41 56 45  /p>..<p>The SAVE
40b0: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74  POINT command st
40c0: 61 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73  arts a new trans
40d0: 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61  action with a na
40e0: 6d 65 2e 0a 54 68 65 20 74 72 61 6e 73 61 63 74  me..The transact
40f0: 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20 6e  ion names need n
4100: 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 41 20  ot be unique..A 
4110: 53 41 56 45 50 4f 49 4e 54 20 63 61 6e 20 62 65  SAVEPOINT can be
4120: 20 73 74 61 72 74 65 64 20 65 69 74 68 65 72 20   started either 
4130: 77 69 74 68 69 6e 20 6f 72 20 6f 75 74 73 69 64  within or outsid
4140: 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e  e of.a [BEGIN]..
4150: 2e 5b 43 4f 4d 4d 49 54 5d 2e 20 20 57 68 65 6e  .[COMMIT].  When
4160: 20 61 20 53 41 56 45 50 4f 49 4e 54 20 69 73 20   a SAVEPOINT is 
4170: 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 20 73  the outer-most s
4180: 61 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69 74 20  avepoint.and it 
4190: 69 73 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 20  is not within a 
41a0: 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49  [BEGIN]...[COMMI
41b0: 54 5d 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  T] then the beha
41c0: 76 69 6f 72 20 69 73 20 74 68 65 0a 73 61 6d 65  vior is the.same
41d0: 20 61 73 20 42 45 47 49 4e 20 44 45 46 45 52 52   as BEGIN DEFERR
41e0: 45 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e 3c  ED TRANSACTION.<
41f0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 52 4f 4c 4c  /p>..<p>The ROLL
4200: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
4210: 72 65 76 65 72 74 73 20 74 68 65 20 73 74 61 74  reverts the stat
4220: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
4230: 65 20 62 61 63 6b 20 74 6f 20 77 68 61 74 0a 69  e back to what.i
4240: 74 20 77 61 73 20 6a 75 73 74 20 61 66 74 65 72  t was just after
4250: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
4260: 6e 67 20 53 41 56 45 50 4f 49 4e 54 2e 20 20 4e  ng SAVEPOINT.  N
4270: 6f 74 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20  ote that unlike 
4280: 74 68 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c  that.plain [ROLL
4290: 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77  BACK] command (w
42a0: 69 74 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65  ithout the TO ke
42b0: 79 77 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42  yword) the ROLLB
42c0: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64  ACK TO command.d
42d0: 6f 65 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74  oes not cancel t
42e0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
42f0: 20 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63   Instead of canc
4300: 65 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73  elling the trans
4310: 61 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c  action,.the ROLL
4320: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
4330: 72 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61  restarts the tra
4340: 6e 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61  nsaction again a
4350: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  t the beginning.
4360: 0a 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67  .All intervening
4370: 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20   SAVEPOINTs are 
4380: 63 61 6e 63 65 6c 6c 65 64 2c 20 68 6f 77 65 76  cancelled, howev
4390: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  er.</p>..<p>The 
43a0: 52 45 4c 45 41 53 45 20 69 73 20 6c 69 6b 65 20  RELEASE is like 
43b0: 61 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72 20 61  a [COMMIT] for a
43c0: 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 65 20   SAVEPOINT..The 
43d0: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
43e0: 63 61 75 73 65 73 20 61 6c 6c 20 73 61 76 65 70  causes all savep
43f0: 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f 20 61 6e  oints back to an
4400: 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  d including the 
4410: 66 69 72 73 74 0a 73 61 76 65 70 6f 69 6e 74 20  first.savepoint 
4420: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
4430: 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76  name to be remov
4440: 65 64 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e  ed from the tran
4450: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
4460: 54 68 65 0a 52 45 4c 45 41 53 45 20 6f 66 20 61  The.RELEASE of a
4470: 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74  n inner transact
4480: 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75  ion.does not cau
4490: 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74  se any changes t
44a0: 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20  o be written to 
44b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
44c0: 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d  e; it merely.rem
44d0: 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20  oves savepoints 
44e0: 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63  from the transac
44f0: 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20  tion stack such 
4500: 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f  that it is.no lo
4510: 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f  nger possible to
4520: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f   ROLLBACK TO tho
4530: 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 49  se savepoints..I
4540: 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  f a RELEASE comm
4550: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65  and releases the
4560: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
4570: 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68  oint, so.that th
4580: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
4590: 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74  ack becomes empt
45a0: 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20  y, then RELEASE 
45b0: 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b  is the same.as [
45c0: 43 4f 4d 4d 49 54 5d 2e 0a 54 68 65 20 5b 43 4f  COMMIT]..The [CO
45d0: 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61  MMIT] command ma
45e0: 79 20 75 73 65 64 20 74 6f 20 72 65 6c 65 61 73  y used to releas
45f0: 65 20 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73  e all savepoints
4600: 20 61 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65 20   and.commit the 
4610: 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 76 65 6e  transaction even
4620: 20 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74   if the transact
4630: 69 6f 6e 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  ion was original
4640: 6c 79 20 73 74 61 72 74 65 64 0a 62 79 20 61 20  ly started.by a 
4650: 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e  SAVEPOINT comman
4660: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 5b  d instead of a [
4670: 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c  BEGIN] command.<
4680: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20 73  /p>..<p>If the s
4690: 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e  avepoint-name in
46a0: 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
46b0: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  nd does not matc
46c0: 68 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e 74 20  h any.savepoint 
46d0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65  currently in the
46e0: 20 74 72 61 6e 61 63 74 69 6f 6e 20 73 74 61 63   tranaction stac
46f0: 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61 76 65 70  k, then no savep
4700: 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c 65 61 73  oints are.releas
4710: 65 64 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ed, the database
4720: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2c 20 61   is unchanged, a
4730: 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  nd the RELEASE c
4740: 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a 61  ommand returns.a
4750: 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
4760: 3e 4e 6f 74 65 20 74 68 61 74 20 61 6e 20 69 6e  >Note that an in
4770: 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ner transaction 
4780: 6d 69 67 68 74 20 63 6f 6d 6d 69 74 20 28 75 73  might commit (us
4790: 69 6e 67 20 74 68 65 20 52 45 4c 45 41 53 45 20  ing the RELEASE 
47a0: 63 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74 68 65  command).but the
47b0: 6e 20 6c 61 74 65 72 20 68 61 76 65 20 69 74 73  n later have its
47c0: 20 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62 79 20   work undone by 
47d0: 61 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20 61 6e  a ROLLBACK in an
47e0: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
47f0: 6f 6e 2e 0a 41 20 70 6f 77 65 72 20 66 61 69 6c  on..A power fail
4800: 75 72 65 20 6f 72 20 70 72 6f 67 72 61 6d 20 63  ure or program c
4810: 72 61 73 68 20 6f 72 20 4f 53 20 63 72 61 73 68  rash or OS crash
4820: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
4830: 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61 6e 73  outer-most.trans
4840: 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c 62 61  action to rollba
4850: 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c 6c 20  ck, undoing all 
4860: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
4870: 65 20 6f 63 63 75 72 72 65 64 20 77 69 74 68 69  e occurred withi
4880: 6e 0a 74 68 61 74 20 6f 75 74 65 72 20 74 72 61  n.that outer tra
4890: 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e 20 63  nsaction, even c
48a0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
48b0: 20 73 75 70 70 6f 73 65 64 6c 79 20 62 65 65 6e   supposedly been
48c0: 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62 79 20   "committed".by 
48d0: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
48e0: 61 6e 64 2e 20 20 43 6f 6e 74 65 6e 74 20 69 73  and.  Content is
48f0: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63 6f   not actually co
4900: 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 64  mmitted on the d
4910: 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68 65 20 6f  isk .until the o
4920: 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63  utermost transac
4930: 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70  tion commits.</p
4940: 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
4950: 73 65 76 65 72 61 6c 20 77 61 79 73 20 6f 66 20  several ways of 
4960: 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75 74 20 74  thinking about t
4970: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
4980: 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c  nd:</p>..<ul>.<l
4990: 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c  i><p>.Some peopl
49a0: 65 20 76 69 65 77 20 52 45 4c 45 41 53 45 20 61  e view RELEASE a
49b0: 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  s the equivalent
49c0: 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f 72 20 61   of COMMIT for a
49d0: 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54 68 69 73   SAVEPOINT..This
49e0: 20 69 73 20 61 6e 20 61 63 63 65 70 74 61 62 6c   is an acceptabl
49f0: 65 20 70 6f 69 6e 74 20 6f 66 20 76 69 65 77 20  e point of view 
4a00: 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e 65 20 72  as long as one r
4a10: 65 6d 65 6d 62 65 72 73 20 74 68 61 74 20 74 68  emembers that th
4a20: 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d 6d 69 74  e.changes commit
4a30: 74 65 64 20 62 79 20 61 6e 20 69 6e 6e 65 72 20  ted by an inner 
4a40: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68  transaction migh
4a50: 74 20 6c 61 74 65 72 20 62 65 20 75 6e 64 6f 6e  t later be undon
4a60: 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61 63 6b 20  e by a.rollback 
4a70: 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72 61 6e  in an outer tran
4a80: 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69  saction.</p></li
4a90: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68  >..<li><p>.Anoth
4aa0: 65 72 20 76 69 65 77 20 6f 66 20 52 45 4c 45 41  er view of RELEA
4ab0: 53 45 20 69 73 20 74 68 61 74 20 69 74 20 6d 65  SE is that it me
4ac0: 72 67 65 73 20 61 20 6e 61 6d 65 64 20 74 72 61  rges a named tra
4ad0: 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f 20 69 74  nsaction into it
4ae0: 73 0a 70 61 72 65 6e 74 20 74 72 61 6e 73 61 63  s.parent transac
4af0: 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74 20 74 68  tion, so that th
4b00: 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  e named transact
4b10: 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65  ion and its pare
4b20: 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65 20 73 61  nt become.the sa
4b30: 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  me transaction. 
4b40: 20 41 66 74 65 72 20 52 45 4c 45 41 53 45 2c 20   After RELEASE, 
4b50: 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73 61  the named transa
4b60: 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61  ction and its pa
4b70: 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74  rent.will commit
4b80: 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 6f 67   or rollback tog
4b90: 65 74 68 65 72 2c 20 77 68 61 74 65 76 65 72 20  ether, whatever 
4ba0: 74 68 65 69 72 20 66 61 74 65 20 6d 61 79 20 62  their fate may b
4bb0: 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  e..</p></li>..<l
4bc0: 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c  i><p>.One can al
4bd0: 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73 61 76 65  so think of save
4be0: 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61 72 6b 73  points as."marks
4bf0: 22 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  " in the transac
4c00: 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65 2e 20 20  tion timeline.  
4c10: 49 6e 20 74 68 69 73 20 76 69 65 77 2c 20 74 68  In this view, th
4c20: 65 20 53 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d  e SAVEPOINT comm
4c30: 61 6e 64 0a 63 72 65 61 74 65 73 20 61 20 6e 65  and.creates a ne
4c40: 77 20 6d 61 72 6b 2c 20 74 68 65 20 52 4f 4c 4c  w mark, the ROLL
4c50: 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20  BACK TO command 
4c60: 72 65 77 69 6e 64 73 20 74 68 65 20 74 69 6d 65  rewinds the time
4c70: 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20 61 20 70  line back.to a p
4c80: 6f 69 6e 74 20 6a 75 73 74 20 61 66 74 65 72 20  oint just after 
4c90: 74 68 65 20 6e 61 6d 65 64 20 6d 61 72 6b 2c 20  the named mark, 
4ca0: 61 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45 20  and the RELEASE 
4cb0: 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65 73 20 6d  command.erases m
4cc0: 61 72 6b 73 20 66 72 6f 6d 20 74 68 65 20 74 69  arks from the ti
4cd0: 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75 74 20 61  meline without a
4ce0: 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e 67 20 61  ctually making a
4cf0: 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ny.changes to th
4d00: 65 20 64 61 74 61 62 61 73 65 2e 0a 3c 2f 70 3e  e database..</p>
4d10: 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c  </li>.</ul>....<
4d20: 68 33 3e 54 72 61 6e 73 61 63 74 69 6f 6e 20 4e  h3>Transaction N
4d30: 65 73 74 69 6e 67 20 52 75 6c 65 73 3c 2f 68 33  esting Rules</h3
4d40: 3e 0a 0a 3c 70 3e 54 72 61 6e 73 61 63 74 69 6f  >..<p>Transactio
4d50: 6e 73 20 73 74 61 63 6b 2e 20 20 54 68 65 20 6c  ns stack.  The l
4d60: 61 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ast transaction 
4d70: 73 74 61 72 74 65 64 20 77 69 6c 6c 20 62 65 20  started will be 
4d80: 74 68 65 20 66 69 72 73 74 0a 74 72 61 6e 73 61  the first.transa
4d90: 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20  ction committed 
4da0: 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c  or rolled back.<
4db0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 42 45 47  /p>..<p>The [BEG
4dc0: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79  IN] command only
4dd0: 20 77 6f 72 6b 73 20 69 66 20 74 68 65 20 74 72   works if the tr
4de0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
4df0: 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e 20  is empty, or.in 
4e00: 6f 74 68 65 72 20 77 6f 72 64 73 20 69 66 20 74  other words if t
4e10: 68 65 72 65 20 61 72 65 20 6e 6f 20 70 65 6e 64  here are no pend
4e20: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
4e30: 2e 20 20 49 66 20 74 68 65 20 74 72 61 6e 73 61  .  If the transa
4e40: 63 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73 20 6e  ction.stack is n
4e50: 6f 74 20 65 6d 70 74 79 20 77 68 65 6e 20 74 68  ot empty when th
4e60: 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  e [BEGIN] comman
4e70: 64 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68  d is invoked, th
4e80: 65 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 66  en the command.f
4e90: 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
4ea0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  or.</p>..<p>The 
4eb0: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
4ec0: 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f 75 74   commits all out
4ed0: 73 74 61 6e 64 69 6e 67 20 74 72 61 6e 73 61 63  standing transac
4ee0: 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76 65 73  tions and leaves
4ef0: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
4f00: 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70   stack empty.</p
4f10: 3e 0a 0a 3c 70 3e 54 68 65 20 52 45 4c 45 41 53  >..<p>The RELEAS
4f20: 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73  E command starts
4f30: 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20 72   with the most r
4f40: 65 63 65 6e 74 20 61 64 64 69 74 69 6f 6e 20 74  ecent addition t
4f50: 6f 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  o the.transactio
4f60: 6e 20 73 74 61 63 6b 20 61 6e 64 20 72 65 6c 65  n stack and rele
4f70: 61 73 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20  ases savepoints 
4f80: 62 61 63 6b 77 61 72 64 73 20 0a 69 6e 20 74 69  backwards .in ti
4f90: 6d 65 20 75 6e 74 69 6c 20 69 74 20 72 65 6c 65  me until it rele
4fa0: 61 73 65 73 20 61 20 73 61 76 65 70 6f 69 6e 74  ases a savepoint
4fb0: 20 6d 61 72 6b 20 77 69 74 68 20 61 20 6d 61 74   mark with a mat
4fc0: 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d  ching savepoint-
4fd0: 6e 61 6d 65 2e 0a 50 72 69 6f 72 20 73 61 76 65  name..Prior save
4fe0: 70 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73 61 76  points, even sav
4ff0: 65 70 6f 69 6e 74 73 20 77 69 74 68 20 6d 61 74  epoints with mat
5000: 63 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d  ching savepoint-
5010: 6e 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63 68 61  names, are.uncha
5020: 6e 67 65 64 2e 0a 49 66 20 74 68 65 20 52 45 4c  nged..If the REL
5030: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75  EASE command cau
5040: 73 65 73 20 74 68 65 0a 74 72 61 6e 73 61 63 74  ses the.transact
5050: 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20 62 65 63  ion stack to bec
5060: 6f 6d 65 20 65 6d 70 74 79 20 28 69 66 20 74 68  ome empty (if th
5070: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5080: 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 0a 6f  d releases the.o
5090: 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63  utermost transac
50a0: 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74  tion from the st
50b0: 61 63 6b 29 20 74 68 65 6e 20 74 68 65 20 74 72  ack) then the tr
50c0: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74  ansaction commit
50d0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b  s.</p>..<p>The [
50e0: 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61 6e  ROLLBACK] comman
50f0: 64 20 77 69 74 68 6f 75 74 20 61 20 54 4f 20 63  d without a TO c
5100: 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b  lause rolls back
5110: 73 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69 6f  s all transactio
5120: 6e 73 0a 61 6e 64 20 6c 65 61 76 65 73 20 74 68  ns.and leaves th
5130: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
5140: 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a  ack empty.</p>..
5150: 3c 70 3e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20  <p>The ROLLBACK 
5160: 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61 20 54  command with a T
5170: 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62  O clause rolls b
5180: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ack transactions
5190: 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72 64 73   going.backwards
51a0: 20 69 6e 20 74 69 6d 65 20 62 61 63 6b 20 74 6f   in time back to
51b0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
51c0: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
51d0: 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
51e0: 0a 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20 77  .The SAVEPOINT w
51f0: 69 74 68 20 74 68 65 20 6d 61 74 63 68 69 6e 67  ith the matching
5200: 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73 20 6f 6e   name remains on
5210: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
5220: 20 73 74 61 63 6b 2c 0a 62 75 74 20 61 6c 6c 20   stack,.but all 
5230: 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73  database changes
5240: 20 74 68 61 74 20 6f 63 63 75 72 72 65 64 20 61   that occurred a
5250: 66 74 65 72 20 74 68 61 74 20 53 41 56 45 50 4f  fter that SAVEPO
5260: 49 4e 54 20 77 61 73 20 63 72 65 61 74 65 64 0a  INT was created.
5270: 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  are rolled back.
5280: 20 20 49 66 20 74 68 65 20 73 61 76 65 70 6f 69    If the savepoi
5290: 6e 74 2d 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c  nt-name in a ROL
52a0: 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64  LBACK TO command
52b0: 20 64 6f 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20   does not.match 
52c0: 61 6e 79 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e  any SAVEPOINT on
52d0: 20 74 68 65 20 73 74 61 63 6b 2c 20 74 68 65 6e   the stack, then
52e0: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f   the ROLLBACK co
52f0: 6d 6d 61 6e 64 20 66 61 69 6c 73 20 77 69 74 68  mmand fails with
5300: 20 61 6e 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65   an.error and le
5310: 61 76 65 73 20 74 68 65 20 73 74 61 74 65 20 6f  aves the state o
5320: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  f the database u
5330: 6e 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c  nchanged.</p>..<
5340: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
5350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5390: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d  ####.Section com
53a0: 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f  ment comment {co
53b0: 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74 73 7d 0a  mment comments}.
53c0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
53d0: 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f  omment-syntax.</
53e0: 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 65 6e 74  tcl>..<p>Comment
53f0: 73 20 61 72 65 6e 27 74 20 53 51 4c 20 63 6f 6d  s aren't SQL com
5400: 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f  mands, but can o
5410: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
5420: 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72  text of.SQL quer
5430: 69 65 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73  ies passed to [s
5440: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
5450: 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64  2()] and related
5460: 20 69 6e 74 65 72 66 61 63 65 73 2e 2e 0a 43 6f   interfaces...Co
5470: 6d 6d 65 6e 74 73 20 61 72 65 20 0a 74 72 65 61  mments are .trea
5480: 74 65 64 20 61 73 20 77 68 69 74 65 73 70 61 63  ted as whitespac
5490: 65 20 62 79 20 74 68 65 20 70 61 72 73 65 72 2e  e by the parser.
54a0: 20 20 54 68 65 79 20 63 61 6e 20 62 65 67 69 6e    They can begin
54b0: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
54c0: 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75  pace .can be fou
54d0: 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e  nd, including in
54e0: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
54f0: 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69   that span multi
5500: 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a  ple lines..</p>.
5510: 0a 3c 70 3e 20 53 51 4c 20 63 6f 6d 6d 65 6e 74  .<p> SQL comment
5520: 73 20 62 65 67 69 6e 20 77 69 74 68 20 74 77 6f  s begin with two
5530: 20 63 6f 6e 73 65 63 75 74 69 76 65 20 22 2d 22   consecutive "-"
5540: 20 63 68 61 72 61 63 74 65 72 73 20 28 41 53 43   characters (ASC
5550: 49 49 20 30 78 32 64 29 0a 61 6e 64 20 65 78 74  II 0x2d).and ext
5560: 65 6e 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e  end up to and in
5570: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74  cluding the next
5580: 20 6e 65 77 6c 69 6e 65 20 63 68 61 72 61 63 74   newline charact
5590: 65 72 20 28 41 53 43 49 49 20 30 78 30 61 29 0a  er (ASCII 0x0a).
55a0: 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e 64  or until the end
55b0: 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63 68   of input, which
55c0: 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73 74  ever comes first
55d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 43 20 63 6f 6d  .</p>..<p> C com
55e0: 6d 65 6e 74 73 20 63 61 6e 20 73 70 61 6e 20 61  ments can span a
55f0: 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e  ny number of lin
5600: 65 73 2e 20 20 43 2d 73 74 79 6c 65 20 63 6f 6d  es.  C-style com
5610: 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74 68  ments begin.with
5620: 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e 64   "/*" and extend
5630: 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
5640: 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22 2a  ding the next "*
5650: 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61 69  /" character pai
5660: 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65  r.or until the e
5670: 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69  nd of input, whi
5680: 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72  chever comes fir
5690: 73 74 2e 20 20 43 2d 73 74 79 6c 65 20 63 6f 6d  st.  C-style com
56a0: 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d  ments.can span m
56b0: 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c  ultiple lines. <
56c0: 2f 70 3e 0a 0a 3c 70 3e 20 43 6f 6d 6d 65 6e 74  /p>..<p> Comment
56d0: 73 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79  s can appear any
56e0: 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65  where whitespace
56f0: 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c   can occur,.incl
5700: 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70  uding inside exp
5710: 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20  ressions and in 
5720: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74  the middle of ot
5730: 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  her SQL statemen
5740: 74 73 2e 0a 43 6f 6d 6d 65 6e 74 73 20 64 6f 20  ts..Comments do 
5750: 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a 0a  not nest..</p>..
5760: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
5770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57b0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
57c0: 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72 65  REATE INDEX} cre
57d0: 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45 41 54  ateindex {{CREAT
57e0: 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75 62 62 6c  E INDEX}}..Bubbl
57f0: 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d  eDiagram create-
5800: 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 42 75 62  index-stmt 1.Bub
5810: 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 64 65 78  bleDiagram index
5820: 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74 63 6c 3e  ed-column.</tcl>
5830: 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20  ..<p>The CREATE 
5840: 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f  INDEX command co
5850: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65  nsists of the ke
5860: 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 49  ywords "CREATE I
5870: 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62  NDEX" followed.b
5880: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
5890: 65 20 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65  e new index, the
58a0: 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74   keyword "ON", t
58b0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65  he name of a pre
58c0: 76 69 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20  viously.created 
58d0: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f  table that is to
58e0: 20 62 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64   be indexed, and
58f0: 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
5900: 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 73 20 6f   list of names o
5910: 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f.columns in the
5920: 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
5930: 75 73 65 64 20 66 6f 72 20 74 68 65 20 69 6e 64  used for the ind
5940: 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ex key.</p>..<p>
5950: 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  Each column name
5960: 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64   can be followed
5970: 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 22   by one of the "
5980: 41 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b  ASC" or "DESC" k
5990: 65 79 77 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63  eywords.to indic
59a0: 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 20  ate sort order. 
59b0: 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20   The sort order 
59c0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
59d0: 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64  e ignored depend
59e0: 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  ing.on the datab
59f0: 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e  ase file format.
5a00: 20 20 54 68 65 20 22 6c 65 67 61 63 79 22 20 66    The "legacy" f
5a10: 69 6c 65 20 66 6f 72 6d 61 74 20 69 67 6e 6f 72  ile format ignor
5a20: 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20 6f 72  es index.sort or
5a30: 64 65 72 2e 20 20 54 68 65 20 64 65 73 63 65 6e  der.  The descen
5a40: 64 69 6e 67 20 69 6e 64 65 78 20 66 69 6c 65 20  ding index file 
5a50: 66 6f 72 6d 61 74 20 74 61 6b 65 73 20 69 6e 64  format takes ind
5a60: 65 78 20 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e  ex sort order.in
5a70: 74 6f 20 61 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c  to account.  Onl
5a80: 79 20 63 6f 70 69 65 73 20 6f 66 20 53 51 4c 69  y copies of SQLi
5a90: 74 65 20 6e 65 77 65 72 20 74 68 61 6e 20 5b 76  te newer than [v
5aa0: 65 72 73 69 6f 6e 20 33 2e 33 2e 30 5d 20 0a 28  ersion 3.3.0] .(
5ab0: 72 65 6c 65 61 73 65 64 20 6f 6e 20 32 30 30 36  released on 2006
5ac0: 2d 30 31 2d 31 30 29 20 61 72 65 20 61 62 6c 65  -01-10) are able
5ad0: 20 74 6f 20 75 6e 64 65 72 73 74 61 6e 64 20 74   to understand t
5ae0: 68 65 20 6e 65 77 65 72 20 64 65 73 63 65 6e 64  he newer descend
5af0: 69 6e 67 0a 69 6e 64 65 78 20 66 69 6c 65 20 66  ing.index file f
5b00: 6f 72 6d 61 74 20 61 6e 64 20 73 6f 20 66 6f 72  ormat and so for
5b10: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
5b20: 69 74 68 20 6f 6c 64 65 72 20 76 65 72 73 69 6f  ith older versio
5b30: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 2c 20 74 68  ns of.SQLite, th
5b40: 65 20 6c 65 67 61 63 79 20 66 69 6c 65 20 66 6f  e legacy file fo
5b50: 72 6d 61 74 20 69 73 20 67 65 6e 65 72 61 74 65  rmat is generate
5b60: 64 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 55  d by default.  U
5b70: 73 65 20 74 68 65 0a 5b 6c 65 67 61 63 79 5f 66  se the.[legacy_f
5b80: 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 70 72 61 67  ile_format] prag
5b90: 6d 61 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 69  ma to modify thi
5ba0: 73 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20 67  s behavior and g
5bb0: 65 6e 65 72 61 74 65 0a 64 61 74 61 62 61 73 65  enerate.database
5bc0: 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e  s that use the n
5bd0: 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74  ewer file format
5be0: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
5bf0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 6d 61 79  ns of SQLite.may
5c00: 20 62 65 67 69 6e 20 74 6f 20 67 65 6e 65 72 61   begin to genera
5c10: 74 65 20 74 68 65 20 6e 65 77 65 72 20 66 69 6c  te the newer fil
5c20: 65 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61  e format by defa
5c30: 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ult.</p>..<p>The
5c40: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
5c50: 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63  following each c
5c60: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e  olumn name defin
5c70: 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 0a 73  es a collating.s
5c80: 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72  equence used for
5c90: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e   text entries in
5ca0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 54   that column.  T
5cb0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
5cc0: 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73  ting.sequence is
5cd0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
5ce0: 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20  equence defined 
5cf0: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  for that column 
5d00: 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  in the.[CREATE T
5d10: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
5d20: 20 20 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c 61    Or if no colla
5d30: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
5d40: 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69 6e   otherwise defin
5d50: 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69 6e  ed,.the built-in
5d60: 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
5d70: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
5d80: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72  ed.</p>..<p>Ther
5d90: 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61  e are no arbitra
5da0: 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68 65  ry limits on the
5db0: 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69 63   number of indic
5dc0: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a 61  es that can be.a
5dd0: 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e  ttached to a sin
5de0: 67 6c 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  gle table.  The 
5df0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
5e00: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 69 73  s in an index is
5e10: 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20 5b 53 51   .limited to [SQ
5e20: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d  LITE_MAX_COLUMN]
5e30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65  .</p>..<p>If the
5e40: 20 55 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20   UNIQUE keyword 
5e50: 61 70 70 65 61 72 73 20 62 65 74 77 65 65 6e 20  appears between 
5e60: 43 52 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58  CREATE and INDEX
5e70: 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a   then duplicate.
5e80: 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 61 72  index entries ar
5e90: 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20  e not allowed.  
5ea0: 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69  Any attempt to i
5eb0: 6e 73 65 72 74 20 61 20 64 75 70 6c 69 63 61 74  nsert a duplicat
5ec0: 65 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73  e entry.will res
5ed0: 75 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e  ult in an error.
5ee0: 20 20 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73    For the purpos
5ef0: 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64  es of unique ind
5f00: 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76  ices, all NULL v
5f10: 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64  alues.are consid
5f20: 65 72 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e  ered to differen
5f30: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
5f40: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64   NULL values and
5f50: 20 61 72 65 20 74 68 75 73 20 75 6e 69 71 75 65   are thus unique
5f60: 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  ..This is one of
5f70: 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c   the two possibl
5f80: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
5f90: 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20  s of the SQL-92 
5fa0: 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61  standard.(the la
5fb0: 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20 73 74  nguage in the st
5fc0: 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69 67 75  andard is ambigu
5fd0: 69 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68 65  ious) and is the
5fe0: 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 0a   interpretation.
5ff0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73 74  followed by Post
6000: 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46  greSQL, MySQL, F
6010: 69 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72 61  irebird, and Ora
6020: 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61  cle.  Informix a
6030: 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c  nd.Microsoft SQL
6040: 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74   Server follow t
6050: 68 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70 72  he other interpr
6060: 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  etation of the s
6070: 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70  tandard.</p>..<p
6080: 3e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  >If the optional
6090: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
60a0: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
60b0: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
60c0: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
60d0: 20 6e 61 6d 65 20 61 6c 65 61 64 79 20 65 78 69   name aleady exi
60e0: 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63  sts, then this c
60f0: 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61  ommand becomes a
6100: 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e   no-op.</p>..<p>
6110: 49 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f  Indexes are remo
6120: 76 65 64 20 77 69 74 68 20 74 68 65 20 3c 61 20  ved with the <a 
6130: 68 72 65 66 3d 22 6c 61 6e 67 5f 64 72 6f 70 69  href="lang_dropi
6140: 6e 64 65 78 2e 68 74 6d 6c 22 3e 44 52 4f 50 20  ndex.html">DROP 
6150: 49 4e 44 45 58 3c 2f 61 3e 20 0a 63 6f 6d 6d 61  INDEX</a> .comma
6160: 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  nd.</p>...<tcl>.
6170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
61c0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54  ection {CREATE T
61d0: 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62  ABLE} {createtab
61e0: 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42  le} {{CREATE TAB
61f0: 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  LE}}..BubbleDiag
6200: 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65  ram create-table
6210: 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
6220: 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66  agram column-def
6230: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74  .BubbleDiagram t
6240: 79 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44  ype-name.BubbleD
6250: 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f  iagram column-co
6260: 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44  nstraint.BubbleD
6270: 69 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f 6e  iagram table-con
6280: 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
6290: 61 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65  agram foreign-ke
62a0: 79 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a  y-clause.</tcl>.
62b0: 0a 3c 70 3e 41 20 43 52 45 41 54 45 20 54 41 42  .<p>A CREATE TAB
62c0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
62d0: 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20 6b 65  basically the ke
62e0: 79 77 6f 72 64 73 20 22 43 52 45 41 54 45 20 54  ywords "CREATE T
62f0: 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64 20 62  ABLE".followed b
6300: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  y the name of a 
6310: 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20 61 20  new table and a 
6320: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
6330: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64 65 66  st of column.def
6340: 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6e  initions and con
6350: 73 74 72 61 69 6e 74 73 2e 20 20 0a 54 61 62 6c  straints.  .Tabl
6360: 65 73 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65  es names that be
6370: 67 69 6e 20 77 69 74 68 20 22 3c 62 3e 73 71 6c  gin with "<b>sql
6380: 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20 72 65  ite_</b>" are re
6390: 73 65 72 76 65 64 0a 66 6f 72 20 75 73 65 20 62  served.for use b
63a0: 79 20 53 51 4c 69 74 65 20 69 74 73 65 6c 66 20  y SQLite itself 
63b0: 61 6e 64 20 63 61 6e 6e 6f 74 20 61 70 70 65 61  and cannot appea
63c0: 72 73 20 69 6e 20 61 20 43 52 45 41 54 45 20 54  rs in a CREATE T
63d0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c  ABLE statement.<
63e0: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c  /p>..<p>Each col
63f0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn definition i
6400: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
6410: 65 20 63 6f 6c 75 6d 6e 20 6f 70 74 69 6f 6e 61  e column optiona
6420: 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  lly followed by 
6430: 74 68 65 0a 5b 64 61 74 61 74 79 70 65 5d 20 66  the.[datatype] f
6440: 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2c 20  or that column, 
6450: 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  then one or more
6460: 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e   optional column
6470: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 53 51   constraints..SQ
6480: 4c 69 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d  Lite uses [dynam
6490: 69 63 20 74 79 70 69 6e 67 5d 3b 20 0a 74 68 65  ic typing]; .the
64a0: 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
64b0: 65 20 63 6f 6c 75 6d 6e 20 64 6f 65 73 20 6e 6f  e column does no
64c0: 74 20 72 65 73 74 72 69 63 74 20 77 68 61 74 20  t restrict what 
64d0: 64 61 74 61 20 6d 61 79 20 62 65 20 70 75 74 0a  data may be put.
64e0: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  in that column..
64f0: 54 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  The UNIQUE const
6500: 72 61 69 6e 74 20 63 61 75 73 65 73 20 61 6e 20  raint causes an 
6510: 75 6e 69 71 75 65 20 69 6e 64 65 78 20 74 6f 20  unique index to 
6520: 62 65 20 63 72 65 61 74 65 64 20 6f 6e 20 74 68  be created on th
6530: 65 20 73 70 65 63 69 66 69 65 64 0a 63 6f 6c 75  e specified.colu
6540: 6d 6e 73 2e 20 20 41 6c 6c 20 4e 55 4c 4c 20 76  mns.  All NULL v
6550: 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
6560: 65 72 65 64 20 64 69 66 66 65 72 65 6e 74 20 66  ered different f
6570: 72 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 20 61  rom each other a
6580: 6e 64 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65  nd from.all othe
6590: 72 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  r values for the
65a0: 20 70 75 72 70 6f 73 65 20 6f 66 20 64 65 74 65   purpose of dete
65b0: 72 6d 69 6e 69 6e 67 20 75 6e 69 71 75 65 6e 65  rmining uniquene
65c0: 73 73 2c 20 68 65 6e 63 65 20 61 20 55 4e 49 51  ss, hence a UNIQ
65d0: 55 45 0a 63 6f 6c 75 6d 6e 20 6d 61 79 20 63 6f  UE.column may co
65e0: 6e 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65 20 65  ntain multiple e
65f0: 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
6600: 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 54  value of NULL..T
6610: 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
6620: 65 20 73 70 65 63 69 66 69 65 73 20 77 68 61 74  e specifies what
6630: 20 74 65 78 74 20 0a 5b 63 6f 6c 6c 61 74 69 6e   text .[collatin
6640: 67 20 66 75 6e 63 74 69 6f 6e 5d 20 74 6f 20 75  g function] to u
6650: 73 65 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  se when comparin
6660: 67 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 66  g text entries f
6670: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20  or the column.  
6680: 0a 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 5b 42  .The built-in [B
6690: 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6e 67  INARY] collating
66a0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
66b0: 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70  d by default..<p
66c0: 3e 0a 54 68 65 20 44 45 46 41 55 4c 54 20 63 6f  >.The DEFAULT co
66d0: 6e 73 74 72 61 69 6e 74 20 73 70 65 63 69 66 69  nstraint specifi
66e0: 65 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  es a default val
66f0: 75 65 20 74 6f 20 75 73 65 20 77 68 65 6e 20 64  ue to use when d
6700: 6f 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d  oing an [INSERT]
6710: 2e 0a 54 68 65 20 76 61 6c 75 65 20 6d 61 79 20  ..The value may 
6720: 62 65 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e  be NULL, a strin
6730: 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20 6e 75  g constant, a nu
6740: 6d 62 65 72 2c 20 6f 72 20 61 20 63 6f 6e 73 74  mber, or a const
6750: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 65  ant expression.e
6760: 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e  nclosed in paren
6770: 74 68 65 73 65 73 2e 0a 54 68 65 20 64 65 66 61  theses..The defa
6780: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
6790: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
67a0: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
67b0: 64 65 70 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72  dependant.keywor
67c0: 64 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds CURRENT_TIME,
67d0: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
67e0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
67f0: 4d 50 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  MP. If the value
6800: 20 69 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69   is.NULL, a stri
6810: 6e 67 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e  ng constant or n
6820: 75 6d 62 65 72 2c 20 69 74 20 69 73 20 6c 69 74  umber, it is lit
6830: 65 72 61 6c 6c 79 20 69 6e 73 65 72 74 65 64 20  erally inserted 
6840: 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 0a  into the column.
6850: 77 68 65 6e 65 76 65 72 20 61 6e 20 49 4e 53 45  whenever an INSE
6860: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  RT statement tha
6870: 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 65 63 69  t does not speci
6880: 66 79 20 61 20 76 61 6c 75 65 20 66 6f 72 20 74  fy a value for t
6890: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 0a 65 78 65  he column is.exe
68a0: 63 75 74 65 64 2e 20 49 66 20 74 68 65 20 76 61  cuted. If the va
68b0: 6c 75 65 20 69 73 20 43 55 52 52 45 4e 54 5f 54  lue is CURRENT_T
68c0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
68d0: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
68e0: 45 53 54 41 4d 50 2c 20 74 68 65 6e 0a 74 68 65  ESTAMP, then.the
68f0: 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74   current UTC dat
6900: 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73  e and/or time is
6910: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
6920: 68 65 20 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 0a  he columns. For.
6930: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68  CURRENT_TIME, th
6940: 65 20 66 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d  e format is HH:M
6950: 4d 3a 53 53 2e 20 46 6f 72 20 43 55 52 52 45 4e  M:SS. For CURREN
6960: 54 5f 44 41 54 45 2c 20 59 59 59 59 2d 4d 4d 2d  T_DATE, YYYY-MM-
6970: 44 44 2e 20 54 68 65 20 66 6f 72 6d 61 74 0a 66  DD. The format.f
6980: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
6990: 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d  TAMP is "YYYY-MM
69a0: 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c  -DD HH:MM:SS"..<
69b0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 50 52 49 4d  /p>..<p>The PRIM
69c0: 41 52 59 20 4b 45 59 20 61 74 74 72 69 62 75 74  ARY KEY attribut
69d0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 63 72 65 61 74  e normally creat
69e0: 65 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  es a UNIQUE inde
69f0: 78 20 6f 6e 0a 74 68 65 20 63 6f 6c 75 6d 6e 20  x on.the column 
6a00: 6f 72 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  or columns that 
6a10: 61 72 65 20 73 70 65 63 69 66 69 65 64 20 61 73  are specified as
6a20: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
6a30: 2e 20 20 54 68 65 20 6f 6e 6c 79 0a 65 78 63 65  .  The only.exce
6a40: 70 74 69 6f 6e 20 74 6f 20 74 68 69 73 20 62 65  ption to this be
6a50: 68 61 76 69 6f 72 20 69 73 20 73 70 65 63 69 61  havior is specia
6a60: 6c 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  l [INTEGER PRIMA
6a70: 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2c 0a  RY KEY] column,.
6a80: 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 2e  described below.
6a90: 0a 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68  .According to th
6aa0: 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20  e SQL standard, 
6ab0: 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75  PRIMARY KEY shou
6ac0: 6c 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55 4c  ld imply NOT NUL
6ad0: 4c 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  L..Unfortunately
6ae0: 2c 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67 2d  , due to a long-
6af0: 73 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67 20  standing coding 
6b00: 6f 76 65 72 73 69 67 68 74 2c 20 74 68 69 73 20  oversight, this 
6b10: 69 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73 65  is not .the case
6b20: 20 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51 4c   in SQLite.  SQL
6b30: 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20  ite allows NULL 
6b40: 76 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49 4d  values.in a PRIM
6b50: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 20  ARY KEY column. 
6b60: 20 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67 65   We could change
6b70: 20 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66 6f   SQLite to confo
6b80: 72 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64 61  rm to the.standa
6b90: 72 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68 74  rd (and we might
6ba0: 20 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66 75   do so in the fu
6bb0: 74 75 72 65 29 2c 20 62 75 74 20 62 79 20 74 68  ture), but by th
6bc0: 65 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72 73  e time the.overs
6bd0: 69 67 68 74 20 77 61 73 20 64 69 73 63 6f 76 65  ight was discove
6be0: 72 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73 20  red, SQLite was 
6bf0: 69 6e 20 73 75 63 68 20 77 69 64 65 20 75 73 65  in such wide use
6c00: 20 74 68 61 74 20 77 65 20 66 65 61 72 65 64 0a   that we feared.
6c10: 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20  breaking legacy 
6c20: 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65 64  code if we fixed
6c30: 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53   the problem.  S
6c40: 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76  o for now we hav
6c50: 65 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e 74  e.chosen to cont
6c60: 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  inue allowing NU
6c70: 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b  LLs in PRIMARY K
6c80: 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76 65  EY columns..Deve
6c90: 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62 65  lopers should be
6ca0: 20 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72 2c   aware, however,
6cb0: 20 74 68 61 74 20 77 65 20 6d 61 79 20 63 68 61   that we may cha
6cc0: 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 63 6f  nge SQLite to.co
6cd0: 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51 4c  nform to the SQL
6ce0: 20 73 74 61 6e 64 61 72 64 20 69 6e 20 66 75 74   standard in fut
6cf0: 75 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20 64  ure and should d
6d00: 65 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72 61  esign new progra
6d10: 6d 73 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e 3c  ms.accordingly.<
6d20: 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75  /p>..<p>SQLite u
6d30: 73 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70  ses [dynamic typ
6d40: 69 6e 67 5d 20 69 6e 73 74 65 61 64 20 6f 66 20  ing] instead of 
6d50: 73 74 61 74 69 63 20 74 79 70 69 6e 67 2e 20 20  static typing.  
6d60: 45 78 63 65 70 74 20 66 6f 72 20 74 68 65 0a 73  Except for the.s
6d70: 70 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 5b  pecial case of [
6d80: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6d90: 4b 45 59 5d 2c 20 53 51 4c 69 74 65 20 77 69 6c  KEY], SQLite wil
6da0: 6c 20 61 6c 6c 6f 77 20 76 61 6c 75 65 73 20 6f  l allow values o
6db0: 66 20 61 6e 79 0a 74 79 70 65 20 74 6f 20 62 65  f any.type to be
6dc0: 20 73 74 6f 72 65 64 20 69 6e 20 61 6e 79 20 63   stored in any c
6dd0: 6f 6c 75 6d 6e 20 72 65 67 61 72 64 6c 65 73 73  olumn regardless
6de0: 20 6f 66 20 74 68 65 20 64 65 63 6c 61 72 65 64   of the declared
6df0: 20 64 61 74 61 74 79 70 65 20 6f 66 0a 74 68 61   datatype of.tha
6e00: 74 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 20 64  t column.  The d
6e10: 65 63 6c 61 72 65 64 20 64 61 74 61 74 79 70 65  eclared datatype
6e20: 20 69 73 20 61 20 5b 61 66 66 69 6e 69 74 79 20   is a [affinity 
6e30: 7c 20 74 79 70 65 20 61 66 66 69 6e 69 74 79 5d  | type affinity]
6e40: 20 74 68 61 74 0a 53 51 4c 69 74 65 20 61 74 74   that.SQLite att
6e50: 65 6d 70 74 73 20 74 6f 20 63 6f 6d 70 6c 79 20  empts to comply 
6e60: 77 69 74 68 2c 20 62 75 74 20 74 68 65 20 6f 70  with, but the op
6e70: 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
6e80: 63 65 65 64 20 65 76 65 6e 20 69 66 0a 63 6f 6d  ceed even if.com
6e90: 70 6c 69 61 6e 63 65 20 69 73 20 6e 6f 74 20 70  pliance is not p
6ea0: 6f 73 73 69 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  ossible.</p>..<p
6eb0: 3e 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f  >If the "TEMP" o
6ec0: 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20 6b 65  r "TEMPORARY" ke
6ed0: 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69 6e 20  yword occurs in 
6ee0: 62 65 74 77 65 65 6e 20 22 43 52 45 41 54 45 22  between "CREATE"
6ef0: 0a 61 6e 64 20 22 54 41 42 4c 45 22 20 74 68 65  .and "TABLE" the
6f00: 6e 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  n the table that
6f10: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
6f20: 6e 6c 79 20 76 69 73 69 62 6c 65 0a 77 69 74 68  nly visible.with
6f30: 69 6e 20 74 68 61 74 20 73 61 6d 65 20 64 61 74  in that same dat
6f40: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
6f50: 0a 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69  .and is automati
6f60: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68  cally deleted wh
6f70: 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  en.the database 
6f80: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
6f90: 6f 73 65 64 2e 20 20 41 6e 79 20 69 6e 64 69 63  osed.  Any indic
6fa0: 65 73 20 63 72 65 61 74 65 64 20 6f 6e 20 61 20  es created on a 
6fb0: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 0a  temporary table.
6fc0: 61 72 65 20 61 6c 73 6f 20 74 65 6d 70 6f 72 61  are also tempora
6fd0: 72 79 2e 20 20 54 65 6d 70 6f 72 61 72 79 20 74  ry.  Temporary t
6fe0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
6ff0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
7000: 61 0a 73 65 70 61 72 61 74 65 20 66 69 6c 65 20  a.separate file 
7010: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 74 68  distinct from th
7020: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
7030: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49  file.</p>..<p> I
7040: 66 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  f a &lt;database
7050: 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65  -name&gt; is spe
7060: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
7070: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
7080: 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20  d in .the named 
7090: 64 61 74 61 62 61 73 65 2e 20 49 74 20 69 73 20  database. It is 
70a0: 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63  an error to spec
70b0: 69 66 79 20 62 6f 74 68 20 61 20 26 6c 74 3b 64  ify both a &lt;d
70c0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
70d0: 0a 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b 65  .and the TEMP ke
70e0: 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74 68  yword, unless th
70f0: 65 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  e &lt;database-n
7100: 61 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70  ame&gt; is "temp
7110: 22 2e 20 49 66 20 6e 6f 0a 64 61 74 61 62 61 73  ". If no.databas
7120: 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  e name is specif
7130: 69 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d  ied, and the TEM
7140: 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74  P keyword is not
7150: 20 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 74 61   present,.the ta
7160: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
7170: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
7180: 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ase.</p>..<p>The
7190: 20 6f 70 74 69 6f 6e 61 6c 20 5b 63 6f 6e 66 6c   optional [confl
71a0: 69 63 74 20 63 6c 61 75 73 65 5d 20 66 6f 6c 6c  ict clause] foll
71b0: 6f 77 69 6e 67 20 65 61 63 68 20 63 6f 6e 73 74  owing each const
71c0: 72 61 69 6e 74 0a 61 6c 6c 6f 77 73 20 74 68 65  raint.allows the
71d0: 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f   specification o
71e0: 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  f an alternative
71f0: 20 64 65 66 61 75 6c 74 0a 63 6f 6e 73 74 72 61   default.constra
7200: 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
7210: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
7220: 6d 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 73 74  m for that const
7230: 72 61 69 6e 74 2e 0a 49 66 20 6e 6f 20 63 6f 6e  raint..If no con
7240: 66 6c 69 63 74 20 63 6c 61 75 73 65 20 69 73 20  flict clause is 
7250: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 41  specified, the A
7260: 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69  BORT algorithm i
7270: 73 20 75 73 65 64 2e 0a 44 69 66 66 65 72 65 6e  s used..Differen
7280: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
7290: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 74 61  thin the same.ta
72a0: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
72b0: 66 65 72 65 6e 74 20 63 6f 6e 66 6c 69 63 74 20  ferent conflict 
72c0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
72d0: 69 74 68 6d 73 2e 0a 49 66 20 61 6e 20 5b 49 4e  ithms..If an [IN
72e0: 53 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54 45  SERT] or [UPDATE
72f0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63  ] statement spec
7300: 69 66 69 65 73 20 61 20 63 6f 6e 66 6c 69 63 74  ifies a conflict
7310: 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
7320: 72 69 74 68 6d 2c 20 74 68 65 6e 20 74 68 65 20  rithm, then the 
7330: 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
7340: 69 65 64 20 6f 6e 20 74 68 65 20 49 4e 53 45 52  ied on the INSER
7350: 54 20 6f 72 0a 55 50 44 41 54 45 20 73 74 61 74  T or.UPDATE stat
7360: 65 6d 65 6e 74 20 6f 76 65 72 72 69 64 65 73 20  ement overrides 
7370: 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70  the algorithm sp
7380: 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 0a  ecified in the .
7390: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
73a0: 74 65 6d 65 6e 74 2e 0a 53 65 65 20 74 68 65 20  tement..See the 
73b0: 73 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b  section titled.[
73c0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72  ON CONFLICT] for
73d0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
73e0: 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70  rmation.</p>..<p
73f0: 3e 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  >CHECK constrain
7400: 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
7410: 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f 6e 20   as of [version 
7420: 33 2e 33 2e 30 5d 2e 20 20 50 72 69 6f 72 0a 74  3.3.0].  Prior.t
7430: 6f 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30 2c  o version 3.3.0,
7440: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
7450: 74 73 20 77 65 72 65 20 70 61 72 73 65 64 20 62  ts were parsed b
7460: 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65 64 2e  ut not enforced.
7470: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6e 75 6d  </p>..<p>The num
7480: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
7490: 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69 6d  n a table is lim
74a0: 69 74 65 64 20 62 79 20 74 68 65 0a 5b 53 51 4c  ited by the.[SQL
74b0: 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 20  ITE_MAX_COLUMN] 
74c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61 72  compile-time par
74d0: 61 6d 65 74 65 72 2e 0a 41 20 73 69 6e 67 6c 65  ameter..A single
74e0: 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c 65 20   row of a table 
74f0: 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d 6f 72  cannot store mor
7500: 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d  e than.[SQLITE_M
7510: 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74 65 73  AX_LENGTH] bytes
7520: 20 6f 66 20 64 61 74 61 2e 0a 42 6f 74 68 20 6f   of data..Both o
7530: 66 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63  f these limits c
7540: 61 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74  an be lowered at
7550: 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74   runtime using t
7560: 68 65 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69  he.[sqlite3_limi
7570: 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72  t()] C/C++ inter
7580: 66 61 63 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 54  face.</p>...<p>T
7590: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
75a0: 41 53 20 66 6f 72 6d 20 64 65 66 69 6e 65 73 20  AS form defines 
75b0: 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 0a  the table to be.
75c0: 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
75d0: 66 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20  f a query.  The 
75e0: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 74 61 62  names of the tab
75f0: 6c 65 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74  le columns are.t
7600: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
7610: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
7620: 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  esult.</p>..<p>I
7630: 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 49  f the optional I
7640: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63 6c 61  F NOT EXISTS cla
7650: 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 61  use is present a
7660: 6e 64 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65  nd another table
7670: 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e  .with the same n
7680: 61 6d 65 20 61 6c 65 61 64 79 20 65 78 69 73 74  ame aleady exist
7690: 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6d  s, then this com
76a0: 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61 20 6e  mand becomes a n
76b0: 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 61  o-op.</p>..<p>Ta
76c0: 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  bles are removed
76d0: 20 75 73 69 6e 67 20 74 68 65 20 3c 61 20 68 72   using the <a hr
76e0: 65 66 3d 22 6c 61 6e 67 5f 64 72 6f 70 74 61 62  ef="lang_droptab
76f0: 6c 65 2e 68 74 6d 6c 22 3e 44 52 4f 50 20 54 41  le.html">DROP TA
7700: 42 4c 45 3c 2f 61 3e 20 0a 73 74 61 74 65 6d 65  BLE</a> .stateme
7710: 6e 74 2e 20 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nt.  </p>..<tcl>
7720: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 77 69  hd_fragment rowi
7730: 64 20 7b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  d {INTEGER PRIMA
7740: 52 59 20 4b 45 59 7d 20 52 4f 57 49 44 20 72 6f  RY KEY} ROWID ro
7750: 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 4f  wid</tcl>.<h3>RO
7760: 57 49 44 73 20 61 6e 64 20 74 68 65 20 49 4e 54  WIDs and the INT
7770: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7780: 3c 2f 68 33 3e 0a 0a 3c 70 3e 45 76 65 72 79 20  </h3>..<p>Every 
7790: 72 6f 77 20 6f 66 20 65 76 65 72 79 20 53 51 4c  row of every SQL
77a0: 69 74 65 20 74 61 62 6c 65 20 68 61 73 20 61 20  ite table has a 
77b0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
77c0: 74 65 67 65 72 20 6b 65 79 20 0a 74 68 61 74 20  teger key .that 
77d0: 69 73 20 75 6e 69 71 75 65 20 77 69 74 68 69 6e  is unique within
77e0: 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e   the same table.
77f0: 0a 54 68 69 73 20 69 6e 74 65 67 65 72 20 69 73  .This integer is
7800: 20 75 73 75 61 6c 6c 79 20 63 61 6c 6c 65 64 20   usually called 
7810: 74 68 65 20 22 72 6f 77 69 64 22 2e 20 20 54 68  the "rowid".  Th
7820: 65 20 72 6f 77 69 64 20 69 73 20 74 68 65 20 61  e rowid is the a
7830: 63 74 75 61 6c 20 6b 65 79 20 75 73 65 64 0a 69  ctual key used.i
7840: 6e 20 74 68 65 20 42 2d 54 72 65 65 20 74 68 61  n the B-Tree tha
7850: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 6e 20  t implements an 
7860: 53 51 4c 69 74 65 20 74 61 62 6c 65 2e 20 20 52  SQLite table.  R
7870: 6f 77 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  ows are stored i
7880: 6e 0a 72 6f 77 69 64 20 6f 72 64 65 72 2e 20 54  n.rowid order. T
7890: 68 65 0a 72 6f 77 69 64 20 76 61 6c 75 65 20 63  he.rowid value c
78a0: 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75  an be accessed u
78b0: 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20  sing one of the 
78c0: 73 70 65 63 69 61 6c 20 6e 61 6d 65 73 0a 22 3c  special names."<
78d0: 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 20 22 3c  b>ROWID</b>", "<
78e0: 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22  b>OID</b>", or "
78f0: 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e  <b>_ROWID_</b>".
7900: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 61 20 63  </p>..<p>.If a c
7910: 6f 6c 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65  olumn is declare
7920: 64 20 74 6f 20 62 65 20 61 6e 20 49 4e 54 45 47  d to be an INTEG
7930: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
7940: 74 68 65 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e  then that column
7950: 20 69 73 20 6e 6f 74 0a 61 20 22 72 65 61 6c 22   is not.a "real"
7960: 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e   database column
7970: 20 62 75 74 20 69 6e 73 74 65 61 64 20 62 65 63   but instead bec
7980: 6f 6d 65 73 0a 61 6e 20 61 6c 69 61 73 20 66 6f  omes.an alias fo
7990: 72 20 74 68 65 20 72 6f 77 69 64 2e 20 20 55 6e  r the rowid.  Un
79a0: 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69  like normal SQLi
79b0: 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20  te columns, the 
79c0: 72 6f 77 69 64 0a 6d 75 73 74 20 62 65 20 61 20  rowid.must be a 
79d0: 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 74 65 67 65 72  non-NULL integer
79e0: 20 76 61 6c 75 65 2e 20 20 54 68 65 20 72 6f 77   value.  The row
79f0: 69 64 20 69 73 20 6e 6f 74 20 61 62 6c 65 20 74  id is not able t
7a00: 6f 20 68 6f 6c 64 0a 66 6c 6f 61 74 69 6e 67 20  o hold.floating 
7a10: 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73 74  point values, st
7a20: 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72  rings, BLOBs, or
7a30: 20 4e 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c   NULLs.</p>..<bl
7a40: 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a 41 6e 20  ockquote><i>.An 
7a50: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
7a60: 4b 45 59 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  KEY column is an
7a70: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 36   alias for the 6
7a80: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
7a90: 65 67 65 72 20 72 6f 77 69 64 2e 0a 3c 2f 69 3e  eger rowid..</i>
7aa0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
7ab0: 70 3e 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49  p>An INTEGER PRI
7ac0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 20  MARY KEY column 
7ad0: 63 61 6e 20 61 6c 73 6f 20 69 6e 63 6c 75 64 65  can also include
7ae0: 20 74 68 65 0a 6b 65 79 77 6f 72 64 20 5b 41 55   the.keyword [AU
7af0: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20 54  TOINCREMENT].  T
7b00: 68 65 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  he [AUTOINCREMEN
7b10: 54 5d 20 6b 65 79 77 6f 72 64 20 6d 6f 64 69 66  T] keyword modif
7b20: 69 65 64 20 74 68 65 20 77 61 79 0a 74 68 61 74  ied the way.that
7b30: 20 42 2d 54 72 65 65 20 6b 65 79 73 20 61 72 65   B-Tree keys are
7b40: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67   automatically g
7b50: 65 6e 65 72 61 74 65 64 2e 20 20 41 64 64 69 74  enerated.  Addit
7b60: 69 6f 6e 61 6c 20 64 65 74 61 69 6c 0a 6f 6e 20  ional detail.on 
7b70: 61 75 74 6f 6d 61 74 69 63 20 42 2d 54 72 65 65  automatic B-Tree
7b80: 20 6b 65 79 20 67 65 6e 65 72 61 74 69 6f 6e 20   key generation 
7b90: 69 73 20 61 76 61 69 6c 61 62 6c 65 0a 3c 61 20  is available.<a 
7ba0: 68 72 65 66 3d 22 61 75 74 6f 69 6e 63 2e 68 74  href="autoinc.ht
7bb0: 6d 6c 22 3e 73 65 70 61 72 61 74 65 6c 79 3c 2f  ml">separately</
7bc0: 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  a>.</p>..<p>The 
7bd0: 73 70 65 63 69 61 6c 20 62 65 68 61 76 69 6f 72  special behavior
7be0: 20 6f 66 20 49 4e 54 45 47 45 52 20 50 52 49 4d   of INTEGER PRIM
7bf0: 41 52 59 20 4b 45 59 0a 69 73 20 6f 6e 6c 79 20  ARY KEY.is only 
7c00: 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65  available if the
7c10: 20 74 79 70 65 20 6e 61 6d 65 20 69 73 20 65 78   type name is ex
7c20: 61 63 74 6c 79 20 22 49 4e 54 45 47 45 52 22 20  actly "INTEGER" 
7c30: 28 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 0a  (in any mixture.
7c40: 6f 66 20 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of upper and low
7c50: 65 72 20 63 61 73 65 2e 29 20 20 4f 74 68 65 72  er case.)  Other
7c60: 20 69 6e 74 65 67 65 72 20 74 79 70 65 20 6e 61   integer type na
7c70: 6d 65 73 0a 6c 69 6b 65 20 22 49 4e 54 22 20 6f  mes.like "INT" o
7c80: 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53  r "BIGINT" or "S
7c90: 48 4f 52 54 20 49 4e 54 45 47 45 52 22 20 6f 72  HORT INTEGER" or
7ca0: 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47   "UNSIGNED INTEG
7cb0: 45 52 22 0a 63 61 75 73 65 73 20 74 68 65 20 70  ER".causes the p
7cc0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
7cd0: 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  n to behave as a
7ce0: 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
7cf0: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 69 6e 74   column with.int
7d00: 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79 5d 20  eger [affinity] 
7d10: 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64  and a unique ind
7d20: 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c  ex, not as an al
7d30: 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69  ias for the rowi
7d40: 64 2e 0a 54 68 65 20 73 70 65 63 69 61 6c 20 62  d..The special b
7d50: 65 68 61 76 69 6f 72 20 6f 66 20 49 4e 54 45 47  ehavior of INTEG
7d60: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  ER PRIMARY KEY i
7d70: 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
7d80: 20 69 66 20 74 68 65 0a 70 72 69 6d 61 72 79 20   if the.primary 
7d90: 6b 65 79 20 69 73 20 61 20 73 69 6e 67 6c 65 20  key is a single 
7da0: 63 6f 6c 75 6d 6e 2e 20 20 4d 75 6c 74 69 2d 63  column.  Multi-c
7db0: 6f 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65  olumn primary ke
7dc0: 79 73 20 64 6f 20 6e 6f 74 20 62 65 63 6f 6d 65  ys do not become
7dd0: 0a 61 6c 69 61 73 65 73 20 66 6f 72 20 74 68 65  .aliases for the
7de0: 20 72 6f 77 69 64 2e 0a 54 68 65 20 41 55 54 4f   rowid..The AUTO
7df0: 49 4e 43 52 45 4d 45 4e 54 20 6b 65 79 77 6f 72  INCREMENT keywor
7e00: 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20  d only works on 
7e10: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73  a column that is
7e20: 20 61 6e 20 61 6c 69 61 73 0a 66 6f 72 20 74 68   an alias.for th
7e30: 65 20 72 6f 77 69 64 2e 3c 2f 70 3e 0a 0a 3c 70  e rowid.</p>..<p
7e40: 3e 4e 6f 74 65 20 74 68 61 74 20 73 65 61 72 63  >Note that searc
7e50: 68 65 73 20 61 67 61 69 6e 73 74 20 61 20 72 6f  hes against a ro
7e60: 77 69 64 20 61 72 65 20 67 65 6e 65 72 61 6c 6c  wid are generall
7e70: 79 20 61 62 6f 75 74 20 74 77 69 63 65 20 61 73  y about twice as
7e80: 0a 66 61 73 74 20 61 73 20 73 65 61 72 63 68 65  .fast as searche
7e90: 73 20 61 67 61 69 6e 73 74 20 61 6e 79 20 6f 74  s against any ot
7ea0: 68 65 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20  her PRIMARY KEY 
7eb0: 6f 72 20 69 6e 64 65 78 65 64 20 76 61 6c 75 65  or indexed value
7ec0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 47 6f  ..</p>..<p><b>Go
7ed0: 6f 66 79 20 62 65 68 61 76 69 6f 72 20 61 6c 65  ofy behavior ale
7ee0: 72 74 3a 3c 2f 62 3e 20 20 54 68 65 20 66 6f 6c  rt:</b>  The fol
7ef0: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 64 65 63  lowing three dec
7f00: 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63 61  larations all ca
7f10: 75 73 65 0a 74 68 65 20 63 6f 6c 75 6d 6e 20 22  use.the column "
7f20: 78 22 20 62 65 20 61 6e 20 61 6c 69 61 73 20 66  x" be an alias f
7f30: 6f 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70  or the rowid:</p
7f40: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e  >..<ul>.<li><tt>
7f50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78  CREATE TABLE t(x
7f60: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
7f70: 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b   KEY ASC, y, z);
7f80: 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  </tt>.<li><tt>CR
7f90: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
7fa0: 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
7fb0: 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43 29  IMARY KEY(x ASC)
7fc0: 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e  );</tt>.<li><tt>
7fd0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78  CREATE TABLE t(x
7fe0: 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20   INTEGER, y, z, 
7ff0: 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44 45  PRIMARY KEY(x DE
8000: 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e  SC));</tt>.</ul>
8010: 0a 0a 3c 70 3e 42 75 74 2c 20 69 6e 20 63 6f 6e  ..<p>But, in con
8020: 74 72 61 73 74 2c 20 74 68 65 20 66 6f 6c 6c 6f  trast, the follo
8030: 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e  wing declaration
8040: 20 64 6f 65 73 20 3c 75 3e 6e 6f 74 3c 2f 75 3e   does <u>not</u>
8050: 20 72 65 73 75 6c 74 20 69 6e 0a 22 78 22 20 62   result in."x" b
8060: 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f  eing an alias fo
8070: 72 20 74 68 65 20 72 6f 77 69 64 3a 3c 2f 70 3e  r the rowid:</p>
8080: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ..<ul>.<li><tt>C
8090: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
80a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
80b0: 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b  KEY DESC, y, z);
80c0: 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  </tt>.</ul>..<p>
80d0: 54 68 69 73 20 61 73 79 6d 6d 65 74 72 69 63 61  This asymmetrica
80e0: 6c 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  l behavior is un
80f0: 66 6f 72 74 75 6e 61 74 65 20 61 6e 64 20 69 73  fortunate and is
8100: 20 72 65 61 6c 6c 79 20 64 75 65 20 74 6f 20 61   really due to a
8110: 20 62 75 67 0a 69 6e 20 74 68 65 20 70 61 72 73   bug.in the pars
8120: 65 72 20 69 6e 20 65 61 72 6c 79 20 76 65 72 73  er in early vers
8130: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20  ions of SQLite. 
8140: 20 42 75 74 20 66 69 78 69 6e 67 20 74 68 65 20   But fixing the 
8150: 62 75 67 20 77 6f 75 6c 64 0a 72 65 73 75 6c 74  bug would.result
8160: 20 69 6e 20 76 65 72 79 20 73 65 72 69 6f 75 73   in very serious
8170: 20 62 61 63 6b 77 61 72 64 73 20 69 6e 63 6f 6d   backwards incom
8180: 70 61 74 69 62 69 6c 69 74 69 65 73 2e 20 20 54  patibilities.  T
8190: 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f  he SQLite develo
81a0: 70 65 72 73 0a 66 65 65 6c 20 74 68 61 74 20 67  pers.feel that g
81b0: 6f 6f 66 79 20 62 65 68 61 76 69 6f 72 20 69 6e  oofy behavior in
81c0: 20 61 6e 20 63 6f 72 6e 65 72 20 63 61 73 65 20   an corner case 
81d0: 69 73 20 66 61 72 20 62 65 74 74 65 72 20 74 68  is far better th
81e0: 61 6e 0a 61 20 63 6f 6d 70 61 74 69 62 69 6c 69  an.a compatibili
81f0: 74 79 20 62 72 65 61 6b 2c 20 73 6f 20 74 68 65  ty break, so the
8200: 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76 69   original behavi
8210: 6f 72 20 69 73 20 72 65 74 61 69 6e 65 64 2e 3c  or is retained.<
8220: 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
8230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8270: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
8280: 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47 47 45  n {CREATE TRIGGE
8290: 52 7d 20 63 72 65 61 74 65 74 72 69 67 67 65 72  R} createtrigger
82a0: 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47 47 45   {{CREATE TRIGGE
82b0: 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  R}}..BubbleDiagr
82c0: 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67 65  am create-trigge
82d0: 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  r-stmt 1.</tcl>.
82e0: 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20 54  .<p>The CREATE T
82f0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
8300: 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
8310: 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20  triggers to the 
8320: 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  .database schema
8330: 2e 20 54 72 69 67 67 65 72 73 20 61 72 65 20 64  . Triggers are d
8340: 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69 6f  atabase operatio
8350: 6e 73 20 0a 74 68 61 74 20 61 72 65 20 61 75 74  ns .that are aut
8360: 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f  omatically perfo
8370: 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65 63  rmed when a spec
8380: 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20 65  ified database e
8390: 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c 2f  vent.occurs.  </
83a0: 70 3e 0a 0a 3c 70 3e 41 20 74 72 69 67 67 65 72  p>..<p>A trigger
83b0: 20 6d 61 79 20 62 65 20 73 70 65 63 69 66 69 65   may be specifie
83c0: 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e 65 76  d to fire whenev
83d0: 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  er a [DELETE], [
83e0: 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55 50 44  INSERT],.or [UPD
83f0: 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74 69 63  ATE] of a.partic
8400: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 74 61  ular database ta
8410: 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72 20 77  ble occurs, or w
8420: 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50 44 41  henever an [UPDA
8430: 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a 6f 6e  TE] occurs on.on
8440: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 70 65   one or more spe
8450: 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 20 6f  cified columns o
8460: 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e 0a 0a  f a table.</p>..
8470: 3c 70 3e 41 74 20 74 68 69 73 20 74 69 6d 65 20  <p>At this time 
8480: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
8490: 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f  only FOR EACH RO
84a0: 57 20 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20  W triggers, not 
84b0: 46 4f 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45  FOR EACH.STATEME
84c0: 4e 54 20 74 72 69 67 67 65 72 73 2e 20 48 65 6e  NT triggers. Hen
84d0: 63 65 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70  ce explicitly sp
84e0: 65 63 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43  ecifying FOR EAC
84f0: 48 20 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61  H ROW is optiona
8500: 6c 2e 20 20 46 4f 52 0a 45 41 43 48 20 52 4f 57  l.  FOR.EACH ROW
8510: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
8520: 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
8530: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
8540: 65 20 74 72 69 67 67 65 72 0a 6d 61 79 20 62 65  e trigger.may be
8550: 20 65 78 65 63 75 74 65 64 20 28 64 65 70 65 6e   executed (depen
8560: 64 69 6e 67 20 6f 6e 20 74 68 65 20 57 48 45 4e  ding on the WHEN
8570: 20 63 6c 61 75 73 65 29 20 66 6f 72 20 65 61 63   clause) for eac
8580: 68 20 64 61 74 61 62 61 73 65 20 72 6f 77 20 62  h database row b
8590: 65 69 6e 67 0a 69 6e 73 65 72 74 65 64 2c 20 75  eing.inserted, u
85a0: 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65  pdated or delete
85b0: 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
85c0: 6e 74 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  nt causing the t
85d0: 72 69 67 67 65 72 20 74 6f 20 66 69 72 65 2e 3c  rigger to fire.<
85e0: 2f 70 3e 0a 0a 3c 70 3e 42 6f 74 68 20 74 68 65  /p>..<p>Both the
85f0: 20 57 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64   WHEN clause and
8600: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
8610: 69 6f 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20  ions may access 
8620: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65  elements of .the
8630: 20 72 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72   row being inser
8640: 74 65 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20  ted, deleted or 
8650: 75 70 64 61 74 65 64 20 75 73 69 6e 67 20 72 65  updated using re
8660: 66 65 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20  ferences of the 
8670: 66 6f 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f  form ."NEW.<i>co
8680: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61  lumn-name</i>" a
8690: 6e 64 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d  nd "OLD.<i>colum
86a0: 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65  n-name</i>", whe
86b0: 72 65 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  re.<i>column-nam
86c0: 65 3c 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d  e</i> is the nam
86d0: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72  e of a column fr
86e0: 6f 6d 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  om the table tha
86f0: 74 20 74 68 65 20 74 72 69 67 67 65 72 0a 69 73  t the trigger.is
8700: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
8710: 2e 20 4f 4c 44 20 61 6e 64 20 4e 45 57 20 72 65  . OLD and NEW re
8720: 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c  ferences may onl
8730: 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 72 69  y be used in tri
8740: 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20  ggers on.events 
8750: 66 6f 72 20 77 68 69 63 68 20 74 68 65 79 20 61  for which they a
8760: 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61 73 20  re relevant, as 
8770: 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
8780: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
8790: 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
87a0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
87b0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
87c0: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49  " width=120><i>I
87d0: 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  NSERT</i></td>.<
87e0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
87f0: 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73 20 61  NEW references a
8800: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
8810: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
8820: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
8830: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
8840: 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c  0><i>UPDATE</i><
8850: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
8860: 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c  "top">NEW and OL
8870: 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  D references are
8880: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
8890: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67  >.<tr>.<td valig
88a0: 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
88b0: 69 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e  ight" width=120>
88c0: 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74  <i>DELETE</i></t
88d0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  d>.<td valign="t
88e0: 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63  op">OLD referenc
88f0: 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64  es are valid</td
8900: 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e  >.</tr>.</table>
8910: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 57  .</p>..<p>If a W
8920: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
8930: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
8940: 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
8950: 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78  fied.are only ex
8960: 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20  ecuted for rows 
8970: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48  for which the WH
8980: 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75  EN.clause is tru
8990: 65 2e 20 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c  e. If no WHEN cl
89a0: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
89b0: 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  , the SQL statem
89c0: 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74 65  ents.are execute
89d0: 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e 3c  d for all rows.<
89e0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 42 45 46 4f  /p>..<p>The BEFO
89f0: 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79 77  RE or AFTER keyw
8a00: 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  ord determines w
8a10: 68 65 6e 20 74 68 65 20 74 72 69 67 67 65 72 20  hen the trigger 
8a20: 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20  actions.will be 
8a30: 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76  executed relativ
8a40: 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69  e to the inserti
8a50: 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  on, modification
8a60: 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74   or removal of t
8a70: 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f  he.associated ro
8a80: 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 5b 4f  w.</p>..<p>An [O
8a90: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
8aa0: 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  se may be specif
8ab0: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
8ac0: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49  n [UPDATE] or [I
8ad0: 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69  NSERT].action wi
8ae0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
8af0: 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 48 6f   the trigger..Ho
8b00: 77 65 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20  wever if an [ON 
8b10: 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65  CONFLICT] clause
8b20: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
8b30: 20 70 61 72 74 20 6f 66 20 0a 74 68 65 20 73 74   part of .the st
8b40: 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20  atement causing 
8b50: 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66  the trigger to f
8b60: 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c 69  ire, then confli
8b70: 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c 69  ct handling.poli
8b80: 63 79 20 6f 66 20 74 68 65 20 6f 75 74 65 72 20  cy of the outer 
8b90: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
8ba0: 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a  d instead.</p>..
8bb0: 3c 70 3e 54 72 69 67 67 65 72 73 20 61 72 65 20  <p>Triggers are 
8bc0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 5b 44  automatically [D
8bd0: 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20 64 72  ROP TRIGGER | dr
8be0: 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68 65 20  opped].when the 
8bf0: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 79 20  table that they 
8c00: 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20  are .associated 
8c10: 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74 61 62  with (the <i>tab
8c20: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61 62 6c  le-name</i> tabl
8c30: 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54 41 42  e) is .[DROP TAB
8c40: 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e 20 20  LE | dropped].  
8c50: 48 6f 77 65 76 65 72 20 69 66 20 74 68 65 20 74  However if the t
8c60: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
8c70: 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74 68  ns reference.oth
8c80: 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20 74  er tables, the t
8c90: 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64 72  rigger is not dr
8ca0: 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69 65  opped or modifie
8cb0: 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65 72  d if those other
8cc0: 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52 4f  .tables are [DRO
8cd0: 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65  P TABLE | droppe
8ce0: 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41 42  d] or [ALTER TAB
8cf0: 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c  LE | modified].<
8d00: 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72 73  /p>..<p>Triggers
8d10: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
8d20: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49  ng the [DROP TRI
8d30: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
8d40: 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78  </p>..<h3>Syntax
8d50: 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e   Restrictions On
8d60: 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54 45 2c   UPDATE, DELETE,
8d70: 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74 61 74   and INSERT Stat
8d80: 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a 20 20  ements Within.  
8d90: 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a    Triggers</h3>.
8da0: 0a 3c 70 3e 54 68 65 20 5b 55 50 44 41 54 45 5d  .<p>The [UPDATE]
8db0: 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20  , [DELETE], and 
8dc0: 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d 65  [INSERT].stateme
8dd0: 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
8de0: 65 72 73 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f  ers do not suppo
8df0: 72 74 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e 74  rt.the full synt
8e00: 61 78 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 2c  ax for [UPDATE],
8e10: 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20 5b   [DELETE], and [
8e20: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
8e30: 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ts.  The followi
8e40: 6e 67 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ng.restrictions 
8e50: 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  apply:</p>..<ul>
8e60: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 6e  .<li><p>.  The n
8e70: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
8e80: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
8e90: 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 2c 20  in an [UPDATE], 
8ea0: 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20 5b 49 4e  [DELETE], or [IN
8eb0: 53 45 52 54 5d 0a 20 20 73 74 61 74 65 6d 65 6e  SERT].  statemen
8ec0: 74 20 6d 75 73 74 20 62 65 20 61 6e 20 75 6e 71  t must be an unq
8ed0: 75 61 6c 69 66 69 65 64 20 74 61 62 6c 65 20 6e  ualified table n
8ee0: 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ame.  In other w
8ef0: 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73 74 0a 20  ords, one must. 
8f00: 20 75 73 65 20 6a 75 73 74 20 22 3c 69 3e 74 61   use just "<i>ta
8f10: 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20 6e 6f 74  blename</i>" not
8f20: 20 22 3c 69 3e 64 61 74 61 62 61 73 65 3c 2f 69   "<i>database</i
8f30: 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74 61 62 6c  ><b>.</b><i>tabl
8f40: 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20 77 68 65  ename</i>".  whe
8f50: 6e 20 73 70 65 63 69 66 79 69 6e 67 20 74 68 65  n specifying the
8f60: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 74 61 62   table.  The tab
8f70: 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65  le to be modifie
8f80: 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  d must exist in 
8f90: 74 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62  the.  same datab
8fa0: 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
8fb0: 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
8fc0: 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
8fd0: 20 61 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70   attached..  </p
8fe0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
8ff0: 20 20 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e    The "INSERT IN
9000: 54 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20  TO <i>table</i> 
9010: 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
9020: 66 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53  form of the [INS
9030: 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20  ERT] statement. 
9040: 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65   is not supporte
9050: 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  d..  </p></li>..
9060: 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 49 4e  <li><p>.  The IN
9070: 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
9080: 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
9090: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
90a0: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
90b0: 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73  and.  [DELETE] s
90c0: 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70  tatements..  </p
90d0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
90e0: 20 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 61    The ORDER BY a
90f0: 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
9100: 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61 6e 64   on [UPDATE] and
9110: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
9120: 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20 20 73  ents are not.  s
9130: 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44 45 52  upported.  ORDER
9140: 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 61 72   BY and LIMIT ar
9150: 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73  e not normally s
9160: 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50  upported for [UP
9170: 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45  DATE] or.  [DELE
9180: 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65  TE] in any conte
9190: 78 74 20 62 75 74 20 63 61 6e 20 62 65 20 65 6e  xt but can be en
91a0: 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65  abled for top-le
91b0: 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73 0a 20  vel statements. 
91c0: 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49   using the [SQLI
91d0: 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
91e0: 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63  _DELETE_LIMIT] c
91f0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9200: 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a 20 20  on.  However,.  
9210: 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  that compile-tim
9220: 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70  e option only ap
9230: 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76  plies to top-lev
9240: 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  el [UPDATE] and 
9250: 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61 74 65  [DELETE].  state
9260: 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41  ments, not [UPDA
9270: 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d  TE] and [DELETE]
9280: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
9290: 69 6e 20 74 72 69 67 67 65 72 73 2e 0a 20 20 3c  in triggers..  <
92a0: 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
92b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
92c0: 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67   instead_of_trig
92d0: 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d  ger {INSTEAD OF}
92e0: 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69   {INSTEAD OF tri
92f0: 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  gger}</tcl>.<h3>
9300: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
9310: 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 72 69 67  er</h3>..<p>Trig
9320: 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65 61  gers may be crea
9330: 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20  ted on [views], 
9340: 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e  as well as ordin
9350: 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73  ary tables, by.s
9360: 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41  pecifying INSTEA
9370: 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41  D OF in the CREA
9380: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
9390: 6d 65 6e 74 2e 20 0a 49 66 20 6f 6e 65 20 6f 72  ment. .If one or
93a0: 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c   more ON INSERT,
93b0: 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e   ON DELETE.or ON
93c0: 20 55 50 44 41 54 45 20 74 72 69 67 67 65 72 73   UPDATE triggers
93d0: 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20   are defined on 
93e0: 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20  a view, then it 
93f0: 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20  is not an.error 
9400: 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e  to execute an IN
9410: 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20  SERT, DELETE or 
9420: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
9430: 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72   on the view, .r
9440: 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
9450: 72 65 61 66 74 65 72 2c 0a 65 78 65 63 75 74 69  reafter,.executi
9460: 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  ng an INSERT, DE
9470: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
9480: 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73 65  n the view cause
9490: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
94a0: 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72  .triggers to fir
94b0: 65 2e 20 54 68 65 20 72 65 61 6c 20 74 61 62 6c  e. The real tabl
94c0: 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68  es underlying th
94d0: 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d  e view are not m
94e0: 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70 74 20  odified.(except 
94f0: 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69  possibly explici
9500: 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67 65  tly, by a trigge
9510: 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a  r program).</p>.
9520: 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68  .<p>Note that th
9530: 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
9540: 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74  es()] and [sqlit
9550: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
9560: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64  ()] interfaces.d
9570: 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54  o not count INST
9580: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
9590: 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a  irings, but the.
95a0: 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
95b0: 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e  ragma] does coun
95c0: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
95d0: 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e  gger firing.</p>
95e0: 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f  ..<h3>Examples</
95f0: 68 33 3e 0a 0a 3c 70 3e 41 73 73 75 6d 69 6e 67  h3>..<p>Assuming
9600: 20 74 68 61 74 20 63 75 73 74 6f 6d 65 72 20 72   that customer r
9610: 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65  ecords are store
9620: 64 20 69 6e 20 74 68 65 20 22 63 75 73 74 6f 6d  d in the "custom
9630: 65 72 73 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a  ers" table, and.
9640: 74 68 61 74 20 6f 72 64 65 72 20 72 65 63 6f 72  that order recor
9650: 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ds are stored in
9660: 20 74 68 65 20 22 6f 72 64 65 72 73 22 20 74 61   the "orders" ta
9670: 62 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ble, the followi
9680: 6e 67 20 74 72 69 67 67 65 72 0a 65 6e 73 75 72  ng trigger.ensur
9690: 65 73 20 74 68 61 74 20 61 6c 6c 20 61 73 73 6f  es that all asso
96a0: 63 69 61 74 65 64 20 6f 72 64 65 72 73 20 61 72  ciated orders ar
96b0: 65 20 72 65 64 69 72 65 63 74 65 64 20 77 68 65  e redirected whe
96c0: 6e 20 61 20 63 75 73 74 6f 6d 65 72 20 63 68 61  n a customer cha
96d0: 6e 67 65 73 0a 68 69 73 20 6f 72 20 68 65 72 20  nges.his or her 
96e0: 61 64 64 72 65 73 73 3a 3c 2f 70 3e 0a 0a 3c 74  address:</p>..<t
96f0: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 43 52 45  cl>Example {.CRE
9700: 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64 61  ATE TRIGGER upda
9710: 74 65 5f 63 75 73 74 6f 6d 65 72 5f 61 64 64 72  te_customer_addr
9720: 65 73 73 20 55 50 44 41 54 45 20 4f 46 20 61 64  ess UPDATE OF ad
9730: 64 72 65 73 73 20 4f 4e 20 63 75 73 74 6f 6d 65  dress ON custome
9740: 72 73 20 0a 20 20 42 45 47 49 4e 0a 20 20 20 20  rs .  BEGIN.    
9750: 55 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45  UPDATE orders SE
9760: 54 20 61 64 64 72 65 73 73 20 3d 20 6e 65 77 2e  T address = new.
9770: 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63 75  address WHERE cu
9780: 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 6f 6c  stomer_name = ol
9790: 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e 44 3b 0a 7d  d.name;.  END;.}
97a0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 69 74 68 20  </tcl>..<p>With 
97b0: 74 68 69 73 20 74 72 69 67 67 65 72 20 69 6e 73  this trigger ins
97c0: 74 61 6c 6c 65 64 2c 20 65 78 65 63 75 74 69 6e  talled, executin
97d0: 67 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a  g the statement:
97e0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
97f0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73 74  le {.UPDATE cust
9800: 6f 6d 65 72 73 20 53 45 54 20 61 64 64 72 65 73  omers SET addres
9810: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
9820: 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 4a   WHERE name = 'J
9830: 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74  ack Jones';.}</t
9840: 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73 65 73 20 74  cl>..<p>causes t
9850: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 6f 20  he following to 
9860: 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  be automatically
9870: 20 65 78 65 63 75 74 65 64 3a 3c 2f 70 3e 0a 0a   executed:</p>..
9880: 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55  <tcl>Example {.U
9890: 50 44 41 54 45 20 6f 72 64 65 72 73 20 53 45 54  PDATE orders SET
98a0: 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61   address = '1 Ma
98b0: 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 63 75  in St.' WHERE cu
98c0: 73 74 6f 6d 65 72 5f 6e 61 6d 65 20 3d 20 27 4a  stomer_name = 'J
98d0: 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a 7d 3c 2f 74  ack Jones';.}</t
98e0: 63 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  cl>..<tcl>hd_fra
98f0: 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66 6f  gment undef_befo
9900: 72 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42 45  re {undefined BE
9910: 46 4f 52 45 20 74 72 69 67 67 65 72 20 62 65 68  FORE trigger beh
9920: 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  avior}</tcl>.<h3
9930: 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68 65  >Cautions On The
9940: 20 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20 74   Use Of BEFORE t
9950: 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  riggers</h3>..<p
9960: 3e 49 66 20 61 20 42 45 46 4f 52 45 20 55 50 44  >If a BEFORE UPD
9970: 41 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44 45  ATE or BEFORE DE
9980: 4c 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f 64  LETE trigger mod
9990: 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65 73  ifies or deletes
99a0: 20 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73 20   a row.that was 
99b0: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70 64  to have been upd
99c0: 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2c  ated or deleted,
99d0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
99e0: 20 6f 66 20 74 68 65 20 73 75 62 73 65 71 75 65   of the subseque
99f0: 6e 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65 6c  nt.update or del
9a00: 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  ete operation is
9a10: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75 72   undefined.  Fur
9a20: 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20 42  thermore, if a B
9a30: 45 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d 6f  EFORE trigger.mo
9a40: 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65  difies or delete
9a50: 73 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69 74  s a row, then it
9a60: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77 68   is undefined wh
9a70: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46 54  ether or not AFT
9a80: 45 52 20 74 72 69 67 67 65 72 73 0a 74 68 61 74  ER triggers.that
9a90: 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68 65   would have othe
9aa0: 72 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68 6f  rwise run on tho
9ab0: 73 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e 20  se rows will in 
9ac0: 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a  fact run..</p>..
9ad0: 3c 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66 20  <p>The value of 
9ae0: 4e 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e 64  NEW.rowid is und
9af0: 65 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46 4f  efined in a BEFO
9b00: 52 45 20 49 4e 53 45 52 54 20 74 72 69 67 67 65  RE INSERT trigge
9b10: 72 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 72  r in which.the r
9b20: 6f 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70 6c  owid is not expl
9b30: 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61 6e  icitly set to an
9b40: 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a 3c   integer.</p>..<
9b50: 70 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68 65  p>Because of the
9b60: 20 62 65 68 61 76 69 6f 72 73 20 64 65 73 63 72   behaviors descr
9b70: 69 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f 67  ibed above, prog
9b80: 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63 6f  rammers are enco
9b90: 75 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65 72  uraged to.prefer
9ba0: 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73 20   AFTER triggers 
9bb0: 6f 76 65 72 20 42 45 46 4f 52 45 20 74 72 69 67  over BEFORE trig
9bc0: 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54  gers.</p>..<h3>T
9bd0: 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
9be0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 73  ion</h3>..<p>A s
9bf0: 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74  pecial SQL funct
9c00: 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20  ion RAISE() may 
9c10: 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  be used within a
9c20: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
9c30: 2c 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f  ,.with the follo
9c40: 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20  wing syntax</p> 
9c50: 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
9c60: 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74  gram raise-funct
9c70: 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 68  ion</tcl>..<p>Wh
9c80: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69  en one of the fi
9c90: 72 73 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20  rst three forms 
9ca0: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
9cb0: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
9cc0: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
9cd0: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
9ce0: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
9cf0: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
9d00: 28 65 69 74 68 65 72 20 41 42 4f 52 54 2c 20 46  (either ABORT, F
9d10: 41 49 4c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29  AIL or ROLLBACK)
9d20: 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
9d30: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
9d40: 73 2e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  s..An error code
9d50: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53   of [SQLITE_CONS
9d60: 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72  TRAINT] is retur
9d70: 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69  ned to the appli
9d80: 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69  cation,.along wi
9d90: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
9da0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c   error message.<
9db0: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 52 41 49  /p>..<p>When RAI
9dc0: 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61  SE(IGNORE) is ca
9dd0: 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e  lled, the remain
9de0: 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72 65  der of the curre
9df0: 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  nt trigger progr
9e00: 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e  am,.the statemen
9e10: 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  t that caused th
9e20: 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
9e30: 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64  m to execute and
9e40: 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a   any subsequent.
9e50: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
9e60: 20 74 68 61 74 20 77 6f 75 6c 64 20 6f 66 20 62   that would of b
9e70: 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72 65  een executed are
9e80: 20 61 62 61 6e 64 6f 6e 65 64 2e 20 4e 6f 20 64   abandoned. No d
9e90: 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20  atabase.changes 
9ea0: 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  are rolled back.
9eb0: 20 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65    If the stateme
9ec0: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
9ed0: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
9ee0: 61 6d 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73  am.to execute is
9ef0: 20 69 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20   itself part of 
9f00: 61 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  a trigger progra
9f10: 6d 2c 20 74 68 65 6e 20 74 68 61 74 20 74 72 69  m, then that tri
9f20: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73  gger program.res
9f30: 75 6d 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61  umes execution a
9f40: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
9f50: 6f 66 20 74 68 65 20 6e 65 78 74 20 73 74 65 70  of the next step
9f60: 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23  ..</p>...<tcl>.#
9f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
9fc0: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56  ection {CREATE V
9fd0: 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77  IEW} {createview
9fe0: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d  } {{CREATE VIEW}
9ff0: 20 76 69 65 77 20 76 69 65 77 73 7d 0a 0a 42 75   view views}..Bu
a000: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
a010: 74 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c  te-view-stmt 1.<
a020: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 43 52  /tcl>..<p>The CR
a030: 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e  EATE VIEW comman
a040: 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65  d assigns a name
a050: 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67   to a pre-packag
a060: 65 64 20 0a 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ed .<a href="lan
a070: 67 5f 73 65 6c 65 63 74 2e 68 74 6d 6c 22 3e 53  g_select.html">S
a080: 45 4c 45 43 54 3c 2f 61 3e 0a 73 74 61 74 65 6d  ELECT</a>.statem
a090: 65 6e 74 2e 20 20 4f 6e 63 65 20 74 68 65 20 76  ent.  Once the v
a0a0: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 2c 20  iew is created, 
a0b0: 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  it can be used i
a0c0: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
a0d0: 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53 45  e.of another [SE
a0e0: 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63 65 20 6f  LECT] in place o
a0f0: 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0a  f a table name..
a100: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
a110: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
a120: 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
a130: 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
a140: 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 56 49  "CREATE".and "VI
a150: 45 57 22 20 74 68 65 6e 20 74 68 65 20 76 69 65  EW" then the vie
a160: 77 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  w that is create
a170: 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69 62 6c  d is only visibl
a180: 65 20 74 6f 20 74 68 65 0a 70 72 6f 63 65 73 73  e to the.process
a190: 20 74 68 61 74 20 6f 70 65 6e 65 64 20 74 68 65   that opened the
a1a0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 69 73   database and is
a1b0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
a1c0: 65 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20  eleted when.the 
a1d0: 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  database is clos
a1e0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 49 66 20  ed.</p>..<p> If 
a1f0: 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e  a &lt;database-n
a200: 61 6d 65 26 67 74 3b 20 69 73 20 73 70 65 63 69  ame&gt; is speci
a210: 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 76  fied, then the v
a220: 69 65 77 20 69 73 20 63 72 65 61 74 65 64 20 69  iew is created i
a230: 6e 20 0a 74 68 65 20 6e 61 6d 65 64 20 64 61 74  n .the named dat
a240: 61 62 61 73 65 2e 20 49 74 20 69 73 20 61 6e 20  abase. It is an 
a250: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
a260: 20 62 6f 74 68 20 61 20 26 6c 74 3b 64 61 74 61   both a &lt;data
a270: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e  base-name&gt;.an
a280: 64 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f  d the TEMP keywo
a290: 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 26  rd, unless the &
a2a0: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
a2b0: 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e 20  &gt; is "temp". 
a2c0: 49 66 20 6e 6f 0a 64 61 74 61 62 61 73 65 20 6e  If no.database n
a2d0: 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
a2e0: 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6b  , and the TEMP k
a2f0: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
a300: 65 73 65 6e 74 2c 0a 74 68 65 20 74 61 62 6c 65  esent,.the table
a310: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
a320: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
a330: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61  .</p>..<p>You ca
a340: 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c 20 5b  nnot [DELETE], [
a350: 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55 50 44  INSERT], or [UPD
a360: 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20 56 69  ATE] a view.  Vi
a370: 65 77 73 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c  ews are read-onl
a380: 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e 20 20 48  y .in SQLite.  H
a390: 6f 77 65 76 65 72 2c 20 69 6e 20 6d 61 6e 79 20  owever, in many 
a3a0: 63 61 73 65 73 20 79 6f 75 20 63 61 6e 20 75 73  cases you can us
a3b0: 65 20 61 6e 0a 5b 49 4e 53 54 45 41 44 20 4f 46  e an.[INSTEAD OF
a3c0: 20 74 72 69 67 67 65 72 5d 20 6f 6e 20 74 68 65   trigger] on the
a3d0: 20 76 69 65 77 20 74 6f 20 61 63 63 6f 6d 70 6c   view to accompl
a3e0: 69 73 68 20 0a 74 68 65 20 73 61 6d 65 20 74 68  ish .the same th
a3f0: 69 6e 67 2e 20 20 56 69 65 77 73 20 61 72 65 20  ing.  Views are 
a400: 72 65 6d 6f 76 65 64 20 0a 77 69 74 68 20 74 68  removed .with th
a410: 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 20 63 6f  e [DROP VIEW] co
a420: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
a430: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
a440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a480: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
a490: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
a4a0: 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b 43  {createvtab} {{C
a4b0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
a4c0: 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  BLE}}..BubbleDia
a4d0: 67 72 61 6d 20 63 72 65 61 74 65 2d 76 69 72 74  gram create-virt
a4e0: 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31  ual-table-stmt 1
a4f0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b 76  .</tcl>..<p>A [v
a500: 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 69 73  irtual table] is
a510: 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20 74 6f   an interface to
a520: 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73 74 6f   an external sto
a530: 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74 61 74  rage or computat
a540: 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74 20  ion.engine that 
a550: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20  appears to be a 
a560: 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73 20 6e  table but does n
a570: 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 6f 72  ot actually stor
a580: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e  e information.in
a590: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
a5a0: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 67  le.</p>..<p>In g
a5b0: 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e 20  eneral, you can 
a5c0: 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69 74 68  do anything with
a5d0: 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c   a [virtual tabl
a5e0: 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65 20 64  e] that can be d
a5f0: 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72 64 69  one.with an ordi
a600: 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78 63 65  nary table, exce
a610: 70 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e 6e  pt that you cann
a620: 6f 74 20 63 72 65 61 74 65 20 69 6e 64 69 63 65  ot create indice
a630: 73 20 6f 72 20 74 72 69 67 67 65 72 73 20 6f 6e  s or triggers on
a640: 20 61 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a.virtual table
a650: 2e 20 20 53 6f 6d 65 20 76 69 72 74 75 61 6c 20  .  Some virtual 
a660: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
a670: 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d 70 6f  tions might impo
a680: 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 72 65  se additional.re
a690: 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46 6f 72  strictions.  For
a6a0: 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79 20 76   example, many v
a6b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 61 72  irtual tables ar
a6c0: 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e  e read-only.</p>
a6d0: 0a 0a 3c 70 3e 54 68 65 20 26 6c 74 3b 6d 6f 64  ..<p>The &lt;mod
a6e0: 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20  ule-name&gt; is 
a6f0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 6f  the name of an o
a700: 62 6a 65 63 74 20 74 68 61 74 20 69 6d 70 6c 65  bject that imple
a710: 6d 65 6e 74 73 0a 74 68 65 20 76 69 72 74 75 61  ments.the virtua
a720: 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 26 6c  l table.  The &l
a730: 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74  t;module-name&gt
a740: 3b 20 6d 75 73 74 20 62 65 20 72 65 67 69 73 74  ; must be regist
a750: 65 72 65 64 20 77 69 74 68 0a 74 68 65 20 53 51  ered with.the SQ
a760: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 63 6f  Lite database co
a770: 6e 6e 65 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b  nnection using.[
a780: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
a790: 6f 64 75 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c  odule()] or [sql
a7a0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
a7b0: 6c 65 5f 76 32 28 29 5d 0a 70 72 69 6f 72 20 74  le_v2()].prior t
a7c0: 6f 20 69 73 73 75 69 6e 67 20 74 68 65 20 43 52  o issuing the CR
a7d0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
a7e0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68  LE statement..Th
a7f0: 65 20 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a  e module takes z
a800: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d  ero or more comm
a810: 61 2d 73 65 70 61 72 61 74 65 64 20 61 72 67 75  a-separated argu
a820: 6d 65 6e 74 73 2e 0a 54 68 65 20 61 72 67 75 6d  ments..The argum
a830: 65 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74  ents can be just
a840: 20 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20   about any text 
a850: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61  as long as it ha
a860: 73 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e  s balanced.paren
a870: 74 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67  theses.  The arg
a880: 75 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20  ument syntax is 
a890: 73 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e  sufficiently gen
a8a0: 65 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72  eral that the.ar
a8b0: 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d  guments can be m
a8c0: 61 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73  ade to appear as
a8d0: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
a8e0: 6f 6e 73 20 69 6e 20 61 20 74 72 61 64 69 74 69  ons in a traditi
a8f0: 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41 42  onal.[CREATE TAB
a900: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
a910: 0a 53 51 4c 69 74 65 20 70 61 73 73 65 73 20 74  .SQLite passes t
a920: 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65  he module argume
a930: 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74 6f 20  nts directly.to 
a940: 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20 61 6e  the [xCreate] an
a950: 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74  d [xConnect] met
a960: 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f 64 75  hods of the modu
a970: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
a980: 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  n.without any in
a990: 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20 20 49  terpretation.  I
a9a0: 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e 73  t is the respons
a9b0: 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d  ibility.of the m
a9c0: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
a9d0: 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20 61 6e  tion to parse an
a9e0: 64 20 69 6e 74 65 72 70 72 65 74 20 69 74 73 20  d interpret its 
a9f0: 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f  own arguments.</
aa00: 70 3e 0a 0a 3c 70 3e 41 20 76 69 72 74 75 61 6c  p>..<p>A virtual
aa10: 20 74 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f   table is destro
aa20: 79 65 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72  yed using the or
aa30: 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42  dinary.[DROP TAB
aa40: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  LE] statement.  
aa50: 54 68 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50  There is no.DROP
aa60: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
aa70: 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  tatement.</p>..<
aa80: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
aa90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aaa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aad0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45  ###.Section DELE
aae0: 54 45 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54  TE delete {DELET
aaf0: 45 20 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62  E DELETEs}..Bubb
ab00: 6c 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65  leDiagram delete
ab10: 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
ab20: 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d  agram qualified-
ab30: 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c  table-name.</tcl
ab40: 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45  >..<p>The DELETE
ab50: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
ab60: 20 74 6f 20 72 65 6d 6f 76 65 20 72 65 63 6f 72   to remove recor
ab70: 64 73 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 2e  ds from a table.
ab80: 0a 54 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e  .The command con
ab90: 73 69 73 74 73 20 6f 66 20 74 68 65 20 22 44 45  sists of the "DE
aba0: 4c 45 54 45 20 46 52 4f 4d 22 20 6b 65 79 77 6f  LETE FROM" keywo
abb0: 72 64 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a  rds followed by.
abc0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
abd0: 74 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68  table from which
abe0: 20 72 65 63 6f 72 64 73 20 61 72 65 20 74 6f 20   records are to 
abf0: 62 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 2f 70 3e  be removed..</p>
ac00: 0a 0a 3c 70 3e 57 69 74 68 6f 75 74 20 61 20 57  ..<p>Without a W
ac10: 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c  HERE clause, all
ac20: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
ac30: 6c 65 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a  le are removed..
ac40: 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
ac50: 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
ac60: 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
ac70: 6f 77 73 20 74 68 61 74 20 6d 61 74 63 68 0a 74  ows that match.t
ac80: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 72  he expression ar
ac90: 65 20 72 65 6d 6f 76 65 64 2e 3c 2f 70 3e 0a 0a  e removed.</p>..
aca0: 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73  <h3>Restrictions
acb0: 20 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65   on DELETE State
acc0: 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45  ments Within CRE
acd0: 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e  ATE TRIGGER</h3>
ace0: 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 61  ..<p>There are a
acf0: 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78  dditional syntax
ad00: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e   restrictions on
ad10: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
ad20: 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69  ts that.occur wi
ad30: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
ad40: 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
ad50: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
ad60: 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  The <i>table-nam
ad70: 65 3c 2f 69 3e 0a 6d 75 73 74 20 62 65 20 75 6e  e</i>.must be un
ad80: 71 75 61 6c 69 66 69 65 64 2e 20 0a 49 6e 20 6f  qualified. .In o
ad90: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
ada0: 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
adb0: 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65  </i><b>.</b> pre
adc0: 66 69 78 0a 6f 6e 20 74 68 65 20 74 61 62 6c 65  fix.on the table
add0: 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c   name is not all
ade0: 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
adf0: 67 65 72 73 2e 20 0a 54 68 65 20 74 61 62 6c 65  gers. .The table
ae00: 20 66 72 6f 6d 20 77 68 69 63 68 20 74 6f 20 64   from which to d
ae10: 65 6c 65 74 65 20 6d 75 73 74 20 62 65 20 69 6e  elete must be in
ae20: 20 74 68 65 20 73 61 6d 65 0a 64 61 74 61 62 61   the same.databa
ae30: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
ae40: 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
ae50: 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
ae60: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
ae70: 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
ae80: 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
ae90: 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64   are not allowed
aea0: 20 6f 6e 20 44 45 4c 45 54 45 0a 73 74 61 74 65   on DELETE.state
aeb0: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
aec0: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ggers.</p>..<p>T
aed0: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
aee0: 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
aef0: 29 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  ) is unsupported
af00: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
af10: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
af20: 72 61 67 6d 65 6e 74 20 74 72 75 63 61 74 65 6f  ragment trucateo
af30: 70 74 20 7b 74 72 75 6e 63 61 74 65 20 6f 70 74  pt {truncate opt
af40: 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e  imization}</tcl>
af50: 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e 63 61 74  .<h3>The Truncat
af60: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f  e Optimization</
af70: 68 33 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65  h3>..<p>When the
af80: 20 57 48 45 52 45 20 69 73 20 6f 6d 69 74 74 65   WHERE is omitte
af90: 64 20 66 72 6f 6d 20 61 20 44 45 4c 45 54 45 20  d from a DELETE 
afa0: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 74 68  statement and th
afb0: 65 20 74 61 62 6c 65 0a 62 65 69 6e 67 20 64 65  e table.being de
afc0: 6c 65 74 65 64 20 68 61 73 20 6e 6f 20 74 72 69  leted has no tri
afd0: 67 67 65 72 73 2c 0a 53 51 4c 69 74 65 20 75 73  ggers,.SQLite us
afe0: 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  es an optimizati
aff0: 6f 6e 20 74 6f 20 65 72 61 73 65 20 74 68 65 20  on to erase the 
b000: 65 6e 74 69 72 65 20 74 61 62 6c 65 20 63 6f 6e  entire table con
b010: 74 65 6e 74 0a 77 69 74 68 6f 75 74 20 68 61 76  tent.without hav
b020: 69 6e 67 20 74 6f 20 76 69 73 69 74 20 65 61 63  ing to visit eac
b030: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
b040: 6c 65 20 69 6e 64 69 76 69 64 75 61 6c 2e 0a 54  le individual..T
b050: 68 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f  his "truncate" o
b060: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65  ptimization make
b070: 73 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e  s the delete run
b080: 20 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72   much faster..Pr
b090: 69 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76  ior to SQLite [v
b0a0: 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74  ersion 3.6.5], t
b0b0: 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
b0c0: 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65  mization.also me
b0d0: 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71  ant that the [sq
b0e0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
b0f0: 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f   and.[sqlite3_to
b100: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
b110: 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68  nterfaces.and th
b120: 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e [count_changes
b130: 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f   pragma].will no
b140: 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  t actually retur
b150: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
b160: 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a  deleted rows.  .
b170: 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73  That problem has
b180: 20 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f   been fixed as o
b190: 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35  f [version 3.6.5
b1a0: 5d 2e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63  ]...<p>The trunc
b1b0: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
b1c0: 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e   can be permanen
b1d0: 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72  tly disabled for
b1e0: 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20   all queries.by 
b1f0: 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69  recompiling.SQLi
b200: 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  te with the [SQL
b210: 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54  ITE_OMIT_TRUNCAT
b220: 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20  E_OPTIMIZATION] 
b230: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69  compile-time swi
b240: 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  tch.</p>..<p>The
b250: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
b260: 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20  zation can also 
b270: 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72  be disabled at r
b280: 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65  untime using.the
b290: 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75   [sqlite3_set_au
b2a0: 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65  thorizer()] inte
b2b0: 72 66 61 63 65 2e 20 20 49 66 20 61 6e 20 61 75  rface.  If an au
b2c0: 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61 63  thorizer callbac
b2d0: 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49 54  k.returns [SQLIT
b2e0: 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61 6e  E_IGNORE] for an
b2f0: 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 5d   [SQLITE_DELETE]
b300: 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74 68   action code, th
b310: 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f 70  en.the DELETE op
b320: 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72 6f  eration will pro
b330: 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72 75  ceed but the tru
b340: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
b350: 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61 73  on will.be bypas
b360: 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69 6c  sed and rows wil
b370: 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e 65  l be deleted one
b380: 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 68   by one.</p>..<h
b390: 33 3e 55 73 65 20 4f 66 20 4c 49 4d 49 54 3c 2f  3>Use Of LIMIT</
b3a0: 68 33 3e 0a 0a 3c 70 3e 49 66 20 53 51 4c 69 74  h3>..<p>If SQLit
b3b0: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
b3c0: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45  th the [SQLITE_E
b3d0: 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
b3e0: 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69  ETE_LIMIT].compi
b3f0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
b400: 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20  then the syntax 
b410: 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
b420: 61 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e  atement is.exten
b430: 64 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74  ded by the addit
b440: 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20  ion of optional 
b450: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
b460: 49 54 20 63 6c 61 75 73 65 73 3a 3c 2f 70 3e 0a  IT clauses:</p>.
b470: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
b480: 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74 2d  ram delete-stmt-
b490: 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
b4a0: 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4c  p>The optional L
b4b0: 49 4d 49 54 20 63 6c 61 75 73 65 20 63 61 6e 20  IMIT clause can 
b4c0: 62 65 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  be used to limit
b4d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72   the number of.r
b4e0: 6f 77 73 20 64 65 6c 65 74 65 64 2c 20 61 6e 64  ows deleted, and
b4f0: 20 74 68 65 72 65 62 79 20 6c 69 6d 69 74 20 74   thereby limit t
b500: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 74  he size of the t
b510: 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20  ransaction..The 
b520: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
b530: 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
b540: 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
b550: 72 6f 77 73 20 66 61 6c 6c 0a 77 69 74 68 69 6e  rows fall.within
b560: 20 74 68 65 20 4c 49 4d 49 54 2e 20 20 54 68 65   the LIMIT.  The
b570: 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
b580: 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65 64  rows are deleted
b590: 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
b5a0: 64 20 69 73 20 6e 6f 74 20 64 65 74 65 72 6d 69  d is not determi
b5b0: 6e 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ned by the ORDER
b5c0: 20 42 59 20 63 6c 61 75 73 65 2e 3c 2f 70 3e 0a   BY clause.</p>.
b5d0: 0a 3c 70 3e 54 68 65 20 70 72 65 73 65 6e 63 65  .<p>The presence
b5e0: 20 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75   of a LIMIT clau
b5f0: 73 65 20 64 65 66 65 61 74 73 20 74 68 65 20 74  se defeats the t
b600: 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
b610: 74 69 6f 6e 0a 63 61 75 73 69 6e 67 20 61 6c 6c  tion.causing all
b620: 20 72 6f 77 73 20 62 65 69 6e 67 20 64 65 6c 65   rows being dele
b630: 74 65 64 20 74 6f 20 62 65 20 76 69 73 69 74 65  ted to be visite
b640: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
b650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b690: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
b6a0: 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41  ction {DETACH DA
b6b0: 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20 44  TABASE} detach D
b6c0: 45 54 41 43 48 0a 0a 42 75 62 62 6c 65 44 69 61  ETACH..BubbleDia
b6d0: 67 72 61 6d 20 64 65 74 61 63 68 2d 73 74 6d 74  gram detach-stmt
b6e0: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
b6f0: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64 65 74  is statement det
b700: 61 63 68 65 73 20 61 6e 20 61 64 64 69 74 69 6f  aches an additio
b710: 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e  nal database con
b720: 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73  nection previous
b730: 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75 73 69  ly .attached usi
b740: 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20  ng the [ATTACH] 
b750: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 49 74 20  statement.  .It 
b760: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68  is possible to h
b770: 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 61 74  ave the same dat
b780: 61 62 61 73 65 20 66 69 6c 65 20 61 74 74 61 63  abase file attac
b790: 68 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  hed multiple tim
b7a0: 65 73 20 75 73 69 6e 67 20 0a 64 69 66 66 65 72  es using .differ
b7b0: 65 6e 74 20 6e 61 6d 65 73 2c 20 61 6e 64 20 64  ent names, and d
b7c0: 65 74 61 63 68 69 6e 67 20 6f 6e 65 20 63 6f 6e  etaching one con
b7d0: 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 66 69 6c  nection to a fil
b7e0: 65 20 77 69 6c 6c 20 6c 65 61 76 65 20 74 68 65  e will leave the
b7f0: 20 0a 6f 74 68 65 72 73 20 69 6e 74 61 63 74 2e   .others intact.
b800: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 74  </p>..<p>This st
b810: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 66 61 69  atement will fai
b820: 6c 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69  l if SQLite is i
b830: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
b840: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f  a transaction.</
b850: 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  p>...<tcl>.#####
b860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b8a0: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
b8b0: 6e 20 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64  n {DROP INDEX} d
b8c0: 72 6f 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20  ropindex {{DROP 
b8d0: 49 4e 44 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44  INDEX}}..BubbleD
b8e0: 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65  iagram drop-inde
b8f0: 78 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  x-stmt 1.</tcl>.
b900: 0a 3c 70 3e 54 68 65 20 44 52 4f 50 20 49 4e 44  .<p>The DROP IND
b910: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  EX statement rem
b920: 6f 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64  oves an index ad
b930: 64 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52  ded.with the [CR
b940: 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74  EATE INDEX] stat
b950: 65 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65  ement.  The inde
b960: 78 20 6e 61 6d 65 64 20 69 73 20 63 6f 6d 70 6c  x named is compl
b970: 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
b980: 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54 68  om.the disk.  Th
b990: 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72 65  e only way to re
b9a0: 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78 20  cover the index 
b9b0: 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74 68  is to reenter th
b9c0: 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b 43  e.appropriate [C
b9d0: 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f 6d  REATE INDEX] com
b9e0: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mand.</p>..<p>Th
b9f0: 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61  e DROP INDEX sta
ba00: 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
ba10: 72 65 64 75 63 65 20 74 68 65 20 73 69 7a 65 20  reduce the size 
ba20: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
ba30: 0a 66 69 6c 65 20 69 6e 20 74 68 65 20 64 65 66  .file in the def
ba40: 61 75 6c 74 20 6d 6f 64 65 2e 0a 45 6d 70 74 79  ault mode..Empty
ba50: 20 73 70 61 63 65 20 69 6e 20 74 68 65 20 64 61   space in the da
ba60: 74 61 62 61 73 65 20 69 73 20 72 65 74 61 69 6e  tabase is retain
ba70: 65 64 20 66 6f 72 20 6c 61 74 65 72 20 5b 49 4e  ed for later [IN
ba80: 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  SERT] statements
ba90: 2e 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20 66 72  .  To .remove fr
baa0: 65 65 20 73 70 61 63 65 20 69 6e 20 74 68 65 20  ee space in the 
bab0: 64 61 74 61 62 61 73 65 2c 20 75 73 65 20 74 68  database, use th
bac0: 65 20 5b 56 41 43 55 55 4d 5d 0a 63 6f 6d 6d 61  e [VACUUM].comma
bad0: 6e 64 2e 20 20 49 66 20 5b 61 75 74 6f 5f 76 61  nd.  If [auto_va
bae0: 63 75 75 6d 5d 20 6d 6f 64 65 20 69 73 20 65 6e  cuum] mode is en
baf0: 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61  abled for a data
bb00: 62 61 73 65 20 74 68 65 6e 20 73 70 61 63 65 0a  base then space.
bb10: 77 69 6c 6c 20 62 65 20 66 72 65 65 64 20 61 75  will be freed au
bb20: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 44  tomatically by D
bb30: 52 4f 50 20 49 4e 44 45 58 2e 3c 2f 70 3e 0a 0a  ROP INDEX.</p>..
bb40: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
bb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb90: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
bba0: 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
bbb0: 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c  able {{DROP TABL
bbc0: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
bbd0: 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74  am drop-table-st
bbe0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
bbf0: 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73  The DROP TABLE s
bc00: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
bc10: 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20 77   a table added w
bc20: 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45 20  ith the.[CREATE 
bc30: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
bc40: 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65 63  .  The name spec
bc50: 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61 62  ified is the.tab
bc60: 6c 65 20 6e 61 6d 65 2e 20 20 49 74 20 69 73 20  le name.  It is 
bc70: 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76  completely remov
bc80: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
bc90: 62 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20  base schema and 
bca0: 74 68 65 20 0a 64 69 73 6b 20 66 69 6c 65 2e 20  the .disk file. 
bcb0: 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20 6e   The table can n
bcc0: 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64 2e  ot be recovered.
bcd0: 20 20 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e    All indices an
bce0: 64 20 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63  d triggers.assoc
bcf0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
bd00: 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65  able are also de
bd10: 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  leted.</p>..<p>T
bd20: 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74  he DROP TABLE st
bd30: 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
bd40: 20 72 65 64 75 63 65 20 74 68 65 20 73 69 7a 65   reduce the size
bd50: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
bd60: 20 0a 66 69 6c 65 20 69 6e 20 74 68 65 20 64 65   .file in the de
bd70: 66 61 75 6c 74 20 6d 6f 64 65 2e 20 20 45 6d 70  fault mode.  Emp
bd80: 74 79 20 73 70 61 63 65 20 69 6e 20 74 68 65 20  ty space in the 
bd90: 64 61 74 61 62 61 73 65 20 69 73 20 72 65 74 61  database is reta
bda0: 69 6e 65 64 20 66 6f 72 0a 6c 61 74 65 72 20 5b  ined for.later [
bdb0: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
bdc0: 74 73 2e 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20  ts.  To .remove 
bdd0: 66 72 65 65 20 73 70 61 63 65 20 69 6e 20 74 68  free space in th
bde0: 65 20 64 61 74 61 62 61 73 65 2c 20 0a 75 73 65  e database, .use
bdf0: 20 74 68 65 20 5b 56 41 43 55 55 4d 5d 20 73 74   the [VACUUM] st
be00: 61 74 65 6d 65 6e 74 2e 0a 49 66 20 5b 61 75 74  atement..If [aut
be10: 6f 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 20 69  o_vacuum] mode i
be20: 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
be30: 64 61 74 61 62 61 73 65 20 74 68 65 6e 20 73 70  database then sp
be40: 61 63 65 0a 77 69 6c 6c 20 62 65 20 66 72 65 65  ace.will be free
be50: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
be60: 62 79 20 44 52 4f 50 20 54 41 42 4c 45 2e 3c 2f  by DROP TABLE.</
be70: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f  p>..<p>The optio
be80: 6e 61 6c 20 49 46 20 45 58 49 53 54 53 20 63 6c  nal IF EXISTS cl
be90: 61 75 73 65 20 73 75 70 70 72 65 73 73 65 73 20  ause suppresses 
bea0: 74 68 65 20 65 72 72 6f 72 20 74 68 61 74 20 77  the error that w
beb0: 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65  ould normally.re
bec0: 73 75 6c 74 20 69 66 20 74 68 65 20 74 61 62 6c  sult if the tabl
bed0: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
bee0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
bef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf30: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
bf40: 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45  ion {DROP TRIGGE
bf50: 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b  R} droptrigger {
bf60: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a  {DROP TRIGGER}}.
bf70: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
bf80: 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74  rop-trigger-stmt
bf90: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
bfa0: 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73  e DROP TRIGGER s
bfb0: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
bfc0: 20 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74   a trigger creat
bfd0: 65 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41  ed by the .[CREA
bfe0: 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
bff0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 74 72 69 67  ement.  The trig
c000: 67 65 72 20 69 73 20 0a 64 65 6c 65 74 65 64 20  ger is .deleted 
c010: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
c020: 65 20 73 63 68 65 6d 61 2e 20 4e 6f 74 65 20 74  e schema. Note t
c030: 68 61 74 20 74 72 69 67 67 65 72 73 20 61 72 65  hat triggers are
c040: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 0a   automatically .
c050: 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68 65  dropped when the
c060: 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62 6c   associated tabl
c070: 65 20 69 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70  e is dropped.</p
c080: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
c090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0d0: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
c0e0: 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70  {DROP VIEW} drop
c0f0: 76 69 65 77 20 7b 7b 44 52 4f 50 20 56 49 45 57  view {{DROP VIEW
c100: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
c110: 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74  m drop-view-stmt
c120: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68   1.</tcl>..<p>Th
c130: 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
c140: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
c150: 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20  view created by 
c160: 74 68 65 0a 5b 43 52 45 41 54 45 20 56 49 45 57  the.[CREATE VIEW
c170: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
c180: 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
c190: 20 69 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61   is the .view na
c1a0: 6d 65 2e 20 20 49 74 20 69 73 20 72 65 6d 6f 76  me.  It is remov
c1b0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
c1c0: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74  base schema, but
c1d0: 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20   no actual data 
c1e0: 0a 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69  .in the underlyi
c1f0: 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69  ng base tables i
c200: 73 20 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a  s modified.</p>.
c210: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
c220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c260: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58  #####.Section EX
c270: 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58  PLAIN explain EX
c280: 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69 61  PLAIN..BubbleDia
c290: 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c 2f  gram sql-stmt.</
c2a0: 74 63 6c 3e 0a 0a 3c 70 3e 41 6e 20 53 51 4c 20  tcl>..<p>An SQL 
c2b0: 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20 62 65  statement can be
c2c0: 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68 65   preceded by the
c2d0: 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c 41 49   keyword "EXPLAI
c2e0: 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70 68 72  N" or.by the phr
c2f0: 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51 55 45  ase "EXPLAIN QUE
c300: 52 59 20 50 4c 41 4e 22 2e 20 20 45 69 74 68 65  RY PLAN".  Eithe
c310: 72 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20 63  r modification c
c320: 61 75 73 65 73 20 74 68 65 0a 53 51 4c 20 73 74  auses the.SQL st
c330: 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 68 61 76  atement to behav
c340: 65 20 61 73 20 61 20 71 75 65 72 79 20 61 6e 64  e as a query and
c350: 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 66 6f 72   to return infor
c360: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a 68 6f 77  mation about.how
c370: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
c380: 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 70  nt would have op
c390: 65 72 61 74 65 64 20 69 66 20 74 68 65 20 45 58  erated if the EX
c3a0: 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6f 72  PLAIN keyword or
c3b0: 0a 70 68 72 61 73 65 20 68 61 64 20 62 65 65 6e  .phrase had been
c3c0: 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   omitted.</p>..<
c3d0: 70 3e 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41  p>When the EXPLA
c3e0: 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70 65 61  IN keyword appea
c3f0: 72 73 20 62 79 20 69 74 73 65 6c 66 20 69 74 20  rs by itself it 
c400: 63 61 75 73 65 73 20 74 68 65 20 73 74 61 74 65  causes the state
c410: 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65 20 61  ment.to behave a
c420: 73 20 61 20 71 75 65 72 79 20 74 68 61 74 20 72  s a query that r
c430: 65 74 75 72 6e 73 20 74 68 65 20 73 65 71 75 65  eturns the seque
c440: 6e 63 65 20 6f 66 20 0a 3c 61 20 68 72 65 66 3d  nce of .<a href=
c450: 22 6f 70 63 6f 64 65 2e 68 74 6d 6c 22 3e 76 69  "opcode.html">vi
c460: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e  rtual machine in
c470: 73 74 72 75 63 74 69 6f 6e 73 3c 2f 61 3e 20 69  structions</a> i
c480: 74 20 77 6f 75 6c 64 20 68 61 76 65 0a 75 73 65  t would have.use
c490: 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
c4a0: 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20 74 68 65   command had the
c4b0: 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
c4c0: 20 6e 6f 74 20 62 65 65 6e 20 70 72 65 73 65 6e   not been presen
c4d0: 74 2e 0a 57 68 65 6e 20 74 68 65 20 45 58 50 4c  t..When the EXPL
c4e0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 70  AIN QUERY PLAN p
c4f0: 68 72 61 73 65 20 61 70 70 65 61 72 73 2c 20 74  hrase appears, t
c500: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 72 65 74  he statement ret
c510: 75 72 6e 73 0a 68 69 67 68 2d 6c 65 76 65 6c 20  urns.high-level 
c520: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
c530: 74 20 77 68 61 74 20 69 6e 64 69 63 65 73 20 77  t what indices w
c540: 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75  ould have been u
c550: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sed.</p>..<p>The
c560: 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50   output from EXP
c570: 4c 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e  LAIN and EXPLAIN
c580: 20 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69   QUERY PLAN is i
c590: 6e 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65  ntended for.inte
c5a0: 72 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73  ractive analysis
c5b0: 20 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f   and troubleshoo
c5c0: 74 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20  ting only.  The 
c5d0: 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a  details of the .
c5e0: 6f 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72  output format ar
c5f0: 65 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61  e subject to cha
c600: 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c  nge from one rel
c610: 65 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74  ease of SQLite t
c620: 6f 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c  o the next..Appl
c630: 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20  ications should 
c640: 6e 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20  not use EXPLAIN 
c650: 6f 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  or EXPLAIN QUERY
c660: 20 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69   PLAN since.thei
c670: 72 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  r behavior is un
c680: 64 6f 63 75 6d 65 6e 74 65 64 2c 20 75 6e 73 70  documented, unsp
c690: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 76 61 72  ecified, and var
c6a0: 69 61 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  iable.</p>..<tcl
c6b0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
c6c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c6d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c6e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c6f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c700: 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73 73  .Section express
c710: 69 6f 6e 20 65 78 70 72 20 7b 65 78 70 72 65 73  ion expr {expres
c720: 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69 6f 6e  sion {expression
c730: 20 73 79 6e 74 61 78 7d 7d 0a 0a 42 75 62 62 6c   syntax}}..Bubbl
c740: 65 44 69 61 67 72 61 6d 20 65 78 70 72 20 31 0a  eDiagram expr 1.
c750: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6c 69  BubbleDiagram li
c760: 74 65 72 61 6c 2d 76 61 6c 75 65 0a 42 75 62 62  teral-value.Bubb
c770: 6c 65 44 69 61 67 72 61 6d 20 73 69 67 6e 65 64  leDiagram signed
c780: 2d 6e 75 6d 62 65 72 0a 42 75 62 62 6c 65 44 69  -number.BubbleDi
c790: 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63  agram raise-func
c7a0: 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  tion.</tcl>..<p>
c7b0: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 69 73 20  This section is 
c7c0: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
c7d0: 68 65 20 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74  he others.  Most
c7e0: 20 6f 74 68 65 72 20 73 65 63 74 69 6f 6e 73 20   other sections 
c7f0: 6f 66 0a 74 68 69 73 20 64 6f 63 75 6d 65 6e 74  of.this document
c800: 20 74 61 6c 6b 73 20 61 62 6f 75 74 20 61 20 70   talks about a p
c810: 61 72 74 69 63 75 6c 61 72 20 53 51 4c 20 63 6f  articular SQL co
c820: 6d 6d 61 6e 64 2e 20 20 54 68 69 73 20 73 65 63  mmand.  This sec
c830: 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61  tion does.not ta
c840: 6c 6b 20 61 62 6f 75 74 20 61 20 73 74 61 6e 64  lk about a stand
c850: 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75  alone command bu
c860: 74 20 61 62 6f 75 74 20 22 65 78 70 72 65 73 73  t about "express
c870: 69 6f 6e 73 22 20 77 68 69 63 68 20 61 72 65 20  ions" which are 
c880: 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f  .subcomponents o
c890: 66 20 6d 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d  f most other com
c8a0: 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mands.</p>..<tcl
c8b0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 69 6e  >hd_fragment bin
c8c0: 61 72 79 6f 70 73 20 7b 62 69 6e 61 72 79 20 6f  aryops {binary o
c8d0: 70 65 72 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e 0a  perators}</tcl>.
c8e0: 3c 68 33 3e 4f 70 65 72 61 74 6f 72 73 3c 2f 68  <h3>Operators</h
c8f0: 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20 75 6e 64  3>.<p>SQLite und
c900: 65 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f 6c  erstands the fol
c910: 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79 20 6f 70  lowing binary op
c920: 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65  erators, in orde
c930: 72 20 66 72 6f 6d 0a 68 69 67 68 65 73 74 20 74  r from.highest t
c940: 6f 20 6c 6f 77 65 73 74 20 70 72 65 63 65 64 65  o lowest precede
c950: 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nce:</p>..<block
c960: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e  quote><pre>.<fon
c970: 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30  t color="#2c2cf0
c980: 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f  "><big>||.*    /
c990: 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74      %.+    -.&lt
c9a0: 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26 67 74 3b  ;&lt;   &gt;&gt;
c9b0: 20 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c     &amp;    |.&l
c9c0: 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20 26 67  t;    &lt;=   &g
c9d0: 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20  t;    &gt;=.=   
c9e0: 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b 26   ==   !=   &lt;&
c9f0: 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49 4e 20 20  gt;   </big>IN  
ca00: 4c 49 4b 45 20 20 47 4c 4f 42 20 20 4d 41 54 43  LIKE  GLOB  MATC
ca10: 48 20 20 52 45 47 45 58 50 0a 41 4e 44 20 20 20  H  REGEXP.AND   
ca20: 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65  .OR</font>.</pre
ca30: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
ca40: 3c 70 3e 53 75 70 70 6f 72 74 65 64 20 75 6e 61  <p>Supported una
ca50: 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61 74  ry prefix operat
ca60: 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c 2f  ors are these:</
ca70: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
ca80: 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f  <pre>.<font colo
ca90: 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69 67  r="#2c2cf0"><big
caa0: 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20 20  >-    +    ~    
cab0: 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e  NOT</big></font>
cac0: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
cad0: 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 43 4f 4c  ote>..<p>The COL
cae0: 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 63 61  LATE operator ca
caf0: 6e 20 62 65 20 74 68 6f 75 67 68 74 20 6f 66 20  n be thought of 
cb00: 61 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74 66  as a unary postf
cb10: 69 78 0a 6f 70 65 72 61 74 6f 72 2e 20 20 54 68  ix.operator.  Th
cb20: 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  e COLLATE operat
cb30: 6f 72 20 68 61 73 20 74 68 65 20 68 69 67 68 65  or has the highe
cb40: 73 74 20 70 72 65 63 65 64 65 6e 63 65 2e 0a 49  st precedence..I
cb50: 74 20 61 6c 77 61 79 73 20 62 69 6e 64 73 20 6d  t always binds m
cb60: 6f 72 65 20 74 69 67 68 74 6c 79 20 74 68 61 6e  ore tightly than
cb70: 20 61 6e 79 20 70 72 65 66 69 78 20 75 6e 61 72   any prefix unar
cb80: 79 20 6f 70 65 72 61 74 6f 72 20 6f 72 0a 61 6e  y operator or.an
cb90: 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
cba0: 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  r.</p>..<tcl>hd_
cbb0: 70 75 74 73 20 22 0a 3c 70 3e 54 68 65 20 75 6e  puts ".<p>The un
cbc0: 61 72 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70  ary operator [Op
cbd0: 65 72 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e  erator +] is a n
cbe0: 6f 2d 6f 70 2e 20 20 49 74 20 63 61 6e 20 62 65  o-op.  It can be
cbf0: 20 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69   applied.to stri
cc00: 6e 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 6f 72  ngs, numbers, or
cc10: 20 62 6c 6f 62 73 20 61 6e 64 20 69 74 20 61 6c   blobs and it al
cc20: 77 61 79 73 20 67 69 76 65 73 20 61 73 20 69 74  ways gives as it
cc30: 73 20 72 65 73 75 6c 74 20 74 68 65 0a 76 61 6c  s result the.val
cc40: 75 65 20 6f 66 20 74 68 65 20 6f 70 65 72 61 6e  ue of the operan
cc50: 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c  d.</p>"</tcl>..<
cc60: 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 72  p>Note that ther
cc70: 65 20 61 72 65 20 74 77 6f 20 76 61 72 69 61 74  e are two variat
cc80: 69 6f 6e 73 20 6f 66 20 74 68 65 20 65 71 75 61  ions of the equa
cc90: 6c 73 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c  ls and not equal
cca0: 73 0a 6f 70 65 72 61 74 6f 72 73 2e 20 20 45 71  s.operators.  Eq
ccb0: 75 61 6c 73 20 63 61 6e 20 62 65 20 65 69 74 68  uals can be eith
ccc0: 65 72 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 70 75 74  er..<tcl>.hd_put
ccd0: 73 20 22 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20  s "[Operator =] 
cce0: 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 3d 3d 5d  or [Operator ==]
ccf0: 2e 0a 54 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73  ..The non-equals
cd00: 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
cd10: 20 65 69 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f   either.[Operato
cd20: 72 20 21 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  r !=] or [Operat
cd30: 6f 72 20 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a  or {&lt;&gt;}]..
cd40: 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c  The [Operator ||
cd50: 5d 20 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22  ] operator is \"
cd60: 63 6f 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20  concatenate\" - 
cd70: 69 74 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65  it joins togethe
cd80: 72 0a 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67  r.the two string
cd90: 73 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64  s of its operand
cda0: 73 2e 0a 54 68 65 20 6f 70 65 72 61 74 6f 72 20  s..The operator 
cdb0: 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74  [Operator %] out
cdc0: 70 75 74 73 20 74 68 65 20 72 65 6d 61 69 6e 64  puts the remaind
cdd0: 65 72 20 6f 66 20 69 74 73 20 6c 65 66 74 20 0a  er of its left .
cde0: 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c 6f 20 69  operand modulo i
cdf0: 74 73 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  ts right operand
ce00: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
ce10: 73 75 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61  sult of any bina
ce20: 72 79 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61  ry operator is a
ce30: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2c 20   numeric value, 
ce40: 65 78 63 65 70 74 0a 66 6f 72 20 74 68 65 20 5b  except.for the [
ce50: 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e  Operator ||] con
ce60: 63 61 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61  catenation opera
ce70: 74 6f 72 20 77 68 69 63 68 20 67 69 76 65 73 20  tor which gives 
ce80: 61 20 73 74 72 69 6e 67 0a 72 65 73 75 6c 74 2e  a string.result.
ce90: 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 74 63  </p>"</tcl>..<tc
cea0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69  l>hd_fragment li
ceb0: 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20  tvalue {literal 
cec0: 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  value}</tcl>.<h3
ced0: 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73 3c  >Literal Values<
cee0: 2f 68 33 3e 0a 3c 70 3e 0a 41 20 6c 69 74 65 72  /h3>.<p>.A liter
cef0: 61 6c 20 76 61 6c 75 65 20 69 73 20 61 20 63 6f  al value is a co
cf00: 6e 73 74 61 6e 74 20 6f 66 20 73 6f 6d 65 20 6b  nstant of some k
cf10: 69 6e 64 2e 0a 4c 69 74 65 72 61 6c 20 76 61 6c  ind..Literal val
cf20: 75 65 73 20 6d 61 79 20 62 65 20 69 6e 74 65 67  ues may be integ
cf30: 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ers, floating po
cf40: 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20 73 74 72  int numbers, str
cf50: 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20  ings,.BLOBs, or 
cf60: 4e 55 4c 4c 73 2e 0a 53 63 69 65 6e 74 69 66 69  NULLs..Scientifi
cf70: 63 20 6e 6f 74 61 74 69 6f 6e 20 69 73 20 73 75  c notation is su
cf80: 70 70 6f 72 74 65 64 20 66 6f 72 20 66 6c 6f 61  pported for floa
cf90: 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72  ting point liter
cfa0: 61 6c 20 76 61 6c 75 65 73 2e 0a 54 68 65 20 22  al values..The "
cfb0: 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73 20  ." character is 
cfc0: 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73 20  always used .as 
cfd0: 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  the decimal poin
cfe0: 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f  t even if the lo
cff0: 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65  cale setting spe
d000: 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74  cifies "," for.t
d010: 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75  his role - the u
d020: 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68  se of "," for th
d030: 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
d040: 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a  would result in.
d050: 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75  syntactic ambigu
d060: 69 74 79 2e 20 20 41 20 73 74 72 69 6e 67 20 63  ity.  A string c
d070: 6f 6e 73 74 61 6e 74 20 69 73 20 66 6f 72 6d 65  onstant is forme
d080: 64 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74  d by enclosing t
d090: 68 65 0a 73 74 72 69 6e 67 20 69 6e 20 73 69 6e  he.string in sin
d0a0: 67 6c 65 20 71 75 6f 74 65 73 20 28 27 29 2e 20  gle quotes ('). 
d0b0: 20 41 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20   A single quote 
d0c0: 77 69 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e  within the strin
d0d0: 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64  g can.be encoded
d0e0: 20 62 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20   by putting two 
d0f0: 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e  single quotes in
d100: 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50   a row - as in P
d110: 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65  ascal..C-style e
d120: 73 63 61 70 65 73 20 75 73 69 6e 67 20 74 68 65  scapes using the
d130: 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61   backslash chara
d140: 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70  cter are not sup
d150: 70 6f 72 74 65 64 20 62 65 63 61 75 73 65 0a 74  ported because.t
d160: 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e  hey are not stan
d170: 64 61 72 64 20 53 51 4c 2e 0a 42 4c 4f 42 20 6c  dard SQL..BLOB l
d180: 69 74 65 72 61 6c 73 20 61 72 65 20 73 74 72 69  iterals are stri
d190: 6e 67 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74  ng literals cont
d1a0: 61 69 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d  aining hexadecim
d1b0: 61 6c 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63  al data and.prec
d1c0: 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
d1d0: 20 22 78 22 20 6f 72 20 22 58 22 20 63 68 61 72   "x" or "X" char
d1e0: 61 63 74 65 72 2e 20 20 46 6f 72 20 65 78 61 6d  acter.  For exam
d1f0: 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ple:</p>..<block
d200: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27 35 33  quote><pre>.X'53
d210: 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f 70 72  514C697465'.</pr
d220: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
d230: 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76  .<p>.A literal v
d240: 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65  alue can also be
d250: 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c   the token "NULL
d260: 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  "..</p>..<tcl>hd
d270: 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72  _fragment varpar
d280: 61 6d 20 70 61 72 61 6d 65 74 65 72 20 70 61 72  am parameter par
d290: 61 6d 65 74 65 72 73 3c 2f 74 63 6c 3e 0a 3c 68  ameters</tcl>.<h
d2a0: 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68 33  3>Parameters</h3
d2b0: 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62 6c  >.<p>.A "variabl
d2c0: 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65 72  e" or "parameter
d2d0: 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69 65  " token.specifie
d2e0: 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20  s a placeholder 
d2f0: 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
d300: 6e 20 66 6f 72 20 61 20 6c 69 74 65 72 61 6c 0a  n for a literal.
d310: 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66 69  value that is fi
d320: 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74 69  lled in at runti
d330: 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71  me using the.[sq
d340: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
d350: 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ) | sqlite3_bind
d360: 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43 2f  ()] family of C/
d370: 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  C++ interfaces..
d380: 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20 74  Parameters can t
d390: 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72 6d  ake several form
d3a0: 73 3a 0a 3c 2f 70 0a 0a 3c 62 6c 6f 63 6b 71 75  s:.</p..<blockqu
d3b0: 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72  ote>.<table>.<tr
d3c0: 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
d3d0: 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
d3e0: 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c  ><b>?</b><i>NNN<
d3f0: 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
d400: 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
d410: 3e 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b  >A question mark
d420: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e   followed by a n
d430: 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e  umber <i>NNN</i>
d440: 20 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f   holds a spot fo
d450: 72 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72  r the.NNN-th par
d460: 61 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73  ameter.  NNN mus
d470: 74 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  t be between 1 a
d480: 6e 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  nd [SQLITE_MAX_V
d490: 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e  ARIABLE_NUMBER].
d4a0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
d4b0: 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
d4c0: 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
d4d0: 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  <b>?</b></td><td
d4e0: 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
d4f0: 3e 0a 3c 74 64 3e 41 20 71 75 65 73 74 69 6f 6e  >.<td>A question
d500: 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e 6f   mark that is no
d510: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
d520: 6e 75 6d 62 65 72 20 68 6f 6c 64 73 20 61 20 73  number holds a s
d530: 70 6f 74 20 66 6f 72 0a 74 68 65 20 6e 65 78 74  pot for.the next
d540: 20 75 6e 75 73 65 64 20 70 61 72 61 6d 65 74 65   unused paramete
d550: 72 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  r.</td>.</tr>.<t
d560: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
d570: 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
d580: 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41  "><b>:</b><i>AAA
d590: 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  A</i></td><td wi
d5a0: 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
d5b0: 74 64 3e 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f  td>A colon follo
d5c0: 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69  wed by an identi
d5d0: 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20  fier name holds 
d5e0: 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d  a spot for a nam
d5f0: 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74  ed.parameter wit
d600: 68 20 74 68 65 20 6e 61 6d 65 20 41 41 41 41 2e  h the name AAAA.
d610: 20 20 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65    Named paramete
d620: 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62  rs are also numb
d630: 65 72 65 64 2e 0a 54 68 65 20 6e 75 6d 62 65 72  ered..The number
d640: 20 61 73 73 69 67 6e 65 64 20 69 73 20 74 68 65   assigned is the
d650: 20 6e 65 78 74 20 75 6e 75 73 65 64 20 6e 75 6d   next unused num
d660: 62 65 72 2e 20 20 54 6f 20 61 76 6f 69 64 20 63  ber.  To avoid c
d670: 6f 6e 66 75 73 69 6f 6e 2c 0a 69 74 20 69 73 20  onfusion,.it is 
d680: 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d 69  best to avoid mi
d690: 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20 6e  xing named and n
d6a0: 75 6d 62 65 72 65 64 20 70 61 72 61 6d 65 74 65  umbered paramete
d6b0: 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  rs.</td>.</tr>.<
d6c0: 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
d6d0: 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
d6e0: 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41  p"><b>@</b><i>AA
d6f0: 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
d700: 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
d710: 3c 74 64 3e 41 6e 20 22 61 74 22 20 73 69 67 6e  <td>An "at" sign
d720: 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
d730: 69 6b 65 20 61 20 63 6f 6c 6f 6e 2e 3c 2f 74 64  ike a colon.</td
d740: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64  >.</tr>.<tr>.<td
d750: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
d760: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 24  align="top"><b>$
d770: 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c  </b><i>AAAA</i><
d780: 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
d790: 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 64  0"></td>.<td>A d
d7a0: 6f 6c 6c 61 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f  ollar-sign follo
d7b0: 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e 74 69  wed by an identi
d7c0: 66 69 65 72 20 6e 61 6d 65 20 61 6c 73 6f 20 68  fier name also h
d7d0: 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20  olds a spot for 
d7e0: 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74 65  a named.paramete
d7f0: 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  r with the name 
d800: 41 41 41 41 2e 20 20 54 68 65 20 69 64 65 6e 74  AAAA.  The ident
d810: 69 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68  ifier name in th
d820: 69 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c  is case can incl
d830: 75 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ude.one or more 
d840: 6f 63 63 75 72 61 6e 63 65 73 20 6f 66 20 22 3a  occurances of ":
d850: 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20  :" and a suffix 
d860: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e  enclosed in "(..
d870: 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  .)" containing.a
d880: 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 20  ny text at all. 
d890: 20 54 68 69 73 20 73 79 6e 74 61 78 20 69 73 20   This syntax is 
d8a0: 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76 61  the form of a va
d8b0: 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74  riable name in t
d8c0: 68 65 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70  he.<a href="http
d8d0: 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 2f 22 3e  ://www.tcl.tk/">
d8e0: 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20  Tcl programming 
d8f0: 6c 61 6e 67 75 61 67 65 3c 2f 61 3e 2e 20 20 54  language</a>.  T
d900: 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74  he presence.of t
d910: 68 69 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c  his syntax resul
d920: 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74  ts from the fact
d930: 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73 20   that SQLite is 
d940: 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65  really a .[Tcl e
d950: 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68  xtension] that h
d960: 61 73 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20  as escaped into 
d970: 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c  the wild.</td>.<
d980: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
d990: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
d9a0: 50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  Parameters that 
d9b0: 61 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64  are not assigned
d9c0: 20 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73   values using.[s
d9d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
d9e0: 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
d9f0: 64 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64  d()] are treated
da00: 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c  .as NULL.</p>..<
da10: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
da20: 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45  like LIKE ESCAPE
da30: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
da40: 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65  IKE and GLOB ope
da50: 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 54  rators</h3>.<p>T
da60: 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
da70: 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e 20   does a pattern 
da80: 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72 69  matching compari
da90: 73 6f 6e 2e 20 54 68 65 20 6f 70 65 72 61 6e 64  son. The operand
daa0: 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20 63 6f  .to the right co
dab0: 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74 74 65  ntains the patte
dac0: 72 6e 2c 20 74 68 65 20 6c 65 66 74 20 68 61 6e  rn, the left han
dad0: 64 20 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69  d operand contai
dae0: 6e 73 20 74 68 65 0a 73 74 72 69 6e 67 20 74 6f  ns the.string to
daf0: 20 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74   match against t
db00: 68 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63  he pattern...<tc
db10: 6c 3e 68 64 5f 70 75 74 73 20 22 41 20 70 65 72  l>hd_puts "A per
db20: 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25  cent symbol (\"%
db30: 5c 22 29 20 69 6e 20 74 68 65 20 70 61 74 74 65  \") in the patte
db40: 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73  rn matches any.s
db50: 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
db60: 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
db70: 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
db80: 2e 20 20 41 6e 20 75 6e 64 65 72 73 63 6f 72 65  .  An underscore
db90: 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65 20  .(\"_\") in the 
dba0: 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
dbb0: 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61  any single chara
dbc0: 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69  cter in the.stri
dbd0: 6e 67 2e 20 20 41 6e 79 20 6f 74 68 65 72 20 63  ng.  Any other c
dbe0: 68 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73  haracter matches
dbf0: 20 69 74 73 65 6c 66 20 6f 72 20 69 74 27 73 20   itself or it's 
dc00: 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65  lower/upper case
dc10: 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65  .equivalent (i.e
dc20: 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  . case-insensiti
dc30: 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 20 20 28  ve matching).  (
dc40: 41 20 62 75 67 3a 20 53 51 4c 69 74 65 20 6f 6e  A bug: SQLite on
dc50: 6c 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75  ly.understands u
dc60: 70 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20  pper/lower case 
dc70: 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
dc80: 74 65 72 73 2e 20 20 54 68 65 0a 4c 49 4b 45 20  ters.  The.LIKE 
dc90: 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73 65  operator is case
dca0: 20 73 65 6e 73 69 74 69 76 65 20 66 6f 72 20 75   sensitive for u
dcb0: 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65 72  nicode character
dcc0: 73 20 74 68 61 74 20 61 72 65 20 62 65 79 6f 6e  s that are beyon
dcd0: 64 0a 74 68 65 20 41 53 43 49 49 20 72 61 6e 67  d.the ASCII rang
dce0: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
dcf0: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
dd00: 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45  <b>'a'&nbsp;LIKE
dd10: 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73  &nbsp;'A'</b>.is
dd20: 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27 26 61   TRUE but <b>'&a
dd30: 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45  elig;'&nbsp;LIKE
dd40: 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c  &nbsp;'&AElig;'<
dd50: 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29 2e 3c  /b> is FALSE.).<
dd60: 2f 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 49  /p>"</tcl>..<p>I
dd70: 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
dd80: 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
dd90: 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
dda0: 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c  e expression.fol
ddb0: 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50  lowing the ESCAP
ddc0: 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65  E keyword must e
ddd0: 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72  valuate to a str
dde0: 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  ing consisting o
ddf0: 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61  f.a single chara
de00: 63 74 65 72 2e 20 54 68 69 73 20 63 68 61 72 61  cter. This chara
de10: 63 74 65 72 20 6d 61 79 20 62 65 20 75 73 65 64  cter may be used
de20: 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74   in the LIKE pat
de30: 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20  tern.to include 
de40: 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74 20  literal percent 
de50: 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63 68  or underscore ch
de60: 61 72 61 63 74 65 72 73 2e 20 54 68 65 20 65 73  aracters. The es
de70: 63 61 70 65 0a 63 68 61 72 61 63 74 65 72 20 66  cape.character f
de80: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72  ollowed by a per
de90: 63 65 6e 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64  cent symbol, und
dea0: 65 72 73 63 6f 72 65 20 6f 72 20 69 74 73 65 6c  erscore or itsel
deb0: 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65  f matches a.lite
dec0: 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62  ral percent symb
ded0: 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 6f  ol, underscore o
dee0: 72 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  r escape charact
def0: 65 72 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  er in the string
df00: 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  ,.respectively..
df10: 0a 3c 70 3e 54 68 65 20 69 6e 66 69 78 20 4c 49  .<p>The infix LI
df20: 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69  KE operator is i
df30: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
df40: 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63  lling the.applic
df50: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
df60: 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b  L functions [lik
df70: 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
df80: 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c  /i>)] or.[like(<
df90: 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e  i>Y</i>,<i>X</i>
dfa0: 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e  ,<i>Z</i>)]</a>.
dfb0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4b  </p>..<p>The LIK
dfc0: 45 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62  E operator can b
dfd0: 65 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73  e made case sens
dfe0: 69 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a  itive using the.
dff0: 5b 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f  [case_sensitive_
e000: 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70  like pragma].</p
e010: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
e020: 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74  ent glob GLOB</t
e030: 63 6c 3e 0a 3c 70 3e 54 68 65 20 47 4c 4f 42 20  cl>.<p>The GLOB 
e040: 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
e050: 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
e060: 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
e070: 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
e080: 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
e090: 61 72 64 73 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f  ards.  Also, GLO
e0a0: 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74  B is case.sensit
e0b0: 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45  ive, unlike LIKE
e0c0: 2e 20 20 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64  .  Both GLOB and
e0d0: 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65   LIKE may be pre
e0e0: 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54  ceded by.the NOT
e0f0: 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65   keyword to inve
e100: 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20  rt the sense of 
e110: 74 68 65 20 74 65 73 74 2e 20 20 54 68 65 20 69  the test.  The i
e120: 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61  nfix GLOB .opera
e130: 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
e140: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
e150: 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62  e function.[glob
e160: 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
e170: 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20  i>)] and can be 
e180: 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72  modified by over
e190: 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63  riding.that func
e1a0: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  tion.</p>..<tcl>
e1b0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65  hd_fragment rege
e1c0: 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a  xp REGEXP</tcl>.
e1d0: 3c 70 3e 54 68 65 20 52 45 47 45 58 50 20 6f 70  <p>The REGEXP op
e1e0: 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63  erator is a spec
e1f0: 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74  ial syntax for t
e200: 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72  he regexp().user
e210: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 4e 6f 20 72   function.  No r
e220: 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e  egexp() user fun
e230: 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
e240: 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20   by default.and 
e250: 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45  so use of the RE
e260: 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69  GEXP operator wi
e270: 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75  ll normally resu
e280: 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d  lt in an.error m
e290: 65 73 73 61 67 65 2e 20 20 49 66 20 61 20 75 73  essage.  If a us
e2a0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
e2b0: 69 6f 6e 20 6e 61 6d 65 64 20 22 72 65 67 65 78  ion named "regex
e2c0: 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72  p".is added at r
e2d0: 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20 66 75  un-time, that fu
e2e0: 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63  nction will be c
e2f0: 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a 74  alled in order.t
e300: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
e310: 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 2e  REGEXP operator.
e320: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
e330: 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54  agment match MAT
e340: 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20  CH</tcl>.<p>The 
e350: 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69  MATCH operator i
e360: 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74  s a special synt
e370: 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68  ax for the match
e380: 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ().user function
e390: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d  .  The default m
e3a0: 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
e3b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72  implementation.r
e3c0: 61 69 73 65 73 20 61 6e 20 65 78 63 65 70 74 69  aises an excepti
e3d0: 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72 65  on and is not re
e3e0: 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20  ally useful for 
e3f0: 61 6e 79 74 68 69 6e 67 2e 0a 42 75 74 20 65 78  anything..But ex
e400: 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65  tensions can ove
e410: 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68 28  rride the match(
e420: 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  ) function with 
e430: 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67  more.helpful log
e440: 69 63 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ic.</p>..<tcl>hd
e450: 5f 66 72 61 67 6d 65 6e 74 20 62 65 74 77 65 65  _fragment betwee
e460: 6e 20 42 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a  n BETWEEN</tcl>.
e470: 3c 68 33 3e 54 68 65 20 42 45 54 57 45 45 4e 20  <h3>The BETWEEN 
e480: 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70  operator</h3>.<p
e490: 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65  >The BETWEEN ope
e4a0: 72 61 74 6f 72 20 69 73 20 65 71 75 69 76 61 6c  rator is equival
e4b0: 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f 66  ent to a pair of
e4c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22 3c   comparisons.."<
e4d0: 69 3e 61 3c 2f 69 3e 20 3c 62 3e 42 45 54 57 45  i>a</i> <b>BETWE
e4e0: 45 4e 3c 2f 62 3e 20 3c 69 3e 62 3c 2f 69 3e 20  EN</b> <i>b</i> 
e4f0: 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 63 3c  <b>AND</b> <i>c<
e500: 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61 6c  /i>" is .equival
e510: 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 61 3c 2f 69  ent to ."<i>a</i
e520: 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69 3e  ><b>&gt;=</b><i>
e530: 62 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  b</i> <b>AND</b>
e540: 20 3c 69 3e 61 3c 2f 69 3e 3c 62 3e 26 6c 74 3b   <i>a</i><b>&lt;
e550: 3d 3c 2f 62 3e 3c 69 3e 63 3c 2f 69 3e 22 2e 0a  =</b><i>c</i>"..
e560: 54 68 65 20 70 72 65 63 65 64 65 6e 63 65 20 6f  The precedence o
e570: 66 20 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70  f the BETWEEN op
e580: 65 72 61 74 6f 72 20 69 73 20 74 68 65 20 73 61  erator is the sa
e590: 6d 65 20 61 73 20 74 68 65 20 70 72 65 63 65 64  me as the preced
e5a0: 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74 6f 72  ence.as operator
e5b0: 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20  s <b>==</b> and 
e5c0: 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62  <b>!=</b> and <b
e5d0: 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72  >LIKE</b> and gr
e5e0: 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72 69 67  oups left to rig
e5f0: 68 74 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20 43  ht...<h3>Table C
e600: 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e  olumn Names</h3>
e610: 0a 3c 70 3e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d  .<p>A column nam
e620: 65 20 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20  e can be any of 
e630: 74 68 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65  the names define
e640: 64 20 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45  d in the [CREATE
e650: 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e   TABLE].statemen
e660: 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20  t or one of the 
e670: 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61  following specia
e680: 6c 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  l identifiers: "
e690: 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22  <b>ROWID</b>",."
e6a0: 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20  <b>OID</b>", or 
e6b0: 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22  "<b>_ROWID_</b>"
e6c0: 2e 0a 54 68 65 73 65 20 73 70 65 63 69 61 6c 20  ..These special 
e6d0: 69 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20  identifiers all 
e6e0: 64 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69  describe the.uni
e6f0: 71 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  que integer key 
e700: 28 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73  (the [rowid]) as
e710: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76  sociated with ev
e720: 65 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72  ery .row of ever
e730: 79 20 74 61 62 6c 65 2e 0a 54 68 65 20 73 70 65  y table..The spe
e740: 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
e750: 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
e760: 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
e770: 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
e780: 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
e790: 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
e7a0: 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
e7b0: 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 54 68 65  e same name..The
e7c0: 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75 73   rowid can be us
e7d0: 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72 65  ed anywhere a re
e7e0: 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61 6e  gular.column can
e7f0: 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c   be used.</p>..<
e800: 68 33 3e 53 75 62 71 75 65 72 69 65 73 3c 2f 68  h3>Subqueries</h
e810: 33 3e 0a 3c 70 3e 5b 53 45 4c 45 43 54 5d 20 73  3>.<p>[SELECT] s
e820: 74 61 74 65 6d 65 6e 74 73 20 63 61 6e 20 61 70  tatements can ap
e830: 70 65 61 72 20 69 6e 20 65 78 70 72 65 73 73 69  pear in expressi
e840: 6f 6e 73 20 61 73 20 65 69 74 68 65 72 20 74 68  ons as either th
e850: 65 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65  e.right-hand ope
e860: 72 61 6e 64 20 6f 66 20 74 68 65 20 49 4e 20 6f  rand of the IN o
e870: 70 65 72 61 74 6f 72 2c 20 61 73 20 61 20 73 63  perator, as a sc
e880: 61 6c 61 72 20 71 75 61 6e 74 69 74 79 2c 20 6f  alar quantity, o
e890: 72 0a 61 73 20 74 68 65 20 6f 70 65 72 61 6e 64  r.as the operand
e8a0: 20 6f 66 20 61 6e 20 45 58 49 53 54 53 20 6f 70   of an EXISTS op
e8b0: 65 72 61 74 6f 72 2e 0a 41 73 20 61 20 73 63 61  erator..As a sca
e8c0: 6c 61 72 20 71 75 61 6e 74 69 74 79 20 6f 72 20  lar quantity or 
e8d0: 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  the operand of a
e8e0: 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 0a 74  n IN operator,.t
e8f0: 68 65 20 53 45 4c 45 43 54 20 73 68 6f 75 6c 64  he SELECT should
e900: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 73 69 6e   have only a sin
e910: 67 6c 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 69 74  gle column in it
e920: 73 0a 72 65 73 75 6c 74 2e 20 20 43 6f 6d 70 6f  s.result.  Compo
e930: 75 6e 64 20 53 45 4c 45 43 54 73 20 28 63 6f 6e  und SELECTs (con
e940: 6e 65 63 74 65 64 20 77 69 74 68 20 6b 65 79 77  nected with keyw
e950: 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49 4f 4e 20  ords like UNION 
e960: 6f 72 0a 45 58 43 45 50 54 29 20 61 72 65 20 61  or.EXCEPT) are a
e970: 6c 6c 6f 77 65 64 2e 0a 57 69 74 68 20 74 68 65  llowed..With the
e980: 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
e990: 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  , the columns in
e9a0: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
e9b0: 6f 66 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20  of the [SELECT] 
e9c0: 61 72 65 0a 69 67 6e 6f 72 65 64 20 61 6e 64 20  are.ignored and 
e9d0: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 72  the expression r
e9e0: 65 74 75 72 6e 73 20 54 52 55 45 20 69 66 20 6f  eturns TRUE if o
e9f0: 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ne or more rows 
ea00: 65 78 69 73 74 0a 61 6e 64 20 46 41 4c 53 45 20  exist.and FALSE 
ea10: 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
ea20: 74 20 69 73 20 65 6d 70 74 79 2e 0a 49 66 20 6e  t is empty..If n
ea30: 6f 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 5b  o terms in the [
ea40: 53 45 4c 45 43 54 5d 20 65 78 70 72 65 73 73 69  SELECT] expressi
ea50: 6f 6e 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75  on refer to valu
ea60: 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74 61 69  es in the contai
ea70: 6e 69 6e 67 0a 71 75 65 72 79 2c 20 74 68 65 6e  ning.query, then
ea80: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
ea90: 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
eaa0: 65 20 70 72 69 6f 72 20 74 6f 20 61 6e 79 20 6f  e prior to any o
eab0: 74 68 65 72 0a 70 72 6f 63 65 73 73 69 6e 67 20  ther.processing 
eac0: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 69  and the result i
ead0: 73 20 72 65 75 73 65 64 20 61 73 20 6e 65 63 65  s reused as nece
eae0: 73 73 61 72 79 2e 20 20 49 66 20 74 68 65 20 5b  ssary.  If the [
eaf0: 53 45 4c 45 43 54 5d 20 65 78 70 72 65 73 73 69  SELECT] expressi
eb00: 6f 6e 0a 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  on.does contain 
eb10: 76 61 72 69 61 62 6c 65 73 20 66 72 6f 6d 20 74  variables from t
eb20: 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2c 20  he outer query, 
eb30: 74 68 65 6e 20 74 68 65 20 5b 53 45 4c 45 43 54  then the [SELECT
eb40: 5d 20 69 73 20 72 65 65 76 61 6c 75 61 74 65 64  ] is reevaluated
eb50: 0a 65 76 65 72 79 20 74 69 6d 65 20 69 74 20 69  .every time it i
eb60: 73 20 6e 65 65 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  s needed.</p>..<
eb70: 70 3e 57 68 65 6e 20 61 20 53 45 4c 45 43 54 20  p>When a SELECT 
eb80: 69 73 20 74 68 65 20 72 69 67 68 74 20 6f 70 65  is the right ope
eb90: 72 61 6e 64 20 6f 66 20 74 68 65 20 49 4e 20 6f  rand of the IN o
eba0: 70 65 72 61 74 6f 72 2c 20 74 68 65 20 49 4e 0a  perator, the IN.
ebb0: 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73  operator returns
ebc0: 20 54 52 55 45 20 69 66 20 74 68 65 20 72 65 73   TRUE if the res
ebd0: 75 6c 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  ult of the left 
ebe0: 6f 70 65 72 61 6e 64 20 69 73 20 61 6e 79 20 6f  operand is any o
ebf0: 66 0a 74 68 65 20 76 61 6c 75 65 73 20 67 65 6e  f.the values gen
ec00: 65 72 61 74 65 64 20 62 79 20 74 68 65 20 73 65  erated by the se
ec10: 6c 65 63 74 2e 20 20 54 68 65 20 49 4e 20 6f 70  lect.  The IN op
ec20: 65 72 61 74 6f 72 20 6d 61 79 20 62 65 20 70 72  erator may be pr
ec30: 65 63 65 64 65 64 0a 62 79 20 74 68 65 20 4e 4f  eceded.by the NO
ec40: 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76  T keyword to inv
ec50: 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66  ert the sense of
ec60: 20 74 68 65 20 74 65 73 74 2e 3c 2f 70 3e 0a 0a   the test.</p>..
ec70: 3c 70 3e 57 68 65 6e 20 61 20 53 45 4c 45 43 54  <p>When a SELECT
ec80: 20 61 70 70 65 61 72 73 20 77 69 74 68 69 6e 20   appears within 
ec90: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 62 75  an expression bu
eca0: 74 20 69 73 20 6e 6f 74 20 74 68 65 20 72 69 67  t is not the rig
ecb0: 68 74 0a 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e  ht.operand of an
ecc0: 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68   IN operator, th
ecd0: 65 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  en the first row
ece0: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   of the result o
ecf0: 66 20 74 68 65 0a 53 45 4c 45 43 54 20 62 65 63  f the.SELECT bec
ed00: 6f 6d 65 73 20 74 68 65 20 76 61 6c 75 65 20 75  omes the value u
ed10: 73 65 64 20 69 6e 20 74 68 65 20 65 78 70 72 65  sed in the expre
ed20: 73 73 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 53  ssion.  If the S
ed30: 45 4c 45 43 54 20 79 69 65 6c 64 73 0a 6d 6f 72  ELECT yields.mor
ed40: 65 20 74 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c  e than one resul
ed50: 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20  t row, all rows 
ed60: 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74 20  after the first 
ed70: 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 20 49 66  are ignored.  If
ed80: 0a 74 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c  .the SELECT yiel
ed90: 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e  ds no rows, then
eda0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
edb0: 65 20 53 45 4c 45 43 54 20 69 73 20 4e 55 4c 4c  e SELECT is NULL
edc0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 41 53 54 20  .</p>..<h3>CAST 
edd0: 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  expressions</h3>
ede0: 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70 72 65  .<p>A CAST expre
edf0: 73 73 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68  ssion changes th
ee00: 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f 66 20  e [datatype] of 
ee10: 74 68 65 20 3c 65 78 70 72 3e 20 69 6e 74 6f 20  the <expr> into 
ee20: 74 68 65 0a 74 79 70 65 20 73 70 65 63 69 66 69  the.type specifi
ee30: 65 64 20 62 79 20 26 6c 74 3b 74 79 70 65 26 67  ed by &lt;type&g
ee40: 74 3b 2e 20 0a 26 6c 74 3b 74 79 70 65 26 67 74  t;. .&lt;type&gt
ee50: 3b 20 63 61 6e 20 62 65 20 61 6e 79 20 6e 6f 6e  ; can be any non
ee60: 2d 65 6d 70 74 79 20 74 79 70 65 20 6e 61 6d 65  -empty type name
ee70: 20 74 68 61 74 20 69 73 20 76 61 6c 69 64 0a 66   that is valid.f
ee80: 6f 72 20 74 68 65 20 74 79 70 65 20 69 6e 20 61  or the type in a
ee90: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
eea0: 6f 6e 20 6f 66 20 61 20 5b 43 52 45 41 54 45 20  on of a [CREATE 
eeb0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
eec0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 46 75 6e 63 74  .</p>..<h3>Funct
eed0: 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 42 6f 74  ions</h3>.<p>Bot
eee0: 68 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70  h [corefunc|simp
eef0: 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66 75 6e 63  le] and [aggfunc
ef00: 7c 61 67 67 72 65 67 61 74 65 5d 20 66 75 6e 63  |aggregate] func
ef10: 74 69 6f 6e 73 20 61 72 65 20 73 75 70 70 6f 72  tions are suppor
ef20: 74 65 64 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e  ted..(For presen
ef30: 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c  tation purposes,
ef40: 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
ef50: 73 20 61 72 65 20 66 75 72 74 68 65 72 20 73 75  s are further su
ef60: 62 64 69 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63  bdivided into.[c
ef70: 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66  orefunc | core f
ef80: 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64  unctions] and [d
ef90: 61 74 65 66 75 6e 63 20 7c 20 64 61 74 65 2d 74  atefunc | date-t
efa0: 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29  ime functions].)
efb0: 0a 41 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69  .A simple functi
efc0: 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
efd0: 6e 20 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e  n any expression
efe0: 2e 20 20 53 69 6d 70 6c 65 20 66 75 6e 63 74 69  .  Simple functi
eff0: 6f 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73  ons return.a res
f000: 75 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ult immediately 
f010: 62 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69  based on their i
f020: 6e 70 75 74 73 2e 20 20 41 67 67 72 65 67 61 74  nputs.  Aggregat
f030: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
f040: 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
f050: 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
f060: 6e 74 2e 20 20 41 67 67 72 65 67 61 74 65 20 66  nt.  Aggregate f
f070: 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74 65  unctions compute
f080: 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61 63  .their result ac
f090: 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f 66  ross all rows of
f0a0: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
f0b0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
f0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f100: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
f110: 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69 6f  on {Core Functio
f120: 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 63 6f  ns} corefunc {co
f130: 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66 75 6e  refunc}.proc fun
f140: 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79  cdef {syntax key
f150: 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20  words desc} {.  
f160: 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d 0a 20  hd_puts {<tr>}. 
f170: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73   regsub -all {\s
f180: 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  +} [string trim 
f190: 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 3e 3c 2f  $syntax] {<br></
f1a0: 62 72 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65  br>} syntax.  re
f1b0: 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e  gsub -all {\(([^
f1c0: 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78  *)]+)\)} $syntax
f1d0: 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73   {(<i>\1</i>)} s
f1e0: 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
f1f0: 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20  all {,} $syntax 
f200: 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61  {</i>,<i>} synta
f210: 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
f220: 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20  {<i>\.\.\.</i>} 
f230: 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79  $syntax {...} sy
f240: 6e 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22  ntax.  hd_puts "
f250: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
f260: 5c 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74  \" align=\"right
f270: 5c 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22  \" width=\"120\"
f280: 3e 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20  >$syntax</td>". 
f290: 20 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76 61   hd_puts {<td va
f2a0: 6c 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 69  lign="top">}.  i
f2b0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79  f {[llength $key
f2c0: 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20  words]==0} {.   
f2d0: 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b   regexp {[a-z_]+
f2e0: 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20  } $syntax name. 
f2f0: 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24     hd_fragment $
f300: 6e 61 6d 65 20 24 6e 61 6d 65 0a 20 20 7d 20 65  name $name.  } e
f310: 6c 73 65 20 7b 0a 20 20 20 20 65 76 61 6c 20 68  lse {.    eval h
f320: 64 5f 66 72 61 67 6d 65 6e 74 20 24 6b 65 79 77  d_fragment $keyw
f330: 6f 72 64 73 0a 20 20 20 20 68 64 5f 6b 65 79 77  ords.    hd_keyw
f340: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
f350: 20 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20   }.  hd_resolve 
f360: 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73 20  $desc.  hd_puts 
f370: 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a 3c  {</td></tr>}.}.<
f380: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f  /tcl>..<p>The co
f390: 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f  re functions sho
f3a0: 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61  wn below are ava
f3b0: 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c  ilable by defaul
f3c0: 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20  t. .[datefunc | 
f3d0: 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20  Date &amp; Time 
f3e0: 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a 5b  functions] and.[
f3f0: 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67  aggfunc | aggreg
f400: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  ate functions] a
f410: 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65  re documented se
f420: 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70  parately.  An.ap
f430: 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64 65  plication may de
f440: 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a  fine additional.
f450: 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
f460: 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65 64  n in C and added
f470: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
f480: 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74 68   engine using.th
f490: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
f4a0: 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50  e_function()] AP
f4b0: 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  I.</p>..<table b
f4c0: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
f4d0: 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75  ing=10>.<tcl>.fu
f4e0: 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20 7b  ncdef {abs(X)} {
f4f0: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
f500: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
f510: 6f 66 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20  of the numeric. 
f520: 20 61 72 67 75 6d 65 6e 74 20 3c 69 3e 58 3c 2f   argument <i>X</
f530: 69 3e 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  i>.  Return NULL
f540: 20 69 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20   if <i>X</i> is 
f550: 4e 55 4c 4c 2e 20 20 52 65 74 75 72 6e 20 30 2e  NULL.  Return 0.
f560: 30 20 69 66 0a 20 20 3c 69 3e 58 3c 2f 69 3e 20  0 if.  <i>X</i> 
f570: 69 73 20 6e 6f 74 20 61 20 6e 75 6d 65 72 69 63  is not a numeric
f580: 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64   value..}..funcd
f590: 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b  ef {changes()} {
f5a0: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
f5b0: 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62   number of datab
f5c0: 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 77 65  ase rows that we
f5d0: 72 65 20 63 68 61 6e 67 65 64 20 6f 72 20 69 6e  re changed or in
f5e0: 73 65 72 74 65 64 20 6f 72 0a 20 20 64 65 6c 65  serted or.  dele
f5f0: 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ted by the most 
f600: 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74  recently complet
f610: 65 20 53 51 4c 2e 20 20 54 68 69 73 20 69 73 20  e SQL.  This is 
f620: 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
f630: 0a 20 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  .  the [sqlite3_
f640: 63 68 61 6e 67 65 73 28 29 5d 20 43 2f 43 2b 2b  changes()] C/C++
f650: 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75   function..}..fu
f660: 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63 65 28  ncdef {coalesce(
f670: 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20  X,Y,...)} {} {. 
f680: 20 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f   Return a copy o
f690: 66 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d  f the first non-
f6a0: 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 20 20  NULL argument.  
f6b0: 49 66 0a 20 20 61 6c 6c 20 61 72 67 75 6d 65 6e  If.  all argumen
f6c0: 74 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ts are NULL then
f6d0: 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65   NULL is returne
f6e0: 64 2e 20 20 54 68 65 72 65 20 6d 75 73 74 20 62  d.  There must b
f6f0: 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20  e at least .  2 
f700: 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75  arguments..}..fu
f710: 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29  ncdef {glob(X,Y)
f720: 7d 20 7b 7d 20 7b 0a 20 20 54 68 69 73 20 66 75  } {} {.  This fu
f730: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  nction is used t
f740: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
f750: 20 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f    "<b>Y GLOB X</
f760: 62 3e 22 20 73 79 6e 74 61 78 20 6f 66 20 53 51  b>" syntax of SQ
f770: 4c 69 74 65 2e 0a 20 20 4e 6f 74 65 20 74 68 61  Lite..  Note tha
f780: 74 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72  t the X and Y ar
f790: 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65  guments are reve
f7a0: 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62  rsed in the glob
f7b0: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65  () function.  re
f7c0: 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
f7d0: 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61  fix [GLOB] opera
f7e0: 74 6f 72 2e 0a 20 20 54 68 65 20 5b 73 71 6c 69  tor..  The [sqli
f7f0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
f800: 69 6f 6e 28 29 5d 0a 20 20 69 6e 74 65 72 66 61  ion()].  interfa
f810: 63 65 20 63 61 6e 0a 20 20 62 65 20 75 73 65 64  ce can.  be used
f820: 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69   to override thi
f830: 73 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  s function and t
f840: 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
f850: 65 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 6f 66  e operation.  of
f860: 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72   the [GLOB] oper
f870: 61 74 6f 72 2e 3c 2f 74 64 3e 0a 7d 0a 0a 66 75  ator.</td>.}..fu
f880: 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
f890: 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72  Y)} {} {.  Retur
f8a0: 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  n a copy of the 
f8b0: 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  first non-NULL a
f8c0: 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a 20 20 62  rgument.  If.  b
f8d0: 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72  oth arguments ar
f8e0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55 4c 4c  e NULL then NULL
f8f0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 54 68   is returned. Th
f900: 65 20 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74  e ifnull() funct
f910: 69 6f 6e 73 20 61 6e 64 0a 20 20 5b 63 6f 61 6c  ions and.  [coal
f920: 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
f930: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 69   arguments are i
f940: 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 2e 3c  nterchangeable.<
f950: 2f 74 64 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  /td>.}..funcdef 
f960: 7b 68 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20  {hex(X)} {} {.  
f970: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
f980: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
f990: 20 42 4c 4f 42 2e 20 20 54 68 65 20 72 65 73 75   BLOB.  The resu
f9a0: 6c 74 0a 20 20 69 73 20 61 20 68 65 78 61 64 65  lt.  is a hexade
f9b0: 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20  cimal rendering 
f9c0: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  of the content o
f9d0: 66 20 74 68 61 74 20 62 6c 6f 62 2e 20 20 0a 7d  f that blob.  .}
f9e0: 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f  ..funcdef {last_
f9f0: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20  insert_rowid()} 
fa00: 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68  {} {.  Return th
fa10: 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66 20 74  e [ROWID].  of t
fa20: 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e 73 65  he last row inse
fa30: 72 74 20 66 72 6f 6d 20 74 68 69 73 0a 20 20 63  rt from this.  c
fa40: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65  onnection to the
fa50: 20 64 61 74 61 62 61 73 65 2e 20 0a 20 20 54 68   database. .  Th
fa60: 69 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 76  is is the same v
fa70: 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
fa80: 62 65 20 72 65 74 75 72 6e 65 64 0a 20 20 66 72  be returned.  fr
fa90: 6f 6d 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  om the [sqlite3_
faa0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
fab0: 64 28 29 5d 20 41 50 49 20 66 75 6e 63 74 69 6f  d()] API functio
fac0: 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
fad0: 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20  ength(X)} {} {. 
fae0: 20 52 65 74 75 72 6e 20 74 68 65 20 73 74 72 69   Return the stri
faf0: 6e 67 20 6c 65 6e 67 74 68 20 6f 66 20 3c 69 3e  ng length of <i>
fb00: 58 3c 2f 69 3e 20 69 6e 20 63 68 61 72 61 63 74  X</i> in charact
fb10: 65 72 73 20 69 66 20 3c 69 3e 58 3c 2f 69 3e 20  ers if <i>X</i> 
fb20: 69 73 20 61 20 73 74 72 69 6e 67 2c 0a 20 20 6f  is a string,.  o
fb30: 72 20 69 6e 20 62 79 74 65 73 20 69 66 20 3c 69  r in bytes if <i
fb40: 3e 58 3c 2f 69 3e 20 69 73 20 61 20 62 6c 6f 62  >X</i> is a blob
fb50: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 69  ..}..funcdef {li
fb60: 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c 59  ke(X,Y) like(X,Y
fb70: 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 69 73  ,Z)} {} {.  This
fb80: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
fb90: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
fba0: 68 65 20 22 3c 62 3e 59 20 4c 49 4b 45 20 58 20  he "<b>Y LIKE X 
fbb0: 26 23 39 31 3b 45 53 43 41 50 45 20 5a 26 23 39  &#91;ESCAPE Z&#9
fbc0: 33 3b 3c 2f 62 3e 22 0a 20 20 73 79 6e 74 61 78  3;</b>".  syntax
fbd0: 20 6f 66 20 53 51 4c 2e 20 49 66 20 74 68 65 20   of SQL. If the 
fbe0: 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20  optional ESCAPE 
fbf0: 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
fc00: 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 75 73  t, then the.  us
fc10: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  er-function is i
fc20: 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 68 72 65  nvoked with thre
fc30: 65 20 61 72 67 75 6d 65 6e 74 73 2e 20 4f 74 68  e arguments. Oth
fc40: 65 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20  erwise, it is.  
fc50: 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f  invoked with two
fc60: 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e   arguments only.
fc70: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58   Note that the X
fc80: 20 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72   and Y parameter
fc90: 73 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64  s are.  reversed
fca0: 20 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66   in the like() f
fcb0: 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  unction relative
fcc0: 20 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c   to the infix [L
fcd0: 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20  IKE] operator.. 
fce0: 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   The [sqlite3_cr
fcf0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
fd00: 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62   interface can b
fd10: 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69  e used to overri
fd20: 64 65 20 74 68 69 73 0a 20 20 66 75 6e 63 74 69  de this.  functi
fd30: 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20 63  on and thereby c
fd40: 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61 74  hange the operat
fd50: 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49  ion of the.  [LI
fd60: 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 57 68  KE] operator. Wh
fd70: 65 6e 20 64 6f 69 6e 67 20 74 68 69 73 2c 20 69  en doing this, i
fd80: 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72 74 61  t may be importa
fd90: 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69 64 65  nt.  to override
fda0: 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20 61 6e   both the two an
fdb0: 64 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  d three argument
fdc0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
fdd0: 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e 63 74   like() .  funct
fde0: 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ion. Otherwise, 
fdf0: 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 20 6d  different code m
fe00: 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20  ay be called to 
fe10: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20  implement the.  
fe20: 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20  [LIKE] operator 
fe30: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
fe40: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45  ther or not an E
fe50: 53 43 41 50 45 20 63 6c 61 75 73 65 20 77 61 73  SCAPE clause was
fe60: 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e 0a 7d   .  specified..}
fe70: 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f  ..funcdef {load_
fe80: 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61  extension(X) loa
fe90: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29  d_extension(X,Y)
fea0: 7d 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  } {load_extensio
feb0: 6e 7d 20 7b 0a 20 20 4c 6f 61 64 20 53 51 4c 69  n} {.  Load SQLi
fec0: 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 6f 75  te extensions ou
fed0: 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64 20  t of the shared 
fee0: 6c 69 62 72 61 72 79 0a 20 20 66 69 6c 65 20 6e  library.  file n
fef0: 61 6d 65 64 20 3c 69 3e 58 3c 2f 69 3e 20 75 73  amed <i>X</i> us
ff00: 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f  ing the entry po
ff10: 69 6e 74 20 3c 69 3e 59 3c 2f 69 3e 2e 20 20 54  int <i>Y</i>.  T
ff20: 68 65 20 72 65 73 75 6c 74 0a 20 20 69 73 20 61  he result.  is a
ff30: 20 4e 55 4c 4c 2e 20 20 49 66 20 3c 69 3e 59 3c   NULL.  If <i>Y<
ff40: 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74  /i> is omitted t
ff50: 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
ff60: 65 6e 74 72 79 20 70 6f 69 6e 74 0a 20 20 6f 66  entry point.  of
ff70: 20 3c 62 3e 73 71 6c 69 74 65 33 5f 65 78 74 65   <b>sqlite3_exte
ff80: 6e 73 69 6f 6e 5f 69 6e 69 74 3c 2f 62 3e 20 69  nsion_init</b> i
ff90: 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 66 75  s used.  This fu
ffa0: 6e 63 74 69 6f 6e 20 72 61 69 73 65 73 0a 20 20  nction raises.  
ffb0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20  an exception if 
ffc0: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 61  the extension fa
ffd0: 69 6c 73 20 74 6f 20 6c 6f 61 64 20 6f 72 20 69  ils to load or i
ffe0: 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63  nitialize correc
fff0: 74 6c 79 2e 0a 0a 20 20 3c 70 3e 54 68 69 73 20  tly...  <p>This 
10000 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61  function will fa
10010 69 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e 73  il if the extens
10020 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ion attempts to 
10030 6d 6f 64 69 66 79 0a 20 20 6f 72 20 64 65 6c 65  modify.  or dele
10040 74 65 20 61 20 53 51 4c 20 66 75 6e 63 74 69 6f  te a SQL functio
10050 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n or collating s
10060 65 71 75 65 6e 63 65 2e 20 20 54 68 65 0a 20 20  equence.  The.  
10070 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61 64  extension can ad
10080 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20  d new functions 
10090 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
100a0 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e 6e  uences, but cann
100b0 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64  ot.  modify or d
100c0 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 66  elete existing f
100d0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
100e0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
100f0 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65 20  because.  those 
10100 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  functions and/or
10110 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10120 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75 73  nces might be us
10130 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20 69  ed elsewhere.  i
10140 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  n the currently 
10150 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74  running SQL stat
10160 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64 20  ement.  To load 
10170 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68 61  an extension tha
10180 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20 64  t.  changes or d
10190 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e 73  eletes functions
101a0 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
101b0 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68 65  quences, use the
101c0 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64  .  [sqlite3_load
101d0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43 2d  _extension()] C-
101e0 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f 70  language API.</p
101f0 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f  >.}..funcdef {lo
10200 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52  wer(X)} {} {.  R
10210 65 74 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20  eturn a copy of 
10220 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20  string <i>X</i> 
10230 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
10240 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
10250 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
10260 61 73 65 2e 20 20 54 68 65 20 64 65 66 61 75 6c  ase.  The defaul
10270 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72  t built-in lower
10280 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b  () function work
10290 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68  s.  for ASCII ch
102a0 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20  aracters only.  
102b0 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65  To do case conve
102c0 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53  rsions on non-AS
102d0 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73  CII.  characters
102e0 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65  , load the ICU e
102f0 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  xtension..}..fun
10300 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c  cdef {ltrim(X) l
10310 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
10320 20 20 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e    Return a strin
10330 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
10340 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
10350 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
10360 61 74 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e  at appear in <i>
10370 59 3c 2f 69 3e 20 66 72 6f 6d 20 74 68 65 20 6c  Y</i> from the l
10380 65 66 74 20 73 69 64 65 20 6f 66 20 3c 69 3e 58  eft side of <i>X
10390 3c 2f 69 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c  </i>..  If the <
103a0 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74  i>Y</i> argument
103b0 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 73 70 61   is omitted, spa
103c0 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e  ces are removed.
103d0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
103e0 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 6d 61 78 43  (X,Y,...)} {maxC
103f0 6f 72 65 46 75 6e 63 20 6d 61 78 7d 20 7b 0a 20  oreFunc max} {. 
10400 20 52 65 74 75 72 6e 20 74 68 65 20 61 72 67 75   Return the argu
10410 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d 61  ment with the ma
10420 78 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20 4f 72  ximum value.  Or
10430 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20   return NULL if 
10440 61 6e 79 20 61 72 67 75 6d 65 6e 74 0a 20 20 69  any argument.  i
10450 73 20 4e 55 4c 4c 2e 0a 20 20 4e 6f 74 65 20 74  s NULL..  Note t
10460 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e  hat <b>max()</b>
10470 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e   is a simple fun
10480 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20  ction when.  it 
10490 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72  has 2 or more ar
104a0 67 75 6d 65 6e 74 73 20 62 75 74 20 63 6f 6e 76  guments but conv
104b0 65 72 74 73 20 74 6f 20 61 6e 20 61 67 67 72 65  erts to an aggre
104c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 66  gate function if
104d0 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20   given.  only a 
104e0 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e  single argument.
104f0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
10500 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 6d 69 6e 43  (X,Y,...)} {minC
10510 6f 72 65 46 75 6e 63 20 6d 69 6e 7d 20 7b 0a 20  oreFunc min} {. 
10520 20 52 65 74 75 72 6e 20 74 68 65 20 61 72 67 75   Return the argu
10530 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d 69  ment with the mi
10540 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 20 0a 20 20  nimum value. .  
10550 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e  Note that <b>min
10560 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70  ()</b> is a simp
10570 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e  le function when
10580 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d  .  it has 2 or m
10590 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75  ore arguments bu
105a0 74 20 63 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e  t converts to an
105b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
105c0 69 6f 6e 20 69 66 20 67 69 76 65 6e 0a 20 20 6f  ion if given.  o
105d0 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
105e0 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  ument..}..funcde
105f0 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20  f {nullif(X,Y)} 
10600 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68  {} {.  Return th
10610 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
10620 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   if the argument
10630 73 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2c  s are different,
10640 20 0a 20 20 6f 74 68 65 72 77 69 73 65 20 72 65   .  otherwise re
10650 74 75 72 6e 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75  turn NULL..}..fu
10660 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d  ncdef {quote(X)}
10670 20 7b 7d 20 7b 0a 20 20 54 68 69 73 20 72 6f 75   {} {.  This rou
10680 74 69 6e 65 20 72 65 74 75 72 6e 73 20 61 20 73  tine returns a s
10690 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74  tring which is t
106a0 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20 69 74  he value of.  it
106b0 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61  s argument suita
106c0 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f  ble for inclusio
106d0 6e 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 20 53  n into another S
106e0 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  QL statement..  
106f0 53 74 72 69 6e 67 73 20 61 72 65 20 73 75 72 72  Strings are surr
10700 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65  ounded by single
10710 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65 73 63  -quotes with esc
10720 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72  apes on interior
10730 20 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65   quotes.  as nee
10740 64 65 64 2e 20 20 42 4c 4f 42 73 20 61 72 65 20  ded.  BLOBs are 
10750 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64  encoded as hexad
10760 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e  ecimal literals.
10770 0a 20 20 53 51 4c 69 74 65 20 75 73 65 73 20 74  .  SQLite uses t
10780 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74  his function int
10790 65 72 6e 61 6c 6c 79 20 69 6e 20 69 74 73 20 69  ernally in its i
107a0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
107b0 20 5b 56 41 43 55 55 4d 5d 0a 20 20 73 6f 20 69   [VACUUM].  so i
107c0 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
107d0 69 73 20 6f 76 65 72 6c 6f 61 64 69 6e 67 20 74  is overloading t
107e0 6f 20 70 72 6f 76 69 64 65 20 69 6e 63 6f 6d 70  o provide incomp
107f0 61 74 69 62 6c 65 20 62 65 68 61 76 69 6f 72 2c  atible behavior,
10800 20 74 68 65 0a 20 20 5b 56 41 43 55 55 4d 5d 20   the.  [VACUUM] 
10810 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 6c 69 6b  command will lik
10820 65 6c 79 20 63 65 61 73 65 20 74 6f 20 77 6f 72  ely cease to wor
10830 6b 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72  k..}..funcdef {r
10840 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20  andom()} {} {.  
10850 52 65 74 75 72 6e 20 61 20 70 73 65 75 64 6f 2d  Return a pseudo-
10860 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20  random integer. 
10870 20 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37   between -922337
10880 32 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e  2036854775808 an
10890 64 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34  d +9223372036854
108a0 37 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64  775807..}..funcd
108b0 65 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e  ef {randomblob(N
108c0 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
108d0 20 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 2d 62 79 74   an <i>N</i>-byt
108e0 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e  e blob containin
108f0 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20  g pseudo-random 
10900 62 79 74 65 73 2e 0a 20 20 3c 69 3e 4e 3c 2f 69  bytes..  <i>N</i
10910 3e 20 73 68 6f 75 6c 64 20 62 65 20 61 20 70 6f  > should be a po
10920 73 74 69 76 65 20 69 6e 74 65 67 65 72 2e 0a 0a  stive integer...
10930 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c    <p>Hint:  appl
10940 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e  ications can gen
10950 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75  erate globally u
10960 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72  nique identifier
10970 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66  s.  using this f
10980 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72  unction together
10990 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e   with [hex()] an
109a0 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d  d/or.  [lower()]
109b0 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a   like this:</p>.
109c0 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  .  <blockquote>.
109d0 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62    hex(randomblob
109e0 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20  (16))<br></br>. 
109f0 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f   lower(hex(rando
10a00 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f  mblob(16))).  </
10a10 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66  blockquote>.}..f
10a20 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28  uncdef {replace(
10a30 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 52  X,Y,Z)} {} {.  R
10a40 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66  eturn a string f
10a50 6f 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74  ormed by substit
10a60 75 74 69 6e 67 20 73 74 72 69 6e 67 20 3c 69 3e  uting string <i>
10a70 5a 3c 2f 69 3e 20 66 6f 72 0a 20 20 65 76 65 72  Z</i> for.  ever
10a80 79 20 6f 63 63 75 72 72 61 6e 63 65 20 6f 66 20  y occurrance of 
10a90 73 74 72 69 6e 67 20 3c 69 3e 59 3c 2f 69 3e 20  string <i>Y</i> 
10aa0 69 6e 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f  in string <i>X</
10ab0 69 3e 2e 20 20 54 68 65 20 5b 42 49 4e 41 52 59  i>.  The [BINARY
10ac0 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ].  collating se
10ad0 71 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66  quence is used f
10ae0 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  or comparisons. 
10af0 20 49 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   If <i>Y</i> is 
10b00 61 6e 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e  an empty.  strin
10b10 67 20 74 68 65 6e 20 72 65 74 75 72 6e 20 3c 69  g then return <i
10b20 3e 58 3c 2f 69 3e 20 75 6e 63 68 61 6e 67 65 64  >X</i> unchanged
10b30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f  ..}..funcdef {ro
10b40 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58 2c 59  und(X) round(X,Y
10b50 29 7d 20 7b 7d 20 7b 0a 20 20 52 6f 75 6e 64 20  )} {} {.  Round 
10b60 6f 66 66 20 74 68 65 20 6e 75 6d 62 65 72 20 3c  off the number <
10b70 69 3e 58 3c 2f 69 3e 20 74 6f 20 3c 69 3e 59 3c  i>X</i> to <i>Y<
10b80 2f 69 3e 20 64 69 67 69 74 73 20 74 6f 20 74 68  /i> digits to th
10b90 65 0a 20 20 72 69 67 68 74 20 6f 66 20 74 68 65  e.  right of the
10ba0 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20   decimal point. 
10bb0 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e   If the <i>Y</i>
10bc0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
10bd0 74 74 65 64 2c 20 30 20 69 73 20 0a 20 20 61 73  tted, 0 is .  as
10be0 73 75 6d 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  sumed..}..funcde
10bf0 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72 69  f {rtrim(X) rtri
10c00 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52  m(X,Y)} {} {.  R
10c10 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66  eturn a string f
10c20 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
10c30 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
10c40 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
10c50 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c 2f  appear in <i>Y</
10c60 69 3e 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68  i> from the righ
10c70 74 20 73 69 64 65 20 6f 66 20 3c 69 3e 58 3c 2f  t side of <i>X</
10c80 69 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c 69 3e  i>..  If the <i>
10c90 59 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69  Y</i> argument i
10ca0 73 20 6f 6d 69 74 74 65 64 2c 20 73 70 61 63 65  s omitted, space
10cb0 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d  s are removed..}
10cc0 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64  ..funcdef {sound
10cd0 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 43 6f  ex(X)} {} {.  Co
10ce0 6d 70 75 74 65 20 74 68 65 20 73 6f 75 6e 64 65  mpute the sounde
10cf0 78 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68  x encoding of th
10d00 65 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69  e string <i>X</i
10d10 3e 2e 0a 20 20 54 68 65 20 73 74 72 69 6e 67 20  >..  The string 
10d20 22 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e  "?000" is return
10d30 65 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ed if the argume
10d40 6e 74 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 54 68  nt is NULL..  Th
10d50 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
10d60 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69  mitted from SQLi
10d70 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20  te by default.. 
10d80 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69   It is only avai
10d90 6c 61 62 6c 65 20 74 68 65 20 2d 44 53 51 4c 49  lable the -DSQLI
10da0 54 45 5f 53 4f 55 4e 44 45 58 3d 31 20 63 6f 6d  TE_SOUNDEX=1 com
10db0 70 69 6c 65 72 20 6f 70 74 69 6f 6e 0a 20 20 69  piler option.  i
10dc0 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69  s used when SQLi
10dd0 74 65 20 69 73 20 62 75 69 6c 74 2e 0a 7d 0a 0a  te is built..}..
10de0 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
10df0 73 6f 75 72 63 65 5f 69 64 28 29 7d 20 7b 73 71  source_id()} {sq
10e00 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 7d 20  lite_source_id} 
10e10 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 73 74 72  {.  Return a str
10e20 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66  ing that identif
10e30 69 65 73 20 74 68 65 20 73 70 65 63 69 66 69 63  ies the specific
10e40 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
10e50 73 6f 75 72 63 65 20 63 6f 64 65 0a 20 20 74 68  source code.  th
10e60 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62  at was used to b
10e70 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 20  uild the SQLite 
10e80 6c 69 62 72 61 72 79 2e 20 20 54 68 65 20 72 65  library.  The re
10e90 74 75 72 6e 20 73 74 72 69 6e 67 20 62 65 67 69  turn string begi
10ea0 6e 73 20 77 69 74 68 0a 20 20 74 68 65 20 64 61  ns with.  the da
10eb0 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74  te and time that
10ec0 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   the source code
10ed0 20 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20   was checked in 
10ee0 61 6e 64 20 69 73 20 66 6f 6c 6c 6f 77 73 20 62  and is follows b
10ef0 79 0a 20 20 61 6e 20 53 48 41 31 20 68 61 73 68  y.  an SHA1 hash
10f00 20 74 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69   that uniquely i
10f10 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 73 6f  dentifies the so
10f20 75 72 63 65 20 74 72 65 65 2e 20 20 54 68 69 73  urce tree.  This
10f30 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20 61   function is.  a
10f40 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20 61 72  n SQL wrapper ar
10f50 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
10f60 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43 20  3_sourceid()] C 
10f70 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
10f80 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65  ncdef {sqlite_ve
10f90 72 73 69 6f 6e 28 29 7d 20 7b 73 71 6c 69 74 65  rsion()} {sqlite
10fa0 5f 76 65 72 73 69 6f 6e 7d 20 7b 0a 20 20 52 65  _version} {.  Re
10fb0 74 75 72 6e 20 74 68 65 20 76 65 72 73 69 6f 6e  turn the version
10fc0 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
10fd0 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 20  SQLite library. 
10fe0 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67   that is running
10ff0 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 33 2e  .  Example:  "3.
11000 35 2e 39 22 2e 20 20 54 68 69 73 20 66 75 6e 63  5.9".  This func
11010 74 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20  tion is an SQL. 
11020 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
11030 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62  the [sqlite3_lib
11040 76 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74  version()] C-int
11050 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64  erface..}..funcd
11060 65 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a  ef {substr(X,Y,Z
11070 29 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b  ) substr(X,Y)} {
11080 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 20 73  } {.  Return a s
11090 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70 75  ubstring of inpu
110a0 74 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69  t string <i>X</i
110b0 3e 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20  > that begins.  
110c0 77 69 74 68 20 74 68 65 20 3c 69 3e 59 3c 2f 69  with the <i>Y</i
110d0 3e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  >-th character a
110e0 6e 64 20 77 68 69 63 68 20 69 73 20 3c 69 3e 5a  nd which is <i>Z
110f0 3c 2f 69 3e 20 63 68 61 72 61 63 74 65 72 73 20  </i> characters 
11100 6c 6f 6e 67 2e 0a 20 20 49 66 20 3c 69 3e 5a 3c  long..  If <i>Z<
11110 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74  /i> is omitted t
11120 68 65 6e 20 61 6c 6c 20 63 68 61 72 61 63 74 65  hen all characte
11130 72 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e  r through the en
11140 64 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 0a  d of the string.
11150 20 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a    are returned..
11160 20 20 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20    The left-most 
11170 63 68 61 72 61 63 74 65 72 20 6f 66 20 3c 69 3e  character of <i>
11180 58 3c 2f 69 3e 20 69 73 20 6e 75 6d 62 65 72 20  X</i> is number 
11190 31 2e 20 20 49 66 20 3c 69 3e 59 3c 2f 69 3e 20  1.  If <i>Y</i> 
111a0 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
111b0 65 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72  e the first char
111c0 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62  acter of the sub
111d0 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20  string is found 
111e0 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d  by counting from
111f0 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74   the.  right rat
11200 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66  her than the lef
11210 74 2e 20 20 49 66 20 3c 69 3e 58 3c 2f 69 3e 20  t.  If <i>X</i> 
11220 69 73 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e  is string.  then
11230 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 64 69   characters indi
11240 63 65 73 20 72 65 66 65 72 20 74 6f 20 61 63 74  ces refer to act
11250 75 61 6c 20 55 54 46 2d 38 20 63 68 61 72 61 63  ual UTF-8 charac
11260 74 65 72 73 2e 20 20 49 66 0a 20 20 3c 69 3e 58  ters.  If.  <i>X
11270 3c 2f 69 3e 20 69 73 20 61 20 42 4c 4f 42 20 74  </i> is a BLOB t
11280 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
11290 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
112a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
112b0 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
112c0 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e  {.  Return the n
112d0 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61  umber of row cha
112e0 6e 67 65 73 20 63 61 75 73 65 64 20 62 79 20 49  nges caused by I
112f0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72  NSERT, UPDATE or
11300 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d   DELETE.  statem
11310 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63  ents since the c
11320 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20  urrent database 
11330 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f  connection was o
11340 70 65 6e 65 64 2e 0a 20 20 54 68 69 73 20 66 75  pened..  This fu
11350 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
11360 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
11370 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
11380 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b  anges()].  C/C++
11390 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66   interface..}..f
113a0 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20  uncdef {trim(X) 
113b0 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
113c0 20 20 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e    Return a strin
113d0 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
113e0 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
113f0 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
11400 61 74 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e  at appear in <i>
11410 59 3c 2f 69 3e 20 66 72 6f 6d 20 62 6f 74 68 20  Y</i> from both 
11420 65 6e 64 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e  ends of <i>X</i>
11430 2e 0a 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c  ..  If the <i>Y<
11440 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20  /i> argument is 
11450 6f 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73 20  omitted, spaces 
11460 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a  are removed..}..
11470 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28  funcdef {typeof(
11480 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72  X)} {} {.  Retur
11490 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  n the [datatype]
114a0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
114b0 6f 6e 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 54 68  on <i>X</i>.  Th
114c0 65 20 6f 6e 6c 79 20 0a 20 20 72 65 74 75 72 6e  e only .  return
114d0 20 76 61 6c 75 65 73 20 61 72 65 20 22 6e 75 6c   values are "nul
114e0 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22  l", "integer", "
114f0 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 61  real", "text", a
11500 6e 64 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75  nd "blob"..}..fu
11510 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d  ncdef {upper(X)}
11520 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61   {} {.  Return a
11530 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73   copy of input s
11540 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 63  tring <i>X</i> c
11550 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 0a  onverted to all.
11560 20 20 75 70 70 65 72 2d 63 61 73 65 20 6c 65 74    upper-case let
11570 74 65 72 73 2e 20 20 54 68 65 20 69 6d 70 6c 65  ters.  The imple
11580 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 69  mentation of thi
11590 73 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20  s function uses 
115a0 74 68 65 20 43 20 6c 69 62 72 61 72 79 0a 20 20  the C library.  
115b0 72 6f 75 74 69 6e 65 20 3c 62 3e 74 6f 75 70 70  routine <b>toupp
115c0 65 72 28 29 3c 2f 62 3e 20 77 68 69 63 68 20 6d  er()</b> which m
115d0 65 61 6e 73 20 69 74 20 6d 61 79 20 6e 6f 74 20  eans it may not 
115e0 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
115f0 6e 20 0a 20 20 6e 6f 6e 2d 41 53 43 49 49 20 55  n .  non-ASCII U
11600 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 0a 7d 0a  TF-8 strings..}.
11610 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c  .funcdef {zerobl
11620 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  ob(N)} {} {.  Re
11630 74 75 72 6e 20 61 20 42 4c 4f 42 20 63 6f 6e 73  turn a BLOB cons
11640 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65  isting of N byte
11650 73 20 6f 66 20 30 78 30 30 2e 20 20 53 51 4c 69  s of 0x00.  SQLi
11660 74 65 0a 20 20 6d 61 6e 61 67 65 73 20 74 68 65  te.  manages the
11670 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72  se zeroblobs ver
11680 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20  y efficiently.  
11690 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65  Zeroblobs can be
116a0 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72   used to.  reser
116b0 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20 42  ve space for a B
116c0 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74 65  LOB that is late
116d0 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20  r written using 
116e0 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  .  [sqlite3_blob
116f0 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d  _open() | increm
11700 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e  ental BLOB I/O].
11710 0a 20 20 54 68 69 73 20 53 51 4c 20 66 75 6e 63  .  This SQL func
11720 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tion is implemen
11730 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73  ted using the [s
11740 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65  qlite3_result_ze
11750 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74  roblob()].  rout
11760 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43  ine from the C/C
11770 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
11780 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  </tcl>.</table>.
11790 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
117a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117e0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
117f0 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e  ate And Time Fun
11800 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63  ctions} datefunc
11810 20 7b 64 61 74 65 66 75 6e 63 7d 0a 3c 2f 74 63   {datefunc}.</tc
11820 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73  l>..<p>.SQLite s
11830 75 70 70 6f 72 74 73 20 66 69 76 65 20 64 61 74  upports five dat
11840 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
11850 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ions as follows:
11860 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a  .</p>..<p>.<ol>.
11870 3c 6c 69 3e 20 3c 62 3e 64 61 74 65 28 3c 2f 62  <li> <b>date(</b
11880 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
11890 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
118a0 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
118b0 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c  /b> </li>.<li> <
118c0 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69  b>time(</b><i>ti
118d0 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
118e0 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
118f0 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f  .</i><b>)</b> </
11900 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 64 61 74 65  li>.<li> <b>date
11910 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  time(</b><i>time
11920 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
11930 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
11940 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69  /i><b>)</b> </li
11950 3e 0a 3c 6c 69 3e 20 3c 62 3e 6a 75 6c 69 61 6e  >.<li> <b>julian
11960 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73  day(</b><i>times
11970 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c  tring, modifier,
11980 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f   modifier, ...</
11990 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e  i><b>)</b> </li>
119a0 0a 3c 6c 69 3e 20 3c 62 3e 73 74 72 66 74 69 6d  .<li> <b>strftim
119b0 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c  e(</b><i>format,
119c0 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64   timestring, mod
119d0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
119e0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
119f0 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   </li>.</ol>..<p
11a00 3e 0a 41 6c 6c 20 66 69 76 65 20 66 75 6e 63 74  >.All five funct
11a10 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65  ions take a time
11a20 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72   string as an ar
11a30 67 75 6d 65 6e 74 2e 20 54 68 65 20 74 69 6d 65  gument. The time
11a40 20 73 74 72 69 6e 67 0a 69 73 20 66 6f 6c 6c 6f   string.is follo
11a50 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
11a60 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a  ore modifiers. .
11a70 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20 66  The strftime() f
11a80 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61 6b  unction also tak
11a90 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69  es a format stri
11aa0 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74 20  ng as its first 
11ab0 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a  argument..</p>..
11ac0 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e 64  <p>.The date and
11ad0 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
11ae0 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66 0a  use a subset of.
11af0 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
11b00 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
11b10 2f 77 69 6b 69 2f 49 4f 53 5f 38 36 30 31 22 3e  /wiki/IOS_8601">
11b20 49 53 30 2d 38 36 30 31 3c 2f 61 3e 20 64 61 74  IS0-8601</a> dat
11b30 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61  e and time.forma
11b40 74 73 2e 0a 54 68 65 20 64 61 74 65 28 29 20 66  ts..The date() f
11b50 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
11b60 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69 73  the date in this
11b70 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d 4d   format: YYYY-MM
11b80 2d 44 44 2e 20 0a 54 68 65 20 74 69 6d 65 28 29  -DD. .The time()
11b90 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
11ba0 73 20 74 68 65 20 74 69 6d 65 20 61 73 20 48 48  s the time as HH
11bb0 3a 4d 4d 3a 53 53 2e 20 0a 54 68 65 20 64 61 74  :MM:SS. .The dat
11bc0 65 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  etime() function
11bd0 20 72 65 74 75 72 6e 73 20 22 59 59 59 59 2d 4d   returns "YYYY-M
11be0 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20  M-DD HH:MM:SS". 
11bf0 0a 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29  .The julianday()
11c00 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
11c10 73 20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22  s the .<a href="
11c20 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
11c30 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c  dia.org/wiki/Jul
11c40 69 61 6e 5f 64 61 79 22 3e 4a 75 6c 69 61 6e 20  ian_day">Julian 
11c50 64 61 79 3c 2f 61 3e 20 2d 20 74 68 65 0a 6e 75  day</a> - the.nu
11c60 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
11c70 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e  ce noon in Green
11c80 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72  wich on November
11c90 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a   24, 4714 B.C. .
11ca0 28 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f  (<a href="http:/
11cb0 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
11cc0 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63  g/wiki/Proleptic
11cd0 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  _Gregorian_calen
11ce0 64 61 72 22 3e 50 72 6f 6c 65 70 74 69 63 0a 47  dar">Proleptic.G
11cf0 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
11d00 72 3c 2f 61 3e 29 2e 20 0a 54 68 65 20 73 74 72  r</a>). .The str
11d10 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65 20  ftime() routine 
11d20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65  returns the date
11d30 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f 72   formatted accor
11d40 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f 72  ding to .the for
11d50 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63 69  mat string speci
11d60 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72 73  fied as the firs
11d70 74 20 61 72 67 75 6d 65 6e 74 2e 0a 54 68 65 20  t argument..The 
11d80 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75  format string su
11d90 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20  pports the most 
11da0 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74  common substitut
11db0 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  ions found in th
11dc0 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70  e .<a href="http
11dd0 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67  ://opengroup.org
11de0 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39  /onlinepubs/0079
11df0 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69  08799/xsh/strfti
11e00 6d 65 2e 68 74 6d 6c 22 3e 0a 73 74 72 66 74 69  me.html">.strfti
11e10 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f 61  me() function</a
11e20 3e 20 66 72 6f 6d 20 0a 74 68 65 20 73 74 61 6e  > from .the stan
11e30 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 70  dard C library p
11e40 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73  lus two new subs
11e50 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e  titutions, %f an
11e60 64 20 25 4a 2e 0a 54 68 65 20 66 6f 6c 6c 6f 77  d %J..The follow
11e70 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65 74  ing is a complet
11e80 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20  e list of valid 
11e90 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73 74  strftime() subst
11ea0 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a  itutions:.</p>..
11eb0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
11ec0 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 63  ble border="0" c
11ed0 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20 63  ellpadding="0" c
11ee0 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a  ellspacing="0">.
11ef0 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64 74  <tr><td><td widt
11f00 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e  h="10"><td></tr>
11f10 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c 74  ..<tr><td> %d <t
11f20 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d 6f  d><td> day of mo
11f30 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64 3e  nth: 00.<tr><td>
11f40 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72 61   %f <td><td> fra
11f50 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73 3a  ctional seconds:
11f60 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64 3e   SS.SSS.<tr><td>
11f70 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f 75   %H <td><td> hou
11f80 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c 74  r: 00-24 .<tr><t
11f90 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20 64  d> %j <td><td> d
11fa0 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31 2d  ay of year: 001-
11fb0 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a 20  366.<tr><td> %J 
11fc0 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e 20  <td><td> Julian 
11fd0 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  day number.<tr><
11fe0 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e 20  td> %m <td><td> 
11ff0 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74 72  month: 01-12.<tr
12000 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74 64  ><td> %M <td><td
12010 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39 0a  > minute: 00-59.
12020 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64 3e  <tr><td> %s <td>
12030 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69 6e  <td> seconds sin
12040 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c 74  ce 1970-01-01.<t
12050 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c 74  r><td> %S <td><t
12060 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d 35  d> seconds: 00-5
12070 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c 74  9.<tr><td> %w <t
12080 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77 65  d><td> day of we
12090 65 6b 20 30 2d 36 20 77 69 74 68 20 73 75 6e 64  ek 0-6 with sund
120a0 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20 25  ay==0.<tr><td> %
120b0 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b 20  W <td><td> week 
120c0 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a 3c  of year: 00-53.<
120d0 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e 3c  tr><td> %Y <td><
120e0 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d 39  td> year: 0000-9
120f0 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25 20  999.<tr><td> %% 
12100 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61 62  <td><td> %.</tab
12110 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
12120 3e 0a 0a 3c 70 3e 0a 4e 6f 74 69 63 65 20 74 68  >..<p>.Notice th
12130 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74  at all other dat
12140 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
12150 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72  ions can be expr
12160 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f  essed.in terms o
12170 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f  f strftime():.</
12180 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
12190 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
121a0 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
121b0 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
121c0 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46  0">.<tr><td><b>F
121d0 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77  unction</b><td w
121e0 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62  idth="30"><td><b
121f0 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66  >Equivalent strf
12200 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c  time()</b>.<tr><
12210 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20  td>   date(...) 
12220 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
12230 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
12240 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  d', ...).<tr><td
12250 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20  >   time(...)   
12260 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
12270 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27  ftime('%H:%M:%S'
12280 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
12290 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20    datetime(...) 
122a0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
122b0 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48  ime('%Y-%m-%d %H
122c0 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
122d0 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64  r><td>   juliand
122e0 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e  ay(...) <td><td>
122f0 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c    strftime('%J',
12300 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c   ...).</table>.<
12310 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
12320 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f  >.The only reaso
12330 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67  ns for providing
12340 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72   functions other
12350 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29   than strftime()
12360 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65   is.for convenie
12370 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69  nce and for effi
12380 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68  ciency..</p>..<h
12390 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f  3>Time Strings</
123a0 68 33 3e 0a 0a 3c 70 3e 41 20 74 69 6d 65 20 73  h3>..<p>A time s
123b0 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e 20  tring can be in 
123c0 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
123d0 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f 70  wing formats:</p
123e0 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e  >..<ol>.<li> <i>
123f0 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c  YYYY-MM-DD</i>.<
12400 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
12410 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  D HH:MM</i>.<li>
12420 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
12430 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  H:MM:SS</i>.<li>
12440 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48   <i>YYYY-MM-DD H
12450 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a  H:MM:SS.SSS</i>.
12460 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
12470 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69  DD</i><b>T</b><i
12480 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20  >HH:MM</i>.<li> 
12490 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
124a0 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
124b0 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  M:SS</i>.<li> <i
124c0 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
124d0 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a  b>T</b><i>HH:MM:
124e0 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
124f0 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
12500 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  > <i>HH:MM:SS</i
12510 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a  >.<li> <i>HH:MM:
12520 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
12530 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20  <b>now</b>.<li> 
12540 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f 69  <i>DDDDDDDDDD</i
12550 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 49 6e 20  >.</ol>..<p>.In 
12560 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67  formats 5 throug
12570 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20  h 7, the "T" is 
12580 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63  a literal charac
12590 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a  ter separating .
125a0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65  the date and the
125b0 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72   time, as requir
125c0 65 64 20 62 79 20 0a 3c 61 20 68 72 65 66 3d 22  ed by .<a href="
125d0 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f  http://www.w3c.o
125e0 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74  rg/TR/NOTE-datet
125f0 69 6d 65 22 3e 49 53 4f 2d 38 36 30 31 3c 2f 61  ime">ISO-8601</a
12600 3e 2e 20 0a 46 6f 72 6d 61 74 73 20 38 20 74 68  >. .Formats 8 th
12610 72 6f 75 67 68 20 31 30 20 74 68 61 74 20 73 70  rough 10 that sp
12620 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d  ecify only a tim
12630 65 20 61 73 73 75 6d 65 20 61 20 64 61 74 65 20  e assume a date 
12640 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20  of .2000-01-01. 
12650 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73  Format 11, the s
12660 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20  tring 'now', is 
12670 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74  converted into t
12680 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65  he .current date
12690 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74   and time as obt
126a0 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78  ained from the x
126b0 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68  CurrentTime meth
126c0 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74  od.of the [sqlit
126d0 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69  e3_vfs] object i
126e0 6e 20 75 73 65 2e 0a 3c 61 20 68 72 65 66 3d 22  n use..<a href="
126f0 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65  http://en.wikipe
12700 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f  dia.org/wiki/Coo
12710 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73  rdinated_Univers
12720 61 6c 5f 54 69 6d 65 22 3e 0a 55 6e 69 76 65 72  al_Time">.Univer
12730 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20  sal Coordinated 
12740 54 69 6d 65 20 28 55 54 43 29 3c 2f 61 3e 20 69  Time (UTC)</a> i
12750 73 20 75 73 65 64 2e 20 0a 46 6f 72 6d 61 74 20  s used. .Format 
12760 31 32 20 69 73 20 74 68 65 20 0a 3c 61 20 68 72  12 is the .<a hr
12770 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ef="http://en.wi
12780 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
12790 2f 4a 75 6c 69 61 6e 5f 64 61 79 22 3e 4a 75 6c  /Julian_day">Jul
127a0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 3c 2f  ian day number</
127b0 61 3e 0a 65 78 70 72 65 73 73 65 64 20 61 73 20  a>.expressed as 
127c0 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
127d0 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68   value..</p>..<h
127e0 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e  3>Modifiers</h3>
127f0 0a 0a 3c 70 3e 54 68 65 20 74 69 6d 65 20 73 74  ..<p>The time st
12800 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c  ring can be foll
12810 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
12820 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74  more modifiers t
12830 68 61 74 20 0a 61 6c 74 65 72 20 74 68 65 20 64  hat .alter the d
12840 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72  ate and time str
12850 69 6e 67 2e 20 20 45 61 63 68 20 6d 6f 64 69 66  ing.  Each modif
12860 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f  ier.is a transfo
12870 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
12880 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74  applied to the t
12890 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20 69 74  ime string to it
128a0 73 20 6c 65 66 74 2e 0a 4d 6f 64 69 66 69 65 72  s left..Modifier
128b0 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66 72  s are applied fr
128c0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
128d0 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72  ; order is impor
128e0 74 61 6e 74 2e 0a 54 68 65 20 61 76 61 69 6c 61  tant..The availa
128f0 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20 61 72  ble modifiers ar
12900 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c 2f 70  e as follows.</p
12910 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e 4e 4e  >..<ol>.<li> NNN
12920 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 68   days.<li> NNN h
12930 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 69  ours.<li> NNN mi
12940 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e 2e 4e  nutes.<li> NNN.N
12950 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c 69 3e  NNN seconds.<li>
12960 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c 69 3e   NNN months.<li>
12970 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69 3e 20   NNN years.<li> 
12980 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 0a 3c  start of month.<
12990 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79 65 61  li> start of yea
129a0 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  r.<li> start of 
129b0 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64 61 79  day.<li> weekday
129c0 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70 6f 63   N.<li> unixepoc
129d0 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69 6d 65  h.<li> localtime
129e0 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f 6c 3e  .<li> utc .</ol>
129f0 0a 0a 3c 70 3e 54 68 65 20 66 69 72 73 74 20 73  ..<p>The first s
12a00 69 78 20 6d 6f 64 69 66 69 65 72 73 20 28 31 20  ix modifiers (1 
12a10 74 68 72 6f 75 67 68 20 36 29 20 0a 73 69 6d 70  through 6) .simp
12a20 6c 79 20 61 64 64 20 74 68 65 20 73 70 65 63 69  ly add the speci
12a30 66 69 65 64 20 61 6d 6f 75 6e 74 20 6f 66 20 74  fied amount of t
12a40 69 6d 65 20 74 6f 20 74 68 65 20 64 61 74 65 20  ime to the date 
12a50 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68  .specified by th
12a60 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65  e preceding time
12a70 73 74 72 69 6e 67 2e 0a 4e 6f 74 65 20 74 68 61  string..Note tha
12a80 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d  t "&plusmn;NNN m
12a90 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20  onths" works by 
12aa0 72 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72  rendering the or
12ab0 69 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f  iginal date into
12ac0 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20  .the YYYY-MM-DD 
12ad0 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74  format, adding t
12ae0 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74  he &plusmn;NNN t
12af0 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76  o the MM month v
12b00 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61  alue, then.norma
12b10 6c 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c  lizing the resul
12b20 74 2e 20 20 54 68 75 73 2c 20 66 6f 72 20 65 78  t.  Thus, for ex
12b30 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20  ample, the data 
12b40 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66  2001-03-31 modif
12b50 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68  ied.by '+1 month
12b60 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c  ' initially yiel
12b70 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62  ds 2001-04-31, b
12b80 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61  ut April only ha
12b90 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65  s 30 days.so the
12ba0 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69   date is normali
12bb0 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30  zed to 2001-05-0
12bc0 31 2e 20 20 41 20 73 69 6d 69 6c 61 72 20 65 66  1.  A similar ef
12bd0 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
12be0 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
12bf0 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
12c00 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
12c10 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
12c20 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
12c30 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
12c40 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
12c50 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   four.</p>..<p>T
12c60 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d 6f  he "start of" mo
12c70 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f 75  difiers (7 throu
12c80 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65 20  gh 9) shift the 
12c90 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20 0a  date backwards .
12ca0 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
12cb0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
12cc0 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20 64  month, year or d
12cd0 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ay.</p>..<p>The 
12ce0 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69 66 69  "weekday" modifi
12cf0 65 72 20 61 64 76 61 6e 63 65 73 20 74 68 65 20  er advances the 
12d00 64 61 74 65 20 66 6f 72 77 61 72 64 20 74 6f 20  date forward to 
12d10 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 0a 77  the next date .w
12d20 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61 79  here the weekday
12d30 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75   number is N. Su
12d40 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61  nday is 0, Monda
12d50 79 20 69 73 20 31 2c 20 61 6e 64 20 73 6f 20 66  y is 1, and so f
12d60 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  orth.</p>..<p>Th
12d70 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f  e "unixepoch" mo
12d80 64 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79  difier (11) only
12d90 20 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d   works if it imm
12da0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
12db0 20 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69   .a timestring i
12dc0 6e 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44  n the DDDDDDDDDD
12dd0 20 66 6f 72 6d 61 74 2e 20 0a 54 68 69 73 20 6d   format. .This m
12de0 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74  odifier causes t
12df0 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f  he DDDDDDDDDD to
12e00 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
12e10 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e  not .as a Julian
12e20 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69   day number as i
12e30 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64  t normally would
12e40 20 62 65 2c 20 62 75 74 20 61 73 0a 3c 61 20 68   be, but as.<a h
12e50 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77  ref="http://en.w
12e60 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
12e70 69 2f 55 6e 69 78 5f 74 69 6d 65 22 3e 55 6e 69  i/Unix_time">Uni
12e80 78 20 54 69 6d 65 3c 2f 61 3e 20 2d 20 74 68 65  x Time</a> - the
12e90 20 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f   .number of seco
12ea0 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e 20  nds since 1970. 
12eb0 20 49 66 20 74 68 65 20 22 75 6e 69 78 65 70 6f   If the "unixepo
12ec0 63 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f 65  ch" modifier doe
12ed0 73 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74  s not.follow a t
12ee0 69 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68 65  imestring of the
12ef0 20 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44 44   form DDDDDDDDDD
12f00 20 77 68 69 63 68 20 65 78 70 72 65 73 73 65 73   which expresses
12f10 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73   the number.of s
12f20 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
12f30 30 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d 6f  0 or if other mo
12f40 64 69 66 69 65 72 73 0a 73 65 70 61 72 61 74 65  difiers.separate
12f50 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22   the "unixepoch"
12f60 20 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 70   modifier from p
12f70 72 69 6f 72 20 44 44 44 44 44 44 44 44 44 44 20  rior DDDDDDDDDD 
12f80 74 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69 6f  then the.behavio
12f90 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
12fa0 44 75 65 20 74 6f 20 70 72 65 63 69 73 69 6f 6e  Due to precision
12fb0 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 69 6d 70   limitations imp
12fc0 6f 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  osed by the impl
12fd0 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 0a  ementations use.
12fe0 6f 66 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65  of 64-bit intege
12ff0 72 73 2c 20 74 68 65 20 22 75 6e 69 78 65 70 6f  rs, the "unixepo
13000 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e 6c  ch" modifier onl
13010 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74 65  y works for.date
13020 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30  s between 0000-0
13030 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61 6e  1-01 00:00:00 an
13040 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30 3a  d 5352-11-01 10:
13050 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d 65  52:47 (unix time
13060 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32 30  s.of -6216721920
13070 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35 31  0 through 106751
13080 39 39 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e  99167).</p>..<p>
13090 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20  The "localtime" 
130a0 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61 73  modifier (12) as
130b0 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20 73  sumes the time s
130c0 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65 66  tring to its lef
130d0 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73 61  t is in.Universa
130e0 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69  l Coordinated Ti
130f0 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64 6a  me (UTC) and adj
13100 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73 74  usts the time.st
13110 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74 20  ring so that it 
13120 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74 69  displays localti
13130 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74 69  me.  If "localti
13140 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74 69  me".follows a ti
13150 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 55  me that is not U
13160 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68  TC, then the beh
13170 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
13180 65 64 2e 0a 54 68 65 20 22 75 74 63 22 20 69 73  ed..The "utc" is
13190 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66   the opposite of
131a0 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22   "localtime".  "
131b0 75 74 63 22 20 61 73 73 75 6d 65 73 20 74 68 61  utc" assumes tha
131c0 74 20 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20  t the string.to 
131d0 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74  its left is in t
131e0 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e  he local timezon
131f0 65 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68  e and adjusts th
13200 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20  at string to be 
13210 69 6e 20 55 54 43 2e 0a 49 66 20 74 68 65 20 70  in UTC..If the p
13220 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e  rior string is n
13230 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c  ot in localtime,
13240 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
13250 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64   of "utc" is.und
13260 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  efined.</p>..<h3
13270 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
13280 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
13290 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e 0a  urrent date.<p>.
132a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c  .<blockquote>SEL
132b0 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29 3b  ECT date('now');
132c0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
132d0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61  p>Compute the la
132e0 73 74 20 64 61 79 20 6f 66 20 74 68 65 20 63 75  st day of the cu
132f0 72 72 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e  rrent month.</p>
13300 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
13310 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
13320 27 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27  'start of month'
13330 2c 27 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20  ,'+1 month','-1 
13340 64 61 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  day');.</blockqu
13350 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65  ote>..<p>Compute
13360 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
13370 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20  me given a unix 
13380 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34  timestamp 109294
13390 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  1466.</p>..<bloc
133a0 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45  kquote>.    SELE
133b0 43 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32  CT datetime(1092
133c0 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f  941466, 'unixepo
133d0 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  ch');.</blockquo
133e0 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20  te>..<p>Compute 
133f0 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
13400 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
13410 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
13420 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e  466, and .compen
13430 73 61 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f  sate for your lo
13440 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70  cal timezone.</p
13450 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
13460 20 20 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d    SELECT datetim
13470 65 28 31 30 39 32 39 34 31 34 36 36 2c 20 27 75  e(1092941466, 'u
13480 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61  nixepoch', 'loca
13490 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  ltime');.</block
134a0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75  quote>..<p>Compu
134b0 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 75  te the current u
134c0 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c 2f  nix timestamp.</
134d0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
134e0 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
134f0 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b 0a  me('%s','now');.
13500 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
13510 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  p>Compute the nu
13520 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
13530 63 65 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f  ce the signing o
13540 66 20 74 68 65 20 55 53 20 44 65 63 6c 61 72 61  f the US Declara
13550 74 69 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64  tion.of Independ
13560 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ent.</p>..<block
13570 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
13580 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29  julianday('now')
13590 20 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37   - julianday('17
135a0 37 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c  76-07-04');.</bl
135b0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f  ockquote>..<p>Co
135c0 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
135d0 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
135e0 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
135f0 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
13600 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
13610 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
13620 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
13630 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
13640 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
13650 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
13660 6f 74 65 3e 0a 0a 3c 70 3e 0a 43 6f 6d 70 75 74  ote>..<p>.Comput
13670 65 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68  e the date of th
13680 65 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20  e first Tuesday 
13690 69 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74  in October.for t
136a0 68 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e  he current year.
136b0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
136c0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74  te>.  SELECT dat
136d0 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
136e0 66 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74  f year','+9 mont
136f0 68 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29  hs','weekday 2')
13700 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  ;.</blockquote>.
13710 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  .<p>Compute the 
13720 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65 20 75  time since the u
13730 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73 65 63  nix epoch in sec
13740 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74 72 66  onds .(like strf
13750 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
13760 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64 65 73   except includes
13770 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
13780 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ):</p>..<blockqu
13790 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 28 6a  ote>.  SELECT (j
137a0 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
137b0 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38 36 34  - 2440587.5)*864
137c0 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  00.0;.</blockquo
137d0 74 65 3e 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73  te>..<h3>Caveats
137e0 20 41 6e 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a   And Bugs</h3>..
137f0 3c 70 3e 54 68 65 20 63 6f 6d 70 75 74 61 74 69  <p>The computati
13800 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65  on of local time
13810 20 64 65 70 65 6e 64 73 20 68 65 61 76 69 6c 79   depends heavily
13820 20 6f 6e 20 74 68 65 20 77 68 69 6d 20 0a 6f 66   on the whim .of
13830 20 70 6f 6c 69 74 69 63 69 61 6e 73 20 61 6e 64   politicians and
13840 20 69 73 20 74 68 75 73 20 64 69 66 66 69 63 75   is thus difficu
13850 6c 74 20 74 6f 20 67 65 74 20 63 6f 72 72 65 63  lt to get correc
13860 74 20 66 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c  t for .all local
13870 65 73 2e 20 49 6e 20 74 68 69 73 20 69 6d 70 6c  es. In this impl
13880 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20  ementation, the 
13890 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
138a0 72 79 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63  ry .function loc
138b0 61 6c 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73  altime_r() is us
138c0 65 64 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20  ed to assist in 
138d0 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20  the calculation 
138e0 6f 66 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20  of .local time. 
138f0 20 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f   The .localtime_
13900 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e  r() C function n
13910 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72  ormally only wor
13920 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74  ks for years.bet
13930 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30  ween 1970 and 20
13940 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75  37. For dates ou
13950 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65  tside this range
13960 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70  , SQLite .attemp
13970 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65  ts to map the ye
13980 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76  ar into an equiv
13990 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69  alent year withi
139a0 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64  n .this range, d
139b0 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  o the calculatio
139c0 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20  n, then map the 
139d0 79 65 61 72 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a  year back.</p>..
139e0 0a 3c 70 3e 54 68 65 73 65 20 66 75 6e 63 74 69  .<p>These functi
139f0 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
13a00 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e 20  r dates between 
13a10 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30 30  0000-01-01 00:00
13a20 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32 2d  :00.and 9999-12-
13a30 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75 6c  31 23:59:59 (jul
13a40 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 73  idan day numbers
13a50 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f 75   1721059.5 throu
13a60 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 0a 46  gh 5373484.5)..F
13a70 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69 64 65  or dates outside
13a80 20 74 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65   that range, the
13a90 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73   results of thes
13aa0 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e.functions are 
13ab0 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a  undefined.</p>..
13ac0 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e  <p>Non-Vista Win
13ad0 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f  dows platforms o
13ae0 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20  nly support one 
13af0 73 65 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73  set of DST rules
13b00 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75  . .Vista only su
13b10 70 70 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72  pports two. Ther
13b20 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20  efore, on these 
13b30 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74  platforms, .hist
13b40 6f 72 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75  orical DST calcu
13b50 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20  lations will be 
13b60 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20  incorrect. .For 
13b70 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20  example, in the 
13b80 55 53 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20  US, in 2007 the 
13b90 44 53 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65  DST rules change
13ba0 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69  d. .Non-Vista Wi
13bb0 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20  ndows platforms 
13bc0 61 70 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30  apply the new 20
13bd0 30 37 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f  07 DST rules .to
13be0 20 61 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65   all previous ye
13bf0 61 72 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73  ars as well. Vis
13c00 74 61 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74  ta does somewhat
13c10 20 62 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20   better.getting 
13c20 72 65 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20  results correct 
13c30 62 61 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68  back to 1986, wh
13c40 65 6e 20 74 68 65 20 72 75 6c 65 73 20 77 65 72  en the rules wer
13c50 65 20 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c  e also changed.<
13c60 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65  /p>..<p>All inte
13c70 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e  rnal computation
13c80 73 20 61 73 73 75 6d 65 20 74 68 65 20 0a 3c 61  s assume the .<a
13c90 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e   href="http://en
13ca0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
13cb0 69 6b 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61  iki/Gregorian_ca
13cc0 6c 65 6e 64 61 72 22 3e 0a 47 72 65 67 6f 72 69  lendar">.Gregori
13cd0 61 6e 20 63 61 6c 65 6e 64 61 72 3c 2f 61 3e 20  an calendar</a> 
13ce0 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20 61  system.  It is a
13cf0 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61 74  lso assumed that
13d00 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65 78   every.day is ex
13d10 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63 6f  actly 86400 seco
13d20 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e  nds in duration.
13d30 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
13d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d80 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
13d90 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46 75  on {Aggregate Fu
13da0 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63  nctions} aggfunc
13db0 20 7b 61 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c   {aggfunc}.</tcl
13dc0 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65  >..<p>.The aggre
13dd0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
13de0 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61  hown below are a
13df0 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61  vailable by defa
13e00 75 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  ult.  Additional
13e10 0a 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  .aggregate funct
13e20 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
13e30 43 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75  C may be added u
13e40 73 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74  sing the .[sqlit
13e50 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
13e60 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f  on()]</a>.API.</
13e70 70 3e 0a 0a 3c 70 3e 0a 49 6e 20 61 6e 79 20 61  p>..<p>.In any a
13e80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
13e90 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73  n that takes a s
13ea0 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20  ingle argument, 
13eb0 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61  that argument.ca
13ec0 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
13ed0 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53   the keyword DIS
13ee0 54 49 4e 43 54 2e 20 20 49 6e 20 73 75 63 68 20  TINCT.  In such 
13ef0 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65  cases, duplicate
13f00 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69  .elements are fi
13f10 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62 65  ltered before be
13f20 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20  ing passed into 
13f30 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75  the aggregate fu
13f40 6e 63 74 69 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d  nction..For exam
13f50 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f  ple, the functio
13f60 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63  n "count(distinc
13f70 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72  t X)" will retur
13f80 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
13f90 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20  distinct values 
13fa0 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74  of column X inst
13fb0 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c  ead of the total
13fc0 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e   number of non-n
13fd0 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f  ull.values in co
13fe0 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74  lumn X..</p>..<t
13ff0 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
14000 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74  llpadding=10>.<t
14010 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67  cl>.funcdef {avg
14020 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  (X)} {} {.  Retu
14030 72 6e 20 74 68 65 20 61 76 65 72 61 67 65 20 76  rn the average v
14040 61 6c 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d  alue of all non-
14050 4e 55 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69  NULL <i>X</i> wi
14060 74 68 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20  thin a.  group. 
14070 20 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42   String and BLOB
14080 20 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20   values that do 
14090 6e 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75  not look like nu
140a0 6d 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65  mbers are.  inte
140b0 72 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20  rpreted as 0..  
140c0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
140d0 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
140e0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
140f0 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a  alue as long as.
14100 20 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74    at there is at
14110 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e   least one non-N
14120 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69  ULL input even i
14130 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61  f all.  inputs a
14140 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  re integers.  Th
14150 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
14160 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  ) is NULL if and
14170 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65   only if.  there
14180 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
14190 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75   inputs.  .}..fu
141a0 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20  ncdef {count(X) 
141b0 63 6f 75 6e 74 28 2a 29 7d 20 7b 7d 20 7b 0a 20  count(*)} {} {. 
141c0 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
141d0 72 65 74 75 72 6e 20 61 20 63 6f 75 6e 74 20 6f  return a count o
141e0 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
141f0 74 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e  times.  that <i>
14200 58 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c  X</i> is not NUL
14210 4c 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 54  L in a group.  T
14220 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 28  he second form (
14230 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74  with no argument
14240 29 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20  ).  returns the 
14250 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
14260 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75  rows in the grou
14270 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67  p..}..funcdef {g
14280 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67  roup_concat(X) g
14290 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29  roup_concat(X,Y)
142a0 7d 20 7b 7d 20 7b 0a 20 20 54 68 65 20 72 65 73  } {} {.  The res
142b0 75 6c 74 20 69 73 20 61 20 73 74 72 69 6e 67 20  ult is a string 
142c0 77 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e  which is the con
142d0 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20  catenation of.  
142e0 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  all non-NULL val
142f0 75 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e  ues of <i>X</i>.
14300 20 20 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c    If parameter <
14310 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65  i>Y</i> is prese
14320 6e 74 20 74 68 65 6e 0a 20 20 69 73 20 69 73 20  nt then.  is is 
14330 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
14340 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
14350 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
14360 58 3c 2f 69 3e 2e 20 20 41 20 63 6f 6d 6d 61 20  X</i>.  A comma 
14370 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61 73  (",") is used as
14380 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20   the separator. 
14390 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20   if <i>Y</i> is 
143a0 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72  omitted.  The or
143b0 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61  der of the conca
143c0 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73  tenated elements
143d0 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e   is.  arbitrary.
143e0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78  .}..funcdef {max
143f0 28 58 29 7d 20 7b 6d 61 78 41 67 67 46 75 6e 63  (X)} {maxAggFunc
14400 20 61 67 67 5f 6d 61 78 7d 20 7b 0a 20 20 52 65   agg_max} {.  Re
14410 74 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  turn the maximum
14420 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61   value of all va
14430 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
14440 70 2e 0a 20 20 54 68 65 20 6d 61 78 69 6d 75 6d  p..  The maximum
14450 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61   value is the va
14460 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
14470 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20  e returned last 
14480 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59  in an.  ORDER BY
14490 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c   on the same col
144a0 75 6d 6e 2e 20 20 4e 55 4c 4c 20 69 73 20 72 65  umn.  NULL is re
144b0 74 75 72 6e 65 64 20 69 66 20 61 6e 64 20 6f 6e  turned if and on
144c0 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  ly if there are.
144d0 20 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61    no non-NULL va
144e0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
144f0 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d  p..}..funcdef {m
14500 69 6e 28 58 29 7d 20 7b 6d 69 6e 41 67 67 46 75  in(X)} {minAggFu
14510 6e 63 20 61 67 67 5f 6d 69 6e 7d 20 7b 0a 20 20  nc agg_min} {.  
14520 52 65 74 75 72 6e 20 74 68 65 20 6d 69 6e 69 6d  Return the minim
14530 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  um non-NULL valu
14540 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20  e of all values 
14550 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
14560 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75  The minimum valu
14570 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6e  e is the first n
14580 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68  on-NULL value th
14590 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61 72 0a  at would appear.
145a0 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59    in an ORDER BY
145b0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a   of the column..
145c0 20 20 4e 55 4c 4c 20 69 73 20 6f 6e 6c 79 20 72    NULL is only r
145d0 65 74 75 72 6e 65 64 20 69 66 20 61 6e 64 20 6f  eturned if and o
145e0 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65  nly if there are
145f0 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c   no non-NULL val
14600 75 65 73 20 69 6e 20 74 68 65 20 0a 20 20 67 72  ues in the .  gr
14610 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  oup..}..funcdef 
14620 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58 29  {sum(X) total(X)
14630 7d 20 7b 73 75 6d 46 75 6e 63 20 73 75 6d 20 74  } {sumFunc sum t
14640 6f 74 61 6c 7d 20 7b 0a 20 20 52 65 74 75 72 6e  otal} {.  Return
14650 20 74 68 65 20 6e 75 6d 65 72 69 63 20 73 75 6d   the numeric sum
14660 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c   of all non-NULL
14670 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
14680 72 6f 75 70 2e 0a 20 20 49 66 20 74 68 65 72 65  roup..  If there
14690 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
146a0 20 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e   input rows then
146b0 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20   sum() returns. 
146c0 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28   NULL but total(
146d0 29 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20  ) returns 0.0.. 
146e0 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72   NULL is not nor
146f0 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20  mally a helpful 
14700 72 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73  result for the s
14710 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20  um of no rows.  
14720 62 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e  but the SQL stan
14730 64 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74  dard requires it
14740 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a   and most other.
14750 20 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65    SQL database e
14760 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74  ngines implement
14770 20 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20   sum() that way 
14780 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69  so SQLite does i
14790 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20  t in the.  same 
147a0 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  way in order to 
147b0 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20  be compatible.  
147c0 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72   The non-standar
147d0 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69  d total() functi
147e0 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64  on.  is provided
147f0 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74   as a convenient
14800 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f   way to work aro
14810 75 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20  und this design 
14820 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65  problem.  in the
14830 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f   SQL language.</
14840 70 3e 0a 0a 20 20 3c 70 3e 54 68 65 20 72 65 73  p>..  <p>The res
14850 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69  ult of total() i
14860 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
14870 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
14880 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
14890 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74   sum() is an int
148a0 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c  eger value if al
148b0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  l non-NULL input
148c0 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
148d0 20 20 49 66 20 61 6e 79 20 69 6e 70 75 74 20 74    If any input t
148e0 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74 68  o sum() is neith
148f0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  er an integer or
14900 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20 73   a NULL.  then s
14910 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20 66  um() returns a f
14920 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
14930 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67 68  lue.  which migh
14940 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69 6d  t be an approxim
14950 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72 75  ation to the tru
14960 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e sum.</p>..  <p
14970 3e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f  >Sum() will thro
14980 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20 6f 76  w an "integer ov
14990 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74 69 6f  erflow" exceptio
149a0 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a  n if all inputs.
149b0 20 20 61 72 65 20 69 6e 74 65 67 65 72 73 20 6f    are integers o
149c0 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20  r NULL.  and an 
149d0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
149e0 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79 20 70   occurs at any p
149f0 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68 65 20  oint during the 
14a00 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20 20 54  computation..  T
14a10 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72  otal() never thr
14a20 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ows an integer o
14a30 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c  verflow..}.</tcl
14a40 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 63 6c  >.</table>..<tcl
14a50 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
14a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14aa0 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20  .Section INSERT 
14ab0 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20 49  insert {INSERT I
14ac0 4e 53 45 52 54 73 7d 0a 0a 42 75 62 62 6c 65 44  NSERTs}..BubbleD
14ad0 69 61 67 72 61 6d 20 69 6e 73 65 72 74 2d 73 74  iagram insert-st
14ae0 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
14af0 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74 65  The INSERT state
14b00 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74 77  ment comes in tw
14b10 6f 20 62 61 73 69 63 20 66 6f 72 6d 73 2e 20 20  o basic forms.  
14b20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 0a 28  The first form.(
14b30 77 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53  with the "VALUES
14b40 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74  " keyword) creat
14b50 65 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 20  es a single new 
14b60 72 6f 77 20 69 6e 20 61 6e 20 65 78 69 73 74 69  row in an existi
14b70 6e 67 20 74 61 62 6c 65 2e 0a 49 66 20 6e 6f 20  ng table..If no 
14b80 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 20 73  column-list is s
14b90 70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68  pecified then th
14ba0 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
14bb0 65 73 20 6d 75 73 74 0a 62 65 20 74 68 65 20 73  es must.be the s
14bc0 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
14bd0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
14be0 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61  the table.  If a
14bf0 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 0a 69 73 20   column-list.is 
14c00 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20  specified, then 
14c10 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  the number of va
14c20 6c 75 65 73 20 6d 75 73 74 20 6d 61 74 63 68 20  lues must match 
14c30 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70  the number of.sp
14c40 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e  ecified columns.
14c50 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65    Columns of the
14c60 20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 20 6e   table that do n
14c70 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
14c80 0a 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65  .column list are
14c90 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65   filled with the
14ca0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20   default value, 
14cb0 6f 72 20 77 69 74 68 20 4e 55 4c 4c 20 69 66 20  or with NULL if 
14cc0 6e 6f 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no.default value
14cd0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 3c   is specified..<
14ce0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 65 63 6f  /p>..<p>The seco
14cf0 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65 20 49  nd form of the I
14d00 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
14d10 74 61 6b 65 73 20 69 74 73 20 64 61 74 61 20 66  takes its data f
14d20 72 6f 6d 20 61 0a 53 45 4c 45 43 54 20 73 74 61  rom a.SELECT sta
14d30 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 6e 75 6d  tement.  The num
14d40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
14d50 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
14d60 74 68 65 0a 53 45 4c 45 43 54 20 6d 75 73 74 20  the.SELECT must 
14d70 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
14d80 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
14d90 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
14da0 20 69 66 0a 6e 6f 20 63 6f 6c 75 6d 6e 20 6c 69   if.no column li
14db0 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  st is specified,
14dc0 20 6f 72 20 69 74 20 6d 75 73 74 20 6d 61 74 63   or it must matc
14dd0 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
14de0 63 6f 6c 75 6d 6e 73 0a 6e 61 6d 65 20 69 6e 20  columns.name in 
14df0 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 2e  the column list.
14e00 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
14e10 20 6d 61 64 65 20 69 6e 20 74 68 65 20 74 61 62   made in the tab
14e20 6c 65 0a 66 6f 72 20 65 76 65 72 79 20 72 6f 77  le.for every row
14e30 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 72   of the SELECT r
14e40 65 73 75 6c 74 2e 20 20 54 68 65 20 53 45 4c 45  esult.  The SELE
14e50 43 54 20 6d 61 79 20 62 65 20 73 69 6d 70 6c 65  CT may be simple
14e60 0a 6f 72 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  .or compound.</p
14e70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e  >..<p>The option
14e80 61 6c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  al conflict-clau
14e90 73 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70  se allows the sp
14ea0 65 63 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61  ecification of a
14eb0 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f  n alternative.co
14ec0 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63  nstraint conflic
14ed0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
14ee0 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75  orithm to use du
14ef0 72 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 63 6f  ring this one co
14f00 6d 6d 61 6e 64 2e 0a 53 65 65 20 74 68 65 20 73  mmand..See the s
14f10 65 63 74 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f  ection titled.[O
14f20 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20  N CONFLICT] for 
14f30 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
14f40 6d 61 74 69 6f 6e 2e 0a 46 6f 72 20 63 6f 6d 70  mation..For comp
14f50 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
14f60 79 53 51 4c 2c 20 74 68 65 20 70 61 72 73 65 72  ySQL, the parser
14f70 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20   allows the use 
14f80 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65  of the.single ke
14f90 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c  yword <a href="l
14fa0 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c  ang_replace.html
14fb0 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73  ">REPLACE</a> as
14fc0 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22   an .alias for "
14fd0 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
14fe0 45 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  E"..</p>..<p>The
14ff0 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 64 61   optional "<i>da
15000 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 3c  tabase-name</i><
15010 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69 78 20  b>.</b>" prefix 
15020 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d  on the <i>table-
15030 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73 75 70 70  name</i>.is supp
15040 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65  ort for top-leve
15050 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
15060 6e 74 73 20 6f 6e 6c 79 2e 20 20 54 68 65 20 74  nts only.  The t
15070 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74 20 62  able name must b
15080 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20 66 6f  e.unqualified fo
15090 72 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  r INSERT stateme
150a0 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72 20 77  nts that occur w
150b0 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20 54 52  ithin [CREATE TR
150c0 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
150d0 73 2e 0a 4c 69 6b 65 6c 79 2c 20 74 68 65 20 22  s..Likely, the "
150e0 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
150f0 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
15100 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
15110 73 75 70 70 6f 72 74 20 66 6f 72 0a 74 6f 70 2d  support for.top-
15120 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61  level INSERT sta
15130 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64  tements only and
15140 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20   not for INSERT 
15150 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
15160 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a  n.triggers..<p>.
15170 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
15180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
151a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
151b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
151c0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 4f  #####.Section {O
151d0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
151e0 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f  e} conflict {{co
151f0 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d 20 7b  nflict clause} {
15200 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42  ON CONFLICT}}..B
15210 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e  ubbleDiagram con
15220 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74  flict-clause.</t
15230 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43  cl>..<p>The ON C
15240 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
15250 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61 74 65  s not a separate
15260 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 49   SQL command.  I
15270 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64  t is a.non-stand
15280 61 72 64 20 63 6c 61 75 73 65 20 74 68 61 74 20  ard clause that 
15290 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61  can appear in ma
152a0 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d  ny other SQL com
152b0 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76  mands..It is giv
152c0 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69  en its own secti
152d0 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d  on in this docum
152e0 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69  ent because it i
152f0 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74  s not.part of st
15300 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74  andard SQL and t
15310 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e  herefore might n
15320 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c  ot be familiar.<
15330 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74  /p>..<p>The synt
15340 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f  ax for the ON CO
15350 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73  NFLICT clause is
15360 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65 20   as shown above 
15370 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20 54  for.the CREATE T
15380 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 46  ABLE command.  F
15390 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e  or the INSERT an
153a0 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64  d.UPDATE command
153b0 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  s, the keywords 
153c0 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72  "ON CONFLICT" ar
153d0 65 20 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f  e replaced by "O
153e0 52 22 2c 20 74 6f 20 6d 61 6b 65 0a 74 68 65 20  R", to make.the 
153f0 73 79 6e 74 61 78 20 73 65 65 6d 20 6d 6f 72 65  syntax seem more
15400 20 6e 61 74 75 72 61 6c 2e 20 20 46 6f 72 20 65   natural.  For e
15410 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20  xample, instead 
15420 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f  of."INSERT ON CO
15430 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77  NFLICT IGNORE" w
15440 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f  e have "INSERT O
15450 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b  R IGNORE"..The k
15460 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62  eywords change b
15470 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
15480 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
15490 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20  the same.either 
154a0 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
154b0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
154c0 75 73 65 20 73 70 65 63 69 66 69 65 73 20 61 6e  use specifies an
154d0 20 61 6c 67 6f 72 69 74 68 6d 20 75 73 65 64 20   algorithm used 
154e0 74 6f 20 72 65 73 6f 6c 76 65 0a 63 6f 6e 73 74  to resolve.const
154f0 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 73 2e  raint conflicts.
15500 20 20 54 68 65 72 65 20 61 72 65 20 66 69 76 65    There are five
15510 20 63 68 6f 69 63 65 73 3a 20 52 4f 4c 4c 42 41   choices: ROLLBA
15520 43 4b 2c 20 41 42 4f 52 54 2c 0a 46 41 49 4c 2c  CK, ABORT,.FAIL,
15530 20 49 47 4e 4f 52 45 2c 20 61 6e 64 20 52 45 50   IGNORE, and REP
15540 4c 41 43 45 2e 20 54 68 65 20 64 65 66 61 75 6c  LACE. The defaul
15550 74 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  t algorithm is A
15560 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77  BORT.  This.is w
15570 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f  hat they mean:</
15580 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e  p>..<dl>.<dt><b>
15590 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74  ROLLBACK</b></dt
155a0 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20  >.<dd><p>When a 
155b0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
155c0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 61 6e 20  tion occurs, an 
155d0 69 6d 6d 65 64 69 61 74 65 20 52 4f 4c 4c 42 41  immediate ROLLBA
155e0 43 4b 0a 6f 63 63 75 72 73 2c 20 74 68 75 73 20  CK.occurs, thus 
155f0 65 6e 64 69 6e 67 20 74 68 65 20 63 75 72 72 65  ending the curre
15600 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  nt transaction, 
15610 61 6e 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  and the command 
15620 61 62 6f 72 74 73 0a 77 69 74 68 20 61 20 72 65  aborts.with a re
15630 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 53 51 4c  turn code of SQL
15640 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 2e 20  ITE_CONSTRAINT. 
15650 20 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69   If no transacti
15660 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74  on is.active (ot
15670 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70  her than the imp
15680 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  lied transaction
15690 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
156a0 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e   on every.comman
156b0 64 29 20 74 68 65 6e 20 74 68 69 73 20 61 6c 67  d) then this alg
156c0 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74 68 65  orithm works the
156d0 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 2e 3c   same as ABORT.<
156e0 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
156f0 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a  >ABORT</b></dt>.
15700 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f  <dd><p>When a co
15710 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
15720 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63  on occurs, the c
15730 6f 6d 6d 61 6e 64 20 62 61 63 6b 73 20 6f 75 74  ommand backs out
15740 0a 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67  .any prior chang
15750 65 73 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  es it might have
15760 20 6d 61 64 65 20 61 6e 64 20 61 62 6f 72 74 73   made and aborts
15770 20 77 69 74 68 20 61 20 72 65 74 75 72 6e 20 63   with a return c
15780 6f 64 65 0a 6f 66 20 53 51 4c 49 54 45 5f 43 4f  ode.of SQLITE_CO
15790 4e 53 54 52 41 49 4e 54 2e 20 20 42 75 74 20 6e  NSTRAINT.  But n
157a0 6f 20 52 4f 4c 4c 42 41 43 4b 20 69 73 20 65 78  o ROLLBACK is ex
157b0 65 63 75 74 65 64 20 73 6f 20 63 68 61 6e 67 65  ecuted so change
157c0 73 0a 66 72 6f 6d 20 70 72 69 6f 72 20 63 6f 6d  s.from prior com
157d0 6d 61 6e 64 73 20 77 69 74 68 69 6e 20 74 68 65  mands within the
157e0 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
157f0 6e 0a 61 72 65 20 70 72 65 73 65 72 76 65 64 2e  n.are preserved.
15800 20 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65    This is the de
15810 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 2e 3c  fault behavior.<
15820 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
15830 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  >FAIL</b></dt>.<
15840 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63 6f 6e  dd><p>When a con
15850 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
15860 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 63 6f  n occurs, the co
15870 6d 6d 61 6e 64 20 61 62 6f 72 74 73 20 77 69 74  mmand aborts wit
15880 68 20 61 0a 72 65 74 75 72 6e 20 63 6f 64 65 20  h a.return code 
15890 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
158a0 54 2e 20 20 42 75 74 20 61 6e 79 20 63 68 61 6e  T.  But any chan
158b0 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
158c0 61 73 65 20 74 68 61 74 0a 74 68 65 20 63 6f 6d  ase that.the com
158d0 6d 61 6e 64 20 6d 61 64 65 20 70 72 69 6f 72 20  mand made prior 
158e0 74 6f 20 65 6e 63 6f 75 6e 74 65 72 69 6e 67 20  to encountering 
158f0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
15900 69 6f 6c 61 74 69 6f 6e 0a 61 72 65 20 70 72 65  iolation.are pre
15910 73 65 72 76 65 64 20 61 6e 64 20 61 72 65 20 6e  served and are n
15920 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 2e 20 20  ot backed out.  
15930 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  For example, if 
15940 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65 6d  an UPDATE.statem
15950 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64 20  ent encountered 
15960 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
15970 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31 30  lation on the 10
15980 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74 20  0th row that.it 
15990 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64 61  attempts to upda
159a0 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72  te, then the fir
159b0 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67 65  st 99 row change
159c0 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64 0a  s are preserved.
159d0 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  but changes to r
159e0 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79 6f  ows 100 and beyo
159f0 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 3c  nd never occur.<
15a00 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
15a10 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74 3e  >IGNORE</b></dt>
15a20 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e 20 61 20 63  .<dd><p>When a c
15a30 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
15a40 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
15a50 6f 6e 65 20 72 6f 77 20 74 68 61 74 20 63 6f 6e  one row that con
15a60 74 61 69 6e 73 0a 74 68 65 20 63 6f 6e 73 74 72  tains.the constr
15a70 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
15a80 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
15a90 72 20 63 68 61 6e 67 65 64 2e 20 20 42 75 74 20  r changed.  But 
15aa0 74 68 65 20 63 6f 6d 6d 61 6e 64 0a 63 6f 6e 74  the command.cont
15ab0 69 6e 75 65 73 20 65 78 65 63 75 74 69 6e 67 20  inues executing 
15ac0 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4f 74 68 65 72  normally.  Other
15ad0 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61 6e 64   rows before and
15ae0 20 61 66 74 65 72 20 74 68 65 20 72 6f 77 20 74   after the row t
15af0 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20 74 68  hat.contained th
15b00 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
15b10 6c 61 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65 20  lation continue 
15b20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 6f  to be inserted o
15b30 72 20 75 70 64 61 74 65 64 0a 6e 6f 72 6d 61 6c  r updated.normal
15b40 6c 79 2e 20 20 4e 6f 20 65 72 72 6f 72 20 69 73  ly.  No error is
15b50 20 72 65 74 75 72 6e 65 64 2e 3c 2f 70 3e 3c 2f   returned.</p></
15b60 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c  dd>..<dt><b>REPL
15b70 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACE</b></dt>.<dd
15b80 3e 3c 70 3e 57 68 65 6e 20 61 20 55 4e 49 51 55  ><p>When a UNIQU
15b90 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
15ba0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
15bb0 68 65 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  he pre-existing 
15bc0 72 6f 77 73 0a 74 68 61 74 20 61 72 65 20 63 61  rows.that are ca
15bd0 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72  using the constr
15be0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
15bf0 72 65 20 72 65 6d 6f 76 65 64 20 70 72 69 6f 72  re removed prior
15c00 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 0a 6f 72   to inserting.or
15c10 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63 75   updating the cu
15c20 72 72 65 6e 74 20 72 6f 77 2e 20 20 54 68 75 73  rrent row.  Thus
15c30 20 74 68 65 20 69 6e 73 65 72 74 20 6f 72 20 75   the insert or u
15c40 70 64 61 74 65 20 61 6c 77 61 79 73 20 6f 63 63  pdate always occ
15c50 75 72 73 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e 64  urs..The command
15c60 20 63 6f 6e 74 69 6e 75 65 73 20 65 78 65 63 75   continues execu
15c70 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 20 20  ting normally.  
15c80 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  No error is retu
15c90 72 6e 65 64 2e 0a 49 66 20 61 20 4e 4f 54 20 4e  rned..If a NOT N
15ca0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  ULL constraint v
15cb0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
15cc0 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20   the NULL value 
15cd0 69 73 20 72 65 70 6c 61 63 65 64 0a 62 79 20 74  is replaced.by t
15ce0 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
15cf0 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e   for that column
15d00 2e 20 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  .  If the column
15d10 20 68 61 73 20 6e 6f 20 64 65 66 61 75 6c 74 0a   has no default.
15d20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
15d30 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
15d40 69 73 20 75 73 65 64 2e 20 20 49 66 20 61 20 43  is used.  If a C
15d50 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
15d60 76 69 6f 6c 61 74 69 6f 6e 0a 6f 63 63 75 72 73  violation.occurs
15d70 20 74 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45   then the IGNORE
15d80 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
15d90 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e  ed.</p>..<p>When
15da0 20 74 68 69 73 20 63 6f 6e 66 6c 69 63 74 20 72   this conflict r
15db0 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
15dc0 67 79 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20  gy deletes rows 
15dd0 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69  in order to.sati
15de0 73 66 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  sfy a constraint
15df0 2c 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  , [CREATE TRIGGE
15e00 52 20 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67  R | delete trigg
15e10 65 72 73 5d 20 6f 6e 6c 79 20 66 69 72 65 20 69  ers] only fire i
15e20 66 0a 5b 72 65 63 75 72 73 69 76 65 5f 74 72 69  f.[recursive_tri
15e30 67 67 65 72 73 20 70 72 61 67 6d 61 20 7c 20 72  ggers pragma | r
15e40 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72  ecursive trigger
15e50 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c  s] are enabled.<
15e60 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71 6c  /p>..<p>The [sql
15e70 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
15e80 20 7c 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20   | update hook] 
15e90 69 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66  is not invoked f
15ea0 6f 72 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65  or rows that.are
15eb0 20 64 65 6c 65 74 65 64 20 62 79 20 61 6e 20 4f   deleted by an O
15ec0 52 20 52 45 50 4c 41 43 45 20 72 65 73 6f 6c 75  R REPLACE resolu
15ed0 74 69 6f 6e 2e 20 20 4e 6f 72 20 69 73 20 74 68  tion.  Nor is th
15ee0 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  e .[sqlite3_chan
15ef0 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75  ges | change cou
15f00 6e 74 65 72 5d 20 69 6e 63 72 65 6d 65 6e 74 65  nter] incremente
15f10 64 2e 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e  d..The exception
15f20 61 6c 20 62 65 68 61 76 69 6f 72 73 20 64 65 66  al behaviors def
15f30 69 6e 65 64 20 69 6e 20 74 68 69 73 20 70 61 72  ined in this par
15f40 61 67 72 61 70 68 20 6d 69 67 68 74 20 63 68 61  agraph might cha
15f50 6e 67 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65  nge .in a future
15f60 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f   release.</p>.</
15f70 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20 61 6c 67 6f  dl>..<p>The algo
15f80 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
15f90 69 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65  in the OR clause
15fa0 20 6f 66 20 61 20 49 4e 53 45 52 54 20 6f 72 20   of a INSERT or 
15fb0 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73  UPDATE.overrides
15fc0 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73   any algorithm s
15fd0 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52  pecified in a CR
15fe0 45 41 54 45 20 54 41 42 4c 45 2e 0a 49 66 20 6e  EATE TABLE..If n
15ff0 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73  o algorithm is s
16000 70 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72  pecified anywher
16010 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67  e, the ABORT alg
16020 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c  orithm is used.<
16030 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
16040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16080 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
16090 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65  n REINDEX reinde
160a0 78 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c  x REINDEX..Bubbl
160b0 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78  eDiagram reindex
160c0 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a  -stmt 1.</tcl>..
160d0 3c 70 3e 54 68 65 20 52 45 49 4e 44 45 58 20 63  <p>The REINDEX c
160e0 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
160f0 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
16100 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
16110 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
16120 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
16130 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
16140 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
16150 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
16160 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  ed..</p>..<p>In 
16170 74 68 65 20 66 69 72 73 74 20 66 6f 72 6d 2c 20  the first form, 
16180 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
16190 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
161a0 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74  bases that use t
161b0 68 65 0a 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69  he.named collati
161c0 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 72 65 20  on sequence are 
161d0 72 65 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  recreated. In th
161e0 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 69  e second form, i
161f0 66 20 0a 3c 69 3e 26 23 39 31 3b 64 61 74 61 62  f .<i>&#91;datab
16200 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33 3b 74 61  ase-name.&#93;ta
16210 62 6c 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f  ble/index-name</
16220 69 3e 20 69 64 65 6e 74 69 66 69 65 73 20 61 20  i> identifies a 
16230 74 61 62 6c 65 2c 0a 74 68 65 6e 20 61 6c 6c 20  table,.then all 
16240 69 6e 64 69 63 65 73 0a 61 73 73 6f 63 69 61 74  indices.associat
16250 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
16260 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20 49  e are rebuilt. I
16270 66 20 61 6e 20 69 6e 64 65 78 20 69 73 20 69 64  f an index is id
16280 65 6e 74 69 66 69 65 64 2c 20 74 68 65 6e 20 6f  entified, then o
16290 6e 6c 79 0a 74 68 69 73 20 73 70 65 63 69 66 69  nly.this specifi
162a0 63 20 69 6e 64 65 78 20 69 73 20 64 65 6c 65 74  c index is delet
162b0 65 64 20 61 6e 64 20 72 65 63 72 65 61 74 65 64  ed and recreated
162c0 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 6e 6f  ..</p>..<p>If no
162d0 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
162e0 65 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69  e</i> is specifi
162f0 65 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69  ed and there exi
16300 73 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65  sts both a table
16310 20 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20   or.index and a 
16320 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
16330 63 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ce of the specif
16340 69 65 64 20 6e 61 6d 65 2c 20 74 68 65 6e 20 69  ied name, then i
16350 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65  ndices associate
16360 64 0a 77 69 74 68 20 74 68 65 20 63 6f 6c 6c 61  d.with the colla
16370 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6f 6e  tion sequence on
16380 6c 79 20 61 72 65 20 72 65 63 6f 6e 73 74 72 75  ly are reconstru
16390 63 74 65 64 2e 20 54 68 69 73 20 61 6d 62 69 67  cted. This ambig
163a0 75 69 74 79 20 6d 61 79 20 62 65 0a 64 69 73 70  uity may be.disp
163b0 65 6c 6c 65 64 20 62 79 20 61 6c 77 61 79 73 20  elled by always 
163c0 73 70 65 63 69 66 79 69 6e 67 20 61 20 3c 69 3e  specifying a <i>
163d0 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69  database-name</i
163e0 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e  > when reindexin
163f0 67 20 61 0a 73 70 65 63 69 66 69 63 20 74 61 62  g a.specific tab
16400 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74  le or index...<t
16410 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
16420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16460 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c  ###.Section REPL
16470 41 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c  ACE replace REPL
16480 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  ACE..</tcl>..<p>
16490 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
164a0 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
164b0 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e  for the "[ON CON
164c0 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f  FLICT | INSERT O
164d0 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69  R REPLACE]".vari
164e0 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  ant of the [INSE
164f0 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54  RT] command.  .T
16500 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
16510 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
16520 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51  ibility other SQ
16530 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
16540 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49  es.  See the .[I
16550 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64  NSERT] command d
16560 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
16570 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
16580 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
16590 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
165a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165e0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45  #####.Section SE
165f0 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c  LECT select {SEL
16600 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62  ECT query}..Bubb
16610 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
16620 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
16630 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72  agram select-cor
16640 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
16650 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75  result-column.Bu
16660 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
16670 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
16680 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75  agram single-sou
16690 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  rce.BubbleDiagra
166a0 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65  m join-op.Bubble
166b0 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e  Diagram join-con
166c0 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
166d0 61 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74  agram ordering-t
166e0 65 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61  erm.BubbleDiagra
166f0 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61  m compound-opera
16700 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tor.</tcl>..<p>T
16710 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
16720 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 71  ent is used to q
16730 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61 73  uery the databas
16740 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20 6f  e.  The.result o
16750 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a 65  f a SELECT is ze
16760 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  ro or more rows 
16770 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65 61  of data where ea
16780 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69 78  ch row.has a fix
16790 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ed number of col
167a0 75 6d 6e 73 2e 20 20 54 68 65 20 6e 75 6d 62 65  umns.  The numbe
167b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
167c0 74 68 65 0a 72 65 73 75 6c 74 20 69 73 20 73 70  the.result is sp
167d0 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 65  ecified by the e
167e0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69  xpression list i
167f0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 0a 53 45  n between the.SE
16800 4c 45 43 54 20 61 6e 64 20 46 52 4f 4d 20 6b 65  LECT and FROM ke
16810 79 77 6f 72 64 73 2e 20 20 41 6e 79 20 61 72 62  ywords.  Any arb
16820 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
16830 6e 20 63 61 6e 20 62 65 20 75 73 65 64 0a 61 73  n can be used.as
16840 20 61 20 72 65 73 75 6c 74 2e 20 20 49 66 20 61   a result.  If a
16850 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
16860 6f 6e 20 69 73 20 7d 0a 68 64 5f 70 75 74 73 20  on is }.hd_puts 
16870 22 5b 4f 70 65 72 61 74 6f 72 20 2a 5d 20 74 68  "[Operator *] th
16880 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f  en all columns o
16890 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 72 65  f all tables are
168a0 20 73 75 62 73 74 69 74 75 74 65 64 5c 6e 22 0a   substituted\n".
168b0 68 64 5f 70 75 74 73 20 22 66 6f 72 20 74 68 61  hd_puts "for tha
168c0 74 20 6f 6e 65 20 65 78 70 72 65 73 73 69 6f 6e  t one expression
168d0 2e 20 20 49 66 20 74 68 65 20 65 78 70 72 65 73  .  If the expres
168e0 73 69 6f 6e 20 69 73 20 74 68 65 20 6e 61 6d 65  sion is the name
168f0 20 6f 66 5c 6e 22 0a 68 64 5f 70 75 74 73 20 22   of\n".hd_puts "
16900 61 20 74 61 62 6c 65 20 66 6f 6c 6c 6f 77 65 64  a table followed
16910 20 62 79 20 5b 4f 70 65 72 61 74 6f 72 20 2e 2a   by [Operator .*
16920 5d 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ] then the resul
16930 74 20 69 73 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  t is all columns
16940 5c 6e 22 0a 68 64 5f 70 75 74 73 20 7b 69 6e 20  \n".hd_puts {in 
16950 74 68 61 74 20 6f 6e 65 20 74 61 62 6c 65 2e 3c  that one table.<
16960 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44 49 53 54  /p>..<p>The DIST
16970 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 63 61 75  INCT keyword cau
16980 73 65 73 20 61 20 73 75 62 73 65 74 20 6f 66 20  ses a subset of 
16990 72 65 73 75 6c 74 20 72 6f 77 73 20 74 6f 20 62  result rows to b
169a0 65 20 72 65 74 75 72 6e 65 64 2c 20 0a 69 6e 20  e returned, .in 
169b0 77 68 69 63 68 20 65 61 63 68 20 72 65 73 75 6c  which each resul
169c0 74 20 72 6f 77 20 69 73 20 64 69 66 66 65 72 65  t row is differe
169d0 6e 74 2e 20 20 4e 55 4c 4c 20 76 61 6c 75 65 73  nt.  NULL values
169e0 20 61 72 65 20 6e 6f 74 20 74 72 65 61 74 65 64   are not treated
169f0 20 61 73 20 0a 64 69 73 74 69 6e 63 74 20 66 72   as .distinct fr
16a00 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  om each other.  
16a10 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  The default beha
16a20 76 69 6f 72 20 69 73 20 74 68 61 74 20 61 6c 6c  vior is that all
16a30 20 72 65 73 75 6c 74 20 72 6f 77 73 20 0a 62 65   result rows .be
16a40 20 72 65 74 75 72 6e 65 64 2c 20 77 68 69 63 68   returned, which
16a50 20 63 61 6e 20 62 65 20 6d 61 64 65 20 65 78 70   can be made exp
16a60 6c 69 63 69 74 20 77 69 74 68 20 74 68 65 20 6b  licit with the k
16a70 65 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a  eyword ALL.</p>.
16a80 0a 3c 70 3e 54 68 65 20 71 75 65 72 79 20 69 73  .<p>The query is
16a90 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73   executed agains
16aa0 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  t one or more ta
16ab0 62 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 61  bles specified a
16ac0 66 74 65 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65  fter.the FROM ke
16ad0 79 77 6f 72 64 2e 20 20 49 66 20 6d 75 6c 74 69  yword.  If multi
16ae0 70 6c 65 20 74 61 62 6c 65 73 20 6e 61 6d 65 73  ple tables names
16af0 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62   are separated b
16b00 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20 74  y commas,.then t
16b10 68 65 20 71 75 65 72 79 20 69 73 20 61 67 61 69  he query is agai
16b20 6e 73 74 20 74 68 65 20 63 72 6f 73 73 20 6a 6f  nst the cross jo
16b30 69 6e 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75  in of the variou
16b40 73 20 74 61 62 6c 65 73 2e 0a 54 68 65 20 66 75  s tables..The fu
16b50 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69 6e 20 73  ll SQL-92 join s
16b60 79 6e 74 61 78 20 63 61 6e 20 61 6c 73 6f 20 62  yntax can also b
16b70 65 20 75 73 65 64 20 74 6f 20 73 70 65 63 69 66  e used to specif
16b80 79 20 6a 6f 69 6e 73 2e 0a 41 20 73 75 62 2d 71  y joins..A sub-q
16b90 75 65 72 79 0a 69 6e 20 70 61 72 65 6e 74 68 65  uery.in parenthe
16ba0 73 65 73 20 6d 61 79 20 62 65 20 73 75 62 73 74  ses may be subst
16bb0 69 74 75 74 65 64 20 66 6f 72 20 61 6e 79 20 74  ituted for any t
16bc0 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
16bd0 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 54 68   FROM clause..Th
16be0 65 20 65 6e 74 69 72 65 20 46 52 4f 4d 20 63 6c  e entire FROM cl
16bf0 61 75 73 65 20 6d 61 79 20 62 65 20 6f 6d 69 74  ause may be omit
16c00 74 65 64 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ted, in which ca
16c10 73 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  se the result is
16c20 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 63 6f   a.single row co
16c30 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20  nsisting of the 
16c40 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 65 78  values of the ex
16c50 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c  pression list..<
16c60 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 57 48 45 52  /p>..<p>The WHER
16c70 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  E clause can be 
16c80 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
16c90 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
16ca0 20 6f 76 65 72 0a 77 68 69 63 68 20 74 68 65 20   over.which the 
16cb0 71 75 65 72 79 20 6f 70 65 72 61 74 65 73 2e 3c  query operates.<
16cc0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 47 52 4f 55  /p>..<p>The GROU
16cd0 50 20 42 59 20 63 6c 61 75 73 65 20 63 61 75 73  P BY clause caus
16ce0 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  es one or more r
16cf0 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ows of the resul
16d00 74 20 74 6f 0a 62 65 20 63 6f 6d 62 69 6e 65 64  t to.be combined
16d10 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72   into a single r
16d20 6f 77 20 6f 66 20 6f 75 74 70 75 74 2e 20 20 54  ow of output.  T
16d30 68 69 73 20 69 73 20 65 73 70 65 63 69 61 6c 6c  his is especiall
16d40 79 20 75 73 65 66 75 6c 0a 77 68 65 6e 20 74 68  y useful.when th
16d50 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e  e result contain
16d60 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
16d70 74 69 6f 6e 73 2e 20 20 54 68 65 20 65 78 70 72  tions.  The expr
16d80 65 73 73 69 6f 6e 73 20 69 6e 0a 74 68 65 20 47  essions in.the G
16d90 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 64  ROUP BY clause d
16da0 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68  o <em>not</em> h
16db0 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ave to be expres
16dc0 73 69 6f 6e 73 20 74 68 61 74 0a 61 70 70 65 61  sions that.appea
16dd0 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  r in the result.
16de0 20 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61    The HAVING cla
16df0 75 73 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  use is similar t
16e00 6f 20 57 48 45 52 45 20 65 78 63 65 70 74 0a 74  o WHERE except.t
16e10 68 61 74 20 48 41 56 49 4e 47 20 61 70 70 6c 69  hat HAVING appli
16e20 65 73 20 61 66 74 65 72 20 67 72 6f 75 70 69 6e  es after groupin
16e30 67 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20  g has occurred. 
16e40 20 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72   The HAVING expr
16e50 65 73 73 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72  ession.may refer
16e60 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e   to values, even
16e70 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16e80 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e  ions, that are n
16e90 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ot in the result
16ea0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 52  .</p>..<p>The OR
16eb0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 63 61  DER BY clause ca
16ec0 75 73 65 73 20 74 68 65 20 6f 75 74 70 75 74 20  uses the output 
16ed0 72 6f 77 73 20 74 6f 20 62 65 20 73 6f 72 74 65  rows to be sorte
16ee0 64 2e 20 20 0a 54 68 65 20 61 72 67 75 6d 65 6e  d.  .The argumen
16ef0 74 20 74 6f 20 4f 52 44 45 52 20 42 59 20 69 73  t to ORDER BY is
16f00 20 61 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   a list of expre
16f10 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ssions that are 
16f20 75 73 65 64 20 61 73 20 74 68 65 0a 6b 65 79 20  used as the.key 
16f30 66 6f 72 20 74 68 65 20 73 6f 72 74 2e 20 20 54  for the sort.  T
16f40 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 64  he expressions d
16f50 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65  o not have to be
16f60 20 70 61 72 74 20 6f 66 20 74 68 65 0a 72 65 73   part of the.res
16f70 75 6c 74 20 66 6f 72 20 61 20 73 69 6d 70 6c 65  ult for a simple
16f80 20 53 45 4c 45 43 54 2c 20 62 75 74 20 69 6e 20   SELECT, but in 
16f90 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
16fa0 54 20 65 61 63 68 20 73 6f 72 74 0a 65 78 70 72  T each sort.expr
16fb0 65 73 73 69 6f 6e 20 6d 75 73 74 20 65 78 61 63  ession must exac
16fc0 74 6c 79 20 6d 61 74 63 68 20 6f 6e 65 20 6f 66  tly match one of
16fd0 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
16fe0 6d 6e 73 2e 20 20 45 61 63 68 0a 73 6f 72 74 20  mns.  Each.sort 
16ff0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
17000 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
17010 6c 6f 77 65 64 20 62 79 20 61 20 43 4f 4c 4c 41  lowed by a COLLA
17020 54 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 0a 74  TE keyword and.t
17030 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c  he name of a col
17040 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
17050 75 73 65 64 20 66 6f 72 20 6f 72 64 65 72 69 6e  used for orderin
17060 67 20 74 65 78 74 20 61 6e 64 2f 6f 72 0a 6b 65  g text and/or.ke
17070 79 77 6f 72 64 73 20 41 53 43 20 6f 72 20 44 45  ywords ASC or DE
17080 53 43 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  SC to specify th
17090 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 3c 2f 70  e sort order.</p
170a0 3e 0a 0a 3c 70 3e 45 61 63 68 20 74 65 72 6d 20  >..<p>Each term 
170b0 6f 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  of an ORDER BY e
170c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f  xpression is pro
170d0 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  cessed as follow
170e0 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
170f0 3e 3c 70 3e 49 66 20 74 68 65 20 4f 52 44 45 52  ><p>If the ORDER
17100 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
17110 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
17120 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
17130 6f 75 74 70 75 74 20 69 73 20 6f 72 64 65 72 65  output is ordere
17140 64 20 62 79 20 74 68 65 20 4b 2d 74 68 20 63 6f  d by the K-th co
17150 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
17160 6c 74 20 73 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e  lt set.</p></li>
17170 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74 68 65 20 4f  .<li><p>If the O
17180 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
17190 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
171a0 69 65 72 20 61 6e 64 20 6f 6e 65 20 6f 66 20 74  ier and one of t
171b0 68 65 0a 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  he.output column
171c0 73 20 68 61 73 20 61 6e 20 61 6c 69 61 73 20 62  s has an alias b
171d0 79 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  y the same name,
171e0 20 74 68 65 6e 20 74 68 65 20 6f 75 74 70 75 74   then the output
171f0 20 69 73 0a 6f 72 64 65 72 65 64 20 62 79 20 74   is.ordered by t
17200 68 65 20 69 64 65 6e 74 69 66 69 65 64 20 63 6f  he identified co
17210 6c 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  lumn.</p></li>.<
17220 6c 69 3e 3c 70 3e 4f 74 68 65 72 77 69 73 65 2c  li><p>Otherwise,
17230 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
17240 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
17250 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 6f 75  uated and the ou
17260 74 70 75 74 20 0a 69 73 20 6f 72 64 65 72 65 64  tput .is ordered
17270 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66   by the value of
17280 20 74 68 61 74 20 65 78 70 72 65 73 73 69 6f 6e   that expression
17290 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  .</p></li>.</ol>
172a0 0a 0a 3c 70 3e 49 6e 20 61 20 63 6f 6d 70 6f 75  ..<p>In a compou
172b0 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  nd SELECT statem
172c0 65 6e 74 2c 20 74 68 65 20 74 68 69 72 64 20 4f  ent, the third O
172d0 52 44 45 52 20 42 59 20 6d 61 74 63 68 69 6e 67  RDER BY matching
172e0 20 72 75 6c 65 0a 72 65 71 75 69 72 65 73 20 74   rule.requires t
172f0 68 61 74 20 74 68 65 20 65 78 70 72 65 73 73 69  hat the expressi
17300 6f 6e 20 62 65 20 69 64 65 6e 74 69 63 61 6c 20  on be identical 
17310 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f  to one of the co
17320 6c 75 6d 6e 73 20 69 6e 0a 74 68 65 20 72 65 73  lumns in.the res
17330 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 74 68  ult set.  The th
17340 72 65 65 20 72 75 6c 65 73 20 61 72 65 20 66 69  ree rules are fi
17350 72 73 74 20 61 70 70 6c 69 65 64 20 74 6f 20 74  rst applied to t
17360 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 53 45 4c  he left-most.SEL
17370 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  ECT in the compo
17380 75 6e 64 2e 20 20 49 66 20 61 20 6d 61 74 63 68  und.  If a match
17390 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73   is found, the s
173a0 65 61 72 63 68 20 73 74 6f 70 73 2e 20 20 4f 74  earch stops.  Ot
173b0 68 65 72 77 69 73 65 2c 0a 74 68 65 20 6e 65 78  herwise,.the nex
173c0 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  t SELECT to the 
173d0 72 69 67 68 74 20 69 73 20 74 72 69 65 64 2e 20  right is tried. 
173e0 20 54 68 69 73 20 63 6f 6e 74 69 6e 75 65 73 20   This continues 
173f0 75 6e 74 69 6c 20 61 20 6d 61 74 63 68 0a 69 73  until a match.is
17400 20 66 6f 75 6e 64 2e 20 20 45 61 63 68 20 74 65   found.  Each te
17410 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
17420 42 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 6f  BY clause is pro
17430 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
17440 79 20 0a 61 6e 64 20 6d 61 79 20 63 6f 6d 65 20  y .and may come 
17450 66 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 20 53  from different S
17460 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
17470 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   in the compound
17480 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49  .</p>..<p>The LI
17490 4d 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65  MIT clause place
174a0 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64  s an upper bound
174b0 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
174c0 66 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20  f rows.returned 
174d0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  in the result.  
174e0 41 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54  A negative LIMIT
174f0 20 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75 70   indicates no up
17500 70 65 72 20 62 6f 75 6e 64 2e 0a 54 68 65 20 6f  per bound..The o
17510 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66  ptional OFFSET f
17520 6f 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73  ollowing LIMIT s
17530 70 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61 6e  pecifies how man
17540 79 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20 61  y.rows to skip a
17550 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
17560 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
17570 74 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  t..In a compound
17580 20 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d 49   query, the LIMI
17590 54 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c  T clause may onl
175a0 79 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 0a  y appear on the.
175b0 66 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74 61  final SELECT sta
175c0 74 65 6d 65 6e 74 2e 0a 54 68 65 20 6c 69 6d 69  tement..The limi
175d0 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  t is applied to 
175e0 74 68 65 20 65 6e 74 69 72 65 20 71 75 65 72 79  the entire query
175f0 20 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64 69   not.to the indi
17600 76 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73 74  vidual SELECT st
17610 61 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68  atement to which
17620 20 69 74 20 69 73 20 61 74 74 61 63 68 65 64 2e   it is attached.
17630 0a 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74 68  .Note that if th
17640 65 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64  e OFFSET keyword
17650 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
17660 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
17670 65 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73 20  en the.limit is 
17680 74 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65 72  the first number
17690 20 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74 20   and the offset 
176a0 69 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75  is the second nu
176b0 6d 62 65 72 2e 20 20 49 66 20 61 0a 63 6f 6d 6d  mber.  If a.comm
176c0 61 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61  a is used instea
176d0 64 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54 20  d of the OFFSET 
176e0 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68  keyword, then th
176f0 65 20 6f 66 66 73 65 74 20 69 73 20 74 68 65 0a  e offset is the.
17700 66 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64  first number and
17710 20 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74 68   the limit is th
17720 65 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e  e second number.
17730 20 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a 63    This seeming.c
17740 6f 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20 69  ontradition is i
17750 6e 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20  ntentional - it 
17760 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74  maximizes compat
17770 69 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65 67  ibility with leg
17780 61 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73 65  acy.SQL database
17790 20 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a   systems..</p>..
177a0 3c 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45  <p>A compound SE
177b0 4c 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20 66  LECT is formed f
177c0 72 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  rom two or more 
177d0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 63  simple SELECTs c
177e0 6f 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65 20  onnected.by one 
177f0 6f 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73  of the operators
17800 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c   UNION, UNION AL
17810 4c 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72  L, INTERSECT, or
17820 20 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20 63   EXCEPT.  In.a c
17830 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
17840 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75  all the constitu
17850 65 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74  ent SELECTs must
17860 20 73 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d   specify the.sam
17870 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  e number of resu
17880 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65  lt columns.  The
17890 72 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61  re may be only a
178a0 20 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42 59   single ORDER BY
178b0 0a 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65  .clause at the e
178c0 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75  nd of the compou
178d0 6e 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65 20  nd SELECT.  The 
178e0 55 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20  UNION and UNION 
178f0 41 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f  ALL.operators co
17900 6d 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  mbine the result
17910 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 73  s of the SELECTs
17920 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 61 6e   to the right an
17930 64 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73 69  d left into.a si
17940 6e 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e 20  ngle big table. 
17950 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
17960 69 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e  is that in UNION
17970 20 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73   all result rows
17980 0a 61 72 65 20 64 69 73 74 69 6e 63 74 20 77 68  .are distinct wh
17990 65 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c  ere in UNION ALL
179a0 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 64 75   there may be du
179b0 70 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49 4e  plicates..The IN
179c0 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72  TERSECT operator
179d0 20 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65 72   takes the inter
179e0 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
179f0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65  esults of the.le
17a00 66 74 20 61 6e 64 20 72 69 67 68 74 20 53 45 4c  ft and right SEL
17a10 45 43 54 73 2e 20 20 45 58 43 45 50 54 20 74 61  ECTs.  EXCEPT ta
17a20 6b 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  kes the result o
17a30 66 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61 66  f left SELECT af
17a40 74 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65  ter.removing the
17a50 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
17a60 72 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20 57  right SELECT.  W
17a70 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
17a80 65 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f  e SELECTs.are co
17a90 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63  nnected into a c
17aa0 6f 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72  ompound, they gr
17ab0 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  oup from left to
17ac0 20 72 69 67 68 74 2e 3c 2f 70 3e 0a 0a 0a 3c 74   right.</p>...<t
17ad0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
17ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b20 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54  ##.Section UPDAT
17b30 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45  E update {UPDATE
17b40 20 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c   UPDATEs}..Bubbl
17b50 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d  eDiagram update-
17b60 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
17b70 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
17b80 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
17b90 0a 0a 3c 70 3e 54 68 65 20 55 50 44 41 54 45 20  ..<p>The UPDATE 
17ba0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
17bb0 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  d to change the 
17bc0 76 61 6c 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 73  value of columns
17bd0 20 69 6e 20 0a 73 65 6c 65 63 74 65 64 20 72 6f   in .selected ro
17be0 77 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 20 20  ws of a table.  
17bf0 45 61 63 68 20 61 73 73 69 67 6e 6d 65 6e 74 20  Each assignment 
17c00 69 6e 20 61 6e 20 55 50 44 41 54 45 20 73 70 65  in an UPDATE spe
17c10 63 69 66 69 65 73 0a 61 20 63 6f 6c 75 6d 6e 20  cifies.a column 
17c20 6e 61 6d 65 20 74 6f 20 74 68 65 20 6c 65 66 74  name to the left
17c30 20 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 73   of the equals s
17c40 69 67 6e 20 61 6e 64 20 61 6e 20 61 72 62 69 74  ign and an arbit
17c50 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 0a  rary expression.
17c60 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 20 54  to the right.  T
17c70 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6d  he expressions m
17c80 61 79 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ay use the value
17c90 73 20 6f 66 20 6f 74 68 65 72 20 63 6f 6c 75 6d  s of other colum
17ca0 6e 73 2e 0a 41 6c 6c 20 65 78 70 72 65 73 73 69  ns..All expressi
17cb0 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
17cc0 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73  d before any ass
17cd0 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64  ignments are mad
17ce0 65 2e 0a 41 20 57 48 45 52 45 20 63 6c 61 75 73  e..A WHERE claus
17cf0 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  e can be used to
17d00 20 72 65 73 74 72 69 63 74 20 77 68 69 63 68 20   restrict which 
17d10 72 6f 77 73 20 61 72 65 20 75 70 64 61 74 65 64  rows are updated
17d20 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70  .</p>..<p>The op
17d30 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
17d40 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
17d50 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
17d60 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
17d70 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
17d80 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
17d90 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
17da0 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
17db0 65 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20 74  e command..See t
17dc0 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c 65  he section title
17dd0 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d.[ON CONFLICT] 
17de0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
17df0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  nformation.</p>.
17e00 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e  .<h3>Restriction
17e10 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74  s on UPDATE Stat
17e20 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52  ements Within CR
17e30 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33  EATE TRIGGER</h3
17e40 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
17e50 61 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61  additional synta
17e60 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  x restrictions o
17e70 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
17e80 6e 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77  nts that.occur w
17e90 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f  ithin the body o
17ea0 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47  f a [CREATE TRIG
17eb0 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  GER] statement. 
17ec0 20 54 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61   The <i>table-na
17ed0 6d 65 3c 2f 69 3e 0a 6d 75 73 74 20 62 65 20 75  me</i>.must be u
17ee0 6e 71 75 61 6c 69 66 69 65 64 2e 20 0a 49 6e 20  nqualified. .In 
17ef0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
17f00 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
17f10 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
17f20 65 66 69 78 0a 6f 6e 20 74 68 65 20 74 61 62 6c  efix.on the tabl
17f30 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
17f40 6c 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69  lowed within tri
17f50 67 67 65 72 73 2e 20 0a 54 68 65 20 74 61 62 6c  ggers. .The tabl
17f60 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64  e to be modified
17f70 20 6d 75 73 74 20 62 65 20 69 6e 20 74 68 65 20   must be in the 
17f80 73 61 6d 65 0a 64 61 74 61 62 61 73 65 20 61 73  same.database as
17f90 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
17fa0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
17fb0 69 73 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e  is attached.</p>
17fc0 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44  ..<p>The INDEXED
17fd0 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
17fe0 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
17ff0 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55  not allowed on U
18000 50 44 41 54 45 0a 73 74 61 74 65 6d 65 6e 74 73  PDATE.statements
18010 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
18020 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49  .</p>..<p>The LI
18030 4d 49 54 20 63 6c 61 75 73 65 20 28 64 65 73 63  MIT clause (desc
18040 72 69 62 65 64 20 62 65 6c 6f 77 29 20 69 73 20  ribed below) is 
18050 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68  unsupported with
18060 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
18070 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20 4c  ..<h3>Optional L
18080 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20 42  IMIT and ORDER B
18090 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a 0a  Y Clauses</h3>..
180a0 3c 70 3e 49 66 20 53 51 4c 69 74 65 20 69 73 20  <p>If SQLite is 
180b0 62 75 69 6c 74 20 77 69 74 68 20 74 68 65 20 5b  built with the [
180c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
180d0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
180e0 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
180f0 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74 68 65 20  option then the 
18100 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 55 50  syntax of the UP
18110 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
18120 73 20 65 78 74 65 6e 64 65 64 0a 77 69 74 68 20  s extended.with 
18130 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42  optional ORDER B
18140 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  Y and LIMIT clau
18150 73 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  ses as follows:<
18160 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  /p>..<tcl>Bubble
18170 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
18180 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c  tmt-limited</tcl
18190 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e  >..<p>The option
181a0 61 6c 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  al LIMIT clause 
181b0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6c  can be used to l
181c0 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
181d0 6f 66 0a 72 6f 77 73 20 6d 6f 64 69 66 65 64 2c  of.rows modifed,
181e0 20 61 6e 64 20 74 68 65 72 65 62 79 20 6c 69 6d   and thereby lim
181f0 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  it the size of t
18200 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  he transaction..
18210 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
18220 75 73 65 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  use is used only
18230 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
18240 69 63 68 20 72 6f 77 73 20 66 61 6c 6c 0a 77 69  ich rows fall.wi
18250 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
18260 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
18270 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
18280 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
18290 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 64 65  ry.and is not de
182a0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
182b0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
182c0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
182d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
182e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
182f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18310 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
18320 6f 6e 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d  on VACUUM vacuum
18330 20 56 41 43 55 55 4d 0a 0a 42 75 62 62 6c 65 44   VACUUM..BubbleD
18340 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d 73 74  iagram vacuum-st
18350 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
18360 57 68 65 6e 20 61 6e 20 6f 62 6a 65 63 74 20 28  When an object (
18370 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72  table, index, or
18380 20 74 72 69 67 67 65 72 29 20 69 73 20 64 72 6f   trigger) is dro
18390 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 64  pped from the .d
183a0 61 74 61 62 61 73 65 2c 20 69 74 20 6c 65 61 76  atabase, it leav
183b0 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74 79 20  es behind empty 
183c0 73 70 61 63 65 2e 20 0a 54 68 69 73 20 65 6d 70  space. .This emp
183d0 74 79 20 73 70 61 63 65 20 77 69 6c 6c 20 62 65  ty space will be
183e0 20 72 65 75 73 65 64 20 74 68 65 20 6e 65 78 74   reused the next
183f0 20 74 69 6d 65 20 6e 65 77 20 69 6e 66 6f 72 6d   time new inform
18400 61 74 69 6f 6e 20 69 73 0a 61 64 64 65 64 20 74  ation is.added t
18410 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  o the database. 
18420 20 42 75 74 20 69 6e 20 74 68 65 20 6d 65 61 6e   But in the mean
18430 74 69 6d 65 2c 20 74 68 65 20 64 61 74 61 62 61  time, the databa
18440 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 62 65  se file might.be
18450 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73 74 72   larger than str
18460 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72 79 2e  ictly necessary.
18470 20 20 41 6c 73 6f 2c 20 66 72 65 71 75 65 6e 74    Also, frequent
18480 20 69 6e 73 65 72 74 73 2c 20 75 70 64 61 74 65   inserts, update
18490 73 2c 0a 61 6e 64 20 64 65 6c 65 74 65 73 20 63  s,.and deletes c
184a0 61 6e 20 63 61 75 73 65 20 74 68 65 20 69 6e 66  an cause the inf
184b0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  ormation in the 
184c0 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 63 6f  database to beco
184d0 6d 65 0a 66 72 61 67 6d 65 6e 74 65 64 20 2d 20  me.fragmented - 
184e0 73 63 72 61 74 74 65 72 65 64 20 6f 75 74 20 61  scrattered out a
184f0 6c 6c 20 61 63 72 6f 73 73 20 74 68 65 20 64 61  ll across the da
18500 74 61 62 61 73 65 20 66 69 6c 65 20 72 61 74 68  tabase file rath
18510 65 72 0a 74 68 61 6e 20 63 6c 75 73 74 65 72 65  er.than clustere
18520 64 20 74 6f 67 65 74 68 65 72 20 69 6e 20 6f 6e  d together in on
18530 65 20 70 6c 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70  e place.</p>..<p
18540 3e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  >The VACUUM comm
18550 61 6e 64 20 63 6c 65 61 6e 73 0a 74 68 65 20 6d  and cleans.the m
18560 61 69 6e 20 64 61 74 61 62 61 73 65 20 62 79 20  ain database by 
18570 63 6f 70 79 69 6e 67 20 69 74 73 20 63 6f 6e 74  copying its cont
18580 65 6e 74 73 20 74 6f 20 61 20 74 65 6d 70 6f 72  ents to a tempor
18590 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
185a0 65 20 61 6e 64 20 0a 72 65 6c 6f 61 64 69 6e 67  e and .reloading
185b0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61   the original da
185c0 74 61 62 61 73 65 20 66 69 6c 65 20 66 72 6f 6d  tabase file from
185d0 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69 73   the copy.  This
185e0 20 65 6c 69 6d 69 6e 61 74 65 73 20 0a 66 72 65   eliminates .fre
185f0 65 20 70 61 67 65 73 2c 20 20 61 6c 69 67 6e 73  e pages,  aligns
18600 20 74 61 62 6c 65 20 64 61 74 61 20 74 6f 20 62   table data to b
18610 65 20 63 6f 6e 74 69 67 75 6f 75 73 2c 20 61 6e  e contiguous, an
18620 64 20 6f 74 68 65 72 77 69 73 65 20 63 6c 65 61  d otherwise clea
18630 6e 73 20 0a 75 70 20 74 68 65 20 64 61 74 61 62  ns .up the datab
18640 61 73 65 20 66 69 6c 65 20 73 74 72 75 63 74 75  ase file structu
18650 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  re.</p>..<p>The 
18660 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d  VACUUM command m
18670 61 79 20 63 68 61 6e 67 65 20 74 68 65 20 0a 5b  ay change the .[
18680 52 4f 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20  ROWID | ROWIDs] 
18690 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 61  of entries in ta
186a0 62 6c 65 73 20 74 68 61 74 20 64 6f 0a 6e 6f 74  bles that do.not
186b0 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69   have an explici
186c0 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  t [INTEGER PRIMA
186d0 52 59 20 4b 45 59 5d 2e 3c 2f 70 3e 0a 0a 3c 70  RY KEY].</p>..<p
186e0 3e 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72  >VACUUM only wor
186f0 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64  ks on the main d
18700 61 74 61 62 61 73 65 2e 0a 49 74 20 69 73 20 6e  atabase..It is n
18710 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 56  ot possible to V
18720 41 43 55 55 4d 20 61 6e 20 61 74 74 61 63 68 65  ACUUM an attache
18730 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  d database file.
18740 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 56 41 43  </p>..<p>The VAC
18750 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  UUM command will
18760 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69   fail if there i
18770 73 20 61 6e 20 61 63 74 69 76 65 20 74 72 61 6e  s an active tran
18780 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20 56 41 43  saction..The VAC
18790 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  UUM command is a
187a0 20 6e 6f 2d 6f 70 20 66 6f 72 20 69 6e 2d 6d 65   no-op for in-me
187b0 6d 6f 72 79 20 64 61 74 61 62 61 73 65 73 2e 3c  mory databases.<
187c0 2f 70 3e 0a 0a 3c 70 3e 41 73 20 6f 66 20 53 51  /p>..<p>As of SQ
187d0 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31  Lite version 3.1
187e0 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  , an alternative
187f0 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41   to using the VA
18800 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a 69 73 20  CUUM command.is 
18810 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65  auto-vacuum mode
18820 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  , enabled using 
18830 74 68 65 20 0a 5b 61 75 74 6f 5f 76 61 63 75 75  the .[auto_vacuu
18840 6d 5d 20 70 72 61 67 6d 61 2e 20 20 57 68 65 6e  m] pragma.  When
18850 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
18860 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
18870 64 61 74 61 62 61 73 65 2c 20 0a 6c 61 72 67 65  database, .large
18880 20 64 65 6c 65 74 65 73 20 63 61 75 73 65 0a 74   deletes cause.t
18890 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
188a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
188b0 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65 76 65 72  shrink.  However
188c0 2c 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a  , [auto_vacuum].
188d0 61 6c 73 6f 20 63 61 75 73 65 73 20 65 78 63 65  also causes exce
188e0 73 73 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e  ss fragmentation
188f0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18900 20 66 69 6c 65 2e 20 20 41 6e 64 20 5b 61 75 74   file.  And [aut
18910 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e  o_vacuum].does n
18920 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69  ot compact parti
18930 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
18940 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
18950 65 20 61 73 20 56 41 43 55 55 4d 0a 64 6f 65 73  e as VACUUM.does
18960 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 70  .</p>..<p>The [p
18970 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 2f 6f 72  age_size] and/or
18980 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 6d   [auto_vacuum] m
18990 6f 64 65 20 6f 66 20 61 20 64 61 74 61 62 61 73  ode of a databas
189a0 65 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64  e can be changed
189b0 0a 62 79 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65  .by invoking the
189c0 20 5b 70 61 67 65 5f 73 69 7a 65 20 70 72 61 67   [page_size prag
189d0 6d 61 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f  ma] and/or [auto
189e0 5f 76 61 63 75 75 6d 20 70 72 61 67 6d 61 5d 20  _vacuum pragma] 
189f0 61 6e 64 20 74 68 65 6e 0a 69 6d 6d 65 64 69 61  and then.immedia
18a00 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67 20 74  tely VACUUMing t
18a10 68 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  he database.</p>
18a20 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
18a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a70 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
18a80 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65  INDEXED BY} inde
18a90 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44 20  xedby {{INDEXED 
18aa0 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44  BY} {NOT INDEXED
18ab0 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68  }}..</tcl>.<p>Th
18ac0 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72  e INDEXED BY phr
18ad0 61 73 65 20 69 73 20 61 20 53 51 4c 20 65 78 74  ase is a SQL ext
18ae0 65 6e 73 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e 6c  ension found onl
18af0 79 20 69 6e 20 53 51 4c 69 74 65 20 77 68 69 63  y in SQLite whic
18b00 68 20 63 61 6e 0a 62 65 20 75 73 65 64 20 74 6f  h can.be used to
18b10 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
18b20 20 63 6f 72 72 65 63 74 20 69 6e 64 69 63 65 73   correct indices
18b30 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 20   are being used 
18b40 6f 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b  on a [DELETE],.[
18b50 53 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44  SELECT], or [UPD
18b60 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ATE] statement..
18b70 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70  The INDEXED BY p
18b80 68 72 61 73 65 20 61 6c 77 61 79 73 20 66 6f 6c  hrase always fol
18b90 6c 6f 77 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  lows the name of
18ba0 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 53 51   a table that SQ
18bb0 4c 69 74 65 20 77 69 6c 6c 0a 62 65 20 72 65 61  Lite will.be rea
18bc0 64 69 6e 67 2e 20 20 54 68 65 20 49 4e 44 45 58  ding.  The INDEX
18bd0 45 44 20 42 59 20 70 68 72 61 73 65 20 63 61 6e  ED BY phrase can
18be0 20 62 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20   be seen in the 
18bf0 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78  following syntax
18c00 0a 64 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a  .diagrams:</p>..
18c10 3c 74 63 6c 3e 0a 42 75 62 62 6c 65 44 69 61 67  <tcl>.BubbleDiag
18c20 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
18c30 62 6c 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44  ble-name.BubbleD
18c40 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f  iagram single-so
18c50 75 72 63 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  urce.</tcl>..<p>
18c60 54 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20  The "INDEXED BY 
18c70 69 6e 64 65 78 2d 6e 61 6d 65 22 20 63 6c 61 75  index-name" clau
18c80 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
18c90 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65  t the named inde
18ca0 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20 69  x.must be used i
18cb0 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20  n order to look 
18cc0 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65  up values on the
18cd0 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65   preceding table
18ce0 2e 0a 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20  ..If index-name 
18cf0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f  does not exist o
18d00 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  r cannot be used
18d10 20 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20   for the query, 
18d20 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61  then.the prepara
18d30 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20  tion of the SQL 
18d40 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e  statement fails.
18d50 0a 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45  .The "NOT INDEXE
18d60 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  D" clause specif
18d70 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65  ies that no inde
18d80 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20  x shall be used 
18d90 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74  when.accessing t
18da0 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
18db0 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d  le, including im
18dc0 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72  plied indices cr
18dd0 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61  eate by.UNIQUE a
18de0 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  nd PRIMARY KEY c
18df0 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77  onstraints.  How
18e00 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45  ever, the INTEGE
18e10 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61  R PRIMARY KEY.ca
18e20 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20  n still be used 
18e30 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69  to look up entri
18e40 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f  es even when "NO
18e50 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70  T INDEXED" is sp
18e60 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  ecified.</p>..<p
18e70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61  >Some SQL databa
18e80 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69  se engines provi
18e90 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  de non-standard 
18ea0 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d  "hint" mechanism
18eb0 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75  s which.can be u
18ec0 73 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20  sed to give the 
18ed0 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
18ee0 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74  clues about what
18ef0 20 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75   indices it shou
18f00 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72  ld.use for a par
18f10 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e  ticular statemen
18f20 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59  t.  The INDEX BY
18f30 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74   clause of SQLit
18f40 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65  e is .<em>not</e
18f50 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63  m> a hinting mec
18f60 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68  hanism and it sh
18f70 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
18f80 20 61 73 20 73 75 63 68 2e 0a 54 68 65 20 49 4e   as such..The IN
18f90 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
18fa0 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68  does not give th
18fb0 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74  e optimizer hint
18fc0 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e  s about which in
18fd0 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67  dex.to use; it g
18fe0 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a  ives the optimiz
18ff0 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74  er a requirement
19000 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20   of which index 
19010 74 6f 20 75 73 65 2e 0a 49 66 20 74 68 65 20 71  to use..If the q
19020 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69  uery optimizer i
19030 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20  s unable to use 
19040 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69 66  the index specif
19050 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58  ied by the.INDEX
19060 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
19070 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20   the query will 
19080 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72  fail with an err
19090 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  or.</p>..<p>The 
190a0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
190b0 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d  e is <em>not</em
190c0 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  > intended for u
190d0 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65  se in tuning.the
190e0 20 70 72 65 66 6f 72 6d 61 6e 63 65 20 6f 66 20   preformance of 
190f0 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e  a query.  The in
19100 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45  tent of the INDE
19110 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73  XED BY clause is
19120 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d  .to raise a run-
19130 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20  time error if a 
19140 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73  schema change, s
19150 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20  uch as dropping 
19160 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69  or.creating an i
19170 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68 65  ndex, causes the
19180 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20   query plan for 
19190 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65  a time-sensitive
191a0 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65   query.to change
191b0 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42  .  The INDEXED B
191c0 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73 69  Y clause is desi
191d0 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74  gned to help det
191e0 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20  ect.undesirable 
191f0 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67  query plan chang
19200 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65 73  es during regres
19210 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 44 65  sion testing..De
19220 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d  velopers are adm
19230 6f 6e 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20  onished to omit 
19240 61 6c 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58  all use of INDEX
19250 45 44 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70  ED BY during.app
19260 6c 69 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c  lication design,
19270 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
19280 20 74 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75   testing, and tu
19290 6e 69 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45  ning.  If.INDEXE
192a0 44 20 42 59 20 69 73 20 74 6f 20 62 65 20 75 73  D BY is to be us
192b0 65 64 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68  ed at all, it sh
192c0 6f 75 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64  ould be inserted
192d0 20 61 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64   at the very.end
192e0 20 6f 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d   of the developm
192f0 65 6e 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e  ent process when
19300 20 22 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20   "locking down" 
19310 61 20 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c  a design.</p>..<
19320 68 33 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33  h3>See Also:</h3
19330 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74  >..<p>The [sqlit
19340 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
19350 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
19360 65 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  e together with 
19370 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54  the.[SQLITE_STMT
19380 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f  STATUS_FULLSCAN_
19390 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54  STEP] and [SQLIT
193a0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
193b0 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20  T] verbs.can be 
193c0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 61  used to detect a
193d0 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20  t run-time when 
193e0 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
193f0 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65   is not.making e
19400 66 66 65 63 74 69 76 65 20 75 73 65 20 6f 66 20  ffective use of 
19410 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61  indices.  Many a
19420 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20  pplications may 
19430 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68  prefer to.use th
19440 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
19450 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66  status()] interf
19460 61 63 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e  ace to detect in
19470 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65  dex misuse.rathe
19480 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58  r than the INDEX
19490 45 44 20 42 59 20 70 68 72 61 73 65 20 64 65 73  ED BY phrase des
194a0 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e  cribed here.</p>
194b0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
194c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
194d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
194e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
194f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19500 23 23 23 23 23 0a 23 20 41 20 6c 69 73 74 20 6f  #####.# A list o
19510 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 41 20 61  f keywords.  A a
19520 73 74 65 72 69 73 6b 20 6f 63 63 75 72 73 20 61  sterisk occurs a
19530 66 74 65 72 20 74 68 65 20 6b 65 79 77 6f 72 64  fter the keyword
19540 20 69 66 20 69 74 20 69 73 20 6f 6e 0a 23 20 74   if it is on.# t
19550 68 65 20 66 61 6c 6c 62 61 63 6b 20 6c 69 73 74  he fallback list
19560 2e 0a 23 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f  ..#.set keyword_
19570 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20  list [lsort {.  
19580 20 41 42 4f 52 54 2a 0a 20 20 20 41 44 44 0a 20   ABORT*.   ADD. 
19590 20 20 41 46 54 45 52 2a 0a 20 20 20 41 4c 4c 0a    AFTER*.   ALL.
195a0 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c     ALTER.   ANAL
195b0 59 5a 45 2a 0a 20 20 20 41 4e 44 0a 20 20 20 41  YZE*.   AND.   A
195c0 53 0a 20 20 20 41 53 43 2a 0a 20 20 20 41 54 54  S.   ASC*.   ATT
195d0 41 43 48 2a 0a 20 20 20 41 55 54 4f 49 4e 43 52  ACH*.   AUTOINCR
195e0 45 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 2a  EMENT.   BEFORE*
195f0 0a 20 20 20 42 45 47 49 4e 2a 0a 20 20 20 42 45  .   BEGIN*.   BE
19600 54 57 45 45 4e 0a 20 20 20 42 59 2a 0a 20 20 20  TWEEN.   BY*.   
19610 43 41 53 43 41 44 45 2a 0a 20 20 20 43 41 53 45  CASCADE*.   CASE
19620 0a 20 20 20 43 41 53 54 2a 0a 20 20 20 43 48 45  .   CAST*.   CHE
19630 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20  CK.   COLLATE.  
19640 20 43 4f 4c 55 4d 4e 2a 0a 20 20 20 43 4f 4d 4d   COLUMN*.   COMM
19650 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 2a 0a  IT.   CONFLICT*.
19660 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20     CONSTRAINT.  
19670 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53   CREATE.   CROSS
19680 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41 54 45  .   CURRENT_DATE
19690 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d  *.   CURRENT_TIM
196a0 45 2a 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  E*.   CURRENT_TI
196b0 4d 45 53 54 41 4d 50 2a 0a 20 20 20 44 41 54 41  MESTAMP*.   DATA
196c0 42 41 53 45 2a 0a 20 20 20 44 45 46 41 55 4c 54  BASE*.   DEFAULT
196d0 0a 20 20 20 44 45 46 45 52 52 45 44 2a 0a 20 20  .   DEFERRED*.  
196e0 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44   DEFERRABLE.   D
196f0 45 4c 45 54 45 0a 20 20 20 44 45 53 43 2a 0a 20  ELETE.   DESC*. 
19700 20 20 44 45 54 41 43 48 2a 0a 20 20 20 44 49 53    DETACH*.   DIS
19710 54 49 4e 43 54 0a 20 20 20 44 52 4f 50 0a 20 20  TINCT.   DROP.  
19720 20 45 4e 44 2a 0a 20 20 20 45 41 43 48 2a 0a 20   END*.   EACH*. 
19730 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45    ELSE.   ESCAPE
19740 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45 58  .   EXCEPT.   EX
19750 43 4c 55 53 49 56 45 2a 0a 20 20 20 45 58 49 53  CLUSIVE*.   EXIS
19760 54 53 0a 20 20 20 45 58 50 4c 41 49 4e 2a 0a 20  TS.   EXPLAIN*. 
19770 20 20 46 41 49 4c 2a 0a 20 20 20 46 4f 52 2a 0a    FAIL*.   FOR*.
19780 20 20 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52     FOREIGN.   FR
19790 4f 4d 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c  OM.   FULL.   GL
197a0 4f 42 2a 0a 20 20 20 47 52 4f 55 50 0a 20 20 20  OB*.   GROUP.   
197b0 48 41 56 49 4e 47 0a 20 20 20 49 46 2a 0a 20 20  HAVING.   IF*.  
197c0 20 49 47 4e 4f 52 45 2a 0a 20 20 20 49 4d 4d 45   IGNORE*.   IMME
197d0 44 49 41 54 45 2a 0a 20 20 20 49 4e 0a 20 20 20  DIATE*.   IN.   
197e0 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45 44  INDEX.   INDEXED
197f0 2a 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 2a 0a  *.   INITIALLY*.
19800 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45     INNER.   INSE
19810 52 54 0a 20 20 20 49 4e 53 54 45 41 44 2a 0a 20  RT.   INSTEAD*. 
19820 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49    INTERSECT.   I
19830 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e  NTO.   IS.   ISN
19840 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b  ULL.   JOIN.   K
19850 45 59 2a 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c  EY*.   LEFT.   L
19860 49 4b 45 2a 0a 20 20 20 4c 49 4d 49 54 0a 20 20  IKE*.   LIMIT.  
19870 20 4d 41 54 43 48 2a 0a 20 20 20 4e 41 54 55 52   MATCH*.   NATUR
19880 41 4c 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f 54  AL.   NOT.   NOT
19890 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20  NULL.   NULL.   
198a0 4f 46 2a 0a 20 20 20 4f 46 46 53 45 54 2a 0a 20  OF*.   OFFSET*. 
198b0 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52    ON.   OR.   OR
198c0 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20  DER.   OUTER.   
198d0 50 4c 41 4e 2a 0a 20 20 20 50 52 41 47 4d 41 2a  PLAN*.   PRAGMA*
198e0 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51  .   PRIMARY.   Q
198f0 55 45 52 59 2a 0a 20 20 20 52 41 49 53 45 2a 0a  UERY*.   RAISE*.
19900 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20 20     REFERENCES.  
19910 20 52 45 47 45 58 50 2a 0a 20 20 20 52 45 49 4e   REGEXP*.   REIN
19920 44 45 58 2a 0a 20 20 20 52 45 4c 45 41 53 45 2a  DEX*.   RELEASE*
19930 0a 20 20 20 52 45 4e 41 4d 45 2a 0a 20 20 20 52  .   RENAME*.   R
19940 45 50 4c 41 43 45 2a 0a 20 20 20 52 45 53 54 52  EPLACE*.   RESTR
19950 49 43 54 2a 0a 20 20 20 52 49 47 48 54 0a 20 20  ICT*.   RIGHT.  
19960 20 52 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57   ROLLBACK.   ROW
19970 2a 0a 20 20 20 53 41 56 45 50 4f 49 4e 54 2a 0a  *.   SAVEPOINT*.
19980 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54     SELECT.   SET
19990 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d  .   TABLE.   TEM
199a0 50 2a 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 2a  P*.   TEMPORARY*
199b0 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20  .   THEN.   TO. 
199c0 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20    TRANSACTION.  
199d0 20 54 52 49 47 47 45 52 2a 0a 20 20 20 55 4e 49   TRIGGER*.   UNI
199e0 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
199f0 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
19a00 20 20 20 56 41 43 55 55 4d 2a 0a 20 20 20 56 41     VACUUM*.   VA
19a10 4c 55 45 53 0a 20 20 20 56 49 45 57 2a 0a 20 20  LUES.   VIEW*.  
19a20 20 56 49 52 54 55 41 4c 2a 0a 20 20 20 57 48 45   VIRTUAL*.   WHE
19a30 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68  N.   WHERE.}]..h
19a40 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61  d_puts {<DIV cla
19a50 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22  ss="pdf_section"
19a60 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69  >}.Section {SQLi
19a70 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79  te Keywords} key
19a80 77 6f 72 64 73 20 7b 7b 53 51 4c 20 6b 65 79 77  words {{SQL keyw
19a90 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72  ord} {SQL keywor
19aa0 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f  ds}}.hd_puts {</
19ab0 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  DIV>}.</tcl>..<p
19ac0 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72  >The SQL standar
19ad0 64 20 73 70 65 63 69 66 69 65 73 20 61 20 68 75  d specifies a hu
19ae0 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79  ge number of key
19af0 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79 20  words which may 
19b00 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20 74  not.be used as t
19b10 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c  he names of tabl
19b20 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c  es, indices, col
19b30 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c  umns, databases,
19b40 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75   user-defined.fu
19b50 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69  nctions, collati
19b60 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62  ons, virtual tab
19b70 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61  le modules, or a
19b80 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f  ny other named o
19b90 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20  bject..The list 
19ba0 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73  of keywords is s
19bb0 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20  o long that few 
19bc0 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d  people can remem
19bd0 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f  ber them all..Fo
19be0 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c  r most SQL code,
19bf0 20 79 6f 75 72 20 73 61 66 65 73 74 20 62 65 74   your safest bet
19c00 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65   is to never use
19c10 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e   any English lan
19c20 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68  guage.word as th
19c30 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72  e name of a user
19c40 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e  -defined object.
19c50 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20  </p>..<p>If you 
19c60 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65  want to use a ke
19c70 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c  yword as a name,
19c80 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f   you need to quo
19c90 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72  te it.  There.ar
19ca0 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20  e three ways of 
19cb0 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73  quoting keywords
19cc0 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a   in SQLite:</p>.
19cd0 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  .<p>.<blockquote
19ce0 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c  >.<table>.<tr>.<
19cf0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
19d00 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e  <b>'keyword'</b>
19d10 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
19d20 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41  20"></td>..<td>A
19d30 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67   keyword in sing
19d40 6c 65 20 71 75 6f 74 65 73 20 69 73 20 61 20 73  le quotes is a s
19d50 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f  tring literal.</
19d60 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
19d70 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
19d80 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e  <b>"keyword"</b>
19d90 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
19da0 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e  <td>A keyword in
19db0 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69   double-quotes i
19dc0 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 3c  s an identifier<
19dd0 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
19de0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
19df0 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64  ><b>&#91;keyword
19e00 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#93;</b></td><t
19e10 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41 20 6b  d></td>..<td>A k
19e20 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
19e30 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
19e40 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  ts is .        a
19e50 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
19e60 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
19e70 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
19e80 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
19e90 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
19ea0 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61 6e   by MS Access an
19eb0 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e 64  d SQL Server and
19ec0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
19ed0 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20  SQLite for.     
19ee0 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79     compatibility
19ef0 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72  .</td></tr>..<tr
19f00 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
19f10 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f  p"><b>&#96;keywo
19f20 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#96;</b></td>
19f30 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41  <td></td>..<td>A
19f40 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65   keyword enclose
19f50 64 20 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e  d in grave accen
19f60 74 73 20 28 41 53 43 49 49 20 63 6f 64 65 20 39  ts (ASCII code 9
19f70 36 29 20 69 73 20 0a 20 20 20 20 20 20 20 20 61  6) is .        a
19f80 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54  n identifier.  T
19f90 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64  his is not stand
19fa0 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71  ard SQL.  This q
19fb0 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  uoting mechanism
19fc0 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65 64  .        is used
19fd0 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73   by MySQL and is
19fe0 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c   included in SQL
19ff0 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20  ite for.        
1a000 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f  compatibility.</
1a010 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  td></tr>.</table
1a020 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >.</blockquote>.
1a030 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73  </p>..<p>For res
1a040 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e  ilience when con
1a050 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73  fronted with his
1a060 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74  torical SQL stat
1a070 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77  ements, SQLite.w
1a080 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65  ill sometimes be
1a090 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72  nd the quoting r
1a0a0 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a  ules above:</p>.
1a0b0 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 66 20  .<ul>.<li><p>If 
1a0c0 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e  a keyword in sin
1a0d0 67 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20  gle.quotes (ex: 
1a0e0 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20  <b>'key'</b> or 
1a0f0 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69  <b>'glob'</b>) i
1a100 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74  s used in a cont
1a110 65 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65  ext where.an ide
1a120 6e 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77  ntifier is allow
1a130 65 64 20 62 75 74 20 77 68 65 72 65 20 61 20 73  ed but where a s
1a140 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73  tring literal is
1a150 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68   not allowed, th
1a160 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20  en.the token is 
1a170 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65  understood to be
1a180 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69   an identifier i
1a190 6e 73 74 65 61 64 20 6f 66 20 61 20 73 74 72 69  nstead of a stri
1a1a0 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e  ng literal..</p>
1a1b0 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66  </li>..<li><p>If
1a1c0 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f   a keyword in do
1a1d0 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a  uble.quotes (ex:
1a1e0 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72   <b>"key"</b> or
1a1f0 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20   <b>"glob"</b>) 
1a200 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e  is used in a con
1a210 74 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61  text where.it ca
1a220 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64  nnot be resolved
1a230 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65   to an identifie
1a240 72 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  r but where a st
1a250 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20  ring literal.is 
1a260 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68  allowed, then th
1a270 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
1a280 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74  stood to be a st
1a290 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73  ring literal ins
1a2a0 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74  tead.of an ident
1a2b0 69 66 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  ifer.</p></li>.<
1a2c0 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d  /ul>..<p>Program
1a2d0 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e  mers are caution
1a2e0 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68  ed not to use th
1a2f0 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73  e two exceptions
1a300 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
1a310 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65  e previous bulle
1a320 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a  ts.  We emphasiz
1a330 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69 73  e that they exis
1a340 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f  t only so that o
1a350 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65  ld.and ill-forme
1a360 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
1a370 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63   will run correc
1a380 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65 72  tly.  Future ver
1a390 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20  sions of.SQLite 
1a3a0 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 6f 20  might change to 
1a3b0 72 61 69 73 65 20 65 72 72 6f 72 73 20 69 6e 73  raise errors ins
1a3c0 74 65 61 64 20 6f 66 20 61 63 63 65 70 74 69 6e  tead of acceptin
1a3d0 67 20 74 68 65 20 6d 61 6c 66 6f 72 6d 65 64 0a  g the malformed.
1a3e0 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 76 65 72  statements cover
1a3f0 65 64 20 62 79 20 74 68 65 20 65 78 63 65 70 74  ed by the except
1a400 69 6f 6e 73 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ions above.</p>.
1a410 0a 3c 70 3e 53 51 4c 69 74 65 20 69 73 20 65 78  .<p>SQLite is ex
1a420 74 65 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20  tended to allow 
1a430 6d 61 6e 79 20 6b 65 79 77 6f 72 64 73 20 74 6f  many keywords to
1a440 20 62 65 20 75 73 65 64 20 75 6e 71 75 6f 74 65   be used unquote
1a450 64 0a 61 73 20 74 68 65 20 6e 61 6d 65 73 20 6f  d.as the names o
1a460 66 20 64 61 74 61 62 61 73 65 73 2c 20 74 61 62  f databases, tab
1a470 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 74 72  les, indices, tr
1a480 69 67 67 65 72 73 2c 20 76 69 65 77 73 2c 20 63  iggers, views, c
1a490 6f 6c 75 6d 6e 73 2c 0a 75 73 65 72 2d 64 65 66  olumns,.user-def
1a4a0 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20  ined functions, 
1a4b0 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 61 74 74 61  collations, atta
1a4c0 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
1a4d0 61 6e 64 20 76 69 72 74 75 61 6c 0a 66 75 6e 63  and virtual.func
1a4e0 74 69 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0a 49 6e  tion modules..In
1a4f0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79   the list of key
1a500 77 6f 72 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  words that follo
1a510 77 73 2c 20 74 68 6f 73 65 20 74 68 61 74 20 63  ws, those that c
1a520 61 6e 20 62 65 20 75 73 65 64 20 61 73 20 69 64  an be used as id
1a530 65 6e 74 69 66 69 65 72 73 0a 61 72 65 20 73 68  entifiers.are sh
1a540 6f 77 6e 20 69 6e 20 61 6e 20 69 74 61 6c 69 63  own in an italic
1a550 20 66 6f 6e 74 2e 20 20 4b 65 79 77 6f 72 64 73   font.  Keywords
1a560 20 74 68 61 74 20 6d 75 73 74 20 62 65 20 71 75   that must be qu
1a570 6f 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  oted in order to
1a580 20 62 65 0a 75 73 65 64 20 61 73 20 69 64 65 6e   be.used as iden
1a590 74 69 66 69 65 72 73 20 61 72 65 20 73 68 6f 77  tifiers are show
1a5a0 6e 20 69 6e 20 62 6f 6c 64 2e 3c 2f 70 3e 0a 0a  n in bold.</p>..
1a5b0 3c 70 3e 0a 53 51 4c 69 74 65 20 61 64 64 73 20  <p>.SQLite adds 
1a5c0 6e 65 77 20 6b 65 79 77 6f 72 64 73 20 66 72 6f  new keywords fro
1a5d0 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 77  m time to time w
1a5e0 68 65 6e 20 69 74 20 74 61 6b 65 73 20 6f 6e 20  hen it takes on 
1a5f0 6e 65 77 20 66 65 61 74 75 72 65 73 2e 0a 53 6f  new features..So
1a600 20 74 6f 20 70 72 65 76 65 6e 74 20 79 6f 75 72   to prevent your
1a610 20 63 6f 64 65 20 66 72 6f 6d 20 62 65 69 6e 67   code from being
1a620 20 62 72 6f 6b 65 6e 20 62 79 20 66 75 74 75 72   broken by futur
1a630 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 2c 20  e enhancements, 
1a640 79 6f 75 20 73 68 6f 75 6c 64 0a 6e 6f 72 6d 61  you should.norma
1a650 6c 6c 79 20 71 75 6f 74 65 20 61 6e 79 20 69 64  lly quote any id
1a660 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 69 73  entifier that is
1a670 20 61 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67   an English lang
1a680 75 61 67 65 20 77 6f 72 64 2c 20 65 76 65 6e 20  uage word, even 
1a690 69 66 0a 79 6f 75 20 64 6f 20 6e 6f 74 20 68 61  if.you do not ha
1a6a0 76 65 20 74 6f 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ve to..</p>..<p>
1a6b0 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  .The following a
1a6c0 72 65 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20  re the keywords 
1a6d0 63 75 72 72 65 6e 74 6c 79 20 72 65 63 6f 67 6e  currently recogn
1a6e0 69 7a 65 64 20 62 79 20 53 51 4c 69 74 65 3a 0a  ized by SQLite:.
1a6f0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1a700 65 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  e>.<table width=
1a710 22 31 30 30 25 22 20 63 6c 61 73 73 3d 22 70 64  "100%" class="pd
1a720 66 5f 6b 65 79 77 6f 72 64 73 22 3e 0a 3c 74 72  f_keywords">.<tr
1a730 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66  >.<td align="lef
1a740 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  t" valign="top" 
1a750 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 0a 3c 74  width="20%">..<t
1a760 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67  cl>.set n [lleng
1a770 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  th $keyword_list
1a780 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74  ].set nCol 5.set
1a790 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e   nRow [expr {($n
1a7a0 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d  +$nCol-1)/$nCol}
1a7b0 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63  ].set i 0.foreac
1a7c0 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f  h word $keyword_
1a7d0 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 5b 73 74  list {.  if {[st
1a7e0 72 69 6e 67 20 69 6e 64 65 78 20 24 77 6f 72 64  ring index $word
1a7f0 20 65 6e 64 5d 3d 3d 22 2a 22 7d 20 7b 0a 20 20   end]=="*"} {.  
1a800 20 20 73 65 74 20 77 6f 72 64 20 5b 73 74 72 69    set word [stri
1a810 6e 67 20 72 61 6e 67 65 20 24 77 6f 72 64 20 30  ng range $word 0
1a820 20 65 6e 64 2d 31 5d 0a 20 20 20 20 73 65 74 20   end-1].    set 
1a830 66 6f 6e 74 20 69 0a 20 20 7d 20 65 6c 73 65 20  font i.  } else 
1a840 7b 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20 62  {.    set font b
1a850 0a 20 20 7d 0a 20 20 69 66 20 7b 24 69 3d 3d 24  .  }.  if {$i==$
1a860 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70  nRow} {.    hd_p
1a870 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61  uts "</td><td va
1a880 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69  lign=\"top\" ali
1a890 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74  gn=\"left\" widt
1a8a0 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20  h=\"20%\">".    
1a8b0 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65  set i 1.  } else
1a8c0 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20   {.    incr i.  
1a8d0 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 24 66  }.  hd_puts "<$f
1a8e0 6f 6e 74 3e 24 77 6f 72 64 3c 2f 24 66 6f 6e 74  ont>$word</$font
1a8f0 3e 3c 62 72 3e 22 0a 7d 0a 3c 2f 74 63 6c 3e 0a  ><br>".}.</tcl>.
1a900 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c  </td></tr></tabl
1a910 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
1a920 0a 3c 68 32 3e 53 70 65 63 69 61 6c 20 6e 61 6d  .<h2>Special nam
1a930 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  es</h2>..<p>The 
1a940 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 6e 6f  following are no
1a950 74 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51  t keywords in SQ
1a960 4c 69 74 65 2c 20 62 75 74 20 61 72 65 20 75 73  Lite, but are us
1a970 65 64 20 61 73 20 6e 61 6d 65 73 20 6f 66 20 0a  ed as names of .
1a980 73 79 73 74 65 6d 20 6f 62 6a 65 63 74 73 2e 20  system objects. 
1a990 20 54 68 65 79 20 63 61 6e 20 62 65 20 75 73 65   They can be use
1a9a0 64 20 61 73 20 61 6e 20 69 64 65 6e 74 69 66 69  d as an identifi
1a9b0 65 72 20 66 6f 72 20 61 20 64 69 66 66 65 72 65  er for a differe
1a9c0 6e 74 20 0a 74 79 70 65 20 6f 66 20 6f 62 6a 65  nt .type of obje
1a9d0 63 74 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ct.</p>..<blockq
1a9e0 75 6f 74 65 20 63 6c 61 73 73 3d 22 70 64 66 5f  uote class="pdf_
1a9f0 6b 65 79 77 6f 72 64 73 22 3e 3c 62 3e 0a 20 20  keywords"><b>.  
1aa00 5f 52 4f 57 49 44 5f 3c 62 72 3e 0a 20 20 4d 41  _ROWID_<br>.  MA
1aa10 49 4e 3c 62 72 3e 0a 20 20 4f 49 44 3c 62 72 3e  IN<br>.  OID<br>
1aa20 0a 20 20 52 4f 57 49 44 3c 62 72 3e 0a 20 20 53  .  ROWID<br>.  S
1aa30 51 4c 49 54 45 5f 4d 41 53 54 45 52 3c 62 72 3e  QLITE_MASTER<br>
1aa40 0a 20 20 53 51 4c 49 54 45 5f 53 45 51 55 45 4e  .  SQLITE_SEQUEN
1aa50 43 45 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f  CE<br>.  SQLITE_
1aa60 54 45 4d 50 5f 4d 41 53 54 45 52 3c 62 72 3e 0a  TEMP_MASTER<br>.
1aa70 20 20 54 45 4d 50 3c 62 72 3e 0a 3c 2f 62 3e 3c    TEMP<br>.</b><
1aa80 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a           /blockquote>.