Documentation Source Text

Hex Artifact Content
Login

Artifact 5e449e1c1cd540859bb3707e7c37adf1e55dbe28:


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 3c 2f 70  lso provided.</p
01c0: 3e 0a 0a 3c 70 3e 49 6e 20 61 6c 6c 20 6f 66 20  >..<p>In all of 
01d0: 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72  the syntax diagr
01e0: 61 6d 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c  ams that follow,
01f0: 20 6c 69 74 65 72 61 6c 20 74 65 78 74 20 69 73   literal text is
0200: 20 73 68 6f 77 6e 20 69 6e 0a 62 6f 6c 64 20 62   shown in.bold b
0210: 6c 75 65 2e 20 20 4e 6f 6e 2d 74 65 72 6d 69 6e  lue.  Non-termin
0220: 61 6c 20 73 79 6d 62 6f 6c 73 20 61 72 65 20 73  al symbols are s
0230: 68 6f 77 6e 20 69 6e 20 69 74 61 6c 69 63 20 72  hown in italic r
0240: 65 64 2e 20 20 4f 70 65 72 61 74 6f 72 73 0a 74  ed.  Operators.t
0250: 68 61 74 20 61 72 65 20 70 61 72 74 20 6f 66 20  hat are part of 
0260: 74 68 65 20 73 79 6e 74 61 63 74 69 63 20 6d 61  the syntactic ma
0270: 72 6b 75 70 20 69 74 73 65 6c 66 20 61 72 65 20  rkup itself are 
0280: 73 68 6f 77 6e 20 69 6e 20 62 6c 61 63 6b 20 72  shown in black r
0290: 6f 6d 61 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  oman.</p>..<p>Th
02a0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 6a  is document is j
02b0: 75 73 74 20 61 6e 20 6f 76 65 72 76 69 65 77 20  ust an overview 
02c0: 6f 66 20 74 68 65 20 53 51 4c 20 73 79 6e 74 61  of the SQL synta
02d0: 78 20 69 6d 70 6c 65 6d 65 6e 74 65 64 0a 62 79  x implemented.by
02e0: 20 53 51 4c 69 74 65 2e 20 20 4d 61 6e 79 20 6c   SQLite.  Many l
02f0: 6f 77 2d 6c 65 76 65 6c 20 70 72 6f 64 75 63 74  ow-level product
0300: 69 6f 6e 73 20 61 72 65 20 6f 6d 69 74 74 65 64  ions are omitted
0310: 2e 20 20 46 6f 72 20 64 65 74 61 69 6c 65 64 20  .  For detailed 
0320: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 6f 6e 20 74  information.on t
0330: 68 65 20 6c 61 6e 67 75 61 67 65 20 74 68 61 74  he language that
0340: 20 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61   SQLite understa
0350: 6e 64 73 2c 20 72 65 66 65 72 20 74 6f 20 74 68  nds, refer to th
0360: 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 61 6e  e source code an
0370: 64 0a 74 68 65 20 67 72 61 6d 6d 61 72 20 66 69  d.the grammar fi
0380: 6c 65 20 22 70 61 72 73 65 2e 79 22 2e 3c 2f 70  le "parse.y".</p
0390: 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
03a0: 69 6e 67 20 73 79 6e 74 61 78 20 64 6f 63 75 6d  ing syntax docum
03b0: 65 6e 74 61 74 69 6f 6e 20 74 6f 70 69 63 73 20  entation topics 
03c0: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 3a 3c 2f  are available:</
03d0: 70 3e 0a 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  p>..<table width
03e0: 3d 22 31 30 30 25 22 20 63 65 6c 6c 70 61 64 64  ="100%" cellpadd
03f0: 69 6e 67 3d 22 35 22 20 62 6f 72 64 65 72 3d 22  ing="5" border="
0400: 30 22 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  0">.<tr><td vali
0410: 67 6e 3d 22 74 6f 70 22 3e 3c 75 6c 3e 0a 0a 3c  gn="top"><ul>..<
0420: 74 63 6c 3e 0a 73 65 74 20 69 20 30 0a 66 6f 72  tcl>.set i 0.for
0430: 65 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b  each {section} [
0440: 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d  lsort -index 0 -
0450: 64 69 63 74 69 6f 6e 61 72 79 20 7b 0a 20 20 7b  dictionary {.  {
0460: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20 63  {CREATE TABLE} c
0470: 72 65 61 74 65 74 61 62 6c 65 7d 0a 20 20 7b 7b  reatetable}.  {{
0480: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
0490: 41 42 4c 45 7d 20 63 72 65 61 74 65 76 74 61 62  ABLE} createvtab
04a0: 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20 49 4e 44  }.  {{CREATE IND
04b0: 45 58 7d 20 63 72 65 61 74 65 69 6e 64 65 78 7d  EX} createindex}
04c0: 0a 20 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75  .  {VACUUM vacuu
04d0: 6d 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  m}.  {{DROP TABL
04e0: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
04f0: 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64 72  {{DROP INDEX} dr
0500: 6f 70 69 6e 64 65 78 7d 0a 20 20 7b 49 4e 53 45  opindex}.  {INSE
0510: 52 54 20 69 6e 73 65 72 74 7d 0a 20 20 7b 52 45  RT insert}.  {RE
0520: 50 4c 41 43 45 20 72 65 70 6c 61 63 65 7d 0a 20  PLACE replace}. 
0530: 20 7b 44 45 4c 45 54 45 20 64 65 6c 65 74 65 7d   {DELETE delete}
0540: 0a 20 20 7b 55 50 44 41 54 45 20 75 70 64 61 74  .  {UPDATE updat
0550: 65 7d 0a 20 20 7b 53 45 4c 45 43 54 20 73 65 6c  e}.  {SELECT sel
0560: 65 63 74 7d 0a 20 20 7b 63 6f 6d 6d 65 6e 74 20  ect}.  {comment 
0570: 63 6f 6d 6d 65 6e 74 7d 0a 20 20 7b 45 58 50 4c  comment}.  {EXPL
0580: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 7b  AIN explain}.  {
0590: 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72 7d  expression expr}
05a0: 0a 20 20 7b 7b 42 45 47 49 4e 20 54 52 41 4e 53  .  {{BEGIN TRANS
05b0: 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74  ACTION} transact
05c0: 69 6f 6e 7d 0a 20 20 7b 7b 43 4f 4d 4d 49 54 20  ion}.  {{COMMIT 
05d0: 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61  TRANSACTION} tra
05e0: 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b 45 4e  nsaction}.  {{EN
05f0: 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  D TRANSACTION} t
0600: 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 7b 7b  ransaction}.  {{
0610: 52 4f 4c 4c 42 41 43 4b 20 54 52 41 4e 53 41 43  ROLLBACK TRANSAC
0620: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
0630: 6e 7d 0a 20 20 7b 50 52 41 47 4d 41 20 70 72 61  n}.  {PRAGMA pra
0640: 67 6d 61 2e 68 74 6d 6c 7d 0a 20 20 7b 7b 4f 4e  gma.html}.  {{ON
0650: 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
0660: 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 7b 7b  } conflict}.  {{
0670: 43 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65  CREATE VIEW} cre
0680: 61 74 65 76 69 65 77 7d 0a 20 20 7b 7b 44 52 4f  ateview}.  {{DRO
0690: 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65 77  P VIEW} dropview
06a0: 7d 0a 20 20 7b 7b 43 52 45 41 54 45 20 54 52 49  }.  {{CREATE TRI
06b0: 47 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67  GGER} createtrig
06c0: 67 65 72 7d 0a 20 20 7b 7b 44 52 4f 50 20 54 52  ger}.  {{DROP TR
06d0: 49 47 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67  IGGER} droptrigg
06e0: 65 72 7d 0a 20 20 7b 7b 41 54 54 41 43 48 20 44  er}.  {{ATTACH D
06f0: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 7d  ATABASE} attach}
0700: 0a 20 20 7b 7b 44 45 54 41 43 48 20 44 41 54 41  .  {{DETACH DATA
0710: 42 41 53 45 7d 20 64 65 74 61 63 68 7d 0a 20 20  BASE} detach}.  
0720: 7b 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78  {REINDEX reindex
0730: 7d 0a 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c  }.  {{ALTER TABL
0740: 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20  E} altertable}. 
0750: 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c   {{ANALYZE} anal
0760: 79 7a 65 7d 0a 20 20 7b 7b 61 67 67 72 65 67 61  yze}.  {{aggrega
0770: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0780: 67 66 75 6e 63 7d 0a 20 20 7b 7b 63 6f 72 65 20  gfunc}.  {{core 
0790: 66 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66  functions} coref
07a0: 75 6e 63 7d 0a 20 20 7b 7b 64 61 74 65 20 61 6e  unc}.  {{date an
07b0: 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
07c0: 7d 20 64 61 74 65 66 75 6e 63 7d 0a 20 20 7b 6b  } datefunc}.  {k
07d0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
07e0: 7d 0a 7d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68  }.}] {.  foreach
07f0: 20 7b 73 5f 74 69 74 6c 65 20 73 5f 74 61 67 7d   {s_title s_tag}
0800: 20 24 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69   $section {}.  i
0810: 66 20 7b 24 73 5f 74 61 67 3d 3d 22 70 72 61 67  f {$s_tag=="prag
0820: 6d 61 2e 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20  ma.html"} {.    
0830: 73 65 74 20 75 72 6c 20 24 73 5f 74 61 67 0a 20  set url $s_tag. 
0840: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65   } else {.    se
0850: 74 20 75 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61  t url lang_$s_ta
0860: 67 2e 68 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f  g.html.  }.  hd_
0870: 70 75 74 73 20 22 3c 6c 69 3e 3c 61 20 68 72 65  puts "<li><a hre
0880: 66 3d 5c 22 24 75 72 6c 5c 22 3e 24 73 5f 74 69  f=\"$url\">$s_ti
0890: 74 6c 65 3c 2f 61 3e 3c 2f 6c 69 3e 22 0a 20 20  tle</a></li>".  
08a0: 69 6e 63 72 20 69 0a 20 20 69 66 20 7b 24 69 3d  incr i.  if {$i=
08b0: 3d 31 31 20 7c 7c 20 24 69 3d 3d 32 32 7d 20 7b  =11 || $i==22} {
08c0: 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 2f  .    hd_puts "</
08d0: 75 6c 3e 3c 2f 74 64 3e 3c 74 64 20 76 61 6c 69  ul></td><td vali
08e0: 67 6e 3d 5c 22 74 6f 70 5c 22 3e 3c 75 6c 3e 22  gn=\"top\"><ul>"
08f0: 0a 20 20 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f  .  }.}.</tcl>.</
0900: 75 6c 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74  ul></td></tr></t
0910: 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 70 72 6f  able>..<tcl>.pro
0920: 63 20 4f 70 65 72 61 74 6f 72 20 7b 6e 61 6d 65  c Operator {name
0930: 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 66  } {.  return "<f
0940: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32  ont color=\"#2c2
0950: 63 66 30 5c 22 3e 3c 62 69 67 3e 24 6e 61 6d 65  cf0\"><big>$name
0960: 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d  </big></font>".}
0970: 0a 70 72 6f 63 20 4e 6f 6e 74 65 72 6d 69 6e 61  .proc Nontermina
0980: 6c 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  l {name} {.  ret
0990: 75 72 6e 20 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f  urn "<i><font co
09a0: 6c 6f 72 3d 5c 22 23 66 66 33 34 33 34 5c 22 3e  lor=\"#ff3434\">
09b0: 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e  $name</font></i>
09c0: 22 0a 7d 0a 70 72 6f 63 20 4b 65 79 77 6f 72 64  ".}.proc Keyword
09d0: 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75   {name} {.  retu
09e0: 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  rn "<font color=
09f0: 5c 22 23 32 63 32 63 66 30 5c 22 3e 24 6e 61 6d  \"#2c2cf0\">$nam
0a00: 65 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63  e</font>".}.proc
0a10: 20 45 78 61 6d 70 6c 65 20 7b 74 65 78 74 7d 20   Example {text} 
0a20: 7b 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 62 6c  {.  hd_puts "<bl
0a30: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 24 74  ockquote><pre>$t
0a40: 65 78 74 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  ext</pre></block
0a50: 71 75 6f 74 65 3e 22 0a 7d 0a 0a 70 72 6f 63 20  quote>".}..proc 
0a60: 53 65 63 74 69 6f 6e 20 7b 6e 61 6d 65 20 6c 61  Section {name la
0a70: 62 65 6c 20 6b 65 79 77 6f 72 64 73 7d 20 7b 0a  bel keywords} {.
0a80: 20 20 67 6c 6f 62 61 6c 20 44 4f 43 0a 20 20 68    global DOC.  h
0a90: 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a 20 20 68  d_close_main.  h
0aa0: 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 6c 61 6e 67  d_open_main lang
0ab0: 5f 24 6c 61 62 65 6c 2e 68 74 6d 6c 0a 20 20 68  _$label.html.  h
0ac0: 64 5f 68 65 61 64 65 72 20 22 53 51 4c 69 74 65  d_header "SQLite
0ad0: 20 51 75 65 72 79 20 4c 61 6e 67 75 61 67 65 3a   Query Language:
0ae0: 20 24 6e 61 6d 65 22 20 24 44 4f 43 2f 70 61 67   $name" $DOC/pag
0af0: 65 73 2f 6c 61 6e 67 2e 69 6e 0a 20 20 65 76 61  es/lang.in.  eva
0b00: 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 24 6b  l hd_keywords $k
0b10: 65 79 77 6f 72 64 73 0a 20 20 68 64 5f 70 75 74  eywords.  hd_put
0b20: 73 20 7b 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67  s {<a href="lang
0b30: 2e 68 74 6d 6c 22 3e 3c 68 32 3e 53 51 4c 20 41  .html"><h2>SQL A
0b40: 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42 79 20  s Understood By 
0b50: 53 51 4c 69 74 65 3c 2f 68 32 3e 3c 2f 61 3e 7d  SQLite</h2></a>}
0b60: 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 68 33 3e  .  hd_puts "<h3>
0b70: 24 6e 61 6d 65 3c 2f 68 33 3e 22 0a 7d 0a 0a 23  $name</h3>".}..#
0b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
0bd0: 65 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41  ection {ALTER TA
0be0: 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20  BLE} altertable 
0bf0: 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b  {{ALTER TABLE} {
0c00: 41 4c 54 45 52 7d 7d 0a 0a 53 79 6e 74 61 78 20  ALTER}}..Syntax 
0c10: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
0c20: 7b 0a 41 4c 54 45 52 20 54 41 42 4c 45 20 5b 3c  {.ALTER TABLE [<
0c30: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
0c40: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 3c  ] <table-name> <
0c50: 61 6c 74 65 72 61 74 69 6f 6e 3e 0a 7d 20 7b 61  alteration>.} {a
0c60: 6c 74 65 72 61 74 69 6f 6e 7d 20 7b 0a 52 45 4e  lteration} {.REN
0c70: 41 4d 45 20 54 4f 20 3c 6e 65 77 2d 74 61 62 6c  AME TO <new-tabl
0c80: 65 2d 6e 61 6d 65 3e 0a 7d 20 7b 61 6c 74 65 72  e-name>.} {alter
0c90: 61 74 69 6f 6e 7d 20 7b 0a 41 44 44 20 5b 43 4f  ation} {.ADD [CO
0ca0: 4c 55 4d 4e 5d 20 3c 63 6f 6c 75 6d 6e 2d 64 65  LUMN] <column-de
0cb0: 66 3e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  f>.}.</tcl>..<p>
0cc0: 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
0cd0: 61 20 6c 69 6d 69 74 65 64 20 73 75 62 73 65 74  a limited subset
0ce0: 20 6f 66 20 41 4c 54 45 52 20 54 41 42 4c 45 2e   of ALTER TABLE.
0cf0: 0a 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c 45  .The ALTER TABLE
0d00: 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 53 51 4c 69   command in SQLi
0d10: 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73  te allows the us
0d20: 65 72 20 74 6f 20 72 65 6e 61 6d 65 20 61 20 74  er to rename a t
0d30: 61 62 6c 65 0a 6f 72 20 74 6f 20 61 64 64 20 61  able.or to add a
0d40: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
0d50: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
0d60: 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  . It is not poss
0d70: 69 62 6c 65 0a 74 6f 20 72 65 6e 61 6d 65 20 61  ible.to rename a
0d80: 20 63 6f 6c 75 6d 2c 20 72 65 6d 6f 76 65 20 61   colum, remove a
0d90: 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 61 64 64 20   column, or add 
0da0: 6f 72 20 72 65 6d 6f 76 65 20 63 6f 6e 73 74 72  or remove constr
0db0: 61 69 6e 74 73 20 66 72 6f 6d 20 61 20 74 61 62  aints from a tab
0dc0: 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  le..</p>..<p>The
0dd0: 20 52 45 4e 41 4d 45 20 54 4f 20 73 79 6e 74 61   RENAME TO synta
0de0: 78 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 6e  x is used to ren
0df0: 61 6d 65 20 74 68 65 20 74 61 62 6c 65 20 69 64  ame the table id
0e00: 65 6e 74 69 66 69 65 64 20 62 79 20 0a 3c 69 3e  entified by .<i>
0e10: 26 23 39 31 3b 64 61 74 61 62 61 73 65 2d 6e 61  &#91;database-na
0e20: 6d 65 2e 26 23 39 33 3b 74 61 62 6c 65 2d 6e 61  me.&#93;table-na
0e30: 6d 65 3c 2f 69 3e 20 74 6f 20 3c 69 3e 6e 65 77  me</i> to <i>new
0e40: 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e  -table-name</i>.
0e50: 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 0a 63  .This command .c
0e60: 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f  annot be used to
0e70: 20 6d 6f 76 65 20 61 20 74 61 62 6c 65 20 62 65   move a table be
0e80: 74 77 65 65 6e 20 61 74 74 61 63 68 65 64 20 64  tween attached d
0e90: 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c 79 20 74  atabases, only t
0ea0: 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74 61 62 6c  o rename .a tabl
0eb0: 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  e within the sam
0ec0: 65 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a  e database.</p>.
0ed0: 0a 3c 70 3e 49 66 20 74 68 65 20 74 61 62 6c 65  .<p>If the table
0ee0: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 20 68   being renamed h
0ef0: 61 73 20 74 72 69 67 67 65 72 73 20 6f 72 20 69  as triggers or i
0f00: 6e 64 69 63 65 73 2c 20 74 68 65 6e 20 74 68 65  ndices, then the
0f10: 73 65 20 72 65 6d 61 69 6e 0a 61 74 74 61 63 68  se remain.attach
0f20: 65 64 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ed to the table 
0f30: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
0f40: 6e 20 72 65 6e 61 6d 65 64 2e 20 48 6f 77 65 76  n renamed. Howev
0f50: 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65  er, if there are
0f60: 0a 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69  .any view defini
0f70: 74 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d  tions, or statem
0f80: 65 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79  ents executed by
0f90: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72   triggers that r
0fa0: 65 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c  efer to.the tabl
0fb0: 65 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c  e being renamed,
0fc0: 20 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61   these are not a
0fd0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64  utomatically mod
0fe0: 69 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65  ified to use the
0ff0: 20 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e   new.table name.
1000: 20 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75   If this is requ
1010: 69 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65  ired, the trigge
1020: 72 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e  rs or view defin
1030: 69 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64  itions must be.d
1040: 72 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65  ropped and recre
1050: 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  ated to use the 
1060: 6e 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62  new table name b
1070: 79 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  y hand..</p>..<p
1080: 3e 54 68 65 20 41 44 44 20 26 23 39 31 3b 43 4f  >The ADD &#91;CO
1090: 4c 55 4d 4e 26 23 39 33 3b 20 73 79 6e 74 61 78  LUMN&#93; syntax
10a0: 0a 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20  .is used to add 
10b0: 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20  a new column to 
10c0: 61 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c  an existing tabl
10d0: 65 2e 0a 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  e..The new colum
10e0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
10f0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
1100: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1110: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1120: 0a 3c 69 3e 43 6f 6c 75 6d 6e 2d 64 65 66 3c 2f  .<i>Column-def</
1130: 69 3e 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20  i> may take any 
1140: 6f 66 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72  of the forms per
1150: 6d 69 73 73 61 62 6c 65 20 69 6e 20 61 20 5b 43  missable in a [C
1160: 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61  REATE TABLE].sta
1170: 74 65 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65  tement, with the
1180: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72   following restr
1190: 69 63 74 69 6f 6e 73 3a 0a 3c 75 6c 3e 0a 3c 6c  ictions:.<ul>.<l
11a0: 69 3e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  i>The column may
11b0: 20 6e 6f 74 20 68 61 76 65 20 61 20 50 52 49 4d   not have a PRIM
11c0: 41 52 59 20 4b 45 59 20 6f 72 20 55 4e 49 51 55  ARY KEY or UNIQU
11d0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c  E constraint.</l
11e0: 69 3e 0a 3c 6c 69 3e 54 68 65 20 63 6f 6c 75 6d  i>.<li>The colum
11f0: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
1200: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
1210: 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  f CURRENT_TIME, 
1220: 43 55 52 52 45 4e 54 5f 44 41 54 45 20 0a 20 20  CURRENT_DATE .  
1230: 20 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d    or CURRENT_TIM
1240: 45 53 54 41 4d 50 2e 3c 2f 6c 69 3e 0a 3c 6c 69  ESTAMP.</li>.<li
1250: 3e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  >If a NOT NULL c
1260: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 70 65  onstraint is spe
1270: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
1280: 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76   column must hav
1290: 65 20 61 0a 20 20 20 20 64 65 66 61 75 6c 74 20  e a.    default 
12a0: 76 61 6c 75 65 20 6f 74 68 65 72 20 74 68 61 6e  value other than
12b0: 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70   NULL..</ul>..<p
12c0: 3e 54 68 65 20 65 78 65 63 75 74 69 6f 6e 20 74  >The execution t
12d0: 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45 52  ime of the ALTER
12e0: 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69   TABLE command i
12f0: 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f 66  s independent of
1300: 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64  .the amount of d
1310: 61 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ata in the table
1320: 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54 41 42  .  The ALTER TAB
1330: 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20  LE command runs 
1340: 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61 20  as quickly.on a 
1350: 74 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d 69  table with 10 mi
1360: 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69 74  llion rows as it
1370: 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c 65   does on a table
1380: 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f 70   with 1 row..</p
1390: 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44 20  >..<p>After ADD 
13a0: 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e 20  COLUMN has been 
13b0: 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61 73  run on a databas
13c0: 65 2c 20 74 68 61 74 20 64 61 74 61 62 61 73 65  e, that database
13d0: 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65 61   will not.be rea
13e0: 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65 20  dable by SQLite 
13f0: 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 61 6e  version 3.1.3 an
1400: 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a  d earlier.</p>..
1410: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1460: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 4e  ####.Section {AN
1470: 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65 20 41  ALYZE} analyze A
1480: 4e 41 4c 59 5a 45 0a 0a 53 79 6e 74 61 78 20 7b  NALYZE..Syntax {
1490: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
14a0: 0a 20 20 41 4e 41 4c 59 5a 45 0a 7d 0a 53 79 6e  .  ANALYZE.}.Syn
14b0: 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
14c0: 6e 74 7d 20 7b 0a 20 20 41 4e 41 4c 59 5a 45 20  nt} {.  ANALYZE 
14d0: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 0a  <database-name>.
14e0: 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74  }.Syntax {sql-st
14f0: 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20 41 4e 41  atement} {.  ANA
1500: 4c 59 5a 45 20 5b 3c 64 61 74 61 62 61 73 65 2d  LYZE [<database-
1510: 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d  name> .] <table-
1520: 6e 61 6d 65 3e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a  name>.}.</tcl>..
1530: 3c 70 3e 54 68 65 20 41 4e 41 4c 59 5a 45 20 63  <p>The ANALYZE c
1540: 6f 6d 6d 61 6e 64 20 67 61 74 68 65 72 73 20 73  ommand gathers s
1550: 74 61 74 69 73 74 69 63 73 20 61 62 6f 75 74 20  tatistics about 
1560: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
1570: 65 73 20 74 68 65 6d 0a 69 6e 20 61 20 73 70 65  es them.in a spe
1580: 63 69 61 6c 20 74 61 62 6c 65 73 20 69 6e 20 74  cial tables in t
1590: 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 72  he database wher
15a0: 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  e the query opti
15b0: 6d 69 7a 65 72 20 63 61 6e 20 75 73 65 0a 74 68  mizer can use.th
15c0: 65 6d 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20  em to help make 
15d0: 62 65 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f  better index cho
15e0: 69 63 65 73 2e 0a 49 66 20 6e 6f 20 61 72 67 75  ices..If no argu
15f0: 6d 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c  ments are given,
1600: 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20   all indices in 
1610: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1620: 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79  abases are.analy
1630: 7a 65 64 2e 20 20 49 66 20 61 20 64 61 74 61 62  zed.  If a datab
1640: 61 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76 65  ase name is give
1650: 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  n as the argumen
1660: 74 2c 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a 69  t, all indices.i
1670: 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62  n that one datab
1680: 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ase are analyzed
1690: 2e 20 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  .  If the argume
16a0: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
16b0: 6d 65 2c 0a 74 68 65 6e 20 6f 6e 6c 79 20 69 6e  me,.then only in
16c0: 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64  dices associated
16d0: 20 77 69 74 68 20 74 68 61 74 20 6f 6e 65 20 74   with that one t
16e0: 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  able are analyze
16f0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69  d.</p>..<p>The i
1700: 6e 69 74 69 61 6c 20 69 6d 70 6c 65 6d 65 6e 74  nitial implement
1710: 61 74 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c  ation stores all
1720: 20 73 74 61 74 69 73 74 69 63 73 20 69 6e 20 61   statistics in a
1730: 20 73 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61   single.table na
1740: 6d 65 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74  med <b>sqlite_st
1750: 61 74 31 3c 2f 62 3e 2e 20 20 46 75 74 75 72 65  at1</b>.  Future
1760: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6d 61   enhancements ma
1770: 79 20 63 72 65 61 74 65 0a 61 64 64 69 74 69 6f  y create.additio
1780: 6e 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20  nal tables with 
1790: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61  the same name pa
17a0: 74 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74  ttern except wit
17b0: 68 20 74 68 65 20 22 31 22 0a 63 68 61 6e 67 65  h the "1".change
17c0: 64 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74  d to a different
17d0: 20 64 69 67 69 74 2e 20 20 54 68 65 20 5b 44 52   digit.  The [DR
17e0: 4f 50 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e  OP TABLE] comman
17f0: 64 20 64 6f 65 73 0a 6e 6f 74 20 77 6f 72 6b 20  d does.not work 
1800: 6f 6e 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65  on the <b>sqlite
1810: 5f 73 74 61 74 31 3c 2f 62 3e 20 74 61 62 6c 65  _stat1</b> table
1820: 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63 6f  ,.but all the co
1830: 6e 74 65 6e 74 20 63 61 6e 20 62 65 20 72 65 6d  ntent can be rem
1840: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
1850: 44 45 4c 45 54 45 5d 20 63 6f 6d 6d 61 6e 64 2c  DELETE] command,
1860: 0a 77 68 69 63 68 20 68 61 73 20 74 68 65 20 73  .which has the s
1870: 61 6d 65 20 65 66 66 65 63 74 2e 3c 2f 70 3e 0a  ame effect.</p>.
1880: 0a 3c 74 63 6c 3e 0a 53 65 63 74 69 6f 6e 20 7b  .<tcl>.Section {
1890: 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  ATTACH DATABASE}
18a0: 20 61 74 74 61 63 68 20 41 54 54 41 43 48 0a 0a   attach ATTACH..
18b0: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
18c0: 65 6d 65 6e 74 7d 20 7b 0a 41 54 54 41 43 48 20  ement} {.ATTACH 
18d0: 5b 44 41 54 41 42 41 53 45 5d 20 3c 64 61 74 61  [DATABASE] <data
18e0: 62 61 73 65 2d 66 69 6c 65 6e 61 6d 65 3e 20 41  base-filename> A
18f0: 53 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  S <database-name
1900: 3e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  >.}.</tcl>..<p>T
1910: 68 65 20 41 54 54 41 43 48 20 44 41 54 41 42 41  he ATTACH DATABA
1920: 53 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64  SE statement add
1930: 73 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61  s another databa
1940: 73 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20  se .file to the 
1950: 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
1960: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66   connection.  If
1970: 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 63 6f   the filename co
1980: 6e 74 61 69 6e 73 20 0a 70 75 6e 63 74 75 61 74  ntains .punctuat
1990: 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 20 69  ion characters i
19a0: 74 20 6d 75 73 74 20 62 65 20 71 75 6f 74 65 64  t must be quoted
19b0: 2e 20 20 54 68 65 20 6e 61 6d 65 73 20 27 6d 61  .  The names 'ma
19c0: 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20  in' and .'temp' 
19d0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69  refer to the mai
19e0: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  n database and t
19f0: 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
1a00: 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20   for .temporary 
1a10: 74 61 62 6c 65 73 2e 20 20 54 68 65 73 65 20 63  tables.  These c
1a20: 61 6e 6e 6f 74 20 62 65 20 64 65 74 61 63 68 65  annot be detache
1a30: 64 2e 20 20 41 74 74 61 63 68 65 64 20 64 61 74  d.  Attached dat
1a40: 61 62 61 73 65 73 20 0a 61 72 65 20 72 65 6d 6f  abases .are remo
1a50: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 44  ved using the [D
1a60: 45 54 41 43 48 5d 20 73 74 61 74 65 6d 65 6e 74  ETACH] statement
1a70: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 59 6f 75 20 63 61  .</p>..<p>You ca
1a80: 6e 6e 6f 74 20 63 72 65 61 74 65 20 61 20 6e 65  nnot create a ne
1a90: 77 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65  w table with the
1aa0: 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 20   same name as a 
1ab0: 74 61 62 6c 65 20 69 6e 20 0a 61 6e 20 61 74 74  table in .an att
1ac0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2c 20  ached database, 
1ad0: 62 75 74 20 79 6f 75 20 63 61 6e 20 61 74 74 61  but you can atta
1ae0: 63 68 20 61 20 64 61 74 61 62 61 73 65 20 77 68  ch a database wh
1af0: 69 63 68 20 63 6f 6e 74 61 69 6e 73 0a 74 61 62  ich contains.tab
1b00: 6c 65 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20  les whose names 
1b10: 61 72 65 20 64 75 70 6c 69 63 61 74 65 73 20 6f  are duplicates o
1b20: 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  f tables in the 
1b30: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
1b40: 49 74 20 69 73 20 0a 61 6c 73 6f 20 70 65 72 6d  It is .also perm
1b50: 69 73 73 69 62 6c 65 20 74 6f 20 61 74 74 61 63  issible to attac
1b60: 68 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  h the same datab
1b70: 61 73 65 20 66 69 6c 65 20 6d 75 6c 74 69 70 6c  ase file multipl
1b80: 65 20 74 69 6d 65 73 2e 3c 2f 70 3e 0a 0a 3c 70  e times.</p>..<p
1b90: 3e 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74  >Tables in an at
1ba0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
1bb0: 63 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20  can be referred 
1bc0: 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e  to using the syn
1bd0: 74 61 78 20 0a 3c 69 3e 64 61 74 61 62 61 73 65  tax .<i>database
1be0: 2d 6e 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65  -name.table-name
1bf0: 3c 2f 69 3e 2e 20 20 49 66 20 61 6e 20 61 74 74  </i>.  If an att
1c00: 61 63 68 65 64 20 74 61 62 6c 65 20 64 6f 65 73  ached table does
1c10: 6e 27 74 20 68 61 76 65 20 0a 61 20 64 75 70 6c  n't have .a dupl
1c20: 69 63 61 74 65 20 74 61 62 6c 65 20 6e 61 6d 65  icate table name
1c30: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
1c40: 61 62 61 73 65 2c 20 69 74 20 64 6f 65 73 6e 27  abase, it doesn'
1c50: 74 20 72 65 71 75 69 72 65 20 61 20 0a 64 61 74  t require a .dat
1c60: 61 62 61 73 65 20 6e 61 6d 65 20 70 72 65 66 69  abase name prefi
1c70: 78 2e 20 20 57 68 65 6e 20 61 20 64 61 74 61 62  x.  When a datab
1c80: 61 73 65 20 69 73 20 61 74 74 61 63 68 65 64 2c  ase is attached,
1c90: 20 61 6c 6c 20 6f 66 20 69 74 73 20 0a 74 61 62   all of its .tab
1ca0: 6c 65 73 20 77 68 69 63 68 20 64 6f 6e 27 74 20  les which don't 
1cb0: 68 61 76 65 20 64 75 70 6c 69 63 61 74 65 20 6e  have duplicate n
1cc0: 61 6d 65 73 20 62 65 63 6f 6d 65 20 74 68 65 20  ames become the 
1cd0: 64 65 66 61 75 6c 74 20 74 61 62 6c 65 0a 6f 66  default table.of
1ce0: 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 41 6e 79   that name.  Any
1cf0: 20 74 61 62 6c 65 73 20 6f 66 20 74 68 61 74 20   tables of that 
1d00: 6e 61 6d 65 20 61 74 74 61 63 68 65 64 20 61 66  name attached af
1d10: 74 65 72 77 61 72 64 73 20 72 65 71 75 69 72 65  terwards require
1d20: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 70 72   the.database pr
1d30: 65 66 69 78 2e 20 49 66 20 74 68 65 20 64 65 66  efix. If the def
1d40: 61 75 6c 74 20 74 61 62 6c 65 20 6f 66 20 61 20  ault table of a 
1d50: 67 69 76 65 6e 20 6e 61 6d 65 20 69 73 20 64 65  given name is de
1d60: 74 61 63 68 65 64 2c 20 74 68 65 6e 0a 74 68 65  tached, then.the
1d70: 20 6c 61 73 74 20 74 61 62 6c 65 20 6f 66 20 74   last table of t
1d80: 68 61 74 20 6e 61 6d 65 20 61 74 74 61 63 68 65  hat name attache
1d90: 64 20 62 65 63 6f 6d 65 73 20 74 68 65 20 6e 65  d becomes the ne
1da0: 77 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e 0a 0a  w default.</p>..
1db0: 3c 70 3e 0a 54 72 61 6e 73 61 63 74 69 6f 6e 73  <p>.Transactions
1dc0: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
1dd0: 70 6c 65 20 61 74 74 61 63 68 65 64 20 64 61 74  ple attached dat
1de0: 61 62 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69  abases are atomi
1df0: 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74  c,.assuming that
1e00: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1e10: 73 65 20 69 73 20 6e 6f 74 20 22 3a 6d 65 6d 6f  se is not ":memo
1e20: 72 79 3a 22 2e 20 20 49 66 20 74 68 65 20 6d 61  ry:".  If the ma
1e30: 69 6e 0a 64 61 74 61 62 61 73 65 20 69 73 20 22  in.database is "
1e40: 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 20 0a  :memory:" then .
1e50: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6e  transactions con
1e60: 74 69 6e 75 65 20 74 6f 20 62 65 20 61 74 6f 6d  tinue to be atom
1e70: 69 63 20 77 69 74 68 69 6e 20 65 61 63 68 20 69  ic within each i
1e80: 6e 64 69 76 69 64 75 61 6c 0a 64 61 74 61 62 61  ndividual.databa
1e90: 73 65 20 66 69 6c 65 2e 20 42 75 74 20 69 66 20  se file. But if 
1ea0: 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65  the host compute
1eb0: 72 20 63 72 61 73 68 65 73 20 69 6e 20 74 68 65  r crashes in the
1ec0: 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20 5b 43 4f   middle.of a [CO
1ed0: 4d 4d 49 54 5d 20 77 68 65 72 65 20 74 77 6f 20  MMIT] where two 
1ee0: 6f 72 20 6d 6f 72 65 20 64 61 74 61 62 61 73 65  or more database
1ef0: 20 66 69 6c 65 73 20 61 72 65 20 75 70 64 61 74   files are updat
1f00: 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74 68 6f 73  ed,.some of thos
1f10: 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 67 65  e files might ge
1f20: 74 20 74 68 65 20 63 68 61 6e 67 65 73 20 77 68  t the changes wh
1f30: 65 72 65 20 6f 74 68 65 72 73 0a 6d 69 67 68 74  ere others.might
1f40: 20 6e 6f 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54   not..</p>..<p>T
1f50: 68 65 72 65 20 69 73 20 61 20 63 6f 6d 70 69 6c  here is a compil
1f60: 65 2d 74 69 6d 65 20 6c 69 6d 69 74 20 6f 66 20  e-time limit of 
1f70: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
1f80: 43 48 45 44 5d 0a 61 74 74 61 63 68 65 64 20 64  CHED].attached d
1f90: 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 3c 2f  atabase files.</
1fa0: 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f  #########.Sectio
2000: 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43  n {BEGIN TRANSAC
2010: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
2020: 6e 20 7b 42 45 47 49 4e 20 43 4f 4d 4d 49 54 20  n {BEGIN COMMIT 
2030: 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 53 79 6e 74 61  ROLLBACK}..Synta
2040: 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74  x {sql-statement
2050: 7d 20 7b 0a 42 45 47 49 4e 20 5b 20 44 45 46 45  } {.BEGIN [ DEFE
2060: 52 52 45 44 20 7c 20 49 4d 4d 45 44 49 41 54 45  RRED | IMMEDIATE
2070: 20 7c 20 45 58 43 4c 55 53 49 56 45 20 5d 20 5b   | EXCLUSIVE ] [
2080: 54 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61  TRANSACTION [<na
2090: 6d 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b  me>]].}.Syntax {
20a0: 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b  sql-statement} {
20b0: 0a 45 4e 44 20 5b 54 52 41 4e 53 41 43 54 49 4f  .END [TRANSACTIO
20c0: 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a 7d 0a 53 79  N [<name>]].}.Sy
20d0: 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
20e0: 65 6e 74 7d 20 7b 0a 43 4f 4d 4d 49 54 20 5b 54  ent} {.COMMIT [T
20f0: 52 41 4e 53 41 43 54 49 4f 4e 20 5b 3c 6e 61 6d  RANSACTION [<nam
2100: 65 3e 5d 5d 0a 7d 0a 53 79 6e 74 61 78 20 7b 73  e>]].}.Syntax {s
2110: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
2120: 52 4f 4c 4c 42 41 43 4b 20 5b 54 52 41 4e 53 41  ROLLBACK [TRANSA
2130: 43 54 49 4f 4e 20 5b 3c 6e 61 6d 65 3e 5d 5d 0a  CTION [<name>]].
2140: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 4e 6f  }.</tcl>..<p>.No
2150: 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20   changes can be 
2160: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
2170: 62 61 73 65 20 65 78 63 65 70 74 20 77 69 74 68  base except with
2180: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
2190: 2e 0a 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68  ..Any command th
21a0: 61 74 20 63 68 61 6e 67 65 73 20 74 68 65 20 64  at changes the d
21b0: 61 74 61 62 61 73 65 20 28 62 61 73 69 63 61 6c  atabase (basical
21c0: 6c 79 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d  ly, any SQL comm
21d0: 61 6e 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b  and.other than [
21e0: 53 45 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75  SELECT]) will au
21f0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72  tomatically star
2200: 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
2210: 69 66 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c  if.one is not al
2220: 72 65 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e  ready in effect.
2230: 20 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20    Automatically 
2240: 73 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74  started transact
2250: 69 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74  ions.are committ
2260: 65 64 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75  ed at the conclu
2270: 73 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d  sion of the comm
2280: 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  and..</p>..<p>.T
2290: 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20  ransactions can 
22a0: 62 65 20 73 74 61 72 74 65 64 20 6d 61 6e 75 61  be started manua
22b0: 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20 42 45  lly using the BE
22c0: 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20 20 53 75  GIN.command.  Su
22d0: 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ch transactions 
22e0: 75 73 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20  usually persist 
22f0: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43  until the next.C
2300: 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43  OMMIT or ROLLBAC
2310: 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20  K command.  But 
2320: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
2330: 6c 6c 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43  ll also .ROLLBAC
2340: 4b 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  K if the databas
2350: 65 20 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69  e is closed or i
2360: 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
2370: 73 0a 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41  s.and the ROLLBA
2380: 43 4b 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CK conflict reso
2390: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
23a0: 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 53   is specified..S
23b0: 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61  ee the documenta
23c0: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20  tion on the [ON 
23d0: 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65  CONFLICT].clause
23e0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
23f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
2400: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
2410: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
2420: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
2430: 70 3e 0a 0a 3c 70 3e 0a 45 4e 44 20 54 52 41 4e  p>..<p>.END TRAN
2440: 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c  SACTION is an al
2450: 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a  ias for COMMIT..
2460: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74  </p>..<p>The opt
2470: 69 6f 6e 61 6c 20 74 72 61 6e 73 61 63 74 69 6f  ional transactio
2480: 6e 20 6e 61 6d 65 20 69 73 20 69 67 6e 6f 72 65  n name is ignore
2490: 64 2e 20 53 51 4c 69 74 65 20 0a 64 6f 65 73 20  d. SQLite .does 
24a0: 6e 6f 74 20 72 65 63 6f 67 6e 69 7a 65 20 6e 65  not recognize ne
24b0: 73 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  sted transaction
24c0: 73 20 61 74 20 74 68 69 73 20 74 69 6d 65 2e 0a  s at this time..
24d0: 48 6f 77 65 76 65 72 2c 20 66 75 74 75 72 65 20  However, future 
24e0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
24f0: 74 65 20 6d 61 79 20 62 65 20 65 6e 68 61 6e 63  te may be enhanc
2500: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 6e 65  ed to support ne
2510: 73 74 65 64 0a 74 72 61 6e 73 61 63 74 69 6f 6e  sted.transaction
2520: 73 20 61 6e 64 20 74 68 65 20 74 72 61 6e 73 61  s and the transa
2530: 63 74 69 6f 6e 20 6e 61 6d 65 20 77 6f 75 6c 64  ction name would
2540: 20 74 68 65 6e 20 62 65 63 6f 6d 65 20 73 69 67   then become sig
2550: 6e 69 66 69 63 61 6e 74 2e 0a 41 70 70 6c 69 63  nificant..Applic
2560: 61 74 69 6f 6e 20 61 72 65 20 61 64 76 69 73 65  ation are advise
2570: 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65  d not to use the
2580: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 61 6d   transaction nam
2590: 65 20 69 6e 20 6f 72 64 65 72 0a 74 6f 20 61 76  e in order.to av
25a0: 6f 69 64 20 66 75 74 75 72 65 20 63 6f 6d 70 61  oid future compa
25b0: 74 69 62 69 6c 69 74 79 20 70 72 6f 62 6c 65 6d  tibility problem
25c0: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 72 61 6e  s.</p>..<p>.Tran
25d0: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
25e0: 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69  deferred, immedi
25f0: 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76  ate, or exclusiv
2600: 65 2e 20 20 0a 54 68 65 20 64 65 66 61 75 6c 74  e.  .The default
2610: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68   transaction beh
2620: 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72 65  avior is deferre
2630: 64 2e 0a 44 65 66 65 72 72 65 64 20 6d 65 61 6e  d..Deferred mean
2640: 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20  s that no locks 
2650: 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20  are acquired.on 
2660: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74  the database unt
2670: 69 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  il the database 
2680: 69 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65  is first accesse
2690: 64 2e 20 20 54 68 75 73 20 77 69 74 68 20 61 0a  d.  Thus with a.
26a0: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
26b0: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
26c0: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
26d0: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 2e 20 20   does nothing.  
26e0: 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63  Locks.are not ac
26f0: 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68 65  quired until the
2700: 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20 77   first read or w
2710: 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rite operation. 
2720: 20 54 68 65 20 66 69 72 73 74 20 72 65 61 64 0a   The first read.
2730: 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73  operation agains
2740: 74 20 61 20 64 61 74 61 62 61 73 65 20 63 72 65  t a database cre
2750: 61 74 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20  ates a [SHARED] 
2760: 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72  lock and the fir
2770: 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69  st.write operati
2780: 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b 52 45  on creates a [RE
2790: 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20  SERVED] lock.   
27a0: 42 65 63 61 75 73 65 20 74 68 65 20 61 63 71 75  Because the acqu
27b0: 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73  isition of.locks
27c0: 20 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74   is deferred unt
27d0: 69 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65 64  il they are need
27e0: 65 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62  ed, it is possib
27f0: 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a  le that another.
2800: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
2810: 73 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61  s could create a
2820: 20 73 65 70 61 72 61 74 65 20 74 72 61 6e 73 61   separate transa
2830: 63 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20  ction and write 
2840: 74 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  to.the database 
2850: 61 66 74 65 72 20 74 68 65 20 42 45 47 49 4e 20  after the BEGIN 
2860: 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  on the current t
2870: 68 72 65 61 64 20 68 61 73 20 65 78 65 63 75 74  hread has execut
2880: 65 64 2e 0a 49 66 20 74 68 65 20 74 72 61 6e 73  ed..If the trans
2890: 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69  action is immedi
28a0: 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52  ate, then [RESER
28b0: 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61  VED] locks.are a
28c0: 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64  cquired on all d
28d0: 61 74 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e  atabases as soon
28e0: 20 61 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f   as the BEGIN co
28f0: 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65  mmand is.execute
2900: 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69 74 69  d, without waiti
2910: 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62  ng for the.datab
2920: 61 73 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20  ase to be used. 
2930: 20 41 66 74 65 72 20 61 20 42 45 47 49 4e 20 49   After a BEGIN I
2940: 4d 4d 45 44 49 41 54 45 2c 20 79 6f 75 20 61 72  MMEDIATE, you ar
2950: 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 68 61  e guaranteed tha
2960: 74 0a 6e 6f 20 6f 74 68 65 72 20 74 68 72 65 61  t.no other threa
2970: 64 20 6f 72 20 70 72 6f 63 65 73 73 20 77 69 6c  d or process wil
2980: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69  l be able to wri
2990: 74 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  te to the databa
29a0: 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e  se or.do a BEGIN
29b0: 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45   IMMEDIATE or BE
29c0: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20  GIN EXCLUSIVE.  
29d0: 4f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  Other processes 
29e0: 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20  can continue.to 
29f0: 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61  read from the da
2a00: 74 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72 2e  tabase, however.
2a10: 20 20 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74    An exclusive t
2a20: 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65  ransaction cause
2a30: 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c 6f  s.[EXCLUSIVE] lo
2a40: 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69 72  cks to be acquir
2a50: 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61  ed on all databa
2a60: 73 65 73 2e 20 20 41 66 74 65 72 20 61 20 42 45  ses.  After a BE
2a70: 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20 79  GIN.EXCLUSIVE, y
2a80: 6f 75 20 61 72 65 20 67 75 61 72 61 6e 74 65 65  ou are guarantee
2a90: 64 20 74 68 61 74 20 6e 6f 20 6f 74 68 65 72 20  d that no other 
2aa0: 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73  thread or proces
2ab0: 73 20 77 69 6c 6c 0a 62 65 20 61 62 6c 65 20 74  s will.be able t
2ac0: 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  o read or write 
2ad0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74  the database unt
2ae0: 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  il the transacti
2af0: 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a  on is.complete..
2b00: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 43 4f  </p>..<p>.The CO
2b10: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  MMIT command doe
2b20: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 70  s not actually p
2b30: 65 72 66 6f 72 6d 20 61 20 63 6f 6d 6d 69 74 20  erform a commit 
2b40: 75 6e 74 69 6c 20 61 6c 6c 0a 70 65 6e 64 69 6e  until all.pendin
2b50: 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 20 66  g SQL commands f
2b60: 69 6e 69 73 68 2e 20 20 54 68 75 73 20 69 66 20  inish.  Thus if 
2b70: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 53 45 4c  one or more [SEL
2b80: 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 0a  ECT] statements.
2b90: 61 72 65 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  are in the middl
2ba0: 65 20 6f 66 20 70 72 6f 63 65 73 73 69 6e 67 20  e of processing 
2bb0: 61 6e 64 20 61 20 43 4f 4d 4d 49 54 20 69 73 20  and a COMMIT is 
2bc0: 65 78 65 63 75 74 65 64 2c 20 74 68 65 20 63 6f  executed, the co
2bd0: 6d 6d 69 74 0a 77 69 6c 6c 20 6e 6f 74 20 61 63  mmit.will not ac
2be0: 74 75 61 6c 6c 79 20 6f 63 63 75 72 20 75 6e 74  tually occur unt
2bf0: 69 6c 20 61 6c 6c 20 5b 53 45 4c 45 43 54 5d 20  il all [SELECT] 
2c00: 73 74 61 74 65 6d 65 6e 74 73 20 68 61 76 65 20  statements have 
2c10: 62 65 65 6e 0a 5b 73 71 6c 69 74 65 33 5f 72 65  been.[sqlite3_re
2c20: 73 65 74 28 29 20 7c 20 72 65 73 65 74 5d 20 6f  set() | reset] o
2c30: 72 20 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  r [sqlite3_final
2c40: 69 7a 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65  ize() | finalize
2c50: 64 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 6e  d]..</p>..<p>.An
2c60: 20 61 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63   attempt to exec
2c70: 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69 67 68 74  ute COMMIT might
2c80: 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53   result in an [S
2c90: 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75  QLITE_BUSY] retu
2ca0: 72 6e 20 63 6f 64 65 2e 0a 54 68 69 73 20 69 6e  rn code..This in
2cb0: 64 69 63 61 74 65 73 20 74 68 61 74 20 61 6e 6f  dicates that ano
2cc0: 74 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70  ther thread or p
2cd0: 72 6f 63 65 73 73 20 68 61 64 20 61 20 0a 5b 73  rocess had a .[s
2ce0: 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74  hared lock] on t
2cf0: 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61 74  he database.that
2d00: 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20 64   prevented the d
2d10: 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69  atabase from bei
2d20: 6e 67 20 75 70 64 61 74 65 64 2e 20 20 57 68 65  ng updated.  Whe
2d30: 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  n COMMIT fails i
2d40: 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20  n this.way, the 
2d50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61  transaction rema
2d60: 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74  ins active and t
2d70: 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65  he COMMIT can be
2d80: 20 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61   retried later.a
2d90: 66 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20  fter the reader 
2da0: 68 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65  has had a chance
2db0: 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a   to clear..</p>.
2dc0: 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f  .<h3>Response To
2dd0: 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e 20 41   Errors Within A
2de0: 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33   Transaction</h3
2df0: 3e 0a 0a 3c 70 3e 49 66 20 63 65 72 74 61 69 6e  >..<p>If certain
2e00: 20 6b 69 6e 64 73 20 6f 66 20 65 72 72 6f 72 73   kinds of errors
2e10: 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 61 20   occur within a 
2e20: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
2e30: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79  .transaction may
2e40: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 72   or may not be r
2e50: 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d  olled back autom
2e60: 61 74 69 63 61 6c 6c 79 2e 20 20 54 68 65 0a 65  atically.  The.e
2e70: 72 72 6f 72 73 20 74 68 61 74 20 63 61 75 73 65  rrors that cause
2e80: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 6e   the behavior in
2e90: 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  clude:</p>..<ul>
2ea0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 46 55  .<li> [SQLITE_FU
2eb0: 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65 20 6f 72  LL]: database or
2ec0: 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c 69 3e 20   disk full.<li> 
2ed0: 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52 5d 3a 20  [SQLITE_IOERR]: 
2ee0: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 0a 3c  disk I/O error.<
2ef0: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42 55 53 59  li> [SQLITE_BUSY
2f00: 5d 3a 20 64 61 74 61 62 61 73 65 20 69 6e 20 75  ]: database in u
2f10: 73 65 20 62 79 20 61 6e 6f 74 68 65 72 20 70 72  se by another pr
2f20: 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53 51 4c 49  ocess.<li> [SQLI
2f30: 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75 74 20 6f  TE_NOMEM]: out o
2f40: 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e 20 5b 53  r memory.<li> [S
2f50: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 5d  QLITE_INTERRUPT]
2f60: 3a 20 70 72 6f 63 65 73 73 69 6e 67 20 5b 73 71  : processing [sq
2f70: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 7c  lite3_interrupt|
2f80: 69 6e 74 65 72 72 75 70 74 65 64 5d 0a 20 20 20  interrupted].   
2f90: 20 20 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e    by application
2fa0: 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c 3e 0a 0a   request.</ul>..
2fb0: 3c 70 3e 0a 46 6f 72 20 61 6c 6c 20 6f 66 20 74  <p>.For all of t
2fc0: 68 65 73 65 20 65 72 72 6f 72 73 2c 20 53 51 4c  hese errors, SQL
2fd0: 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
2fe0: 75 6e 64 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e  undo just the on
2ff0: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 74 20 77  e statement.it w
3000: 61 73 20 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e  as working on an
3010: 64 20 6c 65 61 76 65 20 63 68 61 6e 67 65 73 20  d leave changes 
3020: 66 72 6f 6d 20 70 72 69 6f 72 20 73 74 61 74 65  from prior state
3030: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65  ments within the
3040: 0a 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f  .same transactio
3050: 6e 20 69 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e  n intact and con
3060: 74 69 6e 75 65 20 77 69 74 68 20 74 68 65 20 74  tinue with the t
3070: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 6f 77  ransaction.  How
3080: 65 76 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67  ever, .depending
3090: 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   on the statemen
30a0: 74 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  t being evaluate
30b0: 64 20 61 6e 64 20 74 68 65 20 70 6f 69 6e 74 20  d and the point 
30c0: 61 74 20 77 68 69 63 68 20 74 68 65 0a 65 72 72  at which the.err
30d0: 6f 72 20 6f 63 63 75 72 73 2c 20 69 74 20 6d 69  or occurs, it mi
30e0: 67 68 74 20 62 65 20 6e 65 63 65 73 73 61 72 79  ght be necessary
30f0: 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20 72   for SQLite to r
3100: 6f 6c 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63  ollback and.canc
3110: 65 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  el the transacti
3120: 6f 6e 2e 20 20 41 6e 20 61 70 70 6c 69 63 61 74  on.  An applicat
3130: 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69  ion can tell whi
3140: 63 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74  ch.course of act
3150: 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20  ion SQLite took 
3160: 62 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71  by using the.[sq
3170: 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
3180: 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61  mmit()] C-langua
3190: 67 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70  ge interface.</p
31a0: 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f  >..<p>It is reco
31b0: 6d 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70  mmended that app
31c0: 6c 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e  lications respon
31d0: 64 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a  d to the errors.
31e0: 6c 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20  listed above by 
31f0: 65 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69  explicitly issui
3200: 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  ng a ROLLBACK co
3210: 6d 6d 61 6e 64 2e 20 20 49 66 20 74 68 65 20 0a  mmand.  If the .
3220: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
3230: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
3240: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
3250: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
3260: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
3270: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
3280: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
3290: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
32a0: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
32b0: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
32c0: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
32d0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
32e0: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
32f0: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
3300: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
3310: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
3320: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
3330: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
3340: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
3350: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
3360: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
3370: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
3380: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
3390: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
33a0: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
33b0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
33c0: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
33d0: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
33e0: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
33f0: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
3400: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
3410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3450: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
3460: 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63 6f  ction comment co
3470: 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20 63  mment {comment c
3480: 6f 6d 6d 65 6e 74 73 7d 0a 0a 53 79 6e 74 61 78  omments}..Syntax
3490: 20 7b 63 6f 6d 6d 65 6e 74 7d 20 7b 3c 53 51 4c   {comment} {<SQL
34a0: 2d 63 6f 6d 6d 65 6e 74 3e 20 7c 20 3c 43 2d 63  -comment> | <C-c
34b0: 6f 6d 6d 65 6e 74 3e 0a 7d 20 7b 53 51 4c 2d 63  omment>.} {SQL-c
34c0: 6f 6d 6d 65 6e 74 7d 20 7b 2d 2d 20 3c 73 69 6e  omment} {-- <sin
34d0: 67 6c 65 2d 6c 69 6e 65 3e 0a 7d 20 7b 43 2d 63  gle-line>.} {C-c
34e0: 6f 6d 6d 65 6e 74 7d 20 7b 2f 53 54 41 52 20 3c  omment} {/STAR <
34f0: 6d 75 6c 74 69 70 6c 65 2d 6c 69 6e 65 73 3e 20  multiple-lines> 
3500: 5b 53 54 41 52 2f 5d 0a 7d 0a 3c 2f 74 63 6c 3e  [STAR/].}.</tcl>
3510: 0a 0a 3c 70 3e 20 43 6f 6d 6d 65 6e 74 73 20 61  ..<p> Comments a
3520: 72 65 6e 27 74 20 53 51 4c 20 63 6f 6d 6d 61 6e  ren't SQL comman
3530: 64 73 2c 20 62 75 74 20 63 61 6e 20 6f 63 63 75  ds, but can occu
3540: 72 20 69 6e 20 53 51 4c 20 71 75 65 72 69 65 73  r in SQL queries
3550: 2e 20 54 68 65 79 20 61 72 65 20 0a 74 72 65 61  . They are .trea
3560: 74 65 64 20 61 73 20 77 68 69 74 65 73 70 61 63  ted as whitespac
3570: 65 20 62 79 20 74 68 65 20 70 61 72 73 65 72 2e  e by the parser.
3580: 20 20 54 68 65 79 20 63 61 6e 20 62 65 67 69 6e    They can begin
3590: 20 61 6e 79 77 68 65 72 65 20 77 68 69 74 65 73   anywhere whites
35a0: 70 61 63 65 20 0a 63 61 6e 20 62 65 20 66 6f 75  pace .can be fou
35b0: 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6e  nd, including in
35c0: 73 69 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73  side expressions
35d0: 20 74 68 61 74 20 73 70 61 6e 20 6d 75 6c 74 69   that span multi
35e0: 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f 70 3e 0a  ple lines..</p>.
35f0: 0a 3c 70 3e 20 53 51 4c 20 63 6f 6d 6d 65 6e 74  .<p> SQL comment
3600: 73 20 6f 6e 6c 79 20 65 78 74 65 6e 64 20 74 6f  s only extend to
3610: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
3620: 63 75 72 72 65 6e 74 20 6c 69 6e 65 2e 3c 2f 70  current line.</p
3630: 3e 0a 0a 3c 70 3e 20 43 20 63 6f 6d 6d 65 6e 74  >..<p> C comment
3640: 73 20 63 61 6e 20 73 70 61 6e 20 61 6e 79 20 6e  s can span any n
3650: 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 73 2e 20  umber of lines. 
3660: 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
3670: 74 65 72 6d 69 6e 61 74 69 6e 67 0a 64 65 6c 69  terminating.deli
3680: 6d 69 74 65 72 2c 20 74 68 65 79 20 65 78 74 65  miter, they exte
3690: 6e 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  nd to the end of
36a0: 20 74 68 65 20 69 6e 70 75 74 2e 20 20 54 68 69   the input.  Thi
36b0: 73 20 69 73 20 6e 6f 74 20 74 72 65 61 74 65 64  s is not treated
36c0: 20 61 73 0a 61 6e 20 65 72 72 6f 72 2e 20 20 41   as.an error.  A
36d0: 20 6e 65 77 20 53 51 4c 20 73 74 61 74 65 6d 65   new SQL stateme
36e0: 6e 74 20 63 61 6e 20 62 65 67 69 6e 20 6f 6e 20  nt can begin on 
36f0: 61 20 6c 69 6e 65 20 61 66 74 65 72 20 61 20 6d  a line after a m
3700: 75 6c 74 69 6c 69 6e 65 0a 63 6f 6d 6d 65 6e 74  ultiline.comment
3710: 20 65 6e 64 73 2e 20 20 43 20 63 6f 6d 6d 65 6e   ends.  C commen
3720: 74 73 20 63 61 6e 20 62 65 20 65 6d 62 65 64 64  ts can be embedd
3730: 65 64 20 61 6e 79 77 68 65 72 65 20 77 68 69 74  ed anywhere whit
3740: 65 73 70 61 63 65 20 63 61 6e 20 6f 63 63 75 72  espace can occur
3750: 2c 0a 69 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69  ,.including insi
3760: 64 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  de expressions, 
3770: 61 6e 64 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  and in the middl
3780: 65 20 6f 66 20 6f 74 68 65 72 20 53 51 4c 20 73  e of other SQL s
3790: 74 61 74 65 6d 65 6e 74 73 2e 0a 43 20 63 6f 6d  tatements..C com
37a0: 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e 65 73  ments do not nes
37b0: 74 2e 20 20 53 51 4c 20 63 6f 6d 6d 65 6e 74 73  t.  SQL comments
37c0: 20 69 6e 73 69 64 65 20 61 20 43 20 63 6f 6d 6d   inside a C comm
37d0: 65 6e 74 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  ent will be igno
37e0: 72 65 64 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  red..</p>...<tcl
37f0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
3800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3840: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
3850: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
3860: 64 65 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44  dex {{CREATE IND
3870: 45 58 7d 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71  EX}}..Syntax {sq
3880: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43  l-statement} {.C
3890: 52 45 41 54 45 20 5b 55 4e 49 51 55 45 5d 20 49  REATE [UNIQUE] I
38a0: 4e 44 45 58 20 5b 49 46 20 4e 4f 54 20 45 58 49  NDEX [IF NOT EXI
38b0: 53 54 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d  STS] [<database-
38c0: 6e 61 6d 65 3e 20 2e 5d 20 3c 69 6e 64 65 78 2d  name> .] <index-
38d0: 6e 61 6d 65 3e 20 0a 4f 4e 20 3c 74 61 62 6c 65  name> .ON <table
38e0: 2d 6e 61 6d 65 3e 20 28 20 3c 63 6f 6c 75 6d 6e  -name> ( <column
38f0: 2d 6e 61 6d 65 3e 20 5b 2c 20 3c 63 6f 6c 75 6d  -name> [, <colum
3900: 6e 2d 6e 61 6d 65 3e 5d 2a 20 29 0a 7d 20 7b 63  n-name>]* ).} {c
3910: 6f 6c 75 6d 6e 2d 6e 61 6d 65 7d 20 7b 0a 3c 6e  olumn-name} {.<n
3920: 61 6d 65 3e 20 5b 20 43 4f 4c 4c 41 54 45 20 3c  ame> [ COLLATE <
3930: 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 5d  collation-name>]
3940: 20 5b 20 41 53 43 20 7c 20 44 45 53 43 20 5d 0a   [ ASC | DESC ].
3950: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
3960: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 63 6f   CREATE INDEX co
3970: 6d 6d 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  mmand consists o
3980: 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22  f the keywords "
3990: 43 52 45 41 54 45 20 49 4e 44 45 58 22 20 66 6f  CREATE INDEX" fo
39a0: 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6e 61  llowed.by the na
39b0: 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 69 6e  me of the new in
39c0: 64 65 78 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  dex, the keyword
39d0: 20 22 4f 4e 22 2c 20 74 68 65 20 6e 61 6d 65 20   "ON", the name 
39e0: 6f 66 20 61 20 70 72 65 76 69 6f 75 73 6c 79 0a  of a previously.
39f0: 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 74 68  created table th
3a00: 61 74 20 69 73 20 74 6f 20 62 65 20 69 6e 64 65  at is to be inde
3a10: 78 65 64 2c 20 61 6e 64 20 61 20 70 61 72 65 6e  xed, and a paren
3a20: 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
3a30: 20 6e 61 6d 65 73 20 6f 66 0a 63 6f 6c 75 6d 6e   names of.column
3a40: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 74  s in the table t
3a50: 68 61 74 20 61 72 65 20 75 73 65 64 20 66 6f 72  hat are used for
3a60: 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 3c   the index key.<
3a70: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c  /p>..<p>Each col
3a80: 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20  umn name can be 
3a90: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20  followed by one 
3aa0: 6f 66 20 74 68 65 20 22 41 53 43 22 20 6f 72 20  of the "ASC" or 
3ab0: 22 44 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a  "DESC" keywords.
3ac0: 74 6f 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74  to indicate sort
3ad0: 20 6f 72 64 65 72 2e 20 20 54 68 65 20 73 6f 72   order.  The sor
3ae0: 74 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d  t order may or m
3af0: 61 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65  ay not be ignore
3b00: 64 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74  d depending.on t
3b10: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3b20: 20 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 22 6c   format.  The "l
3b30: 65 67 61 63 79 22 20 66 69 6c 65 20 66 6f 72 6d  egacy" file form
3b40: 61 74 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78  at ignores index
3b50: 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 54 68  .sort order.  Th
3b60: 65 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64  e descending ind
3b70: 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 74  ex file format t
3b80: 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74 20  akes index sort 
3b90: 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f 75  order.into accou
3ba0: 6e 74 2e 20 20 4f 6e 6c 79 20 63 6f 70 69 65 73  nt.  Only copies
3bb0: 20 6f 66 20 53 51 4c 69 74 65 20 6e 65 77 65 72   of SQLite newer
3bc0: 20 74 68 61 6e 20 5b 76 65 72 73 69 6f 6e 20 33   than [version 3
3bd0: 2e 33 2e 30 5d 20 0a 28 72 65 6c 65 61 73 65 64  .3.0] .(released
3be0: 20 6f 6e 20 32 30 30 36 2d 30 31 2d 31 30 29 20   on 2006-01-10) 
3bf0: 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64 65  are able to unde
3c00: 72 73 74 61 6e 64 20 74 68 65 20 6e 65 77 65 72  rstand the newer
3c10: 20 64 65 73 63 65 6e 64 69 6e 67 0a 69 6e 64 65   descending.inde
3c20: 78 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 61 6e  x file format an
3c30: 64 20 73 6f 20 66 6f 72 20 63 6f 6d 70 61 74 69  d so for compati
3c40: 62 69 6c 69 74 79 20 77 69 74 68 20 6f 6c 64 65  bility with olde
3c50: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  r versions of.SQ
3c60: 4c 69 74 65 2c 20 74 68 65 20 6c 65 67 61 63 79  Lite, the legacy
3c70: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 73 20   file format is 
3c80: 67 65 6e 65 72 61 74 65 64 20 62 79 20 64 65 66  generated by def
3c90: 61 75 6c 74 2e 20 20 55 73 65 20 74 68 65 0a 5b  ault.  Use the.[
3ca0: 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d  legacy_file_form
3cb0: 61 74 5d 20 70 72 61 67 6d 61 20 74 6f 20 6d 6f  at] pragma to mo
3cc0: 64 69 66 79 20 74 68 69 73 20 62 65 68 61 76 69  dify this behavi
3cd0: 6f 72 20 61 6e 64 20 67 65 6e 65 72 61 74 65 0a  or and generate.
3ce0: 64 61 74 61 62 61 73 65 73 20 74 68 61 74 20 75  databases that u
3cf0: 73 65 20 74 68 65 20 6e 65 77 65 72 20 66 69 6c  se the newer fil
3d00: 65 20 66 6f 72 6d 61 74 2e 20 20 46 75 74 75 72  e format.  Futur
3d10: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
3d20: 4c 69 74 65 0a 6d 61 79 20 62 65 67 69 6e 20 74  Lite.may begin t
3d30: 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 6e  o generate the n
3d40: 65 77 65 72 20 66 69 6c 65 20 66 6f 72 6d 61 74  ewer file format
3d50: 20 62 79 20 64 65 66 61 75 6c 74 2e 3c 2f 70 3e   by default.</p>
3d60: 0a 0a 3c 70 3e 54 68 65 20 43 4f 4c 4c 41 54 45  ..<p>The COLLATE
3d70: 20 63 6c 61 75 73 65 20 66 6f 6c 6c 6f 77 69 6e   clause followin
3d80: 67 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61  g each column na
3d90: 6d 65 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  me defines a col
3da0: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
3db0: 75 73 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e  used for text en
3dc0: 74 69 72 65 73 20 69 6e 20 74 68 61 74 20 63 6f  tires in that co
3dd0: 6c 75 6d 6e 2e 20 20 54 68 65 20 64 65 66 61 75  lumn.  The defau
3de0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71  lt collating.seq
3df0: 75 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c  uence is the col
3e00: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
3e10: 64 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74  defined for that
3e20: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b   column in the.[
3e30: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74  CREATE TABLE] st
3e40: 61 74 65 6d 65 6e 74 2e 20 20 4f 72 20 69 66 20  atement.  Or if 
3e50: 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  no collating seq
3e60: 75 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69  uence is otherwi
3e70: 73 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20  se defined,.the 
3e80: 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20  built-in BINARY 
3e90: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
3ea0: 63 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a  ce is used.</p>.
3eb0: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f  .<p>There are no
3ec0: 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
3ed0: 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  s on the number 
3ee0: 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  of indices that 
3ef0: 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20  can be.attached 
3f00: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
3f10: 65 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  e.  The number o
3f20: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  f columns in an 
3f30: 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69 74 65  index is .limite
3f40: 64 20 74 6f 20 5b 53 51 4c 49 54 45 5f 4d 41 58  d to [SQLITE_MAX
3f50: 5f 43 4f 4c 55 4d 4e 5d 2e 3c 2f 70 3e 0a 0a 3c  _COLUMN].</p>..<
3f60: 70 3e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20  p>If the UNIQUE 
3f70: 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20  keyword appears 
3f80: 62 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61  between CREATE a
3f90: 6e 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75  nd INDEX then du
3fa0: 70 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e  plicate.index en
3fb0: 74 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  tries are not al
3fc0: 6c 6f 77 65 64 2e 20 20 41 6e 79 20 61 74 74 65  lowed.  Any atte
3fd0: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
3fe0: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
3ff0: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
4000: 6e 20 65 72 72 6f 72 2e 20 20 46 6f 72 20 74 68  n error.  For th
4010: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e  e purposes of un
4020: 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c  ique indices, al
4030: 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72  l NULL values.ar
4040: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  e considered to 
4050: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61  different from a
4060: 6c 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61  ll other NULL va
4070: 6c 75 65 73 20 61 6e 64 20 61 72 65 20 74 68 75  lues and are thu
4080: 73 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c  s unique.</p>..<
4090: 70 3e 54 68 65 20 74 65 78 74 0a 6f 66 20 65 61  p>The text.of ea
40a0: 63 68 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ch CREATE INDEX 
40b0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f  statement is sto
40c0: 72 65 64 20 69 6e 20 74 68 65 20 3c 62 3e 73 71  red in the <b>sq
40d0: 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 0a  lite_master</b>.
40e0: 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f 74 65 6d  or <b>sqlite_tem
40f0: 70 5f 6d 61 73 74 65 72 3c 2f 62 3e 20 74 61 62  p_master</b> tab
4100: 6c 65 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  le, depending on
4110: 20 77 68 65 74 68 65 72 20 74 68 65 20 74 61 62   whether the tab
4120: 6c 65 0a 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le.being indexed
4130: 20 69 73 20 74 65 6d 70 6f 72 61 72 79 2e 20 20   is temporary.  
4140: 45 76 65 72 79 20 74 69 6d 65 20 74 68 65 20 64  Every time the d
4150: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
4160: 64 2c 0a 61 6c 6c 20 43 52 45 41 54 45 20 49 4e  d,.all CREATE IN
4170: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73 0a 61  DEX statements.a
4180: 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  re read from the
4190: 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74 65   <b>sqlite_maste
41a0: 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e 64 20  r</b> table and 
41b0: 75 73 65 64 20 74 6f 20 72 65 67 65 6e 65 72 61  used to regenera
41c0: 74 65 0a 53 51 4c 69 74 65 27 73 20 69 6e 74 65  te.SQLite's inte
41d0: 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
41e0: 69 6f 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78  ion of the index
41f0: 20 6c 61 79 6f 75 74 2e 3c 2f 70 3e 0a 0a 3c 70   layout.</p>..<p
4200: 3e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  >If the optional
4210: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
4220: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
4230: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
4240: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
4250: 20 6e 61 6d 65 20 61 6c 65 61 64 79 20 65 78 69   name aleady exi
4260: 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20 63  sts, then this c
4270: 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20 61  ommand becomes a
4280: 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70 3e   no-op.</p>..<p>
4290: 49 6e 64 65 78 65 73 20 61 72 65 20 72 65 6d 6f  Indexes are remo
42a0: 76 65 64 20 77 69 74 68 20 74 68 65 20 3c 61 20  ved with the <a 
42b0: 68 72 65 66 3d 22 6c 61 6e 67 5f 64 72 6f 70 69  href="lang_dropi
42c0: 6e 64 65 78 2e 68 74 6d 6c 22 3e 44 52 4f 50 20  ndex.html">DROP 
42d0: 49 4e 44 45 58 3c 2f 61 3e 20 0a 63 6f 6d 6d 61  INDEX</a> .comma
42e0: 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  nd.</p>...<tcl>.
42f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
4340: 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 54  ection {CREATE T
4350: 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61 62  ABLE} {createtab
4360: 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41 42  le} {{CREATE TAB
4370: 4c 45 7d 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71  LE}}..Syntax {sq
4380: 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 43 52 45  l-command} {.CRE
4390: 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45 4d 50  ATE [TEMP | TEMP
43a0: 4f 52 41 52 59 5d 20 54 41 42 4c 45 20 5b 49 46  ORARY] TABLE [IF
43b0: 20 4e 4f 54 20 45 58 49 53 54 53 5d 20 5b 3c 64   NOT EXISTS] [<d
43c0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d  atabase-name> .]
43d0: 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 28 0a   <table-name> (.
43e0: 20 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66 3e 20 5b    <column-def> [
43f0: 2c 20 3c 63 6f 6c 75 6d 6e 2d 64 65 66 3e 5d 2a  , <column-def>]*
4400: 0a 20 20 5b 2c 20 3c 63 6f 6e 73 74 72 61 69 6e  .  [, <constrain
4410: 74 3e 5d 2a 0a 29 0a 7d 20 7b 73 71 6c 2d 63 6f  t>]*.).} {sql-co
4420: 6d 6d 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20  mmand} {.CREATE 
4430: 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52  [TEMP | TEMPORAR
4440: 59 5d 20 54 41 42 4c 45 20 5b 3c 64 61 74 61 62  Y] TABLE [<datab
4450: 61 73 65 2d 6e 61 6d 65 3e 2e 5d 20 3c 74 61 62  ase-name>.] <tab
4460: 6c 65 2d 6e 61 6d 65 3e 20 41 53 20 3c 73 65 6c  le-name> AS <sel
4470: 65 63 74 2d 73 74 61 74 65 6d 65 6e 74 3e 0a 7d  ect-statement>.}
4480: 20 7b 63 6f 6c 75 6d 6e 2d 64 65 66 7d 20 7b 0a   {column-def} {.
4490: 3c 6e 61 6d 65 3e 20 5b 3c 74 79 70 65 3e 5d 20  <name> [<type>] 
44a0: 5b 5b 43 4f 4e 53 54 52 41 49 4e 54 20 3c 6e 61  [[CONSTRAINT <na
44b0: 6d 65 3e 5d 20 3c 63 6f 6c 75 6d 6e 2d 63 6f 6e  me>] <column-con
44c0: 73 74 72 61 69 6e 74 3e 5d 2a 0a 7d 20 7b 74 79  straint>]*.} {ty
44d0: 70 65 7d 20 7b 0a 3c 74 79 70 65 6e 61 6d 65 3e  pe} {.<typename>
44e0: 20 7c 0a 3c 74 79 70 65 6e 61 6d 65 3e 20 28 20   |.<typename> ( 
44f0: 3c 6e 75 6d 62 65 72 3e 20 29 20 7c 0a 3c 74 79  <number> ) |.<ty
4500: 70 65 6e 61 6d 65 3e 20 28 20 3c 6e 75 6d 62 65  pename> ( <numbe
4510: 72 3e 20 2c 20 3c 6e 75 6d 62 65 72 3e 20 29 0a  r> , <number> ).
4520: 7d 20 7b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72  } {column-constr
4530: 61 69 6e 74 7d 20 7b 0a 4e 4f 54 20 4e 55 4c 4c  aint} {.NOT NULL
4540: 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   [ <conflict-cla
4550: 75 73 65 3e 20 5d 20 7c 0a 50 52 49 4d 41 52 59  use> ] |.PRIMARY
4560: 20 4b 45 59 20 5b 3c 73 6f 72 74 2d 6f 72 64 65   KEY [<sort-orde
4570: 72 3e 5d 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d  r>] [ <conflict-
4580: 63 6c 61 75 73 65 3e 20 5d 20 5b 41 55 54 4f 49  clause> ] [AUTOI
4590: 4e 43 52 45 4d 45 4e 54 5d 20 7c 0a 55 4e 49 51  NCREMENT] |.UNIQ
45a0: 55 45 20 5b 20 3c 63 6f 6e 66 6c 69 63 74 2d 63  UE [ <conflict-c
45b0: 6c 61 75 73 65 3e 20 5d 20 7c 0a 43 48 45 43 4b  lause> ] |.CHECK
45c0: 20 28 20 3c 65 78 70 72 3e 20 29 20 7c 0a 44 45   ( <expr> ) |.DE
45d0: 46 41 55 4c 54 20 3c 76 61 6c 75 65 3e 20 7c 0a  FAULT <value> |.
45e0: 43 4f 4c 4c 41 54 45 20 3c 63 6f 6c 6c 61 74 69  COLLATE <collati
45f0: 6f 6e 2d 6e 61 6d 65 3e 0a 7d 20 7b 63 6f 6e 73  on-name>.} {cons
4600: 74 72 61 69 6e 74 7d 20 7b 0a 50 52 49 4d 41 52  traint} {.PRIMAR
4610: 59 20 4b 45 59 20 28 20 3c 63 6f 6c 75 6d 6e 2d  Y KEY ( <column-
4620: 6c 69 73 74 3e 20 29 20 5b 20 3c 63 6f 6e 66 6c  list> ) [ <confl
4630: 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c 0a  ict-clause> ] |.
4640: 55 4e 49 51 55 45 20 28 20 3c 63 6f 6c 75 6d 6e  UNIQUE ( <column
4650: 2d 6c 69 73 74 3e 20 29 20 5b 20 3c 63 6f 6e 66  -list> ) [ <conf
4660: 6c 69 63 74 2d 63 6c 61 75 73 65 3e 20 5d 20 7c  lict-clause> ] |
4670: 0a 43 48 45 43 4b 20 28 20 3c 65 78 70 72 3e 20  .CHECK ( <expr> 
4680: 29 0a 7d 20 7b 63 6f 6e 66 6c 69 63 74 2d 63 6c  ).} {conflict-cl
4690: 61 75 73 65 7d 20 7b 0a 4f 4e 20 43 4f 4e 46 4c  ause} {.ON CONFL
46a0: 49 43 54 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c  ICT <conflict-al
46b0: 67 6f 72 69 74 68 6d 3e 0a 7d 0a 3c 2f 74 63 6c  gorithm>.}.</tcl
46c0: 3e 0a 0a 3c 70 3e 41 20 43 52 45 41 54 45 20 54  >..<p>A CREATE T
46d0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
46e0: 73 20 62 61 73 69 63 61 6c 6c 79 20 74 68 65 20  s basically the 
46f0: 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41 54 45  keywords "CREATE
4700: 20 54 41 42 4c 45 22 0a 66 6f 6c 6c 6f 77 65 64   TABLE".followed
4710: 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
4720: 61 20 6e 65 77 20 74 61 62 6c 65 20 61 6e 64 20  a new table and 
4730: 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
4740: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 0a 64  list of column.d
4750: 65 66 69 6e 69 74 69 6f 6e 73 20 61 6e 64 20 63  efinitions and c
4760: 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 0a 54 61  onstraints.  .Ta
4770: 62 6c 65 73 20 6e 61 6d 65 73 20 74 68 61 74 20  bles names that 
4780: 62 65 67 69 6e 20 77 69 74 68 20 22 3c 62 3e 73  begin with "<b>s
4790: 71 6c 69 74 65 5f 3c 2f 62 3e 22 20 61 72 65 20  qlite_</b>" are 
47a0: 72 65 73 65 72 76 65 64 0a 66 6f 72 20 75 73 65  reserved.for use
47b0: 20 62 79 20 74 68 65 20 65 6e 67 69 6e 65 2e 3c   by the engine.<
47c0: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 63 6f 6c  /p>..<p>Each col
47d0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn definition i
47e0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
47f0: 65 20 63 6f 6c 75 6d 6e 20 66 6f 6c 6c 6f 77 65  e column followe
4800: 64 20 62 79 20 74 68 65 0a 64 61 74 61 74 79 70  d by the.datatyp
4810: 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  e for that colum
4820: 6e 2c 20 74 68 65 6e 20 6f 6e 65 20 6f 72 20 6d  n, then one or m
4830: 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6c  ore optional col
4840: 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  umn constraints.
4850: 0a 54 68 65 20 64 61 74 61 74 79 70 65 20 66 6f  .The datatype fo
4860: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 6f 65  r the column doe
4870: 73 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 77  s not restrict w
4880: 68 61 74 20 64 61 74 61 20 6d 61 79 20 62 65 20  hat data may be 
4890: 70 75 74 0a 69 6e 20 74 68 61 74 20 63 6f 6c 75  put.in that colu
48a0: 6d 6e 2e 0a 53 65 65 20 3c 61 20 68 72 65 66 3d  mn..See <a href=
48b0: 22 64 61 74 61 74 79 70 65 33 2e 68 74 6d 6c 22  "datatype3.html"
48c0: 3e 44 61 74 61 74 79 70 65 73 20 49 6e 20 53 51  >Datatypes In SQ
48d0: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 3c 2f  Lite Version 3</
48e0: 61 3e 20 66 6f 72 0a 61 64 64 69 74 69 6f 6e 61  a> for.additiona
48f0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 54  l information..T
4900: 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  he UNIQUE constr
4910: 61 69 6e 74 20 63 61 75 73 65 73 20 61 6e 20 75  aint causes an u
4920: 6e 69 71 75 65 20 69 6e 64 65 78 20 74 6f 20 62  nique index to b
4930: 65 20 63 72 65 61 74 65 64 20 6f 6e 20 74 68 65  e created on the
4940: 20 73 70 65 63 69 66 69 65 64 0a 63 6f 6c 75 6d   specified.colum
4950: 6e 73 2e 20 20 41 6c 6c 20 4e 55 4c 4c 20 76 61  ns.  All NULL va
4960: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
4970: 72 65 64 20 64 69 66 66 65 72 65 6e 74 20 66 72  red different fr
4980: 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 20 61 6e  om each other an
4990: 64 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72  d from.all other
49a0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
49b0: 70 75 72 70 6f 73 65 20 6f 66 20 64 65 74 65 72  purpose of deter
49c0: 6d 69 6e 69 6e 67 20 75 6e 69 71 75 65 6e 65 73  mining uniquenes
49d0: 73 2c 20 68 65 6e 63 65 20 61 20 55 4e 49 51 55  s, hence a UNIQU
49e0: 45 0a 63 6f 6c 75 6d 6e 20 6d 61 79 20 63 6f 6e  E.column may con
49f0: 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65 20 65 6e  tain multiple en
4a00: 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 76  tries with the v
4a10: 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 54 68  alue of NULL..Th
4a20: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
4a30: 20 73 70 65 63 69 66 69 65 73 20 77 68 61 74 20   specifies what 
4a40: 74 65 78 74 20 0a 5b 63 6f 6c 6c 61 74 69 6e 67  text .[collating
4a50: 20 66 75 6e 63 74 69 6f 6e 5d 20 74 6f 20 75 73   function] to us
4a60: 65 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  e when comparing
4a70: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 66 6f   text entries fo
4a80: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 0a  r the column.  .
4a90: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 5b 42 49  The built-in [BI
4aa0: 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69 6e 67 20  NARY] collating 
4ab0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
4ac0: 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 3c 70 3e   by default..<p>
4ad0: 0a 54 68 65 20 44 45 46 41 55 4c 54 20 63 6f 6e  .The DEFAULT con
4ae0: 73 74 72 61 69 6e 74 20 73 70 65 63 69 66 69 65  straint specifie
4af0: 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  s a default valu
4b00: 65 20 74 6f 20 75 73 65 20 77 68 65 6e 20 64 6f  e to use when do
4b10: 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e  ing an [INSERT].
4b20: 0a 54 68 65 20 76 61 6c 75 65 20 6d 61 79 20 62  .The value may b
4b30: 65 20 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  e NULL, a string
4b40: 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 61 20 6e   constant or a n
4b50: 75 6d 62 65 72 2e 20 53 74 61 72 74 69 6e 67 20  umber. Starting 
4b60: 77 69 74 68 0a 5b 76 65 72 73 69 6f 6e 20 33 2e  with.[version 3.
4b70: 31 2e 30 5d 2c 0a 74 68 65 20 64 65 66 61 75 6c  1.0],.the defaul
4b80: 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f  t value may also
4b90: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73   be one of the s
4ba0: 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65  pecial case-inde
4bb0: 70 65 6e 64 61 6e 74 0a 6b 65 79 77 6f 72 64 73  pendant.keywords
4bc0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43   CURRENT_TIME, C
4bd0: 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43  URRENT_DATE or C
4be0: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
4bf0: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
4c00: 73 0a 4e 55 4c 4c 2c 20 61 20 73 74 72 69 6e 67  s.NULL, a string
4c10: 20 63 6f 6e 73 74 61 6e 74 20 6f 72 20 6e 75 6d   constant or num
4c20: 62 65 72 2c 20 69 74 20 69 73 20 6c 69 74 65 72  ber, it is liter
4c30: 61 6c 6c 79 20 69 6e 73 65 72 74 65 64 20 69 6e  ally inserted in
4c40: 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 77 68  to the column.wh
4c50: 65 6e 65 76 65 72 20 61 6e 20 49 4e 53 45 52 54  enever an INSERT
4c60: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
4c70: 64 6f 65 73 20 6e 6f 74 20 73 70 65 63 69 66 79  does not specify
4c80: 20 61 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65   a value for the
4c90: 20 63 6f 6c 75 6d 6e 20 69 73 0a 65 78 65 63 75   column is.execu
4ca0: 74 65 64 2e 20 49 66 20 74 68 65 20 76 61 6c 75  ted. If the valu
4cb0: 65 20 69 73 20 43 55 52 52 45 4e 54 5f 54 49 4d  e is CURRENT_TIM
4cc0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20  E, CURRENT_DATE 
4cd0: 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  or CURRENT_TIMES
4ce0: 54 41 4d 50 2c 20 74 68 65 6e 0a 74 68 65 20 63  TAMP, then.the c
4cf0: 75 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20  urrent UTC date 
4d00: 61 6e 64 2f 6f 72 20 74 69 6d 65 20 69 73 20 69  and/or time is i
4d10: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
4d20: 20 63 6f 6c 75 6d 6e 73 2e 20 46 6f 72 0a 43 55   columns. For.CU
4d30: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65 20  RRENT_TIME, the 
4d40: 66 6f 72 6d 61 74 20 69 73 20 48 48 3a 4d 4d 3a  format is HH:MM:
4d50: 53 53 2e 20 46 6f 72 20 43 55 52 52 45 4e 54 5f  SS. For CURRENT_
4d60: 44 41 54 45 2c 20 59 59 59 59 2d 4d 4d 2d 44 44  DATE, YYYY-MM-DD
4d70: 2e 20 54 68 65 20 66 6f 72 6d 61 74 0a 66 6f 72  . The format.for
4d80: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
4d90: 4d 50 20 69 73 20 22 59 59 59 59 2d 4d 4d 2d 44  MP is "YYYY-MM-D
4da0: 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 70  D HH:MM:SS"..</p
4db0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4dc0: 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47  ent rowid {INTEG
4dd0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  ER PRIMARY KEY} 
4de0: 52 4f 57 49 44 3c 2f 74 63 6c 3e 0a 3c 70 3e 53  ROWID</tcl>.<p>S
4df0: 70 65 63 69 66 79 69 6e 67 20 61 20 50 52 49 4d  pecifying a PRIM
4e00: 41 52 59 20 4b 45 59 20 6e 6f 72 6d 61 6c 6c 79  ARY KEY normally
4e10: 20 6a 75 73 74 20 63 72 65 61 74 65 73 20 61 20   just creates a 
4e20: 55 4e 49 51 55 45 20 69 6e 64 65 78 0a 6f 6e 20  UNIQUE index.on 
4e30: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
4e40: 67 20 63 6f 6c 75 6d 6e 73 2e 20 20 48 6f 77 65  g columns.  Howe
4e50: 76 65 72 2c 20 69 66 20 70 72 69 6d 61 72 79 20  ver, if primary 
4e60: 6b 65 79 20 69 73 20 6f 6e 20 61 20 73 69 6e 67  key is on a sing
4e70: 6c 65 20 63 6f 6c 75 6d 6e 0a 74 68 61 74 20 68  le column.that h
4e80: 61 73 20 64 61 74 61 74 79 70 65 20 49 4e 54 45  as datatype INTE
4e90: 47 45 52 2c 20 74 68 65 6e 20 74 68 61 74 20 63  GER, then that c
4ea0: 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 69 6e  olumn is used in
4eb0: 74 65 72 6e 61 6c 6c 79 0a 61 73 20 74 68 65 20  ternally.as the 
4ec0: 61 63 74 75 61 6c 20 6b 65 79 20 6f 66 20 74 68  actual key of th
4ed0: 65 20 42 2d 54 72 65 65 20 66 6f 72 20 74 68 65  e B-Tree for the
4ee0: 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6d 65   table.  This me
4ef0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f 6c  ans that the col
4f00: 75 6d 6e 0a 6d 61 79 20 6f 6e 6c 79 20 68 6f 6c  umn.may only hol
4f10: 64 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  d unique integer
4f20: 20 76 61 6c 75 65 73 2e 20 20 28 45 78 63 65 70   values.  (Excep
4f30: 74 20 66 6f 72 20 74 68 69 73 20 6f 6e 65 20 63  t for this one c
4f40: 61 73 65 2c 0a 53 51 4c 69 74 65 20 69 67 6e 6f  ase,.SQLite igno
4f50: 72 65 73 20 74 68 65 20 64 61 74 61 74 79 70 65  res the datatype
4f60: 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 6f   specification o
4f70: 66 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 61 6c  f columns and al
4f80: 6c 6f 77 73 0a 61 6e 79 20 6b 69 6e 64 20 6f 66  lows.any kind of
4f90: 20 64 61 74 61 20 74 6f 20 62 65 20 70 75 74 20   data to be put 
4fa0: 69 6e 20 61 20 63 6f 6c 75 6d 6e 20 72 65 67 61  in a column rega
4fb0: 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 64 65  rdless of its de
4fc0: 63 6c 61 72 65 64 0a 64 61 74 61 74 79 70 65 2e  clared.datatype.
4fd0: 29 20 20 49 66 20 61 20 74 61 62 6c 65 20 64 6f  )  If a table do
4fe0: 65 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 49  es not have an I
4ff0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
5000: 45 59 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65 6e 20  EY column,.then 
5010: 74 68 65 20 42 2d 54 72 65 65 20 6b 65 79 20 77  the B-Tree key w
5020: 69 6c 6c 20 62 65 20 61 20 61 75 74 6f 6d 61 74  ill be a automat
5030: 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64  ically generated
5040: 20 69 6e 74 65 67 65 72 2e 0a 54 68 65 20 42 2d   integer..The B-
5050: 54 72 65 65 20 6b 65 79 20 66 6f 72 20 61 20 72  Tree key for a r
5060: 6f 77 20 63 61 6e 20 61 6c 77 61 79 73 20 62 65  ow can always be
5070: 20 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20   accessed using 
5080: 6f 6e 65 20 6f 66 20 74 68 65 0a 73 70 65 63 69  one of the.speci
5090: 61 6c 20 6e 61 6d 65 73 20 22 3c 62 3e 52 4f 57  al names "<b>ROW
50a0: 49 44 3c 2f 62 3e 22 2c 20 22 3c 62 3e 4f 49 44  ID</b>", "<b>OID
50b0: 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52  </b>", or "<b>_R
50c0: 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 54 68 69 73  OWID_</b>"..This
50d0: 20 69 73 20 74 72 75 65 20 72 65 67 61 72 64 6c   is true regardl
50e0: 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
50f0: 72 20 6e 6f 74 20 74 68 65 72 65 20 69 73 20 61  r not there is a
5100: 6e 20 49 4e 54 45 47 45 52 0a 50 52 49 4d 41 52  n INTEGER.PRIMAR
5110: 59 20 4b 45 59 2e 20 20 41 6e 20 49 4e 54 45 47  Y KEY.  An INTEG
5120: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ER PRIMARY KEY c
5130: 6f 6c 75 6d 6e 20 63 61 6e 20 61 6c 73 6f 20 69  olumn can also i
5140: 6e 63 6c 75 64 65 20 74 68 65 0a 6b 65 79 77 6f  nclude the.keywo
5150: 72 64 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  rd [AUTOINCREMEN
5160: 54 5d 2e 20 20 54 68 65 20 5b 41 55 54 4f 49 4e  T].  The [AUTOIN
5170: 43 52 45 4d 45 4e 54 5d 20 6b 65 79 77 6f 72 64  CREMENT] keyword
5180: 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 77 61   modified the wa
5190: 79 0a 74 68 61 74 20 42 2d 54 72 65 65 20 6b 65  y.that B-Tree ke
51a0: 79 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  ys are automatic
51b0: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 2e 20  ally generated. 
51c0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 64 65 74 61   Additional deta
51d0: 69 6c 0a 6f 6e 20 61 75 74 6f 6d 61 74 69 63 20  il.on automatic 
51e0: 42 2d 54 72 65 65 20 6b 65 79 20 67 65 6e 65 72  B-Tree key gener
51f0: 61 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ation is availab
5200: 6c 65 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f  le.<a href="auto
5210: 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61  inc.html">separa
5220: 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c  tely</a>.</p>..<
5230: 70 3e 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  p>According to t
5240: 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 2c  he SQL standard,
5250: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68 6f   PRIMARY KEY sho
5260: 75 6c 64 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55  uld imply NOT NU
5270: 4c 4c 2e 0a 55 6e 66 6f 72 74 75 6e 61 74 65 6c  LL..Unfortunatel
5280: 79 2c 20 64 75 65 20 74 6f 20 61 20 6c 6f 6e 67  y, due to a long
5290: 2d 73 74 61 6e 64 69 6e 67 20 63 6f 64 69 6e 67  -standing coding
52a0: 20 6f 76 65 72 73 69 67 68 74 2c 20 74 68 69 73   oversight, this
52b0: 20 69 73 20 6e 6f 74 20 0a 74 68 65 20 63 61 73   is not .the cas
52c0: 65 20 69 6e 20 53 51 4c 69 74 65 2e 20 20 53 51  e in SQLite.  SQ
52d0: 4c 69 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c  Lite allows NULL
52e0: 20 76 61 6c 75 65 73 0a 69 6e 20 61 20 50 52 49   values.in a PRI
52f0: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e  MARY KEY column.
5300: 20 20 57 65 20 63 6f 75 6c 64 20 63 68 61 6e 67    We could chang
5310: 65 20 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e 66  e SQLite to conf
5320: 6f 72 6d 20 74 6f 20 74 68 65 0a 73 74 61 6e 64  orm to the.stand
5330: 61 72 64 20 28 61 6e 64 20 77 65 20 6d 69 67 68  ard (and we migh
5340: 74 20 64 6f 20 73 6f 20 69 6e 20 74 68 65 20 66  t do so in the f
5350: 75 74 75 72 65 29 2c 20 62 75 74 20 62 79 20 74  uture), but by t
5360: 68 65 20 74 69 6d 65 20 74 68 65 0a 6f 76 65 72  he time the.over
5370: 73 69 67 68 74 20 77 61 73 20 64 69 73 63 6f 76  sight was discov
5380: 65 72 65 64 2c 20 53 51 4c 69 74 65 20 77 61 73  ered, SQLite was
5390: 20 69 6e 20 73 75 63 68 20 77 69 64 65 20 75 73   in such wide us
53a0: 65 20 74 68 61 74 20 77 65 20 66 65 61 72 65 64  e that we feared
53b0: 0a 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79  .breaking legacy
53c0: 20 63 6f 64 65 20 69 66 20 77 65 20 66 69 78 65   code if we fixe
53d0: 64 20 74 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20  d the problem.  
53e0: 53 6f 20 66 6f 72 20 6e 6f 77 20 77 65 20 68 61  So for now we ha
53f0: 76 65 0a 63 68 6f 73 65 6e 20 74 6f 20 63 6f 6e  ve.chosen to con
5400: 74 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e  tinue allowing N
5410: 55 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20  ULLs in PRIMARY 
5420: 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 44 65 76  KEY columns..Dev
5430: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
5440: 65 20 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72  e aware, however
5450: 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20 63 68  , that we may ch
5460: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 63  ange SQLite to.c
5470: 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51  onform to the SQ
5480: 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 20 66 75  L standard in fu
5490: 74 75 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  ture and should 
54a0: 64 65 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72  design new progr
54b0: 61 6d 73 0a 61 63 63 6f 72 64 69 6e 67 6c 79 2e  ams.accordingly.
54c0: 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  </p>..<p>If the 
54d0: 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f  "TEMP" or "TEMPO
54e0: 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63  RARY" keyword oc
54f0: 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
5500: 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22 54 41  "CREATE".and "TA
5510: 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 74 61  BLE" then the ta
5520: 62 6c 65 20 74 68 61 74 20 69 73 20 63 72 65 61  ble that is crea
5530: 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69  ted is only visi
5540: 62 6c 65 0a 77 69 74 68 69 6e 20 74 68 61 74 20  ble.within that 
5550: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f  same database co
5560: 6e 6e 65 63 74 69 6f 6e 0a 61 6e 64 20 69 73 20  nnection.and is 
5570: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
5580: 6c 65 74 65 64 20 77 68 65 6e 0a 74 68 65 20 64  leted when.the d
5590: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
55a0: 6f 6e 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 41  on is closed.  A
55b0: 6e 79 20 69 6e 64 69 63 65 73 20 63 72 65 61 74  ny indices creat
55c0: 65 64 20 6f 6e 20 61 20 74 65 6d 70 6f 72 61 72  ed on a temporar
55d0: 79 20 74 61 62 6c 65 0a 61 72 65 20 61 6c 73 6f  y table.are also
55e0: 20 74 65 6d 70 6f 72 61 72 79 2e 20 20 54 65 6d   temporary.  Tem
55f0: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
5600: 64 20 69 6e 64 69 63 65 73 20 61 72 65 20 73 74  d indices are st
5610: 6f 72 65 64 20 69 6e 20 61 0a 73 65 70 61 72 61  ored in a.separa
5620: 74 65 20 66 69 6c 65 20 64 69 73 74 69 6e 63 74  te file distinct
5630: 20 66 72 6f 6d 20 74 68 65 20 6d 61 69 6e 20 64   from the main d
5640: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
5650: 3e 0a 0a 3c 70 3e 20 49 66 20 61 20 26 6c 74 3b  >..<p> If a &lt;
5660: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74  database-name&gt
5670: 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  ; is specified, 
5680: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
5690: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
56a0: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
56b0: 2e 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  . It is an error
56c0: 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68   to specify both
56d0: 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d   a &lt;database-
56e0: 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65  name&gt;.and the
56f0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20 75   TEMP keyword, u
5700: 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61  nless the &lt;da
5710: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
5720: 69 73 20 22 74 65 6d 70 22 2e 20 49 66 20 6e 6f  is "temp". If no
5730: 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69  .database name i
5740: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
5750: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
5760: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
5770: 2c 0a 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  ,.the table is c
5780: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
5790: 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  in database.</p>
57a0: 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61  ..<p>The optiona
57b0: 6c 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75  l [conflict clau
57c0: 73 65 5d 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  se] following ea
57d0: 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 0a 61 6c  ch constraint.al
57e0: 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
57f0: 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
5800: 65 72 6e 61 74 69 76 65 20 64 65 66 61 75 6c 74  ernative default
5810: 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 66  .constraint conf
5820: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
5830: 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 74 68  algorithm for th
5840: 61 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 54  at constraint..T
5850: 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 61 62  he default is ab
5860: 6f 72 74 20 41 42 4f 52 54 2e 20 20 44 69 66 66  ort ABORT.  Diff
5870: 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  erent constraint
5880: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
5890: 65 0a 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65  e.table may have
58a0: 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61 75   different defau
58b0: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
58c0: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
58d0: 73 2e 0a 49 66 20 61 6e 20 5b 49 4e 53 45 52 54  s..If an [INSERT
58e0: 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74  ] or [UPDATE] st
58f0: 61 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65  atement specifie
5900: 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 63 6f  s a different co
5910: 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69 6f  nflict.resolutio
5920: 6e 20 61 6c 67 6f 72 69 74 68 6d 2c 20 74 68 65  n algorithm, the
5930: 6e 20 74 68 61 74 20 61 6c 67 6f 72 69 74 68 6d  n that algorithm
5940: 20 69 73 20 75 73 65 64 20 69 6e 20 70 6c 61 63   is used in plac
5950: 65 20 6f 66 20 74 68 65 0a 64 65 66 61 75 6c 74  e of the.default
5960: 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69   algorithm speci
5970: 66 69 65 64 20 69 6e 20 74 68 65 20 43 52 45 41  fied in the CREA
5980: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
5990: 6e 74 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nt..See the sect
59a0: 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43  ion titled.[ON C
59b0: 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
59c0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
59d0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 48 45  ion.</p>..<p>CHE
59e0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  CK constraints a
59f0: 72 65 20 73 75 70 70 6f 72 74 65 64 20 61 73 20  re supported as 
5a00: 6f 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e  of [version 3.3.
5a10: 30 5d 2e 20 20 50 72 69 6f 72 0a 74 6f 20 76 65  0].  Prior.to ve
5a20: 72 73 69 6f 6e 20 33 2e 33 2e 30 2c 20 43 48 45  rsion 3.3.0, CHE
5a30: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  CK constraints w
5a40: 65 72 65 20 70 61 72 73 65 64 20 62 75 74 20 6e  ere parsed but n
5a50: 6f 74 20 65 6e 66 6f 72 63 65 64 2e 3c 2f 70 3e  ot enforced.</p>
5a60: 0a 0a 3c 70 3e 54 68 65 20 6e 75 6d 62 65 72 20  ..<p>The number 
5a70: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20  of columns in a 
5a80: 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65 64  table is limited
5a90: 20 62 79 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f   by the.[SQLITE_
5aa0: 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 20 63 6f 6d 70  MAX_COLUMN] comp
5ab0: 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74  ile-time paramet
5ac0: 65 72 2e 0a 41 20 73 69 6e 67 6c 65 20 72 6f 77  er..A single row
5ad0: 20 6f 66 20 61 20 74 61 62 6c 65 20 63 61 6e 6e   of a table cann
5ae0: 6f 74 20 73 74 6f 72 65 20 6d 6f 72 65 20 74 68  ot store more th
5af0: 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  an.[SQLITE_MAX_L
5b00: 45 4e 47 54 48 5d 20 62 79 74 65 73 20 6f 66 20  ENGTH] bytes of 
5b10: 64 61 74 61 2e 0a 42 6f 74 68 20 6f 66 20 74 68  data..Both of th
5b20: 65 73 65 20 6c 69 6d 69 74 73 20 63 61 6e 20 62  ese limits can b
5b30: 65 20 6c 6f 77 65 72 65 64 20 61 74 20 72 75 6e  e lowered at run
5b40: 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  time using the.[
5b50: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d  sqlite3_limit()]
5b60: 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
5b70: 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 54 68 65 20 43  .</p>...<p>The C
5b80: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 66  REATE TABLE AS f
5b90: 6f 72 6d 20 64 65 66 69 6e 65 73 20 74 68 65 20  orm defines the 
5ba0: 74 61 62 6c 65 20 74 6f 20 62 65 0a 74 68 65 20  table to be.the 
5bb0: 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
5bc0: 71 75 65 72 79 2e 20 20 54 68 65 20 6e 61 6d 65  query.  The name
5bd0: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63  s of the table c
5be0: 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 6e  olumns are.the n
5bf0: 61 6d 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75  ames of the colu
5c00: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
5c10: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74  t.</p>..<p>The t
5c20: 65 78 74 0a 6f 66 20 65 61 63 68 20 43 52 45 41  ext.of each CREA
5c30: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
5c40: 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  nt is stored in 
5c50: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61  the <b>sqlite_ma
5c60: 73 74 65 72 3c 2f 62 3e 0a 74 61 62 6c 65 2e 20  ster</b>.table. 
5c70: 20 45 76 65 72 79 20 74 69 6d 65 20 74 68 65 20   Every time the 
5c80: 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  database is open
5c90: 65 64 2c 20 61 6c 6c 20 43 52 45 41 54 45 20 54  ed, all CREATE T
5ca0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 0a  ABLE statements.
5cb0: 61 72 65 20 72 65 61 64 20 66 72 6f 6d 20 74 68  are read from th
5cc0: 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73 74  e <b>sqlite_mast
5cd0: 65 72 3c 2f 62 3e 20 74 61 62 6c 65 20 61 6e 64  er</b> table and
5ce0: 20 75 73 65 64 20 74 6f 20 72 65 67 65 6e 65 72   used to regener
5cf0: 61 74 65 0a 53 51 4c 69 74 65 27 73 20 69 6e 74  ate.SQLite's int
5d00: 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
5d10: 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  tion of the tabl
5d20: 65 20 6c 61 79 6f 75 74 2e 0a 49 66 20 74 68 65  e layout..If the
5d30: 20 6f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e   original comman
5d40: 64 20 77 61 73 20 61 20 43 52 45 41 54 45 20 54  d was a CREATE T
5d50: 41 42 4c 45 20 41 53 20 74 68 65 6e 20 74 68 65  ABLE AS then the
5d60: 6e 20 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 0a  n an equivalent.
5d70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
5d80: 74 65 6d 65 6e 74 20 69 73 20 73 79 6e 74 68 65  tement is synthe
5d90: 73 69 7a 65 64 20 61 6e 64 20 73 74 6f 72 65 20  sized and store 
5da0: 69 6e 20 3c 62 3e 73 71 6c 69 74 65 5f 6d 61 73  in <b>sqlite_mas
5db0: 74 65 72 3c 2f 62 3e 0a 69 6e 20 70 6c 61 63 65  ter</b>.in place
5dc0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
5dd0: 20 63 6f 6d 6d 61 6e 64 2e 0a 54 68 65 20 74 65   command..The te
5de0: 78 74 20 6f 66 20 43 52 45 41 54 45 20 54 45 4d  xt of CREATE TEM
5df0: 50 4f 52 41 52 59 20 54 41 42 4c 45 20 73 74 61  PORARY TABLE sta
5e00: 74 65 6d 65 6e 74 73 20 61 72 65 20 73 74 6f 72  tements are stor
5e10: 65 64 20 69 6e 20 74 68 65 0a 3c 62 3e 73 71 6c  ed in the.<b>sql
5e20: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 3c  ite_temp_master<
5e30: 2f 62 3e 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a  /b> table..</p>.
5e40: 0a 3c 70 3e 49 66 20 74 68 65 20 6f 70 74 69 6f  .<p>If the optio
5e50: 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53 54  nal IF NOT EXIST
5e60: 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  S clause is pres
5e70: 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72 20  ent and another 
5e80: 74 61 62 6c 65 0a 77 69 74 68 20 74 68 65 20 73  table.with the s
5e90: 61 6d 65 20 6e 61 6d 65 20 61 6c 65 61 64 79 20  ame name aleady 
5ea0: 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69  exists, then thi
5eb0: 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65  s command become
5ec0: 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a  s a no-op.</p>..
5ed0: 3c 70 3e 54 61 62 6c 65 73 20 61 72 65 20 72 65  <p>Tables are re
5ee0: 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20  moved using the 
5ef0: 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 64 72  <a href="lang_dr
5f00: 6f 70 74 61 62 6c 65 2e 68 74 6d 6c 22 3e 44 52  optable.html">DR
5f10: 4f 50 20 54 41 42 4c 45 3c 2f 61 3e 20 0a 73 74  OP TABLE</a> .st
5f20: 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a  atement.  </p>..
5f30: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
5f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5f80: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52  ####.Section {CR
5f90: 45 41 54 45 20 54 52 49 47 47 45 52 7d 20 63 72  EATE TRIGGER} cr
5fa0: 65 61 74 65 74 72 69 67 67 65 72 20 7b 7b 43 52  eatetrigger {{CR
5fb0: 45 41 54 45 20 54 52 49 47 47 45 52 7d 7d 0a 0a  EATE TRIGGER}}..
5fc0: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
5fd0: 65 6d 65 6e 74 7d 20 7b 0a 43 52 45 41 54 45 20  ement} {.CREATE 
5fe0: 5b 54 45 4d 50 20 7c 20 54 45 4d 50 4f 52 41 52  [TEMP | TEMPORAR
5ff0: 59 5d 20 54 52 49 47 47 45 52 20 5b 49 46 20 4e  Y] TRIGGER [IF N
6000: 4f 54 20 45 58 49 53 54 53 5d 20 5b 3c 64 61 74  OT EXISTS] [<dat
6010: 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c  abase-name> .] <
6020: 74 72 69 67 67 65 72 2d 6e 61 6d 65 3e 0a 5b 20  trigger-name>.[ 
6030: 42 45 46 4f 52 45 20 7c 20 41 46 54 45 52 20 5d  BEFORE | AFTER ]
6040: 20 3c 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74   <database-event
6050: 3e 20 4f 4e 20 3c 74 61 62 6c 65 2d 6e 61 6d 65  > ON <table-name
6060: 3e 0a 3c 74 72 69 67 67 65 72 2d 61 63 74 69 6f  >.<trigger-actio
6070: 6e 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71  n>.}..Syntax {sq
6080: 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 43  l-statement} {.C
6090: 52 45 41 54 45 20 5b 54 45 4d 50 20 7c 20 54 45  REATE [TEMP | TE
60a0: 4d 50 4f 52 41 52 59 5d 20 54 52 49 47 47 45 52  MPORARY] TRIGGER
60b0: 20 5b 49 46 20 4e 4f 54 20 45 58 49 53 54 53 5d   [IF NOT EXISTS]
60c0: 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65   [<database-name
60d0: 3e 20 2e 5d 20 3c 74 72 69 67 67 65 72 2d 6e 61  > .] <trigger-na
60e0: 6d 65 3e 0a 49 4e 53 54 45 41 44 20 4f 46 20 3c  me>.INSTEAD OF <
60f0: 64 61 74 61 62 61 73 65 2d 65 76 65 6e 74 3e 20  database-event> 
6100: 4f 4e 20 3c 76 69 65 77 2d 6e 61 6d 65 3e 0a 3c  ON <view-name>.<
6110: 74 72 69 67 67 65 72 2d 61 63 74 69 6f 6e 3e 0a  trigger-action>.
6120: 7d 0a 0a 53 79 6e 74 61 78 20 7b 64 61 74 61 62  }..Syntax {datab
6130: 61 73 65 2d 65 76 65 6e 74 7d 20 7b 0a 44 45 4c  ase-event} {.DEL
6140: 45 54 45 20 7c 20 0a 49 4e 53 45 52 54 20 7c 20  ETE | .INSERT | 
6150: 0a 55 50 44 41 54 45 20 7c 20 0a 55 50 44 41 54  .UPDATE | .UPDAT
6160: 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
6170: 74 3e 0a 7d 0a 0a 53 79 6e 74 61 78 20 7b 74 72  t>.}..Syntax {tr
6180: 69 67 67 65 72 2d 61 63 74 69 6f 6e 7d 20 7b 0a  igger-action} {.
6190: 5b 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 5d  [ FOR EACH ROW ]
61a0: 20 5b 20 57 48 45 4e 20 3c 65 78 70 72 65 73 73   [ WHEN <express
61b0: 69 6f 6e 3e 20 5d 20 0a 42 45 47 49 4e 20 0a 20  ion> ] .BEGIN . 
61c0: 20 3c 74 72 69 67 67 65 72 2d 73 74 65 70 3e 20   <trigger-step> 
61d0: 3b 20 5b 20 3c 74 72 69 67 67 65 72 2d 73 74 65  ; [ <trigger-ste
61e0: 70 3e 20 3b 20 5d 2a 0a 45 4e 44 0a 7d 0a 0a 53  p> ; ]*.END.}..S
61f0: 79 6e 74 61 78 20 7b 74 72 69 67 67 65 72 2d 73  yntax {trigger-s
6200: 74 65 70 7d 20 7b 0a 3c 75 70 64 61 74 65 2d 73  tep} {.<update-s
6210: 74 61 74 65 6d 65 6e 74 3e 20 7c 20 3c 69 6e 73  tatement> | <ins
6220: 65 72 74 2d 73 74 61 74 65 6d 65 6e 74 3e 20 7c  ert-statement> |
6230: 20 0a 3c 64 65 6c 65 74 65 2d 73 74 61 74 65 6d   .<delete-statem
6240: 65 6e 74 3e 20 7c 20 3c 73 65 6c 65 63 74 2d 73  ent> | <select-s
6250: 74 61 74 65 6d 65 6e 74 3e 20 0a 7d 0a 3c 2f 74  tatement> .}.</t
6260: 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41  cl>..<p>The CREA
6270: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
6280: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
6290: 61 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20  add triggers to 
62a0: 74 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63  the .database sc
62b0: 68 65 6d 61 2e 20 54 72 69 67 67 65 72 73 20 61  hema. Triggers a
62c0: 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72  re database oper
62d0: 61 74 69 6f 6e 73 20 28 74 68 65 20 3c 69 3e 74  ations (the <i>t
62e0: 72 69 67 67 65 72 2d 61 63 74 69 6f 6e 3c 2f 69  rigger-action</i
62f0: 3e 29 20 0a 74 68 61 74 20 61 72 65 20 61 75 74  >) .that are aut
6300: 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66 6f  omatically perfo
6310: 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65 63  rmed when a spec
6320: 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20 65  ified database e
6330: 76 65 6e 74 20 28 74 68 65 0a 3c 69 3e 64 61 74  vent (the.<i>dat
6340: 61 62 61 73 65 2d 65 76 65 6e 74 3c 2f 69 3e 29  abase-event</i>)
6350: 20 6f 63 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a   occurs.  </p>..
6360: 3c 70 3e 41 20 74 72 69 67 67 65 72 20 6d 61 79  <p>A trigger may
6370: 20 62 65 20 73 70 65 63 69 66 69 65 64 20 74 6f   be specified to
6380: 20 66 69 72 65 20 77 68 65 6e 65 76 65 72 20 61   fire whenever a
6390: 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45   [DELETE], [INSE
63a0: 52 54 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d  RT],.or [UPDATE]
63b0: 20 6f 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72   of a.particular
63c0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
63d0: 6f 63 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65  occurs, or whene
63e0: 76 65 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20  ver an [UPDATE] 
63f0: 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 73  of one or more.s
6400: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
6410: 20 6f 66 20 61 20 74 61 62 6c 65 20 61 72 65 20   of a table are 
6420: 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  updated.</p>..<p
6430: 3e 41 74 20 74 68 69 73 20 74 69 6d 65 20 53 51  >At this time SQ
6440: 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6f 6e  Lite supports on
6450: 6c 79 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20  ly FOR EACH ROW 
6460: 74 72 69 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f  triggers, not FO
6470: 52 20 45 41 43 48 0a 53 54 41 54 45 4d 45 4e 54  R EACH.STATEMENT
6480: 20 74 72 69 67 67 65 72 73 2e 20 48 65 6e 63 65   triggers. Hence
6490: 20 65 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63   explicitly spec
64a0: 69 66 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20  ifying FOR EACH 
64b0: 52 4f 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e  ROW is optional.
64c0: 20 20 46 4f 52 0a 45 41 43 48 20 52 4f 57 20 69    FOR.EACH ROW i
64d0: 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20  mplies that the 
64e0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
64f0: 70 65 63 69 66 69 65 64 20 61 73 20 3c 69 3e 74  pecified as <i>t
6500: 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69 3e  rigger-steps</i>
6510: 20 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65   .may be execute
6520: 64 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  d (depending on 
6530: 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29  the WHEN clause)
6540: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
6550: 73 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73  se row being.ins
6560: 65 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f  erted, updated o
6570: 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  r deleted by the
6580: 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69   statement causi
6590: 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74  ng the trigger t
65a0: 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  o fire.</p>..<p>
65b0: 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c  Both the WHEN cl
65c0: 61 75 73 65 20 61 6e 64 20 74 68 65 20 3c 69 3e  ause and the <i>
65d0: 74 72 69 67 67 65 72 2d 73 74 65 70 73 3c 2f 69  trigger-steps</i
65e0: 3e 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c 65  > may access ele
65f0: 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72 6f  ments of .the ro
6600: 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64  w being inserted
6610: 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70 64  , deleted or upd
6620: 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65 72  ated using refer
6630: 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f 72  ences of the for
6640: 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d  m ."NEW.<i>colum
6650: 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64 20  n-name</i>" and 
6660: 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e  "OLD.<i>column-n
6670: 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65 0a  ame</i>", where.
6680: 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  <i>column-name</
6690: 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  i> is the name o
66a0: 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20  f a column from 
66b0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
66c0: 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61 73  he trigger.is as
66d0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 4f  sociated with. O
66e0: 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72  LD and NEW refer
66f0: 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62  ences may only b
6700: 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65  e used in trigge
6710: 72 73 20 6f 6e 0a 3c 69 3e 74 72 69 67 67 65 72  rs on.<i>trigger
6720: 2d 65 76 65 6e 74 3c 2f 69 3e 73 20 66 6f 72 20  -event</i>s for 
6730: 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72  which they are r
6740: 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c  elevant, as foll
6750: 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65  ows:</p>..<table
6760: 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
6770: 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c  dding=10>.<tr>.<
6780: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
6790: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
67a0: 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52  dth=120><i>INSER
67b0: 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  T</i></td>.<td v
67c0: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
67d0: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
67e0: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
67f0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
6800: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
6810: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
6820: 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >UPDATE</i></td>
6830: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
6840: 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65  ">NEW and OLD re
6850: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
6860: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
6870: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
6880: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
6890: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44  " width=120><i>D
68a0: 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  ELETE</i></td>.<
68b0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
68c0: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
68d0: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
68e0: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70  tr>.</table>.</p
68f0: 3e 0a 0a 3c 70 3e 49 66 20 61 20 57 48 45 4e 20  >..<p>If a WHEN 
6900: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
6910: 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74  ed, the SQL stat
6920: 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
6930: 20 61 73 20 0a 3c 69 3e 74 72 69 67 67 65 72 2d   as .<i>trigger-
6940: 73 74 65 70 73 3c 2f 69 3e 20 61 72 65 20 6f 6e  steps</i> are on
6950: 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  ly executed for 
6960: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
6970: 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69  he WHEN.clause i
6980: 73 20 74 72 75 65 2e 20 49 66 20 6e 6f 20 57 48  s true. If no WH
6990: 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70  EN clause is sup
69a0: 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73  plied, the SQL s
69b0: 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65 78  tatements.are ex
69c0: 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 72  ecuted for all r
69d0: 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ows.</p>..<p>The
69e0: 20 73 70 65 63 69 66 69 65 64 20 3c 69 3e 74 72   specified <i>tr
69f0: 69 67 67 65 72 2d 74 69 6d 65 3c 2f 69 3e 20 64  igger-time</i> d
6a00: 65 74 65 72 6d 69 6e 65 73 20 77 68 65 6e 20 74  etermines when t
6a10: 68 65 20 3c 69 3e 74 72 69 67 67 65 72 2d 73 74  he <i>trigger-st
6a20: 65 70 73 3c 2f 69 3e 0a 77 69 6c 6c 20 62 65 20  eps</i>.will be 
6a30: 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76  executed relativ
6a40: 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69  e to the inserti
6a50: 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  on, modification
6a60: 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74   or removal of t
6a70: 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f  he.associated ro
6a80: 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6e 20 5b 4f  w.</p>..<p>An [O
6a90: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
6aa0: 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  se may be specif
6ab0: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
6ac0: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49  n [UPDATE] or [I
6ad0: 4e 53 45 52 54 5d 0a 3c 69 3e 74 72 69 67 67 65  NSERT].<i>trigge
6ae0: 72 2d 73 74 65 70 3c 2f 69 3e 2e 20 48 6f 77 65  r-step</i>. Howe
6af0: 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e 20 43 4f  ver if an [ON CO
6b00: 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73 65 20 69  NFLICT] clause i
6b10: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
6b20: 61 72 74 20 6f 66 20 0a 74 68 65 20 73 74 61 74  art of .the stat
6b30: 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74 68  ement causing th
6b40: 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72  e trigger to fir
6b50: 65 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f 6e  e, then this con
6b60: 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70  flict handling.p
6b70: 6f 6c 69 63 79 20 69 73 20 75 73 65 64 20 69 6e  olicy is used in
6b80: 73 74 65 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  stead.</p>..<p>T
6b90: 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
6ba0: 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65  matically droppe
6bb0: 64 20 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65  d when the table
6bc0: 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a   that they are .
6bd0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
6be0: 69 73 20 64 72 6f 70 70 65 64 2e 3c 2f 70 3e 0a  is dropped.</p>.
6bf0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
6c00: 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69  t instead_of_tri
6c10: 67 67 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46  gger {INSTEAD OF
6c20: 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72  } {INSTEAD OF tr
6c30: 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  igger}</tcl>.<p>
6c40: 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65 20  Triggers may be 
6c50: 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65 77  created on [view
6c60: 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 6f  s], as well as o
6c70: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c 20  rdinary tables, 
6c80: 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49 4e  by.specifying IN
6c90: 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65 20  STEAD OF in the 
6ca0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
6cb0: 74 61 74 65 6d 65 6e 74 2e 20 0a 49 66 20 6f 6e  tatement. .If on
6cc0: 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53  e or more ON INS
6cd0: 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f  ERT, ON DELETE.o
6ce0: 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72 69 67  r ON UPDATE trig
6cf0: 67 65 72 73 20 61 72 65 20 64 65 66 69 6e 65 64  gers are defined
6d00: 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68 65 6e   on a view, then
6d10: 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72   it is not an.er
6d20: 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65 20 61  ror to execute a
6d30: 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
6d40: 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
6d50: 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69 65 77  ment on the view
6d60: 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e  , .respectively.
6d70: 20 54 68 65 72 65 61 66 74 65 72 2c 0a 65 78 65   Thereafter,.exe
6d80: 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  cuting an INSERT
6d90: 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  , DELETE or UPDA
6da0: 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20 63  TE on the view c
6db0: 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63 69  auses the associ
6dc0: 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74 6f  ated.triggers to
6dd0: 20 66 69 72 65 2e 20 54 68 65 20 72 65 61 6c 20   fire. The real 
6de0: 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e  tables underlyin
6df0: 67 20 74 68 65 20 76 69 65 77 20 61 72 65 20 6e  g the view are n
6e00: 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65 78 63  ot modified.(exc
6e10: 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65 78 70  ept possibly exp
6e20: 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20 74 72  licitly, by a tr
6e30: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c  igger program).<
6e40: 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 45 78 61 6d 70  /p>..<p><b>Examp
6e50: 6c 65 3a 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  le:</b></p>..<p>
6e60: 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63 75  Assuming that cu
6e70: 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20 61  stomer records a
6e80: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
6e90: 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61 62   "customers" tab
6ea0: 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72 64  le, and.that ord
6eb0: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
6ec0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f 72  tored in the "or
6ed0: 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68 65  ders" table, the
6ee0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67 67   following trigg
6ef0: 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20  er.ensures that 
6f00: 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f  all associated o
6f10: 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72 65  rders are redire
6f20: 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73 74  cted when a cust
6f30: 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73  omer changes.his
6f40: 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73 3a   or her address:
6f50: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
6f60: 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47  le {.CREATE TRIG
6f70: 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f  GER update_custo
6f80: 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44 41  mer_address UPDA
6f90: 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e  TE OF address ON
6fa0: 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45   customers .  BE
6fb0: 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f  GIN.    UPDATE o
6fc0: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
6fd0: 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20  s = new.address 
6fe0: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
6ff0: 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a  ame = old.name;.
7000: 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a    END;.}</tcl>..
7010: 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72 69  <p>With this tri
7020: 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20  gger installed, 
7030: 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73 74  executing the st
7040: 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74  atement:</p>..<t
7050: 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44  cl>Example {.UPD
7060: 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45  ATE customers SE
7070: 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d  T address = '1 M
7080: 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e  ain St.' WHERE n
7090: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
70a0: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  s';.}</tcl>..<p>
70b0: 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f  causes the follo
70c0: 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d  wing to be autom
70d0: 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65  atically execute
70e0: 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61  d:</p>..<tcl>Exa
70f0: 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72  mple {.UPDATE or
7100: 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73  ders SET address
7110: 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20   = '1 Main St.' 
7120: 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e  WHERE customer_n
7130: 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65  ame = 'Jack Jone
7140: 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  s';.}</tcl>..<p>
7150: 4e 6f 74 65 20 74 68 61 74 20 63 75 72 72 65 6e  Note that curren
7160: 74 6c 79 2c 20 74 72 69 67 67 65 72 73 20 6d 61  tly, triggers ma
7170: 79 20 62 65 68 61 76 65 20 6f 64 64 6c 79 20 77  y behave oddly w
7180: 68 65 6e 20 63 72 65 61 74 65 64 20 6f 6e 20 74  hen created on t
7190: 61 62 6c 65 73 0a 20 20 77 69 74 68 20 5b 49 4e  ables.  with [IN
71a0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
71b0: 59 5d 20 66 69 65 6c 64 73 2e 20 49 66 20 61 20  Y] fields. If a 
71c0: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20 70  BEFORE trigger p
71d0: 72 6f 67 72 61 6d 20 6d 6f 64 69 66 69 65 73 20  rogram modifies 
71e0: 74 68 65 20 0a 20 20 5b 49 4e 54 45 47 45 52 20  the .  [INTEGER 
71f0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 69 65  PRIMARY KEY] fie
7200: 6c 64 20 6f 66 20 61 20 72 6f 77 20 74 68 61 74  ld of a row that
7210: 20 77 69 6c 6c 20 62 65 20 73 75 62 73 65 71 75   will be subsequ
7220: 65 6e 74 6c 79 20 75 70 64 61 74 65 64 20 62 79  ently updated by
7230: 20 74 68 65 0a 20 20 73 74 61 74 65 6d 65 6e 74   the.  statement
7240: 20 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65   that causes the
7250: 20 74 72 69 67 67 65 72 20 74 6f 20 66 69 72 65   trigger to fire
7260: 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
7270: 65 20 6d 61 79 20 6e 6f 74 20 6f 63 63 75 72 2e  e may not occur.
7280: 20 0a 20 20 54 68 65 20 77 6f 72 6b 61 72 6f 75   .  The workarou
7290: 6e 64 20 69 73 20 74 6f 20 64 65 63 6c 61 72 65  nd is to declare
72a0: 20 74 68 65 20 74 61 62 6c 65 20 77 69 74 68 20   the table with 
72b0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  a PRIMARY KEY co
72c0: 6c 75 6d 6e 20 69 6e 73 74 65 61 64 0a 20 20 6f  lumn instead.  o
72d0: 66 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  f an [INTEGER PR
72e0: 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d  IMARY KEY] colum
72f0: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 73 70 65  n.</p>..<p>A spe
7300: 63 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f  cial SQL functio
7310: 6e 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65  n RAISE() may be
7320: 20 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74   used within a t
7330: 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 0a  rigger-program,.
7340: 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69  with the followi
7350: 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a  ng syntax</p> ..
7360: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
7370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73b0: 23 23 23 23 23 0a 53 79 6e 74 61 78 20 7b 72 61  #####.Syntax {ra
73c0: 69 73 65 2d 66 75 6e 63 74 69 6f 6e 7d 20 7b 0a  ise-function} {.
73d0: 52 41 49 53 45 20 28 20 41 42 4f 52 54 2c 20 3c  RAISE ( ABORT, <
73e0: 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 3e 20 29  error-message> )
73f0: 20 7c 20 0a 52 41 49 53 45 20 28 20 46 41 49 4c   | .RAISE ( FAIL
7400: 2c 20 3c 65 72 72 6f 72 2d 6d 65 73 73 61 67 65  , <error-message
7410: 3e 20 29 20 7c 20 0a 52 41 49 53 45 20 28 20 52  > ) | .RAISE ( R
7420: 4f 4c 4c 42 41 43 4b 2c 20 3c 65 72 72 6f 72 2d  OLLBACK, <error-
7430: 6d 65 73 73 61 67 65 3e 20 29 20 7c 20 0a 52 41  message> ) | .RA
7440: 49 53 45 20 28 20 49 47 4e 4f 52 45 20 29 0a 7d  ISE ( IGNORE ).}
7450: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 68 65 6e  .</tcl>..<p>When
7460: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73   one of the firs
7470: 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20 69 73  t three forms is
7480: 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74   called during t
7490: 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65  rigger-program.e
74a0: 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20 73 70  xecution, the sp
74b0: 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46  ecified [ON CONF
74c0: 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69 6e 67  LICT] processing
74d0: 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a 28 65   is performed.(e
74e0: 69 74 68 65 72 20 41 42 4f 52 54 2c 20 46 41 49  ither ABORT, FAI
74f0: 4c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61  L or ROLLBACK) a
7500: 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 71  nd the current q
7510: 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65 73 2e  uery terminates.
7520: 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f  .An error code o
7530: 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  f [SQLITE_CONSTR
7540: 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72 6e 65  AINT] is returne
7550: 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61  d to the applica
7560: 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68  tion,.along with
7570: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
7580: 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70  rror message.</p
7590: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 52 41 49 53 45  >..<p>When RAISE
75a0: 28 49 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c  (IGNORE) is call
75b0: 65 64 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ed, the remainde
75c0: 72 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  r of the current
75d0: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
75e0: 2c 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  ,.the statement 
75f0: 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
7600: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
7610: 74 6f 20 65 78 65 63 75 74 65 20 61 6e 64 20 61  to execute and a
7620: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72  ny subsequent.tr
7630: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
7640: 68 61 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65  hat would of bee
7650: 6e 20 65 78 65 63 75 74 65 64 20 61 72 65 20 61  n executed are a
7660: 62 61 6e 64 6f 6e 65 64 2e 20 4e 6f 20 64 61 74  bandoned. No dat
7670: 61 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72  abase.changes ar
7680: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
7690: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
76a0: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
76b0: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
76c0: 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69  .to execute is i
76d0: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
76e0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
76f0: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
7700: 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d  er program.resum
7710: 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20  es execution at 
7720: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
7730: 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a   the next step..
7740: 3c 2f 70 3e 0a 0a 3c 70 3e 54 72 69 67 67 65 72  </p>..<p>Trigger
7750: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73  s are removed us
7760: 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52  ing the [DROP TR
7770: 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
7780: 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23  .</p>...<tcl>.##
7790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
77e0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49  ction {CREATE VI
77f0: 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d  EW} {createview}
7800: 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20   {{CREATE VIEW} 
7810: 76 69 65 77 20 76 69 65 77 73 7d 0a 0a 53 79 6e  view views}..Syn
7820: 74 61 78 20 7b 73 71 6c 2d 63 6f 6d 6d 61 6e 64  tax {sql-command
7830: 7d 20 7b 0a 43 52 45 41 54 45 20 5b 54 45 4d 50  } {.CREATE [TEMP
7840: 20 7c 20 54 45 4d 50 4f 52 41 52 59 5d 20 56 49   | TEMPORARY] VI
7850: 45 57 20 5b 49 46 20 4e 4f 54 20 45 58 49 53 54  EW [IF NOT EXIST
7860: 53 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  S] [<database-na
7870: 6d 65 3e 2e 5d 20 3c 76 69 65 77 2d 6e 61 6d 65  me>.] <view-name
7880: 3e 20 41 53 20 3c 73 65 6c 65 63 74 2d 73 74 61  > AS <select-sta
7890: 74 65 6d 65 6e 74 3e 0a 7d 0a 3c 2f 74 63 6c 3e  tement>.}.</tcl>
78a0: 0a 0a 3c 70 3e 54 68 65 20 43 52 45 41 54 45 20  ..<p>The CREATE 
78b0: 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61 73 73  VIEW command ass
78c0: 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f 20 61  igns a name to a
78d0: 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20 0a 3c   pre-packaged .<
78e0: 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 73 65 6c  a href="lang_sel
78f0: 65 63 74 2e 68 74 6d 6c 22 3e 53 45 4c 45 43 54  ect.html">SELECT
7900: 3c 2f 61 3e 0a 73 74 61 74 65 6d 65 6e 74 2e 20  </a>.statement. 
7910: 20 4f 6e 63 65 20 74 68 65 20 76 69 65 77 20 69   Once the view i
7920: 73 20 63 72 65 61 74 65 64 2c 20 69 74 20 63 61  s created, it ca
7930: 6e 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  n be used in the
7940: 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20   FROM clause.of 
7950: 61 6e 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d  another [SELECT]
7960: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
7970: 61 62 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a  able name..</p>.
7980: 0a 3c 70 3e 49 66 20 74 68 65 20 22 54 45 4d 50  .<p>If the "TEMP
7990: 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22  " or "TEMPORARY"
79a0: 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20   keyword occurs 
79b0: 69 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41  in between "CREA
79c0: 54 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74  TE".and "VIEW" t
79d0: 68 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61  hen the view tha
79e0: 74 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20  t is created is 
79f0: 6f 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20  only visible to 
7a00: 74 68 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74  the.process that
7a10: 20 6f 70 65 6e 65 64 20 74 68 65 20 64 61 74 61   opened the data
7a20: 62 61 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f  base and is auto
7a30: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
7a40: 64 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62  d when.the datab
7a50: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f  ase is closed.</
7a60: 70 3e 0a 0a 3c 70 3e 20 49 66 20 61 20 26 6c 74  p>..<p> If a &lt
7a70: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
7a80: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
7a90: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69   then the view i
7aa0: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
7ab0: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
7ac0: 2e 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  . It is an error
7ad0: 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68   to specify both
7ae0: 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d   a &lt;database-
7af0: 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68 65  name&gt;.and the
7b00: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 2c 20 75   TEMP keyword, u
7b10: 6e 6c 65 73 73 20 74 68 65 20 26 6c 74 3b 64 61  nless the &lt;da
7b20: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
7b30: 69 73 20 22 74 65 6d 70 22 2e 20 49 66 20 6e 6f  is "temp". If no
7b40: 0a 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69  .database name i
7b50: 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64  s specified, and
7b60: 20 74 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72   the TEMP keywor
7b70: 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  d is not present
7b80: 2c 0a 74 68 65 20 74 61 62 6c 65 20 69 73 20 63  ,.the table is c
7b90: 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61  reated in the ma
7ba0: 69 6e 20 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e  in database.</p>
7bb0: 0a 0a 3c 70 3e 59 6f 75 20 63 61 6e 6e 6f 74 20  ..<p>You cannot 
7bc0: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
7bd0: 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
7be0: 61 20 76 69 65 77 2e 20 20 56 69 65 77 73 20 61  a view.  Views a
7bf0: 72 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e  re read-only .in
7c00: 20 53 51 4c 69 74 65 2e 20 20 48 6f 77 65 76 65   SQLite.  Howeve
7c10: 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73  r, in many cases
7c20: 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a   you can use an.
7c30: 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  [INSTEAD OF trig
7c40: 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77  ger] on the view
7c50: 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a   to accomplish .
7c60: 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20  the same thing. 
7c70: 20 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76   Views are remov
7c80: 65 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52  ed .with the [DR
7c90: 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64  OP VIEW] command
7ca0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
7cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7cf0: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
7d00: 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54  ion {CREATE VIRT
7d10: 55 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61  UAL TABLE} {crea
7d20: 74 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45  tevtab} {{CREATE
7d30: 20 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 7d 7d   VIRTUAL_TABLE}}
7d40: 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f  ..Syntax {sql-co
7d50: 6d 6d 61 6e 64 7d 20 7b 0a 43 52 45 41 54 45 20  mmand} {.CREATE 
7d60: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 5b 3c  VIRTUAL TABLE [<
7d70: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
7d80: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 55  ] <table-name> U
7d90: 53 49 4e 47 20 3c 6d 6f 64 75 6c 65 2d 6e 61 6d  SING <module-nam
7da0: 65 3e 20 5b 28 20 3c 61 72 67 75 6d 65 6e 74 73  e> [( <arguments
7db0: 3e 20 29 5d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  > )].}.</tcl>..<
7dc0: 70 3e 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c  p>A virtual tabl
7dd0: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61 63  e is an interfac
7de0: 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c  e to an external
7df0: 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70   storage or comp
7e00: 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74  utation.engine t
7e10: 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20 62  hat appears to b
7e20: 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64 6f  e a table but do
7e30: 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  es not actually 
7e40: 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f  store informatio
7e50: 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  n.in the databas
7e60: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
7e70: 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20  In general, you 
7e80: 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67 20  can do anything 
7e90: 77 69 74 68 20 61 20 76 69 72 74 75 61 6c 20 74  with a virtual t
7ea0: 61 62 6c 65 20 74 68 61 74 20 63 61 6e 20 62 65  able that can be
7eb0: 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72   done.with an or
7ec0: 64 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78  dinary table, ex
7ed0: 63 65 70 74 20 74 68 61 74 20 79 6f 75 20 63 61  cept that you ca
7ee0: 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64 69  nnot create indi
7ef0: 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73 20  ces or triggers 
7f00: 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61 62  on a.virtual tab
7f10: 6c 65 2e 20 20 53 6f 6d 65 20 76 69 72 74 75 61  le.  Some virtua
7f20: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
7f30: 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 69 6d  tations might im
7f40: 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a  pose additional.
7f50: 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20 20 46  restrictions.  F
7f60: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e 79  or example, many
7f70: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
7f80: 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 0a 56  are read-only..V
7f90: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 63 61  irtual tables ca
7fa0: 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 0a  nnot be used in.
7fb0: 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  [sqlite3_enable_
7fc0: 73 68 61 72 65 64 5f 63 61 63 68 65 20 7c 20 73  shared_cache | s
7fd0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
7fe0: 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 26  ].</p>..<p>The &
7ff0: 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26 67  lt;module-name&g
8000: 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  t; is the name o
8010: 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  f an object that
8020: 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20   implements.the 
8030: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
8040: 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e  The &lt;module-n
8050: 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62 65 20  ame&gt; must be 
8060: 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68 0a  registered with.
8070: 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62  the SQLite datab
8080: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75  ase connection u
8090: 73 69 6e 67 0a 73 71 6c 69 74 65 33 5f 63 72 65  sing.sqlite3_cre
80a0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 0a 70 72 69  ate_module().pri
80b0: 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20 74 68  or to issuing th
80c0: 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
80d0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
80e0: 2e 0a 54 68 65 20 6d 6f 64 75 6c 65 20 74 61 6b  ..The module tak
80f0: 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  es zero or more 
8100: 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65 64 20  comma-separated 
8110: 61 72 67 75 6d 65 6e 74 73 2e 0a 54 68 65 20 61  arguments..The a
8120: 72 67 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20  rguments can be 
8130: 6a 75 73 74 20 61 62 6f 75 74 20 61 6e 79 20 74  just about any t
8140: 65 78 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ext as long as i
8150: 74 20 68 61 73 20 62 61 6c 61 6e 63 65 64 0a 70  t has balanced.p
8160: 61 72 65 6e 74 68 65 73 65 73 2e 20 20 54 68 65  arentheses.  The
8170: 20 61 72 67 75 6d 65 6e 74 20 73 79 6e 74 61 78   argument syntax
8180: 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 6c 79   is sufficiently
8190: 20 67 65 6e 65 72 61 6c 20 74 68 61 74 20 74 68   general that th
81a0: 65 0a 61 72 67 75 6d 65 6e 74 73 20 63 61 6e 20  e.arguments can 
81b0: 62 65 20 6d 61 64 65 20 74 6f 20 61 70 70 65 61  be made to appea
81c0: 72 20 61 73 20 63 6f 6c 75 6d 6e 20 64 65 66 69  r as column defi
81d0: 6e 69 74 69 6f 6e 73 20 69 6e 20 61 20 74 72 61  nitions in a tra
81e0: 64 69 74 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45  ditional.[CREATE
81f0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
8200: 74 2e 20 20 0a 53 51 4c 69 74 65 20 70 61 73 73  t.  .SQLite pass
8210: 65 73 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72  es the module ar
8220: 67 75 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79  guments directly
8230: 0a 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 77  .to the module w
8240: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
8250: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
8260: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
8270: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
8280: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
8290: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
82a0: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
82b0: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
82c0: 0a 3c 70 3e 41 20 76 69 72 74 75 61 6c 20 74 61  .<p>A virtual ta
82d0: 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65 64  ble is destroyed
82e0: 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e   using the ordin
82f0: 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d  ary.[DROP TABLE]
8300: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
8310: 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49  re is no.DROP VI
8320: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74  RTUAL TABLE stat
8330: 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement.</p>..<tcl
8340: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
8350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8390: 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20  .Section DELETE 
83a0: 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 44  delete {DELETE D
83b0: 45 4c 45 54 45 73 7d 0a 0a 53 79 6e 74 61 78 20  ELETEs}..Syntax 
83c0: 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20  {sql-statement} 
83d0: 7b 0a 44 45 4c 45 54 45 20 46 52 4f 4d 20 5b 3c  {.DELETE FROM [<
83e0: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20 2e  database-name> .
83f0: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 5b  ] <table-name> [
8400: 57 48 45 52 45 20 3c 65 78 70 72 3e 5d 0a 7d 0a  WHERE <expr>].}.
8410: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44  </tcl>..<p>The D
8420: 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 69 73  ELETE command is
8430: 20 75 73 65 64 20 74 6f 20 72 65 6d 6f 76 65 20   used to remove 
8440: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 61 20 74  records from a t
8450: 61 62 6c 65 2e 0a 54 68 65 20 63 6f 6d 6d 61 6e  able..The comman
8460: 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  d consists of th
8470: 65 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 22 20  e "DELETE FROM" 
8480: 6b 65 79 77 6f 72 64 73 20 66 6f 6c 6c 6f 77 65  keywords followe
8490: 64 20 62 79 0a 74 68 65 20 6e 61 6d 65 20 6f 66  d by.the name of
84a0: 20 74 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20   the table from 
84b0: 77 68 69 63 68 20 72 65 63 6f 72 64 73 20 61 72  which records ar
84c0: 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 2e  e to be removed.
84d0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68 6f 75  .</p>..<p>Withou
84e0: 74 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  t a WHERE clause
84f0: 2c 20 61 6c 6c 20 72 6f 77 73 20 6f 66 20 74 68  , all rows of th
8500: 65 20 74 61 62 6c 65 20 61 72 65 20 72 65 6d 6f  e table are remo
8510: 76 65 64 2e 0a 49 66 20 61 20 57 48 45 52 45 20  ved..If a WHERE 
8520: 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69  clause is suppli
8530: 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  ed, then only th
8540: 6f 73 65 20 72 6f 77 73 20 74 68 61 74 20 6d 61  ose rows that ma
8550: 74 63 68 0a 74 68 65 20 65 78 70 72 65 73 73 69  tch.the expressi
8560: 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 3c  on are removed.<
8570: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68 65  /p>..<p>When the
8580: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
8590: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
85a0: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
85b0: 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20 61 6e  ,.SQLite uses an
85c0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f   optimization to
85d0: 20 65 72 61 73 65 20 74 68 65 20 65 6e 74 69 72   erase the entir
85e0: 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a  e table content.
85f0: 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
8600: 6f 20 76 69 73 69 74 20 65 61 63 68 20 72 6f 77  o visit each row
8610: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
8620: 64 69 76 69 64 75 61 6c 2e 0a 54 68 69 73 20 22  dividual..This "
8630: 74 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69  truncate" optimi
8640: 7a 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65  zation makes the
8650: 20 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68   delete run much
8660: 20 66 61 73 74 65 72 2e 0a 48 6f 77 65 76 65 72   faster..However
8670: 2c 20 69 74 20 61 6c 73 6f 20 6d 65 61 6e 73 20  , it also means 
8680: 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65  that the [sqlite
8690: 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74  3_changes()] int
86a0: 65 72 66 61 63 65 0a 61 6e 64 20 74 68 65 20 5b  erface.and the [
86b0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 5d 20 50  count_changes] P
86c0: 52 41 47 4d 41 0a 77 69 6c 6c 20 6e 6f 74 20 61  RAGMA.will not a
86d0: 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 74  ctually return t
86e0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c  he number of del
86f0: 65 74 65 64 20 72 6f 77 73 2e 20 20 49 66 20 79  eted rows.  If y
8700: 6f 75 0a 6e 65 65 64 20 74 6f 20 64 65 6c 65 74  ou.need to delet
8710: 65 20 65 76 65 72 79 20 72 6f 77 20 6f 66 20 61  e every row of a
8720: 20 74 61 62 6c 65 20 61 6e 64 20 73 74 69 6c 6c   table and still
8730: 20 68 61 76 65 0a 5b 73 71 6c 69 74 65 33 5f 63   have.[sqlite3_c
8740: 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 63  hanges()] and [c
8750: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 5d 20 77 6f  ount_changes] wo
8760: 72 6b 20 63 6f 72 72 65 63 74 6c 79 2c 20 74 68  rk correctly, th
8770: 65 6e 0a 75 73 65 20 57 48 45 52 45 20 63 6c 61  en.use WHERE cla
8780: 75 73 65 20 74 68 61 74 20 69 73 20 61 6c 77 61  use that is alwa
8790: 79 73 20 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 62  ys true:</p>..<b
87a0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
87b0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 73 6f 6d 65  DELETE FROM some
87c0: 74 61 62 6c 65 20 57 48 45 52 45 20 31 3b 0a 3c  table WHERE 1;.<
87d0: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
87e0: 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
87f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8830: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
8840: 6e 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41  n {DETACH DATABA
8850: 53 45 7d 20 64 65 74 61 63 68 20 44 45 54 41 43  SE} detach DETAC
8860: 48 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63  H..Syntax {sql-c
8870: 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 45 54 41 43 48  ommand} {.DETACH
8880: 20 5b 44 41 54 41 42 41 53 45 5d 20 3c 64 61 74   [DATABASE] <dat
8890: 61 62 61 73 65 2d 6e 61 6d 65 3e 0a 7d 0a 3c 2f  abase-name>.}.</
88a0: 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 74  tcl>..<p>This st
88b0: 61 74 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73  atement detaches
88c0: 20 61 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64   an additional d
88d0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
88e0: 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61  on previously .a
88f0: 74 74 61 63 68 65 64 20 75 73 69 6e 67 20 74 68  ttached using th
8900: 65 20 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65  e [ATTACH] state
8910: 6d 65 6e 74 2e 20 20 0a 49 74 20 69 73 20 70 6f  ment.  .It is po
8920: 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74  ssible to have t
8930: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
8940: 20 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d   file attached m
8950: 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73  ultiple times us
8960: 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e  ing .different n
8970: 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68  ames, and detach
8980: 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69  ing one connecti
8990: 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c  on to a file wil
89a0: 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68  l leave the .oth
89b0: 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a  ers intact.</p>.
89c0: 0a 3c 70 3e 54 68 69 73 20 73 74 61 74 65 6d 65  .<p>This stateme
89d0: 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  nt will fail if 
89e0: 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68 65  SQLite is in the
89f0: 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61   middle of a tra
8a00: 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a  nsaction.</p>...
8a10: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
8a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8a30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8a40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8a50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8a60: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
8a70: 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e  OP INDEX} dropin
8a80: 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58  dex {{DROP INDEX
8a90: 7d 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  }}..Syntax {sql-
8aa0: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20  command} {.DROP 
8ab0: 49 4e 44 45 58 20 5b 49 46 20 45 58 49 53 54 53  INDEX [IF EXISTS
8ac0: 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  ] [<database-nam
8ad0: 65 3e 20 2e 5d 20 3c 69 6e 64 65 78 2d 6e 61 6d  e> .] <index-nam
8ae0: 65 3e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  e>.}.</tcl>..<p>
8af0: 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73  The DROP INDEX s
8b00: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
8b10: 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a   an index added.
8b20: 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54 45  with the [CREATE
8b30: 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
8b40: 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 6e 61  t.  The index na
8b50: 6d 65 64 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c  med is completel
8b60: 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74  y removed from.t
8b70: 68 65 20 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e  he disk.  The on
8b80: 6c 79 20 77 61 79 20 74 6f 20 72 65 63 6f 76 65  ly way to recove
8b90: 72 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 74  r the index is t
8ba0: 6f 20 72 65 65 6e 74 65 72 20 74 68 65 0a 61 70  o reenter the.ap
8bb0: 70 72 6f 70 72 69 61 74 65 20 5b 43 52 45 41 54  propriate [CREAT
8bc0: 45 20 49 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64  E INDEX] command
8bd0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44 52  .</p>..<p>The DR
8be0: 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  OP INDEX stateme
8bf0: 6e 74 20 64 6f 65 73 20 6e 6f 74 20 72 65 64 75  nt does not redu
8c00: 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ce the size of t
8c10: 68 65 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  he database .fil
8c20: 65 20 69 6e 20 74 68 65 20 64 65 66 61 75 6c 74  e in the default
8c30: 20 6d 6f 64 65 2e 0a 45 6d 70 74 79 20 73 70 61   mode..Empty spa
8c40: 63 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ce in the databa
8c50: 73 65 20 69 73 20 72 65 74 61 69 6e 65 64 20 66  se is retained f
8c60: 6f 72 20 6c 61 74 65 72 20 5b 49 4e 53 45 52 54  or later [INSERT
8c70: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54  ] statements.  T
8c80: 6f 20 0a 72 65 6d 6f 76 65 20 66 72 65 65 20 73  o .remove free s
8c90: 70 61 63 65 20 69 6e 20 74 68 65 20 64 61 74 61  pace in the data
8ca0: 62 61 73 65 2c 20 75 73 65 20 74 68 65 20 5b 56  base, use the [V
8cb0: 41 43 55 55 4d 5d 0a 63 6f 6d 6d 61 6e 64 2e 20  ACUUM].command. 
8cc0: 20 49 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d   If [auto_vacuum
8cd0: 5d 20 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65  ] mode is enable
8ce0: 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
8cf0: 20 74 68 65 6e 20 73 70 61 63 65 0a 77 69 6c 6c   then space.will
8d00: 20 62 65 20 66 72 65 65 64 20 61 75 74 6f 6d 61   be freed automa
8d10: 74 69 63 61 6c 6c 79 20 62 79 20 44 52 4f 50 20  tically by DROP 
8d20: 49 4e 44 45 58 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  INDEX.</p>...<tc
8d30: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
8d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d80: 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  #.Section {DROP 
8d90: 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65  TABLE} droptable
8da0: 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a   {{DROP TABLE}}.
8db0: 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d 63 6f 6d  .Syntax {sql-com
8dc0: 6d 61 6e 64 7d 20 7b 0a 44 52 4f 50 20 54 41 42  mand} {.DROP TAB
8dd0: 4c 45 20 5b 49 46 20 45 58 49 53 54 53 5d 20 5b  LE [IF EXISTS] [
8de0: 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 2e  <database-name>.
8df0: 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 0a 7d  ] <table-name>.}
8e00: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
8e10: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
8e20: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
8e30: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
8e40: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
8e50: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
8e60: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
8e70: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
8e80: 61 6d 65 2e 20 20 49 74 20 69 73 20 63 6f 6d 70  ame.  It is comp
8e90: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
8ea0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
8eb0: 20 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20   schema and the 
8ec0: 0a 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65  .disk file.  The
8ed0: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
8ee0: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 41 6c  e recovered.  Al
8ef0: 6c 20 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69  l indices associ
8f00: 61 74 65 64 20 0a 77 69 74 68 20 74 68 65 20 74  ated .with the t
8f10: 61 62 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65  able are also de
8f20: 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  leted.</p>..<p>T
8f30: 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74  he DROP TABLE st
8f40: 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74  atement does not
8f50: 20 72 65 64 75 63 65 20 74 68 65 20 73 69 7a 65   reduce the size
8f60: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
8f70: 20 0a 66 69 6c 65 20 69 6e 20 74 68 65 20 64 65   .file in the de
8f80: 66 61 75 6c 74 20 6d 6f 64 65 2e 20 20 45 6d 70  fault mode.  Emp
8f90: 74 79 20 73 70 61 63 65 20 69 6e 20 74 68 65 20  ty space in the 
8fa0: 64 61 74 61 62 61 73 65 20 69 73 20 72 65 74 61  database is reta
8fb0: 69 6e 65 64 20 66 6f 72 0a 6c 61 74 65 72 20 5b  ined for.later [
8fc0: 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
8fd0: 74 73 2e 20 20 54 6f 20 0a 72 65 6d 6f 76 65 20  ts.  To .remove 
8fe0: 66 72 65 65 20 73 70 61 63 65 20 69 6e 20 74 68  free space in th
8ff0: 65 20 64 61 74 61 62 61 73 65 2c 20 0a 75 73 65  e database, .use
9000: 20 74 68 65 20 5b 56 41 43 55 55 4d 5d 20 73 74   the [VACUUM] st
9010: 61 74 65 6d 65 6e 74 2e 0a 49 66 20 5b 61 75 74  atement..If [aut
9020: 6f 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 20 69  o_vacuum] mode i
9030: 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
9040: 64 61 74 61 62 61 73 65 20 74 68 65 6e 20 73 70  database then sp
9050: 61 63 65 0a 77 69 6c 6c 20 62 65 20 66 72 65 65  ace.will be free
9060: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
9070: 62 79 20 44 52 4f 50 20 54 41 42 4c 45 2e 3c 2f  by DROP TABLE.</
9080: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f  p>..<p>The optio
9090: 6e 61 6c 20 49 46 20 45 58 49 53 54 53 20 63 6c  nal IF EXISTS cl
90a0: 61 75 73 65 20 73 75 70 70 72 65 73 73 65 73 20  ause suppresses 
90b0: 74 68 65 20 65 72 72 6f 72 20 74 68 61 74 20 77  the error that w
90c0: 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65  ould normally.re
90d0: 73 75 6c 74 20 69 66 20 74 68 65 20 74 61 62 6c  sult if the tabl
90e0: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
90f0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
9100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9140: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
9150: 69 6f 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45  ion {DROP TRIGGE
9160: 52 7d 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b  R} droptrigger {
9170: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a  {DROP TRIGGER}}.
9180: 53 79 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74  Syntax {sql-stat
9190: 65 6d 65 6e 74 7d 20 7b 0a 44 52 4f 50 20 54 52  ement} {.DROP TR
91a0: 49 47 47 45 52 20 5b 49 46 20 45 58 49 53 54 53  IGGER [IF EXISTS
91b0: 5d 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d  ] [<database-nam
91c0: 65 3e 20 2e 5d 20 3c 74 72 69 67 67 65 72 2d 6e  e> .] <trigger-n
91d0: 61 6d 65 3e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  ame>.}.</tcl>..<
91e0: 70 3e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47  p>The DROP TRIGG
91f0: 45 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  ER statement rem
9200: 6f 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63  oves a trigger c
9210: 72 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b  reated by the .[
9220: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
9230: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
9240: 74 72 69 67 67 65 72 20 69 73 20 0a 64 65 6c 65  trigger is .dele
9250: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
9260: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 4e 6f  abase schema. No
9270: 74 65 20 74 68 61 74 20 74 72 69 67 67 65 72 73  te that triggers
9280: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
9290: 6c 79 20 0a 64 72 6f 70 70 65 64 20 77 68 65 6e  ly .dropped when
92a0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
92b0: 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64  table is dropped
92c0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
92d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9310: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
9320: 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20  ion {DROP VIEW} 
9330: 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20  dropview {{DROP 
9340: 56 49 45 57 7d 7d 0a 0a 53 79 6e 74 61 78 20 7b  VIEW}}..Syntax {
9350: 73 71 6c 2d 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 44  sql-command} {.D
9360: 52 4f 50 20 56 49 45 57 20 5b 49 46 20 45 58 49  ROP VIEW [IF EXI
9370: 53 54 53 5d 20 3c 76 69 65 77 2d 6e 61 6d 65 3e  STS] <view-name>
9380: 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  .}.</tcl>..<p>Th
9390: 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61 74  e DROP VIEW stat
93a0: 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20  ement removes a 
93b0: 76 69 65 77 20 63 72 65 61 74 65 64 20 62 79 20  view created by 
93c0: 74 68 65 0a 5b 43 52 45 41 54 45 20 56 49 45 57  the.[CREATE VIEW
93d0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
93e0: 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
93f0: 20 69 73 20 74 68 65 20 0a 76 69 65 77 20 6e 61   is the .view na
9400: 6d 65 2e 20 20 49 74 20 69 73 20 72 65 6d 6f 76  me.  It is remov
9410: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
9420: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74  base schema, but
9430: 20 6e 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20   no actual data 
9440: 0a 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69  .in the underlyi
9450: 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73 20 69  ng base tables i
9460: 73 20 6d 6f 64 69 66 69 65 64 2e 3c 2f 70 3e 0a  s modified.</p>.
9470: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
9480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94c0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45 58  #####.Section EX
94d0: 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45 58  PLAIN explain EX
94e0: 50 4c 41 49 4e 0a 0a 53 79 6e 74 61 78 20 7b 73  PLAIN..Syntax {s
94f0: 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a  ql-statement} {.
9500: 45 58 50 4c 41 49 4e 20 3c 73 71 6c 2d 73 74 61  EXPLAIN <sql-sta
9510: 74 65 6d 65 6e 74 3e 0a 7d 0a 3c 2f 74 63 6c 3e  tement>.}.</tcl>
9520: 0a 0a 3c 70 3e 54 68 65 20 45 58 50 4c 41 49 4e  ..<p>The EXPLAIN
9530: 20 63 6f 6d 6d 61 6e 64 20 6d 6f 64 69 66 69 65   command modifie
9540: 72 20 69 73 20 61 20 6e 6f 6e 2d 73 74 61 6e 64  r is a non-stand
9550: 61 72 64 20 65 78 74 65 6e 73 69 6f 6e 2e 20 20  ard extension.  
9560: 54 68 65 0a 69 64 65 61 20 63 6f 6d 65 73 20 66  The.idea comes f
9570: 72 6f 6d 20 61 20 73 69 6d 69 6c 61 72 20 63 6f  rom a similar co
9580: 6d 6d 61 6e 64 20 66 6f 75 6e 64 20 69 6e 20 50  mmand found in P
9590: 6f 73 74 67 72 65 53 51 4c 2c 20 62 75 74 20 74  ostgreSQL, but t
95a0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 69 73 20  he operation.is 
95b0: 63 6f 6d 70 6c 65 74 65 6c 79 20 64 69 66 66 65  completely diffe
95c0: 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  rent.</p>..<p>If
95d0: 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79   the EXPLAIN key
95e0: 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 66  word appears bef
95f0: 6f 72 65 20 61 6e 79 20 6f 74 68 65 72 20 53 51  ore any other SQ
9600: 4c 69 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  Lite SQL command
9610: 0a 74 68 65 6e 20 69 6e 73 74 65 61 64 20 6f 66  .then instead of
9620: 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
9630: 69 6e 67 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2c  ing the command,
9640: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
9650: 61 72 79 20 77 69 6c 6c 0a 72 65 70 6f 72 74 20  ary will.report 
9660: 62 61 63 6b 20 74 68 65 20 73 65 71 75 65 6e 63  back the sequenc
9670: 65 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63  e of virtual mac
9680: 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  hine instruction
9690: 73 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 0a  s it would have.
96a0: 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
96b0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 20  the command had 
96c0: 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
96d0: 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
96e0: 73 65 6e 74 2e 0a 46 6f 72 20 61 64 64 69 74 69  sent..For additi
96f0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
9700: 20 61 62 6f 75 74 20 76 69 72 74 75 61 6c 20 6d   about virtual m
9710: 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69  achine instructi
9720: 6f 6e 73 20 73 65 65 0a 74 68 65 20 3c 61 20 68  ons see.the <a h
9730: 72 65 66 3d 22 61 72 63 68 2e 68 74 6d 6c 22 3e  ref="arch.html">
9740: 61 72 63 68 69 74 65 63 74 75 72 65 20 64 65 73  architecture des
9750: 63 72 69 70 74 69 6f 6e 3c 2f 61 3e 20 6f 72 20  cription</a> or 
9760: 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  the documentatio
9770: 6e 0a 6f 6e 20 3c 61 20 68 72 65 66 3d 22 6f 70  n.on <a href="op
9780: 63 6f 64 65 2e 68 74 6d 6c 22 3e 61 76 61 69 6c  code.html">avail
9790: 61 62 6c 65 20 6f 70 63 6f 64 65 73 3c 2f 61 3e  able opcodes</a>
97a0: 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
97b0: 20 6d 61 63 68 69 6e 65 2e 3c 2f 70 3e 0a 0a 3c   machine.</p>..<
97c0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
97d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
97e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
97f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9810: 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72  ###.Section expr
9820: 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 65 78 70  ession expr {exp
9830: 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73  ression {express
9840: 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 53 79  ion syntax}}..Sy
9850: 6e 74 61 78 20 7b 65 78 70 72 7d 20 7b 0a 3c 65  ntax {expr} {.<e
9860: 78 70 72 3e 20 3c 62 69 6e 61 72 79 2d 6f 70 3e  xpr> <binary-op>
9870: 20 3c 65 78 70 72 3e 20 7c 0a 3c 65 78 70 72 3e   <expr> |.<expr>
9880: 20 5b 4e 4f 54 5d 20 3c 6c 69 6b 65 2d 6f 70 3e   [NOT] <like-op>
9890: 20 3c 65 78 70 72 3e 20 5b 45 53 43 41 50 45 20   <expr> [ESCAPE 
98a0: 3c 65 78 70 72 3e 5d 20 7c 0a 3c 75 6e 61 72 79  <expr>] |.<unary
98b0: 2d 6f 70 3e 20 3c 65 78 70 72 3e 20 7c 0a 28 20  -op> <expr> |.( 
98c0: 3c 65 78 70 72 3e 20 29 20 7c 0a 3c 63 6f 6c 75  <expr> ) |.<colu
98d0: 6d 6e 2d 6e 61 6d 65 3e 20 7c 0a 3c 74 61 62 6c  mn-name> |.<tabl
98e0: 65 2d 6e 61 6d 65 3e 20 2e 20 3c 63 6f 6c 75 6d  e-name> . <colum
98f0: 6e 2d 6e 61 6d 65 3e 20 7c 0a 3c 64 61 74 61 62  n-name> |.<datab
9900: 61 73 65 2d 6e 61 6d 65 3e 20 2e 20 3c 74 61 62  ase-name> . <tab
9910: 6c 65 2d 6e 61 6d 65 3e 20 2e 20 3c 63 6f 6c 75  le-name> . <colu
9920: 6d 6e 2d 6e 61 6d 65 3e 20 7c 0a 3c 6c 69 74 65  mn-name> |.<lite
9930: 72 61 6c 2d 76 61 6c 75 65 3e 20 7c 0a 3c 70 61  ral-value> |.<pa
9940: 72 61 6d 65 74 65 72 3e 20 7c 0a 3c 66 75 6e 63  rameter> |.<func
9950: 74 69 6f 6e 2d 6e 61 6d 65 3e 20 28 20 3c 65 78  tion-name> ( <ex
9960: 70 72 2d 6c 69 73 74 3e 20 7c 20 53 54 41 52 20  pr-list> | STAR 
9970: 29 20 7c 0a 3c 65 78 70 72 3e 20 49 53 4e 55 4c  ) |.<expr> ISNUL
9980: 4c 20 7c 0a 3c 65 78 70 72 3e 20 4e 4f 54 4e 55  L |.<expr> NOTNU
9990: 4c 4c 20 7c 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54  LL |.<expr> [NOT
99a0: 5d 20 42 45 54 57 45 45 4e 20 3c 65 78 70 72 3e  ] BETWEEN <expr>
99b0: 20 41 4e 44 20 3c 65 78 70 72 3e 20 7c 0a 3c 65   AND <expr> |.<e
99c0: 78 70 72 3e 20 5b 4e 4f 54 5d 20 49 4e 20 28 20  xpr> [NOT] IN ( 
99d0: 3c 76 61 6c 75 65 2d 6c 69 73 74 3e 20 29 20 7c  <value-list> ) |
99e0: 0a 3c 65 78 70 72 3e 20 5b 4e 4f 54 5d 20 49 4e  .<expr> [NOT] IN
99f0: 20 28 20 3c 73 65 6c 65 63 74 2d 73 74 61 74 65   ( <select-state
9a00: 6d 65 6e 74 3e 20 29 20 7c 0a 3c 65 78 70 72 3e  ment> ) |.<expr>
9a10: 20 5b 4e 4f 54 5d 20 49 4e 20 5b 3c 64 61 74 61   [NOT] IN [<data
9a20: 62 61 73 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74  base-name> .] <t
9a30: 61 62 6c 65 2d 6e 61 6d 65 3e 20 7c 0a 5b 45 58  able-name> |.[EX
9a40: 49 53 54 53 5d 20 28 20 3c 73 65 6c 65 63 74 2d  ISTS] ( <select-
9a50: 73 74 61 74 65 6d 65 6e 74 3e 20 29 20 7c 0a 43  statement> ) |.C
9a60: 41 53 45 20 5b 3c 65 78 70 72 3e 5d 20 4c 50 20  ASE [<expr>] LP 
9a70: 57 48 45 4e 20 3c 65 78 70 72 3e 20 54 48 45 4e  WHEN <expr> THEN
9a80: 20 3c 65 78 70 72 3e 20 52 50 50 4c 55 53 20 5b   <expr> RPPLUS [
9a90: 45 4c 53 45 20 3c 65 78 70 72 3e 5d 20 45 4e 44  ELSE <expr>] END
9aa0: 20 7c 0a 43 41 53 54 20 28 20 3c 65 78 70 72 3e   |.CAST ( <expr>
9ab0: 20 41 53 20 3c 74 79 70 65 3e 20 29 20 7c 0a 3c   AS <type> ) |.<
9ac0: 65 78 70 72 3e 20 43 4f 4c 4c 41 54 45 20 3c 63  expr> COLLATE <c
9ad0: 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 0a 7d  ollation-name>.}
9ae0: 20 7b 6c 69 6b 65 2d 6f 70 7d 20 7b 0a 4c 49 4b   {like-op} {.LIK
9af0: 45 20 7c 20 47 4c 4f 42 20 7c 20 52 45 47 45 58  E | GLOB | REGEX
9b00: 50 20 7c 20 4d 41 54 43 48 0a 7d 0a 3c 2f 74 63  P | MATCH.}.</tc
9b10: 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65 63 74  l>..<p>This sect
9b20: 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74  ion is different
9b30: 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 73   from the others
9b40: 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20 73 65  .  Most other se
9b50: 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64  ctions of.this d
9b60: 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62  ocument talks ab
9b70: 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c 61 72  out a particular
9b80: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54   SQL command.  T
9b90: 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f 65 73  his section does
9ba0: 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75 74 20  .not talk about 
9bb0: 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d  a standalone com
9bc0: 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74 20 22  mand but about "
9bd0: 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77 68 69  expressions" whi
9be0: 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f  ch are .subcompo
9bf0: 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74  nents of most ot
9c00: 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70  her commands.</p
9c10: 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75 6e 64  >..<p>SQLite und
9c20: 65 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f 6c  erstands the fol
9c30: 6c 6f 77 69 6e 67 20 62 69 6e 61 72 79 20 6f 70  lowing binary op
9c40: 65 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65  erators, in orde
9c50: 72 20 66 72 6f 6d 0a 68 69 67 68 65 73 74 20 74  r from.highest t
9c60: 6f 20 6c 6f 77 65 73 74 20 70 72 65 63 65 64 65  o lowest precede
9c70: 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nce:</p>..<block
9c80: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e  quote><pre>.<fon
9c90: 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30  t color="#2c2cf0
9ca0: 22 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f  "><big>||.*    /
9cb0: 20 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74      %.+    -.&lt
9cc0: 3b 26 6c 74 3b 20 20 20 26 67 74 3b 26 67 74 3b  ;&lt;   &gt;&gt;
9cd0: 20 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c     &amp;    |.&l
9ce0: 74 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20 26 67  t;    &lt;=   &g
9cf0: 74 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20  t;    &gt;=.=   
9d00: 20 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b 26   ==   !=   &lt;&
9d10: 67 74 3b 20 20 20 3c 2f 62 69 67 3e 49 4e 0a 41  gt;   </big>IN.A
9d20: 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a  ND   .OR</font>.
9d30: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
9d40: 74 65 3e 0a 0a 3c 70 3e 53 75 70 70 6f 72 74 65  te>..<p>Supporte
9d50: 64 20 75 6e 61 72 79 20 70 72 65 66 69 78 20 6f  d unary prefix o
9d60: 70 65 72 61 74 6f 72 73 20 61 72 65 20 74 68 65  perators are the
9d70: 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  se:</p>..<blockq
9d80: 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74  uote><pre>.<font
9d90: 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22   color="#2c2cf0"
9da0: 3e 3c 62 69 67 3e 2d 20 20 20 20 2b 20 20 20 20  ><big>-    +    
9db0: 7e 20 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f  ~    NOT</big></
9dc0: 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  font>.</pre></bl
9dd0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
9de0: 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  e COLLATE operat
9df0: 6f 72 20 63 61 6e 20 62 65 20 74 68 6f 75 67 68  or can be though
9e00: 74 20 6f 66 20 61 73 20 61 20 75 6e 61 72 79 20  t of as a unary 
9e10: 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f 72  postfix.operator
9e20: 2e 20 20 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f  .  The COLLATE o
9e30: 70 65 72 61 74 6f 72 20 68 61 73 20 74 68 65 20  perator has the 
9e40: 68 69 67 68 65 73 74 20 70 72 65 63 65 64 65 6e  highest preceden
9e50: 63 65 2e 0a 49 74 20 61 6c 77 61 79 73 20 62 69  ce..It always bi
9e60: 6e 64 73 20 6d 6f 72 65 20 74 69 67 68 74 6c 79  nds more tightly
9e70: 20 74 68 61 6e 20 61 6e 79 20 70 72 65 66 69 78   than any prefix
9e80: 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20   unary operator 
9e90: 6f 72 0a 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  or.any binary op
9ea0: 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63  erator.</p>..<tc
9eb0: 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e 54  l>hd_puts ".<p>T
9ec0: 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61 74 6f  he unary operato
9ed0: 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d 20 69  r [Operator +] i
9ee0: 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 74 20 63  s a no-op.  It c
9ef0: 61 6e 20 62 65 20 61 70 70 6c 69 65 64 0a 74 6f  an be applied.to
9f00: 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d 62 65 72   strings, number
9f10: 73 2c 20 6f 72 20 62 6c 6f 62 73 20 61 6e 64 20  s, or blobs and 
9f20: 69 74 20 61 6c 77 61 79 73 20 67 69 76 65 73 20  it always gives 
9f30: 61 73 20 69 74 73 20 72 65 73 75 6c 74 20 74 68  as its result th
9f40: 65 0a 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e.value of the o
9f50: 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63  perand.</p>"</tc
9f60: 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
9f70: 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 76   there are two v
9f80: 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  ariations of the
9f90: 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20   equals and not 
9fa0: 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73  equals.operators
9fb0: 2e 20 20 45 71 75 61 6c 73 20 63 61 6e 20 62 65  .  Equals can be
9fc0: 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68   either..<tcl>.h
9fd0: 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f  d_puts "[Operato
9fe0: 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f  r =] or [Operato
9ff0: 72 20 3d 3d 5d 2e 0a 54 68 65 20 6e 6f 6e 2d 65  r ==]..The non-e
a000: 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20 63  quals operator c
a010: 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f 70  an be either.[Op
a020: 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b 4f  erator !=] or [O
a030: 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67 74  perator {&lt;&gt
a040: 3b 7d 5d 2e 0a 54 68 65 20 5b 4f 70 65 72 61 74  ;}]..The [Operat
a050: 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f 72 20  or ||] operator 
a060: 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61 74 65  is \"concatenate
a070: 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20 74 6f  \" - it joins to
a080: 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f 20 73  gether.the two s
a090: 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20 6f 70  trings of its op
a0a0: 65 72 61 6e 64 73 2e 0a 54 68 65 20 6f 70 65 72  erands..The oper
a0b0: 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25  ator [Operator %
a0c0: 5d 20 6f 75 74 70 75 74 73 20 74 68 65 20 72 65  ] outputs the re
a0d0: 6d 61 69 6e 64 65 72 20 6f 66 20 69 74 73 20 6c  mainder of its l
a0e0: 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64  eft .operand mod
a0f0: 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70  ulo its right op
a100: 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  erand.</p>..<p>T
a110: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 79  he result of any
a120: 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
a130: 20 69 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61   is a numeric va
a140: 6c 75 65 2c 20 65 78 63 65 70 74 0a 66 6f 72 20  lue, except.for 
a150: 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c  the [Operator ||
a160: 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20  ] concatenation 
a170: 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20 67  operator which g
a180: 69 76 65 73 20 61 20 73 74 72 69 6e 67 0a 72 65  ives a string.re
a190: 73 75 6c 74 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e  sult.</p>"</tcl>
a1a0: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69 74 65 72  ..<a name="liter
a1b0: 61 6c 5f 76 61 6c 75 65 22 3e 3c 2f 61 3e 0a 3c  al_value"></a>.<
a1c0: 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  p>.A literal val
a1d0: 75 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ue is an integer
a1e0: 20 6e 75 6d 62 65 72 20 6f 72 20 61 20 66 6c 6f   number or a flo
a1f0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
a200: 65 72 2e 0a 53 63 69 65 6e 74 69 66 69 63 20 6e  er..Scientific n
a210: 6f 74 61 74 69 6f 6e 20 69 73 20 73 75 70 70 6f  otation is suppo
a220: 72 74 65 64 2e 20 20 54 68 65 20 22 2e 22 20 63  rted.  The "." c
a230: 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
a240: 79 73 20 75 73 65 64 0a 61 73 20 74 68 65 20 64  ys used.as the d
a250: 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76 65  ecimal point eve
a260: 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65 20  n if the locale 
a270: 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69 65  setting specifie
a280: 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20 72  s "," for.this r
a290: 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f 66  ole - the use of
a2a0: 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65 63   "," for the dec
a2b0: 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c 64  imal point would
a2c0: 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74 61   result in.synta
a2d0: 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e 20  ctic ambiguity. 
a2e0: 20 41 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   A string consta
a2f0: 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62 79 20  nt is formed by 
a300: 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73 74  enclosing the.st
a310: 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20 71  ring in single q
a320: 75 6f 74 65 73 20 28 27 29 2e 20 20 41 20 73 69  uotes (').  A si
a330: 6e 67 6c 65 20 71 75 6f 74 65 20 77 69 74 68 69  ngle quote withi
a340: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63 61 6e  n the string can
a350: 0a 62 65 20 65 6e 63 6f 64 65 64 20 62 79 20 70  .be encoded by p
a360: 75 74 74 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c  utting two singl
a370: 65 20 71 75 6f 74 65 73 20 69 6e 20 61 20 72 6f  e quotes in a ro
a380: 77 20 2d 20 61 73 20 69 6e 20 50 61 73 63 61 6c  w - as in Pascal
a390: 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63 61 70 65  ..C-style escape
a3a0: 73 20 75 73 69 6e 67 20 74 68 65 20 62 61 63 6b  s using the back
a3b0: 73 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 20  slash character 
a3c0: 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
a3d0: 64 20 62 65 63 61 75 73 65 0a 74 68 65 79 20 61  d because.they a
a3e0: 72 65 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20  re not standard 
a3f0: 53 51 4c 2e 0a 42 4c 4f 42 20 6c 69 74 65 72 61  SQL..BLOB litera
a400: 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69  ls are string li
a410: 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e  terals containin
a420: 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61  g hexadecimal da
a430: 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20  ta and.preceded 
a440: 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20  by a single "x" 
a450: 6f 72 20 22 58 22 20 63 68 61 72 61 63 74 65 72  or "X" character
a460: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c  .  For example:<
a470: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
a480: 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36  ><pre>.X'53514C6
a490: 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62  97465'.</pre></b
a4a0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a  lockquote>..<p>.
a4b0: 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20  A literal value 
a4c0: 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65 20  can also be the 
a4d0: 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c 2f  token "NULL"..</
a4e0: 70 3e 0a 0a 3c 70 3e 0a 41 20 70 61 72 61 6d 65  p>..<p>.A parame
a4f0: 74 65 72 20 73 70 65 63 69 66 69 65 73 20 61 20  ter specifies a 
a500: 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 6e 20 74  placeholder in t
a510: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f  he expression fo
a520: 72 20 61 20 6c 69 74 65 72 61 6c 0a 76 61 6c 75  r a literal.valu
a530: 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64  e that is filled
a540: 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75   in at runtime u
a550: 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65  sing the.[sqlite
a560: 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20  3_bind_blob() | 
a570: 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20  sqlite3_bind()] 
a580: 41 50 49 73 2e 0a 50 61 72 61 6d 65 74 65 72 73  APIs..Parameters
a590: 20 63 61 6e 20 74 61 6b 65 20 73 65 76 65 72 61   can take severa
a5a0: 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70 0a 0a 3c 62  l forms:.</p..<b
a5b0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
a5c0: 65 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  e>.<tr>.<td alig
a5d0: 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
a5e0: 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
a5f0: 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  i>NNN</i></td><t
a600: 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
a610: 64 3e 0a 3c 74 64 3e 41 20 71 75 65 73 74 69 6f  d>.<td>A questio
a620: 6e 20 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20  n mark followed 
a630: 62 79 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e  by a number <i>N
a640: 4e 4e 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73  NN</i> holds a s
a650: 70 6f 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d  pot for the.NNN-
a660: 74 68 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e  th parameter.  N
a670: 4e 4e 20 6d 75 73 74 20 62 65 20 62 65 74 77 65  NN must be betwe
a680: 65 6e 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45  en 1 and [SQLITE
a690: 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
a6a0: 4d 42 45 52 5d 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  MBER].</td>.</tr
a6b0: 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
a6c0: 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
a6d0: 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f  "top"><b>?</b></
a6e0: 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
a6f0: 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 41 20 71 75  "></td>.<td>A qu
a700: 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74  estion mark that
a710: 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64   is not followed
a720: 20 62 79 20 61 20 6e 75 6d 62 65 72 20 68 6f 6c   by a number hol
a730: 64 73 20 61 20 73 70 6f 74 20 66 6f 72 0a 74 68  ds a spot for.th
a740: 65 20 6e 65 78 74 20 75 6e 75 73 65 64 20 70 61  e next unused pa
a750: 72 61 6d 65 74 65 72 2e 3c 2f 74 64 3e 0a 3c 2f  rameter.</td>.</
a760: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  tr>.<tr>.<td ali
a770: 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67  gn="right" valig
a780: 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e  n="top"><b>:</b>
a790: 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e  <i>AAAA</i></td>
a7a0: 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c  <td width="20"><
a7b0: 2f 74 64 3e 0a 3c 74 64 3e 41 20 63 6f 6c 6f 6e  /td>.<td>A colon
a7c0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
a7d0: 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
a7e0: 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
a7f0: 20 61 20 6e 61 6d 65 64 0a 70 61 72 61 6d 65 74   a named.paramet
a800: 65 72 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  er with the name
a810: 20 41 41 41 41 2e 20 20 4e 61 6d 65 64 20 70 61   AAAA.  Named pa
a820: 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73  rameters are als
a830: 6f 20 6e 75 6d 62 65 72 65 64 2e 0a 54 68 65 20  o numbered..The 
a840: 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20  number assigned 
a850: 69 73 20 74 68 65 20 6e 65 78 74 20 75 6e 75 73  is the next unus
a860: 65 64 20 6e 75 6d 62 65 72 2e 20 20 54 6f 20 61  ed number.  To a
a870: 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 2c 0a  void confusion,.
a880: 69 74 20 69 73 20 62 65 73 74 20 74 6f 20 61 76  it is best to av
a890: 6f 69 64 20 6d 69 78 69 6e 67 20 6e 61 6d 65 64  oid mixing named
a8a0: 20 61 6e 64 20 6e 75 6d 62 65 72 65 64 20 70 61   and numbered pa
a8b0: 72 61 6d 65 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c  rameters.</td>.<
a8c0: 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  /tr>.<tr>.<td al
a8d0: 69 67 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69  ign="right" vali
a8e0: 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62  gn="top"><b>@</b
a8f0: 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64  ><i>AAAA</i></td
a900: 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e  ><td width="20">
a910: 3c 2f 74 64 3e 0a 3c 74 64 3e 41 6e 20 22 61 74  </td>.<td>An "at
a920: 22 20 73 69 67 6e 20 77 6f 72 6b 73 20 65 78 61  " sign works exa
a930: 63 74 6c 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f  ctly like a colo
a940: 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  n.</td>.</tr>.<t
a950: 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
a960: 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
a970: 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41  "><b>$</b><i>AAA
a980: 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  A</i></td><td wi
a990: 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
a9a0: 74 64 3e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e  td>A dollar-sign
a9b0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
a9c0: 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
a9d0: 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f  also holds a spo
a9e0: 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
a9f0: 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
aa00: 20 6e 61 6d 65 20 41 41 41 41 2e 20 20 54 68 65   name AAAA.  The
aa10: 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65   identifier name
aa20: 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 63 61   in this case ca
aa30: 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20 6f 72  n include.one or
aa40: 20 6d 6f 72 65 20 6f 63 63 75 72 61 6e 63 65 73   more occurances
aa50: 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20 61 20 73   of "::" and a s
aa60: 75 66 66 69 78 20 65 6e 63 6c 6f 73 65 64 20 69  uffix enclosed i
aa70: 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e 74 61 69  n "(...)" contai
aa80: 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74 20 61 74  ning.any text at
aa90: 20 61 6c 6c 2e 20 20 54 68 69 73 20 73 79 6e 74   all.  This synt
aaa0: 61 78 20 69 73 20 74 68 65 20 66 6f 72 6d 20 6f  ax is the form o
aab0: 66 20 61 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  f a variable nam
aac0: 65 20 69 6e 20 74 68 65 20 54 63 6c 0a 70 72 6f  e in the Tcl.pro
aad0: 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61 67  gramming languag
aae0: 65 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f  e.</td>.</tr>.</
aaf0: 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
ab00: 6f 74 65 3e 0a 0a 3c 70 3e 50 61 72 61 6d 65 74  ote>..<p>Paramet
ab10: 65 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ers that are not
ab20: 20 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73   assigned values
ab30: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
ab40: 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
ab50: 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61 72  lite3_bind()] ar
ab60: 65 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c  e treated.as NUL
ab70: 4c 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  L.</p>..<tcl>hd_
ab80: 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20 4c 49  fragment like LI
ab90: 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c 3e 0a  KE ESCAPE</tcl>.
aba0: 3c 70 3e 54 68 65 20 4c 49 4b 45 20 6f 70 65 72  <p>The LIKE oper
abb0: 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61 74 74  ator does a patt
abc0: 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d  ern matching com
abd0: 70 61 72 69 73 6f 6e 2e 20 54 68 65 20 6f 70 65  parison. The ope
abe0: 72 61 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68  rand.to the righ
abf0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70  t contains the p
ac00: 61 74 74 65 72 6e 2c 20 74 68 65 20 6c 65 66 74  attern, the left
ac10: 20 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 63 6f   hand operand co
ac20: 6e 74 61 69 6e 73 20 74 68 65 0a 73 74 72 69 6e  ntains the.strin
ac30: 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69 6e  g to match again
ac40: 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e 20  st the pattern. 
ac50: 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
ac60: 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  A percent symbol
ac70: 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20 69 6e   [Operator %] in
ac80: 20 74 68 65 20 70 61 74 74 65 72 6e 20 6d 61 74   the pattern mat
ac90: 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e 63  ches any.sequenc
aca0: 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
acb0: 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  e characters in 
acc0: 74 68 65 20 73 74 72 69 6e 67 2e 20 20 41 6e 20  the string.  An 
acd0: 75 6e 64 65 72 73 63 6f 72 65 0a 5b 4f 70 65 72  underscore.[Oper
ace0: 61 74 6f 72 20 5f 5d 20 69 6e 20 74 68 65 20 70  ator _] in the p
acf0: 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20 61  attern matches a
ad00: 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63  ny single charac
ad10: 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72 69 6e  ter in the.strin
ad20: 67 2e 20 20 41 6e 79 20 6f 74 68 65 72 20 63 68  g.  Any other ch
ad30: 61 72 61 63 74 65 72 20 6d 61 74 63 68 65 73 20  aracter matches 
ad40: 69 74 73 65 6c 66 20 6f 72 20 69 74 27 73 20 6c  itself or it's l
ad50: 6f 77 65 72 2f 75 70 70 65 72 20 63 61 73 65 0a  ower/upper case.
ad60: 65 71 75 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e  equivalent (i.e.
ad70: 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
ad80: 65 20 6d 61 74 63 68 69 6e 67 29 2e 20 20 28 41  e matching).  (A
ad90: 20 62 75 67 3a 20 53 51 4c 69 74 65 20 6f 6e 6c   bug: SQLite onl
ada0: 79 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70  y.understands up
adb0: 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66  per/lower case f
adc0: 6f 72 20 37 2d 62 69 74 20 4c 61 74 69 6e 20 63  or 7-bit Latin c
add0: 68 61 72 61 63 74 65 72 73 2e 20 20 48 65 6e 63  haracters.  Henc
ade0: 65 20 74 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61  e the.LIKE opera
adf0: 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e 73  tor is case sens
ae00: 69 74 69 76 65 20 66 6f 72 20 38 2d 62 69 74 20  itive for 8-bit 
ae10: 69 73 6f 38 38 35 39 20 63 68 61 72 61 63 74 65  iso8859 characte
ae20: 72 73 20 6f 72 20 55 54 46 2d 38 0a 63 68 61 72  rs or UTF-8.char
ae30: 61 63 74 65 72 73 2e 20 20 46 6f 72 20 65 78 61  acters.  For exa
ae40: 6d 70 6c 65 2c 20 74 68 65 20 65 78 70 72 65 73  mple, the expres
ae50: 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70  sion <b>'a'&nbsp
ae60: 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f  ;LIKE&nbsp;'A'</
ae70: 62 3e 0a 69 73 20 54 52 55 45 20 62 75 74 20 3c  b>.is TRUE but <
ae80: 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70  b>'&aelig;'&nbsp
ae90: 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c  ;LIKE&nbsp;'&AEl
aea0: 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53  ig;'</b> is FALS
aeb0: 45 2e 29 2e 3c 2f 70 3e 22 3c 2f 74 63 6c 3e 0a  E.).</p>"</tcl>.
aec0: 0a 3c 70 3e 49 66 20 74 68 65 20 6f 70 74 69 6f  .<p>If the optio
aed0: 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
aee0: 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
aef0: 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  en the expressio
af00: 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  n.following the 
af10: 45 53 43 41 50 45 20 6b 65 79 77 6f 72 64 20 6d  ESCAPE keyword m
af20: 75 73 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20  ust evaluate to 
af30: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74  a string consist
af40: 69 6e 67 20 6f 66 0a 61 20 73 69 6e 67 6c 65 20  ing of.a single 
af50: 63 68 61 72 61 63 74 65 72 2e 20 54 68 69 73 20  character. This 
af60: 63 68 61 72 61 63 74 65 72 20 6d 61 79 20 62 65  character may be
af70: 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c 49 4b   used in the LIK
af80: 45 20 70 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63  E pattern.to inc
af90: 6c 75 64 65 20 6c 69 74 65 72 61 6c 20 70 65 72  lude literal per
afa0: 63 65 6e 74 20 6f 72 20 75 6e 64 65 72 73 63 6f  cent or undersco
afb0: 72 65 20 63 68 61 72 61 63 74 65 72 73 2e 20 54  re characters. T
afc0: 68 65 20 65 73 63 61 70 65 0a 63 68 61 72 61 63  he escape.charac
afd0: 74 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ter followed by 
afe0: 61 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  a percent symbol
aff0: 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 6f 72 20  , underscore or 
b000: 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61  itself matches a
b010: 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74  .literal percent
b020: 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63   symbol, undersc
b030: 6f 72 65 20 6f 72 20 65 73 63 61 70 65 20 63 68  ore or escape ch
b040: 61 72 61 63 74 65 72 20 69 6e 20 74 68 65 20 73  aracter in the s
b050: 74 72 69 6e 67 2c 0a 72 65 73 70 65 63 74 69 76  tring,.respectiv
b060: 65 6c 79 2e 20 54 68 65 20 69 6e 66 69 78 20 4c  ely. The infix L
b070: 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73 20  IKE operator is 
b080: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
b090: 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c 69  alling the.appli
b0a0: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53  cation-defined S
b0b0: 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69  QL functions [li
b0c0: 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58  ke(<i>Y</i>,<i>X
b0d0: 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28  </i>)] or.[like(
b0e0: 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
b0f0: 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e  >,<i>Z</i>)]</a>
b100: 2e 3c 2f 70 3e 0a 0a 54 68 65 20 4c 49 4b 45 20  .</p>..The LIKE 
b110: 6f 70 65 72 61 74 6f 72 20 69 73 20 6e 6f 74 20  operator is not 
b120: 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 61  case sensitive a
b130: 6e 64 20 77 69 6c 6c 20 6d 61 74 63 68 20 75 70  nd will match up
b140: 70 65 72 20 63 61 73 65 0a 63 68 61 72 61 63 74  per case.charact
b150: 65 72 73 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20  ers on one side 
b160: 61 67 61 69 6e 73 74 20 6c 6f 77 65 72 20 63 61  against lower ca
b170: 73 65 20 63 68 61 72 61 63 74 65 72 73 20 6f 6e  se characters on
b180: 20 74 68 65 20 6f 74 68 65 72 2e 20 20 0a 28 41   the other.  .(A
b190: 20 62 75 67 3a 20 53 51 4c 69 74 65 20 6f 6e 6c   bug: SQLite onl
b1a0: 79 20 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70  y understands up
b1b0: 70 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66  per/lower case f
b1c0: 6f 72 20 37 2d 62 69 74 20 4c 61 74 69 6e 0a 63  or 7-bit Latin.c
b1d0: 68 61 72 61 63 74 65 72 73 2e 20 20 48 65 6e 63  haracters.  Henc
b1e0: 65 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72 61  e the LIKE opera
b1f0: 74 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e 73  tor is case sens
b200: 69 74 69 76 65 20 66 6f 72 20 38 2d 62 69 74 0a  itive for 8-bit.
b210: 69 73 6f 38 38 35 39 20 63 68 61 72 61 63 74 65  iso8859 characte
b220: 72 73 20 6f 72 20 55 54 46 2d 38 20 63 68 61 72  rs or UTF-8 char
b230: 61 63 74 65 72 73 2e 20 20 46 6f 72 20 65 78 61  acters.  For exa
b240: 6d 70 6c 65 2c 20 74 68 65 20 65 78 70 72 65 73  mple, the expres
b250: 73 69 6f 6e 0a 3c 62 3e 27 61 27 26 6e 62 73 70  sion.<b>'a'&nbsp
b260: 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f  ;LIKE&nbsp;'A'</
b270: 62 3e 20 69 73 20 54 52 55 45 20 62 75 74 0a 3c  b> is TRUE but.<
b280: 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73 70  b>'&aelig;'&nbsp
b290: 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c  ;LIKE&nbsp;'&AEl
b2a0: 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53  ig;'</b> is FALS
b2b0: 45 2e 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  E.).</p>..<p>The
b2c0: 20 69 6e 66 69 78 20 4c 49 4b 45 0a 6f 70 65 72   infix LIKE.oper
b2d0: 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e  ator is implemen
b2e0: 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
b2f0: 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  he user function
b300: 20 3c 61 20 68 72 65 66 3d 22 23 6c 69 6b 65 46   <a href="#likeF
b310: 75 6e 63 22 3e 0a 6c 69 6b 65 28 3c 69 3e 58 3c  unc">.like(<i>X<
b320: 2f 69 3e 2c 3c 69 3e 59 3c 2f 69 3e 29 3c 2f 61  /i>,<i>Y</i>)</a
b330: 3e 2e 20 20 49 66 20 61 6e 20 45 53 43 41 50 45  >.  If an ESCAPE
b340: 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65   clause is prese
b350: 6e 74 2c 20 69 74 20 61 64 64 73 0a 61 20 74 68  nt, it adds.a th
b360: 69 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ird parameter to
b370: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61   the function ca
b380: 6c 6c 2e 20 49 66 20 74 68 65 20 66 75 6e 63 74  ll. If the funct
b390: 69 6f 6e 61 6c 69 74 79 20 6f 66 20 4c 49 4b 45  ionality of LIKE
b3a0: 20 63 61 6e 20 62 65 0a 6f 76 65 72 72 69 64 64   can be.overridd
b3b0: 65 6e 20 62 79 20 64 65 66 69 6e 69 6e 67 20 61  en by defining a
b3c0: 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d  n alternative im
b3d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
b3e0: 74 68 65 0a 6c 69 6b 65 28 29 20 53 51 4c 20 66  the.like() SQL f
b3f0: 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 3c 2f 70  unction.</p>.</p
b400: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
b410: 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74  ent glob GLOB</t
b420: 63 6c 3e 0a 3c 70 3e 54 68 65 20 47 4c 4f 42 20  cl>.<p>The GLOB 
b430: 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
b440: 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
b450: 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
b460: 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
b470: 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
b480: 61 72 64 73 2e 20 20 41 6c 73 6f 2c 20 47 4c 4f  ards.  Also, GLO
b490: 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74  B is case.sensit
b4a0: 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45  ive, unlike LIKE
b4b0: 2e 20 20 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64  .  Both GLOB and
b4c0: 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65   LIKE may be pre
b4d0: 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54  ceded by.the NOT
b4e0: 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65   keyword to inve
b4f0: 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20  rt the sense of 
b500: 74 68 65 20 74 65 73 74 2e 20 20 54 68 65 20 69  the test.  The i
b510: 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61  nfix GLOB .opera
b520: 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
b530: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
b540: 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62  e function.[glob
b550: 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
b560: 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20  i>)] and can be 
b570: 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72  modified by over
b580: 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63  riding.that func
b590: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  tion.</p>..<tcl>
b5a0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65  hd_fragment rege
b5b0: 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a  xp REGEXP</tcl>.
b5c0: 3c 70 3e 54 68 65 20 52 45 47 45 58 50 20 6f 70  <p>The REGEXP op
b5d0: 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65 63  erator is a spec
b5e0: 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20 74  ial syntax for t
b5f0: 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65 72  he regexp().user
b600: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 4e 6f 20 72   function.  No r
b610: 65 67 65 78 70 28 29 20 75 73 65 72 20 66 75 6e  egexp() user fun
b620: 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
b630: 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e 64 20   by default.and 
b640: 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20 52 45  so use of the RE
b650: 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 77 69  GEXP operator wi
b660: 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 73 75  ll normally resu
b670: 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72 20 6d  lt in an.error m
b680: 65 73 73 61 67 65 2e 20 20 49 66 20 61 20 75 73  essage.  If a us
b690: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
b6a0: 69 6f 6e 20 6e 61 6d 65 64 20 22 72 65 67 65 78  ion named "regex
b6b0: 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20 72  p".is added at r
b6c0: 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74 20 66 75  un-time, that fu
b6d0: 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63  nction will be c
b6e0: 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65 72 0a 74  alled in order.t
b6f0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
b700: 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 2e  REGEXP operator.
b710: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
b720: 61 67 6d 65 6e 74 20 6d 61 74 63 68 20 4d 41 54  agment match MAT
b730: 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20  CH</tcl>.<p>The 
b740: 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 69  MATCH operator i
b750: 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74  s a special synt
b760: 61 78 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68  ax for the match
b770: 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  ().user function
b780: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d  .  The default m
b790: 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
b7a0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 72  implementation.r
b7b0: 61 69 73 65 73 20 61 6e 64 20 65 78 63 65 70 74  aises and except
b7c0: 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f 74 20 72  ion and is not r
b7d0: 65 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72  eally useful for
b7e0: 20 61 6e 79 74 68 69 6e 67 2e 0a 42 75 74 20 65   anything..But e
b7f0: 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 6f 76  xtensions can ov
b800: 65 72 72 69 64 65 20 74 68 65 20 6d 61 74 63 68  erride the match
b810: 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  () function with
b820: 20 6d 6f 72 65 0a 68 65 6c 70 66 75 6c 20 6c 6f   more.helpful lo
b830: 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63  gic.</p>..<p>A c
b840: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 6e 20 62  olumn name can b
b850: 65 20 61 6e 79 20 6f 66 20 74 68 65 20 6e 61 6d  e any of the nam
b860: 65 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  es defined in th
b870: 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
b880: 0a 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 6f 6e  .statement or on
b890: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b8a0: 6e 67 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74  ng special ident
b8b0: 69 66 69 65 72 73 3a 20 22 3c 62 3e 52 4f 57 49  ifiers: "<b>ROWI
b8c0: 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e 4f 49 44 3c  D</b>",."<b>OID<
b8d0: 2f 62 3e 22 2c 20 6f 72 20 22 3c 62 3e 5f 52 4f  /b>", or "<b>_RO
b8e0: 57 49 44 5f 3c 2f 62 3e 22 2e 0a 54 68 65 73 65  WID_</b>"..These
b8f0: 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
b900: 69 65 72 73 20 61 6c 6c 20 64 65 73 63 72 69 62  iers all describ
b910: 65 20 74 68 65 0a 75 6e 69 71 75 65 20 69 6e 74  e the.unique int
b920: 65 67 65 72 20 6b 65 79 20 28 74 68 65 20 22 72  eger key (the "r
b930: 6f 77 20 6b 65 79 22 29 20 61 73 73 6f 63 69 61  ow key") associa
b940: 74 65 64 20 77 69 74 68 20 65 76 65 72 79 20 0a  ted with every .
b950: 72 6f 77 20 6f 66 20 65 76 65 72 79 20 74 61 62  row of every tab
b960: 6c 65 2e 0a 54 68 65 20 73 70 65 63 69 61 6c 20  le..The special 
b970: 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79  identifiers only
b980: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f   refer to the ro
b990: 77 20 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52  w key if the [CR
b9a0: 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
b9b0: 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64  ement does not d
b9c0: 65 66 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c  efine a real col
b9d0: 75 6d 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d  umn with the sam
b9e0: 65 20 6e 61 6d 65 2e 20 20 52 6f 77 20 6b 65 79  e name.  Row key
b9f0: 73 0a 61 63 74 20 6c 69 6b 65 20 72 65 61 64 2d  s.act like read-
ba00: 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 73 2e 20 20 41  only columns.  A
ba10: 20 72 6f 77 20 6b 65 79 20 63 61 6e 20 62 65 20   row key can be 
ba20: 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20  used anywhere a 
ba30: 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63  regular.column c
ba40: 61 6e 20 62 65 20 75 73 65 64 2c 20 65 78 63 65  an be used, exce
ba50: 70 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e 6e  pt that you cann
ba60: 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 76 61  ot change the va
ba70: 6c 75 65 0a 6f 66 20 61 20 72 6f 77 20 6b 65 79  lue.of a row key
ba80: 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45 5d 20   in an [UPDATE] 
ba90: 6f 72 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74  or [INSERT] stat
baa0: 65 6d 65 6e 74 2e 0a 22 53 45 4c 45 43 54 20 2a  ement.."SELECT *
bab0: 20 2e 2e 2e 22 20 64 6f 65 73 20 6e 6f 74 20 72   ..." does not r
bac0: 65 74 75 72 6e 20 74 68 65 20 72 6f 77 20 6b 65  eturn the row ke
bad0: 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5b 53 45 4c 45  y.</p>..<p>[SELE
bae0: 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 63  CT] statements c
baf0: 61 6e 20 61 70 70 65 61 72 20 69 6e 20 65 78 70  an appear in exp
bb00: 72 65 73 73 69 6f 6e 73 20 61 73 20 65 69 74 68  ressions as eith
bb10: 65 72 20 74 68 65 0a 72 69 67 68 74 2d 68 61 6e  er the.right-han
bb20: 64 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65  d operand of the
bb30: 20 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 61 73   IN operator, as
bb40: 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
bb50: 74 79 2c 20 6f 72 0a 61 73 20 74 68 65 20 6f 70  ty, or.as the op
bb60: 65 72 61 6e 64 20 6f 66 20 61 6e 20 45 58 49 53  erand of an EXIS
bb70: 54 53 20 6f 70 65 72 61 74 6f 72 2e 0a 41 73 20  TS operator..As 
bb80: 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69 74  a scalar quantit
bb90: 79 20 6f 72 20 74 68 65 20 6f 70 65 72 61 6e 64  y or the operand
bba0: 20 6f 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74   of an IN operat
bbb0: 6f 72 2c 0a 74 68 65 20 53 45 4c 45 43 54 20 73  or,.the SELECT s
bbc0: 68 6f 75 6c 64 20 68 61 76 65 20 6f 6e 6c 79 20  hould have only 
bbd0: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20  a single column 
bbe0: 69 6e 20 69 74 73 0a 72 65 73 75 6c 74 2e 20 20  in its.result.  
bbf0: 43 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73  Compound SELECTs
bc00: 20 28 63 6f 6e 6e 65 63 74 65 64 20 77 69 74 68   (connected with
bc10: 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55   keywords like U
bc20: 4e 49 4f 4e 20 6f 72 0a 45 58 43 45 50 54 29 20  NION or.EXCEPT) 
bc30: 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 57 69 74  are allowed..Wit
bc40: 68 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65  h the EXISTS ope
bc50: 72 61 74 6f 72 2c 20 74 68 65 20 63 6f 6c 75 6d  rator, the colum
bc60: 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
bc70: 20 73 65 74 20 6f 66 20 74 68 65 20 5b 53 45 4c   set of the [SEL
bc80: 45 43 54 5d 20 61 72 65 0a 69 67 6e 6f 72 65 64  ECT] are.ignored
bc90: 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
bca0: 69 6f 6e 20 72 65 74 75 72 6e 73 20 54 52 55 45  ion returns TRUE
bcb0: 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   if one or more 
bcc0: 72 6f 77 73 20 65 78 69 73 74 0a 61 6e 64 20 46  rows exist.and F
bcd0: 41 4c 53 45 20 69 66 20 74 68 65 20 72 65 73 75  ALSE if the resu
bce0: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
bcf0: 0a 49 66 20 6e 6f 20 74 65 72 6d 73 20 69 6e 20  .If no terms in 
bd00: 74 68 65 20 5b 53 45 4c 45 43 54 5d 20 65 78 70  the [SELECT] exp
bd10: 72 65 73 73 69 6f 6e 20 72 65 66 65 72 20 74 6f  ression refer to
bd20: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 63 6f   value in the co
bd30: 6e 74 61 69 6e 69 6e 67 0a 71 75 65 72 79 2c 20  ntaining.query, 
bd40: 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
bd50: 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
bd60: 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20 61   once prior to a
bd70: 6e 79 20 6f 74 68 65 72 0a 70 72 6f 63 65 73 73  ny other.process
bd80: 69 6e 67 20 61 6e 64 20 74 68 65 20 72 65 73 75  ing and the resu
bd90: 6c 74 20 69 73 20 72 65 75 73 65 64 20 61 73 20  lt is reused as 
bda0: 6e 65 63 65 73 73 61 72 79 2e 20 20 49 66 20 74  necessary.  If t
bdb0: 68 65 20 5b 53 45 4c 45 43 54 5d 20 65 78 70 72  he [SELECT] expr
bdc0: 65 73 73 69 6f 6e 0a 64 6f 65 73 20 63 6f 6e 74  ession.does cont
bdd0: 61 69 6e 20 76 61 72 69 61 62 6c 65 73 20 66 72  ain variables fr
bde0: 6f 6d 20 74 68 65 20 6f 75 74 65 72 20 71 75 65  om the outer que
bdf0: 72 79 2c 20 74 68 65 6e 20 74 68 65 20 5b 53 45  ry, then the [SE
be00: 4c 45 43 54 5d 20 69 73 20 72 65 65 76 61 6c 75  LECT] is reevalu
be10: 61 74 65 64 0a 65 76 65 72 79 20 74 69 6d 65 20  ated.every time 
be20: 69 74 20 69 73 20 6e 65 65 64 65 64 2e 3c 2f 70  it is needed.</p
be30: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45 4c  >..<p>When a SEL
be40: 45 43 54 20 69 73 20 74 68 65 20 72 69 67 68 74  ECT is the right
be50: 20 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20   operand of the 
be60: 49 4e 20 6f 70 65 72 61 74 6f 72 2c 20 74 68 65  IN operator, the
be70: 20 49 4e 0a 6f 70 65 72 61 74 6f 72 20 72 65 74   IN.operator ret
be80: 75 72 6e 73 20 54 52 55 45 20 69 66 20 74 68 65  urns TRUE if the
be90: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6c   result of the l
bea0: 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 61  eft operand is a
beb0: 6e 79 20 6f 66 0a 74 68 65 20 76 61 6c 75 65 73  ny of.the values
bec0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
bed0: 65 20 73 65 6c 65 63 74 2e 20 20 54 68 65 20 49  e select.  The I
bee0: 4e 20 6f 70 65 72 61 74 6f 72 20 6d 61 79 20 62  N operator may b
bef0: 65 20 70 72 65 63 65 64 65 64 0a 62 79 20 74 68  e preceded.by th
bf00: 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f  e NOT keyword to
bf10: 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e 73   invert the sens
bf20: 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 3c 2f  e of the test.</
bf30: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 61 20 53 45  p>..<p>When a SE
bf40: 4c 45 43 54 20 61 70 70 65 61 72 73 20 77 69 74  LECT appears wit
bf50: 68 69 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f  hin an expressio
bf60: 6e 20 62 75 74 20 69 73 20 6e 6f 74 20 74 68 65  n but is not the
bf70: 20 72 69 67 68 74 0a 6f 70 65 72 61 6e 64 20 6f   right.operand o
bf80: 66 20 61 6e 20 49 4e 20 6f 70 65 72 61 74 6f 72  f an IN operator
bf90: 2c 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  , then the first
bfa0: 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65 73 75   row of the resu
bfb0: 6c 74 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  lt of the.SELECT
bfc0: 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c   becomes the val
bfd0: 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 65  ue used in the e
bfe0: 78 70 72 65 73 73 69 6f 6e 2e 20 20 49 66 20 74  xpression.  If t
bff0: 68 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73  he SELECT yields
c000: 0a 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72  .more than one r
c010: 65 73 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72  esult row, all r
c020: 6f 77 73 20 61 66 74 65 72 20 74 68 65 20 66 69  ows after the fi
c030: 72 73 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e  rst are ignored.
c040: 20 20 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20    If.the SELECT 
c050: 79 69 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20  yields no rows, 
c060: 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
c070: 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20  f the SELECT is 
c080: 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  NULL.</p>..<p>A 
c090: 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 20  CAST expression 
c0a0: 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61  changes the data
c0b0: 74 79 70 65 20 6f 66 20 74 68 65 20 3c 65 78 70  type of the <exp
c0c0: 72 3e 20 69 6e 74 6f 20 74 68 65 0a 74 79 70 65  r> into the.type
c0d0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 26 6c   specified by &l
c0e0: 74 3b 74 79 70 65 26 67 74 3b 2e 20 0a 26 6c 74  t;type&gt;. .&lt
c0f0: 3b 74 79 70 65 26 67 74 3b 20 63 61 6e 20 62 65  ;type&gt; can be
c100: 20 61 6e 79 20 6e 6f 6e 2d 65 6d 70 74 79 20 74   any non-empty t
c110: 79 70 65 20 6e 61 6d 65 20 74 68 61 74 20 69 73  ype name that is
c120: 20 76 61 6c 69 64 0a 66 6f 72 20 74 68 65 20 74   valid.for the t
c130: 79 70 65 20 69 6e 20 61 20 63 6f 6c 75 6d 6e 20  ype in a column 
c140: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
c150: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
c160: 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  tatement.</p>..<
c170: 70 3e 42 6f 74 68 20 5b 63 6f 72 65 66 75 6e 63  p>Both [corefunc
c180: 7c 73 69 6d 70 6c 65 5d 20 61 6e 64 20 5b 61 67  |simple] and [ag
c190: 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65 5d  gfunc|aggregate]
c1a0: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 73   functions are s
c1b0: 75 70 70 6f 72 74 65 64 2e 0a 28 46 6f 72 20 70  upported..(For p
c1c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75 72 70  resentation purp
c1d0: 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e  oses, simple fun
c1e0: 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72 74 68  ctions are furth
c1f0: 65 72 20 73 75 62 64 69 76 69 64 65 64 20 69 6e  er subdivided in
c200: 74 6f 0a 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63  to.[corefunc | c
c210: 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61  ore functions] a
c220: 6e 64 20 5b 64 61 74 65 66 75 6e 63 20 7c 20 64  nd [datefunc | d
c230: 61 74 65 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f  ate-time functio
c240: 6e 73 5d 2e 29 0a 41 20 73 69 6d 70 6c 65 20 66  ns].).A simple f
c250: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 75  unction can be u
c260: 73 65 64 20 69 6e 20 61 6e 79 20 65 78 70 72 65  sed in any expre
c270: 73 73 69 6f 6e 2e 20 20 53 69 6d 70 6c 65 20 66  ssion.  Simple f
c280: 75 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e 0a  unctions return.
c290: 61 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69 61  a result immedia
c2a0: 74 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 74 68  tely based on th
c2b0: 65 69 72 20 69 6e 70 75 74 73 2e 20 20 41 67 67  eir inputs.  Agg
c2c0: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
c2d0: 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65  .may only be use
c2e0: 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  d in a SELECT st
c2f0: 61 74 65 6d 65 6e 74 2e 20 20 41 67 67 72 65 67  atement.  Aggreg
c300: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 6f  ate functions co
c310: 6d 70 75 74 65 0a 74 68 65 69 72 20 72 65 73 75  mpute.their resu
c320: 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f  lt across all ro
c330: 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ws of the result
c340: 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e   set.</p>..<tcl>
c350: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
c360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
c3a0: 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46 75  Section {Core Fu
c3b0: 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e  nctions} corefun
c3c0: 63 20 7b 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f  c {corefunc}.pro
c3d0: 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e 74 61  c funcdef {synta
c3e0: 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d  x keywords desc}
c3f0: 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 74   {.  hd_puts {<t
c400: 72 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  r>}.  regsub -al
c410: 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20  l {\s+} [string 
c420: 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c  trim $syntax] {<
c430: 62 72 3e 3c 2f 62 72 3e 7d 20 73 79 6e 74 61 78  br></br>} syntax
c440: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
c450: 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73  \(([^*)]+)\)} $s
c460: 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69  yntax {(<i>\1</i
c470: 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  >)} syntax.  reg
c480: 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79  sub -all {,} $sy
c490: 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20  ntax {</i>,<i>} 
c4a0: 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
c4b0: 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c  -all {<i>\.\.\.<
c4c0: 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e  /i>} $syntax {..
c4d0: 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68 64 5f 70  .} syntax.  hd_p
c4e0: 75 74 73 20 22 3c 74 64 20 76 61 6c 69 67 6e 3d  uts "<td valign=
c4f0: 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22  \"top\" align=\"
c500: 72 69 67 68 74 5c 22 20 77 69 64 74 68 3d 5c 22  right\" width=\"
c510: 31 32 30 5c 22 3e 24 73 79 6e 74 61 78 3c 2f 74  120\">$syntax</t
c520: 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c  d>".  hd_puts {<
c530: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
c540: 7d 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  }.  if {[llength
c550: 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20   $keywords]==0} 
c560: 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61  {.    regexp {[a
c570: 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e  -z_]+} $syntax n
c580: 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
c590: 65 6e 74 20 24 6e 61 6d 65 20 24 6e 61 6d 65 0a  ent $name $name.
c5a0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 65    } else {.    e
c5b0: 76 61 6c 20 68 64 5f 66 72 61 67 6d 65 6e 74 20  val hd_fragment 
c5c0: 24 6b 65 79 77 6f 72 64 73 0a 20 20 20 20 68 64  $keywords.    hd
c5d0: 5f 6b 65 79 77 6f 72 64 73 20 24 6b 65 79 77 6f  _keywords $keywo
c5e0: 72 64 73 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  rds.  }.  hd_res
c5f0: 6f 6c 76 65 20 24 64 65 73 63 0a 20 20 68 64 5f  olve $desc.  hd_
c600: 70 75 74 73 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e  puts {</td></tr>
c610: 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  }.}.</tcl>..<p>T
c620: 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e  he core function
c630: 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
c640: 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
c650: 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75  efault. .[datefu
c660: 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20  nc | Date &amp; 
c670: 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  Time functions] 
c680: 61 6e 64 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61  and.[aggfunc | a
c690: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
c6a0: 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e 74  ns] are document
c6b0: 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20  ed separately.  
c6c0: 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d  An.application m
c6d0: 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74 69  ay define additi
c6e0: 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20 77  onal.functions w
c6f0: 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64 20  ritten in C and 
c700: 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61 74  added to the dat
c710: 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73 69  abase engine usi
c720: 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng.the [sqlite3_
c730: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
c740: 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61  )] API.</p>..<ta
c750: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
c760: 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63  lpadding=10>.<tc
c770: 6c 3e 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28  l>.funcdef {abs(
c780: 58 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72  X)} {} {.  Retur
c790: 6e 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  n the absolute v
c7a0: 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75 6d 65  alue of the nume
c7b0: 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74 20 3c  ric.  argument <
c7c0: 69 3e 58 3c 2f 69 3e 2e 20 20 52 65 74 75 72 6e  i>X</i>.  Return
c7d0: 20 4e 55 4c 4c 20 69 66 20 3c 69 3e 58 3c 2f 69   NULL if <i>X</i
c7e0: 3e 20 69 73 20 4e 55 4c 4c 2e 20 20 52 65 74 75  > is NULL.  Retu
c7f0: 72 6e 20 30 2e 30 20 69 66 0a 20 20 3c 69 3e 58  rn 0.0 if.  <i>X
c800: 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 61 20 6e 75  </i> is not a nu
c810: 6d 65 72 69 63 20 76 61 6c 75 65 2e 0a 7d 0a 0a  meric value..}..
c820: 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73 63  funcdef {coalesc
c830: 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b  e(X,Y,...)} {} {
c840: 0a 20 20 52 65 74 75 72 6e 20 61 20 63 6f 70 79  .  Return a copy
c850: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e 6f   of the first no
c860: 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e  n-NULL argument.
c870: 20 20 49 66 0a 20 20 61 6c 6c 20 61 72 67 75 6d    If.  all argum
c880: 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ents are NULL th
c890: 65 6e 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72  en NULL is retur
c8a0: 6e 65 64 2e 20 20 54 68 65 72 65 20 6d 75 73 74  ned.  There must
c8b0: 20 62 65 20 61 74 20 6c 65 61 73 74 20 0a 20 20   be at least .  
c8c0: 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a  2 arguments..}..
c8d0: 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c  funcdef {glob(X,
c8e0: 59 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 69 73 20  Y)} {} {.  This 
c8f0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
c900: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
c910: 65 0a 20 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58  e.  "<b>Y GLOB X
c920: 3c 2f 62 3e 22 20 73 79 6e 74 61 78 20 6f 66 20  </b>" syntax of 
c930: 53 51 4c 69 74 65 2e 0a 20 20 4e 6f 74 65 20 74  SQLite..  Note t
c940: 68 61 74 20 74 68 65 20 58 20 61 6e 64 20 59 20  hat the X and Y 
c950: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 72 65  arguments are re
c960: 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 67 6c  versed in the gl
c970: 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  ob() function.  
c980: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
c990: 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65  infix [GLOB] ope
c9a0: 72 61 74 6f 72 2e 0a 20 20 54 68 65 20 5b 73 71  rator..  The [sq
c9b0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
c9c0: 63 74 69 6f 6e 28 29 5d 0a 20 20 69 6e 74 65 72  ction()].  inter
c9d0: 66 61 63 65 20 63 61 6e 0a 20 20 62 65 20 75 73  face can.  be us
c9e0: 65 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74  ed to override t
c9f0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  his function and
ca00: 20 74 68 65 72 65 62 79 20 63 68 61 6e 67 65 20   thereby change 
ca10: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20  the operation.  
ca20: 6f 66 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70  of the [GLOB] op
ca30: 65 72 61 74 6f 72 2e 3c 2f 74 64 3e 0a 7d 0a 0a  erator.</td>.}..
ca40: 66 75 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28  funcdef {ifnull(
ca50: 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74  X,Y)} {} {.  Ret
ca60: 75 72 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68  urn a copy of th
ca70: 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c  e first non-NULL
ca80: 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a 20   argument.  If. 
ca90: 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20   both arguments 
caa0: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 4e 55  are NULL then NU
cab0: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  LL is returned. 
cac0: 54 68 69 73 20 62 65 68 61 76 65 73 20 74 68 65  This behaves the
cad0: 20 73 61 6d 65 20 61 73 20 0a 20 20 5b 63 6f 61   same as .  [coa
cae0: 6c 65 73 63 65 28 29 5d 2e 3c 2f 74 64 3e 0a 7d  lesce()].</td>.}
caf0: 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65 78 28 58  ..funcdef {hex(X
cb00: 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65 20 61 72  )} {} {.  The ar
cb10: 67 75 6d 65 6e 74 20 69 73 20 69 6e 74 65 72 70  gument is interp
cb20: 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f 42 2e  reted as a BLOB.
cb30: 20 20 54 68 65 20 72 65 73 75 6c 74 0a 20 20 69    The result.  i
cb40: 73 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c 20  s a hexadecimal 
cb50: 72 65 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65  rendering of the
cb60: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
cb70: 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65   blob..}..funcde
cb80: 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  f {last_insert_r
cb90: 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 52  owid()} {} {.  R
cba0: 65 74 75 72 6e 20 74 68 65 20 5b 52 4f 57 49 44  eturn the [ROWID
cbb0: 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61 73 74 20  ].  of the last 
cbc0: 72 6f 77 20 69 6e 73 65 72 74 20 66 72 6f 6d 20  row insert from 
cbd0: 74 68 69 73 0a 20 20 63 6f 6e 6e 65 63 74 69 6f  this.  connectio
cbe0: 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  n to the databas
cbf0: 65 2e 20 0a 20 20 54 68 69 73 20 69 73 20 74 68  e. .  This is th
cc00: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 74 68 61  e same value tha
cc10: 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
cc20: 6e 65 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 5b  ned.  from the [
cc30: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
cc40: 65 72 74 5f 72 6f 77 69 64 28 29 5d 20 41 50 49  ert_rowid()] API
cc50: 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75   function..}..fu
cc60: 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29  ncdef {length(X)
cc70: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
cc80: 74 68 65 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  the string lengt
cc90: 68 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 20 69 6e  h of <i>X</i> in
cca0: 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 49   characters..  I
ccb0: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6e 66  f SQLite is conf
ccc0: 69 67 75 72 65 64 20 74 6f 20 73 75 70 70 6f 72  igured to suppor
ccd0: 74 20 55 54 46 2d 38 2c 20 74 68 65 6e 20 74 68  t UTF-8, then th
cce0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 55 54 46 2d  e number of UTF-
ccf0: 38 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 69  8.  characters i
cd00: 73 20 72 65 74 75 72 6e 65 64 2c 20 6e 6f 74 20  s returned, not 
cd10: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
cd20: 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  tes..}..funcdef 
cd30: 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28  {like(X,Y) like(
cd40: 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 54  X,Y,Z)} {} {.  T
cd50: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
cd60: 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
cd70: 74 20 74 68 65 20 22 3c 62 3e 59 20 4c 49 4b 45  t the "<b>Y LIKE
cd80: 20 58 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a   X &#91;ESCAPE Z
cd90: 26 23 39 33 3b 3c 2f 62 3e 22 0a 20 20 73 79 6e  &#93;</b>".  syn
cda0: 74 61 78 20 6f 66 20 53 51 4c 2e 20 49 66 20 74  tax of SQL. If t
cdb0: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41  he optional ESCA
cdc0: 50 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  PE clause is pre
cdd0: 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 20  sent, then the. 
cde0: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 69   user-function i
cdf0: 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20 74  s invoked with t
ce00: 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e 20  hree arguments. 
ce10: 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73  Otherwise, it is
ce20: 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  .  invoked with 
ce30: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e  two arguments on
ce40: 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ly. Note that th
ce50: 65 20 58 20 61 6e 64 20 59 20 70 61 72 61 6d 65  e X and Y parame
ce60: 74 65 72 73 20 61 72 65 0a 20 20 72 65 76 65 72  ters are.  rever
ce70: 73 65 64 20 69 6e 20 74 68 65 20 6c 69 6b 65 28  sed in the like(
ce80: 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 6c 61 74  ) function relat
ce90: 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69 78  ive to the infix
cea0: 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
ceb0: 2e 0a 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33  ..  The [sqlite3
cec0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
ced0: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61  ()] interface ca
cee0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65  n be used to ove
cef0: 72 72 69 64 65 20 74 68 69 73 0a 20 20 66 75 6e  rride this.  fun
cf00: 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62  ction and thereb
cf10: 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65  y change the ope
cf20: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  ration of the.  
cf30: 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e  [LIKE] operator.
cf40: 20 57 68 65 6e 20 64 6f 69 6e 67 20 74 68 69 73   When doing this
cf50: 2c 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70 6f  , it may be impo
cf60: 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72  rtant.  to overr
cf70: 69 64 65 20 62 6f 74 68 20 74 68 65 20 74 77 6f  ide both the two
cf80: 20 61 6e 64 20 74 68 72 65 65 20 61 72 67 75 6d   and three argum
cf90: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
cfa0: 74 68 65 20 6c 69 6b 65 28 29 20 0a 20 20 66 75  the like() .  fu
cfb0: 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73  nction. Otherwis
cfc0: 65 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f 64  e, different cod
cfd0: 65 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 20  e may be called 
cfe0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
cff0: 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  .  [LIKE] operat
d000: 6f 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  or depending on 
d010: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
d020: 6e 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  n ESCAPE clause 
d030: 77 61 73 20 0a 20 20 73 70 65 63 69 66 69 65 64  was .  specified
d040: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f  ..}..funcdef {lo
d050: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20  ad_extension(X) 
d060: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
d070: 2c 59 29 7d 20 7b 6c 6f 61 64 5f 65 78 74 65 6e  ,Y)} {load_exten
d080: 73 69 6f 6e 7d 20 7b 0a 20 20 4c 6f 61 64 20 53  sion} {.  Load S
d090: 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73  QLite extensions
d0a0: 20 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72   out of the shar
d0b0: 65 64 20 6c 69 62 72 61 72 79 0a 20 20 66 69 6c  ed library.  fil
d0c0: 65 20 6e 61 6d 65 64 20 3c 69 3e 58 3c 2f 69 3e  e named <i>X</i>
d0d0: 20 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79   using the entry
d0e0: 20 70 6f 69 6e 74 20 3c 69 3e 59 3c 2f 69 3e 2e   point <i>Y</i>.
d0f0: 20 20 54 68 65 20 72 65 73 75 6c 74 0a 20 20 69    The result.  i
d100: 73 20 61 20 4e 55 4c 4c 2e 20 20 49 66 20 3c 69  s a NULL.  If <i
d110: 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65  >Y</i> is omitte
d120: 64 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  d then the defau
d130: 6c 74 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 20  lt entry point. 
d140: 20 6f 66 20 3c 62 3e 73 71 6c 69 74 65 33 5f 65   of <b>sqlite3_e
d150: 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 3c 2f 62  xtension_init</b
d160: 3e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69 73  > is used.  This
d170: 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73 65 73   function raises
d180: 0a 20 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  .  an exception 
d190: 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
d1a0: 20 66 61 69 6c 73 20 74 6f 20 6c 6f 61 64 20 6f   fails to load o
d1b0: 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72  r initialize cor
d1c0: 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 54 68  rectly...  <p>Th
d1d0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c  is function will
d1e0: 20 66 61 69 6c 20 69 66 20 74 68 65 20 65 78 74   fail if the ext
d1f0: 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74 73 20  ension attempts 
d200: 74 6f 20 6d 6f 64 69 66 79 0a 20 20 6f 72 20 64  to modify.  or d
d210: 65 6c 65 74 65 20 61 20 53 51 4c 20 66 75 6e 63  elete a SQL func
d220: 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  tion or collatin
d230: 67 20 73 65 71 75 65 6e 63 65 2e 20 20 54 68 65  g sequence.  The
d240: 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e  .  extension can
d250: 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f   add new functio
d260: 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
d270: 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63  sequences, but c
d280: 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f  annot.  modify o
d290: 72 20 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e  r delete existin
d2a0: 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63  g functions or c
d2b0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d2c0: 65 73 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f  es because.  tho
d2d0: 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64  se functions and
d2e0: 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  /or collating se
d2f0: 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65  quences might be
d300: 20 75 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a   used elsewhere.
d310: 20 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74    in the current
d320: 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73  ly running SQL s
d330: 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f  tatement.  To lo
d340: 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20  ad an extension 
d350: 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f  that.  changes o
d360: 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69  r deletes functi
d370: 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
d380: 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20   sequences, use 
d390: 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c  the.  [sqlite3_l
d3a0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d  oad_extension()]
d3b0: 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e   C-language API.
d3c0: 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  </p>.}..funcdef 
d3d0: 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b 0a  {lower(X)} {} {.
d3e0: 20 20 52 65 74 75 72 6e 20 61 20 63 6f 70 79 20    Return a copy 
d3f0: 6f 66 20 73 74 72 69 6e 67 20 3c 69 3e 58 3c 2f  of string <i>X</
d400: 69 3e 20 77 69 6c 6c 20 61 6c 6c 20 41 53 43 49  i> will all ASCI
d410: 49 20 63 68 61 72 61 63 74 65 72 73 0a 20 20 63  I characters.  c
d420: 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f 77 65  onverted to lowe
d430: 72 20 63 61 73 65 2e 20 20 54 68 65 20 43 20 6c  r case.  The C l
d440: 69 62 72 61 72 79 20 3c 62 3e 74 6f 6c 6f 77 65  ibrary <b>tolowe
d450: 72 28 29 3c 2f 62 3e 20 72 6f 75 74 69 6e 65 20  r()</b> routine 
d460: 69 73 20 75 73 65 64 0a 20 20 66 6f 72 20 74 68  is used.  for th
d470: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 77 68  e conversion, wh
d480: 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ich means that t
d490: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67  his function mig
d4a0: 68 74 20 6e 6f 74 0a 20 20 77 6f 72 6b 20 63 6f  ht not.  work co
d4b0: 72 72 65 63 74 6c 79 20 6f 6e 20 6e 6f 6e 2d 41  rrectly on non-A
d4c0: 53 43 49 49 20 55 54 46 2d 38 20 63 68 61 72 61  SCII UTF-8 chara
d4d0: 63 74 65 72 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  cters..}..funcde
d4e0: 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74 72 69  f {ltrim(X) ltri
d4f0: 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 52  m(X,Y)} {} {.  R
d500: 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 66  eturn a string f
d510: 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
d520: 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
d530: 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
d540: 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c 2f  appear in <i>Y</
d550: 69 3e 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  i> from the left
d560: 20 73 69 64 65 20 6f 66 20 3c 69 3e 58 3c 2f 69   side of <i>X</i
d570: 3e 2e 0a 20 20 49 66 20 74 68 65 20 3c 69 3e 59  >..  If the <i>Y
d580: 3c 2f 69 3e 20 61 72 67 75 6d 65 6e 74 20 69 73  </i> argument is
d590: 20 6f 6d 69 74 74 65 64 2c 20 73 70 61 63 65 73   omitted, spaces
d5a0: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a   are removed..}.
d5b0: 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c  .funcdef {max(X,
d5c0: 59 2c 2e 2e 2e 29 7d 20 7b 6d 61 78 43 6f 72 65  Y,...)} {maxCore
d5d0: 46 75 6e 63 20 6d 61 78 7d 20 7b 0a 20 20 52 65  Func max} {.  Re
d5e0: 74 75 72 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  turn the argumen
d5f0: 74 20 77 69 74 68 20 74 68 65 20 6d 61 78 69 6d  t with the maxim
d600: 75 6d 20 76 61 6c 75 65 2e 20 20 41 72 67 75 6d  um value.  Argum
d610: 65 6e 74 73 0a 20 20 6d 61 79 20 62 65 20 73 74  ents.  may be st
d620: 72 69 6e 67 73 20 69 6e 20 61 64 64 69 74 69 6f  rings in additio
d630: 6e 20 74 6f 20 6e 75 6d 62 65 72 73 2e 20 20 54  n to numbers.  T
d640: 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  he maximum value
d650: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
d660: 20 62 79 20 74 68 65 20 75 73 75 61 6c 20 73 6f   by the usual so
d670: 72 74 20 6f 72 64 65 72 2e 20 20 4e 6f 74 65 20  rt order.  Note 
d680: 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62  that <b>max()</b
d690: 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75  > is a simple fu
d6a0: 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74  nction when.  it
d6b0: 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65 20 61   has 2 or more a
d6c0: 72 67 75 6d 65 6e 74 73 20 62 75 74 20 63 6f 6e  rguments but con
d6d0: 76 65 72 74 73 20 74 6f 20 61 6e 20 61 67 67 72  verts to an aggr
d6e0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
d6f0: 66 20 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61  f given.  only a
d700: 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
d710: 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
d720: 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 6d 69 6e  n(X,Y,...)} {min
d730: 43 6f 72 65 46 75 6e 63 20 6d 69 6e 7d 20 7b 0a  CoreFunc min} {.
d740: 20 20 52 65 74 75 72 6e 20 74 68 65 20 61 72 67    Return the arg
d750: 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 6d  ument with the m
d760: 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 20 20 41  inimum value.  A
d770: 72 67 75 6d 65 6e 74 73 0a 20 20 6d 61 79 20 62  rguments.  may b
d780: 65 20 73 74 72 69 6e 67 73 20 69 6e 20 61 64 64  e strings in add
d790: 69 74 69 6f 6e 20 74 6f 20 6e 75 6d 62 65 72 73  ition to numbers
d7a0: 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76  .  The minimum v
d7b0: 61 6c 75 65 20 69 73 20 64 65 74 65 72 6d 69 6e  alue is determin
d7c0: 65 64 0a 20 20 62 79 20 74 68 65 20 75 73 75 61  ed.  by the usua
d7d0: 6c 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 4e  l sort order.  N
d7e0: 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28  ote that <b>min(
d7f0: 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
d800: 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
d810: 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
d820: 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
d830: 20 63 6f 6e 76 65 72 74 73 20 74 6f 20 61 6e 20   converts to an 
d840: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
d850: 6f 6e 20 69 66 20 67 69 76 65 6e 0a 20 20 6f 6e  on if given.  on
d860: 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ly a single argu
d870: 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ment..}..funcdef
d880: 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29 7d 20 7b   {nullif(X,Y)} {
d890: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65  } {.  Return the
d8a0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
d8b0: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  if the arguments
d8c0: 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2c 20   are different, 
d8d0: 0a 20 20 6f 74 68 65 72 77 69 73 65 20 72 65 74  .  otherwise ret
d8e0: 75 72 6e 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e  urn NULL..}..fun
d8f0: 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20  cdef {quote(X)} 
d900: 7b 7d 20 7b 0a 20 20 54 68 69 73 20 72 6f 75 74  {} {.  This rout
d910: 69 6e 65 20 72 65 74 75 72 6e 73 20 61 20 73 74  ine returns a st
d920: 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
d930: 65 20 76 61 6c 75 65 20 6f 66 0a 20 20 69 74 73  e value of.  its
d940: 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61 62   argument suitab
d950: 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e  le for inclusion
d960: 20 69 6e 74 6f 20 61 6e 6f 74 68 65 72 20 53 51   into another SQ
d970: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 53  L statement..  S
d980: 74 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f  trings are surro
d990: 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d  unded by single-
d9a0: 71 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61  quotes with esca
d9b0: 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20  pes on interior 
d9c0: 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64  quotes.  as need
d9d0: 65 64 2e 20 20 42 4c 4f 42 73 20 61 72 65 20 65  ed.  BLOBs are e
d9e0: 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64 65  ncoded as hexade
d9f0: 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a  cimal literals..
da00: 20 20 54 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61    The implementa
da10: 74 69 6f 6e 20 6f 66 20 5b 56 41 43 55 55 4d 5d  tion of [VACUUM]
da20: 20 75 73 65 73 20 74 68 69 73 20 66 75 6e 63 74   uses this funct
da30: 69 6f 6e 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  ion. The functio
da40: 6e 0a 20 20 69 73 20 61 6c 73 6f 20 75 73 65 66  n.  is also usef
da50: 75 6c 20 77 68 65 6e 20 77 72 69 74 69 6e 67 20  ul when writing 
da60: 74 72 69 67 67 65 72 73 20 74 6f 20 69 6d 70 6c  triggers to impl
da70: 65 6d 65 6e 74 20 75 6e 64 6f 2f 72 65 64 6f 20  ement undo/redo 
da80: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a 7d  functionality..}
da90: 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f  ..funcdef {rando
daa0: 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75  m()} {} {.  Retu
dab0: 72 6e 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64  rn a pseudo-rand
dac0: 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74  om integer.  bet
dad0: 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36  ween -9223372036
dae0: 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39  854775808 and +9
daf0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
db00: 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  07..}..funcdef {
db10: 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b  randomblob(N)} {
db20: 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61 6e 20  } {.  Return an 
db30: 3c 69 3e 4e 3c 2f 69 3e 2d 62 79 74 65 20 62 6c  <i>N</i>-byte bl
db40: 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73  ob containing ps
db50: 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 62 79 74 65  eudo-random byte
db60: 73 2e 0a 20 20 3c 69 3e 4e 3c 2f 69 3e 20 73 68  s..  <i>N</i> sh
db70: 6f 75 6c 64 20 62 65 20 61 20 70 6f 73 74 69 76  ould be a postiv
db80: 65 20 69 6e 74 65 67 65 72 2e 0a 0a 20 20 3c 70  e integer...  <p
db90: 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74  >Hint:  applicat
dba0: 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74  ions can generat
dbb0: 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75  e globally uniqu
dbc0: 65 20 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20  e identifiers.  
dbd0: 75 73 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74  using this funct
dbe0: 69 6f 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74  ion together wit
dbf0: 68 20 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72  h [hex()] and/or
dc00: 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b  .  [lower()] lik
dc10: 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c  e this:</p>..  <
dc20: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65  blockquote>.  he
dc30: 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29  x(randomblob(16)
dc40: 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77  )<br></br>.  low
dc50: 65 72 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f  er(hex(randomblo
dc60: 62 28 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63  b(16))).  </bloc
dc70: 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64  kquote>.}..funcd
dc80: 65 66 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c  ef {replace(X,Y,
dc90: 5a 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72  Z)} {} {.  Retur
dca0: 6e 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  n a string forme
dcb0: 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69 6e  d by substitutin
dcc0: 67 20 73 74 72 69 6e 67 20 3c 69 3e 5a 3c 2f 69  g string <i>Z</i
dcd0: 3e 20 66 6f 72 0a 20 20 65 76 65 72 79 20 6f 63  > for.  every oc
dce0: 63 75 72 72 61 6e 63 65 20 6f 66 20 73 74 72 69  currance of stri
dcf0: 6e 67 20 3c 69 3e 59 3c 2f 69 3e 20 69 6e 20 73  ng <i>Y</i> in s
dd00: 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 20  tring <i>X</i>. 
dd10: 20 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20   The [BINARY].  
dd20: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
dd30: 63 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 63  ce is used for c
dd40: 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 7d 0a 0a 66  omparisons..}..f
dd50: 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29  uncdef {round(X)
dd60: 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20   round(X,Y)} {} 
dd70: 7b 0a 20 20 52 6f 75 6e 64 20 6f 66 66 20 74 68  {.  Round off th
dd80: 65 20 6e 75 6d 62 65 72 20 3c 69 3e 58 3c 2f 69  e number <i>X</i
dd90: 3e 20 74 6f 20 3c 69 3e 59 3c 2f 69 3e 20 64 69  > to <i>Y</i> di
dda0: 67 69 74 73 20 74 6f 20 74 68 65 0a 20 20 72 69  gits to the.  ri
ddb0: 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d  ght of the decim
ddc0: 61 6c 20 70 6f 69 6e 74 2e 20 20 49 66 20 74 68  al point.  If th
ddd0: 65 20 3c 69 3e 59 3c 2f 69 3e 20 61 72 67 75 6d  e <i>Y</i> argum
dde0: 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
ddf0: 30 20 69 73 20 0a 20 20 61 73 73 75 6d 65 64 2e  0 is .  assumed.
de00: 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72  .}..funcdef {rtr
de10: 69 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29  im(X) rtrim(X,Y)
de20: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
de30: 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
de40: 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
de50: 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
de60: 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
de70: 20 69 6e 20 3c 69 3e 59 3c 2f 69 3e 20 66 72 6f   in <i>Y</i> fro
de80: 6d 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65  m the right side
de90: 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 20 20   of <i>X</i>..  
dea0: 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f 69 3e 20  If the <i>Y</i> 
deb0: 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
dec0: 74 65 64 2c 20 73 70 61 63 65 73 20 61 72 65 20  ted, spaces are 
ded0: 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a 66 75 6e 63  removed..}..func
dee0: 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d  def {soundex(X)}
def0: 20 7b 7d 20 7b 0a 20 20 43 6f 6d 70 75 74 65 20   {} {.  Compute 
df00: 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f  the soundex enco
df10: 64 69 6e 67 20 6f 66 20 74 68 65 20 73 74 72 69  ding of the stri
df20: 6e 67 20 3c 69 3e 58 3c 2f 69 3e 2e 0a 20 20 54  ng <i>X</i>..  T
df30: 68 65 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22  he string "?000"
df40: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
df50: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  the argument is 
df60: 4e 55 4c 4c 2e 0a 20 20 54 68 69 73 20 66 75 6e  NULL..  This fun
df70: 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64  ction is omitted
df80: 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62 79 20   from SQLite by 
df90: 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20 69 73  default..  It is
dfa0: 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20   only available 
dfb0: 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 53 4f 55  the -DSQLITE_SOU
dfc0: 4e 44 45 58 3d 31 20 63 6f 6d 70 69 6c 65 72 20  NDEX=1 compiler 
dfd0: 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64  option.  is used
dfe0: 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
dff0: 62 75 69 6c 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  built..}..funcde
e000: 66 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  f {sqlite_versio
e010: 6e 28 58 29 7d 20 7b 73 71 6c 69 74 65 5f 76 65  n(X)} {sqlite_ve
e020: 72 73 69 6f 6e 7d 20 7b 0a 20 20 52 65 74 75 72  rsion} {.  Retur
e030: 6e 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74  n the version st
e040: 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c  ring for the SQL
e050: 69 74 65 20 6c 69 62 72 61 72 79 0a 20 20 74 68  ite library.  th
e060: 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20  at is running.  
e070: 45 78 61 6d 70 6c 65 3a 20 20 22 33 2e 35 2e 39  Example:  "3.5.9
e080: 22 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75  ".}..funcdef {su
e090: 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73  bstr(X,Y,Z) subs
e0a0: 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  tr(X,Y)} {} {.  
e0b0: 52 65 74 75 72 6e 20 61 20 73 75 62 73 74 72 69  Return a substri
e0c0: 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69  ng of input stri
e0d0: 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 74 68 61 74  ng <i>X</i> that
e0e0: 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74   begins.  with t
e0f0: 68 65 20 3c 69 3e 59 3c 2f 69 3e 2d 74 68 20 63  he <i>Y</i>-th c
e100: 68 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69  haracter and whi
e110: 63 68 20 69 73 20 3c 69 3e 5a 3c 2f 69 3e 20 63  ch is <i>Z</i> c
e120: 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a  haracters long..
e130: 20 20 49 66 20 3c 69 3e 5a 3c 2f 69 3e 20 69 73    If <i>Z</i> is
e140: 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 61 6c   omitted then al
e150: 6c 20 63 68 61 72 61 63 74 65 72 20 74 68 72 6f  l character thro
e160: 75 67 68 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ugh the end of t
e170: 68 65 20 73 74 72 69 6e 67 0a 20 20 61 72 65 20  he string.  are 
e180: 72 65 74 75 72 6e 65 64 2e 0a 20 20 54 68 65 20  returned..  The 
e190: 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63  left-most charac
e1a0: 74 65 72 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 20  ter of <i>X</i> 
e1b0: 69 73 20 6e 75 6d 62 65 72 20 31 2e 20 20 49 66  is number 1.  If
e1c0: 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6e 65 67   <i>Y</i> is neg
e1d0: 61 74 69 76 65 0a 20 20 74 68 65 20 74 68 65 20  ative.  the the 
e1e0: 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  first character 
e1f0: 6f 66 20 74 68 65 20 73 75 62 73 74 72 69 6e 67  of the substring
e200: 20 69 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75   is found by cou
e210: 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20  nting from the. 
e220: 20 72 69 67 68 74 20 72 61 74 68 65 72 20 74 68   right rather th
e230: 61 6e 20 74 68 65 20 6c 65 66 74 2e 20 20 49 66  an the left.  If
e240: 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 73 74 72   <i>X</i> is str
e250: 69 6e 67 0a 20 20 74 68 65 6e 20 63 68 61 72 61  ing.  then chara
e260: 63 74 65 72 73 20 69 6e 64 69 63 65 73 20 72 65  cters indices re
e270: 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54  fer to actual UT
e280: 46 2d 38 20 63 68 61 72 61 63 74 65 72 73 2e 20  F-8 characters. 
e290: 20 49 66 0a 20 20 3c 69 3e 58 3c 2f 69 3e 20 69   If.  <i>X</i> i
e2a0: 73 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68  s a BLOB then th
e2b0: 65 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20  e indices refer 
e2c0: 74 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e  to bytes..}..fun
e2d0: 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20 74 72  cdef {trim(X) tr
e2e0: 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  im(X,Y)} {} {.  
e2f0: 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20  Return a string 
e300: 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69  formed by removi
e310: 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20  ng any and all. 
e320: 20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74   characters that
e330: 20 61 70 70 65 61 72 20 69 6e 20 3c 69 3e 59 3c   appear in <i>Y<
e340: 2f 69 3e 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e  /i> from both en
e350: 64 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 0a  ds of <i>X</i>..
e360: 20 20 49 66 20 74 68 65 20 3c 69 3e 59 3c 2f 69    If the <i>Y</i
e370: 3e 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  > argument is om
e380: 69 74 74 65 64 2c 20 73 70 61 63 65 73 20 61 72  itted, spaces ar
e390: 65 20 72 65 6d 6f 76 65 64 2e 0a 7d 0a 0a 66 75  e removed..}..fu
e3a0: 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29  ncdef {typeof(X)
e3b0: 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20  } {} {.  Return 
e3c0: 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20  the type of the 
e3d0: 65 78 70 72 65 73 73 69 6f 6e 20 3c 69 3e 58 3c  expression <i>X<
e3e0: 2f 69 3e 2e 20 20 54 68 65 20 6f 6e 6c 79 20 0a  /i>.  The only .
e3f0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20    return values 
e400: 61 72 65 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74  are "null", "int
e410: 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c 20 22  eger", "real", "
e420: 74 65 78 74 22 2c 20 61 6e 64 20 22 62 6c 6f 62  text", and "blob
e430: 22 2e 0a 20 20 53 51 4c 69 74 65 27 73 20 74 79  "..  SQLite's ty
e440: 70 65 20 68 61 6e 64 6c 69 6e 67 20 69 73 20 0a  pe handling is .
e450: 20 20 65 78 70 6c 61 69 6e 65 64 20 69 6e 20 3c    explained in <
e460: 61 20 68 72 65 66 3d 22 64 61 74 61 74 79 70 65  a href="datatype
e470: 33 2e 68 74 6d 6c 22 3e 44 61 74 61 74 79 70 65  3.html">Datatype
e480: 73 20 69 6e 20 53 51 4c 69 74 65 20 56 65 72 73  s in SQLite Vers
e490: 69 6f 6e 20 33 3c 2f 61 3e 2e 0a 7d 0a 0a 66 75  ion 3</a>..}..fu
e4a0: 6e 63 64 65 66 20 7b 75 70 70 65 72 28 58 29 7d  ncdef {upper(X)}
e4b0: 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e 20 61   {} {.  Return a
e4c0: 20 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73   copy of input s
e4d0: 74 72 69 6e 67 20 3c 69 3e 58 3c 2f 69 3e 20 63  tring <i>X</i> c
e4e0: 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 0a  onverted to all.
e4f0: 20 20 75 70 70 65 72 2d 63 61 73 65 20 6c 65 74    upper-case let
e500: 74 65 72 73 2e 20 20 54 68 65 20 69 6d 70 6c 65  ters.  The imple
e510: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 69  mentation of thi
e520: 73 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20  s function uses 
e530: 74 68 65 20 43 20 6c 69 62 72 61 72 79 0a 20 20  the C library.  
e540: 72 6f 75 74 69 6e 65 20 3c 62 3e 74 6f 75 70 70  routine <b>toupp
e550: 65 72 28 29 3c 2f 62 3e 20 77 68 69 63 68 20 6d  er()</b> which m
e560: 65 61 6e 73 20 69 74 20 6d 61 79 20 6e 6f 74 20  eans it may not 
e570: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
e580: 6e 20 0a 20 20 6e 6f 6e 2d 41 53 43 49 49 20 55  n .  non-ASCII U
e590: 54 46 2d 38 20 73 74 72 69 6e 67 73 2e 0a 7d 0a  TF-8 strings..}.
e5a0: 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f 62 6c  .funcdef {zerobl
e5b0: 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 52 65  ob(N)} {} {.  Re
e5c0: 74 75 72 6e 20 61 20 42 4c 4f 42 20 63 6f 6e 73  turn a BLOB cons
e5d0: 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65  isting of N byte
e5e0: 73 20 6f 66 20 30 78 30 30 2e 20 20 53 51 4c 69  s of 0x00.  SQLi
e5f0: 74 65 0a 20 20 6d 61 6e 61 67 65 73 20 74 68 65  te.  manages the
e600: 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72  se zeroblobs ver
e610: 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20 20  y efficiently.  
e620: 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65  Zeroblobs can be
e630: 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65 72   used to.  reser
e640: 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20 42  ve space for a B
e650: 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74 65  LOB that is late
e660: 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67 20  r written using 
e670: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  .  [sqlite3_blob
e680: 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d  _open() | increm
e690: 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e  ental BLOB I/O].
e6a0: 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62 6c  .}.</tcl>.</tabl
e6b0: 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  e>..<tcl>.######
e6c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e6d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e6e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e6f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e700: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
e710: 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20   {Date And Time 
e720: 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  Functions} datef
e730: 75 6e 63 20 7b 64 61 74 65 66 75 6e 63 7d 0a 3c  unc {datefunc}.<
e740: 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  /tcl>..<p>.SQLit
e750: 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65 20  e supports five 
e760: 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
e770: 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c 6f  nctions as follo
e780: 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f  ws:.</p>..<p>.<o
e790: 6c 3e 0a 3c 6c 69 3e 20 3c 62 3e 64 61 74 65 28  l>.<li> <b>date(
e7a0: 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
e7b0: 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
e7c0: 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
e7d0: 3e 29 3c 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 6c 69  >)</b> </li>.<li
e7e0: 3e 20 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69  > <b>time(</b><i
e7f0: 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
e800: 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
e810: 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
e820: 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 64   </li>.<li> <b>d
e830: 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74  atetime(</b><i>t
e840: 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
e850: 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
e860: 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c  ..</i><b>)</b> <
e870: 2f 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6a 75 6c  /li>.<li> <b>jul
e880: 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69  ianday(</b><i>ti
e890: 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
e8a0: 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
e8b0: 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 20 3c 2f  .</i><b>)</b> </
e8c0: 6c 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 73 74 72 66  li>.<li> <b>strf
e8d0: 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d  time(</b><i>form
e8e0: 61 74 2c 20 74 69 6d 65 73 74 72 69 6e 67 2c 20  at, timestring, 
e8f0: 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
e900: 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
e910: 2f 62 3e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  /b> </li>.</ol>.
e920: 0a 3c 70 3e 0a 41 6c 6c 20 66 69 76 65 20 66 75  .<p>.All five fu
e930: 6e 63 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74  nctions take a t
e940: 69 6d 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e  ime string as an
e950: 20 61 72 67 75 6d 65 6e 74 2e 20 54 68 65 20 74   argument. The t
e960: 69 6d 65 20 73 74 72 69 6e 67 0a 69 73 20 66 6f  ime string.is fo
e970: 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
e980: 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
e990: 2e 20 0a 54 68 65 20 73 74 72 66 74 69 6d 65 28  . .The strftime(
e9a0: 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20  ) function also 
e9b0: 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73  takes a format s
e9c0: 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69 72  tring as its fir
e9d0: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70  st argument..</p
e9e0: 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 28  >..<p>.The date(
e9f0: 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
ea00: 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74  ns the date in t
ea10: 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59  his format: YYYY
ea20: 2d 4d 4d 2d 44 44 2e 20 0a 54 68 65 20 74 69 6d  -MM-DD. .The tim
ea30: 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
ea40: 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73  urns the time as
ea50: 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 54 68 65 20   HH:MM:SS. .The 
ea60: 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74  datetime() funct
ea70: 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59  ion returns "YYY
ea80: 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
ea90: 22 2e 20 0a 54 68 65 20 6a 75 6c 69 61 6e 64 61  ". .The julianda
eaa0: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  y() function ret
eab0: 75 72 6e 73 20 74 68 65 20 0a 3c 61 20 68 72 65  urns the .<a hre
eac0: 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  f="http://en.wik
ead0: 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
eae0: 4a 75 6c 69 61 6e 5f 64 61 79 22 3e 6a 75 6c 69  Julian_day">juli
eaf0: 61 6e 20 64 61 79 3c 2f 61 3e 20 2d 20 0a 6e 75  an day</a> - .nu
eb00: 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
eb10: 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e  ce noon in Green
eb20: 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72  wich on November
eb30: 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a   24, 4714 B.C. .
eb40: 28 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f  (<a href="http:/
eb50: 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72  /en.wikipedia.or
eb60: 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63  g/wiki/Proleptic
eb70: 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  _Gregorian_calen
eb80: 64 61 72 22 3e 0a 50 72 6f 6c 65 70 74 69 63 20  dar">.Proleptic 
eb90: 47 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64  Gregorian calend
eba0: 61 72 3c 2f 61 3e 29 2e 20 0a 54 68 65 20 73 74  ar</a>). .The st
ebb0: 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69 6e 65  rftime() routine
ebc0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74   returns the dat
ebd0: 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63 63 6f  e formatted acco
ebe0: 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20 66 6f  rding to .the fo
ebf0: 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70 65 63  rmat string spec
ec00: 69 66 69 65 64 20 61 73 20 74 68 65 20 66 69 72  ified as the fir
ec10: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 54 68 65  st argument..The
ec20: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73   format string s
ec30: 75 70 70 6f 72 74 73 20 74 68 65 20 6d 6f 73 74  upports the most
ec40: 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75   common substitu
ec50: 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74  tions found in t
ec60: 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 68 74 74  he .<a href="htt
ec70: 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72  p://opengroup.or
ec80: 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37  g/onlinepubs/007
ec90: 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72 66 74  908799/xsh/strft
eca0: 69 6d 65 2e 68 74 6d 6c 22 3e 0a 73 74 72 66 74  ime.html">.strft
ecb0: 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f  ime() function</
ecc0: 61 3e 20 66 72 6f 6d 20 0a 74 68 65 20 73 74 61  a> from .the sta
ecd0: 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20  ndard C library 
ece0: 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62  plus two new sub
ecf0: 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61  stitutions, %f a
ed00: 6e 64 20 25 4a 2e 0a 54 68 65 20 66 6f 6c 6c 6f  nd %J..The follo
ed10: 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65  wing is a comple
ed20: 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64  te list of valid
ed30: 20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73   strftime() subs
ed40: 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a  titutions:.</p>.
ed50: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
ed60: 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
ed70: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
ed80: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
ed90: 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64  .<tr><td><td wid
eda0: 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72  th="10"><td></tr
edb0: 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c  >..<tr><td> %d <
edc0: 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d  td><td> day of m
edd0: 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64  onth: 00.<tr><td
ede0: 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72  > %f <td><td> fr
edf0: 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
ee00: 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64  : SS.SSS.<tr><td
ee10: 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f  > %H <td><td> ho
ee20: 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c  ur: 00-24 .<tr><
ee30: 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20  td> %j <td><td> 
ee40: 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31  day of year: 001
ee50: 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a  -366.<tr><td> %J
ee60: 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e   <td><td> Julian
ee70: 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e   day number.<tr>
ee80: 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e  <td> %m <td><td>
ee90: 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74   month: 01-12.<t
eea0: 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74  r><td> %M <td><t
eeb0: 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39  d> minute: 00-59
eec0: 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64  .<tr><td> %s <td
eed0: 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69  ><td> seconds si
eee0: 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c  nce 1970-01-01.<
eef0: 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c  tr><td> %S <td><
ef00: 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d  td> seconds: 00-
ef10: 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c  59.<tr><td> %w <
ef20: 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77  td><td> day of w
ef30: 65 65 6b 20 30 2d 36 20 77 69 74 68 20 73 75 6e  eek 0-6 with sun
ef40: 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20  day==0.<tr><td> 
ef50: 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b  %W <td><td> week
ef60: 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a   of year: 00-53.
ef70: 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e  <tr><td> %Y <td>
ef80: 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d  <td> year: 0000-
ef90: 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25  9999.<tr><td> %%
efa0: 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61   <td><td> %.</ta
efb0: 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
efc0: 65 3e 0a 0a 3c 70 3e 0a 4e 6f 74 69 63 65 20 74  e>..<p>.Notice t
efd0: 68 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61  hat all other da
efe0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
eff0: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70  tions can be exp
f000: 72 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20  ressed.in terms 
f010: 6f 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c  of strftime():.<
f020: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
f030: 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
f040: 22 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  "0" cellpadding=
f050: 22 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  "0" cellspacing=
f060: 22 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e  "0">.<tr><td><b>
f070: 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20  Function</b><td 
f080: 77 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c  width="30"><td><
f090: 62 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72  b>Equivalent str
f0a0: 66 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e  ftime()</b>.<tr>
f0b0: 3c 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29  <td>   date(...)
f0c0: 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20        <td><td>  
f0d0: 73 74 72 66 74 69 6d 65 28 22 25 59 2d 25 6d 2d  strftime("%Y-%m-
f0e0: 25 64 22 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74  %d", ...).<tr><t
f0f0: 64 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20  d>   time(...)  
f100: 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74      <td><td>  st
f110: 72 66 74 69 6d 65 28 22 25 48 3a 25 4d 3a 25 53  rftime("%H:%M:%S
f120: 22 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e  ", ...).<tr><td>
f130: 20 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29     datetime(...)
f140: 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66    <td><td>  strf
f150: 74 69 6d 65 28 22 25 59 2d 25 6d 2d 25 64 20 25  time("%Y-%m-%d %
f160: 48 3a 25 4d 3a 25 53 22 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S", ...).<
f170: 74 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e  tr><td>   julian
f180: 64 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64  day(...) <td><td
f190: 3e 20 20 73 74 72 66 74 69 6d 65 28 22 25 4a 22  >  strftime("%J"
f1a0: 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a  , ...).</table>.
f1b0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
f1c0: 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73  p>.The only reas
f1d0: 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e  ons for providin
f1e0: 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65  g functions othe
f1f0: 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28  r than strftime(
f200: 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69  ) is.for conveni
f210: 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66  ence and for eff
f220: 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c  iciency..</p>..<
f230: 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c  h3>Time Strings<
f240: 2f 68 33 3e 0a 0a 3c 70 3e 41 20 74 69 6d 65 20  /h3>..<p>A time 
f250: 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69 6e  string can be in
f260: 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
f270: 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c 2f  owing formats:</
f280: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69  p>..<ol>.<li> <i
f290: 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a  >YYYY-MM-DD</i>.
f2a0: 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
f2b0: 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  DD HH:MM</i>.<li
f2c0: 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
f2d0: 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
f2e0: 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20  > <i>YYYY-MM-DD 
f2f0: 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e  HH:MM:SS.SSS</i>
f300: 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
f310: 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c  -DD</i><b>T</b><
f320: 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e  i>HH:MM</i>.<li>
f330: 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
f340: 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
f350: 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM:SS</i>.<li> <
f360: 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
f370: 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d  <b>T</b><i>HH:MM
f380: 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
f390: 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c   <i>HH:MM</i>.<l
f3a0: 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f  i> <i>HH:MM:SS</
f3b0: 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d  i>.<li> <i>HH:MM
f3c0: 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
f3d0: 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e   <b>now</b>.<li>
f3e0: 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c 2f   <i>DDDDDDDDDD</
f3f0: 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 49 6e  i>.</ol>..<p>.In
f400: 20 66 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75   formats 5 throu
f410: 67 68 20 37 2c 20 74 68 65 20 22 54 22 20 69 73  gh 7, the "T" is
f420: 20 61 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61   a literal chara
f430: 63 74 65 72 20 73 65 70 61 72 61 74 69 6e 67 20  cter separating 
f440: 0a 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 68  .the date and th
f450: 65 20 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69  e time, as requi
f460: 72 65 64 20 62 79 20 0a 3c 61 20 68 72 65 66 3d  red by .<a href=
f470: 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e  "http://www.w3c.
f480: 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65  org/TR/NOTE-date
f490: 74 69 6d 65 22 3e 49 53 4f 2d 38 36 30 31 3c 2f  time">ISO-8601</
f4a0: 61 3e 2e 20 0a 46 6f 72 6d 61 74 73 20 38 20 74  a>. .Formats 8 t
f4b0: 68 72 6f 75 67 68 20 31 30 20 74 68 61 74 20 73  hrough 10 that s
f4c0: 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20 74 69  pecify only a ti
f4d0: 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61 74 65  me assume a date
f4e0: 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e   of .2000-01-01.
f4f0: 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68 65 20   Format 11, the 
f500: 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73  string 'now', is
f510: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
f520: 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64 61 74  the .current dat
f530: 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20 6f 62  e and time as ob
f540: 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20  tained from the 
f550: 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d 65 74  xCurrentTime met
f560: 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69  hod.of the [sqli
f570: 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20  te3_vfs] object 
f580: 69 6e 20 75 73 65 2e 0a 3c 61 20 68 72 65 66 3d  in use..<a href=
f590: 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  "http://en.wikip
f5a0: 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f  edia.org/wiki/Co
f5b0: 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72  ordinated_Univer
f5c0: 73 61 6c 5f 54 69 6d 65 22 3e 0a 55 6e 69 76 65  sal_Time">.Unive
f5d0: 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
f5e0: 20 54 69 6d 65 20 28 55 54 43 29 3c 2f 61 3e 20   Time (UTC)</a> 
f5f0: 69 73 20 75 73 65 64 2e 20 0a 46 6f 72 6d 61 74  is used. .Format
f600: 20 31 32 20 69 73 20 74 68 65 20 0a 3c 61 20 68   12 is the .<a h
f610: 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77  ref="http://en.w
f620: 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
f630: 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 22 3e 6a 75  i/Julian_day">ju
f640: 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 3c  lian day number<
f650: 2f 61 3e 0a 65 78 70 72 65 73 73 65 64 20 61 73  /a>.expressed as
f660: 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
f670: 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c  t value..</p>..<
f680: 68 33 3e 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33  h3>Modifiers</h3
f690: 3e 0a 0a 3c 70 3e 54 68 65 20 74 69 6d 65 20 73  >..<p>The time s
f6a0: 74 72 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c  tring can be fol
f6b0: 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
f6c0: 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20   more modifiers 
f6d0: 74 68 61 74 20 0a 61 6c 74 65 72 20 74 68 65 20  that .alter the 
f6e0: 64 61 74 65 20 6f 72 20 61 6c 74 65 72 20 74 68  date or alter th
f6f0: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
f700: 20 6f 66 20 74 68 65 20 64 61 74 65 2e 20 0a 54   of the date. .T
f710: 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64  he available mod
f720: 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66 6f  ifiers are as fo
f730: 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows.</p>..<ol>
f740: 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c  .<li> NNN days.<
f750: 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c  li> NNN hours.<l
f760: 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c  i> NNN minutes.<
f770: 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63  li> NNN.NNNN sec
f780: 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f  onds.<li> NNN mo
f790: 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65  nths.<li> NNN ye
f7a0: 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ars.<li> start o
f7b0: 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61  f month.<li> sta
f7c0: 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20  rt of year.<li> 
f7d0: 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69  start of day.<li
f7e0: 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e  > weekday N.<li>
f7f0: 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20   unixepoch.<li> 
f800: 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75  localtime.<li> u
f810: 74 63 20 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  tc .</ol>..<p>Th
f820: 65 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69  e first six modi
f830: 66 69 65 72 73 20 28 31 20 74 68 72 6f 75 67 68  fiers (1 through
f840: 20 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20   6) .simply add 
f850: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61 6d  the specified am
f860: 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20  ount of time to 
f870: 74 68 65 20 64 61 74 65 20 0a 73 70 65 63 69 66  the date .specif
f880: 69 65 64 20 62 79 20 74 68 65 20 70 72 65 63 65  ied by the prece
f890: 64 69 6e 67 20 74 69 6d 65 73 74 72 69 6e 67 2e  ding timestring.
f8a0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 73 74  </p>..<p>The "st
f8b0: 61 72 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72  art of" modifier
f8c0: 73 20 28 37 20 74 68 72 6f 75 67 68 20 39 29 20  s (7 through 9) 
f8d0: 73 68 69 66 74 20 74 68 65 20 64 61 74 65 20 62  shift the date b
f8e0: 61 63 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65  ackwards .to the
f8f0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
f900: 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c  e current month,
f910: 20 79 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70   year or day.</p
f920: 3e 0a 0a 3c 70 3e 54 68 65 20 22 77 65 65 6b 64  >..<p>The "weekd
f930: 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
f940: 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
f950: 6f 72 77 61 72 64 20 74 6f 20 74 68 65 20 6e 65  orward to the ne
f960: 78 74 20 64 61 74 65 20 0a 77 68 65 72 65 20 74  xt date .where t
f970: 68 65 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65  he weekday numbe
f980: 72 20 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69  r is N. Sunday i
f990: 73 20 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31  s 0, Monday is 1
f9a0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c  , and so forth.<
f9b0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 22 75 6e 69  /p>..<p>The "uni
f9c0: 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72  xepoch" modifier
f9d0: 20 28 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73   (11) only works
f9e0: 20 69 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65   if it immediate
f9f0: 6c 79 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69  ly follows .a ti
fa00: 6d 65 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  mestring in the 
fa10: 44 44 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61  DDDDDDDDDD forma
fa20: 74 2e 20 0a 54 68 69 73 20 6d 6f 64 69 66 69 65  t. .This modifie
fa30: 72 20 63 61 75 73 65 73 20 74 68 65 20 44 44 44  r causes the DDD
fa40: 44 44 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e  DDDDDDD to be in
fa50: 74 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61  terpreted not .a
fa60: 73 20 61 20 6a 75 6c 69 61 6e 20 64 61 79 20 6e  s a julian day n
fa70: 75 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d  umber as it norm
fa80: 61 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62  ally would be, b
fa90: 75 74 20 61 73 0a 3c 61 20 68 72 65 66 3d 22 68  ut as.<a href="h
faa0: 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
fab0: 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78  ia.org/wiki/Unix
fac0: 5f 74 69 6d 65 22 3e 55 6e 69 78 20 54 69 6d 65  _time">Unix Time
fad0: 3c 2f 61 3e 20 2d 20 74 68 65 20 0a 6e 75 6d 62  </a> - the .numb
fae0: 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
faf0: 6e 63 65 20 31 39 37 30 2e 3c 2f 70 3e 0a 0a 3c  nce 1970.</p>..<
fb00: 70 3e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65  p>The "localtime
fb10: 22 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20  " modifier (12) 
fb20: 61 64 6a 75 73 74 73 20 74 68 65 20 70 72 65 76  adjusts the prev
fb30: 69 6f 75 73 20 74 69 6d 65 0a 73 74 72 69 6e 67  ious time.string
fb40: 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70   so that it disp
fb50: 6c 61 79 73 20 74 68 65 20 63 6f 72 72 65 63 74  lays the correct
fb60: 20 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 22 75 74   local time. "ut
fb70: 63 22 20 75 6e 64 6f 65 73 20 74 68 69 73 2e 3c  c" undoes this.<
fb80: 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65  /p>..<h3>Example
fb90: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6d 70 75  s</h3>..<p>Compu
fba0: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  te the current d
fbb0: 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ate.<p>..<blockq
fbc0: 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65  uote>SELECT date
fbd0: 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71  ('now');</blockq
fbe0: 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74  uote>..<p>Comput
fbf0: 65 20 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f  e the last day o
fc00: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f  f the current mo
fc10: 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  nth.</p>..<block
fc20: 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74  quote>SELECT dat
fc30: 65 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f  e('now','start o
fc40: 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e  f month','+1 mon
fc50: 74 68 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c  th','-1 day');.<
fc60: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
fc70: 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  >Compute the dat
fc80: 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e  e and time given
fc90: 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d   a unix timestam
fca0: 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f 70  p 1092941466.</p
fcb0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
fcc0: 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65 74      SELECT datet
fcd0: 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c 20  ime(1092941466, 
fce0: 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c 2f  'unixepoch');.</
fcf0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
fd00: 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74 65  Compute the date
fd10: 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20   and time given 
fd20: 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70  a unix timestamp
fd30: 20 31 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64   1092941466, and
fd40: 20 0a 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72   .compensate for
fd50: 20 79 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65   your local time
fd60: 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  zone.</p>..<bloc
fd70: 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
fd80: 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39 34   datetime(109294
fd90: 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68  1466, 'unixepoch
fda0: 27 2c 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b  ', 'localtime');
fdb0: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
fdc0: 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63  <p>Compute the c
fdd0: 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65  urrent unix time
fde0: 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  stamp.</p>..<blo
fdf0: 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
fe00: 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
fe10: 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  'now');.</blockq
fe20: 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74  uote>..<p>Comput
fe30: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
fe40: 64 61 79 73 20 73 69 6e 63 65 20 74 68 65 20 73  days since the s
fe50: 69 67 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53  igning of the US
fe60: 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20   Declaration.of 
fe70: 49 6e 64 65 70 65 6e 64 65 6e 74 2e 3c 2f 70 3e  Independent.</p>
fe80: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
fe90: 20 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61   SELECT julianda
fea0: 79 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61  y('now') - julia
feb0: 6e 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34  nday('1776-07-04
fec0: 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ');.</blockquote
fed0: 3e 0a 0a 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  >..<p>Compute th
fee0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  e number of seco
fef0: 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61 72 74  nds since a part
ff00: 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20 69 6e  icular moment in
ff10: 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f   2004:</p>..<blo
ff20: 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43  ckquote>.  SELEC
ff30: 54 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c  T strftime('%s',
ff40: 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74 69 6d  'now') - strftim
ff50: 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30 31 2d  e('%s','2004-01-
ff60: 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b 0a 3c  01 02:34:56');.<
ff70: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
ff80: 3e 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  >.Compute the da
ff90: 74 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  te of the first 
ffa0: 54 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62  Tuesday in Octob
ffb0: 65 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65  er.for the curre
ffc0: 6e 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c  nt year..</p>..<
ffd0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
ffe0: 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c  LECT date('now',
fff0: 27 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c  'start of year',
10000 27 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65  '+9 months','wee
10010 6b 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63  kday 2');.</bloc
10020 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 43 6f 6d 70  kquote>..<p>Comp
10030 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
10040 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
10050 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
10060 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
10070 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
10080 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
10090 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
100a0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
100b0 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
100c0 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
100d0 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
100e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 33  blockquote>..<h3
100f0 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42 75 67  >Caveats And Bug
10100 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63  s</h3>..<p>The c
10110 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f  omputation of lo
10120 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e 64 73  cal time depends
10130 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68 65 20   heavily on the 
10140 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63  whim .of politic
10150 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68 75 73  ians and is thus
10160 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 67 65   difficult to ge
10170 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20 0a 61  t correct for .a
10180 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 49 6e 20 74  ll locales. In t
10190 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  his implementati
101a0 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64  on, the standard
101b0 20 43 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63   C library .func
101c0 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72  tion localtime_r
101d0 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 73  () is used to as
101e0 73 69 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63  sist in the calc
101f0 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61  ulation of .loca
10200 6c 20 74 69 6d 65 2e 20 20 54 68 65 20 0a 6c 6f  l time.  The .lo
10210 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75  caltime_r() C fu
10220 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20  nction normally 
10230 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79  only works for y
10240 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37  ears.between 197
10250 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20  0 and 2037. For 
10260 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
10270 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65  is range, SQLite
10280 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61   .attempts to ma
10290 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20  p the year into 
102a0 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65  an equivalent ye
102b0 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20  ar within .this 
102c0 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61  range, do the ca
102d0 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20  lculation, then 
102e0 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63  map the year bac
102f0 6b 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 44 61 74 65  k.</p>...<p>Date
10300 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 64 6f   computations do
10310 20 6e 6f 74 20 67 69 76 65 20 63 6f 72 72 65 63   not give correc
10320 74 20 72 65 73 75 6c 74 73 20 66 6f 72 20 64 61  t results for da
10330 74 65 73 20 0a 62 65 66 6f 72 65 20 4a 75 6c 69  tes .before Juli
10340 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 20 30 20  an day number 0 
10350 28 2d 34 37 31 33 2d 31 31 2d 32 34 20 31 32 3a  (-4713-11-24 12:
10360 30 30 3a 30 30 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e  00:00).</p>..<p>
10370 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
10380 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79  s platforms only
10390 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74   support one set
103a0 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a   of DST rules. .
103b0 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f  Vista only suppo
103c0 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f  rts two. Therefo
103d0 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61  re, on these pla
103e0 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69  tforms, .histori
103f0 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74  cal DST calculat
10400 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63  ions will be inc
10410 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61  orrect. .For exa
10420 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c  mple, in the US,
10430 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54   in 2007 the DST
10440 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20   rules changed. 
10450 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  .Non-Vista Windo
10460 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70  ws platforms app
10470 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20  ly the new 2007 
10480 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c  DST rules .to al
10490 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73  l previous years
104a0 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20   as well. Vista 
104b0 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65  does somewhat be
104c0 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73  tter.getting res
104d0 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63  ults correct bac
104e0 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20  k to 1986, when 
104f0 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61  the rules were a
10500 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e  lso changed.</p>
10510 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61  ..<p>All interna
10520 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61  l computations a
10530 73 73 75 6d 65 20 74 68 65 20 0a 3c 61 20 68 72  ssume the .<a hr
10540 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  ef="http://en.wi
10550 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
10560 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e  /Gregorian_calen
10570 64 61 72 22 3e 0a 47 72 65 67 6f 72 69 61 6e 20  dar">.Gregorian 
10580 63 61 6c 65 6e 64 61 72 3c 2f 61 3e 20 73 79 73  calendar</a> sys
10590 74 65 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  tem.  It is also
105a0 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 65 76   assumed that ev
105b0 65 72 79 0a 64 61 79 20 69 73 20 65 78 61 63 74  ery.day is exact
105c0 6c 79 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73  ly 86400 seconds
105d0 20 69 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70   in duration.</p
105e0 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
105f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10630 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
10640 7b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63 74  {Aggregate Funct
10650 69 6f 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 61  ions} aggfunc {a
10660 67 67 66 75 6e 63 7d 0a 3c 2f 74 63 6c 3e 0a 0a  ggfunc}.</tcl>..
10670 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74  <p>.The aggregat
10680 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77  e functions show
10690 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69  n below are avai
106a0 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
106b0 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67  .  Additional.ag
106c0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
106d0 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d  s written in C m
106e0 61 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e  ay be added usin
106f0 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f  g the .[sqlite3_
10700 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
10710 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a  )]</a>.API.</p>.
10720 0a 3c 70 3e 0a 49 6e 20 61 6e 79 20 61 67 67 72  .<p>.In any aggr
10730 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74  egate function t
10740 68 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67  hat takes a sing
10750 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61  le argument, tha
10760 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62  t argument.can b
10770 65 20 70 72 65 63 65 65 64 65 64 20 62 79 20 74  e preceeded by t
10780 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49  he keyword DISTI
10790 4e 43 54 2e 20 20 49 6e 20 73 75 63 68 20 63 61  NCT.  In such ca
107a0 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65  ses, duplicate.e
107b0 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74  lements are filt
107c0 65 72 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  ered before bein
107d0 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68  g passed into th
107e0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
107f0 74 69 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d 70 6c  tion..For exampl
10800 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  e, the function 
10810 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74 20  "count(distinct 
10820 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  X)" will return 
10830 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64 69  the number.of di
10840 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f 66  stinct values of
10850 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65 61   column X instea
10860 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20 6e  d of the total n
10870 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c  umber of non-nul
10880 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c 75  l.values in colu
10890 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 61 62  mn X..</p>..<tab
108a0 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c  le border=0 cell
108b0 70 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c  padding=10>.<tcl
108c0 3e 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28 58  >.funcdef {avg(X
108d0 29 7d 20 7b 7d 20 7b 0a 20 20 52 65 74 75 72 6e  )} {} {.  Return
108e0 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
108f0 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
10900 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
10910 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 53  in a.  group.  S
10920 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76  tring and BLOB v
10930 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  alues that do no
10940 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62  t look like numb
10950 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70  ers are.  interp
10960 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 54 68  reted as 0..  Th
10970 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
10980 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c  ) is always a fl
10990 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
109a0 75 65 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20  ue even if all. 
109b0 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65   inputs are inte
109c0 67 65 72 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  gers..}..funcdef
109d0 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74   {count(X) count
109e0 28 2a 29 7d 20 7b 7d 20 7b 0a 20 20 54 68 65 20  (*)} {} {.  The 
109f0 66 69 72 73 74 20 66 6f 72 6d 20 72 65 74 75 72  first form retur
10a00 6e 20 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65  n a count of the
10a10 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
10a20 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e  .  that <i>X</i>
10a30 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20   is not NULL in 
10a40 61 20 67 72 6f 75 70 2e 20 20 54 68 65 20 73 65  a group.  The se
10a50 63 6f 6e 64 20 66 6f 72 6d 20 28 77 69 74 68 20  cond form (with 
10a60 6e 6f 20 61 72 67 75 6d 65 6e 74 29 0a 20 20 72  no argument).  r
10a70 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
10a80 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
10a90 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
10aa0 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f 75 70 5f  .funcdef {group_
10ab0 63 6f 6e 63 61 74 28 58 29 20 67 72 6f 75 70 5f  concat(X) group_
10ac0 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20 7b 7d 20  concat(X,Y)} {} 
10ad0 7b 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20 69  {.  The result i
10ae0 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  s a string which
10af0 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65 6e   is the concaten
10b00 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20 6e  ation of.  all n
10b10 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 6f  on-NULL values o
10b20 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 49 66 20  f <i>X</i>.  If 
10b30 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59 3c 2f  parameter <i>Y</
10b40 69 3e 20 69 73 20 74 68 65 20 73 65 70 61 72 61  i> is the separa
10b50 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e  tor.  between in
10b60 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c  stances of <i>X<
10b70 2f 69 3e 2e 20 20 41 20 63 6f 6d 6d 61 20 28 22  /i>.  A comma ("
10b80 2c 22 29 20 69 73 20 75 73 65 64 20 61 73 20 74  ,") is used as t
10b90 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69  he separator.  i
10ba0 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d  f <i>Y</i> is om
10bb0 69 74 74 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65  itted..}..funcde
10bc0 66 20 7b 6d 61 78 28 58 29 7d 20 7b 6d 61 78 41  f {max(X)} {maxA
10bd0 67 67 46 75 6e 63 20 61 67 67 5f 6d 61 78 7d 20  ggFunc agg_max} 
10be0 7b 0a 20 20 52 65 74 75 72 6e 20 74 68 65 20 6d  {.  Return the m
10bf0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20  aximum value of 
10c00 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68  all values in th
10c10 65 20 67 72 6f 75 70 2e 0a 20 20 54 68 65 20 75  e group..  The u
10c20 73 75 61 6c 20 73 6f 72 74 20 6f 72 64 65 72 20  sual sort order 
10c30 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
10c40 6d 69 6e 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  mine the maximum
10c50 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69  ..}..funcdef {mi
10c60 6e 28 58 29 7d 20 7b 6d 69 6e 41 67 67 46 75 6e  n(X)} {minAggFun
10c70 63 20 61 67 67 5f 6d 69 6e 7d 20 7b 0a 20 20 52  c agg_min} {.  R
10c80 65 74 75 72 6e 20 74 68 65 20 6d 69 6e 69 6d 75  eturn the minimu
10c90 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  m non-NULL value
10ca0 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73 20 69   of all values i
10cb0 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 54  n the group..  T
10cc0 68 65 20 75 73 75 61 6c 20 73 6f 72 74 20 6f 72  he usual sort or
10cd0 64 65 72 20 69 73 20 75 73 65 64 20 74 6f 20 64  der is used to d
10ce0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6d 69 6e  etermine the min
10cf0 69 6d 75 6d 2e 20 20 0a 20 20 4e 55 4c 4c 20 69  imum.  .  NULL i
10d00 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64 0a  s only returned.
10d10 20 20 69 66 20 61 6c 6c 20 76 61 6c 75 65 73 20    if all values 
10d20 69 6e 20 74 68 65 20 67 72 6f 75 70 20 61 72 65  in the group are
10d30 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65   NULL..}..funcde
10d40 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28  f {sum(X) total(
10d50 58 29 7d 20 7b 73 75 6d 46 75 6e 63 20 73 75 6d  X)} {sumFunc sum
10d60 20 74 6f 74 61 6c 7d 20 7b 0a 20 20 52 65 74 75   total} {.  Retu
10d70 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20 73  rn the numeric s
10d80 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  um of all non-NU
10d90 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  LL values in the
10da0 20 67 72 6f 75 70 2e 0a 20 20 49 66 20 74 68 65   group..  If the
10db0 72 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55  re are no non-NU
10dc0 4c 4c 20 69 6e 70 75 74 20 72 6f 77 73 20 74 68  LL input rows th
10dd0 65 6e 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73  en sum() returns
10de0 0a 20 20 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61  .  NULL but tota
10df0 6c 28 29 20 72 65 74 75 72 6e 73 20 30 2e 30 2e  l() returns 0.0.
10e00 0a 20 20 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e  .  NULL is not n
10e10 6f 72 6d 61 6c 6c 79 20 61 20 68 65 6c 70 66 75  ormally a helpfu
10e20 6c 20 72 65 73 75 6c 74 20 66 6f 72 20 74 68 65  l result for the
10e30 20 73 75 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a   sum of no rows.
10e40 20 20 62 75 74 20 74 68 65 20 53 51 4c 20 73 74    but the SQL st
10e50 61 6e 64 61 72 64 20 72 65 71 75 69 72 65 73 20  andard requires 
10e60 69 74 20 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65  it and most othe
10e70 72 0a 20 20 53 51 4c 20 64 61 74 61 62 61 73 65  r.  SQL database
10e80 20 65 6e 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65   engines impleme
10e90 6e 74 20 73 75 6d 28 29 20 74 68 61 74 20 77 61  nt sum() that wa
10ea0 79 20 73 6f 20 53 51 4c 69 74 65 20 64 6f 65 73  y so SQLite does
10eb0 20 69 74 20 69 6e 20 74 68 65 0a 20 20 73 61 6d   it in the.  sam
10ec0 65 20 77 61 79 20 69 6e 20 6f 72 64 65 72 20 74  e way in order t
10ed0 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e  o be compatible.
10ee0 20 20 20 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64     The non-stand
10ef0 61 72 64 20 74 6f 74 61 6c 28 29 20 66 75 6e 63  ard total() func
10f00 74 69 6f 6e 0a 20 20 69 73 20 70 72 6f 76 69 64  tion.  is provid
10f10 65 64 20 61 73 20 61 20 63 6f 6e 76 65 6e 69 65  ed as a convenie
10f20 6e 74 20 77 61 79 20 74 6f 20 77 6f 72 6b 20 61  nt way to work a
10f30 72 6f 75 6e 64 20 74 68 69 73 20 64 65 73 69 67  round this desig
10f40 6e 20 70 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74  n problem.  in t
10f50 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e  he SQL language.
10f60 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 54 68 65 20 72  </p>..  <p>The r
10f70 65 73 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29  esult of total()
10f80 20 69 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f   is always a flo
10f90 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
10fa0 65 2e 0a 20 20 54 68 65 20 72 65 73 75 6c 74 20  e..  The result 
10fb0 6f 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69  of sum() is an i
10fc0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
10fd0 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70  all non-NULL inp
10fe0 75 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73  uts are integers
10ff0 2e 0a 20 20 49 66 20 61 6e 79 20 69 6e 70 75 74  ..  If any input
11000 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
11010 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
11020 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e  or a NULL.  then
11030 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
11040 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
11050 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69  value.  which mi
11060 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78  ght be an approx
11070 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  imation to the t
11080 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20  rue sum.</p>..  
11090 3c 70 3e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68  <p>Sum() will th
110a0 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20  row an "integer 
110b0 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74  overflow" except
110c0 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74  ion if all input
110d0 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73  s.  are integers
110e0 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61   or NULL.  and a
110f0 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
11100 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79  ow occurs at any
11110 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68   point during th
11120 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20  e computation.. 
11130 20 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20 74   Total() never t
11140 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69  hrows an excepti
11150 6f 6e 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74  on..}.</tcl>.</t
11160 61 62 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  able>..<tcl>.###
11170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
111b0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
111c0 69 6f 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72  ion INSERT inser
111d0 74 20 7b 49 4e 53 45 52 54 20 49 4e 53 45 52 54  t {INSERT INSERT
111e0 73 7d 0a 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  s}..Syntax {sql-
111f0 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 49 4e 53  statement} {.INS
11200 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63  ERT [OR <conflic
11210 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49 4e  t-algorithm>] IN
11220 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  TO [<database-na
11230 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
11240 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c 69  me> [(<column-li
11250 73 74 3e 29 5d 20 56 41 4c 55 45 53 28 3c 76 61  st>)] VALUES(<va
11260 6c 75 65 2d 6c 69 73 74 3e 29 20 7c 0a 49 4e 53  lue-list>) |.INS
11270 45 52 54 20 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63  ERT [OR <conflic
11280 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 5d 20 49 4e  t-algorithm>] IN
11290 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  TO [<database-na
112a0 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
112b0 6d 65 3e 20 5b 28 3c 63 6f 6c 75 6d 6e 2d 6c 69  me> [(<column-li
112c0 73 74 3e 29 5d 20 3c 73 65 6c 65 63 74 2d 73 74  st>)] <select-st
112d0 61 74 65 6d 65 6e 74 3e 0a 49 4e 53 45 52 54 20  atement>.INSERT 
112e0 5b 4f 52 20 3c 63 6f 6e 66 6c 69 63 74 2d 61 6c  [OR <conflict-al
112f0 67 6f 72 69 74 68 6d 3e 5d 20 49 4e 54 4f 20 5b  gorithm>] INTO [
11300 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
11310 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20  .] <table-name> 
11320 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 0a 7d  DEFAULT VALUES.}
11330 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
11340 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
11350 20 63 6f 6d 65 73 20 69 6e 20 74 77 6f 20 62 61   comes in two ba
11360 73 69 63 20 66 6f 72 6d 73 2e 20 20 54 68 65 20  sic forms.  The 
11370 66 69 72 73 74 20 66 6f 72 6d 0a 28 77 69 74 68  first form.(with
11380 20 74 68 65 20 22 56 41 4c 55 45 53 22 20 6b 65   the "VALUES" ke
11390 79 77 6f 72 64 29 20 63 72 65 61 74 65 73 20 61  yword) creates a
113a0 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
113b0 69 6e 20 61 6e 20 65 78 69 73 74 69 6e 67 20 74  in an existing t
113c0 61 62 6c 65 2e 0a 49 66 20 6e 6f 20 63 6f 6c 75  able..If no colu
113d0 6d 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69  mn-list is speci
113e0 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75  fied then the nu
113f0 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d  mber of values m
11400 75 73 74 0a 62 65 20 74 68 65 20 73 61 6d 65 20  ust.be the same 
11410 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
11420 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
11430 74 61 62 6c 65 2e 20 20 49 66 20 61 20 63 6f 6c  table.  If a col
11440 75 6d 6e 2d 6c 69 73 74 0a 69 73 20 73 70 65 63  umn-list.is spec
11450 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20  ified, then the 
11460 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
11470 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65 20   must match the 
11480 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66  number of.specif
11490 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 43 6f  ied columns.  Co
114a0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
114b0 6c 65 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61  le that do not a
114c0 70 70 65 61 72 20 69 6e 20 74 68 65 0a 63 6f 6c  ppear in the.col
114d0 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 66 69 6c  umn list are fil
114e0 6c 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66  led with the def
114f0 61 75 6c 74 20 76 61 6c 75 65 2c 20 6f 72 20 77  ault value, or w
11500 69 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 0a 64  ith NULL if no.d
11510 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
11520 73 70 65 63 69 66 69 65 64 2e 0a 3c 2f 70 3e 0a  specified..</p>.
11530 0a 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66  .<p>The second f
11540 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52  orm of the INSER
11550 54 20 73 74 61 74 65 6d 65 6e 74 20 74 61 6b 65  T statement take
11560 73 20 69 74 20 64 61 74 61 20 66 72 6f 6d 20 61  s it data from a
11570 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e  .SELECT statemen
11580 74 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  t.  The number o
11590 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
115a0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 53   result of the.S
115b0 45 4c 45 43 54 20 6d 75 73 74 20 65 78 61 63 74  ELECT must exact
115c0 6c 79 20 6d 61 74 63 68 20 74 68 65 20 6e 75 6d  ly match the num
115d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
115e0 6e 20 74 68 65 20 74 61 62 6c 65 20 69 66 0a 6e  n the table if.n
115f0 6f 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 69 73  o column list is
11600 20 73 70 65 63 69 66 69 65 64 2c 20 6f 72 20 69   specified, or i
11610 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65  t must match the
11620 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11630 6e 73 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 63  ns.name in the c
11640 6f 6c 75 6d 6e 20 6c 69 73 74 2e 20 20 41 20 6e  olumn list.  A n
11650 65 77 20 65 6e 74 72 79 20 69 73 20 6d 61 64 65  ew entry is made
11660 20 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 66 6f   in the table.fo
11670 72 20 65 76 65 72 79 20 72 6f 77 20 6f 66 20 74  r every row of t
11680 68 65 20 53 45 4c 45 43 54 20 72 65 73 75 6c 74  he SELECT result
11690 2e 20 20 54 68 65 20 53 45 4c 45 43 54 20 6d 61  .  The SELECT ma
116a0 79 20 62 65 20 73 69 6d 70 6c 65 0a 6f 72 20 63  y be simple.or c
116b0 6f 6d 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  ompound.</p>..<p
116c0 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  >The optional co
116d0 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c  nflict-clause al
116e0 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69 66 69  lows the specifi
116f0 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61 6c 74  cation of an alt
11700 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
11710 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
11720 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
11730 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20  m to use during 
11740 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61 6e 64  this one command
11750 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
11760 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e  n titled.[ON CON
11770 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
11780 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
11790 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  n..For compatibi
117a0 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c  lity with MySQL,
117b0 20 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c 6f   the parser allo
117c0 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68  ws the use of th
117d0 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72 64  e.single keyword
117e0 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 72   <a href="lang_r
117f0 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45 50  eplace.html">REP
11800 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20 0a  LACE</a> as an .
11810 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45 52  alias for "INSER
11820 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a 3c  T OR REPLACE"..<
11830 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  /p>..<tcl>.#####
11840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11880 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
11890 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  n {ON CONFLICT c
118a0 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20  lause} conflict 
118b0 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73  {{conflict claus
118c0 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d  e} {ON CONFLICT}
118d0 7d 0a 0a 53 79 6e 74 61 78 20 7b 63 6f 6e 66 6c  }..Syntax {confl
118e0 69 63 74 2d 63 6c 61 75 73 65 7d 20 7b 0a 4f 4e  ict-clause} {.ON
118f0 20 43 4f 4e 46 4c 49 43 54 20 3c 63 6f 6e 66 6c   CONFLICT <confl
11900 69 63 74 2d 61 6c 67 6f 72 69 74 68 6d 3e 0a 7d  ict-algorithm>.}
11910 20 7b 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72   {conflict-algor
11920 69 74 68 6d 7d 20 7b 0a 52 4f 4c 4c 42 41 43 4b  ithm} {.ROLLBACK
11930 20 7c 20 41 42 4f 52 54 20 7c 20 46 41 49 4c 20   | ABORT | FAIL 
11940 7c 20 49 47 4e 4f 52 45 20 7c 20 52 45 50 4c 41  | IGNORE | REPLA
11950 43 45 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  CE.}.</tcl>..<p>
11960 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  The ON CONFLICT 
11970 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 61 20  clause is not a 
11980 73 65 70 61 72 61 74 65 20 53 51 4c 20 63 6f 6d  separate SQL com
11990 6d 61 6e 64 2e 20 20 49 74 20 69 73 20 61 0a 6e  mand.  It is a.n
119a0 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6c 61 75  on-standard clau
119b0 73 65 20 74 68 61 74 20 63 61 6e 20 61 70 70 65  se that can appe
119c0 61 72 20 69 6e 20 6d 61 6e 79 20 6f 74 68 65 72  ar in many other
119d0 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2e 0a 49   SQL commands..I
119e0 74 20 69 73 20 67 69 76 65 6e 20 69 74 73 20 6f  t is given its o
119f0 77 6e 20 73 65 63 74 69 6f 6e 20 69 6e 20 74 68  wn section in th
11a00 69 73 20 64 6f 63 75 6d 65 6e 74 20 62 65 63 61  is document beca
11a10 75 73 65 20 69 74 20 69 73 20 6e 6f 74 0a 70 61  use it is not.pa
11a20 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
11a30 51 4c 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65  QL and therefore
11a40 20 6d 69 67 68 74 20 6e 6f 74 20 62 65 20 66 61   might not be fa
11a50 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  miliar.</p>..<p>
11a60 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72 20 74  The syntax for t
11a70 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  he ON CONFLICT c
11a80 6c 61 75 73 65 20 69 73 20 61 73 20 73 68 6f 77  lause is as show
11a90 6e 20 61 62 6f 76 65 20 66 6f 72 0a 74 68 65 20  n above for.the 
11aa0 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d  CREATE TABLE com
11ab0 6d 61 6e 64 2e 20 20 46 6f 72 20 74 68 65 20 49  mand.  For the I
11ac0 4e 53 45 52 54 20 61 6e 64 0a 55 50 44 41 54 45  NSERT and.UPDATE
11ad0 20 63 6f 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b   commands, the k
11ae0 65 79 77 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46  eywords "ON CONF
11af0 4c 49 43 54 22 20 61 72 65 20 72 65 70 6c 61 63  LICT" are replac
11b00 65 64 20 62 79 20 22 4f 52 22 2c 20 74 6f 20 6d  ed by "OR", to m
11b10 61 6b 65 0a 74 68 65 20 73 79 6e 74 61 78 20 73  ake.the syntax s
11b20 65 65 6d 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c  eem more natural
11b30 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
11b40 69 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45  instead of."INSE
11b50 52 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49  RT ON CONFLICT I
11b60 47 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20 22  GNORE" we have "
11b70 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45  INSERT OR IGNORE
11b80 22 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20  "..The keywords 
11b90 63 68 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d  change but the m
11ba0 65 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c  eaning of the cl
11bb0 61 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65  ause is the same
11bc0 0a 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e  .either way.</p>
11bd0 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
11be0 4c 49 43 54 20 63 6c 61 75 73 65 20 73 70 65 63  LICT clause spec
11bf0 69 66 69 65 73 20 61 6e 20 61 6c 67 6f 72 69 74  ifies an algorit
11c00 68 6d 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  hm used to resol
11c10 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ve.constraint co
11c20 6e 66 6c 69 63 74 73 2e 20 20 54 68 65 72 65 20  nflicts.  There 
11c30 61 72 65 20 66 69 76 65 20 63 68 6f 69 63 65 73  are five choices
11c40 3a 20 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52  : ROLLBACK, ABOR
11c50 54 2c 0a 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c  T,.FAIL, IGNORE,
11c60 20 61 6e 64 20 52 45 50 4c 41 43 45 2e 20 54 68   and REPLACE. Th
11c70 65 20 64 65 66 61 75 6c 74 20 61 6c 67 6f 72 69  e default algori
11c80 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20 54  thm is ABORT.  T
11c90 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65 79  his.is what they
11ca0 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c 3e   mean:</p>..<dl>
11cb0 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43 4b  .<dt><b>ROLLBACK
11cc0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
11cd0 3e 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69  >When a constrai
11ce0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
11cf0 75 72 73 2c 20 61 6e 20 69 6d 6d 65 64 69 61 74  urs, an immediat
11d00 65 20 52 4f 4c 4c 42 41 43 4b 0a 6f 63 63 75 72  e ROLLBACK.occur
11d10 73 2c 20 74 68 75 73 20 65 6e 64 69 6e 67 20 74  s, thus ending t
11d20 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
11d30 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
11d40 63 6f 6d 6d 61 6e 64 20 61 62 6f 72 74 73 0a 77  command aborts.w
11d50 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64  ith a return cod
11d60 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 4f 4e 53  e of SQLITE_CONS
11d70 54 52 41 49 4e 54 2e 20 20 49 66 20 6e 6f 20 74  TRAINT.  If no t
11d80 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63  ransaction is.ac
11d90 74 69 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e  tive (other than
11da0 20 74 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61   the implied tra
11db0 6e 73 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73  nsaction that is
11dc0 20 63 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72   created on ever
11dd0 79 0a 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20  y.command) then 
11de0 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 77  this algorithm w
11df0 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
11e00 20 41 42 4f 52 54 2e 3c 2f 70 3e 3c 2f 64 64 3e   ABORT.</p></dd>
11e10 0a 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f  ..<dt><b>ABORT</
11e20 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57  b></dt>.<dd><p>W
11e30 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  hen a constraint
11e40 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
11e50 73 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 62  s, the command b
11e60 61 63 6b 73 20 6f 75 74 0a 61 6e 79 20 70 72 69  acks out.any pri
11e70 6f 72 20 63 68 61 6e 67 65 73 20 69 74 20 6d 69  or changes it mi
11e80 67 68 74 20 68 61 76 65 20 6d 61 64 65 20 61 6e  ght have made an
11e90 64 20 61 62 6f 72 74 73 20 77 69 74 68 20 61 20  d aborts with a 
11ea0 72 65 74 75 72 6e 20 63 6f 64 65 0a 6f 66 20 53  return code.of S
11eb0 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
11ec0 2e 20 20 42 75 74 20 6e 6f 20 52 4f 4c 4c 42 41  .  But no ROLLBA
11ed0 43 4b 20 69 73 20 65 78 65 63 75 74 65 64 20 73  CK is executed s
11ee0 6f 20 63 68 61 6e 67 65 73 0a 66 72 6f 6d 20 70  o changes.from p
11ef0 72 69 6f 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69  rior commands wi
11f00 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 72  thin the same tr
11f10 61 6e 73 61 63 74 69 6f 6e 0a 61 72 65 20 70 72  ansaction.are pr
11f20 65 73 65 72 76 65 64 2e 20 20 54 68 69 73 20 69  eserved.  This i
11f30 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65  s the default be
11f40 68 61 76 69 6f 72 2e 3c 2f 70 3e 3c 2f 64 64 3e  havior.</p></dd>
11f50 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49 4c 3c 2f 62  ..<dt><b>FAIL</b
11f60 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68  ></dt>.<dd><p>Wh
11f70 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  en a constraint 
11f80 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
11f90 2c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 61 62  , the command ab
11fa0 6f 72 74 73 20 77 69 74 68 20 61 0a 72 65 74 75  orts with a.retu
11fb0 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 43  rn code SQLITE_C
11fc0 4f 4e 53 54 52 41 49 4e 54 2e 20 20 42 75 74 20  ONSTRAINT.  But 
11fd0 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74  any changes to t
11fe0 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74  he database that
11ff0 0a 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6d 61 64  .the command mad
12000 65 20 70 72 69 6f 72 20 74 6f 20 65 6e 63 6f 75  e prior to encou
12010 6e 74 65 72 69 6e 67 20 74 68 65 20 63 6f 6e 73  ntering the cons
12020 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
12030 0a 61 72 65 20 70 72 65 73 65 72 76 65 64 20 61  .are preserved a
12040 6e 64 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  nd are not backe
12050 64 20 6f 75 74 2e 20 20 46 6f 72 20 65 78 61 6d  d out.  For exam
12060 70 6c 65 2c 20 69 66 20 61 6e 20 55 50 44 41 54  ple, if an UPDAT
12070 45 0a 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f  E.statement enco
12080 75 6e 74 65 72 65 64 20 61 20 63 6f 6e 73 74 72  untered a constr
12090 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
120a0 6e 20 74 68 65 20 31 30 30 74 68 20 72 6f 77 20  n the 100th row 
120b0 74 68 61 74 0a 69 74 20 61 74 74 65 6d 70 74 73  that.it attempts
120c0 20 74 6f 20 75 70 64 61 74 65 2c 20 74 68 65 6e   to update, then
120d0 20 74 68 65 20 66 69 72 73 74 20 39 39 20 72 6f   the first 99 ro
120e0 77 20 63 68 61 6e 67 65 73 20 61 72 65 20 70 72  w changes are pr
120f0 65 73 65 72 76 65 64 0a 62 75 74 20 63 68 61 6e  eserved.but chan
12100 67 65 73 20 74 6f 20 72 6f 77 73 20 31 30 30 20  ges to rows 100 
12110 61 6e 64 20 62 65 79 6f 6e 64 20 6e 65 76 65 72  and beyond never
12120 20 6f 63 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e   occur.</p></dd>
12130 0a 0a 3c 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c  ..<dt><b>IGNORE<
12140 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /b></dt>.<dd><p>
12150 57 68 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e  When a constrain
12160 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
12170 72 73 2c 20 74 68 65 20 6f 6e 65 20 72 6f 77 20  rs, the one row 
12180 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68  that contains.th
12190 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
121a0 6c 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 69 6e  lation is not in
121b0 73 65 72 74 65 64 20 6f 72 20 63 68 61 6e 67 65  serted or change
121c0 64 2e 20 20 42 75 74 20 74 68 65 20 63 6f 6d 6d  d.  But the comm
121d0 61 6e 64 0a 63 6f 6e 74 69 6e 75 65 73 20 65 78  and.continues ex
121e0 65 63 75 74 69 6e 67 20 6e 6f 72 6d 61 6c 6c 79  ecuting normally
121f0 2e 20 20 4f 74 68 65 72 20 72 6f 77 73 20 62 65  .  Other rows be
12200 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 20 74  fore and after t
12210 68 65 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74  he row that.cont
12220 61 69 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72  ained the constr
12230 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 63  aint violation c
12240 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 69 6e  ontinue to be in
12250 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
12260 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 20 4e 6f 20  d.normally.  No 
12270 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
12280 64 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  d.</p></dd>..<dt
12290 3e 3c 62 3e 52 45 50 4c 41 43 45 3c 2f 62 3e 3c  ><b>REPLACE</b><
122a0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 57 68 65 6e  /dt>.<dd><p>When
122b0 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
122c0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
122d0 63 63 75 72 73 2c 20 74 68 65 20 70 72 65 2d 65  ccurs, the pre-e
122e0 78 69 73 74 69 6e 67 20 72 6f 77 73 0a 74 68 61  xisting rows.tha
122f0 74 20 61 72 65 20 63 61 75 73 69 6e 67 20 74 68  t are causing th
12300 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
12310 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
12320 65 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 73 65  ed prior to inse
12330 72 74 69 6e 67 0a 6f 72 20 75 70 64 61 74 69 6e  rting.or updatin
12340 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  g the current ro
12350 77 2e 20 20 54 68 75 73 20 74 68 65 20 69 6e 73  w.  Thus the ins
12360 65 72 74 20 6f 72 20 75 70 64 61 74 65 20 61 6c  ert or update al
12370 77 61 79 73 20 6f 63 63 75 72 73 2e 0a 54 68 65  ways occurs..The
12380 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75   command continu
12390 65 73 20 65 78 65 63 75 74 69 6e 67 20 6e 6f 72  es executing nor
123a0 6d 61 6c 6c 79 2e 20 20 4e 6f 20 65 72 72 6f 72  mally.  No error
123b0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 49 66   is returned..If
123c0 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
123d0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
123e0 20 6f 63 63 75 72 73 2c 20 74 68 65 20 4e 55 4c   occurs, the NUL
123f0 4c 20 76 61 6c 75 65 20 69 73 20 72 65 70 6c 61  L value is repla
12400 63 65 64 0a 62 79 20 74 68 65 20 64 65 66 61 75  ced.by the defau
12410 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61  lt value for tha
12420 74 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  t column.  If th
12430 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20  e column has no 
12440 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74  default.value, t
12450 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c  hen the ABORT al
12460 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
12470 20 20 49 66 20 61 20 43 48 45 43 4b 20 63 6f 6e    If a CHECK con
12480 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
12490 6e 0a 6f 63 63 75 72 73 20 74 68 65 6e 20 74 68  n.occurs then th
124a0 65 20 49 47 4e 4f 52 45 20 61 6c 67 6f 72 69 74  e IGNORE algorit
124b0 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a  hm is used.</p>.
124c0 0a 3c 70 3e 57 68 65 6e 20 74 68 69 73 20 63 6f  .<p>When this co
124d0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
124e0 6e 20 73 74 72 61 74 65 67 79 20 64 65 6c 65 74  n strategy delet
124f0 65 73 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72  es rows in order
12500 20 74 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f   to.satisfy a co
12510 6e 73 74 72 61 69 6e 74 2c 20 69 74 20 64 6f 65  nstraint, it doe
12520 73 20 6e 6f 74 20 69 6e 76 6f 6b 65 20 64 65 6c  s not invoke del
12530 65 74 65 20 74 72 69 67 67 65 72 73 20 6f 6e 20  ete triggers on 
12540 74 68 6f 73 65 0a 72 6f 77 73 2e 20 20 54 68 69  those.rows.  Thi
12550 73 20 62 65 68 61 76 69 6f 72 20 6d 69 67 68 74  s behavior might
12560 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66 75 74   change in a fut
12570 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e  ure release.</p>
12580 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20 61  .</dl>..<p>The a
12590 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69  lgorithm specifi
125a0 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c 61  ed in the OR cla
125b0 75 73 65 20 6f 66 20 61 20 49 4e 53 45 52 54 20  use of a INSERT 
125c0 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72 72 69  or UPDATE.overri
125d0 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69 74 68  des any algorith
125e0 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 61  m specified in a
125f0 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 0a 49   CREATE TABLE..I
12600 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69  f no algorithm i
12610 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 79 77  s specified anyw
12620 68 65 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20  here, the ABORT 
12630 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
12640 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  d.</p>..<tcl>.##
12650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12690 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
126a0 74 69 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69  tion REINDEX rei
126b0 6e 64 65 78 20 52 45 49 4e 44 45 58 0a 0a 53 79  ndex REINDEX..Sy
126c0 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
126d0 65 6e 74 7d 20 7b 0a 20 20 52 45 49 4e 44 45 58  ent} {.  REINDEX
126e0 20 3c 63 6f 6c 6c 61 74 69 6f 6e 20 6e 61 6d 65   <collation name
126f0 3e 0a 7d 0a 53 79 6e 74 61 78 20 7b 73 71 6c 2d  >.}.Syntax {sql-
12700 73 74 61 74 65 6d 65 6e 74 7d 20 7b 0a 20 20 52  statement} {.  R
12710 45 49 4e 44 45 58 20 5b 3c 64 61 74 61 62 61 73  EINDEX [<databas
12720 65 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c  e-name> .] <tabl
12730 65 2f 69 6e 64 65 78 2d 6e 61 6d 65 3e 0a 7d 0a  e/index-name>.}.
12740 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 52  </tcl>..<p>The R
12750 45 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64 20 69  EINDEX command i
12760 73 20 75 73 65 64 20 74 6f 20 64 65 6c 65 74 65  s used to delete
12770 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69 6e   and recreate in
12780 64 69 63 65 73 20 66 72 6f 6d 20 73 63 72 61 74  dices from scrat
12790 63 68 2e 0a 54 68 69 73 20 69 73 20 75 73 65 66  ch..This is usef
127a0 75 6c 20 77 68 65 6e 20 74 68 65 20 64 65 66 69  ul when the defi
127b0 6e 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 6c  nition of a coll
127c0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 68  ation sequence h
127d0 61 73 20 63 68 61 6e 67 65 64 2e 0a 3c 2f 70 3e  as changed..</p>
127e0 0a 0a 3c 70 3e 49 6e 20 74 68 65 20 66 69 72 73  ..<p>In the firs
127f0 74 20 66 6f 72 6d 2c 20 61 6c 6c 20 69 6e 64 69  t form, all indi
12800 63 65 73 20 69 6e 20 61 6c 6c 20 61 74 74 61 63  ces in all attac
12810 68 65 64 20 64 61 74 61 62 61 73 65 73 20 74 68  hed databases th
12820 61 74 20 75 73 65 20 74 68 65 0a 6e 61 6d 65 64  at use the.named
12830 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
12840 6e 63 65 20 61 72 65 20 72 65 63 72 65 61 74 65  nce are recreate
12850 64 2e 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64  d. In the second
12860 20 66 6f 72 6d 2c 20 69 66 20 0a 3c 69 3e 26 23   form, if .<i>&#
12870 39 31 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  91;database-name
12880 2e 26 23 39 33 3b 74 61 62 6c 65 2f 69 6e 64 65  .&#93;table/inde
12890 78 2d 6e 61 6d 65 3c 2f 69 3e 20 69 64 65 6e 74  x-name</i> ident
128a0 69 66 69 65 73 20 61 20 74 61 62 6c 65 2c 0a 74  ifies a table,.t
128b0 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 0a  hen all indices.
128c0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
128d0 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 72 65  the table are re
128e0 62 75 69 6c 74 2e 20 49 66 20 61 6e 20 69 6e 64  built. If an ind
128f0 65 78 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  ex is identified
12900 2c 20 74 68 65 6e 20 6f 6e 6c 79 0a 74 68 69 73  , then only.this
12910 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 20   specific index 
12920 69 73 20 64 65 6c 65 74 65 64 20 61 6e 64 20 72  is deleted and r
12930 65 63 72 65 61 74 65 64 2e 0a 3c 2f 70 3e 0a 0a  ecreated..</p>..
12940 3c 70 3e 49 66 20 6e 6f 20 3c 69 3e 64 61 74 61  <p>If no <i>data
12950 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  base-name</i> is
12960 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74   specified and t
12970 68 65 72 65 20 65 78 69 73 74 73 20 62 6f 74 68  here exists both
12980 20 61 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65   a table or.inde
12990 78 20 61 6e 64 20 61 20 63 6f 6c 6c 61 74 69 6f  x and a collatio
129a0 6e 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  n sequence of th
129b0 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 6d 65  e specified name
129c0 2c 20 74 68 65 6e 20 69 6e 64 69 63 65 73 20 61  , then indices a
129d0 73 73 6f 63 69 61 74 65 64 0a 77 69 74 68 20 74  ssociated.with t
129e0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
129f0 75 65 6e 63 65 20 6f 6e 6c 79 20 61 72 65 20 72  uence only are r
12a00 65 63 6f 6e 73 74 72 75 63 74 65 64 2e 20 54 68  econstructed. Th
12a10 69 73 20 61 6d 62 69 67 75 69 74 79 20 6d 61 79  is ambiguity may
12a20 20 62 65 0a 64 69 73 70 65 6c 6c 65 64 20 62 79   be.dispelled by
12a30 20 61 6c 77 61 79 73 20 73 70 65 63 69 66 79 69   always specifyi
12a40 6e 67 20 61 20 3c 69 3e 64 61 74 61 62 61 73 65  ng a <i>database
12a50 2d 6e 61 6d 65 3c 2f 69 3e 20 77 68 65 6e 20 72  -name</i> when r
12a60 65 69 6e 64 65 78 69 6e 67 20 61 0a 73 70 65 63  eindexing a.spec
12a70 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e  ific table or in
12a80 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  dex...<tcl>.####
12a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ad0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
12ae0 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c  ion REPLACE repl
12af0 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 53 79 6e  ace REPLACE..Syn
12b00 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65  tax {sql-stateme
12b10 6e 74 7d 20 7b 0a 52 45 50 4c 41 43 45 20 49 4e  nt} {.REPLACE IN
12b20 54 4f 20 5b 3c 64 61 74 61 62 61 73 65 2d 6e 61  TO [<database-na
12b30 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61  me> .] <table-na
12b40 6d 65 3e 20 5b 28 20 3c 63 6f 6c 75 6d 6e 2d 6c  me> [( <column-l
12b50 69 73 74 3e 20 29 5d 20 56 41 4c 55 45 53 20 28  ist> )] VALUES (
12b60 20 3c 76 61 6c 75 65 2d 6c 69 73 74 3e 20 29 20   <value-list> ) 
12b70 7c 0a 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 5b  |.REPLACE INTO [
12b80 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e 20  <database-name> 
12b90 2e 5d 20 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20  .] <table-name> 
12ba0 5b 28 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  [( <column-list>
12bb0 20 29 5d 20 3c 73 65 6c 65 63 74 2d 73 74 61 74   )] <select-stat
12bc0 65 6d 65 6e 74 3e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  ement>.}.</tcl>.
12bd0 0a 3c 70 3e 54 68 65 20 52 45 50 4c 41 43 45 20  .<p>The REPLACE 
12be0 63 6f 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c  command is an al
12bf0 69 61 73 20 66 6f 72 20 74 68 65 20 22 49 4e 53  ias for the "INS
12c00 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 20  ERT OR REPLACE" 
12c10 76 61 72 69 61 6e 74 0a 6f 66 20 74 68 65 20 3c  variant.of the <
12c20 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 69 6e 73  a href="lang_ins
12c30 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53 45 52 54  ert.html">INSERT
12c40 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a  </a> command.  .
12c50 54 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72  This alias is pr
12c60 6f 76 69 64 65 64 20 66 6f 72 0a 63 6f 6d 70 61  ovided for.compa
12c70 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79  tibility with My
12c80 53 51 4c 2e 20 20 53 65 65 20 74 68 65 20 0a 3c  SQL.  See the .<
12c90 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f 69 6e 73  a href="lang_ins
12ca0 65 72 74 2e 68 74 6d 6c 22 3e 49 4e 53 45 52 54  ert.html">INSERT
12cb0 3c 2f 61 3e 20 63 6f 6d 6d 61 6e 64 20 64 6f 63  </a> command doc
12cc0 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  umentation for a
12cd0 64 64 69 74 69 6f 6e 61 6c 0a 69 6e 66 6f 72 6d  dditional.inform
12ce0 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74  ation.</p>  ..<t
12cf0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
12d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d40 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45  ###.Section SELE
12d50 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43  CT select {SELEC
12d60 54 20 71 75 65 72 79 7d 0a 0a 53 79 6e 74 61 78  T query}..Syntax
12d70 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
12d80 20 7b 0a 53 45 4c 45 43 54 20 5b 41 4c 4c 20 7c   {.SELECT [ALL |
12d90 20 44 49 53 54 49 4e 43 54 5d 20 3c 72 65 73 75   DISTINCT] <resu
12da0 6c 74 3e 20 5b 46 52 4f 4d 20 3c 74 61 62 6c 65  lt> [FROM <table
12db0 2d 6c 69 73 74 3e 5d 0a 5b 57 48 45 52 45 20 3c  -list>].[WHERE <
12dc0 65 78 70 72 3e 5d 0a 5b 47 52 4f 55 50 20 42 59  expr>].[GROUP BY
12dd0 20 3c 65 78 70 72 2d 6c 69 73 74 3e 5d 0a 5b 48   <expr-list>].[H
12de0 41 56 49 4e 47 20 3c 65 78 70 72 3e 5d 0a 5b 3c  AVING <expr>].[<
12df0 63 6f 6d 70 6f 75 6e 64 2d 6f 70 3e 20 3c 73 65  compound-op> <se
12e00 6c 65 63 74 3e 5d 2a 0a 5b 4f 52 44 45 52 20 42  lect>]*.[ORDER B
12e10 59 20 3c 73 6f 72 74 2d 65 78 70 72 2d 6c 69 73  Y <sort-expr-lis
12e20 74 3e 5d 0a 5b 4c 49 4d 49 54 20 3c 69 6e 74 65  t>].[LIMIT <inte
12e30 67 65 72 3e 20 5b 4c 50 20 4f 46 46 53 45 54 20  ger> [LP OFFSET 
12e40 7c 20 2c 20 52 50 20 3c 69 6e 74 65 67 65 72 3e  | , RP <integer>
12e50 5d 5d 0a 7d 20 7b 72 65 73 75 6c 74 7d 20 7b 0a  ]].} {result} {.
12e60 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 3e 20  <result-column> 
12e70 5b 2c 20 3c 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  [, <result-colum
12e80 6e 3e 5d 2a 0a 7d 20 7b 72 65 73 75 6c 74 2d 63  n>]*.} {result-c
12e90 6f 6c 75 6d 6e 7d 20 7b 0a 53 54 41 52 20 7c 20  olumn} {.STAR | 
12ea0 3c 74 61 62 6c 65 2d 6e 61 6d 65 3e 20 2e 20 53  <table-name> . S
12eb0 54 41 52 20 7c 20 3c 65 78 70 72 3e 20 5b 20 5b  TAR | <expr> [ [
12ec0 41 53 5d 20 3c 73 74 72 69 6e 67 3e 20 5d 0a 7d  AS] <string> ].}
12ed0 20 7b 74 61 62 6c 65 2d 6c 69 73 74 7d 20 7b 0a   {table-list} {.
12ee0 3c 74 61 62 6c 65 3e 20 5b 3c 6a 6f 69 6e 2d 6f  <table> [<join-o
12ef0 70 3e 20 3c 74 61 62 6c 65 3e 20 3c 6a 6f 69 6e  p> <table> <join
12f00 2d 61 72 67 73 3e 5d 2a 0a 7d 20 7b 74 61 62 6c  -args>]*.} {tabl
12f10 65 7d 20 7b 0a 3c 74 61 62 6c 65 2d 6e 61 6d 65  e} {.<table-name
12f20 3e 20 5b 41 53 20 3c 61 6c 69 61 73 3e 5d 20 7c  > [AS <alias>] |
12f30 0a 28 20 3c 73 65 6c 65 63 74 3e 20 29 20 5b 41  .( <select> ) [A
12f40 53 20 3c 61 6c 69 61 73 3e 5d 0a 7d 20 7b 6a 6f  S <alias>].} {jo
12f50 69 6e 2d 6f 70 7d 20 7b 0a 2c 20 7c 20 5b 4e 41  in-op} {., | [NA
12f60 54 55 52 41 4c 5d 20 5b 4c 45 46 54 20 7c 20 52  TURAL] [LEFT | R
12f70 49 47 48 54 20 7c 20 46 55 4c 4c 5d 20 5b 4f 55  IGHT | FULL] [OU
12f80 54 45 52 20 7c 20 49 4e 4e 45 52 20 7c 20 43 52  TER | INNER | CR
12f90 4f 53 53 5d 20 4a 4f 49 4e 0a 7d 20 7b 6a 6f 69  OSS] JOIN.} {joi
12fa0 6e 2d 61 72 67 73 7d 20 7b 0a 5b 4f 4e 20 3c 65  n-args} {.[ON <e
12fb0 78 70 72 3e 5d 20 5b 55 53 49 4e 47 20 28 20 3c  xpr>] [USING ( <
12fc0 69 64 2d 6c 69 73 74 3e 20 29 5d 0a 7d 20 7b 73  id-list> )].} {s
12fd0 6f 72 74 2d 65 78 70 72 2d 6c 69 73 74 7d 20 7b  ort-expr-list} {
12fe0 0a 3c 65 78 70 72 3e 20 5b 3c 73 6f 72 74 2d 6f  .<expr> [<sort-o
12ff0 72 64 65 72 3e 5d 20 5b 2c 20 3c 65 78 70 72 3e  rder>] [, <expr>
13000 20 5b 3c 73 6f 72 74 2d 6f 72 64 65 72 3e 5d 5d   [<sort-order>]]
13010 2a 0a 7d 20 7b 73 6f 72 74 2d 6f 72 64 65 72 7d  *.} {sort-order}
13020 20 7b 0a 5b 20 43 4f 4c 4c 41 54 45 20 3c 63 6f   {.[ COLLATE <co
13030 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3e 20 5d 20  llation-name> ] 
13040 5b 20 41 53 43 20 7c 20 44 45 53 43 20 5d 0a 7d  [ ASC | DESC ].}
13050 20 7b 63 6f 6d 70 6f 75 6e 64 5f 6f 70 7d 20 7b   {compound_op} {
13060 0a 55 4e 49 4f 4e 20 7c 20 55 4e 49 4f 4e 20 41  .UNION | UNION A
13070 4c 4c 20 7c 20 49 4e 54 45 52 53 45 43 54 20 7c  LL | INTERSECT |
13080 20 45 58 43 45 50 54 0a 7d 0a 3c 2f 74 63 6c 3e   EXCEPT.}.</tcl>
13090 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20  ..<p>The SELECT 
130a0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
130b0 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 64  d to query the d
130c0 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a 72 65  atabase.  The.re
130d0 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45 43 54  sult of a SELECT
130e0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
130f0 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20 77 68   rows of data wh
13100 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68 61 73  ere each row.has
13110 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20   a fixed number 
13120 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65  of columns.  The
13130 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
13140 6e 73 20 69 6e 20 74 68 65 0a 72 65 73 75 6c 74  ns in the.result
13150 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
13160 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13170 6c 69 73 74 20 69 6e 20 62 65 74 77 65 65 6e 20  list in between 
13180 74 68 65 0a 53 45 4c 45 43 54 20 61 6e 64 20 46  the.SELECT and F
13190 52 4f 4d 20 6b 65 79 77 6f 72 64 73 2e 20 20 41  ROM keywords.  A
131a0 6e 79 20 61 72 62 69 74 72 61 72 79 20 65 78 70  ny arbitrary exp
131b0 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65 20 75  ression can be u
131c0 73 65 64 0a 61 73 20 61 20 72 65 73 75 6c 74 2e  sed.as a result.
131d0 20 20 49 66 20 61 20 72 65 73 75 6c 74 20 65 78    If a result ex
131e0 70 72 65 73 73 69 6f 6e 20 69 73 20 7d 0a 68 64  pression is }.hd
131f0 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f 72  _puts "[Operator
13200 20 2a 5d 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c   *] then all col
13210 75 6d 6e 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  umns of all tabl
13220 65 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  es are substitut
13230 65 64 22 0a 68 64 5f 70 75 74 73 20 7b 66 6f 72  ed".hd_puts {for
13240 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72 65 73   that one expres
13250 73 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 65 78  sion.  If the ex
13260 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
13270 6e 61 6d 65 20 6f 66 7d 0a 68 64 5f 70 75 74 73  name of}.hd_puts
13280 20 22 61 20 74 61 62 6c 65 20 66 6f 6c 6c 6f 77   "a table follow
13290 65 64 20 62 79 20 5b 4f 70 65 72 61 74 6f 72 20  ed by [Operator 
132a0 2e 2a 5d 20 74 68 65 6e 20 74 68 65 20 72 65 73  .*] then the res
132b0 75 6c 74 20 69 73 20 61 6c 6c 20 63 6f 6c 75 6d  ult is all colum
132c0 6e 73 22 0a 68 64 5f 70 75 74 73 20 7b 69 6e 20  ns".hd_puts {in 
132d0 74 68 61 74 20 6f 6e 65 20 74 61 62 6c 65 2e 3c  that one table.<
132e0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 44 49 53 54  /p>..<p>The DIST
132f0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 63 61 75  INCT keyword cau
13300 73 65 73 20 61 20 73 75 62 73 65 74 20 6f 66 20  ses a subset of 
13310 72 65 73 75 6c 74 20 72 6f 77 73 20 74 6f 20 62  result rows to b
13320 65 20 72 65 74 75 72 6e 65 64 2c 20 0a 69 6e 20  e returned, .in 
13330 77 68 69 63 68 20 65 61 63 68 20 72 65 73 75 6c  which each resul
13340 74 20 72 6f 77 20 69 73 20 64 69 66 66 65 72 65  t row is differe
13350 6e 74 2e 20 20 4e 55 4c 4c 20 76 61 6c 75 65 73  nt.  NULL values
13360 20 61 72 65 20 6e 6f 74 20 74 72 65 61 74 65 64   are not treated
13370 20 61 73 20 0a 64 69 73 74 69 6e 63 74 20 66 72   as .distinct fr
13380 6f 6d 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  om each other.  
13390 54 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  The default beha
133a0 76 69 6f 72 20 69 73 20 74 68 61 74 20 61 6c 6c  vior is that all
133b0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 0a 62 65   result rows .be
133c0 20 72 65 74 75 72 6e 65 64 2c 20 77 68 69 63 68   returned, which
133d0 20 63 61 6e 20 62 65 20 6d 61 64 65 20 65 78 70   can be made exp
133e0 6c 69 63 69 74 20 77 69 74 68 20 74 68 65 20 6b  licit with the k
133f0 65 79 77 6f 72 64 20 41 4c 4c 2e 3c 2f 70 3e 0a  eyword ALL.</p>.
13400 0a 3c 70 3e 54 68 65 20 71 75 65 72 79 20 69 73  .<p>The query is
13410 20 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73   executed agains
13420 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  t one or more ta
13430 62 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 61  bles specified a
13440 66 74 65 72 0a 74 68 65 20 46 52 4f 4d 20 6b 65  fter.the FROM ke
13450 79 77 6f 72 64 2e 20 20 49 66 20 6d 75 6c 74 69  yword.  If multi
13460 70 6c 65 20 74 61 62 6c 65 73 20 6e 61 6d 65 73  ple tables names
13470 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62   are separated b
13480 79 20 63 6f 6d 6d 61 73 2c 0a 74 68 65 6e 20 74  y commas,.then t
13490 68 65 20 71 75 65 72 79 20 69 73 20 61 67 61 69  he query is agai
134a0 6e 73 74 20 74 68 65 20 63 72 6f 73 73 20 6a 6f  nst the cross jo
134b0 69 6e 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75  in of the variou
134c0 73 20 74 61 62 6c 65 73 2e 0a 54 68 65 20 66 75  s tables..The fu
134d0 6c 6c 20 53 51 4c 2d 39 32 20 6a 6f 69 6e 20 73  ll SQL-92 join s
134e0 79 6e 74 61 78 20 63 61 6e 20 61 6c 73 6f 20 62  yntax can also b
134f0 65 20 75 73 65 64 20 74 6f 20 73 70 65 63 69 66  e used to specif
13500 79 20 6a 6f 69 6e 73 2e 0a 41 20 73 75 62 2d 71  y joins..A sub-q
13510 75 65 72 79 0a 69 6e 20 70 61 72 65 6e 74 68 65  uery.in parenthe
13520 73 65 73 20 6d 61 79 20 62 65 20 73 75 62 73 74  ses may be subst
13530 69 74 75 74 65 64 20 66 6f 72 20 61 6e 79 20 74  ituted for any t
13540 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65  able name in the
13550 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 0a 54 68   FROM clause..Th
13560 65 20 65 6e 74 69 72 65 20 46 52 4f 4d 20 63 6c  e entire FROM cl
13570 61 75 73 65 20 6d 61 79 20 62 65 20 6f 6d 69 74  ause may be omit
13580 74 65 64 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ted, in which ca
13590 73 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  se the result is
135a0 20 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 63 6f   a.single row co
135b0 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20  nsisting of the 
135c0 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 65 78  values of the ex
135d0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 0a 3c  pression list..<
135e0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 57 48 45 52  /p>..<p>The WHER
135f0 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20  E clause can be 
13600 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68  used to limit th
13610 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
13620 20 6f 76 65 72 0a 77 68 69 63 68 20 74 68 65 20   over.which the 
13630 71 75 65 72 79 20 6f 70 65 72 61 74 65 73 2e 3c  query operates.<
13640 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 47 52 4f 55  /p>..<p>The GROU
13650 50 20 42 59 20 63 6c 61 75 73 65 20 63 61 75 73  P BY clause caus
13660 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  es one or more r
13670 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ows of the resul
13680 74 20 74 6f 0a 62 65 20 63 6f 6d 62 69 6e 65 64  t to.be combined
13690 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20 72   into a single r
136a0 6f 77 20 6f 66 20 6f 75 74 70 75 74 2e 20 20 54  ow of output.  T
136b0 68 69 73 20 69 73 20 65 73 70 65 63 69 61 6c 6c  his is especiall
136c0 79 20 75 73 65 66 75 6c 0a 77 68 65 6e 20 74 68  y useful.when th
136d0 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e  e result contain
136e0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
136f0 74 69 6f 6e 73 2e 20 20 54 68 65 20 65 78 70 72  tions.  The expr
13700 65 73 73 69 6f 6e 73 20 69 6e 0a 74 68 65 20 47  essions in.the G
13710 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 64  ROUP BY clause d
13720 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68  o <em>not</em> h
13730 61 76 65 20 74 6f 20 62 65 20 65 78 70 72 65 73  ave to be expres
13740 73 69 6f 6e 73 20 74 68 61 74 0a 61 70 70 65 61  sions that.appea
13750 72 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  r in the result.
13760 20 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61    The HAVING cla
13770 75 73 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  use is similar t
13780 6f 20 57 48 45 52 45 20 65 78 63 65 70 74 0a 74  o WHERE except.t
13790 68 61 74 20 48 41 56 49 4e 47 20 61 70 70 6c 69  hat HAVING appli
137a0 65 73 20 61 66 74 65 72 20 67 72 6f 75 70 69 6e  es after groupin
137b0 67 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20  g has occurred. 
137c0 20 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72   The HAVING expr
137d0 65 73 73 69 6f 6e 0a 6d 61 79 20 72 65 66 65 72  ession.may refer
137e0 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e   to values, even
137f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13800 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e  ions, that are n
13810 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ot in the result
13820 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 52  .</p>..<p>The OR
13830 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 63 61  DER BY clause ca
13840 75 73 65 73 20 74 68 65 20 6f 75 74 70 75 74 20  uses the output 
13850 72 6f 77 73 20 74 6f 20 62 65 20 73 6f 72 74 65  rows to be sorte
13860 64 2e 20 20 0a 54 68 65 20 61 72 67 75 6d 65 6e  d.  .The argumen
13870 74 20 74 6f 20 4f 52 44 45 52 20 42 59 20 69 73  t to ORDER BY is
13880 20 61 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   a list of expre
13890 73 73 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20  ssions that are 
138a0 75 73 65 64 20 61 73 20 74 68 65 0a 6b 65 79 20  used as the.key 
138b0 66 6f 72 20 74 68 65 20 73 6f 72 74 2e 20 20 54  for the sort.  T
138c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 64  he expressions d
138d0 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65  o not have to be
138e0 20 70 61 72 74 20 6f 66 20 74 68 65 0a 72 65 73   part of the.res
138f0 75 6c 74 20 66 6f 72 20 61 20 73 69 6d 70 6c 65  ult for a simple
13900 20 53 45 4c 45 43 54 2c 20 62 75 74 20 69 6e 20   SELECT, but in 
13910 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
13920 54 20 65 61 63 68 20 73 6f 72 74 0a 65 78 70 72  T each sort.expr
13930 65 73 73 69 6f 6e 20 6d 75 73 74 20 65 78 61 63  ession must exac
13940 74 6c 79 20 6d 61 74 63 68 20 6f 6e 65 20 6f 66  tly match one of
13950 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
13960 6d 6e 73 2e 20 20 45 61 63 68 0a 73 6f 72 74 20  mns.  Each.sort 
13970 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
13980 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
13990 6c 6f 77 65 64 20 62 79 20 61 20 43 4f 4c 4c 41  lowed by a COLLA
139a0 54 45 20 6b 65 79 77 6f 72 64 20 61 6e 64 0a 74  TE keyword and.t
139b0 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c  he name of a col
139c0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
139d0 75 73 65 64 20 66 6f 72 20 6f 72 64 65 72 69 6e  used for orderin
139e0 67 20 74 65 78 74 20 61 6e 64 2f 6f 72 0a 6b 65  g text and/or.ke
139f0 79 77 6f 72 64 73 20 41 53 43 20 6f 72 20 44 45  ywords ASC or DE
13a00 53 43 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  SC to specify th
13a10 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 3c 2f 70  e sort order.</p
13a20 3e 0a 0a 3c 70 3e 45 61 63 68 20 74 65 72 6d 20  >..<p>Each term 
13a30 6f 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20 65  of an ORDER BY e
13a40 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f  xpression is pro
13a50 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  cessed as follow
13a60 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
13a70 3e 3c 70 3e 49 66 20 74 68 65 20 4f 52 44 45 52  ><p>If the ORDER
13a80 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
13a90 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
13aa0 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
13ab0 6f 75 74 70 75 74 20 69 73 20 6f 72 64 65 72 65  output is ordere
13ac0 64 20 62 79 20 74 68 65 20 4b 2d 74 68 20 63 6f  d by the K-th co
13ad0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
13ae0 6c 74 20 73 65 74 2e 3c 2f 70 3e 3c 2f 6c 69 3e  lt set.</p></li>
13af0 0a 3c 6c 69 3e 3c 70 3e 49 66 20 74 68 65 20 4f  .<li><p>If the O
13b00 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
13b10 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66  on is an identif
13b20 69 65 72 20 61 6e 64 20 6f 6e 65 20 6f 66 20 74  ier and one of t
13b30 68 65 0a 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e  he.output column
13b40 73 20 61 73 20 61 6e 20 61 6c 69 61 73 20 62 79  s as an alias by
13b50 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20   the same name, 
13b60 74 68 65 6e 20 74 68 65 20 6f 75 74 70 75 74 20  then the output 
13b70 69 73 0a 6f 72 64 65 72 65 64 20 62 79 20 74 68  is.ordered by th
13b80 65 20 69 64 65 6e 74 69 66 69 65 64 20 63 6f 6c  e identified col
13b90 75 6d 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c  umn.</p></li>.<l
13ba0 69 3e 3c 70 3e 4f 74 68 65 72 77 69 73 65 2c 20  i><p>Otherwise, 
13bb0 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
13bc0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
13bd0 61 74 65 64 20 61 6e 64 20 74 68 65 20 6f 75 74  ated and the out
13be0 70 75 74 20 0a 69 73 20 6f 72 64 65 72 65 64 20  put .is ordered 
13bf0 62 79 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  by the value of 
13c00 74 68 61 74 20 65 78 70 72 65 73 73 69 6f 6e 2e  that expression.
13c10 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  </p></li>.</ol>.
13c20 0a 3c 70 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  .<p>In a compoun
13c30 64 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d SELECT stateme
13c40 6e 74 2c 20 74 68 65 20 74 68 69 72 64 20 4f 52  nt, the third OR
13c50 44 45 52 20 42 59 20 6d 61 74 63 68 69 6e 67 20  DER BY matching 
13c60 72 75 6c 65 0a 72 65 71 75 69 72 65 73 20 74 68  rule.requires th
13c70 61 74 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  at the expressio
13c80 6e 20 62 65 20 69 64 65 6e 74 69 63 61 6c 20 74  n be identical t
13c90 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c  o one of the col
13ca0 75 6d 6e 73 20 69 6e 0a 74 68 65 20 72 65 73 75  umns in.the resu
13cb0 6c 74 20 73 65 74 2e 20 20 54 68 65 20 74 68 72  lt set.  The thr
13cc0 65 65 20 72 75 6c 65 73 20 61 72 65 20 66 69 72  ee rules are fir
13cd0 73 74 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68  st applied to th
13ce0 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 53 45 4c 45  e left-most.SELE
13cf0 43 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75  CT in the compou
13d00 6e 64 2e 20 20 49 66 20 61 20 6d 61 74 63 68 20  nd.  If a match 
13d10 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 73 65  is found, the se
13d20 61 72 63 68 20 73 74 6f 70 73 2e 20 20 4f 74 68  arch stops.  Oth
13d30 65 72 77 69 73 65 2c 0a 74 68 65 20 6e 65 78 74  erwise,.the next
13d40 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72   SELECT to the r
13d50 69 67 68 74 20 69 73 20 74 72 69 65 64 2e 20 20  ight is tried.  
13d60 54 68 69 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  This continues u
13d70 6e 74 69 6c 20 61 20 6d 61 74 63 68 0a 69 73 20  ntil a match.is 
13d80 66 6f 75 6e 64 2e 20 20 45 61 63 68 20 74 65 72  found.  Each ter
13d90 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42  m of the ORDER B
13da0 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 6f 63  Y clause is proc
13db0 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c 79  essed separately
13dc0 20 0a 61 6e 64 20 6d 61 79 20 63 6f 6d 65 20 66   .and may come f
13dd0 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 20 53 45  rom different SE
13de0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
13df0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
13e00 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4c 49 4d  </p>..<p>The LIM
13e10 49 54 20 63 6c 61 75 73 65 20 70 6c 61 63 65 73  IT clause places
13e20 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
13e30 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
13e40 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 69   rows.returned i
13e50 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 41  n the result.  A
13e60 20 6e 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20   negative LIMIT 
13e70 69 6e 64 69 63 61 74 65 73 20 6e 6f 20 75 70 70  indicates no upp
13e80 65 72 20 62 6f 75 6e 64 2e 0a 54 68 65 20 6f 70  er bound..The op
13e90 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 66 6f  tional OFFSET fo
13ea0 6c 6c 6f 77 69 6e 67 20 4c 49 4d 49 54 20 73 70  llowing LIMIT sp
13eb0 65 63 69 66 69 65 73 20 68 6f 77 20 6d 61 6e 79  ecifies how many
13ec0 0a 72 6f 77 73 20 74 6f 20 73 6b 69 70 20 61 74  .rows to skip at
13ed0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
13ee0 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
13ef0 2e 0a 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  ..In a compound 
13f00 71 75 65 72 79 2c 20 74 68 65 20 4c 49 4d 49 54  query, the LIMIT
13f10 20 63 6c 61 75 73 65 20 6d 61 79 20 6f 6e 6c 79   clause may only
13f20 20 61 70 70 65 61 72 20 6f 6e 20 74 68 65 0a 66   appear on the.f
13f30 69 6e 61 6c 20 53 45 4c 45 43 54 20 73 74 61 74  inal SELECT stat
13f40 65 6d 65 6e 74 2e 0a 54 68 65 20 6c 69 6d 69 74  ement..The limit
13f50 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74   is applied to t
13f60 68 65 20 65 6e 74 69 72 65 20 71 75 65 72 79 20  he entire query 
13f70 6e 6f 74 0a 74 6f 20 74 68 65 20 69 6e 64 69 76  not.to the indiv
13f80 69 64 75 61 6c 20 53 45 4c 45 43 54 20 73 74 61  idual SELECT sta
13f90 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68 20  tement to which 
13fa0 69 74 20 69 73 20 61 74 74 61 63 68 65 64 2e 0a  it is attached..
13fb0 4e 6f 74 65 20 74 68 61 74 20 69 66 20 74 68 65  Note that if the
13fc0 20 4f 46 46 53 45 54 20 6b 65 79 77 6f 72 64 20   OFFSET keyword 
13fd0 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 4c  is used in the L
13fe0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
13ff0 6e 20 74 68 65 0a 6c 69 6d 69 74 20 69 73 20 74  n the.limit is t
14000 68 65 20 66 69 72 73 74 20 6e 75 6d 62 65 72 20  he first number 
14010 61 6e 64 20 74 68 65 20 6f 66 66 73 65 74 20 69  and the offset i
14020 73 20 74 68 65 20 73 65 63 6f 6e 64 20 6e 75 6d  s the second num
14030 62 65 72 2e 20 20 49 66 20 61 0a 63 6f 6d 6d 61  ber.  If a.comma
14040 20 69 73 20 75 73 65 64 20 69 6e 73 74 65 61 64   is used instead
14050 20 6f 66 20 74 68 65 20 4f 46 46 53 45 54 20 6b   of the OFFSET k
14060 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65  eyword, then the
14070 20 6f 66 66 73 65 74 20 69 73 20 74 68 65 0a 66   offset is the.f
14080 69 72 73 74 20 6e 75 6d 62 65 72 20 61 6e 64 20  irst number and 
14090 74 68 65 20 6c 69 6d 69 74 20 69 73 20 74 68 65  the limit is the
140a0 20 73 65 63 6f 6e 64 20 6e 75 6d 62 65 72 2e 20   second number. 
140b0 20 54 68 69 73 20 73 65 65 6d 69 6e 67 0a 63 6f   This seeming.co
140c0 6e 74 72 61 64 69 74 69 6f 6e 20 69 73 20 69 6e  ntradition is in
140d0 74 65 6e 74 69 6f 6e 61 6c 20 2d 20 69 74 20 6d  tentional - it m
140e0 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74 69  aximizes compati
140f0 62 69 6c 69 74 79 20 77 69 74 68 20 6c 65 67 61  bility with lega
14100 63 79 0a 53 51 4c 20 64 61 74 61 62 61 73 65 20  cy.SQL database 
14110 73 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 0a 3c  systems..</p>..<
14120 70 3e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  p>A compound SEL
14130 45 43 54 20 69 73 20 66 6f 72 6d 65 64 20 66 72  ECT is formed fr
14140 6f 6d 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 73  om two or more s
14150 69 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 63 6f  imple SELECTs co
14160 6e 6e 65 63 74 65 64 0a 62 79 20 6f 6e 65 20 6f  nnected.by one o
14170 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 73 20  f the operators 
14180 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c  UNION, UNION ALL
14190 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72 20  , INTERSECT, or 
141a0 45 58 43 45 50 54 2e 20 20 49 6e 0a 61 20 63 6f  EXCEPT.  In.a co
141b0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20 61  mpound SELECT, a
141c0 6c 6c 20 74 68 65 20 63 6f 6e 73 74 69 74 75 65  ll the constitue
141d0 6e 74 20 53 45 4c 45 43 54 73 20 6d 75 73 74 20  nt SELECTs must 
141e0 73 70 65 63 69 66 79 20 74 68 65 0a 73 61 6d 65  specify the.same
141f0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
14200 74 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 72  t columns.  Ther
14210 65 20 6d 61 79 20 62 65 20 6f 6e 6c 79 20 61 20  e may be only a 
14220 73 69 6e 67 6c 65 20 4f 52 44 45 52 20 42 59 0a  single ORDER BY.
14230 63 6c 61 75 73 65 20 61 74 20 74 68 65 20 65 6e  clause at the en
14240 64 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  d of the compoun
14250 64 20 53 45 4c 45 43 54 2e 20 20 54 68 65 20 55  d SELECT.  The U
14260 4e 49 4f 4e 20 61 6e 64 20 55 4e 49 4f 4e 20 41  NION and UNION A
14270 4c 4c 0a 6f 70 65 72 61 74 6f 72 73 20 63 6f 6d  LL.operators com
14280 62 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  bine the results
14290 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 73 20   of the SELECTs 
142a0 74 6f 20 74 68 65 20 72 69 67 68 74 20 61 6e 64  to the right and
142b0 20 6c 65 66 74 20 69 6e 74 6f 0a 61 20 73 69 6e   left into.a sin
142c0 67 6c 65 20 62 69 67 20 74 61 62 6c 65 2e 20 20  gle big table.  
142d0 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
142e0 73 20 74 68 61 74 20 69 6e 20 55 4e 49 4f 4e 20  s that in UNION 
142f0 61 6c 6c 20 72 65 73 75 6c 74 20 72 6f 77 73 0a  all result rows.
14300 61 72 65 20 64 69 73 74 69 6e 63 74 20 77 68 65  are distinct whe
14310 72 65 20 69 6e 20 55 4e 49 4f 4e 20 41 4c 4c 20  re in UNION ALL 
14320 74 68 65 72 65 20 6d 61 79 20 62 65 20 64 75 70  there may be dup
14330 6c 69 63 61 74 65 73 2e 0a 54 68 65 20 49 4e 54  licates..The INT
14340 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20  ERSECT operator 
14350 74 61 6b 65 73 20 74 68 65 20 69 6e 74 65 72 73  takes the inters
14360 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  ection of the re
14370 73 75 6c 74 73 20 6f 66 20 74 68 65 0a 6c 65 66  sults of the.lef
14380 74 20 61 6e 64 20 72 69 67 68 74 20 53 45 4c 45  t and right SELE
14390 43 54 73 2e 20 20 45 58 43 45 50 54 20 74 61 6b  CTs.  EXCEPT tak
143a0 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  es the result of
143b0 20 6c 65 66 74 20 53 45 4c 45 43 54 20 61 66 74   left SELECT aft
143c0 65 72 0a 72 65 6d 6f 76 69 6e 67 20 74 68 65 20  er.removing the 
143d0 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 72  results of the r
143e0 69 67 68 74 20 53 45 4c 45 43 54 2e 20 20 57 68  ight SELECT.  Wh
143f0 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72 65  en three or more
14400 20 53 45 4c 45 43 54 73 0a 61 72 65 20 63 6f 6e   SELECTs.are con
14410 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f  nected into a co
14420 6d 70 6f 75 6e 64 2c 20 74 68 65 79 20 67 72 6f  mpound, they gro
14430 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  up from left to 
14440 72 69 67 68 74 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63  right.</p>...<tc
14450 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
14460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
144a0 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45  #.Section UPDATE
144b0 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20   update {UPDATE 
144c0 55 50 44 41 54 45 73 7d 0a 0a 53 79 6e 74 61 78  UPDATEs}..Syntax
144d0 20 7b 73 71 6c 2d 73 74 61 74 65 6d 65 6e 74 7d   {sql-statement}
144e0 20 7b 0a 55 50 44 41 54 45 20 5b 20 4f 52 20 3c   {.UPDATE [ OR <
144f0 63 6f 6e 66 6c 69 63 74 2d 61 6c 67 6f 72 69 74  conflict-algorit
14500 68 6d 3e 20 5d 20 5b 3c 64 61 74 61 62 61 73 65  hm> ] [<database
14510 2d 6e 61 6d 65 3e 20 2e 5d 20 3c 74 61 62 6c 65  -name> .] <table
14520 2d 6e 61 6d 65 3e 0a 53 45 54 20 3c 61 73 73 69  -name>.SET <assi
14530 67 6e 6d 65 6e 74 3e 20 5b 2c 20 3c 61 73 73 69  gnment> [, <assi
14540 67 6e 6d 65 6e 74 3e 5d 2a 0a 5b 57 48 45 52 45  gnment>]*.[WHERE
14550 20 3c 65 78 70 72 3e 5d 0a 7d 20 7b 61 73 73 69   <expr>].} {assi
14560 67 6e 6d 65 6e 74 7d 20 7b 0a 3c 63 6f 6c 75 6d  gnment} {.<colum
14570 6e 2d 6e 61 6d 65 3e 20 3d 20 3c 65 78 70 72 3e  n-name> = <expr>
14580 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  .}.</tcl>..<p>Th
14590 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
145a0 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 63 68  nt is used to ch
145b0 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f  ange the value o
145c0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 0a 73 65  f columns in .se
145d0 6c 65 63 74 65 64 20 72 6f 77 73 20 6f 66 20 61  lected rows of a
145e0 20 74 61 62 6c 65 2e 20 20 45 61 63 68 20 61 73   table.  Each as
145f0 73 69 67 6e 6d 65 6e 74 20 69 6e 20 61 6e 20 55  signment in an U
14600 50 44 41 54 45 20 73 70 65 63 69 66 69 65 73 0a  PDATE specifies.
14610 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74 6f  a column name to
14620 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65   the left of the
14630 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e 64   equals sign and
14640 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 65 78   an arbitrary ex
14650 70 72 65 73 73 69 6f 6e 0a 74 6f 20 74 68 65 20  pression.to the 
14660 72 69 67 68 74 2e 20 20 54 68 65 20 65 78 70 72  right.  The expr
14670 65 73 73 69 6f 6e 73 20 6d 61 79 20 75 73 65 20  essions may use 
14680 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6f 74  the values of ot
14690 68 65 72 20 63 6f 6c 75 6d 6e 73 2e 0a 41 6c 6c  her columns..All
146a0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
146b0 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72   evaluated befor
146c0 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74  e any assignment
146d0 73 20 61 72 65 20 6d 61 64 65 2e 0a 41 20 57 48  s are made..A WH
146e0 45 52 45 20 63 6c 61 75 73 65 20 63 61 6e 20 62  ERE clause can b
146f0 65 20 75 73 65 64 20 74 6f 20 72 65 73 74 72 69  e used to restri
14700 63 74 20 77 68 69 63 68 20 72 6f 77 73 20 61 72  ct which rows ar
14710 65 20 75 70 64 61 74 65 64 2e 3c 2f 70 3e 0a 0a  e updated.</p>..
14720 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
14730 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20  conflict-clause 
14740 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63 69  allows the speci
14750 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20 61  fication of an a
14760 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74  lternative.const
14770 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
14780 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
14790 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
147a0 67 20 74 68 69 73 20 6f 6e 65 20 63 6f 6d 6d 61  g this one comma
147b0 6e 64 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74  nd..See the sect
147c0 69 6f 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43  ion titled.[ON C
147d0 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
147e0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
147f0 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
14800 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
14810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
14850 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76  Section VACUUM v
14860 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 53 79  acuum VACUUM..Sy
14870 6e 74 61 78 20 7b 73 71 6c 2d 73 74 61 74 65 6d  ntax {sql-statem
14880 65 6e 74 7d 20 7b 0a 56 41 43 55 55 4d 0a 7d 0a  ent} {.VACUUM.}.
14890 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57 68 65 6e 20  </tcl>..<p>When 
148a0 61 6e 20 6f 62 6a 65 63 74 20 28 74 61 62 6c 65  an object (table
148b0 2c 20 69 6e 64 65 78 2c 20 6f 72 20 74 72 69 67  , index, or trig
148c0 67 65 72 29 20 69 73 20 64 72 6f 70 70 65 64 20  ger) is dropped 
148d0 66 72 6f 6d 20 74 68 65 20 0a 64 61 74 61 62 61  from the .databa
148e0 73 65 2c 20 69 74 20 6c 65 61 76 65 73 20 62 65  se, it leaves be
148f0 68 69 6e 64 20 65 6d 70 74 79 20 73 70 61 63 65  hind empty space
14900 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68  .  This makes th
14910 65 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  e database .file
14920 20 6c 61 72 67 65 72 20 74 68 61 6e 20 69 74 20   larger than it 
14930 6e 65 65 64 73 20 74 6f 20 62 65 2c 20 62 75 74  needs to be, but
14940 20 63 61 6e 20 73 70 65 65 64 20 75 70 20 69 6e   can speed up in
14950 73 65 72 74 73 2e 20 20 49 6e 20 74 69 6d 65 20  serts.  In time 
14960 0a 69 6e 73 65 72 74 73 20 61 6e 64 20 64 65 6c  .inserts and del
14970 65 74 65 73 20 63 61 6e 20 6c 65 61 76 65 20 74  etes can leave t
14980 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
14990 20 73 74 72 75 63 74 75 72 65 20 66 72 61 67 6d   structure fragm
149a0 65 6e 74 65 64 2c 20 0a 77 68 69 63 68 20 73 6c  ented, .which sl
149b0 6f 77 73 20 64 6f 77 6e 20 64 69 73 6b 20 61 63  ows down disk ac
149c0 63 65 73 73 20 74 6f 20 74 68 65 20 64 61 74 61  cess to the data
149d0 62 61 73 65 20 63 6f 6e 74 65 6e 74 73 2e 3c 2f  base contents.</
149e0 70 3e 0a 0a 3c 70 3e 54 68 65 20 56 41 43 55 55  p>..<p>The VACUU
149f0 4d 20 63 6f 6d 6d 61 6e 64 20 63 6c 65 61 6e 73  M command cleans
14a00 0a 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61  .the main databa
14a10 73 65 20 62 79 20 63 6f 70 79 69 6e 67 20 69 74  se by copying it
14a20 73 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 61 20  s contents to a 
14a30 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
14a40 73 65 20 66 69 6c 65 20 61 6e 64 20 0a 72 65 6c  se file and .rel
14a50 6f 61 64 69 6e 67 20 74 68 65 20 6f 72 69 67 69  oading the origi
14a60 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c  nal database fil
14a70 65 20 66 72 6f 6d 20 74 68 65 20 63 6f 70 79 2e  e from the copy.
14a80 20 20 54 68 69 73 20 65 6c 69 6d 69 6e 61 74 65    This eliminate
14a90 73 20 0a 66 72 65 65 20 70 61 67 65 73 2c 20 20  s .free pages,  
14aa0 61 6c 69 67 6e 73 20 74 61 62 6c 65 20 64 61 74  aligns table dat
14ab0 61 20 74 6f 20 62 65 20 63 6f 6e 74 69 67 75 6f  a to be contiguo
14ac0 75 73 2c 20 61 6e 64 20 6f 74 68 65 72 77 69 73  us, and otherwis
14ad0 65 20 63 6c 65 61 6e 73 20 0a 75 70 20 74 68 65  e cleans .up the
14ae0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 73   database file s
14af0 74 72 75 63 74 75 72 65 2e 3c 2f 70 3e 0a 0a 3c  tructure.</p>..<
14b00 70 3e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d  p>The VACUUM com
14b10 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67 65 20  mand may change 
14b20 74 68 65 20 0a 3c 61 20 68 72 65 66 3d 22 6c 61  the .<a href="la
14b30 6e 67 5f 63 72 65 61 74 65 74 61 62 6c 65 2e 68  ng_createtable.h
14b40 74 6d 6c 23 72 6f 77 69 64 22 3e 52 4f 57 49 44  tml#rowid">ROWID
14b50 3c 2f 61 3e 20 6f 66 20 65 6e 74 69 72 65 73 20  </a> of entires 
14b60 69 6e 20 74 61 62 6c 65 73 20 74 68 61 74 20 64  in tables that d
14b70 6f 0a 6e 6f 74 20 68 61 76 65 20 61 6e 20 65 78  o.not have an ex
14b80 70 6c 69 63 69 74 20 49 4e 54 45 47 45 52 20 50  plicit INTEGER P
14b90 52 49 4d 41 52 59 20 4b 45 59 2e 3c 2f 70 3e 0a  RIMARY KEY.</p>.
14ba0 0a 3c 70 3e 56 41 43 55 55 4d 20 6f 6e 6c 79 20  .<p>VACUUM only 
14bb0 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d 61 69  works on the mai
14bc0 6e 20 64 61 74 61 62 61 73 65 2e 0a 49 74 20 69  n database..It i
14bd0 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
14be0 6f 20 56 41 43 55 55 4d 20 61 6e 20 61 74 74 61  o VACUUM an atta
14bf0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 66 69  ched database fi
14c00 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  le.</p>..<p>The 
14c10 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77  VACUUM command w
14c20 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72  ill fail if ther
14c30 65 20 69 73 20 61 6e 20 61 63 74 69 76 65 20 74  e is an active t
14c40 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20  ransaction..The 
14c50 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 69  VACUUM command i
14c60 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 69 6e  s a no-op for in
14c70 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
14c80 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 73 20 6f 66  s.</p>..<p>As of
14c90 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
14ca0 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74  3.1, an alternat
14cb0 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65  ive to using the
14cc0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 0a   VACUUM command.
14cd0 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d  is auto-vacuum m
14ce0 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69  ode, enabled usi
14cf0 6e 67 20 74 68 65 20 0a 5b 61 75 74 6f 5f 76 61  ng the .[auto_va
14d00 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 20 20 57  cuum] pragma.  W
14d10 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  hen [auto_vacuum
14d20 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72  ] is enabled for
14d30 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 6c 61   a database, .la
14d40 72 67 65 20 64 65 6c 65 74 65 73 20 63 61 75 73  rge deletes caus
14d50 65 0a 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  e.the size of th
14d60 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
14d70 74 6f 20 73 68 72 69 6e 6b 2e 20 20 48 6f 77 65  to shrink.  Howe
14d80 76 65 72 2c 20 5b 61 75 74 6f 5f 76 61 63 75 75  ver, [auto_vacuu
14d90 6d 5d 0a 61 6c 73 6f 20 63 61 75 73 65 73 20 65  m].also causes e
14da0 78 63 65 73 73 20 66 72 61 67 6d 65 6e 74 61 74  xcess fragmentat
14db0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62  ion of the datab
14dc0 61 73 65 20 66 69 6c 65 2e 20 20 41 6e 64 20 5b  ase file.  And [
14dd0 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65  auto_vacuum].doe
14de0 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61  s not compact pa
14df0 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70  rtially filled p
14e00 61 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ages of the data
14e10 62 61 73 65 20 61 73 20 56 41 43 55 55 4d 0a 64  base as VACUUM.d
14e20 6f 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  oes..</p>..<tcl>
14e30 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
14e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
14e80 20 41 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f   A list of keywo
14e90 72 64 73 2e 20 20 41 20 61 73 74 65 72 69 73 6b  rds.  A asterisk
14ea0 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
14eb0 65 20 6b 65 79 77 6f 72 64 20 69 66 20 69 74 20  e keyword if it 
14ec0 69 73 20 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c  is on.# the fall
14ed0 62 61 63 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74  back list..#.set
14ee0 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c   keyword_list [l
14ef0 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54 2a  sort {.   ABORT*
14f00 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52  .   ADD.   AFTER
14f10 2a 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45  *.   ALL.   ALTE
14f20 52 0a 20 20 20 41 4e 41 4c 59 5a 45 2a 0a 20 20  R.   ANALYZE*.  
14f30 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53   AND.   AS.   AS
14f40 43 2a 0a 20 20 20 41 54 54 41 43 48 2a 0a 20 20  C*.   ATTACH*.  
14f50 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
14f60 20 20 42 45 46 4f 52 45 2a 0a 20 20 20 42 45 47    BEFORE*.   BEG
14f70 49 4e 2a 0a 20 20 20 42 45 54 57 45 45 4e 0a 20  IN*.   BETWEEN. 
14f80 20 20 42 59 0a 20 20 20 43 41 53 43 41 44 45 2a    BY.   CASCADE*
14f90 0a 20 20 20 43 41 53 45 0a 20 20 20 43 41 53 54  .   CASE.   CAST
14fa0 2a 0a 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f  *.   CHECK.   CO
14fb0 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a  LLATE.   COLUMN.
14fc0 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e     COMMIT.   CON
14fd0 46 4c 49 43 54 2a 0a 20 20 20 43 4f 4e 53 54 52  FLICT*.   CONSTR
14fe0 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a 20  AINT.   CREATE. 
14ff0 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52 45    CROSS.   CURRE
15000 4e 54 5f 44 41 54 45 2a 0a 20 20 20 43 55 52 52  NT_DATE*.   CURR
15010 45 4e 54 5f 54 49 4d 45 2a 0a 20 20 20 43 55 52  ENT_TIME*.   CUR
15020 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2a 0a  RENT_TIMESTAMP*.
15030 20 20 20 44 41 54 41 42 41 53 45 2a 0a 20 20 20     DATABASE*.   
15040 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52  DEFAULT.   DEFER
15050 52 45 44 2a 0a 20 20 20 44 45 46 45 52 52 41 42  RED*.   DEFERRAB
15060 4c 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20  LE.   DELETE.   
15070 44 45 53 43 2a 0a 20 20 20 44 45 54 41 43 48 2a  DESC*.   DETACH*
15080 0a 20 20 20 44 49 53 54 49 4e 43 54 0a 20 20 20  .   DISTINCT.   
15090 44 52 4f 50 0a 20 20 20 45 4e 44 2a 0a 20 20 20  DROP.   END*.   
150a0 45 41 43 48 2a 0a 20 20 20 45 4c 53 45 0a 20 20  EACH*.   ELSE.  
150b0 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45 50   ESCAPE.   EXCEP
150c0 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 2a 0a  T.   EXCLUSIVE*.
150d0 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50     EXISTS.   EXP
150e0 4c 41 49 4e 2a 0a 20 20 20 46 41 49 4c 2a 0a 20  LAIN*.   FAIL*. 
150f0 20 20 46 4f 52 2a 0a 20 20 20 46 4f 52 45 49 47    FOR*.   FOREIG
15100 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c  N.   FROM.   FUL
15110 4c 0a 20 20 20 47 4c 4f 42 2a 0a 20 20 20 47 52  L.   GLOB*.   GR
15120 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20  OUP.   HAVING.  
15130 20 49 46 2a 0a 20 20 20 49 47 4e 4f 52 45 2a 0a   IF*.   IGNORE*.
15140 20 20 20 49 4d 4d 45 44 49 41 54 45 2a 0a 20 20     IMMEDIATE*.  
15150 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20   IN.   INDEX.   
15160 49 4e 49 54 49 41 4c 4c 59 2a 0a 20 20 20 49 4e  INITIALLY*.   IN
15170 4e 45 52 0a 20 20 20 49 4e 53 45 52 54 0a 20 20  NER.   INSERT.  
15180 20 49 4e 53 54 45 41 44 2a 0a 20 20 20 49 4e 54   INSTEAD*.   INT
15190 45 52 53 45 43 54 0a 20 20 20 49 4e 54 4f 0a 20  ERSECT.   INTO. 
151a0 20 20 49 53 0a 20 20 20 49 53 4e 55 4c 4c 0a 20    IS.   ISNULL. 
151b0 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59 2a 0a 20    JOIN.   KEY*. 
151c0 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45 2a 0a    LEFT.   LIKE*.
151d0 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54 43     LIMIT.   MATC
151e0 48 2a 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20  H*.   NATURAL.  
151f0 20 4e 4f 54 0a 20 20 20 4e 4f 54 4e 55 4c 4c 0a   NOT.   NOTNULL.
15200 20 20 20 4e 55 4c 4c 0a 20 20 20 4f 46 2a 0a 20     NULL.   OF*. 
15210 20 20 4f 46 46 53 45 54 2a 0a 20 20 20 4f 4e 0a    OFFSET*.   ON.
15220 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52 0a 20     OR.   ORDER. 
15230 20 20 4f 55 54 45 52 0a 20 20 20 50 4c 41 4e 2a    OUTER.   PLAN*
15240 0a 20 20 20 50 52 41 47 4d 41 2a 0a 20 20 20 50  .   PRAGMA*.   P
15250 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52 59 2a  RIMARY.   QUERY*
15260 0a 20 20 20 52 41 49 53 45 2a 0a 20 20 20 52 45  .   RAISE*.   RE
15270 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45  FERENCES.   REGE
15280 58 50 0a 20 20 20 52 45 49 4e 44 45 58 2a 0a 20  XP.   REINDEX*. 
15290 20 20 52 45 4e 41 4d 45 2a 0a 20 20 20 52 45 50    RENAME*.   REP
152a0 4c 41 43 45 2a 0a 20 20 20 52 45 53 54 52 49 43  LACE*.   RESTRIC
152b0 54 2a 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52  T*.   RIGHT.   R
152c0 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 2a 0a  OLLBACK.   ROW*.
152d0 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45 54     SELECT.   SET
152e0 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45 4d  .   TABLE.   TEM
152f0 50 2a 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 2a  P*.   TEMPORARY*
15300 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20  .   THEN.   TO. 
15310 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20    TRANSACTION.  
15320 20 54 52 49 47 47 45 52 2a 0a 20 20 20 55 4e 49   TRIGGER*.   UNI
15330 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
15340 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
15350 20 20 20 56 41 43 55 55 4d 2a 0a 20 20 20 56 41     VACUUM*.   VA
15360 4c 55 45 53 0a 20 20 20 56 49 45 57 2a 0a 20 20  LUES.   VIEW*.  
15370 20 56 49 52 54 55 41 4c 2a 0a 20 20 20 57 48 45   VIRTUAL*.   WHE
15380 4e 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68  N.   WHERE.}]..h
15390 64 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61  d_puts {<DIV cla
153a0 73 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22  ss="pdf_section"
153b0 3e 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69  >}.Section {SQLi
153c0 74 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79  te Keywords} key
153d0 77 6f 72 64 73 20 7b 7b 53 51 4c 20 6b 65 79 77  words {{SQL keyw
153e0 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72  ord} {SQL keywor
153f0 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f  ds}}.hd_puts {</
15400 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  DIV>}.</tcl>..<p
15410 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72  >The SQL standar
15420 64 20 73 70 65 63 69 66 69 65 73 20 61 20 68 75  d specifies a hu
15430 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79  ge number of key
15440 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79 20  words which may 
15450 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20 74  not.be used as t
15460 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c  he names of tabl
15470 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c  es, indices, col
15480 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c  umns, databases,
15490 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75   user-defined.fu
154a0 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69  nctions, collati
154b0 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62  ons, virtual tab
154c0 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61  le modules, or a
154d0 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f  ny other named o
154e0 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20  bject..The list 
154f0 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73  of keywords is s
15500 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20  o long that few 
15510 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d  people can remem
15520 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f  ber them all..Fo
15530 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c  r most SQL code,
15540 20 79 6f 75 72 20 73 61 66 65 73 74 20 62 65 74   your safest bet
15550 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65   is to never use
15560 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e   any English lan
15570 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68  guage.word as th
15580 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72  e name of a user
15590 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e  -defined object.
155a0 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20  </p>..<p>If you 
155b0 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65  want to use a ke
155c0 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c  yword as a name,
155d0 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f   you need to quo
155e0 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72  te it.  There.ar
155f0 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20  e three ways of 
15600 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73  quoting keywords
15610 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a   in SQLite:</p>.
15620 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  .<p>.<blockquote
15630 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c  >.<table>.<tr>.<
15640 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
15650 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e  <b>'keyword'</b>
15660 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
15670 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41  20"></td>..<td>A
15680 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67   keyword in sing
15690 6c 65 20 71 75 6f 74 65 73 20 69 73 20 69 6e 74  le quotes is int
156a0 65 72 70 72 65 74 65 64 20 61 73 20 61 20 6c 69  erpreted as a li
156b0 74 65 72 61 6c 20 73 74 72 69 6e 67 0a 20 20 20  teral string.   
156c0 20 20 20 20 20 69 66 20 69 74 20 6f 63 63 75 72       if it occur
156d0 73 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20 77  s in a context w
156e0 68 65 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69  here a string li
156f0 74 65 72 61 6c 20 69 73 20 61 6c 6c 6f 77 65 64  teral is allowed
15700 2c 20 6f 74 68 65 72 77 69 73 65 0a 09 69 74 20  , otherwise..it 
15710 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 61 73  is understood as
15720 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
15730 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 09 3c  /td></tr>.<tr>.<
15740 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
15750 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e  <b>"keyword"</b>
15760 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09  </td><td></td>..
15770 3c 74 64 3e 41 20 6b 65 79 77 6f 72 64 20 69 6e  <td>A keyword in
15780 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69   double-quotes i
15790 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
157a0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69   an identifier i
157b0 66 0a 20 20 20 20 20 20 20 20 69 74 20 6d 61 74  f.        it mat
157c0 63 68 65 73 20 61 20 6b 6e 6f 77 6e 20 69 64 65  ches a known ide
157d0 6e 74 69 66 69 65 72 2e 20 20 4f 74 68 65 72 77  ntifier.  Otherw
157e0 69 73 65 20 69 74 20 69 73 20 69 6e 74 65 72 70  ise it is interp
157f0 72 65 74 65 64 20 61 73 20 61 0a 20 20 20 20 20  reted as a.     
15800 20 20 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61     string litera
15810 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72  l.</td></tr>.<tr
15820 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
15830 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f  p"><b>&#91;keywo
15840 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e  rd&#93;</b></td>
15850 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 41  <td></td>..<td>A
15860 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65   keyword enclose
15870 64 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63  d in square brac
15880 6b 65 74 73 20 69 73 20 61 6c 77 61 79 73 20 75  kets is always u
15890 6e 64 65 72 73 74 6f 6f 64 20 61 73 0a 20 20 20  nderstood as.   
158a0 20 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69       an identifi
158b0 65 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  er.  This is not
158c0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20   standard SQL.  
158d0 54 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63  This quoting mec
158e0 68 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69  hanism.        i
158f0 73 20 75 73 65 64 20 62 79 20 4d 53 20 41 63 63  s used by MS Acc
15900 65 73 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76  ess and SQL Serv
15910 65 72 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64  er and is includ
15920 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72  ed in SQLite for
15930 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69  .        compati
15940 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72  bility.</td></tr
15950 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  >.</table>.</blo
15960 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c  ckquote>.</p>..<
15970 70 3e 51 75 6f 74 65 64 20 6b 65 79 77 6f 72 64  p>Quoted keyword
15980 73 20 61 72 65 20 75 6e 61 65 73 74 68 65 74 69  s are unaestheti
15990 63 2e 0a 54 6f 20 68 65 6c 70 20 79 6f 75 20 61  c..To help you a
159a0 76 6f 69 64 20 74 68 65 6d 2c 20 53 51 4c 69 74  void them, SQLit
159b0 65 20 61 6c 6c 6f 77 73 20 6d 61 6e 79 20 6b 65  e allows many ke
159c0 79 77 6f 72 64 73 20 74 6f 20 62 65 20 75 73 65  ywords to be use
159d0 64 20 75 6e 71 75 6f 74 65 64 0a 61 73 20 74 68  d unquoted.as th
159e0 65 20 6e 61 6d 65 73 20 6f 66 20 64 61 74 61 62  e names of datab
159f0 61 73 65 73 2c 20 74 61 62 6c 65 73 2c 20 69 6e  ases, tables, in
15a00 64 69 63 65 73 2c 20 74 72 69 67 67 65 72 73 2c  dices, triggers,
15a10 20 76 69 65 77 73 2c 20 63 6f 6c 75 6d 6e 73 2c   views, columns,
15a20 0a 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75  .user-defined fu
15a30 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69  nctions, collati
15a40 6f 6e 73 2c 20 61 74 74 61 63 68 65 64 20 64 61  ons, attached da
15a50 74 61 62 61 73 65 73 2c 20 61 6e 64 20 76 69 72  tabases, and vir
15a60 74 75 61 6c 0a 66 75 6e 63 74 69 6f 6e 20 6d 6f  tual.function mo
15a70 64 75 6c 65 73 2e 0a 49 6e 20 74 68 65 20 6c 69  dules..In the li
15a80 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 74  st of keywords t
15a90 68 61 74 20 66 6f 6c 6c 6f 77 73 2c 20 74 68 6f  hat follows, tho
15aa0 73 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  se that can be u
15ab0 73 65 64 20 61 73 20 69 64 65 6e 74 69 66 69 65  sed as identifie
15ac0 72 73 0a 61 72 65 20 73 68 6f 77 6e 20 69 6e 20  rs.are shown in 
15ad0 61 6e 20 69 74 61 6c 69 63 20 66 6f 6e 74 2e 20  an italic font. 
15ae0 20 4b 65 79 77 6f 72 64 73 20 74 68 61 74 20 6d   Keywords that m
15af0 75 73 74 20 62 65 20 71 75 6f 74 65 64 20 69 6e  ust be quoted in
15b00 20 6f 72 64 65 72 20 74 6f 20 62 65 0a 75 73 65   order to be.use
15b10 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72 73  d as identifiers
15b20 20 61 72 65 20 73 68 6f 77 6e 20 69 6e 20 62 6f   are shown in bo
15b30 6c 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c  ld.</p>..<p>.SQL
15b40 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79  ite adds new key
15b50 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20  words from time 
15b60 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20  to time when it 
15b70 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61  takes on new fea
15b80 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65  tures..So to pre
15b90 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66  vent your code f
15ba0 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e  rom being broken
15bb0 20 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e   by future enhan
15bc0 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f  cements, you sho
15bd0 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f  uld.normally quo
15be0 74 65 20 61 6e 79 20 69 6e 64 65 6e 74 69 66 69  te any indentifi
15bf0 65 72 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e  er that is an En
15c00 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77  glish language w
15c10 6f 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75  ord, even if.you
15c20 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e   do not have to.
15c30 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66  .</p>..<p>.The f
15c40 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
15c50 20 6b 65 79 77 6f 72 64 73 20 63 75 72 72 65 6e   keywords curren
15c60 74 6c 79 20 72 65 63 6f 67 6e 69 7a 65 64 20 62  tly recognized b
15c70 79 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a  y SQLite:.</p>..
15c80 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61  <blockquote>.<ta
15c90 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25 22  ble width="100%"
15ca0 20 63 6c 61 73 73 3d 22 70 64 66 5f 6b 65 79 77   class="pdf_keyw
15cb0 6f 72 64 73 22 3e 0a 3c 74 72 3e 0a 3c 74 64 20  ords">.<tr>.<td 
15cc0 61 6c 69 67 6e 3d 22 6c 65 66 74 22 20 76 61 6c  align="left" val
15cd0 69 67 6e 3d 22 74 6f 70 22 20 77 69 64 74 68 3d  ign="top" width=
15ce0 22 32 30 25 22 3e 0a 0a 3c 74 63 6c 3e 0a 73 65  "20%">..<tcl>.se
15cf0 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  t n [llength $ke
15d00 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73 65 74 20  yword_list].set 
15d10 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52 6f 77 20  nCol 5.set nRow 
15d20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e 43 6f 6c  [expr {($n+$nCol
15d30 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73 65 74 20  -1)/$nCol}].set 
15d40 69 20 30 0a 66 6f 72 65 61 63 68 20 77 6f 72 64  i 0.foreach word
15d50 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 7b   $keyword_list {
15d60 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69  .  if {[string i
15d70 6e 64 65 78 20 24 77 6f 72 64 20 65 6e 64 5d 3d  ndex $word end]=
15d80 3d 22 2a 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  ="*"} {.    set 
15d90 77 6f 72 64 20 5b 73 74 72 69 6e 67 20 72 61 6e  word [string ran
15da0 67 65 20 24 77 6f 72 64 20 30 20 65 6e 64 2d 31  ge $word 0 end-1
15db0 5d 0a 20 20 20 20 73 65 74 20 66 6f 6e 74 20 69  ].    set font i
15dc0 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
15dd0 73 65 74 20 66 6f 6e 74 20 62 0a 20 20 7d 0a 20  set font b.  }. 
15de0 20 69 66 20 7b 24 69 3d 3d 24 6e 52 6f 77 7d 20   if {$i==$nRow} 
15df0 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c  {.    hd_puts "<
15e00 2f 74 64 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c  /td><td valign=\
15e10 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d 5c 22 6c  "top\" align=\"l
15e20 65 66 74 5c 22 20 77 69 64 74 68 3d 5c 22 32 30  eft\" width=\"20
15e30 25 5c 22 3e 22 0a 20 20 20 20 73 65 74 20 69 20  %\">".    set i 
15e40 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  1.  } else {.   
15e50 20 69 6e 63 72 20 69 0a 20 20 7d 0a 20 20 68 64   incr i.  }.  hd
15e60 5f 70 75 74 73 20 22 3c 24 66 6f 6e 74 3e 24 77  _puts "<$font>$w
15e70 6f 72 64 3c 2f 24 66 6f 6e 74 3e 3c 62 72 3e 22  ord</$font><br>"
15e80 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 64 3e 3c  .}.</tcl>.</td><
15e90 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c  /tr></table></bl
15ea0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 68 32 3e 53  ockquote>..<h2>S
15eb0 70 65 63 69 61 6c 20 6e 61 6d 65 73 3c 2f 68 32  pecial names</h2
15ec0 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
15ed0 69 6e 67 20 61 72 65 20 6e 6f 74 20 6b 65 79 77  ing are not keyw
15ee0 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65 2c 20  ords in SQLite, 
15ef0 62 75 74 20 61 72 65 20 75 73 65 64 20 61 73 20  but are used as 
15f00 6e 61 6d 65 73 20 6f 66 20 0a 73 79 73 74 65 6d  names of .system
15f10 20 6f 62 6a 65 63 74 73 2e 20 20 54 68 65 79 20   objects.  They 
15f20 63 61 6e 20 62 65 20 75 73 65 64 20 61 73 20 61  can be used as a
15f30 6e 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  n identifier for
15f40 20 61 20 64 69 66 66 65 72 65 6e 74 20 0a 74 79   a different .ty
15f50 70 65 20 6f 66 20 6f 62 6a 65 63 74 2e 3c 2f 70  pe of object.</p
15f60 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 63  >..<blockquote c
15f70 6c 61 73 73 3d 22 70 64 66 5f 6b 65 79 77 6f 72  lass="pdf_keywor
15f80 64 73 22 3e 3c 62 3e 0a 20 20 5f 52 4f 57 49 44  ds"><b>.  _ROWID
15f90 5f 3c 62 72 3e 0a 20 20 4d 41 49 4e 3c 62 72 3e  _<br>.  MAIN<br>
15fa0 0a 20 20 4f 49 44 3c 62 72 3e 0a 20 20 52 4f 57  .  OID<br>.  ROW
15fb0 49 44 3c 62 72 3e 0a 20 20 53 51 4c 49 54 45 5f  ID<br>.  SQLITE_
15fc0 4d 41 53 54 45 52 3c 62 72 3e 0a 20 20 53 51 4c  MASTER<br>.  SQL
15fd0 49 54 45 5f 53 45 51 55 45 4e 43 45 3c 62 72 3e  ITE_SEQUENCE<br>
15fe0 0a 20 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 4d  .  SQLITE_TEMP_M
15ff0 41 53 54 45 52 3c 62 72 3e 0a 20 20 54 45 4d 50  ASTER<br>.  TEMP
16000 3c 62 72 3e 0a 3c 2f 62 3e 3c 2f 62 6c 6f 63 6b  <br>.</b></block
16010 71 75 6f 74 65 3e 0a                             quote>.