Documentation Source Text

Hex Artifact Content
Login

Artifact 8edb4a7ac8f1757f7b62fee66ebb5dc445501ad1:


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 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 52 45 50 4c 41 43 45 20 72 65 70 6c     {REPLACE repl
0380: 61 63 65 7d 0a 20 20 20 20 7b 44 45 4c 45 54 45  ace}.    {DELETE
0390: 20 64 65 6c 65 74 65 7d 0a 20 20 20 20 7b 55 50   delete}.    {UP
03a0: 44 41 54 45 20 75 70 64 61 74 65 7d 0a 20 20 20  DATE update}.   
03b0: 20 7b 53 45 4c 45 43 54 20 73 65 6c 65 63 74 7d   {SELECT select}
03c0: 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74 20 63 6f  .    {comment co
03d0: 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45 58 50 4c  mment}.    {EXPL
03e0: 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a 20 20 20  AIN explain}.   
03f0: 20 7b 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70   {expression exp
0400: 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49 4e 20 54  r}.    {{BEGIN T
0410: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
0420: 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20 7b 7b 43  saction}.    {{C
0430: 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f  OMMIT TRANSACTIO
0440: 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43  N} transaction C
0450: 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b 45 4e 44  OMMIT}.    {{END
0460: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
0470: 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d 4d 49 54  ansaction COMMIT
0480: 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42 41 43 4b  }.    {{ROLLBACK
0490: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72   TRANSACTION} tr
04a0: 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c 4c 42 41  ansaction ROLLBA
04b0: 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45 50 4f 49  CK}.    {SAVEPOI
04c0: 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d 0a 20 20  NT savepoint}.  
04d0: 20 20 7b 7b 52 45 4c 45 41 53 45 20 53 41 56 45    {{RELEASE SAVE
04e0: 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74  POINT} savepoint
04f0: 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20 20 20 20   SAVEPOINT}.    
0500: 7b 50 52 41 47 4d 41 20 70 72 61 67 6d 61 2e 68  {PRAGMA pragma.h
0510: 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e 20 43 4f  tml}.    {{ON CO
0520: 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
0530: 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20 7b 7b 43  onflict}.    {{C
0540: 52 45 41 54 45 20 56 49 45 57 7d 20 63 72 65 61  REATE VIEW} crea
0550: 74 65 76 69 65 77 7d 0a 20 20 20 20 7b 7b 44 52  teview}.    {{DR
0560: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
0570: 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20  w}.    {{CREATE 
0580: 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65 74  TRIGGER} createt
0590: 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 44 52  rigger}.    {{DR
05a0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
05b0: 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b 7b 41  trigger}.    {{A
05c0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20  TTACH DATABASE} 
05d0: 61 74 74 61 63 68 7d 0a 20 20 20 20 7b 7b 44 45  attach}.    {{DE
05e0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
05f0: 65 74 61 63 68 7d 0a 20 20 20 20 20 20 7b 52 45  etach}.      {RE
0600: 49 4e 44 45 58 20 72 65 69 6e 64 65 78 7d 0a 20  INDEX reindex}. 
0610: 20 20 20 7b 7b 41 4c 54 45 52 20 54 41 42 4c 45     {{ALTER TABLE
0620: 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d 0a 20 20  } altertable}.  
0630: 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61    {{ANALYZE} ana
0640: 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49 4e 44 45  lyze}.    {{INDE
0650: 58 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62  XED BY} indexedb
0660: 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72 65 67 61  y}.    {{aggrega
0670: 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d 20 61 67  te functions} ag
0680: 67 66 75 6e 63 20 61 67 67 66 75 6e 63 7d 0a 20  gfunc aggfunc}. 
0690: 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e 63 74 69     {{core functi
06a0: 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 63 6f  ons} corefunc co
06b0: 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b 7b 64 61  refunc}.    {{da
06c0: 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
06d0: 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20  tions} datefunc 
06e0: 64 61 74 65 66 75 6e 63 7d 0a 20 20 20 20 7b 6b  datefunc}.    {k
06f0: 65 79 77 6f 72 64 73 20 6b 65 79 77 6f 72 64 73  eywords keywords
0700: 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d   {SQL keywords}}
0710: 0a 20 20 7d 0a 20 20 73 65 74 20 6c 61 6e 67 5f  .  }.  set lang_
0720: 73 65 63 74 69 6f 6e 5f 62 72 65 61 6b 20 5b 65  section_break [e
0730: 78 70 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24  xpr {([llength $
0740: 6c 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73  lang_section_lis
0750: 74 5d 2b 32 29 2f 33 7d 5d 0a 20 20 66 6f 72 65  t]+2)/3}].  fore
0760: 61 63 68 20 7b 73 65 63 74 69 6f 6e 7d 20 5b 6c  ach {section} [l
0770: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 64  sort -index 0 -d
0780: 69 63 74 69 6f 6e 61 72 79 20 24 6c 61 6e 67 5f  ictionary $lang_
0790: 73 65 63 74 69 6f 6e 5f 6c 69 73 74 5d 20 7b 0a  section_list] {.
07a0: 20 20 66 6f 72 65 61 63 68 20 7b 73 5f 74 69 74    foreach {s_tit
07b0: 6c 65 20 73 5f 74 61 67 20 73 5f 6b 77 7d 20 24  le s_tag s_kw} $
07c0: 73 65 63 74 69 6f 6e 20 7b 7d 0a 20 20 69 66 20  section {}.  if 
07d0: 7b 24 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a  {$s_kw == ""} {.
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 7d 0a 20 20 69 66 20 7b  title.  }.  if {
0800: 24 73 5f 74 61 67 3d 3d 22 70 72 61 67 6d 61 2e  $s_tag=="pragma.
0810: 68 74 6d 6c 22 7d 20 7b 0a 20 20 20 20 73 65 74  html"} {.    set
0820: 20 75 72 6c 20 24 73 5f 74 61 67 0a 20 20 7d 20   url $s_tag.  } 
0830: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 75  else {.    set u
0840: 72 6c 20 6c 61 6e 67 5f 24 73 5f 74 61 67 2e 68  rl lang_$s_tag.h
0850: 74 6d 6c 0a 20 20 7d 0a 20 20 68 64 5f 72 65 73  tml.  }.  hd_res
0860: 6f 6c 76 65 20 22 3c 6c 69 3e 5c 5b 24 73 5f 6b  olve "<li>\[$s_k
0870: 77 7c 24 73 5f 74 69 74 6c 65 5c 5d 3c 2f 6c 69  w|$s_title\]</li
0880: 3e 22 0a 20 20 69 6e 63 72 20 69 0a 20 20 69 66  >".  incr i.  if
0890: 20 7b 24 69 3d 3d 24 6c 61 6e 67 5f 73 65 63 74   {$i==$lang_sect
08a0: 69 6f 6e 5f 62 72 65 61 6b 20 7c 7c 20 24 69 3d  ion_break || $i=
08b0: 3d 32 2a 24 6c 61 6e 67 5f 73 65 63 74 69 6f 6e  =2*$lang_section
08c0: 5f 62 72 65 61 6b 7d 20 7b 0a 20 20 20 20 68 64  _break} {.    hd
08d0: 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c 2f 74 64  _puts "</ul></td
08e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
08f0: 70 5c 22 3e 3c 75 6c 3e 22 0a 20 20 7d 0a 7d 0a  p\"><ul>".  }.}.
0900: 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c 3e 3c 2f 74 64  </tcl>.</ul></td
0910: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 0a  ></tr></table>..
0920: 3c 70 3e 5e 54 68 65 20 72 6f 75 74 69 6e 65 73  <p>^The routines
0930: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0940: 65 5f 76 32 28 29 5d 2c 20 5b 73 71 6c 69 74 65  e_v2()], [sqlite
0950: 33 5f 70 72 65 70 61 72 65 28 29 5d 2c 0a 5b 73  3_prepare()],.[s
0960: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
0970: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 70 72  ()], [sqlite3_pr
0980: 65 70 61 72 65 31 36 5f 76 32 28 29 5d 2c 20 0a  epare16_v2()], .
0990: 5b 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 5d  [sqlite3_exec()]
09a0: 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 67  , and [sqlite3_g
09b0: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 63 63 65  et_table()] acce
09c0: 70 74 0a 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  pt.an SQL statem
09d0: 65 6e 74 20 6c 69 73 74 20 28 73 71 6c 2d 73 74  ent list (sql-st
09e0: 6d 74 2d 6c 69 73 74 29 20 77 68 69 63 68 20 69  mt-list) which i
09f0: 73 20 61 20 73 65 6d 69 63 6f 6c 6f 6e 2d 73 65  s a semicolon-se
0a00: 70 61 72 61 74 65 64 0a 6c 69 73 74 20 6f 66 20  parated.list of 
0a10: 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a  statements.</p>.
0a20: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
0a30: 72 61 6d 20 73 71 6c 2d 73 74 6d 74 2d 6c 69 73  ram sql-stmt-lis
0a40: 74 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 45 61 63 68  t</tcl>..<p>Each
0a50: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 69   SQL statement i
0a60: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
0a70: 6c 69 73 74 20 69 73 20 61 6e 20 69 6e 73 74 61  list is an insta
0a80: 6e 63 65 20 6f 66 20 74 68 65 0a 66 6f 6c 6c 6f  nce of the.follo
0a90: 77 69 6e 67 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  wing:</p>..<tcl>
0aa0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71  BubbleDiagram sq
0ab0: 6c 2d 73 74 6d 74 3c 2f 74 63 6c 3e 0a 0a 3c 74  l-stmt</tcl>..<t
0ac0: 63 6c 3e 0a 70 72 6f 63 20 4f 70 65 72 61 74 6f  cl>.proc Operato
0ad0: 72 20 7b 6e 61 6d 65 7d 20 7b 0a 20 20 72 65 74  r {name} {.  ret
0ae0: 75 72 6e 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f 72  urn "<font color
0af0: 3d 5c 22 23 32 63 32 63 66 30 5c 22 3e 3c 62 69  =\"#2c2cf0\"><bi
0b00: 67 3e 24 6e 61 6d 65 3c 2f 62 69 67 3e 3c 2f 66  g>$name</big></f
0b10: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 4e 6f 6e  ont>".}.proc Non
0b20: 74 65 72 6d 69 6e 61 6c 20 7b 6e 61 6d 65 7d 20  terminal {name} 
0b30: 7b 0a 20 20 72 65 74 75 72 6e 20 22 3c 69 3e 3c  {.  return "<i><
0b40: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 66 66  font color=\"#ff
0b50: 33 34 33 34 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f  3434\">$name</fo
0b60: 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a 70 72 6f 63 20  nt></i>".}.proc 
0b70: 4b 65 79 77 6f 72 64 20 7b 6e 61 6d 65 7d 20 7b  Keyword {name} {
0b80: 0a 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74  .  return "<font
0b90: 20 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30   color=\"#2c2cf0
0ba0: 5c 22 3e 24 6e 61 6d 65 3c 2f 66 6f 6e 74 3e 22  \">$name</font>"
0bb0: 0a 7d 0a 70 72 6f 63 20 45 78 61 6d 70 6c 65 20  .}.proc Example 
0bc0: 7b 74 65 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75  {text} {.  hd_pu
0bd0: 74 73 20 22 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ts "<blockquote>
0be0: 3c 70 72 65 3e 24 74 65 78 74 3c 2f 70 72 65 3e  <pre>$text</pre>
0bf0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22 0a 7d  </blockquote>".}
0c00: 0a 0a 70 72 6f 63 20 53 65 63 74 69 6f 6e 20 7b  ..proc Section {
0c10: 6e 61 6d 65 20 6c 61 62 65 6c 20 6b 65 79 77 6f  name label keywo
0c20: 72 64 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  rds} {.  global 
0c30: 44 4f 43 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d  DOC.  hd_close_m
0c40: 61 69 6e 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  ain.  hd_open_ma
0c50: 69 6e 20 6c 61 6e 67 5f 24 6c 61 62 65 6c 2e 68  in lang_$label.h
0c60: 74 6d 6c 0a 20 20 68 64 5f 68 65 61 64 65 72 20  tml.  hd_header 
0c70: 22 53 51 4c 69 74 65 20 51 75 65 72 79 20 4c 61  "SQLite Query La
0c80: 6e 67 75 61 67 65 3a 20 24 6e 61 6d 65 22 20 24  nguage: $name" $
0c90: 44 4f 43 2f 70 61 67 65 73 2f 6c 61 6e 67 2e 69  DOC/pages/lang.i
0ca0: 6e 0a 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77  n.  eval hd_keyw
0cb0: 6f 72 64 73 20 24 6b 65 79 77 6f 72 64 73 0a 20  ords $keywords. 
0cc0: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 6b   if {[lsearch $k
0cd0: 65 79 77 6f 72 64 73 20 24 6e 61 6d 65 5d 20 3d  eywords $name] =
0ce0: 3d 20 2d 31 20 26 26 20 5b 6c 73 65 61 72 63 68  = -1 && [lsearch
0cf0: 20 24 6b 65 79 77 6f 72 64 73 20 2a 24 6e 61 6d   $keywords *$nam
0d00: 65 5d 20 3d 3d 20 2d 31 7d 20 7b 0a 20 20 20 20  e] == -1} {.    
0d10: 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
0d20: 20 7b 20 24 6e 61 6d 65 20 7d 0a 20 20 7d 0a 20   { $name }.  }. 
0d30: 20 68 64 5f 70 75 74 73 20 7b 3c 68 31 20 61 6c   hd_puts {<h1 al
0d40: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 53 51 4c  ign="center">SQL
0d50: 20 41 73 20 55 6e 64 65 72 73 74 6f 6f 64 20 42   As Understood B
0d60: 79 20 53 51 4c 69 74 65 3c 2f 68 31 3e 7d 0a 20  y SQLite</h1>}. 
0d70: 20 68 64 5f 70 75 74 73 20 7b 3c 70 3e 3c 61 20   hd_puts {<p><a 
0d80: 68 72 65 66 3d 22 6c 61 6e 67 2e 68 74 6d 6c 22  href="lang.html"
0d90: 3e 5b 54 6f 70 5d 3c 2f 61 3e 3c 2f 70 3e 7d 0a  >[Top]</a></p>}.
0da0: 20 20 68 64 5f 70 75 74 73 20 22 3c 68 32 3e 24    hd_puts "<h2>$
0db0: 6e 61 6d 65 3c 2f 68 32 3e 22 0a 7d 0a 0a 23 23  name</h2>".}..##
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
0e10: 63 74 69 6f 6e 20 7b 41 4c 54 45 52 20 54 41 42  ction {ALTER TAB
0e20: 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 20 7b  LE} altertable {
0e30: 7b 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 7b 2a  {ALTER TABLE} {*
0e40: 41 4c 54 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44  ALTER}}..BubbleD
0e50: 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74 61 62  iagram alter-tab
0e60: 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  le-stmt 1.</tcl>
0e70: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e80: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e90: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0ea0: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0eb0: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0ec0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0ed0: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0ee0: 65 20 61 20 74 61 62 6c 65 0a 6f 72 20 74 6f 20  e a table.or to 
0ef0: 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
0f00: 20 74 6f 20 61 6e 20 65 78 69 73 74 69 6e 67 20   to an existing 
0f10: 74 61 62 6c 65 2e 20 49 74 20 69 73 20 6e 6f 74  table. It is not
0f20: 20 70 6f 73 73 69 62 6c 65 0a 74 6f 20 72 65 6e   possible.to ren
0f30: 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 72 65  ame a column, re
0f40: 6d 6f 76 65 20 61 20 63 6f 6c 75 6d 6e 2c 20 6f  move a column, o
0f50: 72 20 61 64 64 20 6f 72 20 72 65 6d 6f 76 65 20  r add or remove 
0f60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 72 6f 6d  constraints from
0f70: 20 61 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a 0a   a table..</p>..
0f80: 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e 41 4d 45  <p> ^(The RENAME
0f90: 20 54 4f 20 73 79 6e 74 61 78 20 69 73 20 75 73   TO syntax is us
0fa0: 65 64 20 74 6f 20 72 65 6e 61 6d 65 20 74 68 65  ed to rename the
0fb0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
0fc0: 64 20 62 79 20 0a 3c 69 3e 26 23 39 31 3b 64 61  d by .<i>&#91;da
0fd0: 74 61 62 61 73 65 2d 6e 61 6d 65 2e 26 23 39 33  tabase-name.&#93
0fe0: 3b 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  ;table-name</i> 
0ff0: 74 6f 20 3c 69 3e 6e 65 77 2d 74 61 62 6c 65 2d  to <i>new-table-
1000: 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 0a 54 68 69 73  name</i>.)^.This
1010: 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f 74   command .cannot
1020: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76 65   be used to move
1030: 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65 6e   a table between
1040: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1050: 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65 6e  ses, only to ren
1060: 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69 74  ame .a table wit
1070: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
1080: 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  abase.</p>..<p> 
1090: 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65  ^If the table be
10a0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20  ing renamed has 
10b0: 74 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69  triggers or indi
10c0: 63 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20  ces, then these 
10d0: 72 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20  remain.attached 
10e0: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74  to the table aft
10f0: 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72  er it has been r
1100: 65 6e 61 6d 65 64 2e 20 20 5e 48 6f 77 65 76 65  enamed.  ^Howeve
1110: 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  r, if there are.
1120: 61 6e 79 20 76 69 65 77 20 64 65 66 69 6e 69 74  any view definit
1130: 69 6f 6e 73 2c 20 6f 72 20 73 74 61 74 65 6d 65  ions, or stateme
1140: 6e 74 73 20 65 78 65 63 75 74 65 64 20 62 79 20  nts executed by 
1150: 74 72 69 67 67 65 72 73 20 74 68 61 74 20 72 65  triggers that re
1160: 66 65 72 20 74 6f 0a 74 68 65 20 74 61 62 6c 65  fer to.the table
1170: 20 62 65 69 6e 67 20 72 65 6e 61 6d 65 64 2c 20   being renamed, 
1180: 74 68 65 73 65 20 61 72 65 20 6e 6f 74 20 61 75  these are not au
1190: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6d 6f 64 69  tomatically modi
11a0: 66 69 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  fied to use the 
11b0: 6e 65 77 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20  new.table name. 
11c0: 49 66 20 74 68 69 73 20 69 73 20 72 65 71 75 69  If this is requi
11d0: 72 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  red, the trigger
11e0: 73 20 6f 72 20 76 69 65 77 20 64 65 66 69 6e 69  s or view defini
11f0: 74 69 6f 6e 73 20 6d 75 73 74 20 62 65 0a 64 72  tions must be.dr
1200: 6f 70 70 65 64 20 61 6e 64 20 72 65 63 72 65 61  opped and recrea
1210: 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
1220: 65 77 20 74 61 62 6c 65 20 6e 61 6d 65 20 62 79  ew table name by
1230: 20 68 61 6e 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   hand..</p>..<p>
1240: 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
1250: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
1260: 65 20 0a 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  e .[foreign_keys
1270: 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65   pragma | enable
1280: 64 5d 20 77 68 65 6e 20 61 20 74 61 62 6c 65 20  d] when a table 
1290: 69 73 20 72 65 6e 61 6d 65 64 2c 20 74 68 65 6e  is renamed, then
12a0: 20 61 6e 79 0a 5b 66 6f 72 65 69 67 6e 2d 6b 65   any.[foreign-ke
12b0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
12c0: 45 4e 43 45 53 20 63 6c 61 75 73 65 73 5d 20 69  ENCES clauses] i
12d0: 6e 20 61 6e 79 20 74 61 62 6c 65 20 28 65 69 74  n any table (eit
12e0: 68 65 72 20 74 68 65 0a 74 61 62 6c 65 20 62 65  her the.table be
12f0: 69 6e 67 20 72 65 6e 61 6d 65 64 20 6f 72 20 73  ing renamed or s
1300: 6f 6d 65 20 6f 74 68 65 72 20 74 61 62 6c 65 29  ome other table)
1310: 0a 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74  .that refer to t
1320: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 72  he table being r
1330: 65 6e 61 6d 65 64 20 61 72 65 20 6d 6f 64 69 66  enamed are modif
1340: 69 65 64 20 74 6f 20 72 65 66 65 72 20 0a 74 6f  ied to refer .to
1350: 20 74 68 65 20 72 65 6e 61 6d 65 64 20 74 61 62   the renamed tab
1360: 6c 65 20 62 79 20 69 74 73 20 6e 65 77 20 6e 61  le by its new na
1370: 6d 65 2e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 44  me...<p> ^The AD
1380: 44 20 43 4f 4c 55 4d 4e 20 73 79 6e 74 61 78 0a  D COLUMN syntax.
1390: 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 61  is used to add a
13a0: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   new column to a
13b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
13c0: 2e 0a 5e 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d  ..^The new colum
13d0: 6e 20 69 73 20 61 6c 77 61 79 73 20 61 70 70 65  n is always appe
13e0: 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  nded to the end 
13f0: 6f 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65  of the list of e
1400: 78 69 73 74 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e  xisting columns.
1410: 0a 54 68 65 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66  .The [column-def
1420: 5d 20 72 75 6c 65 20 64 65 66 69 6e 65 73 20 74  ] rule defines t
1430: 68 65 20 63 68 61 72 61 63 74 65 72 69 73 74 69  he characteristi
1440: 63 73 20 6f 66 20 74 68 65 20 6e 65 77 20 63 6f  cs of the new co
1450: 6c 75 6d 6e 2e 0a 5e 28 54 68 65 20 6e 65 77 20  lumn..^(The new 
1460: 63 6f 6c 75 6d 6e 20 6d 61 79 20 74 61 6b 65 20  column may take 
1470: 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 72 6d 73  any of the forms
1480: 20 70 65 72 6d 69 73 73 69 62 6c 65 20 69 6e 20   permissible in 
1490: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
14a0: 0a 73 74 61 74 65 6d 65 6e 74 2c 20 77 69 74 68  .statement, with
14b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
14c0: 65 73 74 72 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c  estrictions:)^.<
14d0: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c  ul>.<li>^The col
14e0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65  umn may not have
14f0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f   a PRIMARY KEY o
1500: 72 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  r UNIQUE constra
1510: 69 6e 74 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54  int.</li>.<li>^T
1520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  he column may no
1530: 74 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74  t have a default
1540: 20 76 61 6c 75 65 20 6f 66 20 43 55 52 52 45 4e   value of CURREN
1550: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
1560: 44 41 54 45 2c 20 0a 20 20 20 20 43 55 52 52 45  DATE, .    CURRE
1570: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 6f 72  NT_TIMESTAMP, or
1580: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
1590: 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2e 3c 2f  n parentheses.</
15a0: 6c 69 3e 0a 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f  li>.<li>^If a NO
15b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
15c0: 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
15d0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
15e0: 6d 75 73 74 20 68 61 76 65 20 61 0a 20 20 20 20  must have a.    
15f0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 74  default value ot
1600: 68 65 72 20 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c  her than NULL..<
1610: 6c 69 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20  li>^If [foreign 
1620: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  key constraints]
1630: 20 61 72 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65   are [foreign_ke
1640: 79 73 20 70 72 61 67 6d 61 20 7c 20 65 6e 61 62  ys pragma | enab
1650: 6c 65 64 5d 20 61 6e 64 0a 20 20 20 20 61 20 63  led] and.    a c
1660: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 5b 66 6f  olumn with a [fo
1670: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
1680: 20 7c 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c   | REFERENCES cl
1690: 61 75 73 65 5d 0a 20 20 20 20 69 73 20 61 64 64  ause].    is add
16a0: 65 64 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  ed, the column m
16b0: 75 73 74 20 68 61 76 65 20 61 20 64 65 66 61 75  ust have a defau
16c0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 4e 55 4c 4c  lt value of NULL
16d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74  ..</ul>..<p>^Not
16e0: 65 20 61 6c 73 6f 20 74 68 61 74 20 77 68 65 6e  e also that when
16f0: 20 61 64 64 69 6e 67 20 61 20 5b 43 48 45 43 4b   adding a [CHECK
1700: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68   constraint], th
1710: 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  e CHECK constrai
1720: 6e 74 0a 69 73 20 6e 6f 74 20 74 65 73 74 65 64  nt.is not tested
1730: 20 61 67 61 69 6e 73 74 20 70 72 65 65 78 69 73   against preexis
1740: 74 69 6e 67 20 72 6f 77 73 20 6f 66 20 74 68 65  ting rows of the
1750: 20 74 61 62 6c 65 2e 0a 5e 54 68 69 73 20 63 61   table..^This ca
1760: 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 74 61  n result in a ta
1770: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1780: 73 20 64 61 74 61 20 74 68 61 74 0a 69 73 20 69  s data that.is i
1790: 6e 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 66 20 74  n violation of t
17a0: 68 65 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  he CHECK constra
17b0: 69 6e 74 2e 20 20 46 75 74 75 72 65 20 76 65 72  int.  Future ver
17c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
17d0: 6d 69 67 68 74 0a 63 68 61 6e 67 65 20 74 6f 20  might.change to 
17e0: 76 61 6c 69 64 61 74 65 20 43 48 45 43 4b 20 63  validate CHECK c
17f0: 6f 6e 73 74 72 61 69 6e 74 73 20 61 73 20 74 68  onstraints as th
1800: 65 79 20 61 72 65 20 61 64 64 65 64 2e 3c 2f 70  ey are added.</p
1810: 3e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 65 63 75  >..<p> The execu
1820: 74 69 6f 6e 20 74 69 6d 65 20 6f 66 20 74 68 65  tion time of the
1830: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f 6d   ALTER TABLE com
1840: 6d 61 6e 64 20 69 73 20 69 6e 64 65 70 65 6e 64  mand is independ
1850: 65 6e 74 20 6f 66 0a 74 68 65 20 61 6d 6f 75 6e  ent of.the amoun
1860: 74 20 6f 66 20 64 61 74 61 20 69 6e 20 74 68 65  t of data in the
1870: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 41 4c 54   table.  The ALT
1880: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
1890: 20 72 75 6e 73 20 61 73 20 71 75 69 63 6b 6c 79   runs as quickly
18a0: 0a 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68  .on a table with
18b0: 20 31 30 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73   10 million rows
18c0: 20 61 73 20 69 74 20 64 6f 65 73 20 6f 6e 20 61   as it does on a
18d0: 20 74 61 62 6c 65 20 77 69 74 68 20 31 20 72 6f   table with 1 ro
18e0: 77 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65  w..</p>..<p>Afte
18f0: 72 20 41 44 44 20 43 4f 4c 55 4d 4e 20 68 61 73  r ADD COLUMN has
1900: 20 62 65 65 6e 20 72 75 6e 20 6f 6e 20 61 20 64   been run on a d
1910: 61 74 61 62 61 73 65 2c 20 74 68 61 74 20 64 61  atabase, that da
1920: 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 0a  tabase will not.
1930: 62 65 20 72 65 61 64 61 62 6c 65 20 62 79 20 53  be readable by S
1940: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1950: 31 2e 33 20 61 6e 64 20 65 61 72 6c 69 65 72 2e  1.3 and earlier.
1960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
19c0: 6f 6e 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61  on {ANALYZE} ana
19d0: 6c 79 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 42 75  lyze ANALYZE..Bu
19e0: 62 62 6c 65 44 69 61 67 72 61 6d 20 61 6e 61 6c  bbleDiagram anal
19f0: 79 7a 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  yze-stmt 1.</tcl
1a00: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 4e 41 4c  >..<p> ^The ANAL
1a10: 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67 61 74 68  YZE command gath
1a20: 65 72 73 20 73 74 61 74 69 73 74 69 63 73 20 61  ers statistics a
1a30: 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 0a  bout tables and.
1a40: 69 6e 64 69 63 65 73 20 61 6e 64 20 73 74 6f 72  indices and stor
1a50: 65 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 65 64  es the collected
1a60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
1a70: 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  [internal tables
1a80: 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
1a90: 65 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72  e where the quer
1aa0: 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 0a  y optimizer can.
1ab0: 61 63 63 65 73 73 20 74 68 65 20 69 6e 66 6f 72  access the infor
1ac0: 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73 65 20 69  mation and use i
1ad0: 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20 62  t to help make b
1ae0: 65 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e  etter query plan
1af0: 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e 0a 5e 49  ning choices..^I
1b00: 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61  f no arguments a
1b10: 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c 20 61 74  re given, all at
1b20: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1b30: 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64 2e 20 20   are.analyzed.  
1b40: 5e 49 66 20 61 20 64 61 74 61 62 61 73 65 20 6e  ^If a database n
1b50: 61 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73 20  ame is given as 
1b60: 74 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68  the argument, th
1b70: 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61 6e  en all tables.an
1b80: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 61  d indices in tha
1b90: 74 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20 61  t one database a
1ba0: 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a 5e  re analyzed.  .^
1bb0: 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  If the argument 
1bc0: 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2c  is a table name,
1bd0: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74 20   then only that 
1be0: 74 61 62 6c 65 20 61 6e 64 20 74 68 65 0a 69 6e  table and the.in
1bf0: 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65 64  dices associated
1c00: 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65   with that table
1c10: 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20   are analyzed.  
1c20: 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ^If the argument
1c30: 0a 69 73 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d  .is an index nam
1c40: 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61  e, then only tha
1c50: 74 20 6f 6e 65 20 69 6e 64 65 78 20 69 73 20 61  t one index is a
1c60: 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  nalyzed.</p>..<p
1c70: 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20 69  > ^The default i
1c80: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73 74  mplementation st
1c90: 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73 74  ores all statist
1ca0: 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a  ics in a single.
1cb0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73 71  table named "[sq
1cc0: 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e 20 20 5e  lite_stat1]".  ^
1cd0: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
1ce0: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 5b  piled with the.[
1cf0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1d00: 41 54 33 5d 20 6f 70 74 69 6f 6e 2c 20 74 68 65  AT3] option, the
1d10: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
1d20: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
1d30: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
1d40: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
1d50: 74 61 74 33 5d 2e 0a 4f 6c 64 65 72 20 76 65 72  tat3]..Older ver
1d60: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1d70: 77 6f 75 6c 64 20 6d 61 6b 65 20 75 73 65 20 6f  would make use o
1d80: 66 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74  f the [sqlite_st
1d90: 61 74 32 5d 20 74 61 62 6c 65 0a 77 68 65 6e 20  at2] table.when 
1da0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 5b 53  compiled with [S
1db0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
1dc0: 54 32 5d 20 62 75 74 20 61 6c 6c 20 72 65 63 65  T2] but all rece
1dd0: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53  nt versions of.S
1de0: 51 4c 69 74 65 20 69 67 6e 6f 72 65 20 74 68 65  QLite ignore the
1df0: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
1e00: 62 6c 65 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  ble..Future enha
1e10: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1e20: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 5b  ate.additional [
1e30: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 5d  internal tables]
1e40: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
1e50: 61 6d 65 20 70 61 74 74 65 72 6e 20 65 78 63 65  ame pattern exce
1e60: 70 74 20 77 69 74 68 0a 66 69 6e 61 6c 20 64 69  pt with.final di
1e70: 67 69 74 20 6c 61 72 67 65 72 20 74 68 61 6e 20  git larger than 
1e80: 22 33 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  "3".</p>..<p> ^T
1e90: 68 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d  he [ALTER TABLE]
1ea0: 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e 6f   command does.no
1eb0: 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20 73 71  t work on the sq
1ec0: 6c 69 74 65 5f 73 74 61 74 31 20 6f 72 20 73 71  lite_stat1 or sq
1ed0: 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
1ee0: 73 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63  s,.but all the c
1ef0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65 20  ontent of those 
1f00: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
1f10: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
1f20: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
1f30: 64 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e 74  deleted, augment
1f40: 65 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64 20  ed, or modified 
1f50: 75 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54  using the [DELET
1f60: 45 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61 6e  E],.[INSERT], an
1f70: 64 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61  d [UPDATE] comma
1f80: 6e 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50  nds..^(The [DROP
1f90: 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20   TABLE] command 
1fa0: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 5f  works on sqlite_
1fb0: 73 74 61 74 31 20 61 6e 64 0a 73 71 6c 69 74 65  stat1 and.sqlite
1fc0: 5f 73 74 61 74 33 20 61 73 20 6f 66 20 53 51 4c  _stat3 as of SQL
1fd0: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1fe0: 39 2e 29 5e 0a 41 70 70 72 6f 70 72 69 61 74 65  9.)^.Appropriate
1ff0: 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20   care should be 
2000: 75 73 65 64 20 77 68 65 6e 20 63 68 61 6e 67 69  used when changi
2010: 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
2020: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
2030: 0a 74 61 62 6c 65 73 20 61 73 20 69 6e 76 61 6c  .tables as inval
2040: 69 64 20 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63  id content can c
2050: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 73  ause SQLite to s
2060: 65 6c 65 63 74 20 69 6e 65 66 66 69 63 69 65 6e  elect inefficien
2070: 74 0a 71 75 65 72 79 20 70 6c 61 6e 73 2e 20 20  t.query plans.  
2080: 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69  Generally speaki
2090: 6e 67 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e  ng, one should n
20a0: 6f 74 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  ot modify the co
20b0: 6e 74 65 6e 74 20 6f 66 0a 74 68 65 20 73 74 61  ntent of.the sta
20c0: 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62  tistics tables b
20d0: 79 20 61 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20  y any mechanism 
20e0: 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b  other than invok
20f0: 69 6e 67 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20  ing the.ANALYZE 
2100: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70  command.</p>..<p
2110: 3e 20 5e 53 74 61 74 69 73 74 69 63 73 20 67 61  > ^Statistics ga
2120: 74 68 65 72 65 64 20 62 79 20 41 4e 41 4c 59 5a  thered by ANALYZ
2130: 45 20 61 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e  E are <u>not</u>
2140: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
2150: 70 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f  pdated as.the co
2160: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74  ntent of the dat
2170: 61 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20  abase changes.  
2180: 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
2190: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63  f the database.c
21a0: 68 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61  hanges significa
21b0: 6e 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20  ntly, or if the 
21c0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
21d0: 63 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e  changes, then on
21e0: 65 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65  e should.conside
21f0: 72 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20  r rerunning the 
2200: 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20  ANALYZE command 
2210: 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61  in order to upda
2220: 74 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63  te the statistic
2230: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20  s.</p>..<p> The 
2240: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69  query planner mi
2250: 67 68 74 20 6e 6f 74 20 6e 6f 74 69 63 65 20 6d  ght not notice m
2260: 61 6e 75 61 6c 20 63 68 61 6e 67 65 73 20 74 6f  anual changes to
2270: 20 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74   the.sqlite_stat
2280: 31 20 61 6e 64 2f 6f 72 20 73 71 6c 69 74 65 5f  1 and/or sqlite_
2290: 73 74 61 74 33 20 74 61 62 6c 65 73 2e 20 20 5e  stat3 tables.  ^
22a0: 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63  An application.c
22b0: 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71 75 65  an force the que
22c0: 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72 65  ry planner to re
22d0: 72 65 61 64 20 74 68 65 20 73 74 61 74 69 73 74  read the statist
22e0: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 72 75  ics tables by ru
22f0: 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45  nning.<b>ANALYZE
2300: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c 2f   sqlite_master</
2310: 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  b>. </p>..<tcl>.
2320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
2370: 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48 20 44  ection {ATTACH D
2380: 41 54 41 42 41 53 45 7d 20 61 74 74 61 63 68 20  ATABASE} attach 
2390: 2a 41 54 54 41 43 48 0a 0a 42 75 62 62 6c 65 44  *ATTACH..BubbleD
23a0: 69 61 67 72 61 6d 20 61 74 74 61 63 68 2d 73 74  iagram attach-st
23b0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
23c0: 20 5e 54 68 65 20 41 54 54 41 43 48 20 44 41 54   ^The ATTACH DAT
23d0: 41 42 41 53 45 20 73 74 61 74 65 6d 65 6e 74 20  ABASE statement 
23e0: 61 64 64 73 20 61 6e 6f 74 68 65 72 20 64 61 74  adds another dat
23f0: 61 62 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 74  abase .file to t
2400: 68 65 20 63 75 72 72 65 6e 74 20 5b 64 61 74 61  he current [data
2410: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
2420: 2e 20 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  . .^The filename
2430: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
2440: 65 20 74 6f 20 62 65 20 61 74 74 61 63 68 65 64  e to be attached
2450: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
2460: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20  .the expression 
2470: 74 68 61 74 20 6f 63 63 75 72 73 20 62 65 66 6f  that occurs befo
2480: 72 65 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  re the AS keywor
2490: 64 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61 6d 65  d..^The filename
24a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
24b0: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61 6d   follows the sam
24c0: 65 20 73 65 6d 61 6e 74 69 63 73 20 61 73 20 74  e semantics as t
24d0: 68 65 0a 66 69 6c 65 6e 61 6d 65 20 61 72 67 75  he.filename argu
24e0: 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65 33  ment to [sqlite3
24f0: 5f 6f 70 65 6e 28 29 5d 20 61 6e 64 20 5b 73 71  _open()] and [sq
2500: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d  lite3_open_v2()]
2510: 3b 20 74 68 65 0a 73 70 65 63 69 61 6c 20 6e 61  ; the.special na
2520: 6d 65 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20  me "[:memory:]" 
2530: 72 65 73 75 6c 74 73 20 69 6e 20 61 6e 20 5b 69  results in an [i
2540: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
2550: 65 5d 20 61 6e 64 20 61 6e 0a 65 6d 70 74 79 20  e] and an.empty 
2560: 73 74 72 69 6e 67 20 72 65 73 75 6c 74 73 20 69  string results i
2570: 6e 20 61 20 6e 65 77 20 74 65 6d 70 6f 72 61 72  n a new temporar
2580: 79 20 64 61 74 61 62 61 73 65 2e 0a 5e 54 68 65  y database..^The
2590: 20 66 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65   filename argume
25a0: 6e 74 20 63 61 6e 20 62 65 20 61 20 5b 55 52 49  nt can be a [URI
25b0: 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66 20 55 52   filename] if UR
25c0: 49 20 66 69 6c 65 6e 61 6d 65 20 70 72 6f 63 65  I filename proce
25d0: 73 73 69 6e 67 0a 69 73 20 65 6e 61 62 6c 65 20  ssing.is enable 
25e0: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
25f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
2600: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
2610: 72 20 69 73 20 66 6f 72 0a 55 52 49 20 66 69 6c  r is for.URI fil
2620: 65 6e 61 6d 65 73 20 74 6f 20 62 65 20 64 69 73  enames to be dis
2630: 61 62 6c 65 64 2c 20 68 6f 77 65 76 65 72 20 74  abled, however t
2640: 68 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65  hat might change
2650: 20 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c   in a future rel
2660: 65 61 73 65 0a 6f 66 20 53 51 4c 69 74 65 2c 20  ease.of SQLite, 
2670: 73 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  so application d
2680: 65 76 65 6c 6f 70 65 72 73 20 61 72 65 20 61 64  evelopers are ad
2690: 76 69 73 65 64 20 74 6f 20 70 6c 61 6e 20 61 63  vised to plan ac
26a0: 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 3c 70 3e 54  cordingly...<p>T
26b0: 68 65 20 6e 61 6d 65 20 74 68 61 74 20 6f 63 63  he name that occ
26c0: 75 72 73 20 61 66 74 65 72 20 74 68 65 20 41 53  urs after the AS
26d0: 20 6b 65 79 77 6f 72 64 20 69 73 20 74 68 65 20   keyword is the 
26e0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
26f0: 62 61 73 65 0a 75 73 65 64 20 69 6e 74 65 72 6e  base.used intern
2700: 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 0a  ally by SQLite..
2710: 5e 54 68 65 20 64 61 74 61 62 61 73 65 2d 6e 61  ^The database-na
2720: 6d 65 73 20 27 6d 61 69 6e 27 20 61 6e 64 20 0a  mes 'main' and .
2730: 27 74 65 6d 70 27 20 72 65 66 65 72 20 74 6f 20  'temp' refer to 
2740: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2750: 65 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  e and the databa
2760: 73 65 20 75 73 65 64 20 66 6f 72 20 0a 74 65 6d  se used for .tem
2770: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
2780: 5e 54 68 65 20 6d 61 69 6e 20 61 6e 64 20 74 65  ^The main and te
2790: 6d 70 20 64 61 74 61 62 61 73 65 73 20 63 61 6e  mp databases can
27a0: 6e 6f 74 20 62 65 20 61 74 74 61 63 68 65 64 20  not be attached 
27b0: 6f 72 0a 64 65 74 61 63 68 65 64 2e 3c 2f 70 3e  or.detached.</p>
27c0: 0a 0a 3c 70 3e 20 5e 28 54 61 62 6c 65 73 20 69  ..<p> ^(Tables i
27d0: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
27e0: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 72 65  tabase can be re
27f0: 66 65 72 72 65 64 20 74 6f 20 75 73 69 6e 67 20  ferred to using 
2800: 74 68 65 20 73 79 6e 74 61 78 20 0a 3c 69 3e 64  the syntax .<i>d
2810: 61 74 61 62 61 73 65 2d 6e 61 6d 65 2e 74 61 62  atabase-name.tab
2820: 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 29 5e 20 20  le-name</i>.)^  
2830: 5e 49 66 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ^If the name of 
2840: 74 68 65 20 74 61 62 6c 65 20 69 73 20 75 6e 69  the table is uni
2850: 71 75 65 0a 61 63 72 6f 73 73 20 61 6c 6c 20 61  que.across all a
2860: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2870: 73 20 61 6e 64 20 74 68 65 20 6d 61 69 6e 20 61  s and the main a
2880: 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  nd temp database
2890: 73 2c 20 74 68 65 6e 20 74 68 65 0a 3c 69 3e 64  s, then the.<i>d
28a0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
28b0: 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 72   prefix is not r
28c0: 65 71 75 69 72 65 64 2e 20 20 5e 49 66 20 74 77  equired.  ^If tw
28d0: 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  o or more tables
28e0: 20 69 6e 0a 64 69 66 66 65 72 65 6e 74 20 64 61   in.different da
28f0: 74 61 62 61 73 65 73 20 68 61 76 65 20 74 68 65  tabases have the
2900: 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 74   same name and t
2910: 68 65 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d  he .<i>database-
2920: 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20  name</i> prefix 
2930: 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20 61  is not used on a
2940: 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65   table reference
2950: 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c 65  , then the.table
2960: 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20 6f   chosen is the o
2970: 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2980: 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61 73  se that was leas
2990: 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61 63  t recently attac
29a0: 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  hed.</p>..<p>.^T
29b0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76 6f  ransactions invo
29c0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 61  lving multiple a
29d0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
29e0: 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61 73  s are atomic,.as
29f0: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
2a00: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
2a10: 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a 5d   not "[:memory:]
2a20: 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75 72  " and the .[jour
2a30: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f 74  nal_mode] is not
2a40: 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74 68   [WAL].  ^(If th
2a50: 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65 20  e main.database 
2a60: 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f 72  is ":memory:" or
2a70: 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 5f   if the journal_
2a80: 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68 65  mode is WAL, the
2a90: 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  n .transactions 
2aa0: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 61  continue to be a
2ab0: 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61 63  tomic within eac
2ac0: 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61 74  h individual.dat
2ad0: 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74 20  abase file. But 
2ae0: 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  if the host comp
2af0: 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e 20  uter crashes in 
2b00: 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61 20  the middle.of a 
2b10: 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20 74  [COMMIT] where t
2b20: 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61 62  wo or more datab
2b30: 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75 70  ase files are up
2b40: 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20 74  dated,.some of t
2b50: 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74  hose files might
2b60: 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65 73   get the changes
2b70: 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d 69   where others.mi
2b80: 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e 0a  ght not.)^.</p>.
2b90: 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20 61  .<p> ^There is a
2ba0: 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69 6e   limit, set usin
2bb0: 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  g [sqlite3_limit
2bc0: 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54 45  ()] and .[SQLITE
2bd0: 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d  _LIMIT_ATTACHED]
2be0: 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  , to the number 
2bf0: 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68 61  of databases tha
2c00: 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74 61  t can be.simulta
2c10: 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65 64  neously attached
2c20: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61 74   to a single dat
2c30: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2c40: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
2c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
2ca0: 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41 4e  tion {BEGIN TRAN
2cb0: 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63  SACTION} transac
2cc0: 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f 4d  tion {*BEGIN COM
2cd0: 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a 42  MIT ROLLBACK}..B
2ce0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 62 65 67  ubbleDiagram beg
2cf0: 69 6e 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44 69  in-stmt.BubbleDi
2d00: 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d 73 74 6d  agram commit-stm
2d10: 74 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  t.BubbleDiagram 
2d20: 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f  rollback-stmt.</
2d30: 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68  tcl>..<p>.^No ch
2d40: 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
2d50: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
2d60: 65 20 65 78 63 65 70 74 20 77 69 74 68 69 6e 20  e except within 
2d70: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  a transaction..^
2d80: 41 6e 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74  Any command that
2d90: 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 61 74   changes the dat
2da0: 61 62 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79  abase (basically
2db0: 2c 20 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e  , any SQL comman
2dc0: 64 0a 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45  d.other than [SE
2dd0: 4c 45 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f  LECT]) will auto
2de0: 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20  matically start 
2df0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66  a transaction if
2e00: 0a 6f 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65  .one is not alre
2e10: 61 64 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20  ady in effect.  
2e20: 5e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73  ^Automatically s
2e30: 74 61 72 74 65 64 20 74 72 61 6e 73 61 63 74 69  tarted transacti
2e40: 6f 6e 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65  ons.are committe
2e50: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
2e60: 71 75 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a  query finishes..
2e70: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73  </p>..<p>.^Trans
2e80: 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73  actions can be s
2e90: 74 61 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20  tarted manually 
2ea0: 75 73 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a  using the BEGIN.
2eb0: 63 6f 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68  command.  ^(Such
2ec0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73   transactions us
2ed0: 75 61 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e  ually persist un
2ee0: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d  til the next.COM
2ef0: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20  MIT or ROLLBACK 
2f00: 63 6f 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20  command.  But a 
2f10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c  transaction will
2f20: 20 61 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20   also .ROLLBACK 
2f30: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2f40: 69 73 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20  is closed or if 
2f50: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a  an error occurs.
2f60: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
2f70: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
2f80: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
2f90: 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53  s specified.)^.S
2fa0: 65 65 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61  ee the documenta
2fb0: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20  tion on the [ON 
2fc0: 43 4f 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65  CONFLICT].clause
2fd0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
2fe0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
2ff0: 74 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63  t the ROLLBACK.c
3000: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
3010: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f  on algorithm..</
3020: 70 3e 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41  p>..<p>.^END TRA
3030: 4e 53 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61  NSACTION is an a
3040: 6c 69 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e  lias for COMMIT.
3050: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61  .</p>..<p> ^(Tra
3060: 6e 73 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65  nsactions create
3070: 64 20 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e  d using BEGIN...
3080: 43 4f 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65  COMMIT do not ne
3090: 73 74 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65  st.)^.^For neste
30a0: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20  d transactions, 
30b0: 75 73 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49  use the [SAVEPOI
30c0: 4e 54 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45  NT] and [RELEASE
30d0: 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20  ] commands..The 
30e0: 22 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 69  "TO SAVEPOINT <i
30f0: 3e 6e 61 6d 65 3c 2f 69 3e 22 20 63 6c 61 75 73  >name</i>" claus
3100: 65 20 6f 66 20 74 68 65 20 52 4f 4c 4c 42 41 43  e of the ROLLBAC
3110: 4b 20 63 6f 6d 6d 61 6e 64 20 73 68 6f 77 6e 0a  K command shown.
3120: 69 6e 20 74 68 65 20 73 79 6e 74 61 78 20 64 69  in the syntax di
3130: 61 67 72 61 6d 20 61 62 6f 76 65 20 69 73 20 6f  agram above is o
3140: 6e 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20 74  nly applicable t
3150: 6f 20 5b 53 41 56 45 50 4f 49 4e 54 5d 0a 74 72  o [SAVEPOINT].tr
3160: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 41 6e  ansactions.  ^An
3170: 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 76 6f   attempt to invo
3180: 6b 65 20 74 68 65 20 42 45 47 49 4e 20 63 6f 6d  ke the BEGIN com
3190: 6d 61 6e 64 20 77 69 74 68 69 6e 0a 61 20 74 72  mand within.a tr
31a0: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 66  ansaction will f
31b0: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
31c0: 72 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  r, regardless of
31d0: 20 77 68 65 74 68 65 72 0a 74 68 65 20 74 72 61   whether.the tra
31e0: 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 73 74 61  nsaction was sta
31f0: 72 74 65 64 20 62 79 20 5b 53 41 56 45 50 4f 49  rted by [SAVEPOI
3200: 4e 54 5d 20 6f 72 20 61 20 70 72 69 6f 72 20 42  NT] or a prior B
3210: 45 47 49 4e 2e 0a 5e 54 68 65 20 43 4f 4d 4d 49  EGIN..^The COMMI
3220: 54 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 68  T command and th
3230: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
3240: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 54  nd without the T
3250: 4f 20 63 6c 61 75 73 65 0a 77 6f 72 6b 20 74 68  O clause.work th
3260: 65 20 73 61 6d 65 20 6f 6e 20 5b 53 41 56 45 50  e same on [SAVEP
3270: 4f 49 4e 54 5d 20 74 72 61 6e 73 61 63 74 69 6f  OINT] transactio
3280: 6e 73 20 61 73 20 74 68 65 79 20 64 6f 20 77 69  ns as they do wi
3290: 74 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  th transactions.
32a0: 73 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e  started by BEGIN
32b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e  .</p>..<p>.^Tran
32c0: 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
32d0: 64 65 66 65 72 72 65 64 2c 20 69 6d 6d 65 64 69  deferred, immedi
32e0: 61 74 65 2c 20 6f 72 20 65 78 63 6c 75 73 69 76  ate, or exclusiv
32f0: 65 2e 20 20 0a 5e 54 68 65 20 64 65 66 61 75 6c  e.  .^The defaul
3300: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65  t transaction be
3310: 68 61 76 69 6f 72 20 69 73 20 64 65 66 65 72 72  havior is deferr
3320: 65 64 2e 0a 5e 44 65 66 65 72 72 65 64 20 6d 65  ed..^Deferred me
3330: 61 6e 73 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b  ans that no lock
3340: 73 20 61 72 65 20 61 63 71 75 69 72 65 64 0a 6f  s are acquired.o
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  n the database u
3360: 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61 73  ntil the databas
3370: 65 20 69 73 20 66 69 72 73 74 20 61 63 63 65 73  e is first acces
3380: 73 65 64 2e 20 20 5e 54 68 75 73 20 77 69 74 68  sed.  ^Thus with
3390: 20 61 0a 64 65 66 65 72 72 65 64 20 74 72 61 6e   a.deferred tran
33a0: 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 42 45 47  saction, the BEG
33b0: 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 69 74 73  IN statement its
33c0: 65 6c 66 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67  elf does nothing
33d0: 20 74 6f 20 74 68 65 0a 66 69 6c 65 73 79 73 74   to the.filesyst
33e0: 65 6d 2e 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20  em.  ^Locks.are 
33f0: 6e 6f 74 20 61 63 71 75 69 72 65 64 20 75 6e 74  not acquired unt
3400: 69 6c 20 74 68 65 20 66 69 72 73 74 20 72 65 61  il the first rea
3410: 64 20 6f 72 20 77 72 69 74 65 20 6f 70 65 72 61  d or write opera
3420: 74 69 6f 6e 2e 20 20 5e 54 68 65 20 66 69 72 73  tion.  ^The firs
3430: 74 20 72 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e  t read.operation
3440: 20 61 67 61 69 6e 73 74 20 61 20 64 61 74 61 62   against a datab
3450: 61 73 65 20 63 72 65 61 74 65 73 20 61 20 5b 53  ase creates a [S
3460: 48 41 52 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20  HARED] lock and 
3470: 74 68 65 20 66 69 72 73 74 0a 77 72 69 74 65 20  the first.write 
3480: 6f 70 65 72 61 74 69 6f 6e 20 63 72 65 61 74 65  operation create
3490: 73 20 61 20 5b 52 45 53 45 52 56 45 44 5d 20 6c  s a [RESERVED] l
34a0: 6f 63 6b 2e 20 20 20 5e 42 65 63 61 75 73 65 20  ock.   ^Because 
34b0: 74 68 65 20 61 63 71 75 69 73 69 74 69 6f 6e 20  the acquisition 
34c0: 6f 66 0a 6c 6f 63 6b 73 20 69 73 20 64 65 66 65  of.locks is defe
34d0: 72 72 65 64 20 75 6e 74 69 6c 20 74 68 65 79 20  rred until they 
34e0: 61 72 65 20 6e 65 65 64 65 64 2c 20 69 74 20 69  are needed, it i
34f0: 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
3500: 61 6e 6f 74 68 65 72 0a 74 68 72 65 61 64 20 6f  another.thread o
3510: 72 20 70 72 6f 63 65 73 73 20 63 6f 75 6c 64 20  r process could 
3520: 63 72 65 61 74 65 20 61 20 73 65 70 61 72 61 74  create a separat
3530: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  e transaction an
3540: 64 20 77 72 69 74 65 20 74 6f 0a 74 68 65 20 64  d write to.the d
3550: 61 74 61 62 61 73 65 20 61 66 74 65 72 20 74 68  atabase after th
3560: 65 20 42 45 47 49 4e 20 6f 6e 20 74 68 65 20 63  e BEGIN on the c
3570: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 68 61  urrent thread ha
3580: 73 20 65 78 65 63 75 74 65 64 2e 0a 5e 49 66 20  s executed..^If 
3590: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
35a0: 69 73 20 69 6d 6d 65 64 69 61 74 65 2c 20 74 68  is immediate, th
35b0: 65 6e 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f  en [RESERVED] lo
35c0: 63 6b 73 0a 61 72 65 20 61 63 71 75 69 72 65 64  cks.are acquired
35d0: 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   on all database
35e0: 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  s as soon as the
35f0: 20 42 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69   BEGIN command i
3600: 73 0a 65 78 65 63 75 74 65 64 2c 20 77 69 74 68  s.executed, with
3610: 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20  out waiting for 
3620: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
3630: 62 65 20 75 73 65 64 2e 20 20 5e 41 66 74 65 72  be used.  ^After
3640: 20 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41   a BEGIN IMMEDIA
3650: 54 45 2c 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64  TE, .no other [d
3660: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
3670: 6f 6e 5d 20 77 69 6c 6c 20 62 65 20 61 62 6c 65  on] will be able
3680: 20 74 6f 20 77 72 69 74 65 20 74 6f 20 74 68 65   to write to the
3690: 20 64 61 74 61 62 61 73 65 20 6f 72 0a 64 6f 20   database or.do 
36a0: 61 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54  a BEGIN IMMEDIAT
36b0: 45 20 6f 72 20 42 45 47 49 4e 20 45 58 43 4c 55  E or BEGIN EXCLU
36c0: 53 49 56 45 2e 20 20 5e 4f 74 68 65 72 20 70 72  SIVE.  ^Other pr
36d0: 6f 63 65 73 73 65 73 20 63 61 6e 20 63 6f 6e 74  ocesses can cont
36e0: 69 6e 75 65 0a 74 6f 20 72 65 61 64 20 66 72 6f  inue.to read fro
36f0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  m the database, 
3700: 68 6f 77 65 76 65 72 2e 20 20 5e 41 6e 20 65 78  however.  ^An ex
3710: 63 6c 75 73 69 76 65 20 74 72 61 6e 73 61 63 74  clusive transact
3720: 69 6f 6e 20 63 61 75 73 65 73 0a 5b 45 58 43 4c  ion causes.[EXCL
3730: 55 53 49 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20  USIVE] locks to 
3740: 62 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  be acquired on a
3750: 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20 5e  ll databases.  ^
3760: 41 66 74 65 72 20 61 20 42 45 47 49 4e 0a 45 58  After a BEGIN.EX
3770: 43 4c 55 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65  CLUSIVE, no othe
3780: 72 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  r [database conn
3790: 65 63 74 69 6f 6e 5d 20 65 78 63 65 70 74 20 66  ection] except f
37a0: 6f 72 20 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69  or [read_uncommi
37b0: 74 74 65 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e  tted].connection
37c0: 73 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74  s will be able t
37d0: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
37e0: 61 73 65 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72  ase and no other
37f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68   connection with
3800: 6f 75 74 0a 65 78 63 65 70 74 69 6f 6e 20 77 69  out.exception wi
3810: 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77 72  ll be able to wr
3820: 69 74 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ite the database
3830: 20 75 6e 74 69 6c 20 74 68 65 20 74 72 61 6e 73   until the trans
3840: 61 63 74 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65  action is.comple
3850: 74 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28  te..</p>..<p>.^(
3860: 41 6e 20 69 6d 70 6c 69 63 69 74 20 74 72 61 6e  An implicit tran
3870: 73 61 63 74 69 6f 6e 20 28 61 20 74 72 61 6e 73  saction (a trans
3880: 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 73  action that is s
3890: 74 61 72 74 65 64 20 61 75 74 6f 6d 61 74 69 63  tarted automatic
38a0: 61 6c 6c 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e  ally,.not a tran
38b0: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
38c0: 62 79 20 42 45 47 49 4e 29 20 69 73 20 63 6f 6d  by BEGIN) is com
38d0: 6d 69 74 74 65 64 20 61 75 74 6f 6d 61 74 69 63  mitted automatic
38e0: 61 6c 6c 79 20 77 68 65 6e 0a 74 68 65 20 6c 61  ally when.the la
38f0: 73 74 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  st active statem
3900: 65 6e 74 20 66 69 6e 69 73 68 65 73 2e 20 20 41  ent finishes.  A
3910: 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73   statement finis
3920: 68 65 73 20 77 68 65 6e 20 69 74 73 0a 70 72 65  hes when its.pre
3930: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
3940: 69 73 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65  is [sqlite3_rese
3950: 74 28 29 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a  t() | reset] or.
3960: 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  [sqlite3_finaliz
3970: 65 28 29 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d  e() | finalized]
3980: 2e 20 20 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69  .  An open [sqli
3990: 74 65 33 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66  te3_blob] used f
39a0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42  or.incremental B
39b0: 4c 4f 42 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61  LOB I/O counts a
39c0: 73 20 61 6e 20 75 6e 66 69 6e 69 73 68 65 64 20  s an unfinished 
39d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20  statement.  The 
39e0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66  [sqlite3_blob].f
39f0: 69 6e 69 73 68 65 73 20 77 68 65 6e 20 69 74 20  inishes when it 
3a00: 69 73 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  is [sqlite3_blob
3a10: 5f 63 6c 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65  _close() | close
3a20: 64 5d 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  d].)^.</p>..<p>.
3a30: 5e 54 68 65 20 65 78 70 6c 69 63 69 74 20 43 4f  ^The explicit CO
3a40: 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  MMIT command run
3a50: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65  s immediately, e
3a60: 76 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65  ven if there are
3a70: 0a 70 65 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54  .pending [SELECT
3a80: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e  ] statements.  ^
3a90: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 72  However, if ther
3aa0: 65 20 61 72 65 20 70 65 6e 64 69 6e 67 0a 77 72  e are pending.wr
3ab0: 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20  ite operations, 
3ac0: 74 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61  the COMMIT comma
3ad0: 6e 64 0a 77 69 6c 6c 20 66 61 69 6c 20 77 69 74  nd.will fail wit
3ae0: 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
3af0: 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c  [SQLITE_BUSY]..<
3b00: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74  /p>..<p>.^An att
3b10: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute 
3b20: 43 4f 4d 4d 49 54 20 6d 69 67 68 74 20 61 6c 73  COMMIT might als
3b30: 6f 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b  o result in an [
3b40: 53 51 4c 49 54 45 5f 42 55 53 59 5d 20 72 65 74  SQLITE_BUSY] ret
3b50: 75 72 6e 20 63 6f 64 65 0a 69 66 20 61 6e 20 61  urn code.if an a
3b60: 6e 6f 74 68 65 72 20 74 68 72 65 61 64 20 6f 72  nother thread or
3b70: 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 5b   process has a [
3b80: 73 68 61 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20  shared lock] on 
3b90: 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 68 61  the database.tha
3ba0: 74 20 70 72 65 76 65 6e 74 65 64 20 74 68 65 20  t prevented the 
3bb0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 62 65  database from be
3bc0: 69 6e 67 20 75 70 64 61 74 65 64 2e 20 20 5e 57  ing updated.  ^W
3bd0: 68 65 6e 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73  hen COMMIT fails
3be0: 20 69 6e 20 74 68 69 73 0a 77 61 79 2c 20 74 68   in this.way, th
3bf0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 65  e transaction re
3c00: 6d 61 69 6e 73 20 61 63 74 69 76 65 20 61 6e 64  mains active and
3c10: 20 74 68 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20   the COMMIT can 
3c20: 62 65 20 72 65 74 72 69 65 64 20 6c 61 74 65 72  be retried later
3c30: 0a 61 66 74 65 72 20 74 68 65 20 72 65 61 64 65  .after the reade
3c40: 72 20 68 61 73 20 68 61 64 20 61 20 63 68 61 6e  r has had a chan
3c50: 63 65 20 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70  ce to clear..</p
3c60: 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 52 4f 4c 4c  >..<p>.^The ROLL
3c70: 42 41 43 4b 20 77 69 6c 6c 20 66 61 69 6c 20 77  BACK will fail w
3c80: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  ith an error cod
3c90: 65 20 5b 53 51 4c 49 54 45 5f 42 55 53 59 5d 20  e [SQLITE_BUSY] 
3ca0: 69 66 20 74 68 65 72 65 0a 61 72 65 20 61 6e 79  if there.are any
3cb0: 20 70 65 6e 64 69 6e 67 20 71 75 65 72 69 65 73   pending queries
3cc0: 2e 20 20 5e 42 6f 74 68 20 72 65 61 64 2d 6f 6e  .  ^Both read-on
3cd0: 6c 79 20 61 6e 64 20 72 65 61 64 2f 77 72 69 74  ly and read/writ
3ce0: 65 20 71 75 65 72 69 65 73 20 77 69 6c 6c 0a 63  e queries will.c
3cf0: 61 75 73 65 20 61 20 52 4f 4c 4c 42 41 43 4b 20  ause a ROLLBACK 
3d00: 74 6f 20 66 61 69 6c 2e 20 20 41 20 52 4f 4c 4c  to fail.  A ROLL
3d10: 42 41 43 4b 20 6d 75 73 74 20 66 61 69 6c 20 69  BACK must fail i
3d20: 66 20 74 68 65 72 65 20 61 72 65 20 70 65 6e 64  f there are pend
3d30: 69 6e 67 0a 72 65 61 64 20 6f 70 65 72 61 74 69  ing.read operati
3d40: 6f 6e 73 20 28 75 6e 6c 69 6b 65 20 43 4f 4d 4d  ons (unlike COMM
3d50: 49 54 20 77 68 69 63 68 20 63 61 6e 20 73 75 63  IT which can suc
3d60: 63 65 65 64 29 20 62 65 63 61 75 73 65 20 62 61  ceed) because ba
3d70: 64 20 74 68 69 6e 67 73 0a 77 69 6c 6c 20 68 61  d things.will ha
3d80: 70 70 65 6e 20 69 66 20 74 68 65 20 69 6e 2d 6d  ppen if the in-m
3d90: 65 6d 6f 72 79 20 69 6d 61 67 65 20 6f 66 20 74  emory image of t
3da0: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
3db0: 68 61 6e 67 65 64 20 6f 75 74 20 66 72 6f 6d 20  hanged out from 
3dc0: 75 6e 64 65 72 0a 61 6e 20 61 63 74 69 76 65 20  under.an active 
3dd0: 71 75 65 72 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  query..</p>..<p>
3de0: 0a 49 66 20 5b 50 52 41 47 4d 41 20 6a 6f 75 72  .If [PRAGMA jour
3df0: 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74  nal_mode] is set
3e00: 20 74 6f 20 4f 46 46 20 28 74 68 75 73 20 64 69   to OFF (thus di
3e10: 73 61 62 6c 69 6e 67 20 74 68 65 20 72 6f 6c 6c  sabling the roll
3e20: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 66 69 6c  back journal.fil
3e30: 65 29 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  e) then the beha
3e40: 76 69 6f 72 20 6f 66 20 74 68 65 20 52 4f 4c 4c  vior of the ROLL
3e50: 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 69 73 20  BACK command is 
3e60: 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a  undefined..</p>.
3e70: 0a 3c 68 33 3e 52 65 73 70 6f 6e 73 65 20 54 6f  .<h3>Response To
3e80: 20 45 72 72 6f 72 73 20 57 69 74 68 69 6e 20 41   Errors Within A
3e90: 20 54 72 61 6e 73 61 63 74 69 6f 6e 3c 2f 68 33   Transaction</h3
3ea0: 3e 0a 0a 3c 70 3e 20 5e 28 49 66 20 63 65 72 74  >..<p> ^(If cert
3eb0: 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 65 72 72  ain kinds of err
3ec0: 6f 72 73 20 6f 63 63 75 72 20 77 69 74 68 69 6e  ors occur within
3ed0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20   a transaction, 
3ee0: 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
3ef0: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
3f00: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75  e rolled back au
3f10: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20 54 68  tomatically.  Th
3f20: 65 0a 65 72 72 6f 72 73 20 74 68 61 74 20 63 61  e.errors that ca
3f30: 75 73 65 20 74 68 65 20 62 65 68 61 76 69 6f 72  use the behavior
3f40: 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a 0a 3c   include:</p>..<
3f50: 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ul>.<li> [SQLITE
3f60: 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61 73 65  _FULL]: database
3f70: 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a 3c 6c   or disk full.<l
3f80: 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45 52 52  i> [SQLITE_IOERR
3f90: 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  ]: disk I/O erro
3fa0: 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 42  r.<li> [SQLITE_B
3fb0: 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65 20 69  USY]: database i
3fc0: 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68 65 72  n use by another
3fd0: 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20 5b 53   process.<li> [S
3fe0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20 6f 75  QLITE_NOMEM]: ou
3ff0: 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 6c 69 3e  t or memory.<li>
4000: 20 5b 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55   [SQLITE_INTERRU
4010: 50 54 5d 3a 20 70 72 6f 63 65 73 73 69 6e 67 20  PT]: processing 
4020: 5b 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  [sqlite3_interru
4030: 70 74 7c 69 6e 74 65 72 72 75 70 74 65 64 5d 0a  pt|interrupted].
4040: 20 20 20 20 20 62 79 20 61 70 70 6c 69 63 61 74       by applicat
4050: 69 6f 6e 20 72 65 71 75 65 73 74 0a 3c 2f 75 6c  ion request.</ul
4060: 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20 61 6c  >)^..<p>.^For al
4070: 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72 6f 72  l of these error
4080: 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  s, SQLite attemp
4090: 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73 74 20  ts to undo just 
40a0: 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d 65 6e  the one statemen
40b0: 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69 6e 67  t.it was working
40c0: 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20 63 68   on and leave ch
40d0: 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69 6f 72  anges from prior
40e0: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
40f0: 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72 61 6e  in the.same tran
4100: 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74 20 61  saction intact a
4110: 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68  nd continue with
4120: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4130: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a 64 65  .  ^However, .de
4140: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 73  pending on the s
4150: 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 65  tatement being e
4160: 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
4170: 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63 68 20   point at which 
4180: 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75 72 73  the.error occurs
4190: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 6e 65  , it might be ne
41a0: 63 65 73 73 61 72 79 20 66 6f 72 20 53 51 4c 69  cessary for SQLi
41b0: 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  te to rollback a
41c0: 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20 65 6e  nd.cancel the en
41d0: 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tire transaction
41e0: 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69  .  ^An applicati
41f0: 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68 69 63  on can tell whic
4200: 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63 74 69  h.course of acti
4210: 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b 20 62  on SQLite took b
4220: 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c  y using the.[sql
4230: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
4240: 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  mit()] C-languag
4250: 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  e interface.</p>
4260: 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63 6f 6d  ..<p>It is recom
4270: 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70 70 6c  mended that appl
4280: 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f 6e 64  ications respond
4290: 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73 0a 6c   to the errors.l
42a0: 69 73 74 65 64 20 61 62 6f 76 65 20 62 79 20 65  isted above by e
42b0: 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75 69 6e  xplicitly issuin
42c0: 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d  g a ROLLBACK com
42d0: 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65 20 0a  mand.  ^If the .
42e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20  transaction has 
42f0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 6f 6c  already been rol
4300: 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d 61 74  led back automat
4310: 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20 65 72  ically.by the er
4320: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20 74 68  ror response, th
4330: 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  en the ROLLBACK 
4340: 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66 61 69  command will fai
4350: 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 2c  l with an.error,
4360: 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69 73 20   but no harm is 
4370: 63 61 75 73 65 64 20 62 79 20 74 68 69 73 2e 3c  caused by this.<
4380: 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65 20 76  /p>..<p>Future v
4390: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
43a0: 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74 68 65  e may extend the
43b0: 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72 73 20   list of errors 
43c0: 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61 75 73  which.might caus
43d0: 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72 61 6e  e automatic tran
43e0: 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b  saction rollback
43f0: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
4400: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69 67  ns of.SQLite mig
4410: 68 74 20 63 68 61 6e 67 65 20 74 68 65 20 65 72  ht change the er
4420: 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20 20 49  ror response.  I
4430: 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 77 65  n particular, we
4440: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 73   may.choose to s
4450: 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e 74 65  implify the inte
4460: 72 66 61 63 65 20 69 6e 20 66 75 74 75 72 65 20  rface in future 
4470: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
4480: 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20 74 68  te by.causing th
4490: 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65 20 74  e errors above t
44a0: 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63 6f 6e  o force an uncon
44b0: 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62 61 63  ditional rollbac
44c0: 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  k.</p>..<tcl>.##
44d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4510: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
4520: 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49 4e 54  ction {SAVEPOINT
4530: 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53 41 56  } savepoint {SAV
4540: 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45 7d 0a  EPOINT RELEASE}.
4550: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
4560: 61 76 65 70 6f 69 6e 74 2d 73 74 6d 74 0a 42 75  avepoint-stmt.Bu
4570: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 65 6c 65  bbleDiagram rele
4580: 61 73 65 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44  ase-stmt.BubbleD
4590: 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d  iagram rollback-
45a0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
45b0: 20 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65   ^SAVEPOINTs are
45c0: 20 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65   a method of cre
45d0: 61 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f  ating transactio
45e0: 6e 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b  ns, similar to.[
45f0: 42 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d  BEGIN] and [COMM
4600: 49 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74  IT], except that
4610: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61   the SAVEPOINT a
4620: 6e 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  nd RELEASE comma
4630: 6e 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e  nds.are named an
4640: 64 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e  d may be nested.
4650: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53  </p>..<p> ^The S
4660: 41 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64  AVEPOINT command
4670: 20 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72   starts a new tr
4680: 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61  ansaction with a
4690: 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e   name..^The tran
46a0: 73 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65  saction names ne
46b0: 65 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65  ed not be unique
46c0: 2e 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20  ..^(A SAVEPOINT 
46d0: 63 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65  can be started e
46e0: 69 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20  ither within or 
46f0: 6f 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45  outside of.a [BE
4700: 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e  GIN]...[COMMIT].
4710: 29 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56  )^  ^(When a SAV
4720: 45 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75  EPOINT is the ou
4730: 74 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69  ter-most savepoi
4740: 6e 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74  nt.and it is not
4750: 20 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e   within a [BEGIN
4760: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65  ]...[COMMIT] the
4770: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
4780: 73 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45  s the.same as BE
4790: 47 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41  GIN DEFERRED TRA
47a0: 4e 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a  NSACTION.)^</p>.
47b0: 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43  .<p>^The ROLLBAC
47c0: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76  K TO command rev
47d0: 65 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f  erts the state o
47e0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  f the database b
47f0: 61 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77  ack to what.it w
4800: 61 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68  as just after th
4810: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
4820: 53 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74  SAVEPOINT.  ^Not
4830: 65 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68  e that unlike th
4840: 61 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41  at.plain [ROLLBA
4850: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74  CK] command (wit
4860: 68 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77  hout the TO keyw
4870: 6f 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43  ord) the ROLLBAC
4880: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65  K TO command.doe
4890: 73 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65  s not cancel the
48a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e   transaction.  ^
48b0: 49 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65  Instead of cance
48c0: 6c 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61  lling the transa
48d0: 63 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42  ction,.the ROLLB
48e0: 41 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72  ACK TO command r
48f0: 65 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e  estarts the tran
4900: 73 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74  saction again at
4910: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
4920: 5e 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67  ^All intervening
4930: 20 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20   SAVEPOINTs are 
4940: 63 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65  canceled, howeve
4950: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
4960: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4970: 69 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49  is like a [COMMI
4980: 54 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49  T] for a SAVEPOI
4990: 4e 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45  NT..^The RELEASE
49a0: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
49b0: 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62  all savepoints b
49c0: 61 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75  ack to and inclu
49d0: 64 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72  ding the .most r
49e0: 65 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  ecent savepoint 
49f0: 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20  with a matching 
4a00: 6e 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76  name to be remov
4a10: 65 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61  ed from the .tra
4a20: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20  nsaction stack. 
4a30: 20 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66   ^The RELEASE of
4a40: 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61   an inner transa
4a50: 63 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63  ction.does not c
4a60: 61 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73  ause any changes
4a70: 20 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74   to be written t
4a80: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
4a90: 69 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72  ile; it merely.r
4aa0: 65 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74  emoves savepoint
4ab0: 73 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73  s from the trans
4ac0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63  action stack suc
4ad0: 68 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20  h that it is.no 
4ae0: 6c 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20  longer possible 
4af0: 74 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74  to ROLLBACK TO t
4b00: 68 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e  hose savepoints.
4b10: 0a 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63  .^If a RELEASE c
4b20: 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ommand releases 
4b30: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
4b40: 76 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74  vepoint, so.that
4b50: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
4b60: 20 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65   stack becomes e
4b70: 6d 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41  mpty, then RELEA
4b80: 53 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61  SE is the same.a
4b90: 73 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65  s [COMMIT]..^The
4ba0: 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e   [COMMIT] comman
4bb0: 64 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f  d may be used to
4bc0: 20 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76   release all sav
4bd0: 65 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d  epoints and.comm
4be0: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
4bf0: 6f 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74  on even if the t
4c00: 72 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f  ransaction was o
4c10: 72 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65  riginally starte
4c20: 64 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54  d.by a SAVEPOINT
4c30: 20 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64   command instead
4c40: 20 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f   of a [BEGIN] co
4c50: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  mmand.</p>..<p>^
4c60: 49 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  If the savepoint
4c70: 2d 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41  -name in a RELEA
4c80: 53 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  SE command does 
4c90: 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61  not match any.sa
4ca0: 76 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c  vepoint currentl
4cb0: 79 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63  y in the transac
4cc0: 74 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e  tion stack, then
4cd0: 20 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61   no savepoints a
4ce0: 72 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65  re.released, the
4cf0: 20 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63   database is unc
4d00: 68 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20  hanged, and the 
4d10: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4d20: 72 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72  returns.an error
4d30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
4d40: 74 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72  that an inner tr
4d50: 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
4d60: 63 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68  commit (using th
4d70: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
4d80: 64 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65  d).but then late
4d90: 72 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20  r have its work 
4da0: 75 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c  undone by a ROLL
4db0: 42 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72  BACK in an outer
4dc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41   transaction..^A
4dd0: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
4de0: 72 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20  r program crash 
4df0: 6f 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c  or OS crash will
4e00: 20 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72   cause the outer
4e10: 2d 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f  -most.transactio
4e20: 6e 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75  n to rollback, u
4e30: 6e 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67  ndoing all chang
4e40: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
4e50: 75 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61  urred within.tha
4e60: 74 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  t outer transact
4e70: 69 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65  ion, even change
4e80: 73 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70  s that have supp
4e90: 6f 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d  osedly been "com
4ea0: 6d 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52  mitted".by the R
4eb0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20  ELEASE command. 
4ec0: 20 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74   ^Content is not
4ed0: 20 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74   actually commit
4ee0: 74 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20  ted on the disk 
4ef0: 0a 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72  .until the outer
4f00: 6d 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  most transaction
4f10: 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c   commits.</p>..<
4f20: 70 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65  p>There are seve
4f30: 72 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e  ral ways of thin
4f40: 6b 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52  king about the R
4f50: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c  ELEASE command:<
4f60: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
4f70: 3e 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69  >.Some people vi
4f80: 65 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68  ew RELEASE as th
4f90: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  e equivalent of 
4fa0: 43 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56  COMMIT for a SAV
4fb0: 45 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20  EPOINT..This is 
4fc0: 61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f  an acceptable po
4fd0: 69 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c  int of view as l
4fe0: 6f 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d  ong as one remem
4ff0: 62 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68  bers that the.ch
5000: 61 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20  anges committed 
5010: 62 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e  by an inner tran
5020: 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61  saction might la
5030: 74 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79  ter be undone by
5040: 20 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61   a.rollback in a
5050: 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  n outer transact
5060: 69 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ion.</p></li>..<
5070: 6c 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76  li><p>.Another v
5080: 69 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69  iew of RELEASE i
5090: 73 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73  s that it merges
50a0: 20 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63   a named transac
50b0: 74 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61  tion into its.pa
50c0: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
50d0: 2c 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61  , so that the na
50e0: 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  med transaction 
50f0: 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62  and its parent b
5100: 65 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74  ecome.the same t
5110: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74  ransaction.  Aft
5120: 65 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20  er RELEASE, the 
5130: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
5140: 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74  n and its parent
5150: 0a 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20  .will commit or 
5160: 72 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65  rollback togethe
5170: 72 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69  r, whatever thei
5180: 72 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c  r fate may be..<
5190: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
51a0: 3e 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74  >.One can also t
51b0: 68 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e  hink of savepoin
51c0: 74 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e  ts as."marks" in
51d0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
51e0: 20 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74   timeline.  In t
51f0: 68 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41  his view, the SA
5200: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a  VEPOINT command.
5210: 63 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61  creates a new ma
5220: 72 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rk, the ROLLBACK
5230: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69   TO command rewi
5240: 6e 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65  nds the timeline
5250: 20 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74   back.to a point
5260: 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20   just after the 
5270: 6e 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20  named mark, and 
5280: 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  the RELEASE comm
5290: 61 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73  and.erases marks
52a0: 20 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69   from the timeli
52b0: 6e 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61  ne without actua
52c0: 6c 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63  lly making any.c
52d0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
52e0: 74 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  tabase..</p></li
52f0: 3e 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54  >.</ul>....<h3>T
5300: 72 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69  ransaction Nesti
5310: 6e 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  ng Rules</h3>..<
5320: 70 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e  p>^The last tran
5330: 73 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20  saction started 
5340: 77 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73  will be the firs
5350: 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t.transaction co
5360: 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65  mmitted or rolle
5370: 64 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d back.</p>..<p>
5380: 5e 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  ^The [BEGIN] com
5390: 6d 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  mand only works 
53a0: 69 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  if the transacti
53b0: 6f 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74  on stack is empt
53c0: 79 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77  y, or.in other w
53d0: 6f 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72  ords if there ar
53e0: 65 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61  e no pending tra
53f0: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20  nsactions.  ^If 
5400: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
5410: 73 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70  stack is not emp
5420: 74 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47  ty when the [BEG
5430: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69  IN] command is i
5440: 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65  nvoked, then the
5450: 20 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77   command.fails w
5460: 69 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70  ith an error.</p
5470: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d  >..<p>^The [COMM
5480: 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  IT] command comm
5490: 69 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64  its all outstand
54a0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
54b0: 20 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20   and leaves.the 
54c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
54d0: 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70  k empty.</p>..<p
54e0: 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  >^The RELEASE co
54f0: 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74  mmand starts wit
5500: 68 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  h the most recen
5510: 74 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  t addition to th
5520: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e.transaction st
5530: 61 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73  ack and releases
5540: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
5550: 77 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75  wards .in time u
5560: 6e 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73  ntil it releases
5570: 20 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74   a savepoint wit
5580: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76  h a matching sav
5590: 65 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72  epoint-name..^Pr
55a0: 69 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20  ior savepoints, 
55b0: 65 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  even savepoints 
55c0: 77 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61  with matching sa
55d0: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61  vepoint-names, a
55e0: 72 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49  re.unchanged..^I
55f0: 66 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  f the RELEASE co
5600: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65  mmand causes the
5610: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
5620: 63 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70  ck to become emp
5630: 74 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41  ty (if the RELEA
5640: 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61  SE command relea
5650: 73 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73  ses the.outermos
5660: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72  t transaction fr
5670: 6f 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68  om the stack) th
5680: 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  en the transacti
5690: 6f 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a  on commits.</p>.
56a0: 0a 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41  .<p>^The [ROLLBA
56b0: 43 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  CK] command with
56c0: 6f 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20  out a TO clause 
56d0: 72 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20  rolls backs all 
56e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64  transactions.and
56f0: 20 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e   leaves the tran
5700: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d  saction stack em
5710: 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  pty.</p>..<p>^Th
5720: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
5730: 6e 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61  nd with a TO cla
5740: 75 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74  use rolls back t
5750: 72 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e  ransactions goin
5760: 67 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74  g.backwards in t
5770: 69 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20  ime back to the 
5780: 6d 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45  most recent SAVE
5790: 50 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74  POINT with a mat
57a0: 63 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65  ching name..^The
57b0: 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20   SAVEPOINT with 
57c0: 74 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  the matching nam
57d0: 65 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65  e remains on the
57e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
57f0: 63 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61  ck,.but all data
5800: 62 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61  base changes tha
5810: 74 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72  t occurred after
5820: 20 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20   that SAVEPOINT 
5830: 77 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20  was created.are 
5840: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49  rolled back.  ^I
5850: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
5860: 6e 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41  name in a ROLLBA
5870: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f  CK TO command do
5880: 65 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79  es not.match any
5890: 20 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68   SAVEPOINT on th
58a0: 65 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68  e stack, then th
58b0: 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61  e ROLLBACK comma
58c0: 6e 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  nd fails with an
58d0: 0a 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65  .error and leave
58e0: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
58f0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68  he database unch
5900: 61 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  anged.</p>..<tcl
5910: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5960: 23 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e  #.Section commen
5970: 74 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65  t comment {comme
5980: 6e 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 42  nt *comments}..B
5990: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
59a0: 6d 65 6e 74 2d 73 79 6e 74 61 78 0a 3c 2f 74 63  ment-syntax.</tc
59b0: 6c 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74 73  l>..<p>^Comments
59c0: 20 61 72 65 20 6e 6f 74 20 53 51 4c 20 63 6f 6d   are not SQL com
59d0: 6d 61 6e 64 73 2c 20 62 75 74 20 63 61 6e 20 6f  mands, but can o
59e0: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20  ccur within the 
59f0: 74 65 78 74 20 6f 66 0a 53 51 4c 20 71 75 65 72  text of.SQL quer
5a00: 69 65 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73  ies passed to [s
5a10: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
5a20: 32 28 29 5d 20 61 6e 64 20 72 65 6c 61 74 65 64  2()] and related
5a30: 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 5e 43 6f   interfaces..^Co
5a40: 6d 6d 65 6e 74 73 20 61 72 65 20 74 72 65 61 74  mments are treat
5a50: 65 64 20 61 73 20 77 68 69 74 65 73 70 61 63 65  ed as whitespace
5a60: 20 62 79 20 74 68 65 20 70 61 72 73 65 72 2e 0a   by the parser..
5a70: 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20 62 65  ^Comments can be
5a80: 67 69 6e 20 61 6e 79 77 68 65 72 65 20 77 68 69  gin anywhere whi
5a90: 74 65 73 70 61 63 65 20 0a 63 61 6e 20 62 65 20  tespace .can be 
5aa0: 66 6f 75 6e 64 2c 20 69 6e 63 6c 75 64 69 6e 67  found, including
5ab0: 20 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69   inside expressi
5ac0: 6f 6e 73 20 74 68 61 74 20 73 70 61 6e 20 6d 75  ons that span mu
5ad0: 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 0a 3c 2f  ltiple lines..</
5ae0: 70 3e 0a 0a 3c 70 3e 5e 53 51 4c 20 63 6f 6d 6d  p>..<p>^SQL comm
5af0: 65 6e 74 73 20 62 65 67 69 6e 20 77 69 74 68 20  ents begin with 
5b00: 74 77 6f 20 63 6f 6e 73 65 63 75 74 69 76 65 20  two consecutive 
5b10: 22 2d 22 20 63 68 61 72 61 63 74 65 72 73 20 28  "-" characters (
5b20: 41 53 43 49 49 20 30 78 32 64 29 0a 61 6e 64 20  ASCII 0x2d).and 
5b30: 65 78 74 65 6e 64 20 75 70 20 74 6f 20 61 6e 64  extend up to and
5b40: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e   including the n
5b50: 65 78 74 20 6e 65 77 6c 69 6e 65 20 63 68 61 72  ext newline char
5b60: 61 63 74 65 72 20 28 41 53 43 49 49 20 30 78 30  acter (ASCII 0x0
5b70: 61 29 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  a).or until the 
5b80: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
5b90: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
5ba0: 72 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 2d  rst.</p>..<p>^C-
5bb0: 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 20 62  style comments b
5bc0: 65 67 69 6e 0a 77 69 74 68 20 22 2f 2a 22 20 61  egin.with "/*" a
5bd0: 6e 64 20 65 78 74 65 6e 64 20 75 70 20 74 6f 20  nd extend up to 
5be0: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
5bf0: 65 20 6e 65 78 74 20 22 2a 2f 22 20 63 68 61 72  e next "*/" char
5c00: 61 63 74 65 72 20 70 61 69 72 0a 6f 72 20 75 6e  acter pair.or un
5c10: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
5c20: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
5c30: 63 6f 6d 65 73 20 66 69 72 73 74 2e 20 20 5e 43  comes first.  ^C
5c40: 2d 73 74 79 6c 65 20 63 6f 6d 6d 65 6e 74 73 0a  -style comments.
5c50: 63 61 6e 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c  can span multipl
5c60: 65 20 6c 69 6e 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  e lines. </p>..<
5c70: 70 3e 5e 43 6f 6d 6d 65 6e 74 73 20 63 61 6e 20  p>^Comments can 
5c80: 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
5c90: 77 68 69 74 65 73 70 61 63 65 20 63 61 6e 20 6f  whitespace can o
5ca0: 63 63 75 72 2c 0a 69 6e 63 6c 75 64 69 6e 67 20  ccur,.including 
5cb0: 69 6e 73 69 64 65 20 65 78 70 72 65 73 73 69 6f  inside expressio
5cc0: 6e 73 20 61 6e 64 20 69 6e 20 74 68 65 20 6d 69  ns and in the mi
5cd0: 64 64 6c 65 20 6f 66 20 6f 74 68 65 72 20 53 51  ddle of other SQ
5ce0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 43  L statements..^C
5cf0: 6f 6d 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 6e  omments do not n
5d00: 65 73 74 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  est..</p>...<tcl
5d10: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
5d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d60: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
5d70: 20 49 4e 44 45 58 7d 20 63 72 65 61 74 65 69 6e   INDEX} createin
5d80: 64 65 78 20 7b 7b 43 52 45 41 54 45 20 49 4e 44  dex {{CREATE IND
5d90: 45 58 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EX}}..BubbleDiag
5da0: 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65 78  ram create-index
5db0: 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
5dc0: 61 67 72 61 6d 20 69 6e 64 65 78 65 64 2d 63 6f  agram indexed-co
5dd0: 6c 75 6d 6e 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  lumn.</tcl>..<p>
5de0: 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44 45  ^The CREATE INDE
5df0: 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73  X command consis
5e00: 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ts of the keywor
5e10: 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45 58  ds "CREATE INDEX
5e20: 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68  " followed.by th
5e30: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
5e40: 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79  w index, the key
5e50: 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e  word "ON", the n
5e60: 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75  ame of a previou
5e70: 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c  sly.created tabl
5e80: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
5e90: 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70  indexed, and a p
5ea0: 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
5eb0: 74 20 6f 66 20 6e 61 6d 65 73 20 6f 66 0a 63 6f  t of names of.co
5ec0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
5ed0: 6c 65 20 74 68 61 74 20 61 72 65 20 75 73 65 64  le that are used
5ee0: 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78 20 6b   for the index k
5ef0: 65 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ey.</p>..<tcl>hd
5f00: 5f 66 72 61 67 6d 65 6e 74 20 7b 64 65 73 63 69  _fragment {desci
5f10: 64 78 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20  dx} {descending 
5f20: 69 6e 64 69 63 65 73 7d 20 7b 64 65 73 63 65 6e  indices} {descen
5f30: 64 69 6e 67 20 69 6e 64 65 78 7d 3c 2f 74 63 6c  ding index}</tcl
5f40: 3e 0a 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d  >.<p>^Each colum
5f50: 6e 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 66 6f  n name can be fo
5f60: 6c 6c 6f 77 65 64 20 62 79 20 6f 6e 65 20 6f 66  llowed by one of
5f70: 20 74 68 65 20 22 41 53 43 22 20 6f 72 20 22 44   the "ASC" or "D
5f80: 45 53 43 22 20 6b 65 79 77 6f 72 64 73 0a 74 6f  ESC" keywords.to
5f90: 20 69 6e 64 69 63 61 74 65 20 73 6f 72 74 20 6f   indicate sort o
5fa0: 72 64 65 72 2e 20 20 5e 54 68 65 20 73 6f 72 74  rder.  ^The sort
5fb0: 20 6f 72 64 65 72 20 6d 61 79 20 6f 72 20 6d 61   order may or ma
5fc0: 79 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64  y not be ignored
5fd0: 20 64 65 70 65 6e 64 69 6e 67 0a 6f 6e 20 74 68   depending.on th
5fe0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
5ff0: 66 6f 72 6d 61 74 2c 20 61 6e 64 20 69 6e 20 70  format, and in p
6000: 61 72 74 69 63 75 6c 61 72 20 74 68 65 20 5b 73  articular the [s
6010: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d  chema format num
6020: 62 65 72 5d 2e 0a 5e 54 68 65 20 22 6c 65 67 61  ber]..^The "lega
6030: 63 79 22 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  cy" schema forma
6040: 74 20 28 31 29 20 69 67 6e 6f 72 65 73 20 69 6e  t (1) ignores in
6050: 64 65 78 0a 73 6f 72 74 20 6f 72 64 65 72 2e 20  dex.sort order. 
6060: 20 5e 54 68 65 20 64 65 73 63 65 6e 64 69 6e 67   ^The descending
6070: 20 69 6e 64 65 78 20 73 63 68 65 6d 61 20 66 6f   index schema fo
6080: 72 6d 61 74 20 28 34 29 20 74 61 6b 65 73 20 69  rmat (4) takes i
6090: 6e 64 65 78 20 73 6f 72 74 20 6f 72 64 65 72 0a  ndex sort order.
60a0: 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2e 20 20 5e  into account.  ^
60b0: 28 4f 6e 6c 79 20 63 6f 70 69 65 73 20 6f 66 20  (Only copies of 
60c0: 53 51 4c 69 74 65 20 6e 65 77 65 72 20 74 68 61  SQLite newer tha
60d0: 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e 33 2e 30  n [version 3.3.0
60e0: 5d 20 0a 28 72 65 6c 65 61 73 65 64 20 6f 6e 20  ] .(released on 
60f0: 32 30 30 36 2d 30 31 2d 31 30 29 20 61 72 65 20  2006-01-10) are 
6100: 61 62 6c 65 20 74 6f 20 75 6e 64 65 72 73 74 61  able to understa
6110: 6e 64 20 74 68 65 20 6e 65 77 65 72 20 64 65 73  nd the newer des
6120: 63 65 6e 64 69 6e 67 0a 69 6e 64 65 78 20 66 69  cending.index fi
6130: 6c 65 20 66 6f 72 6d 61 74 2e 29 5e 20 20 46 6f  le format.)^  Fo
6140: 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  r compatibility,
6150: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
6160: 74 65 20 62 65 74 77 65 65 6e 20 33 2e 33 2e 30  te between 3.3.0
6170: 0a 61 6e 64 20 33 2e 37 2e 39 20 75 73 65 20 74  .and 3.7.9 use t
6180: 68 65 20 6c 65 67 61 63 79 20 73 63 68 65 6d 61  he legacy schema
6190: 20 66 6f 72 6d 61 74 20 62 79 20 64 65 66 61 75   format by defau
61a0: 6c 74 2e 20 20 54 68 65 20 6e 65 77 65 72 20 73  lt.  The newer s
61b0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 0a  chema format is.
61c0: 75 73 65 64 20 62 79 20 64 65 66 61 75 6c 74 20  used by default 
61d0: 69 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31  in version 3.7.1
61e0: 30 20 61 6e 64 20 6c 61 74 65 72 2e 0a 5e 54 68  0 and later..^Th
61f0: 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  e [legacy_file_f
6200: 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63 61  ormat pragma] ca
6210: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 68 61  n be used to cha
6220: 6e 67 65 20 73 65 74 20 74 68 65 20 73 70 65 63  nge set the spec
6230: 69 66 69 63 0a 62 65 68 61 76 69 6f 72 20 66 6f  ific.behavior fo
6240: 72 20 61 6e 79 20 76 65 72 73 69 6f 6e 20 6f 66  r any version of
6250: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
6260: 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  >^The COLLATE cl
6270: 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  ause optionally 
6280: 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68 20 63  following each c
6290: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 64 65 66 69 6e  olumn name defin
62a0: 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  es a.collating s
62b0: 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72  equence used for
62c0: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e   text entries in
62d0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54   that column..^T
62e0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
62f0: 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73  ting.sequence is
6300: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
6310: 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20  equence defined 
6320: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  for that column 
6330: 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  in the.[CREATE T
6340: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
6350: 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c    ^Or if no coll
6360: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
6370: 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69  s otherwise defi
6380: 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69  ned,.the built-i
6390: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
63a0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
63b0: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sed.</p>..<p>The
63c0: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
63d0: 61 72 79 20 6c 69 6d 69 74 73 20 6f 6e 20 74 68  ary limits on th
63e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 6e 64 69  e number of indi
63f0: 63 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ces that can be.
6400: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69  attached to a si
6410: 6e 67 6c 65 20 74 61 62 6c 65 2e 20 20 5e 28 54  ngle table.  ^(T
6420: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
6430: 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  umns in an index
6440: 20 69 73 20 0a 6c 69 6d 69 74 65 64 20 74 6f 20   is .limited to 
6450: 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 62 79  the value set by
6460: 0a 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d  .[sqlite3_limit]
6470: 28 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  ([SQLITE_LIMIT_C
6480: 4f 4c 55 4d 4e 5d 2c 2e 2e 2e 29 2e 29 5e 3c 2f  OLUMN],...).)^</
6490: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
64a0: 6d 65 6e 74 20 75 6e 69 71 75 65 69 64 78 20 7b  ment uniqueidx {
64b0: 75 6e 69 71 75 65 20 69 6e 64 65 78 7d 3c 2f 74  unique index}</t
64c0: 63 6c 3e 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  cl>.<p>^If the U
64d0: 4e 49 51 55 45 20 6b 65 79 77 6f 72 64 20 61 70  NIQUE keyword ap
64e0: 70 65 61 72 73 20 62 65 74 77 65 65 6e 20 43 52  pears between CR
64f0: 45 41 54 45 20 61 6e 64 20 49 4e 44 45 58 20 74  EATE and INDEX t
6500: 68 65 6e 20 64 75 70 6c 69 63 61 74 65 0a 69 6e  hen duplicate.in
6510: 64 65 78 20 65 6e 74 72 69 65 73 20 61 72 65 20  dex entries are 
6520: 6e 6f 74 20 61 6c 6c 6f 77 65 64 2e 20 20 5e 41  not allowed.  ^A
6530: 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e  ny attempt to in
6540: 73 65 72 74 20 61 20 64 75 70 6c 69 63 61 74 65  sert a duplicate
6550: 20 65 6e 74 72 79 0a 77 69 6c 6c 20 72 65 73 75   entry.will resu
6560: 6c 74 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 20  lt in an error. 
6570: 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
6580: 65 73 20 6f 66 20 75 6e 69 71 75 65 20 69 6e 64  es of unique ind
6590: 69 63 65 73 2c 20 61 6c 6c 20 4e 55 4c 4c 20 76  ices, all NULL v
65a0: 61 6c 75 65 73 0a 61 72 65 20 63 6f 6e 73 69 64  alues.are consid
65b0: 65 72 65 64 20 74 6f 20 64 69 66 66 65 72 65 6e  ered to differen
65c0: 74 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68 65 72  t from all other
65d0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64   NULL values and
65e0: 20 61 72 65 20 74 68 75 73 20 75 6e 69 71 75 65   are thus unique
65f0: 2e 0a 54 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  ..This is one of
6600: 20 74 68 65 20 74 77 6f 20 70 6f 73 73 69 62 6c   the two possibl
6610: 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
6620: 73 20 6f 66 20 74 68 65 20 53 51 4c 2d 39 32 20  s of the SQL-92 
6630: 73 74 61 6e 64 61 72 64 0a 28 74 68 65 20 6c 61  standard.(the la
6640: 6e 67 75 61 67 65 20 69 6e 20 74 68 65 20 73 74  nguage in the st
6650: 61 6e 64 61 72 64 20 69 73 20 61 6d 62 69 67 75  andard is ambigu
6660: 6f 75 73 29 20 61 6e 64 20 69 73 20 74 68 65 20  ous) and is the 
6670: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 0a 66  interpretation.f
6680: 6f 6c 6c 6f 77 65 64 20 62 79 20 50 6f 73 74 67  ollowed by Postg
6690: 72 65 53 51 4c 2c 20 4d 79 53 51 4c 2c 20 46 69  reSQL, MySQL, Fi
66a0: 72 65 62 69 72 64 2c 20 61 6e 64 20 4f 72 61 63  rebird, and Orac
66b0: 6c 65 2e 20 20 49 6e 66 6f 72 6d 69 78 20 61 6e  le.  Informix an
66c0: 64 0a 4d 69 63 72 6f 73 6f 66 74 20 53 51 4c 20  d.Microsoft SQL 
66d0: 53 65 72 76 65 72 20 66 6f 6c 6c 6f 77 20 74 68  Server follow th
66e0: 65 20 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65  e other interpre
66f0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  tation of the st
6700: 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  andard.</p>..<p>
6710: 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c  ^If the optional
6720: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 63   IF NOT EXISTS c
6730: 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
6740: 20 61 6e 64 20 61 6e 6f 74 68 65 72 20 69 6e 64   and another ind
6750: 65 78 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  ex.with the same
6760: 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20 65 78   name already ex
6770: 69 73 74 73 2c 20 74 68 65 6e 20 74 68 69 73 20  ists, then this 
6780: 63 6f 6d 6d 61 6e 64 20 62 65 63 6f 6d 65 73 20  command becomes 
6790: 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e 0a 0a 3c 70  a no-op.</p>..<p
67a0: 3e 5e 49 6e 64 65 78 65 73 20 61 72 65 20 72 65  >^Indexes are re
67b0: 6d 6f 76 65 64 20 77 69 74 68 20 74 68 65 20 5b  moved with the [
67c0: 44 52 4f 50 20 49 4e 44 45 58 5d 20 63 6f 6d 6d  DROP INDEX] comm
67d0: 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  and.</p>...<tcl>
67e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
67f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
6830: 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
6840: 54 41 42 4c 45 7d 20 7b 63 72 65 61 74 65 74 61  TABLE} {createta
6850: 62 6c 65 7d 20 7b 7b 43 52 45 41 54 45 20 54 41  ble} {{CREATE TA
6860: 42 4c 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  BLE}}..BubbleDia
6870: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
6880: 65 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44  e-stmt 1.BubbleD
6890: 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65  iagram column-de
68a0: 66 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  f.BubbleDiagram 
68b0: 74 79 70 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65  type-name.Bubble
68c0: 44 69 61 67 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63  Diagram column-c
68d0: 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65  onstraint.Bubble
68e0: 44 69 61 67 72 61 6d 20 74 61 62 6c 65 2d 63 6f  Diagram table-co
68f0: 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44  nstraint.BubbleD
6900: 69 61 67 72 61 6d 20 66 6f 72 65 69 67 6e 2d 6b  iagram foreign-k
6910: 65 79 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ey-clause.</tcl>
6920: 0a 0a 3c 70 3e 54 68 65 20 22 43 52 45 41 54 45  ..<p>The "CREATE
6930: 20 54 41 42 4c 45 22 20 63 6f 6d 6d 61 6e 64 20   TABLE" command 
6940: 69 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  is used to creat
6950: 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
6960: 20 61 6e 20 53 51 4c 69 74 65 20 0a 64 61 74 61   an SQLite .data
6970: 62 61 73 65 2e 20 41 20 43 52 45 41 54 45 20 54  base. A CREATE T
6980: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 73 70 65  ABLE command spe
6990: 63 69 66 69 65 73 20 74 68 65 20 66 6f 6c 6c 6f  cifies the follo
69a0: 77 69 6e 67 20 61 74 74 72 69 62 75 74 65 73 20  wing attributes 
69b0: 6f 66 20 74 68 65 0a 6e 65 77 20 74 61 62 6c 65  of the.new table
69c0: 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70  :..<ul>.  <li><p
69d0: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
69e0: 20 6e 65 77 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   new table...  <
69f0: 6c 69 3e 3c 70 3e 20 54 68 65 20 64 61 74 61 62  li><p> The datab
6a00: 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
6a10: 20 6e 65 77 20 74 61 62 6c 65 20 69 73 20 63 72   new table is cr
6a20: 65 61 74 65 64 2e 20 54 61 62 6c 65 73 20 6d 61  eated. Tables ma
6a30: 79 20 62 65 20 0a 20 20 20 20 20 20 63 72 65 61  y be .      crea
6a40: 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ted in the main 
6a50: 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 65  database, the te
6a60: 6d 70 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20  mp database, or 
6a70: 69 6e 20 61 6e 79 20 61 74 74 61 63 68 65 64 0a  in any attached.
6a80: 20 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 0a        database..
6a90: 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 6e  .  <li><p> The n
6aa0: 61 6d 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ame of each colu
6ab0: 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  mn in the table.
6ac0: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68 65 20  ..  <li><p> The 
6ad0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
6ae0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
6af0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
6b00: 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20  i><p> A default 
6b10: 76 61 6c 75 65 20 6f 72 20 65 78 70 72 65 73 73  value or express
6b20: 69 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  ion for each col
6b30: 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
6b40: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64  ...  <li><p> A d
6b50: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
6b60: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
6b70: 20 77 69 74 68 20 65 61 63 68 20 63 6f 6c 75 6d   with each colum
6b80: 6e 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70  n...  <li><p> Op
6b90: 74 69 6f 6e 61 6c 6c 79 2c 20 61 20 50 52 49 4d  tionally, a PRIM
6ba0: 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
6bb0: 74 61 62 6c 65 2e 20 42 6f 74 68 20 73 69 6e 67  table. Both sing
6bc0: 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20  le column and.  
6bd0: 20 20 20 20 20 63 6f 6d 70 6f 73 69 74 65 20 28       composite (
6be0: 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 29  multiple column)
6bf0: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 61 72   primary keys ar
6c00: 65 20 73 75 70 70 6f 72 74 65 64 2e 0a 0a 20 20  e supported...  
6c10: 3c 6c 69 3e 3c 70 3e 20 41 20 73 65 74 20 6f 66  <li><p> A set of
6c20: 20 53 51 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73   SQL constraints
6c30: 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2e   for each table.
6c40: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
6c50: 20 55 4e 49 51 55 45 2c 20 4e 4f 54 0a 20 20 20   UNIQUE, NOT.   
6c60: 20 20 20 20 4e 55 4c 4c 2c 20 43 48 45 43 4b 20      NULL, CHECK 
6c70: 61 6e 64 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  and FOREIGN KEY 
6c80: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 3c 2f 75  constraints..</u
6c90: 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 43 52 45  l>..<p>Every CRE
6ca0: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
6cb0: 65 6e 74 20 6d 75 73 74 20 73 70 65 63 69 66 79  ent must specify
6cc0: 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20   a name for the 
6cd0: 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20 5e 28 54  new table..  ^(T
6ce0: 61 62 6c 65 20 6e 61 6d 65 73 20 74 68 61 74 20  able names that 
6cf0: 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69  begin with "sqli
6d00: 74 65 5f 22 20 61 72 65 20 72 65 73 65 72 76 65  te_" are reserve
6d10: 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75  d for internal u
6d20: 73 65 2e 20 49 74 0a 20 20 69 73 20 61 6e 20 65  se. It.  is an e
6d30: 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20  rror to attempt 
6d40: 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  to create a tabl
6d50: 65 20 77 69 74 68 20 61 20 6e 61 6d 65 20 74 68  e with a name th
6d60: 61 74 20 73 74 61 72 74 73 20 77 69 74 68 0a 20  at starts with. 
6d70: 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e 0a 0a 3c   "sqlite_".)^..<
6d80: 70 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74  p> ^If a &lt;dat
6d90: 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69  abase-name&gt; i
6da0: 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 20  s specified, it 
6db0: 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 22  must be either "
6dc0: 6d 61 69 6e 22 2c 20 0a 20 20 22 74 65 6d 70 22  main", .  "temp"
6dd0: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  , or the name of
6de0: 20 61 6e 20 5b 41 54 54 41 43 48 20 44 41 54 41   an [ATTACH DATA
6df0: 42 41 53 45 7c 61 74 74 61 63 68 65 64 20 64 61  BASE|attached da
6e00: 74 61 62 61 73 65 5d 2e 20 5e 49 6e 20 74 68 69  tabase]. ^In thi
6e10: 73 20 63 61 73 65 0a 20 20 74 68 65 20 6e 65 77  s case.  the new
6e20: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
6e30: 64 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 64  d in the named d
6e40: 61 74 61 62 61 73 65 2e 20 5e 49 66 20 74 68 65  atabase. ^If the
6e50: 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d 50   "TEMP" or "TEMP
6e60: 4f 52 41 52 59 22 0a 20 20 6b 65 79 77 6f 72 64  ORARY".  keyword
6e70: 20 6f 63 63 75 72 73 20 62 65 74 77 65 65 6e 20   occurs between 
6e80: 74 68 65 20 22 43 52 45 41 54 45 22 20 61 6e 64  the "CREATE" and
6e90: 20 22 54 41 42 4c 45 22 20 74 68 65 6e 20 74 68   "TABLE" then th
6ea0: 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73 0a 20  e new table is. 
6eb0: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
6ec0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 2e 20 5e  temp database. ^
6ed0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
6ee0: 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68 20 61  o specify both a
6ef0: 20 0a 20 20 26 6c 74 3b 64 61 74 61 62 61 73 65   .  &lt;database
6f00: 2d 6e 61 6d 65 26 67 74 3b 20 61 6e 64 20 74 68  -name&gt; and th
6f10: 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52  e TEMP or TEMPOR
6f20: 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c  ARY keyword, unl
6f30: 65 73 73 20 74 68 65 0a 20 20 26 6c 74 3b 64 61  ess the.  &lt;da
6f40: 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20  tabase-name&gt; 
6f50: 69 73 20 22 74 65 6d 70 22 2e 20 5e 49 66 20 6e  is "temp". ^If n
6f60: 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  o database name 
6f70: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64  is specified and
6f80: 20 74 68 65 0a 20 20 54 45 4d 50 20 6b 65 79 77   the.  TEMP keyw
6f90: 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ord is not prese
6fa0: 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  nt then the tabl
6fb0: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  e is created in 
6fc0: 74 68 65 20 6d 61 69 6e 0a 20 20 64 61 74 61 62  the main.  datab
6fd0: 61 73 65 2e 0a 0a 3c 70 3e 0a 20 20 5e 49 74 20  ase...<p>.  ^It 
6fe0: 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65 72  is usually an er
6ff0: 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20 74  ror to attempt t
7000: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
7010: 61 62 6c 65 20 69 6e 20 61 20 64 61 74 61 62 61  able in a databa
7020: 73 65 20 74 68 61 74 0a 20 20 61 6c 72 65 61 64  se that.  alread
7030: 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61 62  y contains a tab
7040: 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69 65  le, index or vie
7050: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
7060: 6d 65 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  me. ^However, if
7070: 20 74 68 65 0a 20 20 22 49 46 20 4e 4f 54 20 45   the.  "IF NOT E
7080: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
7090: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
70a0: 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54 45  rt of the CREATE
70b0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
70c0: 20 61 6e 64 0a 20 20 61 20 74 61 62 6c 65 20 6f   and.  a table o
70d0: 72 20 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  r view of the sa
70e0: 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64 79 20  me name already 
70f0: 65 78 69 73 74 73 2c 20 74 68 65 20 43 52 45 41  exists, the CREA
7100: 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
7110: 0a 20 20 73 69 6d 70 6c 79 20 68 61 73 20 6e 6f  .  simply has no
7120: 20 65 66 66 65 63 74 20 28 61 6e 64 20 6e 6f 20   effect (and no 
7130: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 73  error message is
7140: 20 72 65 74 75 72 6e 65 64 29 2e 20 5e 41 6e 20   returned). ^An 
7150: 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 0a 20  error is still. 
7160: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
7170: 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74 20 62 65   table cannot be
7180: 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65   created because
7190: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
71a0: 69 6e 64 65 78 2c 20 65 76 65 6e 20 0a 20 20 69  index, even .  i
71b0: 66 20 74 68 65 20 22 49 46 20 4e 4f 54 20 45 58  f the "IF NOT EX
71c0: 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20  ISTS" clause is 
71d0: 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e  specified...<p>^
71e0: 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72  It is not an err
71f0: 6f 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  or to create a t
7200: 61 62 6c 65 20 74 68 61 74 20 68 61 73 20 74 68  able that has th
7210: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
7220: 6e 20 0a 20 20 65 78 69 73 74 69 6e 67 20 5b 43  n .  existing [C
7230: 52 45 41 54 45 20 54 52 49 47 47 45 52 7c 74 72  REATE TRIGGER|tr
7240: 69 67 67 65 72 5d 2e 0a 0a 3c 70 3e 5e 54 61 62  igger]...<p>^Tab
7250: 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  les are removed 
7260: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
7270: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
7280: 2e 20 20 3c 2f 70 3e 0a 0a 3c 68 33 3e 43 52 45  .  </p>..<h3>CRE
7290: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
72a0: 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e   SELECT Statemen
72b0: 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  ts</h3>..<p>^(A 
72c0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
72d0: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
72e0: 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61  tement creates a
72f0: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
7300: 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61  atabase.table ba
7310: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
7320: 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ts of a SELECT s
7330: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
7340: 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20  e table has the 
7350: 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63  same.number of c
7360: 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f  olumns as the ro
7370: 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
7380: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
7390: 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ent. The name of
73a0: 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20  .each column is 
73b0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
73c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72  name of the corr
73d0: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
73e0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73   in the result.s
73f0: 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et of the SELECT
7400: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
7410: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
7420: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
7430: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
7440: 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f  y the [expressio
7450: 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74  n affinity] of t
7460: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7470: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
7480: 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66  he result set.of
7490: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
74a0: 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  ement, as follow
74b0: 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  s:.</p>..<center
74c0: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  ><table border=1
74d0: 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72  >.  <tr><th>Expr
74e0: 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20  ession Affinity 
74f0: 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63    <th>Column Dec
7500: 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72  lared Type.  <tr
7510: 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20  ><td>TEXT       
7520: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
7530: 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  TEXT".  <tr><td>
7540: 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20  NUMERIC         
7550: 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a        <td>"NUM".
7560: 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45    <tr><td>INTEGE
7570: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
7580: 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e  <td>"INT".  <tr>
7590: 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20  <td>REAL        
75a0: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52            <td>"R
75b0: 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e  EAL".  <tr><td>N
75c0: 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 20 20  ONE             
75d0: 20 20 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70       <td>"" (emp
75e0: 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62  ty string).</tab
75f0: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
7600: 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65  <p>^(A table cre
7610: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
7620: 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e  E TABLE AS has n
7630: 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  o PRIMARY KEY an
7640: 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73  d no.constraints
7650: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68   of any kind. Th
7660: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
7670: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
7680: 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61  s NULL. The defa
7690: 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult.collation se
76a0: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
76b0: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
76c0: 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52  w table is BINAR
76d0: 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  Y.)^..<p>^Tables
76e0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
76f0: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61  REATE TABLE AS a
7700: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70  re initially pop
7710: 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a  ulated with the.
7720: 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74  rows of data ret
7730: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
7740: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
7750: 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65  Rows are assigne
7760: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61  d contiguously.a
7770: 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d  scending [rowid]
7780: 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e   values, startin
7790: 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65  g with 1, in the
77a0: 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72   [order by|order
77b0: 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20  ] that they.are 
77c0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
77d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
77e0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
77f0: 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66  ent {tablecoldef
7800: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
7810: 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  tion} {column de
7820: 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  finitions}</tcl>
7830: 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69  .<h3>Column Defi
7840: 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  nitions</h3>..<p
7850: 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20  >Unless it is a 
7860: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
7870: 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65   AS SELECT state
7880: 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54  ment, a CREATE T
7890: 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e  ABLE includes.on
78a0: 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d  e or more [colum
78b0: 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66  n-def|column def
78c0: 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f  initions], optio
78d0: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
78e0: 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62  y a list of.[tab
78f0: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61  le-constraint|ta
7900: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  ble constraints]
7910: 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  .  Each column d
7920: 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73  efinition consis
7930: 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f  ts of the.name o
7940: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70  f the column, op
7950: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
7960: 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65  d by the declare
7970: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  d type of the co
7980: 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f  lumn,.then one o
7990: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20  r more optional 
79a0: 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  [column-constrai
79b0: 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  nt|column constr
79c0: 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64  aints]. Included
79d0: 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69   in.the definiti
79e0: 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f  on of "column co
79f0: 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74  nstraints" for t
7a00: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7a10: 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74  he previous.stat
7a20: 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f  ement are the CO
7a30: 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c  LLATE and DEFAUL
7a40: 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20  T clauses, even 
7a50: 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65  though these are
7a60: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73   not really.cons
7a70: 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73  traints in the s
7a80: 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64  ense that they d
7a90: 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74  o not restrict t
7aa0: 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65  he data that the
7ab0: 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61   table may.conta
7ac0: 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f  in. The other co
7ad0: 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20  nstraints - NOT 
7ae0: 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49  NULL, CHECK, UNI
7af0: 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  QUE, PRIMARY KEY
7b00: 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59   and.FOREIGN KEY
7b10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69   constraints - i
7b20: 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f  mpose restrictio
7b30: 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73  ns on the tables
7b40: 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61   data, and are a
7b50: 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64  re.described und
7b60: 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c  er [constraints|
7b70: 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61  SQL Data Constra
7b80: 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70  ints] below...<p
7b90: 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51  >^Unlike most SQ
7ba0: 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c  L databases, SQL
7bb0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ite does not res
7bc0: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
7bd0: 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20  f data that.may 
7be0: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
7bf0: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
7c00: 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  on the columns d
7c10: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e  eclared type. In
7c20: 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73  stead,.SQLite us
7c30: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
7c40: 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72  ng]. ^The declar
7c50: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
7c60: 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64  umn is used to.d
7c70: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66  etermine the [af
7c80: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
7c90: 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 70 3e  olumn only...<p>
7ca0: 54 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75  The DEFAULT clau
7cb0: 73 65 20 73 70 65 63 69 66 69 65 73 20 61 20 64  se specifies a d
7cc0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74 6f 20  efault value to 
7cd0: 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  use for the colu
7ce0: 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c 75 65 20 69  mn if no.value i
7cf0: 73 20 65 78 70 6c 69 63 69 74 6c 79 20 70 72 6f  s explicitly pro
7d00: 76 69 64 65 64 20 62 79 20 74 68 65 20 75 73 65  vided by the use
7d10: 72 20 77 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  r when doing an 
7d20: 5b 49 4e 53 45 52 54 5d 2e 20 5e 49 66 20 74 68  [INSERT]. ^If th
7d30: 65 72 65 0a 69 73 20 6e 6f 20 65 78 70 6c 69 63  ere.is no explic
7d40: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
7d50: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
7d60: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
7d70: 6e 2c 20 74 68 65 6e 20 74 68 65 20 0a 64 65 66  n, then the .def
7d80: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
7d90: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  e column is NULL
7da0: 2e 20 5e 28 41 6e 20 65 78 70 6c 69 63 69 74 20  . ^(An explicit 
7db0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d  DEFAULT clause m
7dc0: 61 79 20 73 70 65 63 69 66 79 0a 74 68 61 74 20  ay specify.that 
7dd0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
7de0: 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73 74 72  e is NULL, a str
7df0: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20 61 20  ing constant, a 
7e00: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c 20 61  blob constant, a
7e10: 0a 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 2c 20  .signed-number, 
7e20: 6f 72 20 61 6e 79 20 63 6f 6e 73 74 61 6e 74 20  or any constant 
7e30: 65 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6c 6f  expression enclo
7e40: 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73  sed in parenthes
7e50: 65 73 2e 20 41 6e 20 65 78 70 6c 69 63 69 74 0a  es. An explicit.
7e60: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61  default value ma
7e70: 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66  y also be one of
7e80: 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73   the special cas
7e90: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65  e-independent ke
7ea0: 79 77 6f 72 64 73 0a 43 55 52 52 45 4e 54 5f 54  ywords.CURRENT_T
7eb0: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
7ec0: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
7ed0: 45 53 54 41 4d 50 2e 29 5e 20 5e 46 6f 72 20 74  ESTAMP.)^ ^For t
7ee0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7ef0: 68 65 0a 44 45 46 41 55 4c 54 20 63 6c 61 75 73  he.DEFAULT claus
7f00: 65 2c 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  e, an expression
7f10: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63   is considered c
7f20: 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64  onstant provided
7f30: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 6e 6f   that it does.no
7f40: 74 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 73 75  t contain any su
7f50: 62 2d 71 75 65 72 69 65 73 20 6f 72 20 73 74 72  b-queries or str
7f60: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e  ing constants en
7f70: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
7f80: 20 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45   quotes...<p>^(E
7f90: 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69  ach time a row i
7fa0: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
7fb0: 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20  the table by an 
7fc0: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
7fd0: 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20   that .does not 
7fe0: 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74  provide explicit
7ff0: 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20   values for all 
8000: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68  table columns th
8010: 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
8020: 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61  in.the new row a
8030: 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  re determined by
8040: 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
8050: 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c  alues)^, as foll
8060: 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows:..<ul>.  <li
8070: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
8080: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
8090: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e   column is a con
80a0: 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74  stant NULL, text
80b0: 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69  , blob or.    si
80c0: 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75  gned-number valu
80d0: 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c  e, then that val
80e0: 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65 63  ue is used direc
80f0: 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72  tly in the new r
8100: 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49  ow...  <li><p>^I
8110: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
8120: 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  lue of a column 
8130: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
8140: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c   in parentheses,
8150: 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78   then.    the ex
8160: 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
8170: 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65  uated once for e
8180: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
8190: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73   and the results
81a0: 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68 65  .    used in the
81b0: 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69   new row...  <li
81c0: 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61  ><p>^If the defa
81d0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63  ult value of a c
81e0: 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54  olumn is CURRENT
81f0: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
8200: 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45  ATE or.    CURRE
8210: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68  NT_TIMESTAMP, th
8220: 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65  en the value use
8230: 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  d in the new row
8240: 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20 72   is a text.    r
8250: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
8260: 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43   the current UTC
8270: 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d   date and/or tim
8280: 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f  e. ^For CURRENT_
8290: 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f  TIME, the.    fo
82a0: 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75  rmat of the valu
82b0: 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e  e is "HH:MM:SS".
82c0: 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41   ^For CURRENT_DA
82d0: 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22  TE, "YYYY-MM-DD"
82e0: 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61  . ^The.    forma
82f0: 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  t for CURRENT_TI
8300: 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59  MESTAMP is "YYYY
8310: 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22  -MM-DD HH:MM:SS"
8320: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  ..</ul>..<p>^The
8330: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
8340: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61  specifies the na
8350: 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69  me of a [collati
8360: 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20  ng sequence] to 
8370: 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61 75  use as.the defau
8380: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
8390: 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f  uence for the co
83a0: 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c  lumn. ^If no COL
83b0: 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73  LATE clause is.s
83c0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65  pecified, the de
83d0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
83e0: 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e  sequence is [BIN
83f0: 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e  ARY]...<p>^The n
8400: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
8410: 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c   in a table is l
8420: 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b 53  imited by the [S
8430: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
8440: 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70  ].compile-time p
8450: 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e  arameter. ^A sin
8460: 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62  gle row of a tab
8470: 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20  le cannot store 
8480: 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54  more than.[SQLIT
8490: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79  E_MAX_LENGTH] by
84a0: 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f  tes of data. ^Bo
84b0: 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69  th of these limi
84c0: 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65  ts can be lowere
84d0: 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69  d at.runtime usi
84e0: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
84f0: 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69  limit()] C/C++ i
8500: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
8510: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
8520: 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63  {constraints} {c
8530: 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c  onstraints}</tcl
8540: 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43  >.<h3>SQL Data C
8550: 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a  onstraints</h3>.
8560: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
8570: 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b  t primkeyconst {
8580: 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52  PRIMARY KEY} {PR
8590: 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72  IMARY KEY constr
85a0: 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  aint}</tcl>.<p>^
85b0: 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51  Each table in SQ
85c0: 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74  Lite may have at
85d0: 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49   most one <b>PRI
85e0: 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49  MARY KEY</b>. ^I
85f0: 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73  f the.  keywords
8600: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65   PRIMARY KEY are
8610: 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75   added to a colu
8620: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74  mn definition, t
8630: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
8640: 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61  key.  for the ta
8650: 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ble consists of 
8660: 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75  that single colu
8670: 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52  mn. ^Or, if a PR
8680: 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65  IMARY KEY clause
8690: 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64   .  is specified
86a0: 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e   as a [table-con
86b0: 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74  straint], then t
86c0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  he primary key o
86d0: 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f  f the table.  co
86e0: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69  nsists of the li
86f0: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70  st of columns sp
8700: 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
8710: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
8720: 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 49 66  EY clause..  ^If
8730: 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 74   there is more t
8740: 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20  han one PRIMARY 
8750: 4b 45 59 20 63 6c 61 75 73 65 20 69 6e 20 61 20  KEY clause in a 
8760: 73 69 6e 67 6c 65 20 43 52 45 41 54 45 20 54 41  single CREATE TA
8770: 42 4c 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 2c  BLE.  statement,
8780: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
8790: 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20  ..<p>If a table 
87a0: 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  has a single col
87b0: 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 2c  umn primary key,
87c0: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
87d0: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20  d type of that. 
87e0: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
87f0: 47 45 52 22 2c 20 74 68 65 6e 20 74 68 65 20 63  GER", then the c
8800: 6f 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61  olumn is known a
8810: 73 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52  s an [INTEGER PR
8820: 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65  IMARY KEY]..  Se
8830: 65 20 62 65 6c 6f 77 20 66 6f 72 20 61 20 64 65  e below for a de
8840: 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65  scription of the
8850: 20 73 70 65 63 69 61 6c 20 70 72 6f 70 65 72 74   special propert
8860: 69 65 73 20 61 6e 64 20 62 65 68 61 76 69 6f 72  ies and behavior
8870: 73 0a 20 20 61 73 73 6f 63 69 61 74 65 64 20 77  s.  associated w
8880: 69 74 68 20 61 6e 20 5b 49 4e 54 45 47 45 52 20  ith an [INTEGER 
8890: 50 52 49 4d 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c  PRIMARY KEY]...<
88a0: 70 3e 5e 45 61 63 68 20 72 6f 77 20 69 6e 20 61  p>^Each row in a
88b0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 70 72   table with a pr
88c0: 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 20 66  imary key must f
88d0: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
88e0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
88f0: 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70   values in its p
8900: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
8910: 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ns. ^For the pur
8920: 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69  poses of determi
8930: 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69 71 75  ning.  the uniqu
8940: 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72 79  eness of primary
8950: 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55 4c   key values, NUL
8960: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
8970: 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63 74  sidered distinct
8980: 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74 68 65   from.  all othe
8990: 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75 64  r values, includ
89a0: 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73 2e  ing other NULLs.
89b0: 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d   ^If an [INSERT]
89c0: 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20 20 73   or [UPDATE].  s
89d0: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
89e0: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  s to modify the 
89f0: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 73 6f  table content so
8a00: 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72   that two or mor
8a10: 65 20 72 6f 77 73 0a 20 20 66 65 61 74 75 72 65  e rows.  feature
8a20: 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69 6d 61   identical prima
8a30: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 69  ry key values, i
8a40: 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e  t is a constrain
8a50: 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 20 20 41  t violation..  A
8a60: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
8a70: 53 51 4c 20 73 74 61 6e 64 61 72 64 2c 20 50 52  SQL standard, PR
8a80: 49 4d 41 52 59 20 4b 45 59 20 73 68 6f 75 6c 64  IMARY KEY should
8a90: 20 61 6c 77 61 79 73 20 69 6d 70 6c 79 20 4e 4f   always imply NO
8aa0: 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74  T NULL..  Unfort
8ab0: 75 6e 61 74 65 6c 79 2c 20 64 75 65 20 74 6f 20  unately, due to 
8ac0: 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20  a long-standing 
8ad0: 63 6f 64 69 6e 67 20 6f 76 65 72 73 69 67 68 74  coding oversight
8ae0: 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68  , this is not th
8af0: 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69  e.  case in SQLi
8b00: 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20  te. ^Unless the 
8b10: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e  column is an [IN
8b20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
8b30: 59 5d 20 53 51 4c 69 74 65 0a 20 20 61 6c 6c 6f  Y] SQLite.  allo
8b40: 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  ws NULL values i
8b50: 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  n a PRIMARY KEY 
8b60: 63 6f 6c 75 6d 6e 2e 20 20 57 65 20 63 6f 75 6c  column.  We coul
8b70: 64 20 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20  d change SQLite 
8b80: 74 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20  to.  conform to 
8b90: 74 68 65 20 73 74 61 6e 64 61 72 64 20 28 61 6e  the standard (an
8ba0: 64 20 77 65 20 6d 69 67 68 74 20 64 6f 20 73 6f  d we might do so
8bb0: 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 29 2c   in the future),
8bc0: 20 62 75 74 20 62 79 20 74 68 65 20 74 69 6d 65   but by the time
8bd0: 0a 20 20 74 68 65 20 6f 76 65 72 73 69 67 68 74  .  the oversight
8be0: 20 77 61 73 20 64 69 73 63 6f 76 65 72 65 64 2c   was discovered,
8bf0: 20 53 51 4c 69 74 65 20 77 61 73 20 69 6e 20 73   SQLite was in s
8c00: 75 63 68 20 77 69 64 65 20 75 73 65 20 74 68 61  uch wide use tha
8c10: 74 20 77 65 20 66 65 61 72 65 64 0a 20 20 62 72  t we feared.  br
8c20: 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20 63 6f  eaking legacy co
8c30: 64 65 20 69 66 20 77 65 20 66 69 78 65 64 20 74  de if we fixed t
8c40: 68 65 20 70 72 6f 62 6c 65 6d 2e 20 20 53 6f 20  he problem.  So 
8c50: 66 6f 72 20 6e 6f 77 20 77 65 20 68 61 76 65 20  for now we have 
8c60: 63 68 6f 73 65 6e 20 74 6f 0a 20 20 63 6f 6e 74  chosen to.  cont
8c70: 69 6e 75 65 20 61 6c 6c 6f 77 69 6e 67 20 4e 55  inue allowing NU
8c80: 4c 4c 73 20 69 6e 20 50 52 49 4d 41 52 59 20 4b  LLs in PRIMARY K
8c90: 45 59 20 63 6f 6c 75 6d 6e 73 2e 20 20 44 65 76  EY columns.  Dev
8ca0: 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 62  elopers should b
8cb0: 65 0a 20 20 61 77 61 72 65 2c 20 68 6f 77 65 76  e.  aware, howev
8cc0: 65 72 2c 20 74 68 61 74 20 77 65 20 6d 61 79 20  er, that we may 
8cd0: 63 68 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f  change SQLite to
8ce0: 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20   conform to the 
8cf0: 53 51 4c 20 73 74 61 6e 64 61 72 64 20 69 6e 0a  SQL standard in.
8d00: 20 20 66 75 74 75 72 65 20 61 6e 64 20 73 68 6f    future and sho
8d10: 75 6c 64 20 64 65 73 69 67 6e 20 6e 65 77 20 70  uld design new p
8d20: 72 6f 67 72 61 6d 73 20 61 63 63 6f 72 64 69 6e  rograms accordin
8d30: 67 6c 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  gly...<tcl>hd_fr
8d40: 61 67 6d 65 6e 74 20 75 6e 69 71 75 65 63 6f 6e  agment uniquecon
8d50: 73 74 20 7b 55 4e 49 51 55 45 7d 20 7b 75 6e 69  st {UNIQUE} {uni
8d60: 71 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c  que constraint}<
8d70: 2f 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55  /tcl>.<p>^A <b>U
8d80: 4e 49 51 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72  NIQUE</b> constr
8d90: 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20  aint is similar 
8da0: 74 6f 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  to a PRIMARY KEY
8db0: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63   constraint, exc
8dc0: 65 70 74 0a 20 20 74 68 61 74 20 61 20 73 69 6e  ept.  that a sin
8dd0: 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61  gle table may ha
8de0: 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  ve any number of
8df0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e00: 6e 74 73 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20  nts. ^For each. 
8e10: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
8e20: 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c  nt on the table,
8e30: 20 65 61 63 68 20 72 6f 77 20 6d 75 73 74 20 66   each row must f
8e40: 65 61 74 75 72 65 20 61 20 75 6e 69 71 75 65 20  eature a unique 
8e50: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66  combination.  of
8e60: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 63   values in the c
8e70: 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65  olumns identifie
8e80: 64 20 62 79 20 74 68 65 20 55 4e 49 51 55 45 20  d by the UNIQUE 
8e90: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 5e 41 73 20  constraint. ^As 
8ea0: 77 69 74 68 0a 20 20 50 52 49 4d 41 52 59 20 4b  with.  PRIMARY K
8eb0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
8ec0: 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  for the purposes
8ed0: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
8ee0: 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75  raints NULL valu
8ef0: 65 73 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65  es.  are conside
8f00: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
8f10: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  m all other valu
8f20: 65 73 20 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es (including ot
8f30: 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 20 20 5e 49  her NULLs)..  ^I
8f40: 66 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72  f an [INSERT] or
8f50: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
8f60: 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
8f70: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
8f80: 20 63 6f 6e 74 65 6e 74 20 73 6f 0a 20 20 74 68   content so.  th
8f90: 61 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72  at two or more r
8fa0: 6f 77 73 20 66 65 61 74 75 72 65 20 69 64 65 6e  ows feature iden
8fb0: 74 69 63 61 6c 20 76 61 6c 75 65 73 20 69 6e 20  tical values in 
8fc0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
8fd0: 20 74 68 61 74 0a 20 20 61 72 65 20 73 75 62 6a   that.  are subj
8fe0: 65 63 74 20 74 6f 20 61 20 55 4e 49 51 55 45 20  ect to a UNIQUE 
8ff0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 20 69  constraint, it i
9000: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
9010: 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 5b  iolation...<p>^[
9020: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9030: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 73 20 61 73 69  KEY] columns asi
9040: 64 65 2c 20 62 6f 74 68 20 55 4e 49 51 55 45 20  de, both UNIQUE 
9050: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  and PRIMARY KEY.
9060: 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72    constraints ar
9070: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  e implemented by
9080: 20 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64   creating an ind
9090: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
90a0: 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d 65 0a  se (in the same.
90b0: 20 20 77 61 79 20 61 73 20 61 20 5b 43 52 45 41    way as a [CREA
90c0: 54 45 20 49 4e 44 45 58 7c 22 43 52 45 41 54 45  TE INDEX|"CREATE
90d0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22 5d 20   UNIQUE INDEX"] 
90e0: 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 29  statement would)
90f0: 2e 20 5e 53 75 63 68 20 61 6e 20 0a 20 20 69 6e  . ^Such an .  in
9100: 64 65 78 20 69 73 20 75 73 65 64 20 6c 69 6b 65  dex is used like
9110: 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64 65 78   any other index
9120: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9130: 20 74 6f 20 5b 6f 70 74 69 6d 69 7a 65 72 7c 6f   to [optimizer|o
9140: 70 74 69 6d 69 7a 65 0a 20 20 71 75 65 72 69 65  ptimize.  querie
9150: 73 5d 2e 20 20 41 73 20 61 20 72 65 73 75 6c 74  s].  As a result
9160: 2c 20 74 68 65 72 65 20 6f 66 74 65 6e 20 6e 6f  , there often no
9170: 20 61 64 76 61 6e 74 61 67 65 20 28 62 75 74 20   advantage (but 
9180: 73 69 67 6e 69 66 69 63 61 6e 74 20 6f 76 65 72  significant over
9190: 68 65 61 64 29 0a 20 20 69 6e 20 63 72 65 61 74  head).  in creat
91a0: 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ing an index on 
91b0: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
91c0: 20 74 68 61 74 20 61 72 65 20 61 6c 72 65 61 64   that are alread
91d0: 79 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 20  y collectively. 
91e0: 20 73 75 62 6a 65 63 74 20 74 6f 20 61 20 55 4e   subject to a UN
91f0: 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20  IQUE or PRIMARY 
9200: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  KEY constraint..
9210: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9220: 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45  t {ckconst} {CHE
9230: 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74  CK} {CHECK const
9240: 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f  raint} {CHECK co
9250: 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e  nstraints}</tcl>
9260: 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b  .<p>^(A <b>CHECK
9270: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
9280: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 20  may be attached 
9290: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
92a0: 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63  nition or.  spec
92b0: 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65  ified as a table
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20   constraint. In 
92d0: 70 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b 65  practice it make
92e0: 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e  s no difference.
92f0: 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d 65  )^ ^(Each.  time
9300: 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e   a new row is in
9310: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
9320: 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73  table or an exis
9330: 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61  ting row is upda
9340: 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72 65  ted,.  the expre
9350: 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ssion associated
9360: 20 77 69 74 68 20 65 61 63 68 20 43 48 45 43 4b   with each CHECK
9370: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65   constraint is e
9380: 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20 63  valuated and.  c
9390: 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43  ast to a NUMERIC
93a0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61   value in the sa
93b0: 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41 53  me way as a [CAS
93c0: 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49  T expression]. I
93d0: 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74 20  f the .  result 
93e0: 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65 72  is zero (integer
93f0: 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
9400: 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68 65   value 0.0), the
9410: 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  n a constraint. 
9420: 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f   violation has o
9430: 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20 74  ccurred.)^ ^If t
9440: 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73  he CHECK express
9450: 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
9460: 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20   NULL, or.  any 
9470: 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76  other non-zero v
9480: 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20  alue, it is not 
9490: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
94a0: 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65  lation..  ^The e
94b0: 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20 43  xpression of a C
94c0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
94d0: 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  may not contain 
94e0: 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 70 3e  a subquery...<p>
94f0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
9500: 73 20 68 61 76 65 20 62 65 65 6e 20 73 75 70 70  s have been supp
9510: 6f 72 74 65 64 20 73 69 6e 63 65 20 5b 76 65 72  orted since [ver
9520: 73 69 6f 6e 20 33 2e 33 2e 30 5d 2e 20 50 72 69  sion 3.3.0]. Pri
9530: 6f 72 20 74 6f 0a 20 20 76 65 72 73 69 6f 6e 20  or to.  version 
9540: 33 2e 33 2e 30 2c 20 43 48 45 43 4b 20 63 6f 6e  3.3.0, CHECK con
9550: 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 70 61  straints were pa
9560: 72 73 65 64 20 62 75 74 20 6e 6f 74 20 65 6e 66  rsed but not enf
9570: 6f 72 63 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  orced...<tcl>hd_
9580: 66 72 61 67 6d 65 6e 74 20 7b 6e 6f 74 6e 75 6c  fragment {notnul
9590: 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54 20 4e 55 4c  lconst} {NOT NUL
95a0: 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  L} {NOT NULL con
95b0: 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c  straint}</tcl>.<
95c0: 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20 4e 55 4c 4c  p>^A <b>NOT NULL
95d0: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
95e0: 6d 61 79 20 6f 6e 6c 79 20 62 65 20 61 74 74 61  may only be atta
95f0: 63 68 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  ched to a column
9600: 20 64 65 66 69 6e 69 74 69 6f 6e 2c 0a 20 20 6e   definition,.  n
9610: 6f 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ot specified as 
9620: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
9630: 6e 74 2e 20 20 4e 6f 74 20 73 75 72 70 72 69 73  nt.  Not surpris
9640: 69 6e 67 6c 79 2c 20 5e 28 61 20 4e 4f 54 20 4e  ingly, ^(a NOT N
9650: 55 4c 4c 0a 20 20 63 6f 6e 73 74 72 61 69 6e 74  ULL.  constraint
9660: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
9670: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  he associated co
9680: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  lumn may not con
9690: 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75  tain a NULL valu
96a0: 65 2e 0a 20 20 41 74 74 65 6d 70 74 69 6e 67 20  e..  Attempting 
96b0: 74 6f 20 73 65 74 20 74 68 65 20 63 6f 6c 75 6d  to set the colum
96c0: 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  n value to NULL 
96d0: 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61  when inserting a
96e0: 20 6e 65 77 20 72 6f 77 20 6f 72 0a 20 20 75 70   new row or.  up
96f0: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
9700: 6e 67 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20  ng one causes a 
9710: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
9720: 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e 45 78 61 63  tion.)^..<p>Exac
9730: 74 6c 79 20 68 6f 77 20 61 20 63 6f 6e 73 74 72  tly how a constr
9740: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 69  aint violation i
9750: 73 20 64 65 61 6c 74 20 77 69 74 68 20 69 73 20  s dealt with is 
9760: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
9770: 65 0a 20 20 5b 63 6f 6e 66 6c 69 63 74 20 63 6c  e.  [conflict cl
9780: 61 75 73 65 7c 63 6f 6e 73 74 72 61 69 6e 74 20  ause|constraint 
9790: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
97a0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 2e 20  ion algorithm]. 
97b0: 45 61 63 68 20 0a 20 20 50 52 49 4d 41 52 59 20  Each .  PRIMARY 
97c0: 4b 45 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54  KEY, UNIQUE, NOT
97d0: 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20   NULL and CHECK 
97e0: 63 6f 6e 73 74 72 61 69 6e 74 20 68 61 73 20 61  constraint has a
97f0: 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
9800: 74 0a 20 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  t.  resolution a
9810: 6c 67 6f 72 69 74 68 6d 2e 20 5e 50 52 49 4d 41  lgorithm. ^PRIMA
9820: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61  RY KEY, UNIQUE a
9830: 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  nd NOT NULL cons
9840: 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 0a 20  traints may be. 
9850: 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69   explicitly assi
9860: 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63  gned a default c
9870: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
9880: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20  on algorithm by 
9890: 69 6e 63 6c 75 64 69 6e 67 0a 20 20 61 20 5b 63  including.  a [c
98a0: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20  onflict-clause] 
98b0: 69 6e 20 74 68 65 69 72 20 64 65 66 69 6e 69 74  in their definit
98c0: 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69 66 20 61 20  ions. ^Or, if a 
98d0: 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e  constraint defin
98e0: 69 74 69 6f 6e 0a 20 20 64 6f 65 73 20 6e 6f 74  ition.  does not
98f0: 20 69 6e 63 6c 75 64 65 20 61 20 5b 63 6f 6e 66   include a [conf
9900: 6c 69 63 74 2d 63 6c 61 75 73 65 5d 20 6f 72 20  lict-clause] or 
9910: 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f  it is a CHECK co
9920: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65  nstraint, the de
9930: 66 61 75 6c 74 0a 20 20 63 6f 6e 66 6c 69 63 74  fault.  conflict
9940: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
9950: 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
9960: 5e 44 69 66 66 65 72 65 6e 74 20 63 6f 6e 73 74  ^Different const
9970: 72 61 69 6e 74 73 20 77 69 74 68 69 6e 20 74 68  raints within th
9980: 65 0a 20 20 73 61 6d 65 20 74 61 62 6c 65 20 6d  e.  same table m
9990: 61 79 20 68 61 76 65 20 64 69 66 66 65 72 65 6e  ay have differen
99a0: 74 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  t default confli
99b0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
99c0: 67 6f 72 69 74 68 6d 73 2e 20 53 65 65 0a 20 20  gorithms. See.  
99d0: 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
99e0: 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
99f0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
9a00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 74  information...<t
9a10: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
9a20: 6f 77 69 64 20 7b 49 4e 54 45 47 45 52 20 50 52  owid {INTEGER PR
9a30: 49 4d 41 52 59 20 4b 45 59 7d 20 52 4f 57 49 44  IMARY KEY} ROWID
9a40: 20 72 6f 77 69 64 3c 2f 74 63 6c 3e 0a 3c 68 33   rowid</tcl>.<h3
9a50: 3e 52 4f 57 49 44 73 20 61 6e 64 20 74 68 65 20  >ROWIDs and the 
9a60: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9a70: 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 76  KEY</h3>..<p>^Ev
9a80: 65 72 79 20 72 6f 77 20 6f 66 20 65 76 65 72 79  ery row of every
9a90: 20 53 51 4c 69 74 65 20 74 61 62 6c 65 20 68 61   SQLite table ha
9aa0: 73 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  s a 64-bit signe
9ab0: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 20 0a 74  d integer key .t
9ac0: 68 61 74 20 75 6e 69 71 75 65 6c 79 20 69 64 65  hat uniquely ide
9ad0: 6e 74 69 66 69 65 73 20 74 68 65 20 72 6f 77 20  ntifies the row 
9ae0: 77 69 74 68 69 6e 20 69 74 73 20 74 61 62 6c 65  within its table
9af0: 2e 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 69  . This integer i
9b00: 73 20 75 73 75 61 6c 6c 79 0a 63 61 6c 6c 65 64  s usually.called
9b10: 20 74 68 65 20 22 72 6f 77 69 64 22 2e 20 5e 54   the "rowid". ^T
9b20: 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 63  he rowid value c
9b30: 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 75  an be accessed u
9b40: 73 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20  sing one of the 
9b50: 73 70 65 63 69 61 6c 0a 63 61 73 65 2d 69 6e 64  special.case-ind
9b60: 65 70 65 6e 64 65 6e 74 20 6e 61 6d 65 73 20 22  ependent names "
9b70: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 2c 20 6f  rowid", "oid", o
9b80: 72 20 22 5f 72 6f 77 69 64 5f 22 20 69 6e 20 70  r "_rowid_" in p
9b90: 6c 61 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  lace of a column
9ba0: 20 6e 61 6d 65 2e 0a 5e 49 66 20 61 20 74 61 62   name..^If a tab
9bb0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73  le contains a us
9bc0: 65 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  er defined colum
9bd0: 6e 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22 2c  n named "rowid",
9be0: 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
9bf0: 64 5f 22 2c 0a 74 68 65 6e 20 74 68 61 74 20 6e  d_",.then that n
9c00: 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65 72  ame always refer
9c10: 73 20 74 68 65 20 65 78 70 6c 69 63 69 74 6c 79  s the explicitly
9c20: 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e   declared column
9c30: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 75   and cannot be u
9c40: 73 65 64 0a 74 6f 20 72 65 74 72 69 65 76 65 20  sed.to retrieve 
9c50: 74 68 65 20 69 6e 74 65 67 65 72 20 72 6f 77 69  the integer rowi
9c60: 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 54 68 65  d value...<p>The
9c70: 20 64 61 74 61 20 66 6f 72 20 65 61 63 68 20 74   data for each t
9c80: 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 69  able in SQLite i
9c90: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d  s stored as a B-
9ca0: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63  Tree structure c
9cb0: 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e 20 65 6e 74  ontaining.an ent
9cc0: 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c  ry for each tabl
9cd0: 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68 65  e row, using the
9ce0: 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73 20   rowid value as 
9cf0: 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d 65  the key. This me
9d00: 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65 76  ans that.retriev
9d10: 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20 72  ing or sorting r
9d20: 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64 20  ecords by rowid 
9d30: 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68 69  is fast. Searchi
9d40: 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64 20  ng for a record 
9d50: 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63 20  with a.specific 
9d60: 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61 6c  rowid, or for al
9d70: 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20 72  l records with r
9d80: 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20 73  owids within a s
9d90: 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20 69  pecified range i
9da0: 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20 61  s.around twice a
9db0: 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d 69  s fast as a simi
9dc0: 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65 20  lar search made 
9dd0: 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61 6e  by specifying an
9de0: 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59 0a  y other PRIMARY.
9df0: 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20 76  KEY or indexed v
9e00: 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74 68  alue...<p> ^With
9e10: 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 2c 20   one exception, 
9e20: 69 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 61  if a table has a
9e30: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61   primary key tha
9e40: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
9e50: 73 69 6e 67 6c 65 0a 63 6f 6c 75 6d 6e 2c 20 61  single.column, a
9e60: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
9e70: 74 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c  type of that col
9e80: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
9e90: 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20   in any mixture 
9ea0: 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of.upper and low
9eb0: 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74 68  er case, then th
9ec0: 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73  e column becomes
9ed0: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
9ee0: 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20 61 0a  e rowid. Such a.
9ef0: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61 6c 6c  column is usuall
9f00: 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73  y referred to as
9f10: 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70 72 69   an "integer pri
9f20: 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50 52 49  mary key". A PRI
9f30: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 0a  MARY KEY column.
9f40: 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61 6e 20  only becomes an 
9f50: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
9f60: 6b 65 79 20 69 66 20 74 68 65 20 64 65 63 6c 61  key if the decla
9f70: 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20 69 73  red type name is
9f80: 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45 47 45   exactly."INTEGE
9f90: 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e 74 65  R".  ^Other inte
9fa0: 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c  ger type names l
9fb0: 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22 42 49  ike "INT" or "BI
9fc0: 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20  GINT" or "SHORT 
9fd0: 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55 4e 53  INTEGER".or "UNS
9fe0: 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63  IGNED INTEGER" c
9ff0: 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72  auses the primar
a000: 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f 20  y key column to 
a010: 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72 64  behave as an ord
a020: 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f 6c 75  inary.table colu
a030: 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72 20  mn with integer 
a040: 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64 20 61  [affinity] and a
a050: 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20 6e   unique index, n
a060: 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ot as an alias f
a070: 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a 0a 3c  or.the rowid...<
a080: 70 3e 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e  p> The exception
a090: 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f 76 65   mentioned above
a0a0: 20 69 73 20 74 68 61 74 20 5e 69 66 20 74 68 65   is that ^if the
a0b0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20   declaration of 
a0c0: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 64 65  a column with.de
a0d0: 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54  clared type "INT
a0e0: 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61  EGER" includes a
a0f0: 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44  n "PRIMARY KEY D
a100: 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20  ESC" clause, it 
a110: 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d 65 20  does not.become 
a120: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
a130: 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e 6f   rowid and is no
a140: 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73 20  t classified as 
a150: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
a160: 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71 75 69  ry key..This qui
a170: 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64 65 73  rk is not by des
a180: 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65 20 74  ign. It is due t
a190: 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72 6c 79  o a bug in early
a1a0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
a1b0: 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e 67 20  ite..But fixing 
a1c0: 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20 72 65  the bug could re
a1d0: 73 75 6c 74 20 69 6e 20 76 65 72 79 20 73 65 72  sult in very ser
a1e0: 69 6f 75 73 20 62 61 63 6b 77 61 72 64 73 20 69  ious backwards i
a1f0: 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73  ncompatibilities
a200: 2e 0a 54 68 65 20 53 51 4c 69 74 65 20 64 65 76  ..The SQLite dev
a210: 65 6c 6f 70 65 72 73 20 66 65 65 6c 20 74 68 61  elopers feel tha
a220: 74 20 67 6f 6f 66 79 20 62 65 68 61 76 69 6f 72  t goofy behavior
a230: 20 69 6e 20 61 20 63 6f 72 6e 65 72 20 63 61 73   in a corner cas
a240: 65 20 69 73 20 66 61 72 20 62 65 74 74 65 72 0a  e is far better.
a250: 74 68 61 6e 20 61 20 63 6f 6d 70 61 74 69 62 69  than a compatibi
a260: 6c 69 74 79 20 62 72 65 61 6b 2c 20 73 6f 20 74  lity break, so t
a270: 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61  he original beha
a280: 76 69 6f 72 20 69 73 20 72 65 74 61 69 6e 65 64  vior is retained
a290: 2e 20 54 68 69 73 20 6d 65 61 6e 73 0a 74 68 61  . This means.tha
a2a0: 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  t ^(the followin
a2b0: 67 20 74 68 72 65 65 20 74 61 62 6c 65 20 64 65  g three table de
a2c0: 63 6c 61 72 61 74 69 6f 6e 73 20 61 6c 6c 20 63  clarations all c
a2d0: 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ause the column 
a2e0: 22 78 22 20 74 6f 20 62 65 20 61 6e 0a 61 6c 69  "x" to be an.ali
a2f0: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
a300: 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69   (an integer pri
a310: 6d 61 72 79 20 6b 65 79 29 3a 0a 0a 3c 75 6c 3e  mary key):..<ul>
a320: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a330: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a340: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
a350: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
a360: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
a370: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c  BLE t(x INTEGER,
a380: 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b   y, z, PRIMARY K
a390: 45 59 28 78 20 41 53 43 29 29 3b 3c 2f 74 74 3e  EY(x ASC));</tt>
a3a0: 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20  .<li><tt>CREATE 
a3b0: 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
a3c0: 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59  R, y, z, PRIMARY
a3d0: 20 4b 45 59 28 78 20 44 45 53 43 29 29 3b 3c 2f   KEY(x DESC));</
a3e0: 74 74 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  tt>.</ul>)^..<p>
a3f0: 42 75 74 20 5e 28 74 68 65 20 66 6f 6c 6c 6f 77  But ^(the follow
a400: 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  ing declaration 
a410: 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c 74 20  does not result 
a420: 69 6e 20 22 78 22 20 62 65 69 6e 67 20 61 6e 20  in "x" being an 
a430: 61 6c 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f  alias for.the ro
a440: 77 69 64 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74  wid:.<ul>.<li><t
a450: 74 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  t>CREATE TABLE t
a460: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
a470: 52 59 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20  RY KEY DESC, y, 
a480: 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  z);</tt>.</ul>)^
a490: 0a 0a 3c 70 3e 5e 52 6f 77 69 64 20 76 61 6c 75  ..<p>^Rowid valu
a4a0: 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
a4b0: 65 64 20 75 73 69 6e 67 20 61 6e 20 55 50 44 41  ed using an UPDA
a4c0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  TE statement in 
a4d0: 74 68 65 20 73 61 6d 65 0a 77 61 79 20 61 73 20  the same.way as 
a4e0: 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e  any other column
a4f0: 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68   value can, eith
a500: 65 72 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66 20  er using one of 
a510: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61 6c 69  the built-in ali
a520: 61 73 65 73 0a 28 22 72 6f 77 69 64 22 2c 20 22  ases.("rowid", "
a530: 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69 64 5f  oid" or "_rowid_
a540: 22 29 20 6f 72 20 62 79 20 75 73 69 6e 67 20 61  ") or by using a
a550: 6e 20 61 6c 69 61 73 20 63 72 65 61 74 65 64 20  n alias created 
a560: 62 79 20 61 6e 20 69 6e 74 65 67 65 72 0a 70 72  by an integer.pr
a570: 69 6d 61 72 79 20 6b 65 79 2e 20 5e 53 69 6d 69  imary key. ^Simi
a580: 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53 45 52 54  larly, an INSERT
a590: 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 70   statement may p
a5a0: 72 6f 76 69 64 65 20 61 20 76 61 6c 75 65 20 74  rovide a value t
a5b0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
a5c0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
a5d0: 69 6e 73 65 72 74 65 64 2e 20 5e 28 55 6e 6c 69  inserted. ^(Unli
a5e0: 6b 65 20 6e 6f 72 6d 61 6c 20 53 51 4c 69 74 65  ke normal SQLite
a5f0: 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 20 69 6e 74   columns, an int
a600: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
a610: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
a620: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e   must contain in
a630: 74 65 67 65 72 20 76 61 6c 75 65 73 2e 20 49 6e  teger values. In
a640: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
a650: 79 20 6f 72 20 72 6f 77 69 64 0a 63 6f 6c 75 6d  y or rowid.colum
a660: 6e 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20  ns are not able 
a670: 74 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67  to hold floating
a680: 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 2c 20 73   point values, s
a690: 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f  trings, BLOBs, o
a6a0: 72 20 4e 55 4c 4c 73 2e 29 5e 0a 0a 3c 70 3e 5e  r NULLs.)^..<p>^
a6b0: 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
a6c0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a6d0: 74 6f 20 73 65 74 20 61 6e 20 69 6e 74 65 67 65  to set an intege
a6e0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
a6f0: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 0a 74 6f   rowid column.to
a700: 20 61 20 4e 55 4c 4c 20 6f 72 20 62 6c 6f 62 20   a NULL or blob 
a710: 76 61 6c 75 65 2c 20 6f 72 20 74 6f 20 61 20 73  value, or to a s
a720: 74 72 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61  tring or real va
a730: 6c 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  lue that cannot 
a740: 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f  be losslessly.co
a750: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
a760: 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79  teger, a "dataty
a770: 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
a780: 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
a790: 65 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 61  e statement.is a
a7a0: 62 6f 72 74 65 64 2e 20 5e 49 66 20 61 6e 20 49  borted. ^If an I
a7b0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
a7c0: 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65  attempts to inse
a7d0: 72 74 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 2c  rt a blob value,
a7e0: 20 6f 72 20 61 20 73 74 72 69 6e 67 0a 6f 72 20   or a string.or 
a7f0: 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20  real value that 
a800: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
a810: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
a820: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74  o an integer int
a830: 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 70 72 69  o an.integer pri
a840: 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
a850: 64 20 63 6f 6c 75 6d 6e 2c 20 61 20 22 64 61 74  d column, a "dat
a860: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 20  atype mismatch" 
a870: 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e 64  error occurs and
a880: 20 74 68 65 0a 73 74 61 74 65 6d 65 6e 74 20 69   the.statement i
a890: 73 20 61 62 6f 72 74 65 64 2e 0a 0a 3c 70 3e 5e  s aborted...<p>^
a8a0: 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  If an INSERT sta
a8b0: 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
a8c0: 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c  to insert a NULL
a8d0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f   value into a ro
a8e0: 77 69 64 20 6f 72 0a 69 6e 74 65 67 65 72 20 70  wid or.integer p
a8f0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
a900: 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 20 63 68  n, the system ch
a910: 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65 72  ooses an integer
a920: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
a930: 20 74 68 65 0a 72 6f 77 69 64 20 61 75 74 6f 6d   the.rowid autom
a940: 61 74 69 63 61 6c 6c 79 2e 20 41 20 64 65 74 61  atically. A deta
a950: 69 6c 65 64 20 64 65 73 63 72 69 70 74 69 6f 6e  iled description
a960: 20 6f 66 20 68 6f 77 20 74 68 69 73 20 69 73 20   of how this is 
a970: 64 6f 6e 65 20 69 73 20 70 72 6f 76 69 64 65 64  done is provided
a980: 0a 3c 61 20 68 72 65 66 3d 22 61 75 74 6f 69 6e  .<a href="autoin
a990: 63 2e 68 74 6d 6c 22 3e 73 65 70 61 72 61 74 65  c.html">separate
a9a0: 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ly</a>.</p>..<p>
a9b0: 5e 28 54 68 65 20 5b 70 61 72 65 6e 74 20 6b 65  ^(The [parent ke
a9c0: 79 5d 20 6f 66 20 61 20 5b 66 6f 72 65 69 67 6e  y] of a [foreign
a9d0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d   key constraint]
a9e0: 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
a9f0: 74 6f 0a 75 73 65 20 74 68 65 20 72 6f 77 69 64  to.use the rowid
aa00: 2e 20 20 54 68 65 20 70 61 72 65 6e 74 20 6b 65  .  The parent ke
aa10: 79 20 6d 75 73 74 20 75 73 65 64 20 6e 61 6d 65  y must used name
aa20: 64 20 63 6f 6c 75 6d 6e 73 20 6f 6e 6c 79 2e 29  d columns only.)
aa30: 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ^</p>..<tcl>.###
aa40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
aa80: 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
aa90: 69 6f 6e 20 7b 43 52 45 41 54 45 20 54 52 49 47  ion {CREATE TRIG
aaa0: 47 45 52 7d 20 63 72 65 61 74 65 74 72 69 67 67  GER} createtrigg
aab0: 65 72 20 7b 7b 43 52 45 41 54 45 20 54 52 49 47  er {{CREATE TRIG
aac0: 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61  GER}}..BubbleDia
aad0: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67  gram create-trig
aae0: 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ger-stmt 1.</tcl
aaf0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
ab00: 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d  E TRIGGER statem
ab10: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61  ent is used to a
ab20: 64 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74  dd triggers to t
ab30: 68 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68  he .database sch
ab40: 65 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61  ema. ^Triggers a
ab50: 72 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72  re database oper
ab60: 61 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65  ations .that are
ab70: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
ab80: 65 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20  erformed when a 
ab90: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61  specified databa
aba0: 73 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e  se event.occurs.
abb0: 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72    </p>..<p>^A tr
abc0: 69 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65  igger may be spe
abd0: 63 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77  cified to fire w
abe0: 68 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54  henever a [DELET
abf0: 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72  E], [INSERT],.or
ac00: 20 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70   [UPDATE] of a.p
ac10: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
ac20: 73 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c  se table occurs,
ac30: 20 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20   or whenever an 
ac40: 5b 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20  [UPDATE] occurs 
ac50: 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  on.on one or mor
ac60: 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  e specified colu
ac70: 6d 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c  mns of a table.<
ac80: 2f 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73  /p>..<p>^At this
ac90: 20 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70   time SQLite sup
aca0: 70 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45  ports only FOR E
acb0: 41 43 48 20 52 4f 57 20 74 72 69 67 67 65 72 73  ACH ROW triggers
acc0: 2c 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53  , not FOR EACH.S
acd0: 54 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72  TATEMENT trigger
ace0: 73 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63  s. ^Hence explic
acf0: 69 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20  itly specifying 
ad00: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73 20  FOR EACH ROW is 
ad10: 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45  optional..^FOR E
ad20: 41 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20  ACH ROW implies 
ad30: 74 68 61 74 20 74 68 65 20 53 51 4c 20 73 74 61  that the SQL sta
ad40: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
ad50: 64 20 69 6e 20 74 68 65 20 74 72 69 67 67 65 72  d in the trigger
ad60: 0a 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64  .may be executed
ad70: 20 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   (depending on t
ad80: 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20  he WHEN clause) 
ad90: 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
ada0: 65 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65  e row being.inse
adb0: 72 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72  rted, updated or
adc0: 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20   deleted by the 
add0: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e  statement causin
ade0: 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f  g the trigger to
adf0: 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   fire.</p>..<p>^
ae00: 28 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63  (Both the WHEN c
ae10: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 74 72  lause and the tr
ae20: 69 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61  igger actions ma
ae30: 79 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74  y access element
ae40: 73 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65  s of .the row be
ae50: 69 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65  ing inserted, de
ae60: 6c 65 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  leted or updated
ae70: 20 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65   using reference
ae80: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22  s of the form ."
ae90: 4e 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61  NEW.<i>column-na
aea0: 6d 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44  me</i>" and "OLD
aeb0: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
aec0: 2f 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63  /i>", where.<i>c
aed0: 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69  olumn-name</i> i
aee0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
aef0: 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20  column from the 
af00: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 74  table that the t
af10: 72 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69  rigger.is associ
af20: 61 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f  ated with.)^ ^(O
af30: 4c 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72  LD and NEW refer
af40: 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62  ences may only b
af50: 65 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65  e used in trigge
af60: 72 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72  rs on.events for
af70: 20 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20   which they are 
af80: 72 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c  relevant, as fol
af90: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c  lows:</p>..<tabl
afa0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70  e border=0 cellp
afb0: 61 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a  adding=10>.<tr>.
afc0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
afd0: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77   align="right" w
afe0: 69 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45  idth=120><i>INSE
aff0: 52 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20  RT</i></td>.<td 
b000: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57  valign="top">NEW
b010: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
b020: 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  valid</td>.</tr>
b030: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
b040: 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
b050: 67 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c  ght" width=120><
b060: 69 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64  i>UPDATE</i></td
b070: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  >.<td valign="to
b080: 70 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72  p">NEW and OLD r
b090: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61  eferences are va
b0a0: 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  lid</td>.</tr>.<
b0b0: 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  tr>.<td valign="
b0c0: 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
b0d0: 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e  t" width=120><i>
b0e0: 44 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a  DELETE</i></td>.
b0f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
b100: 3e 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20  >OLD references 
b110: 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c  are valid</td>.<
b120: 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  /tr>.</table>.</
b130: 70 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57  p>)^..<p>^If a W
b140: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
b150: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
b160: 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
b170: 66 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78  fied.are only ex
b180: 65 63 75 74 65 64 20 66 6f 72 20 72 6f 77 73 20  ecuted for rows 
b190: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48  for which the WH
b1a0: 45 4e 0a 63 6c 61 75 73 65 20 69 73 20 74 72 75  EN.clause is tru
b1b0: 65 2e 20 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63  e. ^If no WHEN c
b1c0: 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65  lause is supplie
b1d0: 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  d, the SQL state
b1e0: 6d 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74  ments.are execut
b1f0: 65 64 20 66 6f 72 20 61 6c 6c 20 72 6f 77 73 2e  ed for all rows.
b200: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45  </p>..<p>^The BE
b210: 46 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65  FORE or AFTER ke
b220: 79 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73  yword determines
b230: 20 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65   when the trigge
b240: 72 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62  r actions.will b
b250: 65 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74  e executed relat
b260: 69 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72  ive to the inser
b270: 74 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69  tion, modificati
b280: 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66  on or removal of
b290: 20 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20   the.associated 
b2a0: 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e  row.</p>..<p>^An
b2b0: 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63   [ON CONFLICT] c
b2c0: 6c 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65  lause may be spe
b2d0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
b2e0: 66 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72  f an [UPDATE] or
b2f0: 20 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e   [INSERT].action
b300: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
b310: 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e   of the trigger.
b320: 0a 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20  .^However if an 
b330: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
b340: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
b350: 64 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68  d as part of .th
b360: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  e statement caus
b370: 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
b380: 74 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f  to fire, then co
b390: 6e 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a  nflict handling.
b3a0: 70 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75  policy of the ou
b3b0: 74 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ter statement is
b3c0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f   used instead.</
b3d0: 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  p>..<p>^Triggers
b3e0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
b3f0: 6c 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52  ly [DROP TRIGGER
b400: 20 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e   | dropped].when
b410: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
b420: 74 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69  they are .associ
b430: 61 74 65 64 20 77 69 74 68 20 28 74 68 65 20 3c  ated with (the <
b440: 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  i>table-name</i>
b450: 20 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f   table) is .[DRO
b460: 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65  P TABLE | droppe
b470: 64 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66  d].  ^However if
b480: 20 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74   the trigger act
b490: 69 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f  ions reference.o
b4a0: 74 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65  ther tables, the
b4b0: 20 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20   trigger is not 
b4c0: 64 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66  dropped or modif
b4d0: 69 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68  ied if those oth
b4e0: 65 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44  er.tables are [D
b4f0: 52 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70  ROP TABLE | drop
b500: 70 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54  ped] or [ALTER T
b510: 41 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d  ABLE | modified]
b520: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67  .</p>..<p>^Trigg
b530: 65 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ers are removed 
b540: 75 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20  using the [DROP 
b550: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
b560: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e  nt.</p>..<h3>Syn
b570: 74 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73  tax Restrictions
b580: 20 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45   On UPDATE, DELE
b590: 54 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53  TE, and INSERT S
b5a0: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
b5b0: 0a 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68  .    Triggers</h
b5c0: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44  3>..<p>^The [UPD
b5d0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b5e0: 61 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61  and [INSERT].sta
b5f0: 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
b600: 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73  riggers do not s
b610: 75 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20  upport.the full 
b620: 73 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41  syntax for [UPDA
b630: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61  TE], [DELETE], a
b640: 6e 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74  nd [INSERT] stat
b650: 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c  ements.  The fol
b660: 6c 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69  lowing.restricti
b670: 6f 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a  ons apply:</p>..
b680: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  <ul>.<li><p>.  ^
b690: 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  (The name of the
b6a0: 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64   table to be mod
b6b0: 69 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44  ified in an [UPD
b6c0: 41 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20  ATE], [DELETE], 
b6d0: 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74  or [INSERT].  st
b6e0: 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20  atement must be 
b6f0: 61 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74  an unqualified t
b700: 61 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f  able name.  In o
b710: 74 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20  ther words, one 
b720: 6d 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20  must.  use just 
b730: 22 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69  "<i>tablename</i
b740: 3e 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62  >" not "<i>datab
b750: 61 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c  ase</i><b>.</b><
b760: 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22  i>tablename</i>"
b770: 0a 20 20 77 68 65 6e 20 73 70 65 63 69 66 79 69  .  when specifyi
b780: 6e 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20  ng the table.)^ 
b790: 20 5e 54 68 65 20 74 61 62 6c 65 20 74 6f 20 62   ^The table to b
b7a0: 65 20 6d 6f 64 69 66 69 65 64 20 6d 75 73 74 20  e modified must 
b7b0: 65 78 69 73 74 20 69 6e 20 74 68 65 0a 20 20 73  exist in the.  s
b7c0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
b7d0: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
b7e0: 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
b7f0: 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
b800: 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ed..  </p></li>.
b810: 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20  .<li><p>.  ^The 
b820: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 69 3e  "INSERT INTO <i>
b830: 74 61 62 6c 65 3c 2f 69 3e 20 44 45 46 41 55 4c  table</i> DEFAUL
b840: 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
b850: 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73  f the [INSERT] s
b860: 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20 6e 6f  tatement.  is no
b870: 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20 20 3c  t supported..  <
b880: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
b890: 3e 0a 20 20 5e 54 68 65 20 49 4e 44 45 58 45 44  >.  ^The INDEXED
b8a0: 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45   BY and NOT INDE
b8b0: 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20  XED clauses are 
b8c0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 66 6f  not supported fo
b8d0: 72 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 0a 20  r [UPDATE] and. 
b8e0: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
b8f0: 65 6e 74 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  ents..  </p></li
b900: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54  >..<li><p>.  ^(T
b910: 68 65 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  he ORDER BY and 
b920: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 20 6f 6e  LIMIT clauses on
b930: 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44   [UPDATE] and [D
b940: 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  ELETE] statement
b950: 73 20 61 72 65 20 6e 6f 74 0a 20 20 73 75 70 70  s are not.  supp
b960: 6f 72 74 65 64 2e 20 20 4f 52 44 45 52 20 42 59  orted.  ORDER BY
b970: 20 61 6e 64 20 4c 49 4d 49 54 20 61 72 65 20 6e   and LIMIT are n
b980: 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 73 75 70 70  ot normally supp
b990: 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44 41 54  orted for [UPDAT
b9a0: 45 5d 20 6f 72 0a 20 20 5b 44 45 4c 45 54 45 5d  E] or.  [DELETE]
b9b0: 20 69 6e 20 61 6e 79 20 63 6f 6e 74 65 78 74 20   in any context 
b9c0: 62 75 74 20 63 61 6e 20 62 65 20 65 6e 61 62 6c  but can be enabl
b9d0: 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  ed for top-level
b9e0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73   statements.  us
b9f0: 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ing the [SQLITE_
ba00: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
ba10: 4c 45 54 45 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70  LETE_LIMIT] comp
ba20: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e  ile-time option.
ba30: 20 20 48 6f 77 65 76 65 72 2c 0a 20 20 74 68 61    However,.  tha
ba40: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  t compile-time o
ba50: 70 74 69 6f 6e 20 6f 6e 6c 79 20 61 70 70 6c 69  ption only appli
ba60: 65 73 20 74 6f 20 74 6f 70 2d 6c 65 76 65 6c 20  es to top-level 
ba70: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
ba80: 4c 45 54 45 5d 0a 20 20 73 74 61 74 65 6d 65 6e  LETE].  statemen
ba90: 74 73 2c 20 6e 6f 74 20 5b 55 50 44 41 54 45 5d  ts, not [UPDATE]
baa0: 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74   and [DELETE] st
bab0: 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
bac0: 74 72 69 67 67 65 72 73 2e 29 5e 0a 20 20 3c 2f  triggers.)^.  </
bad0: 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  p></li>.</ul>..<
bae0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
baf0: 69 6e 73 74 65 61 64 5f 6f 66 5f 74 72 69 67 67  instead_of_trigg
bb00: 65 72 20 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20  er {INSTEAD OF} 
bb10: 7b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  {INSTEAD OF trig
bb20: 67 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49  ger}</tcl>.<h3>I
bb30: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
bb40: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67  r</h3>..<p>^Trig
bb50: 67 65 72 73 20 6d 61 79 20 62 65 20 63 72 65 61  gers may be crea
bb60: 74 65 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20  ted on [views], 
bb70: 61 73 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e  as well as ordin
bb80: 61 72 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73  ary tables, by.s
bb90: 70 65 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41  pecifying INSTEA
bba0: 44 20 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41  D OF in the CREA
bbb0: 54 45 20 54 52 49 47 47 45 52 20 73 74 61 74 65  TE TRIGGER state
bbc0: 6d 65 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f  ment. .^If one o
bbd0: 72 20 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54  r more ON INSERT
bbe0: 2c 20 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f  , ON DELETE.or O
bbf0: 4e 20 55 50 44 41 54 45 20 74 72 69 67 67 65 72  N UPDATE trigger
bc00: 73 20 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e  s are defined on
bc10: 20 61 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74   a view, then it
bc20: 20 69 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72   is not an.error
bc30: 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49   to execute an I
bc40: 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72  NSERT, DELETE or
bc50: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
bc60: 74 20 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a  t on the view, .
bc70: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e  respectively.  ^
bc80: 49 6e 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69  Instead,.executi
bc90: 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  ng an INSERT, DE
bca0: 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
bcb0: 6e 20 74 68 65 20 76 69 65 77 20 63 61 75 73 65  n the view cause
bcc0: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
bcd0: 0a 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72  .triggers to fir
bce0: 65 2e 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62  e. ^The real tab
bcf0: 6c 65 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74  les underlying t
bd00: 68 65 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20  he view are not 
bd10: 6d 6f 64 69 66 69 65 64 0a 28 65 78 63 65 70 74  modified.(except
bd20: 20 70 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63   possibly explic
bd30: 69 74 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67  itly, by a trigg
bd40: 65 72 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e  er program).</p>
bd50: 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20  ..<p>^Note that 
bd60: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
bd70: 6e 67 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c  nges()] and [sql
bd80: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
bd90: 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  es()] interfaces
bda0: 0a 64 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e  .do not count IN
bdb0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
bdc0: 20 66 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68   firings, but th
bdd0: 65 0a 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e.[count_changes
bde0: 20 70 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f   pragma] does co
bdf0: 75 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74  unt INSTEAD OF t
be00: 72 69 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f  rigger firing.</
be10: 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73  p>..<h3>Examples
be20: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 73 73 75  </h3>..<p>^(Assu
be30: 6d 69 6e 67 20 74 68 61 74 20 63 75 73 74 6f 6d  ming that custom
be40: 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20 73  er records are s
be50: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 63 75  tored in the "cu
be60: 73 74 6f 6d 65 72 73 22 20 74 61 62 6c 65 2c 20  stomers" table, 
be70: 61 6e 64 0a 74 68 61 74 20 6f 72 64 65 72 20 72  and.that order r
be80: 65 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65  ecords are store
be90: 64 20 69 6e 20 74 68 65 20 22 6f 72 64 65 72 73  d in the "orders
bea0: 22 20 74 61 62 6c 65 2c 20 74 68 65 20 66 6f 6c  " table, the fol
beb0: 6c 6f 77 69 6e 67 20 74 72 69 67 67 65 72 0a 65  lowing trigger.e
bec0: 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20  nsures that all 
bed0: 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72  associated order
bee0: 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64  s are redirected
bef0: 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72   when a customer
bf00: 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20   changes.his or 
bf10: 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e  her address:</p>
bf20: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
bf30: 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  .CREATE TRIGGER 
bf40: 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f  update_customer_
bf50: 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f  address UPDATE O
bf60: 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73  F address ON cus
bf70: 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a  tomers .  BEGIN.
bf80: 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72      UPDATE order
bf90: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
bfa0: 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52  new.address WHER
bfb0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
bfc0: 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e  = old.name;.  EN
bfd0: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
bfe0: 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72  ith this trigger
bff0: 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63   installed, exec
c000: 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d  uting the statem
c010: 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ent:</p>..<tcl>E
c020: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
c030: 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64  customers SET ad
c040: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
c050: 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20  St.' WHERE name 
c060: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c070: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73  }</tcl>..<p>caus
c080: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
c090: 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63   to be automatic
c0a0: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f  ally executed:</
c0b0: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
c0c0: 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73   {.UPDATE orders
c0d0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
c0e0: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
c0f0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
c100: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
c110: 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  }</tcl>)^..<tcl>
c120: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 64 65  hd_fragment unde
c130: 66 5f 62 65 66 6f 72 65 20 7b 75 6e 64 65 66 69  f_before {undefi
c140: 6e 65 64 20 42 45 46 4f 52 45 20 74 72 69 67 67  ned BEFORE trigg
c150: 65 72 20 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63  er behavior}</tc
c160: 6c 3e 0a 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20  l>.<h3>Cautions 
c170: 4f 6e 20 54 68 65 20 55 73 65 20 4f 66 20 42 45  On The Use Of BE
c180: 46 4f 52 45 20 74 72 69 67 67 65 72 73 3c 2f 68  FORE triggers</h
c190: 33 3e 0a 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f  3>..<p>If a BEFO
c1a0: 52 45 20 55 50 44 41 54 45 20 6f 72 20 42 45 46  RE UPDATE or BEF
c1b0: 4f 52 45 20 44 45 4c 45 54 45 20 74 72 69 67 67  ORE DELETE trigg
c1c0: 65 72 20 6d 6f 64 69 66 69 65 73 20 6f 72 20 64  er modifies or d
c1d0: 65 6c 65 74 65 73 20 61 20 72 6f 77 0a 74 68 61  eletes a row.tha
c1e0: 74 20 77 61 73 20 74 6f 20 68 61 76 65 20 62 65  t was to have be
c1f0: 65 6e 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  en updated or de
c200: 6c 65 74 65 64 2c 20 74 68 65 6e 20 74 68 65 20  leted, then the 
c210: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
c220: 62 73 65 71 75 65 6e 74 0a 75 70 64 61 74 65 20  bsequent.update 
c230: 6f 72 20 64 65 6c 65 74 65 20 6f 70 65 72 61 74  or delete operat
c240: 69 6f 6e 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ion is undefined
c250: 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  .  Furthermore, 
c260: 69 66 20 61 20 42 45 46 4f 52 45 20 74 72 69 67  if a BEFORE trig
c270: 67 65 72 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20  ger.modifies or 
c280: 64 65 6c 65 74 65 73 20 61 20 72 6f 77 2c 20 74  deletes a row, t
c290: 68 65 6e 20 69 74 20 69 73 20 75 6e 64 65 66 69  hen it is undefi
c2a0: 6e 65 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ned whether or n
c2b0: 6f 74 20 41 46 54 45 52 20 74 72 69 67 67 65 72  ot AFTER trigger
c2c0: 73 0a 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  s.that would hav
c2d0: 65 20 6f 74 68 65 72 77 69 73 65 20 72 75 6e 20  e otherwise run 
c2e0: 6f 6e 20 74 68 6f 73 65 20 72 6f 77 73 20 77 69  on those rows wi
c2f0: 6c 6c 20 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a  ll in fact run..
c300: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c  </p>..<p>The val
c310: 75 65 20 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20  ue of NEW.rowid 
c320: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 20  is undefined in 
c330: 61 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  a BEFORE INSERT 
c340: 74 72 69 67 67 65 72 20 69 6e 20 77 68 69 63 68  trigger in which
c350: 0a 74 68 65 20 72 6f 77 69 64 20 69 73 20 6e 6f  .the rowid is no
c360: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65 74  t explicitly set
c370: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c   to an integer.<
c380: 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20  /p>..<p>Because 
c390: 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72 73  of the behaviors
c3a0: 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65   described above
c3b0: 2c 20 70 72 6f 67 72 61 6d 6d 65 72 73 20 61 72  , programmers ar
c3c0: 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a  e encouraged to.
c3d0: 70 72 65 66 65 72 20 41 46 54 45 52 20 74 72 69  prefer AFTER tri
c3e0: 67 67 65 72 73 20 6f 76 65 72 20 42 45 46 4f 52  ggers over BEFOR
c3f0: 45 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a  E triggers.</p>.
c400: 0a 3c 68 33 3e 54 68 65 20 52 41 49 53 45 28 29  .<h3>The RAISE()
c410: 20 66 75 6e 63 74 69 6f 6e 3c 2f 68 33 3e 0a 0a   function</h3>..
c420: 3c 70 3e 5e 28 41 20 73 70 65 63 69 61 6c 20 53  <p>^(A special S
c430: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 52 41 49 53  QL function RAIS
c440: 45 28 29 20 6d 61 79 20 62 65 20 75 73 65 64 20  E() may be used 
c450: 77 69 74 68 69 6e 20 61 20 74 72 69 67 67 65 72  within a trigger
c460: 2d 70 72 6f 67 72 61 6d 2c 29 5e 0a 77 69 74 68  -program,)^.with
c470: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
c480: 79 6e 74 61 78 3c 2f 70 3e 20 0a 0a 3c 74 63 6c  yntax</p> ..<tcl
c490: 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  >BubbleDiagram r
c4a0: 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 3c 2f 74  aise-function</t
c4b0: 63 6c 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 6f 6e  cl>..<p>^When on
c4c0: 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 74  e of the first t
c4d0: 68 72 65 65 20 66 6f 72 6d 73 20 69 73 20 63 61  hree forms is ca
c4e0: 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67  lled during trig
c4f0: 67 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63  ger-program.exec
c500: 75 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69  ution, the speci
c510: 66 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  fied [ON CONFLIC
c520: 54 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  T] processing is
c530: 20 70 65 72 66 6f 72 6d 65 64 0a 28 65 69 74 68   performed.(eith
c540: 65 72 20 41 42 4f 52 54 2c 20 46 41 49 4c 20 6f  er ABORT, FAIL o
c550: 72 20 52 4f 4c 4c 42 41 43 4b 29 20 61 6e 64 20  r ROLLBACK) and 
c560: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
c570: 79 20 74 65 72 6d 69 6e 61 74 65 73 2e 0a 41 6e  y terminates..An
c580: 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 5b   error code of [
c590: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
c5a0: 54 5d 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  T] is returned t
c5b0: 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  o the applicatio
c5c0: 6e 2c 0a 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  n,.along with th
c5d0: 65 20 73 70 65 63 69 66 69 65 64 20 65 72 72 6f  e specified erro
c5e0: 72 20 6d 65 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a  r message.</p>..
c5f0: 3c 70 3e 5e 57 68 65 6e 20 52 41 49 53 45 28 49  <p>^When RAISE(I
c600: 47 4e 4f 52 45 29 20 69 73 20 63 61 6c 6c 65 64  GNORE) is called
c610: 2c 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  , the remainder 
c620: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  of the current t
c630: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 0a  rigger program,.
c640: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68  the statement th
c650: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72  at caused the tr
c660: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 74 6f  igger program to
c670: 20 65 78 65 63 75 74 65 20 61 6e 64 20 61 6e 79   execute and any
c680: 20 73 75 62 73 65 71 75 65 6e 74 0a 74 72 69 67   subsequent.trig
c690: 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 68 61  ger programs tha
c6a0: 74 20 77 6f 75 6c 64 20 6f 66 20 62 65 65 6e 20  t would of been 
c6b0: 65 78 65 63 75 74 65 64 20 61 72 65 20 61 62 61  executed are aba
c6c0: 6e 64 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61  ndoned. ^No data
c6d0: 62 61 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65  base.changes are
c6e0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e   rolled back.  ^
c6f0: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
c700: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
c710: 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
c720: 0a 74 6f 20 65 78 65 63 75 74 65 20 69 73 20 69  .to execute is i
c730: 74 73 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20  tself part of a 
c740: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
c750: 20 74 68 65 6e 20 74 68 61 74 20 74 72 69 67 67   then that trigg
c760: 65 72 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d  er program.resum
c770: 65 73 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20  es execution at 
c780: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
c790: 20 74 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a   the next step..
c7a0: 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
c7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c7f0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
c800: 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 45  tion {CREATE VIE
c810: 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d 20  W} {createview} 
c820: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 76  {{CREATE VIEW} v
c830: 69 65 77 20 2a 76 69 65 77 73 7d 0a 0a 42 75 62  iew *views}..Bub
c840: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
c850: 65 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a 3c 2f  e-view-stmt 1.</
c860: 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52  tcl>..<p>^The CR
c870: 45 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e  EATE VIEW comman
c880: 64 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65  d assigns a name
c890: 20 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67   to a pre-packag
c8a0: 65 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61  ed .[SELECT] sta
c8b0: 74 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74  tement. .^Once t
c8c0: 68 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74  he view is creat
c8d0: 65 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73  ed, it can be us
c8e0: 65 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ed in the FROM c
c8f0: 6c 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72  lause.of another
c900: 20 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61   [SELECT] in pla
c910: 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
c920: 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  me..</p>..<p>^If
c930: 20 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22   the "TEMP" or "
c940: 54 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f  TEMPORARY" keywo
c950: 72 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  rd occurs in bet
c960: 77 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e  ween "CREATE".an
c970: 64 20 22 56 49 45 57 22 20 74 68 65 6e 20 74 68  d "VIEW" then th
c980: 65 20 76 69 65 77 20 74 68 61 74 20 69 73 20 63  e view that is c
c990: 72 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76  reated is only v
c9a0: 69 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 70 72  isible to the.pr
c9b0: 6f 63 65 73 73 20 74 68 61 74 20 6f 70 65 6e 65  ocess that opene
c9c0: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
c9d0: 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  nd is automatica
c9e0: 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68 65 6e  lly deleted when
c9f0: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73  .the database is
ca00: 20 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70   closed.</p>..<p
ca10: 3e 20 5e 49 66 20 61 20 26 6c 74 3b 64 61 74 61  > ^If a &lt;data
ca20: 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73  base-name&gt; is
ca30: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
ca40: 20 74 68 65 20 76 69 65 77 20 69 73 20 63 72 65   the view is cre
ca50: 61 74 65 64 20 69 6e 20 0a 74 68 65 20 6e 61 6d  ated in .the nam
ca60: 65 64 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74  ed database. ^It
ca70: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
ca80: 73 70 65 63 69 66 79 20 62 6f 74 68 20 61 20 26  specify both a &
ca90: 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  lt;database-name
caa0: 26 67 74 3b 0a 61 6e 64 20 74 68 65 20 54 45 4d  &gt;.and the TEM
cab0: 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56  P keyword on a V
cac0: 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  IEW, unless the 
cad0: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
cae0: 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22 2e  e&gt; is "temp".
caf0: 0a 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73 65  .^If no database
cb00: 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
cb10: 65 64 2c 20 61 6e 64 20 74 68 65 20 54 45 4d 50  ed, and the TEMP
cb20: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
cb30: 70 72 65 73 65 6e 74 2c 0a 74 68 65 20 56 49 45  present,.the VIE
cb40: 57 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20  W is created in 
cb50: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
cb60: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 59 6f 75 20  e.</p>..<p>^You 
cb70: 63 61 6e 6e 6f 74 20 5b 44 45 4c 45 54 45 5d 2c  cannot [DELETE],
cb80: 20 5b 49 4e 53 45 52 54 5d 2c 20 6f 72 20 5b 55   [INSERT], or [U
cb90: 50 44 41 54 45 5d 20 61 20 76 69 65 77 2e 20 20  PDATE] a view.  
cba0: 5e 56 69 65 77 73 20 61 72 65 20 72 65 61 64 2d  ^Views are read-
cbb0: 6f 6e 6c 79 20 0a 69 6e 20 53 51 4c 69 74 65 2e  only .in SQLite.
cbc0: 20 20 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 6d    ^However, in m
cbd0: 61 6e 79 20 63 61 73 65 73 20 79 6f 75 20 63 61  any cases you ca
cbe0: 6e 20 75 73 65 20 61 6e 0a 5b 49 4e 53 54 45 41  n use an.[INSTEA
cbf0: 44 20 4f 46 20 74 72 69 67 67 65 72 5d 20 6f 6e  D OF trigger] on
cc00: 20 74 68 65 20 76 69 65 77 20 74 6f 20 61 63 63   the view to acc
cc10: 6f 6d 70 6c 69 73 68 20 0a 74 68 65 20 73 61 6d  omplish .the sam
cc20: 65 20 74 68 69 6e 67 2e 20 20 5e 56 69 65 77 73  e thing.  ^Views
cc30: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 0a 77 69   are removed .wi
cc40: 74 68 20 74 68 65 20 5b 44 52 4f 50 20 56 49 45  th the [DROP VIE
cc50: 57 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  W] command.</p>.
cc60: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
cc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cc90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ccb0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
ccc0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
ccd0: 42 4c 45 7d 20 7b 63 72 65 61 74 65 76 74 61 62  BLE} {createvtab
cce0: 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 52 54 55  } {{CREATE VIRTU
ccf0: 41 4c 20 54 41 42 4c 45 7d 7d 0a 0a 42 75 62 62  AL TABLE}}..Bubb
cd00: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
cd10: 2d 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73  -virtual-table-s
cd20: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
cd30: 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
cd40: 65 5d 20 69 73 20 61 6e 20 69 6e 74 65 72 66 61  e] is an interfa
cd50: 63 65 20 74 6f 20 61 6e 20 65 78 74 65 72 6e 61  ce to an externa
cd60: 6c 20 73 74 6f 72 61 67 65 20 6f 72 20 63 6f 6d  l storage or com
cd70: 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69 6e 65 20  putation.engine 
cd80: 74 68 61 74 20 61 70 70 65 61 72 73 20 74 6f 20  that appears to 
cd90: 62 65 20 61 20 74 61 62 6c 65 20 62 75 74 20 64  be a table but d
cda0: 6f 65 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  oes not actually
cdb0: 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69   store informati
cdc0: 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  on.in the databa
cdd0: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
cde0: 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20 79 6f 75  >In general, you
cdf0: 20 63 61 6e 20 64 6f 20 61 6e 79 74 68 69 6e 67   can do anything
ce00: 20 77 69 74 68 20 61 20 5b 76 69 72 74 75 61 6c   with a [virtual
ce10: 20 74 61 62 6c 65 5d 20 74 68 61 74 20 63 61 6e   table] that can
ce20: 20 62 65 20 64 6f 6e 65 0a 77 69 74 68 20 61 6e   be done.with an
ce30: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 2c   ordinary table,
ce40: 20 65 78 63 65 70 74 20 74 68 61 74 20 5e 79 6f   except that ^yo
ce50: 75 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  u cannot create 
ce60: 69 6e 64 69 63 65 73 20 6f 72 20 74 72 69 67 67  indices or trigg
ce70: 65 72 73 20 6f 6e 20 61 0a 76 69 72 74 75 61 6c  ers on a.virtual
ce80: 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d 65 20 76   table.  ^Some v
ce90: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
cea0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
ceb0: 68 74 20 69 6d 70 6f 73 65 20 61 64 64 69 74 69  ht impose additi
cec0: 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74 69 6f 6e  onal.restriction
ced0: 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s.  For example,
cee0: 20 6d 61 6e 79 20 76 69 72 74 75 61 6c 20 74 61   many virtual ta
cef0: 62 6c 65 73 20 61 72 65 20 72 65 61 64 2d 6f 6e  bles are read-on
cf00: 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
cf10: 26 6c 74 3b 6d 6f 64 75 6c 65 2d 6e 61 6d 65 26  &lt;module-name&
cf20: 67 74 3b 20 69 73 20 74 68 65 20 6e 61 6d 65 20  gt; is the name 
cf30: 6f 66 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  of an object tha
cf40: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 0a 74 68 65  t implements.the
cf50: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
cf60: 20 5e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65   ^The &lt;module
cf70: 2d 6e 61 6d 65 26 67 74 3b 20 6d 75 73 74 20 62  -name&gt; must b
cf80: 65 20 72 65 67 69 73 74 65 72 65 64 20 77 69 74  e registered wit
cf90: 68 0a 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  h.the SQLite dat
cfa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
cfb0: 20 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f   using.[sqlite3_
cfc0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d  create_module()]
cfd0: 20 6f 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65   or [sqlite3_cre
cfe0: 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d  ate_module_v2()]
cff0: 0a 70 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e  .prior to issuin
d000: 67 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  g the CREATE VIR
d010: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
d020: 6d 65 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c  ment..^The modul
d030: 65 20 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20  e takes zero or 
d040: 6d 6f 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72  more comma-separ
d050: 61 74 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ated arguments..
d060: 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63  ^The arguments c
d070: 61 6e 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74  an be just about
d080: 20 61 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e   any text as lon
d090: 67 20 61 73 20 69 74 20 68 61 73 20 62 61 6c 61  g as it has bala
d0a0: 6e 63 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73  nced.parentheses
d0b0: 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  .  The argument 
d0c0: 73 79 6e 74 61 78 20 69 73 20 73 75 66 66 69 63  syntax is suffic
d0d0: 69 65 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74  iently general t
d0e0: 68 61 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74  hat the.argument
d0f0: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
d100: 20 61 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75   appear as [colu
d110: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20  mn definitions] 
d120: 69 6e 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c  in a traditional
d130: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
d140: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51  statement.  .^SQ
d150: 4c 69 74 65 20 70 61 73 73 65 73 20 74 68 65 20  Lite passes the 
d160: 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73  module arguments
d170: 20 64 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65   directly.to the
d180: 20 5b 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b   [xCreate] and [
d190: 78 43 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64  xConnect] method
d1a0: 73 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20  s of the module 
d1b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77  implementation.w
d1c0: 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
d1d0: 70 72 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  pretation.  It i
d1e0: 73 20 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69  s the responsibi
d1f0: 6c 69 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75  lity.of the modu
d200: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
d210: 6e 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69  n to parse and i
d220: 6e 74 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e  nterpret its own
d230: 20 61 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a   arguments.</p>.
d240: 0a 3c 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74  .<p>^A virtual t
d250: 61 62 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65  able is destroye
d260: 64 20 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69  d using the ordi
d270: 6e 61 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45  nary.[DROP TABLE
d280: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
d290: 65 72 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56  ere is no.DROP V
d2a0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61  IRTUAL TABLE sta
d2b0: 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63  tement.</p>..<tc
d2c0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
d2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d310: 23 0a 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45  #.Section DELETE
d320: 20 64 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20   delete {DELETE 
d330: 2a 44 45 4c 45 54 45 73 7d 0a 0a 42 75 62 62 6c  *DELETEs}..Bubbl
d340: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
d350: 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61  stmt 1.BubbleDia
d360: 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74  gram qualified-t
d370: 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e  able-name.</tcl>
d380: 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54 45 20  ..<p>The DELETE 
d390: 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65 73 20  command removes 
d3a0: 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 74 68 65  records from the
d3b0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
d3c0: 64 20 62 79 20 74 68 65 0a 20 20 20 3c 69 3e 71  d by the.   <i>q
d3d0: 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
d3e0: 61 6d 65 3c 2f 69 3e 2e 20 0a 0a 3c 70 3e 5e 49  ame</i>. ..<p>^I
d3f0: 66 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  f the WHERE clau
d400: 73 65 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  se is not presen
d410: 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 69  t, all records i
d420: 6e 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20  n the table are 
d430: 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e 49 66 20  deleted..   ^If 
d440: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
d450: 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65 6e  s supplied, then
d460: 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72 6f 77 73   only those rows
d470: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 20   for which the. 
d480: 20 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c    result of eval
d490: 75 61 74 69 6e 67 20 74 68 65 20 57 48 45 52 45  uating the WHERE
d4a0: 20 63 6c 61 75 73 65 20 61 73 20 61 20 5b 62 6f   clause as a [bo
d4b0: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
d4c0: 7c 0a 20 20 20 62 6f 6f 6c 65 61 6e 20 65 78 70  |.   boolean exp
d4d0: 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d  ression is true]
d4e0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
d4f0: 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20  h3>Restrictions 
d500: 6f 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d  on DELETE Statem
d510: 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41  ents Within CREA
d520: 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a  TE TRIGGER</h3>.
d530: 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
d540: 67 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61  g restrictions a
d550: 70 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73  pply to DELETE s
d560: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
d570: 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a  ccur within the.
d580: 20 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52     body of a [CR
d590: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
d5a0: 61 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20  atement:..<ul>. 
d5b0: 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e   <li><p>^The <i>
d5c0: 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
d5d0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
d5e0: 20 6f 66 20 61 20 44 45 4c 45 54 45 20 73 74 61   of a DELETE sta
d5f0: 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20  tement within.  
d600: 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64 79    a trigger body
d610: 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
d620: 66 69 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65  fied.  ^(In othe
d630: 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
d640: 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d   <i>database-nam
d650: 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72  e</i><b>.</b> pr
d660: 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61 62 6c  efix on the tabl
d670: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 61 6c  e name is not al
d680: 6c 6f 77 65 64 20 0a 20 20 20 20 77 69 74 68 69  lowed .    withi
d690: 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e 49  n triggers.)^ ^I
d6a0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
d6b0: 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
d6c0: 20 69 73 20 61 74 74 61 63 68 65 64 20 69 73 0a   is attached is.
d6d0: 20 20 20 20 6e 6f 74 20 69 6e 20 74 68 65 20 74      not in the t
d6e0: 65 6d 70 20 64 61 74 61 62 61 73 65 2c 20 74 68  emp database, th
d6f0: 65 6e 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  en DELETE statem
d700: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20  ents within the 
d710: 74 72 69 67 67 65 72 0a 20 20 20 20 62 6f 64 79  trigger.    body
d720: 20 6d 75 73 74 20 6f 70 65 72 61 74 65 20 6f 6e   must operate on
d730: 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20 74   tables within t
d740: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
d750: 20 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20   as it. ^If the 
d760: 74 61 62 6c 65 0a 20 20 20 20 74 6f 20 77 68 69  table.    to whi
d770: 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69  ch the trigger i
d780: 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e  s attached is in
d790: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
d7a0: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20  se, then the.   
d7b0: 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d   unqualified nam
d7c0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
d7d0: 65 69 6e 67 20 64 65 6c 65 74 65 64 20 69 73 20  eing deleted is 
d7e0: 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20  resolved in the 
d7f0: 73 61 6d 65 20 77 61 79 20 61 73 0a 20 20 20 20  same way as.    
d800: 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
d810: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
d820: 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
d830: 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
d840: 61 62 61 73 65 2c 20 74 68 65 6e 0a 20 20 20 20  abase, then.    
d850: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
d860: 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
d870: 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
d880: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
d890: 72 65 0a 20 20 20 20 61 74 74 61 63 68 65 64 29  re.    attached)
d8a0: 2e 0a 20 20 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e  ..    .  <li><p>
d8b0: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
d8c0: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
d8d0: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
d8e0: 61 6c 6c 6f 77 65 64 20 6f 6e 20 44 45 4c 45 54  allowed on DELET
d8f0: 45 0a 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73  E.    statements
d900: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d910: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
d920: 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
d930: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
d940: 28 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77  (described below
d950: 29 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  ) are unsupporte
d960: 64 20 66 6f 72 0a 20 20 20 20 44 45 4c 45 54 45  d for.    DELETE
d970: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
d980: 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70 3e  in triggers.</p>
d990: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69  .</ul>..<h3>Opti
d9a0: 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f  onal LIMIT and O
d9b0: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 3c  RDER BY clauses<
d9c0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51  /h3>..<p>^(If SQ
d9d0: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
d9e0: 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54   with the [SQLIT
d9f0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
da00: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f  DELETE_LIMIT].co
da10: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
da20: 6e 2c 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  n, then the synt
da30: 61 78 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  ax of the DELETE
da40: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 65 78   statement is.ex
da50: 74 65 6e 64 65 64 20 62 79 20 74 68 65 20 61 64  tended by the ad
da60: 64 69 74 69 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e  dition of option
da70: 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
da80: 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 3a 29 5e  LIMIT clauses:)^
da90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
daa0: 65 44 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d  eDiagram delete-
dab0: 73 74 6d 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63  stmt-limited</tc
dac0: 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 44 45 4c  l>..<p>^If a DEL
dad0: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61  ETE statement ha
dae0: 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
daf0: 2c 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  , the maximum nu
db00: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
db10: 74 0a 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65  t.will be delete
db20: 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76  d is found by ev
db30: 61 6c 75 61 74 69 6e 67 20 74 68 65 20 61 63 63  aluating the acc
db40: 6f 6d 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73  ompanying expres
db50: 73 69 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67  sion and casting
db60: 0a 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  .it to an intege
db70: 72 20 76 61 6c 75 65 2e 20 5e 49 66 20 74 68 65  r value. ^If the
db80: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 65   result of the e
db90: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4c 49  valuating the LI
dba0: 4d 49 54 20 63 6c 61 75 73 65 0a 63 61 6e 6e 6f  MIT clause.canno
dbb0: 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  t be losslessly 
dbc0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
dbd0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69  integer value, i
dbe0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
dbf0: 41 20 0a 6e 65 67 61 74 69 76 65 20 4c 49 4d 49  A .negative LIMI
dc00: 54 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72  T value is inter
dc10: 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69  preted as "no li
dc20: 6d 69 74 22 2e 20 5e 28 49 66 20 74 68 65 20 44  mit". ^(If the D
dc30: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dc40: 0a 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46  .also has an OFF
dc50: 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  SET clause, then
dc60: 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79   it is similarly
dc70: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63   evaluated and c
dc80: 61 73 74 20 74 6f 20 61 6e 0a 69 6e 74 65 67 65  ast to an.intege
dc90: 72 20 76 61 6c 75 65 2e 20 41 67 61 69 6e 2c 20  r value. Again, 
dca0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
dcb0: 66 20 74 68 65 20 76 61 6c 75 65 20 63 61 6e 6e  f the value cann
dcc0: 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79  ot be losslessly
dcd0: 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e  .converted to an
dce0: 20 69 6e 74 65 67 65 72 2e 29 5e 20 5e 49 66 20   integer.)^ ^If 
dcf0: 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
dd00: 45 54 20 63 6c 61 75 73 65 2c 20 6f 72 20 74 68  ET clause, or th
dd10: 65 20 63 61 6c 63 75 6c 61 74 65 64 0a 69 6e 74  e calculated.int
dd20: 65 67 65 72 20 76 61 6c 75 65 20 69 73 20 6e 65  eger value is ne
dd30: 67 61 74 69 76 65 2c 20 74 68 65 20 65 66 66 65  gative, the effe
dd40: 63 74 69 76 65 20 4f 46 46 53 45 54 20 76 61 6c  ctive OFFSET val
dd50: 75 65 20 69 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e  ue is zero...<p>
dd60: 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54 45 20  ^(If the DELETE 
dd70: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 6e  statement has an
dd80: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
dd90: 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
dda0: 74 68 61 74 20 77 6f 75 6c 64 20 0a 62 65 20 64  that would .be d
ddb0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
ddc0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
ddd0: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 73 6f  IT clause are so
dde0: 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  rted according t
ddf0: 6f 20 74 68 65 20 0a 4f 52 44 45 52 20 42 59 2e  o the .ORDER BY.
de00: 20 54 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   The first <i>M<
de10: 2f 69 3e 20 72 6f 77 73 2c 20 77 68 65 72 65 20  /i> rows, where 
de20: 3c 69 3e 4d 3c 2f 69 3e 20 69 73 20 74 68 65 20  <i>M</i> is the 
de30: 76 61 6c 75 65 20 66 6f 75 6e 64 20 62 79 0a 65  value found by.e
de40: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 4f 46  valuating the OF
de50: 46 53 45 54 20 63 6c 61 75 73 65 20 65 78 70 72  FSET clause expr
de60: 65 73 73 69 6f 6e 2c 20 61 72 65 20 73 6b 69 70  ession, are skip
de70: 70 65 64 2c 20 61 6e 64 20 74 68 65 20 66 6f 6c  ped, and the fol
de80: 6c 6f 77 69 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e  lowing .<i>N</i>
de90: 2c 20 77 68 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e  , where <i>N</i>
dea0: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
deb0: 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
dec0: 73 73 69 6f 6e 2c 20 61 72 65 20 64 65 6c 65 74  ssion, are delet
ded0: 65 64 2e 29 5e 0a 5e 49 66 20 74 68 65 72 65 20  ed.)^.^If there 
dee0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  are less than <i
def0: 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 72 65 6d 61  >N</i> rows rema
df00: 69 6e 69 6e 67 20 61 66 74 65 72 20 74 61 6b 69  ining after taki
df10: 6e 67 20 74 68 65 20 4f 46 46 53 45 54 20 63 6c  ng the OFFSET cl
df20: 61 75 73 65 0a 69 6e 74 6f 20 61 63 63 6f 75 6e  ause.into accoun
df30: 74 2c 20 6f 72 20 69 66 20 74 68 65 20 4c 49 4d  t, or if the LIM
df40: 49 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61  IT clause evalua
df50: 74 65 64 20 74 6f 20 61 20 6e 65 67 61 74 69 76  ted to a negativ
df60: 65 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 61 6c  e value, then al
df70: 6c 0a 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  l.remaining rows
df80: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 0a 3c   are deleted...<
df90: 70 3e 5e 49 66 20 74 68 65 20 44 45 4c 45 54 45  p>^If the DELETE
dfa0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e   statement has n
dfb0: 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  o ORDER BY claus
dfc0: 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  e, then all rows
dfd0: 20 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 64   that.would be d
dfe0: 65 6c 65 74 65 64 20 69 6e 20 74 68 65 20 61 62  eleted in the ab
dff0: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d  sence of the LIM
e000: 49 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73  IT clause are as
e010: 73 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72  sembled in an.ar
e020: 62 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65  bitrary order be
e030: 66 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68  fore applying th
e040: 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
e050: 45 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65  ET clauses to de
e060: 74 65 72 6d 69 6e 65 20 0a 74 68 65 20 73 75 62  termine .the sub
e070: 73 65 74 20 74 68 61 74 20 61 72 65 20 61 63 74  set that are act
e080: 75 61 6c 6c 79 20 64 65 6c 65 74 65 64 2e 0a 0a  ually deleted...
e090: 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
e0a0: 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 20 44 45  Y clause on a DE
e0b0: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
e0c0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64  s used only to d
e0d0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72  etermine which.r
e0e0: 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20  ows fall within 
e0f0: 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f  the LIMIT. The o
e100: 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f  rder in which ro
e110: 77 73 20 61 72 65 20 64 65 6c 65 74 65 64 20 69  ws are deleted i
e120: 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
e130: 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
e140: 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
e150: 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
e160: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 72  l>hd_fragment tr
e170: 75 6e 63 61 74 65 6f 70 74 20 7b 74 72 75 6e 63  uncateopt {trunc
e180: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e190: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e1a0: 54 72 75 6e 63 61 74 65 20 4f 70 74 69 6d 69 7a  Truncate Optimiz
e1b0: 61 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ation</h3>..<p>^
e1c0: 57 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 69  When the WHERE i
e1d0: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61  s omitted from a
e1e0: 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
e1f0: 74 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 0a  t and the table.
e200: 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 68 61  being deleted ha
e210: 73 20 6e 6f 20 74 72 69 67 67 65 72 73 2c 0a 53  s no triggers,.S
e220: 51 4c 69 74 65 20 75 73 65 73 20 61 6e 20 6f 70  QLite uses an op
e230: 74 69 6d 69 7a 61 74 69 6f 6e 20 74 6f 20 65 72  timization to er
e240: 61 73 65 20 74 68 65 20 65 6e 74 69 72 65 20 74  ase the entire t
e250: 61 62 6c 65 20 63 6f 6e 74 65 6e 74 0a 77 69 74  able content.wit
e260: 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 76  hout having to v
e270: 69 73 69 74 20 65 61 63 68 20 72 6f 77 20 6f 66  isit each row of
e280: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 64 69 76   the table indiv
e290: 69 64 75 61 6c 6c 79 2e 0a 54 68 69 73 20 22 74  idually..This "t
e2a0: 72 75 6e 63 61 74 65 22 20 6f 70 74 69 6d 69 7a  runcate" optimiz
e2b0: 61 74 69 6f 6e 20 6d 61 6b 65 73 20 74 68 65 20  ation makes the 
e2c0: 64 65 6c 65 74 65 20 72 75 6e 20 6d 75 63 68 20  delete run much 
e2d0: 66 61 73 74 65 72 2e 0a 50 72 69 6f 72 20 74 6f  faster..Prior to
e2e0: 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e   SQLite [version
e2f0: 20 33 2e 36 2e 35 5d 2c 20 74 68 65 20 74 72 75   3.6.5], the tru
e300: 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
e310: 6f 6e 0a 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68  on.also meant th
e320: 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  at the [sqlite3_
e330: 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b  changes()] and.[
e340: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
e350: 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72 66 61  anges()] interfa
e360: 63 65 73 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75  ces.and the [cou
e370: 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61 67 6d  nt_changes pragm
e380: 61 5d 0a 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75  a].will not actu
e390: 61 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  ally return the 
e3a0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 6c 65 74 65  number of delete
e3b0: 64 20 72 6f 77 73 2e 20 20 0a 54 68 61 74 20 70  d rows.  .That p
e3c0: 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20  roblem has been 
e3d0: 66 69 78 65 64 20 61 73 20 6f 66 20 5b 76 65 72  fixed as of [ver
e3e0: 73 69 6f 6e 20 33 2e 36 2e 35 5d 2e 0a 0a 3c 70  sion 3.6.5]...<p
e3f0: 3e 5e 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f  >^The truncate o
e400: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20  ptimization can 
e410: 62 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  be permanently d
e420: 69 73 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20  isabled for all 
e430: 71 75 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d  queries.by recom
e440: 70 69 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69  piling.SQLite wi
e450: 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f  th the [SQLITE_O
e460: 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
e470: 49 4d 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69  IMIZATION] compi
e480: 6c 65 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c  le-time switch.<
e490: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e  /p>..<p>The trun
e4a0: 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  cate optimizatio
e4b0: 6e 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69  n can also be di
e4c0: 73 61 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d  sabled at runtim
e4d0: 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c  e using.the [sql
e4e0: 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
e4f0: 7a 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65  zer()] interface
e500: 2e 20 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72  .  ^If an author
e510: 69 7a 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65  izer callback.re
e520: 74 75 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47  turns [SQLITE_IG
e530: 4e 4f 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51  NORE] for an [SQ
e540: 4c 49 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74  LITE_DELETE] act
e550: 69 6f 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74  ion code, then.t
e560: 68 65 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74  he DELETE operat
e570: 69 6f 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64  ion will proceed
e580: 20 62 75 74 20 74 68 65 20 74 72 75 6e 63 61 74   but the truncat
e590: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77  e optimization w
e5a0: 69 6c 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20  ill.be bypassed 
e5b0: 61 6e 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65  and rows will be
e5c0: 20 64 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20   deleted one by 
e5d0: 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  one.</p>..<tcl>.
e5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e630: 53 65 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20  Section {DETACH 
e640: 44 41 54 41 42 41 53 45 7d 20 64 65 74 61 63 68  DATABASE} detach
e650: 20 2a 44 45 54 41 43 48 0a 0a 42 75 62 62 6c 65   *DETACH..Bubble
e660: 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
e670: 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  tmt 1.</tcl>..<p
e680: 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74  >^This statement
e690: 20 64 65 74 61 63 68 65 73 20 61 6e 20 61 64 64   detaches an add
e6a0: 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  itional database
e6b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
e6c0: 69 6f 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64  iously .attached
e6d0: 20 75 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41   using the [ATTA
e6e0: 43 48 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  CH] statement.  
e6f0: 0a 5e 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65  .^It is possible
e700: 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
e710: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
e720: 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
e730: 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
e740: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
e750: 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
e760: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
e770: 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
e780: 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
e790: 74 61 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  tact.</p>..<p>^T
e7a0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
e7b0: 6c 6c 20 66 61 69 6c 20 69 66 20 53 51 4c 69 74  ll fail if SQLit
e7c0: 65 20 69 73 20 69 6e 20 74 68 65 20 6d 69 64 64  e is in the midd
e7d0: 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  le of a transact
e7e0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  ion.</p>...<tcl>
e7f0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
e800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
e840: 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49 4e  Section {DROP IN
e850: 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20 7b  DEX} dropindex {
e860: 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a 42  {DROP INDEX}}..B
e870: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
e880: 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 3c  p-index-stmt 1.<
e890: 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
e8a0: 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ROP INDEX statem
e8b0: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20 69  ent removes an i
e8c0: 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68 20  ndex added.with 
e8d0: 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  the [CREATE INDE
e8e0: 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  X] statement.  T
e8f0: 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d 70  he index is comp
e900: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
e910: 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20 54  rom.the disk.  T
e920: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 72  he only way to r
e930: 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65 78  ecover the index
e940: 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20 74   is to reenter t
e950: 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 5b  he.appropriate [
e960: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63 6f  CREATE INDEX] co
e970: 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  mmand.</p>..<tcl
e980: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
e990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e9d0: 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54  .Section {DROP T
e9e0: 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65 20  ABLE} droptable 
e9f0: 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a 0a  {{DROP TABLE}}..
ea00: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72  BubbleDiagram dr
ea10: 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  op-table-stmt 1.
ea20: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
ea30: 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
ea40: 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
ea50: 61 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20  able added with 
ea60: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
ea70: 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  E] statement.  T
ea80: 68 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65  he name specifie
ea90: 64 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e  d is the.table n
eaa0: 61 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70  ame.  ^The dropp
eab0: 65 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70  ed table is comp
eac0: 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66  letely removed f
ead0: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
eae0: 20 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65   .schema and the
eaf0: 20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65   disk file.  The
eb00: 20 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62   table can not b
eb10: 65 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e  e recovered.  .^
eb20: 41 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20  All indices and 
eb30: 74 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61  triggers.associa
eb40: 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
eb50: 6c 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65  le are also dele
eb60: 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ted.</p>..<p>^Th
eb70: 65 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58  e optional IF EX
eb80: 49 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70  ISTS clause supp
eb90: 72 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72  resses the error
eba0: 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d   that would norm
ebb0: 61 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74  ally.result if t
ebc0: 68 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  he table does no
ebd0: 74 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70  t exist.</p>..<p
ebe0: 3e 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65  >^If [foreign ke
ebf0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61  y constraints] a
ec00: 72 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52  re enabled, a DR
ec10: 4f 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  OP TABLE command
ec20: 20 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70   performs an.imp
ec30: 6c 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20  licit [DELETE | 
ec40: 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b  DELETE FROM &lt;
ec50: 74 62 6c 26 67 74 3b 5d 20 63 6f 6d 6d 61 6e 64  tbl&gt;] command
ec60: 20 62 65 66 6f 72 65 20 72 65 6d 6f 76 69 6e 67   before removing
ec70: 20 74 68 65 0a 74 61 62 6c 65 20 66 72 6f 6d 20   the.table from 
ec80: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
ec90: 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69 67 67 65  ema. ^Any trigge
eca0: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  rs attached to t
ecb0: 68 65 20 74 61 62 6c 65 20 61 72 65 0a 64 72 6f  he table are.dro
ecc0: 70 70 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  pped from the da
ecd0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 62 65  tabase schema be
ece0: 66 6f 72 65 20 74 68 65 20 69 6d 70 6c 69 63 69  fore the implici
ecf0: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
ed00: 74 3b 74 62 6c 26 67 74 3b 20 0a 69 73 20 65 78  t;tbl&gt; .is ex
ed10: 65 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20  ecuted, so this 
ed20: 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79  cannot cause any
ed30: 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72   triggers to fir
ed40: 65 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20  e. By contrast, 
ed50: 5e 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c  ^an.implicit DEL
ed60: 45 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c  ETE FROM &lt;tbl
ed70: 26 67 74 3b 20 64 6f 65 73 20 63 61 75 73 65 20  &gt; does cause 
ed80: 61 6e 79 20 63 6f 6e 66 69 67 75 72 65 64 0a 5b  any configured.[
ed90: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
eda0: 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20 70 6c 61  ons] to take pla
edb0: 63 65 2e 20 0a 5e 49 66 20 74 68 65 20 69 6d 70  ce. .^If the imp
edc0: 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f  licit DELETE FRO
edd0: 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 65 78  M &lt;tbl&gt; ex
ede0: 65 63 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f  ecuted.as part o
edf0: 66 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63  f a DROP TABLE c
ee00: 6f 6d 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20  ommand violates 
ee10: 61 6e 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  any immediate fo
ee20: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
ee30: 61 69 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20  aints,.an error 
ee40: 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20  is returned and 
ee50: 74 68 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74  the table is not
ee60: 20 64 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74   dropped. ^If .t
ee70: 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  he implicit DELE
ee80: 54 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26  TE FROM &lt;tbl&
ee90: 67 74 3b 20 63 61 75 73 65 73 20 61 6e 79 20 0a  gt; causes any .
eea0: 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
eeb0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
eec0: 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65 64 2c   to be violated,
eed0: 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61 74 69   and the violati
eee0: 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73 74 20  ons still.exist 
eef0: 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63  when the transac
ef00: 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74 74 65  tion is committe
ef10: 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  d, an error is r
ef20: 65 74 75 72 6e 65 64 20 61 74 20 74 68 65 20 74  eturned at the t
ef30: 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e 0a 0a  ime.of commit...
ef40: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
ef50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef90: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
efa0: 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72 6f 70  OP TRIGGER} drop
efb0: 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50 20 54  trigger {{DROP T
efc0: 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62 6c 65  RIGGER}}..Bubble
efd0: 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 72 69  Diagram drop-tri
efe0: 67 67 65 72 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  gger-stmt 1.</tc
eff0: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50  l>..<p>^The DROP
f000: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
f010: 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 72 69  nt removes a tri
f020: 67 67 65 72 20 63 72 65 61 74 65 64 20 62 79 20  gger created by 
f030: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54 52 49  the .[CREATE TRI
f040: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
f050: 20 5e 4f 6e 63 65 20 72 65 6d 6f 76 65 64 2c 20   ^Once removed, 
f060: 74 68 65 20 74 72 69 67 67 65 72 20 64 65 66 69  the trigger defi
f070: 6e 69 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c 6f 6e  nition is no.lon
f080: 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
f090: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
f0a0: 20 28 6f 72 20 73 71 6c 69 74 65 5f 74 65 6d 70   (or sqlite_temp
f0b0: 5f 6d 61 73 74 65 72 29 20 74 61 62 6c 65 20 61  _master) table a
f0c0: 6e 64 20 69 73 0a 6e 6f 74 20 66 69 72 65 64 20  nd is.not fired 
f0d0: 62 79 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e  by any subsequen
f0e0: 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  t INSERT, UPDATE
f0f0: 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65   or DELETE state
f100: 6d 65 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f 74 65  ments...<p>^Note
f110: 20 74 68 61 74 20 74 72 69 67 67 65 72 73 20 61   that triggers a
f120: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
f130: 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20 74 68   dropped when th
f140: 65 20 61 73 73 6f 63 69 61 74 65 64 20 74 61 62  e associated tab
f150: 6c 65 20 69 73 0a 64 72 6f 70 70 65 64 2e 0a 0a  le is.dropped...
f160: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
f170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f1b0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
f1c0: 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76 69 65  OP VIEW} dropvie
f1d0: 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d 7d 0a  w {{DROP VIEW}}.
f1e0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  .BubbleDiagram d
f1f0: 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 20 31 0a  rop-view-stmt 1.
f200: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
f210: 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
f220: 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
f230: 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
f240: 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e [CREATE VIEW] 
f250: 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54  .  statement. ^T
f260: 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  he view definiti
f270: 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72  on is removed fr
f280: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
f290: 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e  schema, but .  n
f2a0: 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
f2b0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
f2c0: 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
f2d0: 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54  odified...<p>^(T
f2e0: 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20  he view to drop 
f2f0: 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
f300: 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61   the view-name a
f310: 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 64  nd optional .  d
f320: 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 73 70 65  atabase-name spe
f330: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
f340: 66 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20  f the DROP VIEW 
f350: 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20  statement. This 
f360: 0a 20 20 72 65 66 65 72 65 6e 63 65 20 69 73 20  .  reference is 
f370: 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74  resolved using t
f380: 68 65 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63  he standard proc
f390: 65 64 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63  edure for [objec
f3a0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e  t resolution].)^
f3b0: 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20  ..<p>.  ^If the 
f3c0: 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20 63  specified view c
f3d0: 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61  annot be found a
f3e0: 6e 64 20 74 68 65 20 49 46 20 45 58 49 53 54 53  nd the IF EXISTS
f3f0: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a   clause is not .
f400: 20 20 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73    present, it is
f410: 20 61 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74   an error. ^If t
f420: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 69 65  he specified vie
f430: 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e  w cannot be foun
f440: 64 20 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58  d and an IF.  EX
f450: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
f460: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52  resent in the DR
f470: 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e  OP VIEW statemen
f480: 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61 74  t, then the stat
f490: 65 6d 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d  ement.  is a no-
f4a0: 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  op....<tcl>.####
f4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
f500: 6f 6e 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a  on {Database Obj
f510: 65 63 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74  ect Name Resolut
f520: 69 6f 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b  ion} {naming} {{
f530: 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
f540: 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a  n}}.</tcl>..<p>.
f550: 20 20 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64    In SQLite, a d
f560: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28  atabase object (
f570: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  a table, index, 
f580: 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
f590: 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20   is identified. 
f5a0: 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
f5b0: 74 68 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  the object and t
f5c0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
f5d0: 61 74 61 62 61 73 65 20 74 68 61 74 20 69 74 20  atabase that it 
f5e0: 72 65 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44  resides in. .  D
f5f0: 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20  atabase objects 
f600: 6d 61 79 20 72 65 73 69 64 65 20 69 6e 20 74 68  may reside in th
f610: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
f620: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
f630: 73 65 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b  se, or in.  an [
f640: 41 54 54 41 43 48 7c 61 74 74 61 63 68 65 64 20  ATTACH|attached 
f650: 64 61 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a  database]...<p>.
f660: 20 20 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20    The syntax of 
f670: 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d  the [DROP TABLE]
f680: 2c 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20  , [DROP INDEX], 
f690: 5b 44 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52  [DROP VIEW], [DR
f6a0: 4f 50 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b  OP TRIGGER],.  [
f6b0: 52 45 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52  REINDEX], [ALTER
f6c0: 20 54 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79   TABLE] and many
f6d0: 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20   other commands 
f6e0: 61 6c 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75  all permit the u
f6f0: 73 65 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79  ser to.  specify
f700: 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65   a database obje
f710: 63 74 20 65 69 74 68 65 72 20 62 79 20 69 74 73  ct either by its
f720: 20 6e 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20   name alone, or 
f730: 62 79 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  by a combination
f740: 20 6f 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61   of.  its name a
f750: 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69  nd the name of i
f760: 74 73 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49  ts database. ^(I
f770: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73  f no database is
f780: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
f790: 72 74 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65  rt.  of the obje
f7a0: 63 74 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68  ct reference, th
f7b0: 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68  en SQLite search
f7c0: 65 73 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d  es the main, tem
f7d0: 70 20 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68  p and all attach
f7e0: 65 64 0a 20 20 64 61 74 61 62 61 73 65 73 20 66  ed.  databases f
f7f0: 6f 72 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74  or an object wit
f800: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
f810: 65 2e 20 54 68 65 20 74 65 6d 70 20 64 61 74 61  e. The temp data
f820: 62 61 73 65 20 69 73 20 73 65 61 72 63 68 65 64  base is searched
f830: 0a 20 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77  .  first, follow
f840: 65 64 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64  ed by the main d
f850: 61 74 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65  atabase, followe
f860: 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  d all attached d
f870: 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a  atabases in the.
f880: 20 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65    order that the
f890: 79 20 77 65 72 65 20 61 74 74 61 63 68 65 64 2e  y were attached.
f8a0: 20 54 68 65 20 72 65 66 65 72 65 6e 63 65 20 72   The reference r
f8b0: 65 73 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66  esolves to the f
f8c0: 69 72 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75  irst match.  fou
f8d0: 6e 64 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c  nd.)^ For exampl
f8e0: 65 3a 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20  e:..<pre>^(.    
f8f0: 20 20 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65    /* Add a table
f900: 20 6e 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74   named 't1' to t
f910: 68 65 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e  he temp, main an
f920: 64 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  d an attached da
f930: 74 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20  tabase */.      
f940: 41 54 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27  ATTACH 'file.db'
f950: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43   AS aux;.      C
f960: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
f970: 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
f980: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
f990: 28 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52  (x, y);.      CR
f9a0: 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74  EATE TABLE aux.t
f9b0: 31 28 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20  1(x, y);..      
f9c0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20  DROP TABLE t1;  
f9d0: 20 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74         /* Drop t
f9e0: 61 62 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74  able in temp dat
f9f0: 61 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44  abase */.      D
fa00: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20  ROP TABLE t1;   
fa10: 20 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61        /* Drop ta
fa20: 62 6c 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61  ble in main data
fa30: 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52  base */.      DR
fa40: 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
fa50: 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
fa60: 6c 65 20 69 6e 20 61 75 78 20 64 61 74 61 62 61  le in aux databa
fa70: 73 65 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a  se */.)^</pre>..
fa80: 3c 70 3e 0a 20 20 5e 49 66 20 61 20 64 61 74 61  <p>.  ^If a data
fa90: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70 65  base name is spe
faa0: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
fab0: 66 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65  f an object refe
fac0: 72 65 6e 63 65 2c 20 69 74 20 6d 75 73 74 20 62  rence, it must b
fad0: 65 0a 20 20 65 69 74 68 65 72 20 22 6d 61 69 6e  e.  either "main
fae0: 22 2c 20 6f 72 20 22 74 65 6d 70 22 20 6f 72 20  ", or "temp" or 
faf0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 61  the name of an a
fb00: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
fb10: 2e 20 5e 4c 69 6b 65 20 6f 74 68 65 72 0a 20 20  . ^Like other.  
fb20: 53 51 4c 20 69 64 65 6e 74 69 66 69 65 72 73 2c  SQL identifiers,
fb30: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 73 20   database names 
fb40: 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  are case-insensi
fb50: 74 69 76 65 2e 20 5e 49 66 20 61 20 64 61 74 61  tive. ^If a data
fb60: 62 61 73 65 20 6e 61 6d 65 0a 20 20 69 73 20 73  base name.  is s
fb70: 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f  pecified, then o
fb80: 6e 6c 79 20 74 68 65 20 6e 61 6d 65 64 20 64 61  nly the named da
fb90: 74 61 62 61 73 65 20 69 73 20 73 65 61 72 63 68  tabase is search
fba0: 65 64 20 66 6f 72 20 74 68 65 20 6e 61 6d 65 64  ed for the named
fbb0: 20 6f 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20   object...<p>.  
fbc0: 4d 6f 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65  Most object refe
fbd0: 72 65 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20  rences may only 
fbe0: 72 65 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65  resolve to a spe
fbf0: 63 69 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62  cific type of ob
fc00: 6a 65 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d  ject (for.  exam
fc10: 70 6c 65 20 61 20 72 65 66 65 72 65 6e 63 65 20  ple a reference 
fc20: 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
fc30: 61 20 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61  a DROP TABLE sta
fc40: 74 65 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20  tement may only 
fc50: 72 65 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74  resolve.  to a t
fc60: 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74  able object, not
fc70: 20 61 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67   an index, trigg
fc80: 65 72 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77  er or view). How
fc90: 65 76 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e  ever in some con
fca0: 74 65 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b  texts .  (e.g. [
fcb0: 52 45 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a  REINDEX]) an obj
fcc0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61  ect reference ma
fcd0: 79 20 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20  y be resolve to 
fce0: 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79  more than one ty
fcf0: 70 65 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20  pe.  of object. 
fd00: 5e 57 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20  ^When searching 
fd10: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 73  database schemas
fd20: 20 66 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a   for a named obj
fd30: 65 63 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a  ect, objects of.
fd40: 20 20 74 79 70 65 73 20 74 68 61 74 20 63 61 6e    types that can
fd50: 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 74  not be used in t
fd60: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68  he context of th
fd70: 65 20 72 65 66 65 72 65 6e 63 65 20 61 72 65 20  e reference are 
fd80: 61 6c 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65  always .  ignore
fd90: 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  d...<tcl>.######
fda0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fdd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fde0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
fdf0: 20 45 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e   EXPLAIN explain
fe00: 20 45 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65   EXPLAIN..Bubble
fe10: 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74  Diagram sql-stmt
fe20: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20  .</tcl>..<p>^An 
fe30: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61  SQL statement ca
fe40: 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
fe50: 20 74 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58   the keyword "EX
fe60: 50 4c 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65  PLAIN" or.by the
fe70: 20 70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e   phrase "EXPLAIN
fe80: 20 51 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e   QUERY PLAN".  ^
fe90: 45 69 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74  Either modificat
fea0: 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53  ion causes the.S
feb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  QL statement to 
fec0: 62 65 68 61 76 65 20 61 73 20 61 20 71 75 65 72  behave as a quer
fed0: 79 20 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20  y and to return 
fee0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
fef0: 74 0a 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74  t.how the SQL st
ff00: 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
ff10: 76 65 20 6f 70 65 72 61 74 65 64 20 69 66 20 74  ve operated if t
ff20: 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f  he EXPLAIN keywo
ff30: 72 64 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64  rd or.phrase had
ff40: 20 62 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f   been omitted.</
ff50: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75  p>..<p>The outpu
ff60: 74 20 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61  t from EXPLAIN a
ff70: 6e 64 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  nd EXPLAIN QUERY
ff80: 20 50 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65   PLAN is intende
ff90: 64 20 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76  d for.interactiv
ffa0: 65 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74  e analysis and t
ffb0: 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f  roubleshooting o
ffc0: 6e 6c 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c  nly.  The detail
ffd0: 73 20 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74  s of the .output
ffe0: 20 66 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a   format are subj
fff0: 65 63 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72  ect to change fr
10000 6f 6d 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f  om one release o
10010 66 20 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20  f SQLite to the 
10020 6e 65 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f  next..Applicatio
10030 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73  ns should not us
10040 65 20 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50  e EXPLAIN or EXP
10050 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
10060 73 69 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63  since.their exac
10070 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 76 61  t behavior is va
10080 72 69 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20  riable and only 
10090 70 61 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65  partially docume
100a0 6e 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57  nted.</p>..<p>^W
100b0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
100c0 6b 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20  keyword appears 
100d0 62 79 20 69 74 73 65 6c 66 20 69 74 20 63 61 75  by itself it cau
100e0 73 65 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ses the statemen
100f0 74 0a 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t.to behave as a
10100 20 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75   query that retu
10110 72 6e 73 20 74 68 65 20 73 65 71 75 65 6e 63 65  rns the sequence
10120 20 6f 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61   of .[virtual ma
10130 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f  chine instructio
10140 6e 73 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76  ns] it would hav
10150 65 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  e used to execut
10160 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61  e the command ha
10170 64 0a 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  d.the EXPLAIN ke
10180 79 77 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70  yword not been p
10190 72 65 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68  resent. ^When th
101a0 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
101b0 50 4c 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65  PLAN phrase.appe
101c0 61 72 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65  ars, the stateme
101d0 6e 74 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d  nt returns high-
101e0 6c 65 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  level informatio
101f0 6e 20 72 65 67 61 72 64 69 6e 67 20 74 68 65 20  n regarding the 
10200 71 75 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20  query.plan that 
10210 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
10220 75 73 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41  used...The EXPLA
10230 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f  IN QUERY PLAN co
10240 6d 6d 61 6e 64 20 69 73 20 64 65 73 63 72 69 62  mmand is describ
10250 65 64 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20  ed in .[explain 
10260 71 75 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20  query plan|more 
10270 64 65 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c  detail here]...<
10280 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
10290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
102d0 23 23 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72  ###.Section expr
102e0 65 73 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78  ession expr {*ex
102f0 70 72 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73  pression {expres
10300 73 69 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 42  sion syntax}}..B
10310 75 62 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70  ubbleDiagram exp
10320 72 20 31 0a 42 75 62 62 6c 65 44 69 61 67 72 61  r 1.BubbleDiagra
10330 6d 20 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a  m literal-value.
10340 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
10350 67 6e 65 64 2d 6e 75 6d 62 65 72 0a 42 75 62 62  gned-number.Bubb
10360 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d  leDiagram raise-
10370 66 75 6e 63 74 69 6f 6e 0a 3c 2f 74 63 6c 3e 0a  function.</tcl>.
10380 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
10390 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
103a0 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
103b0 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
103c0 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
103d0 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
103e0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
103f0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
10400 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
10410 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
10420 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
10430 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
10440 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
10450 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
10460 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
10470 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
10480 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10490 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
104a0 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
104b0 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
104c0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
104d0 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
104e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
104f0 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
10500 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
10510 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
10520 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
10530 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10540 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10550 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
10560 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
10570 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
10580 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
10590 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
105a0 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
105b0 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
105c0 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
105d0 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
105e0 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
105f0 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
10600 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
10610 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
10620 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
10630 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
10640 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
10650 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
10660 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10670 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
10680 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
10690 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
106a0 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
106b0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
106c0 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
106d0 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
106e0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
106f0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
10700 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10710 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
10720 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
10730 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
10740 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
10750 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
10760 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
10770 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
10780 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
10790 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
107a0 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 70  htly) than any.p
107b0 72 65 66 69 78 20 75 6e 61 72 79 20 6f 70 65 72  refix unary oper
107c0 61 74 6f 72 20 6f 72 20 61 6e 79 20 62 69 6e 61  ator or any bina
107d0 72 79 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 54 68  ry operator..^Th
107e0 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
107f0 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 65 20  ence set by the 
10800 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
10810 20 6f 76 65 72 72 69 64 65 73 20 74 68 65 0a 63   overrides the.c
10820 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10830 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e determined by 
10840 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  the COLLATE clau
10850 73 65 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63  se in a table.[c
10860 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
10870 5d 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c  ]..See the [coll
10880 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20  ating sequence| 
10890 64 65 74 61 69 6c 65 64 20 64 69 73 63 75 73 73  detailed discuss
108a0 69 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67  ion on collating
108b0 20 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74   sequences].in t
108c0 68 65 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44  he [datatype | D
108d0 61 74 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74  atatype In SQLit
108e0 65 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72  e3] document for
108f0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
10900 72 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c  rmation..</p>..<
10910 74 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70  tcl>hd_puts ".<p
10920 3e 5e 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72  >^The unary oper
10930 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b  ator [Operator +
10940 5d 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e  ] is a no-op.  ^
10950 49 74 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65  It can be applie
10960 64 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75  d.to strings, nu
10970 6d 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20  mbers, blobs or 
10980 4e 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61  NULL and it alwa
10990 79 73 20 72 65 74 75 72 6e 73 20 61 20 72 65 73  ys returns a res
109a0 75 6c 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d  ult.with the sam
109b0 65 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f  e value as the o
109c0 70 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63  perand.</p>"</tc
109d0 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  l>..<p>Note that
109e0 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 76   there are two v
109f0 61 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  ariations of the
10a00 20 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20   equals and not 
10a10 65 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73  equals.operators
10a20 2e 20 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62  .  ^Equals can b
10a30 65 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a  e either..<tcl>.
10a40 68 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74  hd_puts "[Operat
10a50 6f 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74  or =] or [Operat
10a60 6f 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e  or ==]..^The non
10a70 2d 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72  -equals operator
10a80 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b   can be either.[
10a90 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20  Operator !=] or 
10aa0 5b 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26  [Operator {&lt;&
10ab0 67 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65  gt;}]..^The [Ope
10ac0 72 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74  rator ||] operat
10ad0 6f 72 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e  or is \"concaten
10ae0 61 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73  ate\" - it joins
10af0 20 74 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77   together.the tw
10b00 6f 20 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73  o strings of its
10b10 20 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20   operands..^The 
10b20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74  operator [Operat
10b30 6f 72 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68  or %] outputs th
10b40 65 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c  e value of its l
10b50 65 66 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64  eft .operand mod
10b60 75 6c 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70  ulo its right op
10b70 65 72 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  erand.</p>..<p>^
10b80 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  The result of an
10b90 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  y binary operato
10ba0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 6e 75  r is either a nu
10bb0 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 72 20 0a  meric value or .
10bc0 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f 72  NULL, except for
10bd0 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c   the [Operator |
10be0 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e  |] concatenation
10bf0 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68 20   operator which 
10c00 61 6c 77 61 79 73 20 0a 65 76 61 6c 75 61 74 65  always .evaluate
10c10 73 20 74 6f 20 65 69 74 68 65 72 20 4e 55 4c 4c  s to either NULL
10c20 20 6f 72 20 61 20 74 65 78 74 20 76 61 6c 75 65   or a text value
10c30 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67 6d  .</p>"..hd_fragm
10c40 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b 49  ent {isisnot} {I
10c50 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53 20  S operator} {IS 
10c60 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a 68  NOT operator}..h
10c70 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65 20  d_puts "<p>^The 
10c80 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61 6e  [Operator IS] an
10c90 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53 20  d [Operator {IS 
10ca0 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73 20  NOT}] operators 
10cb0 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72 61  work.like [Opera
10cc0 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65 72  tor =] and [Oper
10cd0 61 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74 20  ator !=] except 
10ce0 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74 68  when one or both
10cf0 20 6f 66 20 74 68 65 0a 6f 70 65 72 61 6e 64 73   of the.operands
10d00 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20 74   are NULL. ^In t
10d10 68 69 73 20 63 61 73 65 2c 20 69 66 20 62 6f 74  his case, if bot
10d20 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
10d30 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49 53  ULL, then the.IS
10d40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
10d50 74 65 73 20 74 6f 20 31 20 28 74 72 75 65 29 20  tes to 1 (true) 
10d60 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f  and the IS NOT o
10d70 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
10d80 73 0a 74 6f 20 30 20 28 66 61 6c 73 65 29 2e 20  s.to 0 (false). 
10d90 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ^If one operand 
10da0 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65 20  is NULL and the 
10db0 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74 68  other is not, th
10dc0 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74  en the.IS operat
10dd0 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  or evaluates to 
10de0 30 20 28 66 61 6c 73 65 29 20 61 6e 64 20 74 68  0 (false) and th
10df0 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f  e IS NOT operato
10e00 72 20 69 73 20 31 20 28 74 72 75 65 29 2e 0a 5e  r is 1 (true)..^
10e10 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
10e20 6c 65 20 66 6f 72 20 61 6e 20 49 53 20 6f 72 20  le for an IS or 
10e30 49 53 20 4e 4f 54 20 65 78 70 72 65 73 73 69 6f  IS NOT expressio
10e40 6e 20 74 6f 20 65 76 61 6c 75 61 74 65 20 74 6f  n to evaluate to
10e50 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f 72   NULL..^Operator
10e60 73 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20  s [Operator IS] 
10e70 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49  and [Operator {I
10e80 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68 65  S NOT}] have the
10e90 20 73 61 6d 65 20 0a 70 72 65 63 65 64 65 6e 63   same .precedenc
10ea0 65 20 61 73 20 5b 4f 70 65 72 61 74 6f 72 20 3d  e as [Operator =
10eb0 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ]."..<tcl>hd_fra
10ec0 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75 65 20 7b  gment litvalue {
10ed0 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c 2f  literal value}</
10ee0 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61 6c  tcl>.<h3>Literal
10ef0 20 56 61 6c 75 65 73 3c 2f 68 33 3e 0a 3c 70 3e   Values</h3>.<p>
10f00 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75  .^A literal valu
10f10 65 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  e is a constant 
10f20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 5e 4c  of some kind..^L
10f30 69 74 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61  iteral values ma
10f40 79 20 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66  y be integers, f
10f50 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
10f60 6d 62 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a  mbers, strings,.
10f70 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
10f80 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e  </p>..<p>The syn
10f90 74 61 78 20 66 6f 72 20 69 6e 74 65 67 65 72 20  tax for integer 
10fa0 61 6e 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  and floating poi
10fb0 6e 74 20 6c 69 74 65 72 61 6c 73 20 28 63 6f 6c  nt literals (col
10fc0 6c 65 63 74 69 76 65 6c 79 0a 22 6e 75 6d 65 72  lectively."numer
10fd0 69 63 20 6c 69 74 65 72 61 6c 73 22 29 20 69 73  ic literals") is
10fe0 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66 6f   shown by the fo
10ff0 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d 3a  llowing diagram:
11000 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
11010 65 44 69 61 67 72 61 6d 20 6e 75 6d 65 72 69 63  eDiagram numeric
11020 2d 6c 69 74 65 72 61 6c 3c 2f 74 63 6c 3e 0a 0a  -literal</tcl>..
11030 3c 70 3e 0a 5e 28 49 66 20 61 20 6e 75 6d 65 72  <p>.^(If a numer
11040 69 63 20 6c 69 74 65 72 61 6c 20 68 61 73 20 61  ic literal has a
11050 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 6f   decimal point o
11060 72 20 61 6e 20 65 78 70 6f 6e 65 6e 74 69 61 74  r an exponentiat
11070 69 6f 6e 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e  ion.clause, then
11080 20 69 74 20 69 73 20 61 20 66 6c 6f 61 74 69 6e   it is a floatin
11090 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e  g point literal.
110a0 20 20 4f 74 68 65 72 77 69 73 65 20 69 73 20 69    Otherwise is i
110b0 74 20 69 73 20 61 6e 20 0a 69 6e 74 65 67 65 72  t is an .integer
110c0 20 6c 69 74 65 72 61 6c 2e 29 5e 20 20 5e 54 68   literal.)^  ^Th
110d0 65 20 22 45 22 20 63 68 61 72 61 63 74 65 72 20  e "E" character 
110e0 74 68 61 74 20 62 65 67 69 6e 73 20 74 68 65 20  that begins the 
110f0 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63  exponentiation.c
11100 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f 61 74  lause of a float
11110 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61  ing point litera
11120 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  l can be either 
11130 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72 20 63  upper or lower c
11140 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22 20 63  ase..^(The "." c
11150 68 61 72 61 63 74 65 72 20 69 73 20 61 6c 77 61  haracter is alwa
11160 79 73 20 75 73 65 64 20 0a 61 73 20 74 68 65 20  ys used .as the 
11170 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 65 76  decimal point ev
11180 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61 6c 65  en if the locale
11190 20 73 65 74 74 69 6e 67 20 73 70 65 63 69 66 69   setting specifi
111a0 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69 73 20  es "," for.this 
111b0 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65 20 6f  role - the use o
111c0 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20 64 65  f "," for the de
111d0 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f 75 6c  cimal point woul
111e0 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79 6e 74  d result in.synt
111f0 61 63 74 69 63 20 61 6d 62 69 67 75 69 74 79 2e  actic ambiguity.
11200 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 41 20 73  )^</p>..<p> ^A s
11210 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69  tring constant i
11220 73 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c  s formed by encl
11230 6f 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67  osing the.string
11240 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65   in single quote
11250 73 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c  s (').  ^A singl
11260 65 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74  e quote within t
11270 68 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65  he string can.be
11280 20 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74   encoded by putt
11290 69 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71  ing two single q
112a0 75 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d  uotes in a row -
112b0 20 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43   as in Pascal..C
112c0 2d 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75  -style escapes u
112d0 73 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61  sing the backsla
112e0 73 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  sh character are
112f0 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62   not supported b
11300 65 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20  ecause.they are 
11310 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c  not standard SQL
11320 2e 0a 5e 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73  ..^BLOB literals
11330 20 61 72 65 20 73 74 72 69 6e 67 20 6c 69 74 65   are string lite
11340 72 61 6c 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rals containing 
11350 68 65 78 61 64 65 63 69 6d 61 6c 20 64 61 74 61  hexadecimal data
11360 20 61 6e 64 0a 70 72 65 63 65 64 65 64 20 62 79   and.preceded by
11370 20 61 20 73 69 6e 67 6c 65 20 22 78 22 20 6f 72   a single "x" or
11380 20 22 58 22 20 63 68 61 72 61 63 74 65 72 2e 20   "X" character. 
11390 20 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 3a 3c   ^(For example:<
113a0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
113b0 3e 3c 70 72 65 3e 0a 58 27 35 33 35 31 34 43 36  ><pre>.X'53514C6
113c0 39 37 34 36 35 27 0a 3c 2f 70 72 65 3e 3c 2f 62  97465'.</pre></b
113d0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
113e0 3e 0a 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c  >.^A literal val
113f0 75 65 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74  ue can also be t
11400 68 65 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e  he token "NULL".
11410 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
11420 72 61 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d  ragment varparam
11430 20 70 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d   parameter param
11440 65 74 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72  eters {bound par
11450 61 6d 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70  ameter} {bound p
11460 61 72 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e  arameters}</tcl>
11470 0a 3c 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c  .<h3>Parameters<
11480 2f 68 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69  /h3>.<p>.A "vari
11490 61 62 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65  able" or "parame
114a0 74 65 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69  ter" token.speci
114b0 66 69 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64  fies a placehold
114c0 65 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73  er in the expres
114d0 73 69 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75  sion for a .valu
114e0 65 20 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64  e that is filled
114f0 20 69 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75   in at runtime u
11500 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65  sing the.[sqlite
11510 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20  3_bind_blob() | 
11520 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20  sqlite3_bind()] 
11530 66 61 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20  family of C/C++ 
11540 69 6e 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61  interfaces..Para
11550 6d 65 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20  meters can take 
11560 73 65 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c  several forms:.<
11570 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
11580 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c  >.<table>.<tr>.<
11590 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
115a0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
115b0 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e  >?</b><i>NNN</i>
115c0 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
115d0 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28  20"></td>.<td>^(
115e0 41 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  A question mark 
115f0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75  followed by a nu
11600 6d 62 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20  mber <i>NNN</i> 
11610 68 6f 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72  holds a spot for
11620 20 74 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61   the.NNN-th para
11630 6d 65 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74  meter.  NNN must
11640 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
11650 64 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  d [SQLITE_MAX_VA
11660 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29  RIABLE_NUMBER].)
11670 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  ^.</td>.</tr>.<t
11680 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69  r>.<td align="ri
11690 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ght" valign="top
116a0 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c  "><b>?</b></td><
116b0 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
116c0 74 64 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74  td>.<td>^A quest
116d0 69 6f 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73  ion mark that is
116e0 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79   not followed by
116f0 20 61 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65   a number create
11700 73 20 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69  s a parameter.wi
11710 74 68 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20  th a number one 
11720 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
11730 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74   largest paramet
11740 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64  er number alread
11750 79 20 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20  y assigned..^If 
11760 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70  this means the p
11770 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
11780 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  is greater than.
11790 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
117a0 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74  ABLE_NUMBER], it
117b0 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f   is an error..</
117c0 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
117d0 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
117e0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
117f0 3e 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >:</b><i>AAAA</i
11800 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
11810 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
11820 41 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64  A colon followed
11830 20 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65   by an identifie
11840 72 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73  r name holds a s
11850 70 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69  pot for a .[sqli
11860 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
11870 65 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61  er_name|named pa
11880 72 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68  rameter] with th
11890 65 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a  e name :AAAA.  .
118a0 5e 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65  ^(Named paramete
118b0 72 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62  rs are also numb
118c0 65 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72  ered. The number
118d0 20 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65   assigned is one
118e0 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68   greater than.th
118f0 65 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65  e largest parame
11900 74 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61  ter number alrea
11910 64 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e  dy assigned.)^ ^
11920 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68  If this means th
11930 65 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c  e parameter.woul
11940 64 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20  d be assigned a 
11950 6e 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74  number greater t
11960 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han [SQLITE_MAX_
11970 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
11980 2c 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72  , it is.an error
11990 2e 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  . To avoid confu
119a0 73 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74  sion, it is best
119b0 20 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67   to avoid mixing
119c0 20 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65   named and numbe
119d0 72 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c  red.parameters.<
119e0 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a  /td>.</tr>.<tr>.
119f0 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  <td align="right
11a00 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c  " valign="top"><
11a10 62 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f  b>@</b><i>AAAA</
11a20 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68  i></td><td width
11a30 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e  ="20"></td>.<td>
11a40 5e 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f  ^An "at" sign wo
11a50 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
11a60 20 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74   a colon, except
11a70 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f   that the name o
11a80 66 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f.the parameter 
11a90 63 72 65 61 74 65 64 20 69 73 20 40 41 41 41 41  created is @AAAA
11aa0 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
11ab0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67  >.<td align="rig
11ac0 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ht" valign="top"
11ad0 3e 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41  ><b>$</b><i>AAAA
11ae0 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64  </i></td><td wid
11af0 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74  th="20"></td>.<t
11b00 64 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e  d>^A dollar-sign
11b10 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
11b20 69 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20  identifier name 
11b30 61 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f  also holds a spo
11b40 74 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61  t for a named.pa
11b50 72 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65  rameter with the
11b60 20 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28   name $AAAA.  ^(
11b70 54 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e  The identifier n
11b80 61 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65  ame in this case
11b90 20 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65   can include.one
11ba0 20 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65   or more occurre
11bb0 6e 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64  nces of "::" and
11bc0 20 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73   a suffix enclos
11bd0 65 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f  ed in "(...)" co
11be0 6e 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78  ntaining.any tex
11bf0 74 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69  t at all.)^  Thi
11c00 73 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20  s syntax is the 
11c10 66 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62  form of a variab
11c20 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b  le name in the.[
11c30 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74  http://www.tcl.t
11c40 6b 2f 20 7c 20 54 63 6c 20 70 72 6f 67 72 61 6d  k/ | Tcl program
11c50 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 5d 2e 20  ming language]. 
11c60 20 54 68 65 20 70 72 65 73 65 6e 63 65 0a 6f 66   The presence.of
11c70 20 74 68 69 73 20 73 79 6e 74 61 78 20 72 65 73   this syntax res
11c80 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 66 61  ults from the fa
11c90 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 69  ct that SQLite i
11ca0 73 20 72 65 61 6c 6c 79 20 61 20 0a 5b 54 63 6c  s really a .[Tcl
11cb0 20 65 78 74 65 6e 73 69 6f 6e 5d 20 74 68 61 74   extension] that
11cc0 20 68 61 73 20 65 73 63 61 70 65 64 20 69 6e 74   has escaped int
11cd0 6f 20 74 68 65 20 77 69 6c 64 2e 3c 2f 74 64 3e  o the wild.</td>
11ce0 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
11cf0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
11d00 70 3e 5e 50 61 72 61 6d 65 74 65 72 73 20 74 68  p>^Parameters th
11d10 61 74 20 61 72 65 20 6e 6f 74 20 61 73 73 69 67  at are not assig
11d20 6e 65 64 20 76 61 6c 75 65 73 20 75 73 69 6e 67  ned values using
11d30 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  .[sqlite3_bind_b
11d40 6c 6f 62 28 29 20 7c 20 73 71 6c 69 74 65 33 5f  lob() | sqlite3_
11d50 62 69 6e 64 28 29 5d 20 61 72 65 20 74 72 65 61  bind()] are trea
11d60 74 65 64 0a 61 73 20 4e 55 4c 4c 2e 3c 2f 70 3e  ted.as NULL.</p>
11d70 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
11d80 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  m parameter numb
11d90 65 72 20 69 73 20 73 65 74 20 61 74 20 63 6f 6d  er is set at com
11da0 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74 68 65  pile-time by.the
11db0 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   [SQLITE_MAX_VAR
11dc0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20 6d 61  IABLE_NUMBER] ma
11dd0 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64 69 76  cro.  ^(An indiv
11de0 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65 20  idual [database 
11df0 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 0a 44 20 63  connections].D c
11e00 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d 61  an reduce its ma
11e10 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20  ximum parameter 
11e20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68 65  number below the
11e30 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61   compile-time ma
11e40 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65 20  ximum.using the 
11e50 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28  [sqlite3_limit](
11e60 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  D, [SQLITE_LIMIT
11e70 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
11e80 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  ],...) interface
11e90 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  .)^.</p>..<tcl>h
11ea0 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65 20  d_fragment like 
11eb0 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63 6c  LIKE ESCAPE</tcl
11ec0 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 20 61  >.<h3>The LIKE a
11ed0 6e 64 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72  nd GLOB operator
11ee0 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 4c  s</h3>.<p>^The L
11ef0 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f 65  IKE operator doe
11f00 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74 63  s a pattern matc
11f10 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  hing comparison.
11f20 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74 6f   ^The operand.to
11f30 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
11f40 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e LIKE operator 
11f50 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61 74  contains the pat
11f60 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65 66  tern and the lef
11f70 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20 63  t hand.operand c
11f80 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72 69  ontains the stri
11f90 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
11fa0 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e 2e  nst the pattern.
11fb0 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 22  ..<tcl>hd_puts "
11fc0 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f  ^A percent symbo
11fd0 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68 65  l (\"%\") in the
11fe0 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
11ff0 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65 6e  tches any.sequen
12000 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f  ce of zero or mo
12010 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  re characters in
12020 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e 41   the string.  ^A
12030 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c 22  n underscore.(\"
12040 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45  _\") in the LIKE
12050 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73   pattern matches
12060 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61 72   any single char
12070 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74 72  acter in the.str
12080 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68 65  ing.  ^(Any othe
12090 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74 63  r character matc
120a0 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69 74  hes itself or it
120b0 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63 61  s lower/upper ca
120c0 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28 69  se.equivalent (i
120d0 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73 69  .e. case-insensi
120e0 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e 29  tive matching).)
120f0 5e 20 20 28 41 20 62 75 67 3a 20 5e 53 51 4c 69  ^  (A bug: ^SQLi
12100 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
12110 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
12120 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63  case for ASCII c
12130 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66  haracters by def
12140 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45  ault.  ^The.LIKE
12150 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
12160 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64  e sensitive by d
12170 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f  efault for unico
12180 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68  de characters th
12190 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68  at are.beyond th
121a0 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20  e ASCII range.  
121b0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68  For example,.^th
121c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e  e expression <b>
121d0 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  'a'&nbsp;LIKE&nb
121e0 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52  sp;'A'</b>.is TR
121f0 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69  UE but <b>'&aeli
12200 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  g;'&nbsp;LIKE&nb
12210 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e  sp;'&AElig;'</b>
12220 20 69 73 20 46 41 4c 53 45 2e 29 3c 70 3e 22 3c   is FALSE.)<p>"<
12230 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  /tcl>..<p>^If th
12240 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
12250 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
12260 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 65 78  ent, then the ex
12270 70 72 65 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69  pression.followi
12280 6e 67 20 74 68 65 20 45 53 43 41 50 45 20 6b 65  ng the ESCAPE ke
12290 79 77 6f 72 64 20 6d 75 73 74 20 65 76 61 6c 75  yword must evalu
122a0 61 74 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ate to a string 
122b0 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 0a 61 20  consisting of.a 
122c0 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
122d0 2e 20 5e 54 68 69 73 20 63 68 61 72 61 63 74 65  . ^This characte
122e0 72 20 6d 61 79 20 62 65 20 75 73 65 64 20 69 6e  r may be used in
122f0 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65 72   the LIKE patter
12300 6e 0a 74 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74  n.to include lit
12310 65 72 61 6c 20 70 65 72 63 65 6e 74 20 6f 72 20  eral percent or 
12320 75 6e 64 65 72 73 63 6f 72 65 20 63 68 61 72 61  underscore chara
12330 63 74 65 72 73 2e 20 5e 54 68 65 20 65 73 63 61  cters. ^The esca
12340 70 65 0a 63 68 61 72 61 63 74 65 72 20 66 6f 6c  pe.character fol
12350 6c 6f 77 65 64 20 62 79 20 61 20 70 65 72 63 65  lowed by a perce
12360 6e 74 20 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75  nt symbol (%), u
12370 6e 64 65 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f  nderscore (_), o
12380 72 20 61 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61  r a second.insta
12390 6e 63 65 20 6f 66 20 74 68 65 20 65 73 63 61 70  nce of the escap
123a0 65 20 63 68 61 72 61 63 74 65 72 20 69 74 73 65  e character itse
123b0 6c 66 20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74  lf matches a.lit
123c0 65 72 61 6c 20 70 65 72 63 65 6e 74 20 73 79 6d  eral percent sym
123d0 62 6f 6c 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c  bol, underscore,
123e0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 73 63   or a single esc
123f0 61 70 65 20 63 68 61 72 61 63 74 65 72 2c 0a 72  ape character,.r
12400 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70  espectively...<p
12410 3e 5e 54 68 65 20 69 6e 66 69 78 20 4c 49 4b 45  >^The infix LIKE
12420 20 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d 70   operator is imp
12430 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c  lemented by call
12440 69 6e 67 20 74 68 65 0a 61 70 70 6c 69 63 61 74  ing the.applicat
12450 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ion-defined SQL 
12460 66 75 6e 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28  functions [like(
12470 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
12480 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e  >)] or.[like(<i>
12490 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c  Y</i>,<i>X</i>,<
124a0 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f  i>Z</i>)]</a>.</
124b0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45  p>..<p>^The LIKE
124c0 20 6f 70 65 72 61 74 6f 72 20 63 61 6e 20 62 65   operator can be
124d0 20 6d 61 64 65 20 63 61 73 65 20 73 65 6e 73 69   made case sensi
124e0 74 69 76 65 20 75 73 69 6e 67 20 74 68 65 0a 5b  tive using the.[
124f0 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c  case_sensitive_l
12500 69 6b 65 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e  ike pragma].</p>
12510 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12520 6e 74 20 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63  nt glob GLOB</tc
12530 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20  l>.<p>^The GLOB 
12540 6f 70 65 72 61 74 6f 72 20 69 73 20 73 69 6d 69  operator is simi
12550 6c 61 72 20 74 6f 20 4c 49 4b 45 20 62 75 74 20  lar to LIKE but 
12560 75 73 65 73 20 74 68 65 20 55 6e 69 78 0a 66 69  uses the Unix.fi
12570 6c 65 20 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74  le globbing synt
12580 61 78 20 66 6f 72 20 69 74 73 20 77 69 6c 64 63  ax for its wildc
12590 61 72 64 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c  ards.  ^Also, GL
125a0 4f 42 20 69 73 20 63 61 73 65 0a 73 65 6e 73 69  OB is case.sensi
125b0 74 69 76 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b  tive, unlike LIK
125c0 45 2e 20 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61  E.  ^Both GLOB a
125d0 6e 64 20 4c 49 4b 45 20 6d 61 79 20 62 65 20 70  nd LIKE may be p
125e0 72 65 63 65 64 65 64 20 62 79 0a 74 68 65 20 4e  receded by.the N
125f0 4f 54 20 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e  OT keyword to in
12600 76 65 72 74 20 74 68 65 20 73 65 6e 73 65 20 6f  vert the sense o
12610 66 20 74 68 65 20 74 65 73 74 2e 20 20 5e 54 68  f the test.  ^Th
12620 65 20 69 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70  e infix GLOB .op
12630 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
12640 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
12650 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67   the function.[g
12660 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  lob(<i>Y</i>,<i>
12670 58 3c 2f 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20  X</i>)] and can 
12680 62 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 6f  be modified by o
12690 76 65 72 72 69 64 69 6e 67 0a 74 68 61 74 20 66  verriding.that f
126a0 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  unction.</p>..<t
126b0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
126c0 65 67 65 78 70 20 52 45 47 45 58 50 3c 2f 74 63  egexp REGEXP</tc
126d0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52 45 47 45 58  l>.<p>^The REGEX
126e0 50 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  P operator is a 
126f0 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
12700 6f 72 20 74 68 65 20 72 65 67 65 78 70 28 29 0a  or the regexp().
12710 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20  user function.  
12720 5e 4e 6f 20 72 65 67 65 78 70 28 29 20 75 73 65  ^No regexp() use
12730 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  r function is de
12740 66 69 6e 65 64 20 62 79 20 64 65 66 61 75 6c 74  fined by default
12750 0a 61 6e 64 20 73 6f 20 75 73 65 20 6f 66 20 74  .and so use of t
12760 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12770 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  or will normally
12780 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72   result in an.er
12790 72 6f 72 20 6d 65 73 73 61 67 65 2e 20 20 5e 49  ror message.  ^I
127a0 66 20 61 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e  f a [application
127b0 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
127c0 63 74 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65  ction] named "re
127d0 67 65 78 70 22 0a 69 73 20 61 64 64 65 64 20 61  gexp".is added a
127e0 74 20 72 75 6e 2d 74 69 6d 65 2c 20 74 68 61 74  t run-time, that
127f0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62   function will b
12800 65 20 63 61 6c 6c 65 64 20 69 6e 20 6f 72 64 65  e called in orde
12810 72 0a 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  r.to implement t
12820 68 65 20 52 45 47 45 58 50 20 6f 70 65 72 61 74  he REGEXP operat
12830 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
12840 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68 20  _fragment match 
12850 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  MATCH</tcl>.<p>^
12860 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74  The MATCH operat
12870 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  or is a special 
12880 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 6d  syntax for the m
12890 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74 69  atch().applicati
128a0 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
128b0 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ion.  ^The defau
128c0 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63 74  lt match() funct
128d0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
128e0 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78 63  on.raises an exc
128f0 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e 6f  eption and is no
12900 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c 20  t really useful 
12910 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e 42  for anything..^B
12920 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  ut extensions ca
12930 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6d  n override the m
12940 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  atch() function 
12950 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66 75  with more.helpfu
12960 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c 74  l logic.</p>..<t
12970 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62  cl>hd_fragment b
12980 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c 2f  etween BETWEEN</
12990 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45 54  tcl>.<h3>The BET
129a0 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f 68  WEEN operator</h
129b0 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54 57  3>.<p>^(The BETW
129c0 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20  EEN operator is 
129d0 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76 61  logically equiva
129e0 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20 6f  lent to a pair o
129f0 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 22  f comparisons.."
12a00 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54 57  <i>x</i> <b>BETW
12a10 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69 3e  EEN</b> <i>y</i>
12a20 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 7a   <b>AND</b> <i>z
12a30 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76 61  </i>" is .equiva
12a40 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c 2f  lent to ."<i>x</
12a50 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&gt;=</b><i
12a60 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62  >y</i> <b>AND</b
12a70 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c 74  > <i>x</i><b>&lt
12a80 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22 20  ;=</b><i>z</i>" 
12a90 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74 68  except.that with
12aa0 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c 69   BETWEEN, the <i
12ab0 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f  >x</i> expressio
12ac0 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75 61  n is only evalua
12ad0 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68 65  ted once.)^.^The
12ae0 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20 74   precedence of t
12af0 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61  he BETWEEN opera
12b00 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20  tor is the same 
12b10 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e 63  as the precedenc
12b20 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20 3c  e.as operators <
12b30 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e  b>==</b> and <b>
12b40 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c 49  !=</b> and <b>LI
12b50 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75 70  KE</b> and group
12b60 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  s left to right.
12b70 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
12b80 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65 78  nt case {CASE ex
12b90 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
12ba0 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78 70  <h3>The CASE exp
12bb0 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70 3e  ression</h3>.<p>
12bc0 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  A CASE expressio
12bd0 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65 20  n serves a role 
12be0 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54 48  similar to IF-TH
12bf0 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65 72  EN-ELSE in other
12c00 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e  .programming lan
12c10 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54 68  guages.  ..<p>Th
12c20 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72 65  e optional expre
12c30 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75 72  ssion that occur
12c40 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  s in between the
12c50 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61 6e   CASE keyword an
12c60 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45 4e  d the.first WHEN
12c70 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c 6c   keyword is call
12c80 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65 78  ed the "base" ex
12c90 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72 65  pression. ^There
12ca0 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20 66   are two basic f
12cb0 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53 45  orms.of the CASE
12cc0 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68 6f   expression: tho
12cd0 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20 65  se with a base e
12ce0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
12cf0 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c 70  ose without...<p
12d00 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
12d10 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72 65  out a base expre
12d20 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45 4e  ssion, each WHEN
12d30 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
12d40 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68 65  valuated.and the
12d50 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64 20   result treated 
12d60 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73 74  as a boolean, st
12d70 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20  arting with the 
12d80 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f 6e  leftmost and con
12d90 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20 72  tinuing.to the r
12da0 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
12db0 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
12dc0 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
12dd0 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68  evaluation of th
12de0 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  e THEN.expressio
12df0 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  n that correspon
12e00 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ds to the first 
12e10 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
12e20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20 74  that evaluates t
12e30 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  o.true. ^Or, if 
12e40 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
12e50 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
12e60 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20 74  luate to true, t
12e70 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76 61  he result of.eva
12e80 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
12e90 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
12ea0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
12eb0 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
12ec0 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
12ed0 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
12ee0 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c 20  sions are true, 
12ef0 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c 6c  then the overall
12f00 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
12f10 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65 73  ..<p>^A NULL res
12f20 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ult is considere
12f30 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65 76  d untrue when ev
12f40 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74 65  aluating WHEN te
12f50 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  rms...<p>^In a C
12f60 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65 20  ASE with a base 
12f70 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20  expression, the 
12f80 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  base expression 
12f90 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75 73  is evaluated jus
12fa0 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20 72  t.once and the r
12fb0 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72 65  esult is compare
12fc0 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65 76  d against the ev
12fd0 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63 68  aluation of each
12fe0 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69 6f   WHEN .expressio
12ff0 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  n from left to r
13000 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75 6c  ight. ^The resul
13010 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65 78  t of the CASE ex
13020 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65 20  pression is the 
13030 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74  .evaluation of t
13040 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73 69  he THEN expressi
13050 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
13060 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
13070 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e   WHEN.expression
13080 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63   for which the c
13090 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
130a0 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20  e. ^Or, if none 
130b0 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70 72  of the WHEN.expr
130c0 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65  essions evaluate
130d0 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75 61   to a value equa
130e0 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65 78  l to the base ex
130f0 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72 65  pression, the re
13100 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74 69  sult.of evaluati
13110 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70 72  ng the ELSE expr
13120 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ession, if any. 
13130 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ^If there is no 
13140 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13150 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and.none of the 
13160 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  WHEN expressions
13170 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75 6c   produce a resul
13180 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62  t equal to the b
13190 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 0a  ase expression,.
131a0 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73 75  the overall resu
131b0 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e  lt is NULL...<p>
131c0 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
131d0 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
131e0 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45 4e  n against a WHEN
131f0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
13200 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67 20   same.collating 
13210 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e 69  sequence, affini
13220 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61 6e  ty, and NULL-han
13230 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70 6c  dling rules appl
13240 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73 65  y as if the.base
13250 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
13260 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  WHEN expression 
13270 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c 79  are respectively
13280 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a 72   the left- and.r
13290 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e  ight-hand operan
132a0 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c 62  ds of an <big><b
132b0 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70 65  >=</b></big> ope
132c0 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20 74  rator.</p> ^If t
132d0 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73 73  he base .express
132e0 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  ion is NULL then
132f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
13300 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61 79  he CASE is alway
13310 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f 66  s the result .of
13320 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
13330 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  ELSE expression 
13340 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f 72  if it exists, or
13350 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65 73   NULL if it does
13360 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68 20   not...<p>^Both 
13370 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41 53  forms of the CAS
13380 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  E expression use
13390 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74 2d   lazy, or short-
133a0 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75 61  circuit, .evalua
133b0 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20  tion...<p>^(The 
133c0 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
133d0 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c 6c  between the foll
133e0 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20 65  owing two CASE e
133f0 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74 68  xpressions is th
13400 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69 3e  at .the <i>x</i>
13410 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
13420 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c 79  valuated exactly
13430 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69 72   once in the fir
13440 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20 0a  st example but .
13450 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61 74  might be evaluat
13460 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
13470 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 3a  s in the second:
13480 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69 3e  ..<ul><pre>.<li>
13490 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20 54  CASE x WHEN w1 T
134a0 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20 54  HEN r1 WHEN w2 T
134b0 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45  HEN r2 ELSE r3 E
134c0 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45 4e  ND.<li>CASE WHEN
134d0 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57 48   x=w1 THEN r1 WH
134e0 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32 20  EN x=w2 THEN r2 
134f0 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70 72  ELSE r3 END.</pr
13500 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63 6c  e></ul>)^...<tcl
13510 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 5f  >hd_fragment in_
13520 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72 7d  op {IN operator}
13530 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f   {NOT IN operato
13540 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  r}</tcl>.<h3>The
13550 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f   IN and NOT IN o
13560 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70  perators</h3>.<p
13570 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  >^The IN and NOT
13580 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74 61   IN operators ta
13590 6b 65 20 61 20 73 69 6e 67 6c 65 20 73 63 61 6c  ke a single scal
135a0 61 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68  ar operand on th
135b0 65 0a 6c 65 66 74 20 61 6e 64 20 61 20 76 65 63  e.left and a vec
135c0 74 6f 72 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74  tor operand on t
135d0 68 65 20 72 69 67 68 74 0a 66 6f 72 6d 65 64 20  he right.formed 
135e0 62 79 20 61 6e 20 65 78 70 6c 69 63 69 74 20 6c  by an explicit l
135f0 69 73 74 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  ist of zero or m
13600 6f 72 65 20 73 63 61 6c 61 72 73 20 6f 72 20 62  ore scalars or b
13610 79 20 61 20 0a 73 69 6e 67 6c 65 20 73 75 62 71  y a .single subq
13620 75 65 72 79 2e 0a 5e 57 68 65 6e 20 74 68 65 20  uery..^When the 
13630 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
13640 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
13650 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
13660 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
13670 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
13680 61 20 73 69 6e 67 6c 65 20 72 65 73 75 6c 74 20  a single result 
13690 63 6f 6c 75 6d 6e 2e 0a 5e 57 68 65 6e 20 74 68  column..^When th
136a0 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  e right operand 
136b0 69 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 2c  is an empty set,
136c0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 49   the result of I
136d0 4e 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74  N is false and t
136e0 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 4e 4f 54  he.result of NOT
136f0 20 49 4e 20 69 73 20 74 72 75 65 2c 20 72 65 67   IN is true, reg
13700 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6c  ardless of the l
13710 65 66 74 20 6f 70 65 72 61 6e 64 20 61 6e 64 20  eft operand and 
13720 65 76 65 6e 20 69 66 20 74 68 65 0a 6c 65 66 74  even if the.left
13730 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
13740 2e 0a 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f  ..^(The result o
13750 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49  f an IN or NOT I
13760 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65  N operator is de
13770 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
13780 66 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78  following.matrix
13790 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
137a0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
137b0 3e 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61  >.<th>Left opera
137c0 6e 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c  nd <br>is NULL.<
137d0 74 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64  th>Right operand
137e0 20 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55   <br>contains NU
137f0 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65  LL.<th>Right ope
13800 72 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65  rand <br>is an e
13810 6d 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66  mpty set.<th>Lef
13820 74 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20  t operand found 
13830 3c 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74  <br>within right
13840 20 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73   operand.<th>Res
13850 75 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70  ult of <br>IN op
13860 65 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c  erator.<th>Resul
13870 74 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20  t of <br>NOT IN 
13880 6f 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74  operator.<tr>.<t
13890 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
138a0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
138b0 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
138c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
138d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
138e0 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
138f0 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13900 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13910 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20  ">true.<tr>.<td 
13920 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64  align="center">d
13930 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c  oes not matter.<
13940 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13950 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13960 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20  center">yes.<td 
13970 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13980 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13990 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61  ter">false.<td a
139a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72  lign="center">tr
139b0 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  ue.<tr>.<td alig
139c0 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74  n="center">no.<t
139d0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
139e0 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
139f0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a00 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13a10 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
13a20 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
13a30 3e 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d  >true.<td align=
13a40 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c  "center">false.<
13a50 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
13a60 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
13a70 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
13a80 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13a90 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13aa0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
13ab0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13ac0 4e 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  NULL.<td align="
13ad0 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72  center">NULL.<tr
13ae0 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
13af0 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69  ter">yes.<td ali
13b00 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73  gn="center">does
13b10 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20   not matter.<td 
13b20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13b30 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13b40 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
13b50 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
13b60 63 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64  center">NULL.<td
13b70 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13b80 4e 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  NULL.</table>.</
13b90 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e  center>)^..<p>^N
13ba0 6f 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ote that SQLite 
13bb0 61 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e  allows the paren
13bc0 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66  thesized list of
13bd0 20 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f   scalar values o
13be0 6e 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64  n.the right-hand
13bf0 20 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f   side of an IN o
13c00 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  r NOT IN operato
13c10 72 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79  r to be an empty
13c20 20 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f   list but.most o
13c30 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
13c40 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
13c50 65 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32  es and the SQL92
13c60 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72   standard requir
13c70 65 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f  e.the list to co
13c80 6e 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f  ntain at least o
13c90 6e 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a  ne element.</p>.
13ca0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13cb0 74 20 69 6e 5f 6f 70 20 7b 45 58 49 53 54 53 20  t in_op {EXISTS 
13cc0 6f 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 45  operator} {NOT E
13cd0 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 3c  XISTS operator}<
13ce0 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 45 58  /tcl>.<h3>The EX
13cf0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 3c 2f 68  ISTS operator</h
13d00 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 45 58 49 53  3>..<p>^The EXIS
13d10 54 53 20 6f 70 65 72 61 74 6f 72 20 61 6c 77 61  TS operator alwa
13d20 79 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ys evaluates to 
13d30 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  one of the integ
13d40 65 72 20 76 61 6c 75 65 73 20 30 20 0a 61 6e 64  er values 0 .and
13d50 20 31 2e 20 5e 49 66 20 65 78 65 63 75 74 69 6e   1. ^If executin
13d60 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
13d70 74 65 6d 65 6e 74 20 73 70 65 63 69 66 69 65 64  tement specified
13d80 20 61 73 20 74 68 65 20 72 69 67 68 74 2d 68 61   as the right-ha
13d90 6e 64 20 0a 6f 70 65 72 61 6e 64 20 6f 66 20 74  nd .operand of t
13da0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
13db0 6f 72 20 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  or would return 
13dc0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  one or more rows
13dd0 2c 20 74 68 65 6e 20 74 68 65 0a 45 58 49 53 54  , then the.EXIST
13de0 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
13df0 61 74 65 73 20 74 6f 20 31 2e 20 5e 49 66 20 65  ates to 1. ^If e
13e00 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
13e10 45 43 54 20 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT would return
13e20 0a 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 2c  .no rows at all,
13e30 20 74 68 65 6e 20 74 68 65 20 45 58 49 53 54 53   then the EXISTS
13e40 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61   operator evalua
13e50 74 65 73 20 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e  tes to 0. ..<p>^
13e60 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
13e70 6c 75 6d 6e 73 20 69 6e 20 65 61 63 68 20 72 6f  lumns in each ro
13e80 77 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  w returned by th
13e90 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
13ea0 6e 74 0a 28 69 66 20 61 6e 79 29 20 61 6e 64 20  nt.(if any) and 
13eb0 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c  the specific val
13ec0 75 65 73 20 72 65 74 75 72 6e 65 64 20 68 61 76  ues returned hav
13ed0 65 20 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74  e no effect on t
13ee0 68 65 20 72 65 73 75 6c 74 73 0a 6f 66 20 74 68  he results.of th
13ef0 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f  e EXISTS operato
13f00 72 2e 20 5e 49 6e 20 70 61 72 74 69 63 75 6c 61  r. ^In particula
13f10 72 2c 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 69  r, rows containi
13f20 6e 67 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  ng NULL values a
13f30 72 65 0a 6e 6f 74 20 68 61 6e 64 6c 65 64 20 61  re.not handled a
13f40 6e 79 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66  ny differently f
13f50 72 6f 6d 20 72 6f 77 73 20 77 69 74 68 6f 75 74  rom rows without
13f60 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c   NULL values...<
13f70 68 33 3e 53 63 61 6c 61 72 20 53 75 62 71 75 65  h3>Scalar Subque
13f80 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 41  ries</h3>..<p>^A
13f90 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d   [SELECT] statem
13fa0 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ent enclosed in 
13fb0 70 61 72 65 6e 74 68 65 73 65 73 20 6d 61 79 20  parentheses may 
13fc0 61 70 70 65 61 72 20 61 73 20 61 20 73 63 61 6c  appear as a scal
13fd0 61 72 0a 71 75 61 6e 74 69 74 79 2e 20 5e 41 20  ar.quantity. ^A 
13fe0 5b 53 45 4c 45 43 54 5d 20 75 73 65 64 20 61 73  [SELECT] used as
13ff0 20 61 20 73 63 61 6c 61 72 20 71 75 61 6e 74 69   a scalar quanti
14000 74 79 20 6d 75 73 74 20 72 65 74 75 72 6e 20 61  ty must return a
14010 20 72 65 73 75 6c 74 20 73 65 74 0a 77 69 74 68   result set.with
14020 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
14030 2e 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  . ^The result of
14040 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14050 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  is the value of 
14060 74 68 65 0a 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  the.only column 
14070 69 6e 20 74 68 65 20 66 69 72 73 74 20 72 6f 77  in the first row
14080 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
14090 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
140a0 74 2e 20 5e 49 66 20 74 68 65 20 53 45 4c 45 43  t. ^If the SELEC
140b0 54 20 0a 79 69 65 6c 64 73 20 6d 6f 72 65 20 74  T .yields more t
140c0 68 61 6e 20 6f 6e 65 20 72 65 73 75 6c 74 20 72  han one result r
140d0 6f 77 2c 20 61 6c 6c 20 72 6f 77 73 20 61 66 74  ow, all rows aft
140e0 65 72 20 74 68 65 20 66 69 72 73 74 20 61 72 65  er the first are
140f0 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 0a 74 68   ignored. ^If.th
14100 65 20 53 45 4c 45 43 54 20 79 69 65 6c 64 73 20  e SELECT yields 
14110 6e 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68  no rows, then th
14120 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 65  e value of the e
14130 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c  xpression is NUL
14140 4c 2e 0a 5e 28 54 68 65 20 4c 49 4d 49 54 20 6f  L..^(The LIMIT o
14150 66 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75  f a scalar subqu
14160 65 72 79 20 69 73 20 61 6c 77 61 79 73 20 31 2e  ery is always 1.
14170 0a 41 6e 79 20 6f 74 68 65 72 20 4c 49 4d 49 54  .Any other LIMIT
14180 20 76 61 6c 75 65 20 67 69 76 65 6e 20 69 6e 20   value given in 
14190 74 68 65 20 53 51 4c 20 74 65 78 74 20 69 73 20  the SQL text is 
141a0 69 67 6e 6f 72 65 64 2e 29 5e 0a 0a 3c 70 3e 5e  ignored.)^..<p>^
141b0 41 6c 6c 20 74 79 70 65 73 20 6f 66 20 5b 53 45  All types of [SE
141c0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
141d0 20 69 6e 63 6c 75 64 69 6e 67 20 61 67 67 72 65   including aggre
141e0 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f 75 6e  gate and compoun
141f0 64 20 53 45 4c 45 43 54 0a 71 75 65 72 69 65 73  d SELECT.queries
14200 20 28 71 75 65 72 69 65 73 20 77 69 74 68 20 6b   (queries with k
14210 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 55 4e 49  eywords like UNI
14220 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20 61 72  ON or EXCEPT) ar
14230 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73 63 61  e allowed as sca
14240 6c 61 72 0a 73 75 62 71 75 65 72 69 65 73 2e 0a  lar.subqueries..
14250 0a 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d  .<h3>Table Colum
14260 6e 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70  n Names</h3>..<p
14270 3e 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  >^A column name 
14280 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
14290 65 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20  e names defined 
142a0 69 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  in the [CREATE T
142b0 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
142c0 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
142d0 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20  llowing special 
142e0 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62  identifiers: "<b
142f0 3e 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62  >ROWID</b>",."<b
14300 3e 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c  >OID</b>", or "<
14310 62 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a  b>_ROWID_</b>"..
14320 5e 54 68 65 73 65 20 73 70 65 63 69 61 6c 20 69  ^These special i
14330 64 65 6e 74 69 66 69 65 72 73 20 61 6c 6c 20 64  dentifiers all d
14340 65 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71  escribe the.uniq
14350 75 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28  ue integer key (
14360 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73  the [rowid]) ass
14370 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65  ociated with eve
14380 72 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79  ry .row of every
14390 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 70 65   table..^The spe
143a0 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
143b0 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 74   only refer to t
143c0 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20 74 68  he row key if th
143d0 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e [CREATE TABLE]
143e0 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20  .statement does 
143f0 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72 65 61  not define a rea
14400 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 74 68  l column with th
14410 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e 54 68  e same name..^Th
14420 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65 20 75  e rowid can be u
14430 73 65 64 20 61 6e 79 77 68 65 72 65 20 61 20 72  sed anywhere a r
14440 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20 63 61  egular.column ca
14450 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a  n be used.</p>..
14460 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
14470 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 61 73  tatement used as
14480 20 65 69 74 68 65 72 20 61 20 73 63 61 6c 61 72   either a scalar
14490 20 73 75 62 71 75 65 72 79 20 6f 72 20 61 73 20   subquery or as 
144a0 74 68 65 20 0a 72 69 67 68 74 2d 68 61 6e 64 20  the .right-hand 
144b0 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
144c0 2c 20 4e 4f 54 20 49 4e 20 6f 72 20 45 58 49 53  , NOT IN or EXIS
144d0 54 53 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  TS expression ma
144e0 79 20 63 6f 6e 74 61 69 6e 20 0a 72 65 66 65 72  y contain .refer
144f0 65 6e 63 65 73 20 74 6f 20 63 6f 6c 75 6d 6e 73  ences to columns
14500 20 69 6e 20 74 68 65 20 6f 75 74 65 72 20 71 75   in the outer qu
14510 65 72 79 2e 20 53 75 63 68 20 61 20 73 75 62 71  ery. Such a subq
14520 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 73  uery is known as
14530 0a 61 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75  .a correlated su
14540 62 71 75 65 72 79 2e 20 5e 41 20 63 6f 72 72 65  bquery. ^A corre
14550 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
14560 73 20 72 65 65 76 61 6c 75 61 74 65 64 20 65 61  s reevaluated ea
14570 63 68 20 74 69 6d 65 0a 69 74 73 20 72 65 73 75  ch time.its resu
14580 6c 74 20 69 73 20 72 65 71 75 69 72 65 64 2e 20  lt is required. 
14590 5e 41 6e 20 75 6e 63 6f 72 72 65 6c 61 74 65 64  ^An uncorrelated
145a0 20 73 75 62 71 75 65 72 79 20 69 73 20 65 76 61   subquery is eva
145b0 6c 75 61 74 65 64 20 6f 6e 6c 79 20 6f 6e 63 65  luated only once
145c0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
145d0 72 65 75 73 65 64 20 61 73 20 6e 65 63 65 73 73  reused as necess
145e0 61 72 79 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ary...<tcl>hd_fr
145f0 61 67 6d 65 6e 74 20 63 61 73 74 65 78 70 72 20  agment castexpr 
14600 7b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  {CAST expression
14610 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 41 53 54  }</tcl>.<h3>CAST
14620 20 65 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   expressions</h3
14630 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20 65 78 70  >..<p>A CAST exp
14640 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
14650 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  to convert the v
14660 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65 78 70 72  alue of &lt;expr
14670 26 67 74 3b 20 74 6f 20 0a 61 20 64 69 66 66 65  &gt; to .a diffe
14680 72 65 6e 74 20 5b 73 74 6f 72 61 67 65 20 63 6c  rent [storage cl
14690 61 73 73 5d 20 69 6e 20 61 20 73 69 6d 69 6c 61  ass] in a simila
146a0 72 20 77 61 79 20 74 6f 20 74 68 65 20 63 6f 6e  r way to the con
146b0 76 65 72 73 69 6f 6e 20 74 68 61 74 20 74 61 6b  version that tak
146c0 65 73 0a 70 6c 61 63 65 20 77 68 65 6e 20 61 20  es.place when a 
146d0 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79  [column affinity
146e0 5d 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  ] is applied to 
146f0 61 20 76 61 6c 75 65 2e 20 5e 41 70 70 6c 69 63  a value. ^Applic
14700 61 74 69 6f 6e 20 6f 66 20 61 20 43 41 53 54 0a  ation of a CAST.
14710 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 64 69  expression is di
14720 66 66 65 72 65 6e 74 20 74 6f 20 61 70 70 6c 69  fferent to appli
14730 63 61 74 69 6f 6e 20 6f 66 20 61 20 63 6f 6c 75  cation of a colu
14740 6d 6e 20 61 66 66 69 6e 69 74 79 2c 20 61 73 0a  mn affinity, as.
14750 77 69 74 68 20 61 20 43 41 53 54 20 65 78 70 72  with a CAST expr
14760 65 73 73 69 6f 6e 20 74 68 65 20 73 74 6f 72 61  ession the stora
14770 67 65 20 63 6c 61 73 73 20 63 6f 6e 76 65 72 73  ge class convers
14780 69 6f 6e 20 69 73 20 66 6f 72 63 65 64 20 65 76  ion is forced ev
14790 65 6e 20 0a 69 66 20 69 74 20 69 73 20 6c 6f 73  en .if it is los
147a0 73 79 20 61 6e 64 20 69 72 72 72 65 76 65 72 73  sy and irrrevers
147b0 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ible...<p>^If th
147c0 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74 3b 65  e value of &lt;e
147d0 78 70 72 26 67 74 3b 20 69 73 20 4e 55 4c 4c 2c  xpr&gt; is NULL,
147e0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
147f0 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
14800 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
14810 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
14820 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
14830 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
14840 74 20 76 61 6c 75 65 0a 69 73 20 64 65 74 65 72  t value.is deter
14850 6d 69 6e 65 64 20 62 79 20 61 70 70 6c 79 69 6e  mined by applyin
14860 67 20 74 68 65 20 5b 72 75 6c 65 73 20 66 6f 72  g the [rules for
14870 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c   determining col
14880 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 74 6f  umn affinity] to
14890 0a 74 68 65 20 26 6c 74 3b 74 79 70 65 2d 6e 61  .the &lt;type-na
148a0 6d 65 26 67 74 3b 20 73 70 65 63 69 66 69 65 64  me&gt; specified
148b0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
148c0 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  CAST expression.
148d0 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
148e0 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68 3e 20 41  1>.<tr>.  <th> A
148f0 66 66 69 6e 69 74 79 20 6f 66 20 26 6c 74 3b 74  ffinity of &lt;t
14900 79 70 65 2d 6e 61 6d 65 26 67 74 3b 0a 20 20 3c  ype-name&gt;.  <
14910 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f 6e 20 50  th> Conversion P
14920 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72 3e 0a 20  rocessing.<tr>. 
14930 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74   <td> NONE .  <t
14940 64 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 76 61  d> ^Casting a va
14950 6c 75 65 20 74 6f 20 61 20 26 6c 74 3b 74 79 70  lue to a &lt;typ
14960 65 2d 6e 61 6d 65 26 67 74 3b 20 77 69 74 68 20  e-name&gt; with 
14970 6e 6f 20 61 66 66 69 6e 69 74 79 20 63 61 75 73  no affinity caus
14980 65 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a  es the value to.
14990 20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69    be converted i
149a0 6e 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61  nto a BLOB.  ^Ca
149b0 73 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20  sting to a BLOB 
149c0 63 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73  consists of firs
149d0 74 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20  t casting.  the 
149e0 76 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e  value to TEXT in
149f0 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20   the [encoding] 
14a00 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
14a10 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e  connection, then
14a20 0a 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  .  interpreting 
14a30 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79  the resulting by
14a40 74 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61  te sequence as a
14a50 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66   BLOB instead of
14a60 20 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a   as TEXT...<tr>.
14a70 20 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74    <td> TEXT.  <t
14a80 64 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c  d> ^To cast a BL
14a90 4f 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54  OB value to TEXT
14aa0 2c 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  , the sequence o
14ab0 66 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b  f bytes that mak
14ac0 65 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20  e up the.  BLOB 
14ad0 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
14ae0 73 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75  s text encoded u
14af0 73 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  sing the databas
14b00 65 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70  e encoding..  <p
14b10 3e 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e  >.   ^Casting an
14b20 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
14b30 20 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54   value into TEXT
14b40 20 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c   renders the val
14b50 75 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20  ue as if via .  
14b60 20 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69    [sqlite3_snpri
14b70 6e 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68  ntf()] except th
14b80 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
14b90 20 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b   TEXT uses the [
14ba0 65 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20  encoding] of.   
14bb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14bc0 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a  nnection...<tr>.
14bd0 20 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74    <td> REAL.  <t
14be0 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  d> ^When casting
14bf0 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
14c00 20 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c   a REAL, the val
14c10 75 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76  ue is first conv
14c20 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20  erted to.       
14c30 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70   TEXT..       <p
14c40 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61  >^When casting a
14c50 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52   TEXT value to R
14c60 45 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74  EAL, the longest
14c70 20 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78   possible prefix
14c80 20 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20   of.        the 
14c90 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
14ca0 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
14cb0 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69   a real number i
14cc0 73 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d  s extracted from
14cd0 0a 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58  .        the TEX
14ce0 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  T value and the 
14cf0 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65  remainder ignore
14d00 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20  d. ^Any leading 
14d10 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20  spaces in the.  
14d20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65        TEXT value
14d30 20 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65   are ignored whe
14d40 6e 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f  n converging fro
14d50 6d 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20  m TEXT to REAL. 
14d60 5e 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20  ^(If there is.  
14d70 20 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20        no prefix 
14d80 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65  that can be inte
14d90 72 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61  rpreted as a rea
14da0 6c 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  l number, the re
14db0 73 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20  sult of the.    
14dc0 20 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69      conversion i
14dd0 73 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20  s 0.0.)^..<tr>. 
14de0 20 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20   <td> INTEGER.  
14df0 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69  <td> ^When casti
14e00 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20  ng a BLOB value 
14e10 74 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20  to INTEGER, the 
14e20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63  value is first c
14e30 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20  onverted to.    
14e40 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20      TEXT..      
14e50 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e   <p>^When castin
14e60 67 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74  g a TEXT value t
14e70 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c  o INTEGER, the l
14e80 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  ongest possible 
14e90 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20  prefix of.      
14ea0 20 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74    the value that
14eb0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14ec0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14ed0 72 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72  r number is extr
14ee0 61 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20  acted from.     
14ef0 20 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75     the TEXT valu
14f00 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
14f10 64 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e  der ignored. ^An
14f20 79 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73  y leading spaces
14f30 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20   in the.        
14f40 54 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20  TEXT value when 
14f50 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
14f60 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20  TEXT to INTEGER 
14f70 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66  are ignored. ^If
14f80 20 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69   there.        i
14f90 73 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74  s no prefix that
14fa0 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
14fb0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
14fc0 72 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65  r number, the re
14fd0 73 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20  sult.        of 
14fe0 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
14ff0 73 20 30 2e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e  s 0...      <p>^
15000 41 20 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c  A cast of a REAL
15010 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49   value into an I
15020 4e 54 45 47 45 52 20 77 69 6c 6c 20 74 72 75 6e  NTEGER will trun
15030 63 61 74 65 20 74 68 65 20 66 72 61 63 74 69 6f  cate the fractio
15040 6e 61 6c 0a 20 20 20 20 20 20 70 61 72 74 20 6f  nal.      part o
15050 66 20 74 68 65 20 52 45 41 4c 2e 20 20 5e 49 66  f the REAL.  ^If
15060 20 61 20 52 45 41 4c 20 69 73 20 74 6f 6f 20 6c   a REAL is too l
15070 61 72 67 65 20 74 6f 20 62 65 20 72 65 70 72 65  arge to be repre
15080 73 65 6e 74 65 64 20 61 73 20 61 6e 20 0a 20 20  sented as an .  
15090 20 20 20 20 49 4e 54 45 47 45 52 20 74 68 65 6e      INTEGER then
150a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
150b0 68 65 20 63 61 73 74 20 69 73 20 74 68 65 20 6c  he cast is the l
150c0 61 72 67 65 73 74 20 6e 65 67 61 74 69 76 65 20  argest negative 
150d0 69 6e 74 65 67 65 72 3a 20 0a 20 20 20 20 20 20  integer: .      
150e0 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
150f0 35 38 30 38 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74  5808...<tr>.  <t
15100 64 3e 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64  d> NUMERIC.  <td
15110 3e 20 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58  > ^Casting a TEX
15120 54 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20  T or BLOB value 
15130 69 6e 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72  into NUMERIC fir
15140 73 74 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64  st does a forced
15150 0a 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  .   conversion i
15160 6e 74 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65  nto REAL but the
15170 6e 20 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72  n further conver
15180 74 73 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  ts the result in
15190 74 6f 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20  to INTEGER if.  
151a0 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65   and only if the
151b0 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d   conversion from
151c0 20 52 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52   REAL to INTEGER
151d0 20 69 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64   is lossless and
151e0 20 72 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20   reversible..   
151f0 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
15200 20 63 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69   context in SQLi
15210 74 65 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d  te where the NUM
15220 45 52 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52  ERIC and INTEGER
15230 20 5b 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20   [affinities].  
15240 20 62 65 68 61 76 65 20 64 69 66 66 65 72 65 6e   behave differen
15250 74 6c 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73  tly..   <p> ^Cas
15260 74 69 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49  ting a REAL or I
15270 4e 54 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20  NTEGER value to 
15280 4e 55 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d  NUMERIC is a no-
15290 6f 70 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65  op, even if a re
152a0 61 6c 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c  al.   value coul
152b0 64 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20  d be losslessly 
152c0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20  converted to an 
152d0 69 6e 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a  integer...</tr>.
152e0 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e  .</table>..<p>^N
152f0 6f 74 65 20 74 68 61 74 20 74 68 65 20 72 65 73  ote that the res
15300 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67  ult from casting
15310 20 61 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61   any non-BLOB va
15320 6c 75 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42  lue into a .BLOB
15330 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result 
15340 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79  from casting any
15350 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f   BLOB value into
15360 20 61 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75   a non-BLOB valu
15370 65 0a 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  e.may be differe
15380 6e 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  nt depending on 
15390 77 68 65 74 68 65 72 20 74 68 65 20 64 61 74 61  whether the data
153a0 62 61 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20  base [encoding] 
153b0 69 73 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36  is UTF-8,.UTF-16
153c0 62 65 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e  be, or UTF-16le.
153d0 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
153e0 65 6e 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20  ent booleanexpr 
153f0 7b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  {boolean express
15400 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42  ion}</tcl>.<h3>B
15410 6f 6f 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f  oolean Expressio
15420 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ns</h3>..<p>The 
15430 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
15440 74 75 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f  tures several co
15450 6e 74 65 78 74 73 20 77 68 65 72 65 20 61 6e 20  ntexts where an 
15460 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65  expression is .e
15470 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
15480 20 72 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65   result converte
15490 64 20 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28  d to a boolean (
154a0 74 72 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76  true or false) v
154b0 61 6c 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74  alue. These.cont
154c0 65 78 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c  exts are:..  <ul
154d0 3e 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57  >.    <li> the W
154e0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61  HERE clause of a
154f0 20 53 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20   SELECT, UPDATE 
15500 6f 72 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  or DELETE statem
15510 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68  ent,.    <li> th
15520 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c  e ON or USING cl
15530 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69  ause of a join i
15540 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
15550 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
15560 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
15570 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
15580 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e  tement,.    <li>
15590 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155a0 20 6f 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67   of an SQL trigg
155b0 65 72 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e  er, and.    <li>
155c0 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   the WHEN clause
155d0 20 6f 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73   or clauses of s
155e0 6f 6d 65 20 43 41 53 45 20 65 78 70 72 65 73 73  ome CASE express
155f0 69 6f 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c  ions..  </ul>..<
15600 70 3e 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74  p>^(To convert t
15610 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e  he results of an
15620 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20   SQL expression 
15630 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  to a boolean val
15640 75 65 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74  ue, SQLite.first
15650 20 63 61 73 74 73 20 74 68 65 20 72 65 73 75 6c   casts the resul
15660 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76  t to a NUMERIC v
15670 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65  alue in the same
15680 20 77 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54   way as a .[CAST
15690 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20   expression]. A 
156a0 4e 55 4c 4c 20 6f 72 20 7a 65 72 6f 20 76 61 6c  NULL or zero val
156b0 75 65 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75  ue (integer valu
156c0 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  e 0 or real valu
156d0 65 20 30 2e 30 29 20 69 73 0a 63 6f 6e 73 69 64  e 0.0) is.consid
156e0 65 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65  ered to be false
156f0 2e 20 41 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  . All other valu
15700 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
15710 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28  d true.)^..<p>^(
15720 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
15730 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c 20 30 2e   values NULL, 0.
15740 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73 68 27 20  0, 0, 'english' 
15750 61 6e 64 20 27 30 27 20 61 72 65 20 61 6c 6c 20  and '0' are all 
15760 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f 20 62 65  considered.to be
15770 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56 61 6c 75   false.)^ ^(Valu
15780 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e 31 2c 20  es 1, 1.0, 0.1, 
15790 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e 67 6c 69  -0.1 and '1engli
157a0 73 68 27 20 61 72 65 20 63 6f 6e 73 69 64 65 72  sh' are consider
157b0 65 64 20 74 6f 20 0a 62 65 20 74 72 75 65 2e 29  ed to .be true.)
157c0 5e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ^..<h3>Functions
157d0 3c 2f 68 33 3e 0a 3c 70 3e 5e 42 6f 74 68 20 5b  </h3>.<p>^Both [
157e0 63 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d  corefunc|simple]
157f0 20 61 6e 64 20 5b 61 67 67 66 75 6e 63 7c 61 67   and [aggfunc|ag
15800 67 72 65 67 61 74 65 5d 20 66 75 6e 63 74 69 6f  gregate] functio
15810 6e 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ns are supported
15820 2e 0a 28 46 6f 72 20 70 72 65 73 65 6e 74 61 74  ..(For presentat
15830 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73 69  ion purposes, si
15840 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  mple functions a
15850 72 65 20 66 75 72 74 68 65 72 20 73 75 62 64 69  re further subdi
15860 76 69 64 65 64 20 69 6e 74 6f 0a 5b 63 6f 72 65  vided into.[core
15870 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e 63  func | core func
15880 74 69 6f 6e 73 5d 20 61 6e 64 20 5b 64 61 74 65  tions] and [date
15890 66 75 6e 63 20 7c 20 64 61 74 65 2d 74 69 6d 65  func | date-time
158a0 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 29 0a 5e 41   functions].).^A
158b0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
158c0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
158d0 61 6e 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  any expression. 
158e0 20 5e 53 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f   ^Simple functio
158f0 6e 73 20 72 65 74 75 72 6e 0a 61 20 72 65 73 75  ns return.a resu
15900 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62  lt immediately b
15910 61 73 65 64 20 6f 6e 20 74 68 65 69 72 20 69 6e  ased on their in
15920 70 75 74 73 2e 20 20 5e 41 67 67 72 65 67 61 74  puts.  ^Aggregat
15930 65 20 66 75 6e 63 74 69 6f 6e 73 0a 6d 61 79 20  e functions.may 
15940 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20  only be used in 
15950 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
15960 6e 74 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20  nt.  ^Aggregate 
15970 66 75 6e 63 74 69 6f 6e 73 20 63 6f 6d 70 75 74  functions comput
15980 65 0a 74 68 65 69 72 20 72 65 73 75 6c 74 20 61  e.their result a
15990 63 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 6f  cross all rows o
159a0 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
159b0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
159c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15a00 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
15a10 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
15a20 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
15a30 63 6f 72 65 66 75 6e 63 7d 0a 70 72 6f 63 20 66  corefunc}.proc f
15a40 75 6e 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b  uncdef {syntax k
15a50 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a  eywords desc} {.
15a60 20 20 68 64 5f 70 75 74 73 20 7b 3c 74 72 3e 7d    hd_puts {<tr>}
15a70 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
15a80 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
15a90 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20  m $syntax] {<br 
15aa0 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67  />} syntax.  reg
15ab0 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a  sub -all {\(([^*
15ac0 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20  )]+)\)} $syntax 
15ad0 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79  {(<i>\1</i>)} sy
15ae0 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
15af0 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b  ll {,} $syntax {
15b00 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78  </i>,<i>} syntax
15b10 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
15b20 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24  <i>\.\.\.</i>} $
15b30 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e  syntax {...} syn
15b40 74 61 78 0a 20 20 68 64 5f 70 75 74 73 20 22 3c  tax.  hd_puts "<
15b50 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c  td valign=\"top\
15b60 22 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68 74 5c  " align=\"right\
15b70 22 20 77 69 64 74 68 3d 5c 22 31 32 30 5c 22 3e  " width=\"120\">
15b80 22 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  ".  if {[llength
15b90 20 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20   $keywords]==0} 
15ba0 7b 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61  {.    regexp {[a
15bb0 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e  -z_]+} $syntax n
15bc0 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d  ame.    hd_fragm
15bd0 65 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65  ent $name *$name
15be0 20 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20   "${name}() SQL 
15bf0 66 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c  function".  } el
15c00 73 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61  se {.    set fra
15c10 67 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b  gname [lindex $k
15c20 65 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72  eywords 0].    r
15c30 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d  egsub -all {[^a-
15c40 7a 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d  z]} $fragname {}
15c50 20 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64   fragname.    hd
15c60 5f 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e  _fragment $fragn
15c70 61 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f  ame.    eval hd_
15c80 6b 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67  keywords [string
15c90 20 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b   map {\n { }} $k
15ca0 65 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68  eywords].  }.  h
15cb0 64 5f 70 75 74 73 20 22 24 73 79 6e 74 61 78 3c  d_puts "$syntax<
15cc0 2f 74 64 3e 22 0a 20 20 68 64 5f 70 75 74 73 20  /td>".  hd_puts 
15cd0 7b 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  {<td valign="top
15ce0 22 3e 7d 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65  ">}.  hd_resolve
15cf0 20 24 64 65 73 63 0a 20 20 68 64 5f 70 75 74 73   $desc.  hd_puts
15d00 20 7b 3c 2f 74 64 3e 3c 2f 74 72 3e 7d 0a 7d 0a   {</td></tr>}.}.
15d10 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63  </tcl>..<p>The c
15d20 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ore functions sh
15d30 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
15d40 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
15d50 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c  lt. .[datefunc |
15d60 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69 6d 65   Date &amp; Time
15d70 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 0a   functions] and.
15d80 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65  [aggfunc | aggre
15d90 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  gate functions] 
15da0 61 72 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 73  are documented s
15db0 65 70 61 72 61 74 65 6c 79 2e 20 20 41 6e 0a 61  eparately.  An.a
15dc0 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 64  pplication may d
15dd0 65 66 69 6e 65 20 61 64 64 69 74 69 6f 6e 61 6c  efine additional
15de0 0a 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74  .functions writt
15df0 65 6e 20 69 6e 20 43 20 61 6e 64 20 61 64 64 65  en in C and adde
15e00 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
15e10 65 20 65 6e 67 69 6e 65 20 75 73 69 6e 67 0a 74  e engine using.t
15e20 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he [sqlite3_crea
15e30 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20 41  te_function()] A
15e40 50 49 2e 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20  PI.</p>..<table 
15e50 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64  border=0 cellpad
15e60 64 69 6e 67 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66  ding=10>.<tcl>.f
15e70 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29 7d 20  uncdef {abs(X)} 
15e80 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62 73 28  {} {.  ^The abs(
15e90 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
15ea0 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75 74 65  rns the absolute
15eb0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6e 75   value of the nu
15ec0 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65 6e 74  meric.  argument
15ed0 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72 65 74   X.  ^Abs(X) ret
15ee0 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58 20 69  urns NULL if X i
15ef0 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41 62 73  s NULL. .  ^(Abs
15f00 28 58 29 20 72 65 74 75 72 6e 20 30 2e 30 20 69  (X) return 0.0 i
15f10 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20  f X is a string 
15f20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61 74 20 63  or blob.  that c
15f30 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
15f40 65 64 20 74 6f 20 61 20 6e 75 6d 65 72 69 63 20  ed to a numeric 
15f50 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66 20 58 20  value.)^  ^If X 
15f60 69 73 20 74 68 65 20 0a 20 20 69 6e 74 65 67 65  is the .  intege
15f70 72 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34  r -9223372036854
15f80 37 37 35 38 30 37 20 74 68 65 6e 20 61 62 73 28  775807 then abs(
15f90 58 29 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74  X) throws an int
15fa0 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 0a 20 20  eger overflow.  
15fb0 65 72 72 6f 72 20 73 69 6e 63 65 20 74 68 65 72  error since ther
15fc0 65 20 69 73 20 6e 6f 20 65 71 75 69 76 61 6c 65  e is no equivale
15fd0 6e 74 20 70 6f 73 69 74 69 76 65 20 36 34 2d 62  nt positive 64-b
15fe0 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e  it two complemen
15ff0 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63  t value..}..func
16000 64 65 66 20 7b 63 68 61 6e 67 65 73 28 29 7d 20  def {changes()} 
16010 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63 68 61 6e  {} {.  ^The chan
16020 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ges() function r
16030 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
16040 72 20 6f 66 20 64 61 74 61 62 61 73 65 20 72 6f  r of database ro
16050 77 73 20 74 68 61 74 20 77 65 72 65 20 63 68 61  ws that were cha
16060 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73 65 72 74  nged.  or insert
16070 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
16080 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
16090 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20 49 4e 53  ly completed INS
160a0 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a 20 20 6f  ERT, DELETE,.  o
160b0 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
160c0 6e 74 2c 20 65 78 63 6c 75 73 69 76 65 20 6f 66  nt, exclusive of
160d0 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 6c   statements in l
160e0 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72 69 67 67  ower-level trigg
160f0 65 72 73 2e 0a 20 20 5e 54 68 65 20 63 68 61 6e  ers..  ^The chan
16100 67 65 73 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ges() SQL functi
16110 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
16120 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69  around the [sqli
16130 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20  te3_changes()]. 
16140 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 20   C/C++ function 
16150 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c 6c 6f 77  and hence follow
16160 73 20 74 68 65 20 73 61 6d 65 20 72 75 6c 65 73  s the same rules
16170 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67 20 63 68   for counting ch
16180 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65  anges..}..funcde
16190 66 20 7b 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e  f {char(X1,X2,..
161a0 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  .,XN)} {} {.  ^T
161b0 68 65 20 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e  he char(X1,X2,..
161c0 2e 2c 58 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  .,XN) function r
161d0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
161e0 63 6f 6d 70 6f 73 65 64 20 6f 66 20 63 68 61 72  composed of char
161f0 61 63 74 65 72 73 20 68 61 76 69 6e 67 20 74 68  acters having th
16200 65 0a 20 20 20 75 6e 69 63 6f 64 65 20 63 6f 64  e.   unicode cod
16210 65 20 70 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f  e point values o
16220 66 20 69 6e 74 65 67 65 72 73 20 58 31 20 74 68  f integers X1 th
16230 72 6f 75 67 68 20 58 4e 2c 20 72 65 73 70 65 63  rough XN, respec
16240 74 69 76 65 6c 79 2e 0a 7d 0a 0a 66 75 6e 63 64  tively..}..funcd
16250 65 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59  ef {coalesce(X,Y
16260 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,...)} {} {.  ^T
16270 68 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75  he coalesce() fu
16280 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
16290 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72   copy of its fir
162a0 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75  st non-NULL argu
162b0 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20  ment, or.  NULL 
162c0 69 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73  if all arguments
162d0 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61   are NULL.  ^Coa
162e0 6c 65 73 63 65 28 29 20 6d 75 73 74 20 62 65 20  lesce() must be 
162f0 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61 72  at least .  2 ar
16300 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e 63  guments..}..func
16310 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d 20  def {glob(X,Y)} 
16320 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f 62  {} {.  ^The glob
16330 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 69  (X,Y) function i
16340 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  s equivalent to 
16350 74 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f 6e  the.  expression
16360 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f 62   "<b>Y GLOB X</b
16370 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20  >"..  Note that 
16380 74 68 65 20 58 20 61 6e 64 20 59 20 61 72 67 75  the X and Y argu
16390 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65 72 73  ments are revers
163a0 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28 29  ed in the glob()
163b0 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c 61   function.  rela
163c0 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66 69  tive to the infi
163d0 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f  x [GLOB] operato
163e0 72 2e 0a 20 20 5e 49 66 20 74 68 65 20 5b 73 71  r..  ^If the [sq
163f0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
16400 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61  ction()] interfa
16410 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20  ce is used to.  
16420 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c 6f  override the glo
16430 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  b(X,Y) function 
16440 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61 74  with an alternat
16450 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ive implementati
16460 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b 47  on then.  the [G
16470 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77 69  LOB] operator wi
16480 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c  ll invoke the al
16490 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d  ternative implem
164a0 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  entation..}..fun
164b0 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59  cdef {ifnull(X,Y
164c0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69  )} {} {.  ^The i
164d0 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
164e0 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20   returns a copy 
164f0 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e  of its first non
16500 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20  -NULL argument, 
16510 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74  or.  NULL if bot
16520 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  h arguments are 
16530 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29  NULL.  ^Ifnull()
16540 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63 74   must have exact
16550 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a  ly 2 arguments..
16560 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20    ^The ifnull() 
16570 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
16580 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65  valent to [coale
16590 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20  sce()] with two 
165a0 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75  arguments..}..fu
165b0 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c 59  ncdef {instr(X,Y
165c0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69  )} {} {.  ^The i
165d0 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74 69  nstr(X,Y) functi
165e0 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69 72  on finds the fir
165f0 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66  st occurrence of
16600 20 73 74 72 69 6e 67 20 59 20 77 69 74 68 69 6e   string Y within
16610 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e 64   .  string X and
16620 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
16630 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68 61  ber of prior cha
16640 72 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c 20  racters plus 1, 
16650 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73 20 6e  or 0 if.  Y is n
16660 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69 74  owhere found wit
16670 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69 66  hin X..  ^Or, if
16680 20 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f 74   X and Y are bot
16690 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69 6e  h BLOBs, then in
166a0 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73  str(X,Y) returns
166b0 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61 6e   one.  more than
166c0 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74 65   the number byte
166d0 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66  s prior to the f
166e0 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20  irst occurrence 
166f0 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20 20  of Y, or 0 if.  
16700 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75 72  Y does not occur
16710 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e   anywhere within
16720 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20 61   X..  ^If both a
16730 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20 59  rguments X and Y
16740 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20 61   to instr(X,Y) a
16750 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20  re non-NULL and 
16760 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20 20  are not BLOBs.  
16770 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69 6e  then both are in
16780 74 65 72 70 72 65 74 65 64 20 61 73 20 73 74 72  terpreted as str
16790 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74 68  ings..  ^If eith
167a0 65 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e 55  er X or Y are NU
167b0 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59 29  LL in instr(X,Y)
167c0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
167d0 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e   is NULL..}..fun
167e0 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d  cdef {hex(X)} {}
167f0 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20   {.  ^The hex() 
16800 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72  function interpr
16810 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  ets its argument
16820 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72   as a BLOB and r
16830 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e  eturns.  a strin
16840 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20 75  g which is the u
16850 70 70 65 72 2d 63 61 73 65 20 68 65 78 61 64 65  pper-case hexade
16860 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20  cimal rendering 
16870 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  of the content o
16880 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d  f.  that blob..}
16890 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f  ..funcdef {last_
168a0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20  insert_rowid()} 
168b0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74  {} {.  ^The last
168c0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
168d0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
168e0 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f   the [ROWID].  o
168f0 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69  f the last row i
16900 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64  nsert from the d
16910 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
16920 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64  on which invoked
16930 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e   the.  function.
16940 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73  .  ^The last_ins
16950 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20  ert_rowid() SQL 
16960 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
16970 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
16980 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74  .  [sqlite3_last
16990 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d  _insert_rowid()]
169a0 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
169b0 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75   function..}..fu
169c0 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29  ncdef {length(X)
169d0 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61 20  } {} {.  ^For a 
169e0 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c 20  string value X, 
169f0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
16a00 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
16a10 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20 20  he number of .  
16a20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74 20  characters (not 
16a30 62 79 74 65 73 29 20 69 6e 20 58 20 70 72 69 6f  bytes) in X prio
16a40 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e  r to the first N
16a50 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20  UL character..  
16a60 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74 72  Since SQLite str
16a70 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d  ings do not norm
16a80 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55 4c  ally contain NUL
16a90 20 63 68 61 72 61 63 74 65 72 73 2c 20 74 68 65   characters, the
16aa0 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75 6e   length(X).  fun
16ab0 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61 6c  ction will usual
16ac0 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 74 6f  ly return the to
16ad0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  tal number of ch
16ae0 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
16af0 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f 72  string X..  ^For
16b00 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58 2c   a blob value X,
16b10 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72   length(X) retur
16b20 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
16b30 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 62 6c   bytes in the bl
16b40 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 4e  ob..  ^If X is N
16b50 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68 28  ULL then length(
16b60 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49  X) is NULL..  ^I
16b70 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20 74  f X is numeric t
16b80 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72 65  hen length(X) re
16b90 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68  turns the length
16ba0 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20 72   of a string.  r
16bb0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
16bc0 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b   X..}..funcdef {
16bd0 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58  like(X,Y) like(X
16be0 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,Y,Z)} {} {.  ^T
16bf0 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69  he like() functi
16c00 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  on is used to im
16c10 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c  plement the.  "<
16c20 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b  b>Y LIKE X &#91;
16c30 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62  ESCAPE Z&#93;</b
16c40 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a  >" expression. .
16c50 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e    ^If the option
16c60 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65  al ESCAPE clause
16c70 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65   is present, the
16c80 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66  n the.  like() f
16c90 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b  unction is invok
16ca0 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61 72  ed with three ar
16cb0 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72  guments.  ^Other
16cc0 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e  wise, it is.  in
16cd0 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61  voked with two a
16ce0 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e  rguments only. N
16cf0 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61  ote that the X a
16d00 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72 73 20  nd Y parameters 
16d10 61 72 65 0a 20 20 72 65 76 65 72 73 65 64 20 69  are.  reversed i
16d20 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e  n the like() fun
16d30 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74  ction relative t
16d40 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b  o the infix [LIK
16d50 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e  E] operator..  ^
16d60 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  The [sqlite3_cre
16d70 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
16d80 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65  interface can be
16d90 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69 64   used to overrid
16da0 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66  e the.  like() f
16db0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 72  unction and ther
16dc0 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20 6f  eby change the o
16dd0 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  peration of the.
16de0 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f    [LIKE] operato
16df0 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72 69 64  r.  When overrid
16e00 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29 20 66  ing the like() f
16e10 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79 20  unction, it may 
16e20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20 74  be important.  t
16e30 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68 20  o override both 
16e40 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72 65  the two and thre
16e50 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69  e argument versi
16e60 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65 28  ons of the like(
16e70 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20 4f  ) .  function. O
16e80 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65 72  therwise, differ
16e90 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65 20  ent code may be 
16ea0 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65 6d  called to implem
16eb0 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d  ent the.  [LIKE]
16ec0 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e 64   operator depend
16ed0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
16ee0 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45 20  r not an ESCAPE 
16ef0 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73 70  clause was .  sp
16f00 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 66 75 6e 63  ecified..}..func
16f10 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e 73  def {load_extens
16f20 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74 65  ion(X) load_exte
16f30 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20 7b  nsion(X,Y)} {} {
16f40 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74  .  ^The load_ext
16f50 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e 63  ension(X,Y) func
16f60 74 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c 69  tion loads [SQLi
16f70 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20 6f  te extensions] o
16f80 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65 64  ut of the shared
16f90 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20  .  library file 
16fa0 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74 68  named X using th
16fb0 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59 2e  e entry point Y.
16fc0 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
16fd0 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
16fe0 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61 20  ).  is always a 
16ff0 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73 20  NULL.  ^If Y is 
17000 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65  omitted then the
17010 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20 70   default entry p
17020 6f 69 6e 74 20 6e 61 6d 65 20 69 73 20 75 73 65  oint name is use
17030 64 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65  d..  ^The load_e
17040 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63 74  xtension() funct
17050 69 6f 6e 20 72 61 69 73 65 73 20 61 6e 20 65 78  ion raises an ex
17060 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 65  ception if the e
17070 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20 74  xtension fails t
17080 6f 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69 74  o.  load or init
17090 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c 79  ialize correctly
170a0 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f 61  ...  <p>^The loa
170b0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75  d_extension() fu
170c0 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c  nction will fail
170d0 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f   if the extensio
170e0 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a 20  n attempts to . 
170f0 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65 74   modify or delet
17100 65 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  e an SQL functio
17110 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  n or collating s
17120 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a 20  equence.  ^The. 
17130 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20 61   extension can a
17140 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73  dd new functions
17150 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   or collating se
17160 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61 6e  quences, but can
17170 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20  not.  modify or 
17180 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  delete existing 
17190 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
171a0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
171b0 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73 65   because.  those
171c0 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f 6f   functions and/o
171d0 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  r collating sequ
171e0 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20 75  ences might be u
171f0 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20 20  sed elsewhere.  
17200 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  in the currently
17210 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61   running SQL sta
17220 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61 64  tement.  To load
17230 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74 68   an extension th
17240 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72 20  at.  changes or 
17250 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f 6e  deletes function
17260 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
17270 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74 68  equences, use th
17280 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f 61  e.  [sqlite3_loa
17290 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20 43  d_extension()] C
172a0 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c 2f  -language API.</
172b0 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65 63  p>..  <p>For sec
172c0 75 72 69 74 79 20 72 65 61 73 6f 6e 73 2c 20 65  urity reasons, e
172d0 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64 20  xtension loaded 
172e0 69 73 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79  is turned off by
172f0 20 64 65 66 61 75 6c 74 20 61 6e 64 20 6d 75 73   default and mus
17300 74 0a 20 20 62 65 20 65 6e 61 62 6c 65 64 20 62  t.  be enabled b
17310 79 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74  y a prior call t
17320 6f 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  o [sqlite3_enabl
17330 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
17340 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63  ()].</p>.}..func
17350 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b  def {lower(X)} {
17360 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72  } {.  ^The lower
17370 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
17380 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 73  urns a copy of s
17390 74 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c 6c  tring X with all
173a0 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
173b0 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  s.  converted to
173c0 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e 54   lower case.  ^T
173d0 68 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c 74  he default built
173e0 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e 63  -in lower() func
173f0 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72  tion works.  for
17400 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
17410 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63  s only.  To do c
17420 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ase conversions 
17430 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63  on non-ASCII.  c
17440 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64 20  haracters, load 
17450 74 68 65 20 49 43 55 20 65 78 74 65 6e 73 69 6f  the ICU extensio
17460 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
17470 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c  trim(X) ltrim(X,
17480 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
17490 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74  ltrim(X,Y) funct
174a0 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
174b0 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
174c0 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20  emoving any and 
174d0 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73  all.  characters
174e0 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
174f0 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20  Y from the left 
17500 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66  side of X..  ^If
17510 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
17520 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69  is omitted, ltri
17530 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
17540 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65 66  ces from the lef
17550 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d  t side.  of X..}
17560 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
17570 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f  ,Y,...)} {*maxCo
17580 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78  reFunc *max {max
17590 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
175a0 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  } {.  ^The multi
175b0 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20  -argument max() 
175c0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
175d0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77 69   the argument wi
175e0 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d 75  th the .  maximu
175f0 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74 75  m value, or retu
17600 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61  rn NULL if any a
17610 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e  rgument is NULL.
17620 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61   .  ^The multi-a
17630 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75  rgument max() fu
17640 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20  nction searches 
17650 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72  its arguments fr
17660 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
17670 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  .  for an argume
17680 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
17690 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
176a0 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68  tion and uses th
176b0 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66  at collating.  f
176c0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
176d0 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
176e0 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66  ns.  ^If none of
176f0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   the arguments t
17700 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e 65  o max().  define
17710 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
17720 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ction, then the 
17730 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
17740 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
17750 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c  d..  Note that <
17760 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69 73 20 61  b>max()</b> is a
17770 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
17780 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
17790 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
177a0 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20  ts but operates 
177b0 61 73 20 61 6e 0a 20 20 5b 6d 69 6e 41 67 67 46  as an.  [minAggF
177c0 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
177d0 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76  function] if giv
177e0 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65  en only a single
177f0 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75   argument..}..fu
17800 6e 63 64 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e  ncdef {min(X,Y,.
17810 2e 2e 29 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75  ..)} {*minCoreFu
17820 6e 63 20 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53  nc *min {min() S
17830 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  QL function}} {.
17840 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
17850 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
17860 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
17870 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20 74   argument with t
17880 68 65 0a 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c  he.  minimum val
17890 75 65 2e 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69  ue..  ^The multi
178a0 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20  -argument min() 
178b0 66 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65  function searche
178c0 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
178d0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
178e0 68 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75  ht.  for an argu
178f0 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
17900 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
17910 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
17920 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20  that collating. 
17930 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
17940 6c 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69  l string compari
17950 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20  sons.  ^If none 
17960 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  of the arguments
17970 20 74 6f 20 6d 69 6e 28 29 0a 20 20 64 65 66 69   to min().  defi
17980 6e 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ne a collating f
17990 75 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  unction, then th
179a0 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
179b0 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  ng function is u
179c0 73 65 64 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  sed..  Note that
179d0 20 3c 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73   <b>min()</b> is
179e0 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69   a simple functi
179f0 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73  on when.  it has
17a00 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d   2 or more argum
17a10 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74 65  ents but operate
17a20 73 20 61 73 20 61 6e 20 0a 20 20 5b 6d 61 78 41  s as an .  [maxA
17a30 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggFunc | aggrega
17a40 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20  te function] if 
17a50 67 69 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73  given.  only a s
17a60 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a  ingle argument..
17a70 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c  }..funcdef {null
17a80 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  if(X,Y)} {} {.  
17a90 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
17aa0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
17ab0 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
17ac0 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75  ment if the argu
17ad0 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66  ments are.  diff
17ae0 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69  erent and NULL i
17af0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
17b00 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e  are the same.  ^
17b10 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
17b20 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63  function.  searc
17b30 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
17b40 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
17b50 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75  ight for an argu
17b60 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
17b70 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  s a.  collating 
17b80 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
17b90 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
17ba0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
17bb0 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61  l string.  compa
17bc0 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69  risons.  ^If nei
17bd0 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f  ther argument to
17be0 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65   nullif() define
17bf0 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
17c00 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68  nction.  then th
17c10 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64  e BINARY is used
17c20 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75  ..}..funcdef {qu
17c30 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ote(X)} {} {.  ^
17c40 54 68 65 20 71 75 6f 74 65 28 58 29 20 66 75 6e  The quote(X) fun
17c50 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
17c60 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53 51 4c  e text of an SQL
17c70 20 6c 69 74 65 72 61 6c 20 77 68 69 63 68 0a 20   literal which. 
17c80 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66   is the value of
17c90 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 73 75   its argument su
17ca0 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75  itable for inclu
17cb0 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c  sion into an SQL
17cc0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53   statement..  ^S
17cd0 74 72 69 6e 67 73 20 61 72 65 20 73 75 72 72 6f  trings are surro
17ce0 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c 65 2d  unded by single-
17cf0 71 75 6f 74 65 73 20 77 69 74 68 20 65 73 63 61  quotes with esca
17d00 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20  pes on interior 
17d10 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65 65 64  quotes.  as need
17d20 65 64 2e 20 20 5e 42 4c 4f 42 73 20 61 72 65 20  ed.  ^BLOBs are 
17d30 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78 61 64  encoded as hexad
17d40 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e  ecimal literals.
17d50 0a 20 20 5e 53 74 72 69 6e 67 73 20 77 69 74 68  .  ^Strings with
17d60 20 65 6d 62 65 64 64 65 64 20 4e 55 4c 20 63 68   embedded NUL ch
17d70 61 72 61 63 74 65 72 73 20 63 61 6e 6e 6f 74 20  aracters cannot 
17d80 62 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 61  be represented a
17d90 73 20 73 74 72 69 6e 67 0a 20 20 6c 69 74 65 72  s string.  liter
17da0 61 6c 73 20 69 6e 20 53 51 4c 20 61 6e 64 20 68  als in SQL and h
17db0 65 6e 63 65 20 74 68 65 20 72 65 74 75 72 6e 65  ence the returne
17dc0 64 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  d string literal
17dd0 20 69 73 20 74 72 75 6e 63 61 74 65 64 20 70 72   is truncated pr
17de0 69 6f 72 0a 20 20 74 6f 20 74 68 65 20 66 69 72  ior.  to the fir
17df0 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64  st NUL..}..funcd
17e00 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d  ef {random()} {}
17e10 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d   {.  ^The random
17e20 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
17e30 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72 61 6e  rns a pseudo-ran
17e40 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20 62 65  dom integer.  be
17e50 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32 30 33  tween -922337203
17e60 36 38 35 34 37 37 35 38 30 38 20 61 6e 64 20 2b  6854775808 and +
17e70 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
17e80 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  807..}..funcdef 
17e90 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20  {randomblob(N)} 
17ea0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64  {} {.  ^The rand
17eb0 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69  omblob(N) functi
17ec0 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62  on return an N-b
17ed0 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e  yte blob contain
17ee0 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f  ing pseudo-rando
17ef0 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66 20 4e  m.  bytes. ^If N
17f00 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 20   is less than 1 
17f10 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20 72 61  then a 1-byte ra
17f20 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72 65 74  ndom blob is ret
17f30 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e  urned...  <p>Hin
17f40 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  t:  applications
17f50 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20 67 6c   can generate gl
17f60 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20 69 64  obally unique id
17f70 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73 69 6e  entifiers.  usin
17f80 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  g this function 
17f90 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 5b 68  together with [h
17fa0 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b  ex()] and/or.  [
17fb0 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20 74 68  lower()] like th
17fc0 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63  is:</p>..  <bloc
17fd0 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28 72 61  kquote>.  hex(ra
17fe0 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72  ndomblob(16))<br
17ff0 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68  ></br>.  lower(h
18000 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36  ex(randomblob(16
18010 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f  ))).  </blockquo
18020 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  te>.}..funcdef {
18030 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20  replace(X,Y,Z)} 
18040 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c  {} {.  ^The repl
18050 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74  ace(X,Y,Z) funct
18060 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
18070 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 73  ring formed by s
18080 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20 73 74  ubstituting.  st
18090 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65 72 79  ring Z for every
180a0 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20 73   occurrence of s
180b0 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72 69 6e  tring Y in strin
180c0 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41  g X.  ^The [BINA
180d0 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  RY].  collating 
180e0 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
180f0 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73   for comparisons
18100 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e 20 65  .  ^If Y is an e
18110 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20 74 68  mpty.  string th
18120 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e 63 68  en return X unch
18130 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20 69 73  anged.  ^If Z is
18140 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20   not initially. 
18150 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73   a string, it is
18160 20 63 61 73 74 20 74 6f 20 61 20 55 54 46 2d 38   cast to a UTF-8
18170 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20 74 6f   string prior to
18180 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a   processing..}..
18190 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64 28 58  funcdef {round(X
181a0 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d  ) round(X,Y)} {}
181b0 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e 64 28   {.  ^The round(
181c0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
181d0 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67  turns a floating
181e0 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65 20 58  -point.  value X
181f0 20 72 6f 75 6e 64 65 64 20 74 6f 20 59 20 64 69   rounded to Y di
18200 67 69 74 73 20 74 6f 20 74 68 65 20 72 69 67 68  gits to the righ
18210 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d 61 6c  t of the decimal
18220 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68   point..  ^If th
18230 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
18240 6f 6d 69 74 74 65 64 2c 20 69 74 20 69 73 20 61  omitted, it is a
18250 73 73 75 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a  ssumed to be 0..
18260 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74 72 69  }..funcdef {rtri
18270 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59 29 7d  m(X) rtrim(X,Y)}
18280 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 74 72   {} {.  ^The rtr
18290 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
182a0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
182b0 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
182c0 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
182d0 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
182e0 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
182f0 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20 73 69  rom the right si
18300 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74  de of X..  ^If t
18310 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73  he Y argument is
18320 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69 6d 28   omitted, rtrim(
18330 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65  X) removes space
18340 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  s from the right
18350 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a  .  side of X..}.
18360 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65  .funcdef {sounde
18370 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
18380 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66 75 6e  e soundex(X) fun
18390 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
183a0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 74  string that is t
183b0 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64  he soundex encod
183c0 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20 73 74  ing .  of the st
183d0 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65 20 73  ring X..  ^The s
183e0 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69 73 20  tring "?000" is 
183f0 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
18400 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
18410 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e   or contains.  n
18420 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62 65 74  o ASCII alphabet
18430 69 63 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20  ic characters.. 
18440 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69 6f 6e   ^(This function
18450 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
18460 20 53 51 4c 69 74 65 20 62 79 20 64 65 66 61 75   SQLite by defau
18470 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79  lt..  It is only
18480 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 74 68   available if th
18490 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45  e [SQLITE_SOUNDE
184a0 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  X] compile-time 
184b0 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73 65 64  option.  is used
184c0 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
184d0 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  built.)^.}..func
184e0 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
184f0 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29  ileoption_get(N)
18500 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
18510 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
18520 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20 66 75 6e  on_get() SQL fun
18530 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
18540 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
18550 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
18560 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f  option_get()] C/
18570 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20  C++ function..  
18580 5e 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65  ^This routine re
18590 74 75 72 6e 73 20 74 68 65 20 4e 2d 74 68 20 63  turns the N-th c
185a0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
185b0 6f 6e 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64  on used to build
185c0 20 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c   SQLite.  or NUL
185d0 4c 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66  L if N is out of
185e0 20 72 61 6e 67 65 2e 20 20 53 65 65 20 61 6c 73   range.  See als
185f0 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f  o the [compile_o
18600 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a  ptions pragma]..
18610 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
18620 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
18630 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20  _used(X)} {} {. 
18640 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d   ^The sqlite_com
18650 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
18660 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
18670 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
18680 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
18690 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
186a0 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75  used()] C/C++ fu
186b0 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20  nction..  ^When 
186c0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20 74  the argument X t
186d0 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65  o sqlite_compile
186e0 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 20 69  option_used(X) i
186f0 73 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  s a string which
18700 0a 20 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  .  is the name o
18710 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  f a compile-time
18720 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f   option, this ro
18730 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 72  utine returns tr
18740 75 65 20 28 31 29 20 6f 72 0a 20 20 66 61 6c 73  ue (1) or.  fals
18750 65 20 28 30 29 20 64 65 70 65 6e 64 69 6e 67 20  e (0) depending 
18760 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
18770 74 20 74 68 61 74 20 6f 70 74 69 6f 6e 20 77 61  t that option wa
18780 73 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68  s used during th
18790 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75  e.  build..}..fu
187a0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f  ncdef {sqlite_so
187b0 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a  urce_id()} {} {.
187c0 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f    ^The sqlite_so
187d0 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69  urce_id() functi
187e0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
187f0 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66  ing that identif
18800 69 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66  ies the.  specif
18810 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
18820 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68  e source code th
18830 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62  at was used to b
18840 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a  uild the SQLite.
18850 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65    library.  ^The
18860 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
18870 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63   by sqlite_sourc
18880 65 5f 69 64 28 29 20 62 65 67 69 6e 73 20 77 69  e_id() begins wi
18890 74 68 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e  th.  the date an
188a0 64 20 74 69 6d 65 20 74 68 61 74 20 74 68 65 20  d time that the 
188b0 73 6f 75 72 63 65 20 63 6f 64 65 20 77 61 73 20  source code was 
188c0 63 68 65 63 6b 65 64 20 69 6e 20 61 6e 64 20 69  checked in and i
188d0 73 20 66 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61  s follows by.  a
188e0 6e 20 53 48 41 31 20 68 61 73 68 20 74 68 61 74  n SHA1 hash that
188f0 20 75 6e 69 71 75 65 6c 79 20 69 64 65 6e 74 69   uniquely identi
18900 66 69 65 73 20 74 68 65 20 73 6f 75 72 63 65 20  fies the source 
18910 74 72 65 65 2e 20 20 5e 54 68 69 73 20 66 75 6e  tree.  ^This fun
18920 63 74 69 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51  ction is.  an SQ
18930 4c 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  L wrapper around
18940 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f   the [sqlite3_so
18950 75 72 63 65 69 64 28 29 5d 20 43 20 69 6e 74 65  urceid()] C inte
18960 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
18970 66 20 7b 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  f {sqlite_versio
18980 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  n()} {} {.  ^The
18990 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
189a0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
189b0 6e 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20 73  ns the version s
189c0 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 53 51  tring for the SQ
189d0 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79 20 74  Lite.  library t
189e0 68 61 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20  hat is running. 
189f0 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20   ^This function 
18a00 69 73 20 61 6e 20 53 51 4c 0a 20 20 77 72 61 70  is an SQL.  wrap
18a10 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
18a20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
18a30 6f 6e 28 29 5d 20 43 2d 69 6e 74 65 72 66 61 63  on()] C-interfac
18a40 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73  e..}..funcdef {s
18a50 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 73 75 62  ubstr(X,Y,Z) sub
18a60 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  str(X,Y)} {} {. 
18a70 20 5e 54 68 65 20 73 75 62 73 74 72 28 58 2c 59   ^The substr(X,Y
18a80 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Z) function ret
18a90 75 72 6e 73 20 61 20 73 75 62 73 74 72 69 6e 67  urns a substring
18aa0 20 6f 66 20 69 6e 70 75 74 20 73 74 72 69 6e 67   of input string
18ab0 20 58 20 74 68 61 74 20 62 65 67 69 6e 73 0a 20   X that begins. 
18ac0 20 77 69 74 68 20 74 68 65 20 59 2d 74 68 20 63   with the Y-th c
18ad0 68 61 72 61 63 74 65 72 20 61 6e 64 20 77 68 69  haracter and whi
18ae0 63 68 20 69 73 20 5a 20 63 68 61 72 61 63 74 65  ch is Z characte
18af0 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a  rs long..  ^If Z
18b00 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 6e   is omitted then
18b10 20 73 75 62 73 74 72 28 58 2c 59 29 20 72 65 74   substr(X,Y) ret
18b20 75 72 6e 73 20 61 6c 6c 20 63 68 61 72 61 63 74  urns all charact
18b30 65 72 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ers through the 
18b40 65 6e 64 0a 20 20 6f 66 20 74 68 65 20 73 74 72  end.  of the str
18b50 69 6e 67 20 58 20 62 65 67 69 6e 6e 69 6e 67 20  ing X beginning 
18b60 77 69 74 68 20 74 68 65 20 59 2d 74 68 2e 0a 20  with the Y-th.. 
18b70 20 5e 54 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20   ^The left-most 
18b80 63 68 61 72 61 63 74 65 72 20 6f 66 20 58 20 69  character of X i
18b90 73 20 6e 75 6d 62 65 72 20 31 2e 20 20 5e 49 66  s number 1.  ^If
18ba0 20 59 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20   Y is negative. 
18bb0 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
18bc0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
18bd0 20 73 75 62 73 74 72 69 6e 67 20 69 73 20 66 6f   substring is fo
18be0 75 6e 64 20 62 79 20 63 6f 75 6e 74 69 6e 67 20  und by counting 
18bf0 66 72 6f 6d 20 74 68 65 0a 20 20 72 69 67 68 74  from the.  right
18c00 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
18c10 20 6c 65 66 74 2e 20 20 5e 49 66 20 5a 20 69 73   left.  ^If Z is
18c20 20 6e 65 67 61 74 69 76 65 20 74 68 65 6e 0a 20   negative then. 
18c30 20 74 68 65 20 61 62 73 28 5a 29 20 63 68 61 72   the abs(Z) char
18c40 61 63 74 65 72 73 20 70 72 65 63 65 64 69 6e 67  acters preceding
18c50 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
18c60 74 65 72 20 61 72 65 20 72 65 74 75 72 6e 65 64  ter are returned
18c70 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 61 20 73  ..  ^If X is a s
18c80 74 72 69 6e 67 20 74 68 65 6e 20 63 68 61 72 61  tring then chara
18c90 63 74 65 72 73 20 69 6e 64 69 63 65 73 20 72 65  cters indices re
18ca0 66 65 72 20 74 6f 20 61 63 74 75 61 6c 20 55 54  fer to actual UT
18cb0 46 2d 38 20 0a 20 20 63 68 61 72 61 63 74 65 72  F-8 .  character
18cc0 73 2e 20 20 5e 49 66 20 58 20 69 73 20 61 20 42  s.  ^If X is a B
18cd0 4c 4f 42 20 74 68 65 6e 20 74 68 65 20 69 6e 64  LOB then the ind
18ce0 69 63 65 73 20 72 65 66 65 72 20 74 6f 20 62 79  ices refer to by
18cf0 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  tes..}..funcdef 
18d00 7b 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  {total_changes()
18d10 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f  } {} {.  ^The to
18d20 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 66 75  tal_changes() fu
18d30 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
18d40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
18d50 20 63 68 61 6e 67 65 73 0a 20 20 63 61 75 73 65   changes.  cause
18d60 64 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  d by INSERT, UPD
18d70 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 20 20  ATE or DELETE.  
18d80 73 74 61 74 65 6d 65 6e 74 73 20 73 69 6e 63 65  statements since
18d90 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61 74   the current dat
18da0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
18db0 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e   was opened..  ^
18dc0 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
18dd0 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e   a wrapper aroun
18de0 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74  d the [sqlite3_t
18df0 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a  otal_changes()].
18e00 20 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63    C/C++ interfac
18e10 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74  e..}..funcdef {t
18e20 72 69 6d 28 58 29 20 74 72 69 6d 28 58 2c 59 29  rim(X) trim(X,Y)
18e30 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72  } {} {.  ^The tr
18e40 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
18e50 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
18e60 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
18e70 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
18e80 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
18e90 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
18ea0 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f 66  rom both ends of
18eb0 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20   X..  ^If the Y 
18ec0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74  argument is omit
18ed0 74 65 64 2c 20 74 72 69 6d 28 58 29 20 72 65 6d  ted, trim(X) rem
18ee0 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
18ef0 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
18f00 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 79 70  .}..funcdef {typ
18f10 65 6f 66 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  eof(X)} {} {.  ^
18f20 54 68 65 20 74 79 70 65 6f 66 28 58 29 20 66 75  The typeof(X) fu
18f30 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
18f40 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 6e 64   string that ind
18f50 69 63 61 74 65 73 20 74 68 65 20 5b 64 61 74 61  icates the [data
18f60 74 79 70 65 5d 20 6f 66 0a 20 20 74 68 65 20 65  type] of.  the e
18f70 78 70 72 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75  xpression X: "nu
18f80 6c 6c 22 2c 20 22 69 6e 74 65 67 65 72 22 2c 20  ll", "integer", 
18f90 22 72 65 61 6c 22 2c 20 22 74 65 78 74 22 2c 20  "real", "text", 
18fa0 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75  or "blob"..}..fu
18fb0 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64 65 28 58  ncdef {unicode(X
18fc0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75  )} {} {.  ^The u
18fd0 6e 69 63 6f 64 65 28 58 29 20 66 75 6e 63 74 69  nicode(X) functi
18fe0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
18ff0 75 6d 65 72 69 63 20 75 6e 69 63 6f 64 65 20 63  umeric unicode c
19000 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72 72 65 73  ode point corres
19010 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20 74 68 65  ponding to.  the
19020 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
19030 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
19040 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d  .  ^If the argum
19050 65 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65 28 58  ent to unicode(X
19060 29 20 69 73 20 6e 6f 74 20 61 20 73 74 72 69 6e  ) is not a strin
19070 67 0a 20 20 74 68 65 6e 20 74 68 65 20 72 65 73  g.  then the res
19080 75 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ult is undefined
19090 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70  ..}..funcdef {up
190a0 70 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  per(X)} {} {.  ^
190b0 54 68 65 20 75 70 70 65 72 28 58 29 20 66 75 6e  The upper(X) fun
190c0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
190d0 63 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73 74  copy of input st
190e0 72 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68 20  ring X in which 
190f0 61 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73  all .  lower-cas
19100 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  e ASCII characte
19110 72 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  rs are converted
19120 20 74 6f 20 74 68 65 69 72 20 75 70 70 65 72 2d   to their upper-
19130 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 2e  case equivalent.
19140 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72  .}..funcdef {zer
19150 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20  oblob(N)} {} {. 
19160 20 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e   ^The zeroblob(N
19170 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
19180 6e 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73  ns a BLOB consis
19190 74 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73 20  ting of N bytes 
191a0 6f 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69 74  of 0x00..  SQLit
191b0 65 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65 20  e manages these 
191c0 7a 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20 65  zeroblobs very e
191d0 66 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72  fficiently.  Zer
191e0 6f 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75 73  oblobs can be us
191f0 65 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65 20  ed to.  reserve 
19200 73 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f 42  space for a BLOB
19210 20 74 68 61 74 20 69 73 20 6c 61 74 65 72 20 77   that is later w
19220 72 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20 20  ritten using .  
19230 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70  [sqlite3_blob_op
19240 65 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74  en() | increment
19250 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20  al BLOB I/O]..  
19260 5e 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74 69  ^This SQL functi
19270 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  on is implemente
19280 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  d using the [sql
19290 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f  ite3_result_zero
192a0 62 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e  blob()].  routin
192b0 65 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b  e from the C/C++
192c0 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f   interface..}.</
192d0 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  tcl>.</table>..<
192e0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
192f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19330 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74  ###.Section {Dat
19340 65 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63 74  e And Time Funct
19350 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 7b  ions} datefunc {
19360 2a 64 61 74 65 66 75 6e 63 7d 0a 68 64 5f 6b 65  *datefunc}.hd_ke
19370 79 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20 53  ywords {date() S
19380 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69  QL function} {ti
19390 6d 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  me() SQL functio
193a0 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  n}.hd_keywords {
193b0 64 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20 66  datetime() SQL f
193c0 75 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e  unction} {julian
193d0 64 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74 69  day() SQL functi
193e0 6f 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20  on}.hd_keywords 
193f0 7b 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c 20  {strftime() SQL 
19400 66 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e  function}.</tcl>
19410 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75 70  ..<p>.SQLite sup
19420 70 6f 72 74 73 20 66 69 76 65 20 64 61 74 65 20  ports five date 
19430 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
19440 6e 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c  ns as follows:.<
19450 2f 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c  /p>..<p>.<ol>.<l
19460 69 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62  i> ^(<b>date(</b
19470 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
19480 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
19490 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
194a0 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
194b0 20 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c   ^(<b>time(</b><
194c0 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f  i>timestring, mo
194d0 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72  difier, modifier
194e0 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62  , ...</i><b>)</b
194f0 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e  >)^ </li>.<li> ^
19500 28 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62  (<b>datetime(</b
19510 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
19520 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
19530 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
19540 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
19550 20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28   ^(<b>julianday(
19560 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e  </b><i>timestrin
19570 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
19580 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
19590 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
195a0 6c 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d  li> ^(<b>strftim
195b0 65 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c  e(</b><i>format,
195c0 20 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64   timestring, mod
195d0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
195e0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
195f0 29 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a  )^ </li>.</ol>..
19600 3c 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61  <p>.^All five da
19610 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
19620 74 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d  tions take a tim
19630 65 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61  e string as an a
19640 72 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74  rgument. .^The t
19650 69 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66 6f  ime string is fo
19660 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
19670 72 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73  r more modifiers
19680 2e 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65  . .^The strftime
19690 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f  () function also
196a0 20 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20   takes a format 
196b0 73 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69  string as its fi
196c0 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f  rst argument..</
196d0 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65  p>..<p>.The date
196e0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
196f0 6f 6e 73 20 75 73 65 20 61 20 73 75 62 73 65 74  ons use a subset
19700 20 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77   of.[http://en.w
19710 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
19720 69 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53 30  i/ISO_8601 | IS0
19730 2d 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64 20  -8601] date and 
19740 74 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54  time.formats..^T
19750 68 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69  he date() functi
19760 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  on returns the d
19770 61 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d  ate in this form
19780 61 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20  at: YYYY-MM-DD. 
19790 0a 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e  .^The time() fun
197a0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
197b0 65 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a  e time as HH:MM:
197c0 53 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74 69  SS. .^The dateti
197d0 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
197e0 74 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44  turns "YYYY-MM-D
197f0 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28  D HH:MM:SS". .^(
19800 54 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20  The julianday() 
19810 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
19820 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e   the .[http://en
19830 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
19840 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c  iki/Julian_day |
19850 20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74   Julian day] - t
19860 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he.number of day
19870 73 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20  s since noon in 
19880 47 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76  Greenwich on Nov
19890 65 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20 42  ember 24, 4714 B
198a0 2e 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e  .C. .([http://en
198b0 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77  .wikipedia.org/w
198c0 69 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72  iki/Proleptic_Gr
198d0 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72  egorian_calendar
198e0 20 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72 65   | Proleptic Gre
198f0 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
19900 29 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74 69  ).)^.^The strfti
19910 6d 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74  me() routine ret
19920 75 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f  urns the date fo
19930 72 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e  rmatted accordin
19940 67 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74  g to .the format
19950 20 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65   string specifie
19960 64 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61  d as the first a
19970 72 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f  rgument..^The fo
19980 72 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70  rmat string supp
19990 6f 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  orts the most co
199a0 6d 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f  mmon substitutio
199b0 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  ns found in the 
199c0 0a 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f  .[http://opengro
199d0 75 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62  up.org/onlinepub
199e0 73 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68 2f  s/007908799/xsh/
199f0 73 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20  strftime.html | 
19a00 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
19a10 69 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74  ion].from the st
19a20 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
19a30 20 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75   plus two new su
19a40 62 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20  bstitutions, %f 
19a50 61 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f  and %J..^(The fo
19a60 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d  llowing is a com
19a70 70 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61  plete list of va
19a80 6c 69 64 20 73 74 72 66 74 69 6d 65 28 29 20 73  lid strftime() s
19a90 75 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f  ubstitutions:.</
19aa0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
19ab0 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
19ac0 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
19ad0 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
19ae0 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20  0">.<tr><td><td 
19af0 77 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c  width="10"><td><
19b00 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25  /tr>..<tr><td> %
19b10 64 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  d <td><td> day o
19b20 66 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e  f month: 00.<tr>
19b30 3c 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e  <td> %f <td><td>
19b40 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f   fractional seco
19b50 6e 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e  nds: SS.SSS.<tr>
19b60 3c 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e  <td> %H <td><td>
19b70 20 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74   hour: 00-24 .<t
19b80 72 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74  r><td> %j <td><t
19b90 64 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20  d> day of year: 
19ba0 30 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e  001-366.<tr><td>
19bb0 20 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c   %J <td><td> Jul
19bc0 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c  ian day number.<
19bd0 74 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c  tr><td> %m <td><
19be0 74 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32  td> month: 01-12
19bf0 0a 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64  .<tr><td> %M <td
19c00 3e 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30  ><td> minute: 00
19c10 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20  -59.<tr><td> %s 
19c20 3c 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73  <td><td> seconds
19c30 20 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30   since 1970-01-0
19c40 31 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74  1.<tr><td> %S <t
19c50 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20  d><td> seconds: 
19c60 30 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25  00-59.<tr><td> %
19c70 77 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  w <td><td> day o
19c80 66 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20  f week 0-6 with 
19c90 53 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74  Sunday==0.<tr><t
19ca0 64 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77  d> %W <td><td> w
19cb0 65 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d  eek of year: 00-
19cc0 35 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c  53.<tr><td> %Y <
19cd0 74 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30  td><td> year: 00
19ce0 30 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e  00-9999.<tr><td>
19cf0 20 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c   %% <td><td> %.<
19d00 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71  /table>.</blockq
19d10 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e  uote>)^..<p>.^(N
19d20 6f 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f  otice that all o
19d30 74 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69  ther date and ti
19d40 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e  me functions can
19d50 20 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e   be expressed.in
19d60 20 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69   terms of strfti
19d70 6d 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  me():.</p>..<blo
19d80 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
19d90 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
19da0 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
19db0 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
19dc0 3c 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c  <td><b>Function<
19dd0 2f 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30  /b><td width="30
19de0 22 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c  "><td><b>Equival
19df0 65 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f  ent strftime()</
19e00 62 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61  b>.<tr><td>   da
19e10 74 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64  te(...)      <td
19e20 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
19e30 27 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29  '%Y-%m-%d', ...)
19e40 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65  .<tr><td>   time
19e50 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c  (...)      <td><
19e60 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25  td>  strftime('%
19e70 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c  H:%M:%S', ...).<
19e80 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69  tr><td>   dateti
19e90 6d 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64  me(...)  <td><td
19ea0 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d  >  strftime('%Y-
19eb0 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c  %m-%d %H:%M:%S',
19ec0 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20   ...).<tr><td>  
19ed0 20 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20   julianday(...) 
19ee0 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69  <td><td>  strfti
19ef0 6d 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f  me('%J', ...).</
19f00 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
19f10 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20  ote>)^..<p>.The 
19f20 6f 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72  only reasons for
19f30 20 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74   providing funct
19f40 69 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20  ions other than 
19f50 73 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f  strftime() is.fo
19f60 72 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e  r convenience an
19f70 64 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79  d for efficiency
19f80 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65  ..</p>..<h3>Time
19f90 20 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c   Strings</h3>..<
19fa0 70 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69 6e  p>^(A time strin
19fb0 67 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79 20  g can be in any 
19fc0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
19fd0 20 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c   formats:</p>..<
19fe0 6f 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  ol>.<li> <i>YYYY
19ff0 2d 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20  -MM-DD</i>.<li> 
1a000 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  <i>YYYY-MM-DD HH
1a010 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
1a020 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1a030 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :SS</i>.<li> <i>
1a040 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1a050 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e  :SS.SSS</i>.<li>
1a060 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1a070 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a  i><b>T</b><i>HH:
1a080 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  MM</i>.<li> <i>Y
1a090 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e  YYY-MM-DD</i><b>
1a0a0 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53  T</b><i>HH:MM:SS
1a0b0 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1a0c0 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c  Y-MM-DD</i><b>T<
1a0d0 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  /b><i>HH:MM:SS.S
1a0e0 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48  SS</i>.<li> <i>H
1a0f0 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  H:MM</i>.<li> <i
1a100 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c  >HH:MM:SS</i>.<l
1a110 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53  i> <i>HH:MM:SS.S
1a120 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e  SS</i>.<li> <b>n
1a130 6f 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44  ow</b>.<li> <i>D
1a140 44 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f  DDDDDDDDD</i>.</
1a150 6f 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66  ol>)^..<p>.^In f
1a160 6f 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68  ormats 5 through
1a170 20 37 2c 20 74 68 65 20 22 54 22 20 69 73 20 61   7, the "T" is a
1a180 20 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63 74   literal charact
1a190 65 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74  er separating .t
1a1a0 68 65 20 64 61 74 65 20 61 6e 64 20 74 68 65 20  he date and the 
1a1b0 74 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65  time, as require
1a1c0 64 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77  d by .[http://ww
1a1d0 77 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54  w.w3c.org/TR/NOT
1a1e0 45 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53 4f  E-datetime | ISO
1a1f0 2d 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74  -8601]. .^Format
1a200 73 20 38 20 74 68 72 6f 75 67 68 20 31 30 20 74  s 8 through 10 t
1a210 68 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c 79  hat specify only
1a220 20 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20 61   a time assume a
1a230 20 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d 30   date of .2000-0
1a240 31 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c  1-01. Format 11,
1a250 20 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f 77   the string 'now
1a260 27 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  ', is converted 
1a270 69 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65 6e  into the .curren
1a280 74 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  t date and time 
1a290 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  as obtained from
1a2a0 20 74 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d   the xCurrentTim
1a2b0 65 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65 20  e method.of the 
1a2c0 5b 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62  [sqlite3_vfs] ob
1a2d0 6a 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 5b 68  ject in use..^[h
1a2e0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1a2f0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72  ia.org/wiki/Coor
1a300 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72 73 61  dinated_Universa
1a310 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65 72 73  l_Time | Univers
1a320 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54  al Coordinated T
1a330 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20 75 73  ime (UTC)] is us
1a340 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20  ed. .^Format 12 
1a350 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f  is the .[http://
1a360 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f 72 67  en.wikipedia.org
1a370 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79  /wiki/Julian_day
1a380 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75   | Julian day nu
1a390 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65 64 20  mber].expressed 
1a3a0 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  as a floating po
1a3b0 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a  int value..</p>.
1a3c0 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74  .<p>.^(In format
1a3d0 73 20 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20  s 4, 7, and 10, 
1a3e0 74 68 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73  the fractional s
1a3f0 65 63 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e  econds value SS.
1a400 53 53 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65  SSS can have.one
1a410 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20   or more digits 
1a420 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65  following the de
1a430 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78  cimal point.  Ex
1a440 61 63 74 6c 79 20 74 68 72 65 65 20 64 69 67 69  actly three digi
1a450 74 73 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20  ts are.shown in 
1a460 74 68 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63  the examples bec
1a470 61 75 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69  ause only the fi
1a480 72 73 74 20 74 68 72 65 65 20 64 69 67 69 74 73  rst three digits
1a490 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
1a4a0 0a 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20  .to the result, 
1a4b0 62 75 74 20 74 68 65 20 69 6e 70 75 74 20 73 74  but the input st
1a4c0 72 69 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65  ring can have fe
1a4d0 77 65 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e  wer or more than
1a4e0 20 74 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e   three digits.an
1a4f0 64 20 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20  d the date/time 
1a500 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73  functions will s
1a510 74 69 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72  till operate cor
1a520 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61  rectly.)^.Simila
1a530 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69  rly, format 12 i
1a540 73 20 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20  s shown with 10 
1a550 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69  significant digi
1a560 74 73 2c 20 62 75 74 20 74 68 65 20 64 61 74 65  ts, but the date
1a570 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20  /time.functions 
1a580 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65  will really acce
1a590 70 74 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73  pt as many or as
1a5a0 20 66 65 77 20 64 69 67 69 74 73 20 61 73 20 61   few digits as a
1a5b0 72 65 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a  re necessary to.
1a5c0 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75  represent the Ju
1a5d0 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e  lian day number.
1a5e0 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66  .</p>..<h3>Modif
1a5f0 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  iers</h3>..<p>^T
1a600 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  he time string c
1a610 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  an be followed b
1a620 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
1a630 6f 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61  odifiers that .a
1a640 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72  lter date and/or
1a650 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64   time. ^Each mod
1a660 69 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73  ifier.is a trans
1a670 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1a680 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  s applied to the
1a690 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69   time value to i
1a6a0 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69  ts left..^Modifi
1a6b0 65 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ers are applied 
1a6c0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1a6d0 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70  ht; order is imp
1a6e0 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76  ortant..^(The av
1a6f0 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72  ailable modifier
1a700 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  s are as follows
1a710 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  .</p>..<ol>.<li>
1a720 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e   NNN days.<li> N
1a730 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e  NN hours.<li> NN
1a740 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e  N minutes.<li> N
1a750 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a  NN.NNNN seconds.
1a760 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a  <li> NNN months.
1a770 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c  <li> NNN years.<
1a780 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e  li> start of mon
1a790 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66  th.<li> start of
1a7a0 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74   year.<li> start
1a7b0 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65   of day.<li> wee
1a7c0 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78  kday N.<li> unix
1a7d0 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c  epoch.<li> local
1a7e0 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c  time.<li> utc .<
1a7f0 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  /ol>)^..<p>^The 
1a800 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69  first six modifi
1a810 65 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36  ers (1 through 6
1a820 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68  ) .simply add th
1a830 65 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75  e specified amou
1a840 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68  nt of time to th
1a850 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1a860 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68  .specified by th
1a870 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65  e preceding time
1a880 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66  string and modif
1a890 69 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74  iers..^Note that
1a8a0 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f   "&plusmn;NNN mo
1a8b0 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72  nths" works by r
1a8c0 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69  endering the ori
1a8d0 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a  ginal date into.
1a8e0 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66  the YYYY-MM-DD f
1a8f0 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68  ormat, adding th
1a900 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f  e &plusmn;NNN to
1a910 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61   the MM month va
1a920 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c  lue, then.normal
1a930 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  izing the result
1a940 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78  .  ^Thus, for ex
1a950 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20  ample, the data 
1a960 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66  2001-03-31 modif
1a970 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68  ied.by '+1 month
1a980 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c  ' initially yiel
1a990 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62  ds 2001-04-31, b
1a9a0 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61  ut April only ha
1a9b0 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65  s 30 days.so the
1a9c0 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69   date is normali
1a9d0 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30  zed to 2001-05-0
1a9e0 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65  1.  ^A similar e
1a9f0 66 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65  ffect occurs whe
1aa00 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  n.the original d
1aa10 61 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20  ate is February 
1aa20 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72  29 of a leapyear
1aa30 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65   and the modifie
1aa40 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79  r is.&plusmn;N y
1aa50 65 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20  ears where N is 
1aa60 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f  not a multiple o
1aa70 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  f four.</p>..<p>
1aa80 5e 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20  ^The "start of" 
1aa90 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72  modifiers (7 thr
1aaa0 6f 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68  ough 9) shift th
1aab0 65 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73  e date backwards
1aac0 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69   .to the beginni
1aad0 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ng of the curren
1aae0 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72  t month, year or
1aaf0 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54   day.</p>..<p>^T
1ab00 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64  he "weekday" mod
1ab10 69 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74  ifier advances t
1ab20 68 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20  he date forward 
1ab30 74 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65  to the next date
1ab40 20 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b   .where the week
1ab50 64 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e  day number is N.
1ab60 20 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f   Sunday is 0, Mo
1ab70 6e 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73  nday is 1, and s
1ab80 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70  o forth.</p>..<p
1ab90 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68  >^The "unixepoch
1aba0 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20  " modifier (11) 
1abb0 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74  only works if it
1abc0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
1abd0 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69  lows .a timestri
1abe0 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44  ng in the DDDDDD
1abf0 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54  DDDD format. .^T
1ac00 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75  his modifier cau
1ac10 73 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44  ses the DDDDDDDD
1ac20 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72  DD to be interpr
1ac30 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a  eted not .as a J
1ac40 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1ac50 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20   as it normally 
1ac60 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73  would be, but as
1ac70 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1ac80 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55  pedia.org/wiki/U
1ac90 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20  nix_time | Unix 
1aca0 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d  Time] - the .num
1acb0 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
1acc0 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74  ince 1970.  If t
1acd0 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1ace0 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74  odifier does not
1acf0 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74  .follow a timest
1ad00 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d  ring of the form
1ad10 20 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63   DDDDDDDDDD whic
1ad20 68 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  h expresses the 
1ad30 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64  number.of second
1ad40 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20  s since 1970 or 
1ad50 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65  if other modifie
1ad60 72 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20  rs.separate the 
1ad70 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
1ad80 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20  fier from prior 
1ad90 44 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20  DDDDDDDDDD then 
1ada0 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20  the.behavior is 
1adb0 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74  undefined..Due t
1adc0 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69  o precision limi
1add0 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20  tations imposed 
1ade0 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
1adf0 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34  ations use.of 64
1ae00 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74  -bit integers, t
1ae10 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1ae20 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72  odifier only wor
1ae30 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74  ks for.dates bet
1ae40 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20  ween 0000-01-01 
1ae50 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35  00:00:00 and 535
1ae60 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37  2-11-01 10:52:47
1ae70 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20   (unix times.of 
1ae80 2d 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72  -62167219200 thr
1ae90 6f 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37  ough 10675199167
1aea0 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  ).</p>..<p>^The 
1aeb0 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69  "localtime" modi
1aec0 66 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65  fier (12) assume
1aed0 73 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e  s the time strin
1aee0 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g to its left is
1aef0 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f   in.Universal Co
1af00 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28  ordinated Time (
1af10 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73  UTC) and adjusts
1af20 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67   the time.string
1af30 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70   so that it disp
1af40 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20  lays localtime. 
1af50 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a   If "localtime".
1af60 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74  follows a time t
1af70 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20  hat is not UTC, 
1af80 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
1af90 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
1afa0 5e 28 54 68 65 20 22 75 74 63 22 20 69 73 20 74  ^(The "utc" is t
1afb0 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22  he opposite of "
1afc0 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74  localtime".  "ut
1afd0 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  c" assumes that 
1afe0 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74  the string.to it
1aff0 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65  s left is in the
1b000 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20   local timezone 
1b010 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74  and adjusts that
1b020 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e   string to be in
1b030 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70   UTC.)^.If the p
1b040 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e  rior string is n
1b050 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c  ot in localtime,
1b060 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
1b070 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64   of "utc" is.und
1b080 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  efined.</p>..<h3
1b090 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
1b0a0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1b0b0 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70   current date.<p
1b0c0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53  >..<blockquote>S
1b0d0 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1b0e0 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  );</blockquote>)
1b0f0 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1b100 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20  the last day of 
1b110 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74  the current mont
1b120 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  h.</p>..<blockqu
1b130 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28  ote>SELECT date(
1b140 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
1b150 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68  month','+1 month
1b160 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62  ','-1 day');.</b
1b170 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1b180 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64  <p>Compute the d
1b190 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76  ate and time giv
1b1a0 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74  en a unix timest
1b1b0 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c  amp 1092941466.<
1b1c0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1b1d0 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74  >.    SELECT dat
1b1e0 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
1b1f0 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a  , 'unixepoch');.
1b200 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1b210 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1b220 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1b230 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d  given a unix tim
1b240 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36  estamp 109294146
1b250 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61  6, and .compensa
1b260 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61  te for your loca
1b270 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a  l timezone.</p>.
1b280 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1b290 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
1b2a0 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
1b2b0 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74  xepoch', 'localt
1b2c0 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  ime');.</blockqu
1b2d0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1b2e0 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
1b2f0 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e   unix timestamp.
1b300 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1b310 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66  e>.  SELECT strf
1b320 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
1b330 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1b340 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1b350 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
1b360 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67  ys since the sig
1b370 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44  ning of the US D
1b380 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e  eclaration.of In
1b390 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a  dependence.</p>.
1b3a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1b3b0 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79  SELECT julianday
1b3c0 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e  ('now') - julian
1b3d0 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27  day('1776-07-04'
1b3e0 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1b3f0 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1b400 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1b410 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70  econds since a p
1b420 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74  articular moment
1b430 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c   in 2004:</p>..<
1b440 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1b450 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
1b460 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66  s','now') - strf
1b470 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d  time('%s','2004-
1b480 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29  01-01 02:34:56')
1b490 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1b4a0 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65  ^..^(<p>.Compute
1b4b0 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65   the date of the
1b4c0 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69   first Tuesday i
1b4d0 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68  n October.for th
1b4e0 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a  e current year..
1b4f0 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1b500 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65  e>.  SELECT date
1b510 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
1b520 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68   year','+9 month
1b530 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b  s','weekday 2');
1b540 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1b550 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1b560 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68  he time since th
1b570 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20  e unix epoch in 
1b580 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73  seconds .(like s
1b590 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
1b5a0 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75  w') except inclu
1b5b0 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70  des fractional p
1b5c0 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  art):</p>..<bloc
1b5d0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1b5e0 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77   (julianday('now
1b5f0 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a  ') - 2440587.5)*
1b600 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b  86400.0;.</block
1b610 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61  quote>)^..<h3>Ca
1b620 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f  veats And Bugs</
1b630 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70  h3>..<p>The comp
1b640 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c  utation of local
1b650 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65   time depends he
1b660 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69  avily on the whi
1b670 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e  m .of politician
1b680 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69  s and is thus di
1b690 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63  fficult to get c
1b6a0 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20  orrect for .all 
1b6b0 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69  locales. ^In thi
1b6c0 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  s implementation
1b6d0 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  , the standard C
1b6e0 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69   library .functi
1b6f0 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  on localtime_r()
1b700 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69   is used to assi
1b710 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c  st in the calcul
1b720 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20  ation of .local 
1b730 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f  time.  ^(The .lo
1b740 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75  caltime_r() C fu
1b750 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20  nction normally 
1b760 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79  only works for y
1b770 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37  ears.between 197
1b780 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20  0 and 2037. For 
1b790 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
1b7a0 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65  is range, SQLite
1b7b0 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61   .attempts to ma
1b7c0 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20  p the year into 
1b7d0 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65  an equivalent ye
1b7e0 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20  ar within .this 
1b7f0 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61  range, do the ca
1b800 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20  lculation, then 
1b810 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63  map the year bac
1b820 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28  k.)^</p>...<p>^(
1b830 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20  These functions 
1b840 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61  only work for da
1b850 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30  tes between 0000
1b860 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a  -01-01 00:00:00.
1b870 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32  and 9999-12-31 2
1b880 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e  3:59:59 (julidan
1b890 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32   day numbers 172
1b8a0 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35  1059.5 through 5
1b8b0 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72  373484.5).)^.For
1b8c0 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
1b8d0 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72  hat range, the r
1b8e0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a  esults of these.
1b8f0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e  functions are un
1b900 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  defined.</p>..<p
1b910 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  >Non-Vista Windo
1b920 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c  ws platforms onl
1b930 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65  y support one se
1b940 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20  t of DST rules. 
1b950 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70  .Vista only supp
1b960 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66  orts two. Theref
1b970 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c  ore, on these pl
1b980 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72  atforms, .histor
1b990 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61  ical DST calcula
1b9a0 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e  tions will be in
1b9b0 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78  correct. .For ex
1b9c0 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53  ample, in the US
1b9d0 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53  , in 2007 the DS
1b9e0 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e  T rules changed.
1b9f0 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64   .Non-Vista Wind
1ba00 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70  ows platforms ap
1ba10 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37  ply the new 2007
1ba20 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61   DST rules .to a
1ba30 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72  ll previous year
1ba40 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61  s as well. Vista
1ba50 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62   does somewhat b
1ba60 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65  etter.getting re
1ba70 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61  sults correct ba
1ba80 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e  ck to 1986, when
1ba90 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20   the rules were 
1baa0 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70  also changed.</p
1bab0 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e  >..<p>All intern
1bac0 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  al computations 
1bad0 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74  assume the .[htt
1bae0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1baf0 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72  .org/wiki/Gregor
1bb00 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47  ian_calendar | G
1bb10 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
1bb20 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69  r].system.  It i
1bb30 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74  s also assumed t
1bb40 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73  hat every.day is
1bb50 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73   exactly 86400 s
1bb60 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69  econds in durati
1bb70 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  on.</p>..<tcl>.#
1bb80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bbb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bbc0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1bbd0 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65  ction {Aggregate
1bbe0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   Functions} aggf
1bbf0 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c  unc {*aggfunc}.<
1bc00 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61  /tcl>..<p>.The a
1bc10 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1bc20 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
1bc30 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
1bc40 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69  default.  Additi
1bc50 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66  onal.aggregate f
1bc60 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
1bc70 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64   in C may be add
1bc80 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73  ed using the .[s
1bc90 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
1bca0 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50  nction()]</a>.AP
1bcb0 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20  I.</p>..<p>.^In 
1bcc0 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75  any aggregate fu
1bcd0 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  nction that take
1bce0 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  s a single argum
1bcf0 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65  ent, that argume
1bd00 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt.can be preced
1bd10 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
1bd20 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e  d DISTINCT.  ^In
1bd30 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70   such cases, dup
1bd40 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20  licate.elements 
1bd50 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66  are filtered bef
1bd60 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64  ore being passed
1bd70 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67   into the aggreg
1bd80 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46  ate function..^F
1bd90 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
1bda0 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28  function "count(
1bdb0 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c  distinct X)" wil
1bdc0 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  l return the num
1bdd0 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20  ber.of distinct 
1bde0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
1bdf0 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68   X instead of th
1be00 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1be10 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65  f non-null.value
1be20 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c  s in column X..<
1be30 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
1be40 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
1be50 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64  =10>.<tcl>.funcd
1be60 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76  ef {avg(X)} {*av
1be70 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61  g {avg() aggrega
1be80 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1be90 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e    ^The avg() fun
1bea0 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1beb0 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75  the average valu
1bec0 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  e of all non-NUL
1bed0 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69  L <i>X</i> withi
1bee0 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53  n a.  group.  ^S
1bef0 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76  tring and BLOB v
1bf00 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  alues that do no
1bf10 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62  t look like numb
1bf20 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70  ers are.  interp
1bf30 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54  reted as 0..  ^T
1bf40 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
1bf50 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
1bf60 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
1bf70 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20  lue as long as. 
1bf80 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20   at there is at 
1bf90 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55  least one non-NU
1bfa0 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66  LL input even if
1bfb0 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72   all.  inputs ar
1bfc0 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68  e integers.  ^Th
1bfd0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
1bfe0 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  ) is NULL if and
1bff0 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65   only if.  there
1c000 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1c010 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75   inputs.  .}..fu
1c020 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20  ncdef {count(X) 
1c030 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e  count(*)} {*coun
1c040 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65  t {count() aggre
1c050 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
1c060 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58  {.  ^The count(X
1c070 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1c080 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20  ns.  a count of 
1c090 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
1c0a0 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c  mes.  that <i>X<
1c0b0 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20  /i> is not NULL 
1c0c0 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68  in a group.  ^Th
1c0d0 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74  e count(*) funct
1c0e0 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61  ion.  (with no a
1c0f0 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e  rguments) return
1c100 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
1c110 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
1c120 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
1c130 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  def {group_conca
1c140 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61  t(X) group_conca
1c150 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f  t(X,Y)} {.  *gro
1c160 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70  up_concat {group
1c170 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67  _concat() aggreg
1c180 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
1c190 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63  {.  ^The group_c
1c1a0 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e  oncat() function
1c1b0 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
1c1c0 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
1c1d0 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
1c1e0 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  f.  all non-NULL
1c1f0 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c   values of <i>X<
1c200 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65  /i>.  ^If parame
1c210 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20  ter <i>Y</i> is 
1c220 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69  present then.  i
1c230 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  t is used as the
1c240 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74   separator.  bet
1c250 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f  ween instances o
1c260 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20  f <i>X</i>.  ^A 
1c270 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75  comma (",") is u
1c280 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
1c290 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f  ator.  if <i>Y</
1c2a0 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20  i> is omitted.  
1c2b0 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  The order of the
1c2c0 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c   concatenated el
1c2d0 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69  ements is.  arbi
1c2e0 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65  trary..}..funcde
1c2f0 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78  f {max(X)} {*max
1c300 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78  AggFunc *agg_max
1c310 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74   {max() aggregat
1c320 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1c330 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72   ^The max() aggr
1c340 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
1c350 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78   returns the max
1c360 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c  imum value of al
1c370 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
1c380 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61  group..  ^The ma
1c390 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  ximum value is t
1c3a0 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f  he value that wo
1c3b0 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20  uld be returned 
1c3c0 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44  last in an.  ORD
1c3d0 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d  ER BY on the sam
1c3e0 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72  e column.  ^Aggr
1c3f0 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75  egate max() retu
1c400 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61  rns NULL .  if a
1c410 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
1c420 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1c430 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1c440 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
1c450 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41   {min(X)} {*minA
1c460 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20  ggFunc *agg_min 
1c470 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65  {min() aggregate
1c480 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1c490 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65  ^The min() aggre
1c4a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
1c4b0 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69  returns the mini
1c4c0 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  mum non-NULL val
1c4d0 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
1c4e0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
1c4f0 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61   ^The minimum va
1c500 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74  lue is the first
1c510 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
1c520 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61  that would appea
1c530 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20  r.  in an ORDER 
1c540 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  BY of the column
1c550 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d  ..  ^Aggregate m
1c560 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  in() returns NUL
1c570 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
1c580 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1c590 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20  n-NULL.  values 
1c5a0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
1c5b0 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29  .funcdef {sum(X)
1c5c0 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a   total(X)} {.  *
1c5d0 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f  sumFunc *sum *to
1c5e0 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67  tal.  {sum() agg
1c5f0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1c600 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72  .  {total() aggr
1c610 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
1c620 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29  } {.  ^The sum()
1c630 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67   and total() agg
1c640 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1c650 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66  .  return sum of
1c660 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
1c670 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
1c680 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61  p..  ^If there a
1c690 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
1c6a0 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73  nput rows then s
1c6b0 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e  um() returns.  N
1c6c0 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20  ULL but total() 
1c6d0 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e  returns 0.0..  N
1c6e0 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61  ULL is not norma
1c6f0 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65  lly a helpful re
1c700 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d  sult for the sum
1c710 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75   of no rows.  bu
1c720 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  t the SQL standa
1c730 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61  rd requires it a
1c740 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20  nd most other.  
1c750 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
1c760 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73  ines implement s
1c770 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f  um() that way so
1c780 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20   SQLite does it 
1c790 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61  in the.  same wa
1c7a0 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
1c7b0 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54   compatible.   T
1c7c0 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  he non-standard 
1c7d0 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e  total() function
1c7e0 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61  .  is provided a
1c7f0 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77  s a convenient w
1c800 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  ay to work aroun
1c810 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72  d this design pr
1c820 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53  oblem.  in the S
1c830 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e  QL language.</p>
1c840 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75  ..  <p>^The resu
1c850 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73  lt of total() is
1c860 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
1c870 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
1c880 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
1c890 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74   sum() is an int
1c8a0 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c  eger value if al
1c8b0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  l non-NULL input
1c8c0 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
1c8d0 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20    ^If any input 
1c8e0 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74  to sum() is neit
1c8f0 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  her an integer o
1c900 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20  r a NULL.  then 
1c910 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20  sum() returns a 
1c920 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1c930 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67  alue.  which mig
1c940 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69  ht be an approxi
1c950 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72  mation to the tr
1c960 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c  ue sum.</p>..  <
1c970 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68  p>^Sum() will th
1c980 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20  row an "integer 
1c990 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74  overflow" except
1c9a0 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74  ion if all input
1c9b0 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73  s.  are integers
1c9c0 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61   or NULL.  and a
1c9d0 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
1c9e0 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79  ow occurs at any
1c9f0 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68   point during th
1ca00 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20  e computation.. 
1ca10 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20   ^Total() never 
1ca20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65  throws an intege
1ca30 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f  r overflow..}.</
1ca40 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  tcl>.</table>..<
1ca50 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1ca60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1caa0 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45  ###.Section INSE
1cab0 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52  RT insert {INSER
1cac0 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62  T *INSERTs}..Bub
1cad0 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72  bleDiagram inser
1cae0 74 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  t-stmt 1.</tcl>.
1caf0 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73  .<p>The INSERT s
1cb00 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69  tatement comes i
1cb10 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f  n three basic fo
1cb20 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rms.  .<ul>.<li>
1cb30 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f  <p>^The first fo
1cb40 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56 41  rm (with the "VA
1cb50 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63  LUES" keyword) c
1cb60 72 65 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f  reates one or mo
1cb70 72 65 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61  re.new rows in.a
1cb80 6e 20 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65  n existing table
1cb90 2e 20 5e 49 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d  . ^If no column-
1cba0 6c 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65  list is specifie
1cbb0 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  d then the numbe
1cbc0 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e 73 65  r.of values inse
1cbd0 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68 20 72  rted into each r
1cbe0 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65 20 73  ow.must be the s
1cbf0 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ame as the numbe
1cc00 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1cc10 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e 20 74  the table. ^In t
1cc20 68 69 73 20 63 61 73 65 0a 74 68 65 20 72 65 73  his case.the res
1cc30 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e  ult of evaluatin
1cc40 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
1cc50 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 65 61  expression in ea
1cc60 63 68 20 74 65 72 6d 20 6f 66 0a 74 68 65 20 56  ch term of.the V
1cc70 41 4c 55 45 53 20 6c 69 73 74 20 69 73 20 69 6e  ALUES list is in
1cc80 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
1cc90 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
1cca0 20 6f 66 20 74 68 65 20 65 61 63 68 20 6e 65 77   of the each new
1ccb0 20 72 6f 77 2c 0a 61 6e 64 20 66 6f 72 74 68 20   row,.and forth 
1ccc0 66 6f 72 20 65 61 63 68 20 73 75 62 73 65 71 75  for each subsequ
1ccd0 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ent expression. 
1cce0 5e 49 66 20 61 0a 63 6f 6c 75 6d 6e 2d 6c 69 73  ^If a.column-lis
1ccf0 74 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  t is specified, 
1cd00 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
1cd10 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65 61 63  of values in eac
1cd20 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a 56 41  h term of the.VA
1cd30 4c 55 53 20 6c 69 73 74 20 6d 75 73 74 20 6d 61  LUS list must ma
1cd40 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  tch the number o
1cd50 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75  f.specified colu
1cd60 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20 74 68  mns. ^Each of th
1cd70 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20  e named columns 
1cd80 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69  of the new row i
1cd90 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69 74 68  s populated.with
1cda0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
1cdb0 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63  evaluating the c
1cdc0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56 41 4c  orresponding VAL
1cdd0 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  UES expression. 
1cde0 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74  ^Table.columns t
1cdf0 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61  hat do not appea
1ce00 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  r in the column 
1ce10 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c 61 74  list are populat
1ce20 65 64 20 77 69 74 68 20 74 68 65 20 64 65 66 61  ed with the defa
1ce30 75 6c 74 0a 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  ult.column value
1ce40 20 28 73 70 65 63 69 66 69 65 64 20 61 73 20 70   (specified as p
1ce50 61 72 74 20 6f 66 20 74 68 65 20 43 52 45 41 54  art of the CREAT
1ce60 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
1ce70 74 29 2c 20 6f 72 20 77 69 74 68 20 4e 55 4c 4c  t), or with NULL
1ce80 20 69 66 0a 6e 6f 20 64 65 66 61 75 6c 74 20 76   if.no default v
1ce90 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69 65  alue is specifie
1cea0 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73  d...<li><p>The s
1ceb0 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
1cec0 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
1ced0 6e 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 53 45  nt contains a SE
1cee0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69  LECT statement.i
1cef0 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c 55  nstead of a VALU
1cf00 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e 65  ES clause. ^A ne
1cf10 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65 72  w entry is inser
1cf20 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
1cf30 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77 20  le for each.row 
1cf40 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  of data returned
1cf50 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68   by executing th
1cf60 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1cf70 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d 6e  nt. ^If a column
1cf80 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69  -list is.specifi
1cf90 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ed, the number o
1cfa0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1cfb0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53   result of the S
1cfc0 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68  ELECT must be th
1cfd0 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75  e same.as the nu
1cfe0 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69 6e  mber of items in
1cff0 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74   the column-list
1d000 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66  . ^Otherwise, if
1d010 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20   no column-list 
1d020 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68  is.specified, th
1d030 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1d040 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
1d050 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20  t of the SELECT 
1d060 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
1d070 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .as the number o
1d080 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1d090 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45 4c   table. ^Any SEL
1d0a0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 69  ECT statement, i
1d0b0 6e 63 6c 75 64 69 6e 67 0a 63 6f 6d 70 6f 75 6e  ncluding.compoun
1d0c0 64 20 53 45 4c 45 43 54 73 20 61 6e 64 20 53 45  d SELECTs and SE
1d0d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
1d0e0 77 69 74 68 20 4f 52 44 45 52 20 42 59 20 61 6e  with ORDER BY an
1d0f0 64 2f 6f 72 20 4c 49 4d 49 54 20 63 6c 61 75 73  d/or LIMIT claus
1d100 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64  es, .may be used
1d110 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
1d120 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20  atement of this 
1d130 66 6f 72 6d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  form...<li><p>Th
1d140 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20  e third form of 
1d150 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
1d160 65 6e 74 20 69 73 20 77 69 74 68 20 44 45 46 41  ent is with DEFA
1d170 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68  ULT VALUES..^(Th
1d180 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46  e INSERT ... DEF
1d190 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74  AULT VALUES stat
1d1a0 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61 20  ement inserts a 
1d1b0 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69  single new row i
1d1c0 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74 61  nto the.named ta
1d1d0 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f 6c  ble.)^ ^Each col
1d1e0 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 72  umn of the new r
1d1f0 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20  ow is populated 
1d200 77 69 74 68 20 69 74 73 20 64 65 66 61 75 6c 74  with its default
1d210 20 76 61 6c 75 65 2c 0a 6f 72 20 77 69 74 68 20   value,.or with 
1d220 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64 65 66  a NULL if no def
1d230 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70  ault value is sp
1d240 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
1d250 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 64 65  of the column.de
1d260 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74 68 65 20  finition in the 
1d270 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
1d280 74 65 6d 65 6e 74 2e 0a 0a 3c 2f 75 6c 3e 0a 0a  tement...</ul>..
1d290 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
1d2a0 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65   conflict-clause
1d2b0 20 61 6c 6c 6f 77 73 20 74 68 65 20 73 70 65 63   allows the spec
1d2c0 69 66 69 63 61 74 69 6f 6e 20 6f 66 20 61 6e 20  ification of an 
1d2d0 61 6c 74 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73  alternative.cons
1d2e0 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20  traint conflict 
1d2f0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
1d300 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69  ithm to use duri
1d310 6e 67 20 74 68 69 73 20 6f 6e 65 20 49 4e 53 45  ng this one INSE
1d320 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 53 65 65 20  RT command..See 
1d330 74 68 65 20 73 65 63 74 69 6f 6e 20 74 69 74 6c  the section titl
1d340 65 64 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed.[ON CONFLICT]
1d350 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
1d360 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 46 6f 72  information..For
1d370 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
1d380 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65 20  ith MySQL, ^the 
1d390 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74 68  parser allows th
1d3a0 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69 6e  e use of the.sin
1d3b0 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20 68  gle keyword <a h
1d3c0 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61 63  ref="lang_replac
1d3d0 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45 3c  e.html">REPLACE<
1d3e0 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61 73  /a> as an .alias
1d3f0 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20   for "INSERT OR 
1d400 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e 28  REPLACE"...<p>^(
1d410 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c 69  The optional "<i
1d420 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
1d430 69 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66  i><b>.</b>" pref
1d440 69 78 20 6f 6e 20 74 68 65 20 3c 69 3e 74 61 62  ix on the <i>tab
1d450 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 0a 69 73 20 73  le-name</i>.is s
1d460 75 70 70 6f 72 74 20 66 6f 72 20 74 6f 70 2d 6c  upport for top-l
1d470 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
1d480 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29 5e 20 20  ements only.)^  
1d490 5e 54 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20  ^The table name 
1d4a0 6d 75 73 74 20 62 65 0a 75 6e 71 75 61 6c 69 66  must be.unqualif
1d4b0 69 65 64 20 66 6f 72 20 49 4e 53 45 52 54 20 73  ied for INSERT s
1d4c0 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f  tatements that o
1d4d0 63 63 75 72 20 77 69 74 68 69 6e 20 5b 43 52 45  ccur within [CRE
1d4e0 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
1d4f0 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61  tements..^Simila
1d500 72 6c 79 2c 20 74 68 65 20 22 44 45 46 41 55 4c  rly, the "DEFAUL
1d510 54 20 56 41 4c 55 45 53 22 20 66 6f 72 6d 20 6f  T VALUES" form o
1d520 66 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61  f the INSERT sta
1d530 74 65 6d 65 6e 74 20 69 73 20 73 75 70 70 6f 72  tement is suppor
1d540 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c 65 76 65  ted for.top-leve
1d550 6c 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  l INSERT stateme
1d560 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74  nts only and not
1d570 20 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74   for INSERT stat
1d580 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 0a 74 72  ements within.tr
1d590 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a 3c 74 63  iggers..<p>..<tc
1d5a0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1d5b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d5f0 23 0a 53 65 63 74 69 6f 6e 20 7b 4f 4e 20 43 4f  #.Section {ON CO
1d600 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 7d 20 63  NFLICT clause} c
1d610 6f 6e 66 6c 69 63 74 20 7b 7b 63 6f 6e 66 6c 69  onflict {{confli
1d620 63 74 20 63 6c 61 75 73 65 7d 20 7b 4f 4e 20 43  ct clause} {ON C
1d630 4f 4e 46 4c 49 43 54 7d 7d 0a 0a 42 75 62 62 6c  ONFLICT}}..Bubbl
1d640 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63  eDiagram conflic
1d650 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a  t-clause.</tcl>.
1d660 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
1d670 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ICT clause is no
1d680 74 20 61 20 73 65 70 61 72 61 74 65 20 53 51 4c  t a separate SQL
1d690 20 63 6f 6d 6d 61 6e 64 2e 20 20 49 74 20 69 73   command.  It is
1d6a0 20 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20   a.non-standard 
1d6b0 63 6c 61 75 73 65 20 74 68 61 74 20 63 61 6e 20  clause that can 
1d6c0 61 70 70 65 61 72 20 69 6e 20 6d 61 6e 79 20 6f  appear in many o
1d6d0 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ther SQL command
1d6e0 73 2e 0a 49 74 20 69 73 20 67 69 76 65 6e 20 69  s..It is given i
1d6f0 74 73 20 6f 77 6e 20 73 65 63 74 69 6f 6e 20 69  ts own section i
1d700 6e 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  n this document 
1d710 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f  because it is no
1d720 74 0a 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61  t.part of standa
1d730 72 64 20 53 51 4c 20 61 6e 64 20 74 68 65 72 65  rd SQL and there
1d740 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f 74 20 62  fore might not b
1d750 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f 70 3e 0a  e familiar.</p>.
1d760 0a 3c 70 3e 5e 54 68 65 20 73 79 6e 74 61 78 20  .<p>^The syntax 
1d770 66 6f 72 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  for the ON CONFL
1d780 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 73  ICT clause is as
1d790 20 73 68 6f 77 6e 20 61 62 6f 76 65 20 66 6f 72   shown above for
1d7a0 0a 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c  .the CREATE TABL
1d7b0 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 46 6f 72  E command.  ^For
1d7c0 20 74 68 65 20 49 4e 53 45 52 54 20 61 6e 64 0a   the INSERT and.
1d7d0 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e 64 73 2c  UPDATE commands,
1d7e0 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 22 4f   the keywords "O
1d7f0 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 72 65 20  N CONFLICT" are 
1d800 72 65 70 6c 61 63 65 64 20 62 79 20 22 4f 52 22  replaced by "OR"
1d810 20 73 6f 20 74 68 61 74 0a 74 68 65 20 73 79 6e   so that.the syn
1d820 74 61 78 20 72 65 61 64 73 20 6d 6f 72 65 20 6e  tax reads more n
1d830 61 74 75 72 61 6c 6c 79 2e 20 20 46 6f 72 20 65  aturally.  For e
1d840 78 61 6d 70 6c 65 2c 20 69 6e 73 74 65 61 64 20  xample, instead 
1d850 6f 66 0a 22 49 4e 53 45 52 54 20 4f 4e 20 43 4f  of."INSERT ON CO
1d860 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 22 20 77  NFLICT IGNORE" w
1d870 65 20 68 61 76 65 20 22 49 4e 53 45 52 54 20 4f  e have "INSERT O
1d880 52 20 49 47 4e 4f 52 45 22 2e 0a 54 68 65 20 6b  R IGNORE"..The k
1d890 65 79 77 6f 72 64 73 20 63 68 61 6e 67 65 20 62  eywords change b
1d8a0 75 74 20 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f  ut the meaning o
1d8b0 66 20 74 68 65 20 63 6c 61 75 73 65 20 69 73 20  f the clause is 
1d8c0 74 68 65 20 73 61 6d 65 0a 65 69 74 68 65 72 20  the same.either 
1d8d0 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  way.</p>..<p>The
1d8e0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1d8f0 75 73 65 20 61 70 70 6c 69 65 73 20 74 6f 20 55  use applies to U
1d900 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55  NIQUE and NOT NU
1d910 4c 4c 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  LL.constraints (
1d920 61 6e 64 20 74 6f 20 50 52 49 4d 41 52 59 20 4b  and to PRIMARY K
1d930 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  EY constraints w
1d940 68 69 63 68 20 66 6f 72 20 74 68 65 20 70 75 72  hich for the pur
1d950 70 6f 73 65 73 20 0a 6f 66 20 74 68 69 73 20 73  poses .of this s
1d960 65 63 74 69 6f 6e 20 61 72 65 20 74 68 65 20 73  ection are the s
1d970 61 6d 65 20 74 68 69 6e 67 20 61 73 20 55 4e 49  ame thing as UNI
1d980 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  QUE constraints)
1d990 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  ..The ON CONFLIC
1d9a0 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73  T algorithm does
1d9b0 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46   not.apply to [F
1d9c0 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
1d9d0 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61  raints]..There a
1d9e0 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74  re five conflict
1d9f0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1da00 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52  rithm choices:.R
1da10 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20  OLLBACK, ABORT, 
1da20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e  FAIL, IGNORE, an
1da30 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20  d REPLACE..^The 
1da40 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
1da50 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
1da60 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20  rithm is ABORT. 
1da70 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68   This.is what th
1da80 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64  ey mean:</p>..<d
1da90 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41  l>.<dt><b>ROLLBA
1daa0 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  CK</b></dt>.<dd>
1dab0 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1dac0 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1dad0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1dae0 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43  urs, the ROLLBAC
1daf0 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  K.resolution alg
1db00 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68  orithm aborts th
1db10 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
1db20 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20  atement with.an 
1db30 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
1db40 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c  T error and roll
1db50 73 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  s back the curre
1db60 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  nt transaction..
1db70 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  ^If no transacti
1db80 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74  on is.active (ot
1db90 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70  her than the imp
1dba0 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  lied transaction
1dbb0 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
1dbc0 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e   on every.comman
1dbd0 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c  d) then the ROLL
1dbe0 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20  BACK resolution 
1dbf0 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20  algorithm works 
1dc00 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a  the same as the.
1dc10 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e  ABORT algorithm.
1dc20 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
1dc30 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e  b>ABORT</b></dt>
1dc40 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61  .<dd><p> ^When a
1dc50 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e  n applicable con
1dc60 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1dc70 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42  n occurs, the AB
1dc80 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ORT.resolution a
1dc90 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20  lgorithm aborts 
1dca0 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
1dcb0 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61  statement.with a
1dcc0 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  n SQLITE_CONSTRA
1dcd0 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61  INT error and ba
1dce0 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e  cks out any chan
1dcf0 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20  ges.made by the 
1dd00 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
1dd10 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67  ement; but chang
1dd20 65 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69  es caused.by pri
1dd30 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  or SQL statement
1dd40 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
1dd50 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72  e transaction ar
1dd60 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20  e preserved and 
1dd70 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  the.transaction 
1dd80 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a  remains active..
1dd90 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
1dda0 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64  ult behavior and
1ddb0 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70   the behavior sp
1ddc0 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53  ecified by the S
1ddd0 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e  QL.standard.</p>
1dde0 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41  </dd>..<dt><b>FA
1ddf0 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  IL</b></dt>.<dd>
1de00 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70  <p> ^When an app
1de10 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  licable constrai
1de20 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1de30 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65  urs, the FAIL.re
1de40 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
1de50 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75  hm aborts the cu
1de60 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d  rrent SQL statem
1de70 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49  ent with an.SQLI
1de80 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72  TE_CONSTRAINT er
1de90 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46  ror.  ^But the F
1dea0 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64  AIL resolution d
1deb0 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74  oes not.back out
1dec0 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f   prior changes o
1ded0 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
1dee0 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20  ent that failed 
1def0 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20  nor does.it end 
1df00 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
1df10 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69  .^For example, i
1df20 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74  f an UPDATE.stat
1df30 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65  ement encountere
1df40 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  d a constraint v
1df50 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20  iolation on the 
1df60 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69  100th row that.i
1df70 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70  t attempts to up
1df80 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66  date, then the f
1df90 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e  irst 99 row chan
1dfa0 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65  ges are preserve
1dfb0 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f  d.but changes to
1dfc0 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65   rows 100 and be
1dfd0 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72  yond never occur
1dfe0 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
1dff0 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64  <b>IGNORE</b></d
1e000 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
1e010 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
1e020 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1e030 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65  ion occurs, .the
1e040 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69   IGNORE resoluti
1e050 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69  on algorithm ski
1e060 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74  ps the one row t
1e070 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65  hat contains.the
1e080 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
1e090 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e  ation and contin
1e0a0 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73  ues processing s
1e0b0 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f  ubsequent rows.o
1e0c0 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  f the SQL statem
1e0d0 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e  ent as if nothin
1e0e0 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74  g went wrong..Ot
1e0f0 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20  her rows before 
1e100 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f  and after the ro
1e110 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64  w that.contained
1e120 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1e130 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e  violation are in
1e140 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
1e150 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20  d.normally. ^No 
1e160 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
1e170 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52  d when the IGNOR
1e180 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1e190 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20  ution.algorithm 
1e1a0 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64  is used.</p></dd
1e1b0 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43  >..<dt><b>REPLAC
1e1c0 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  E</b></dt>.<dd><
1e1d0 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e 49 51 55  p> ^When a UNIQU
1e1e0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
1e1f0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
1e200 68 65 20 52 45 50 4c 41 43 45 20 61 6c 67 6f 72  he REPLACE algor
1e210 69 74 68 6d 0a 64 65 6c 65 74 65 73 20 70 72 65  ithm.deletes pre
1e220 2d 65 78 69 73 74 69 6e 67 20 72 6f 77 73 20 74  -existing rows t
1e230 68 61 74 20 61 72 65 20 63 61 75 73 69 6e 67 20  hat are causing 
1e240 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
1e250 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f 72 20 74  iolation.prior t
1e260 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f 72 20 75  o inserting or u
1e270 70 64 61 74 69 6e 67 20 74 68 65 20 63 75 72 72  pdating the curr
1e280 65 6e 74 20 72 6f 77 20 61 6e 64 20 74 68 65 20  ent row and the 
1e290 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69 6e 75 65  command continue
1e2a0 73 20 0a 65 78 65 63 75 74 69 6e 67 20 6e 6f 72  s .executing nor
1e2b0 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20 4e 4f 54  mally..^If a NOT
1e2c0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
1e2d0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
1e2e0 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 63  s, the REPLACE c
1e2f0 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c 75 74 69  onflict.resoluti
1e300 6f 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20  on replaces the 
1e310 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69 74 68 0a  NULL value with.
1e320 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
1e330 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  e for that colum
1e340 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63 6f 6c  n, or if the col
1e350 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66 61 75  umn has no defau
1e360 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  lt.value, then t
1e370 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72 69 74  he ABORT algorit
1e380 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49 66 20  hm is used..^If 
1e390 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1e3a0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63  nt violation occ
1e3b0 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43 45  urs, the REPLACE
1e3c0 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
1e3d0 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 61  tion.algorithm a
1e3e0 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69 6b 65  lways works like
1e3f0 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c 70 3e   ABORT.</p>..<p>
1e400 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c 41 43  ^When the REPLAC
1e410 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  E conflict resol
1e420 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 20 64  ution strategy d
1e430 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e 20 6f  eletes rows in o
1e440 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66 79 20  rder to.satisfy 
1e450 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 5b 43  a constraint, [C
1e460 52 45 41 54 45 20 54 52 49 47 47 45 52 20 7c 20  REATE TRIGGER | 
1e470 64 65 6c 65 74 65 20 74 72 69 67 67 65 72 73 5d  delete triggers]
1e480 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f 6e 6c   fire if and onl
1e490 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76 65 5f  y if.[recursive_
1e4a0 74 72 69 67 67 65 72 73 20 70 72 61 67 6d 61 20  triggers pragma 
1e4b0 7c 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  | recursive trig
1e4c0 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62 6c 65  gers] are enable
1e4d0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
1e4e0 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f  [sqlite3_update_
1e4f0 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20 68 6f  hook | update ho
1e500 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76 6f 6b  ok] is not invok
1e510 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68 61 74  ed for rows that
1e520 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62 79 20  .are deleted by 
1e530 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
1e540 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
1e550 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f 72 20  strategy.  ^Nor 
1e560 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69 6e 63  does.REPLACE inc
1e570 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71 6c 69  rement the [sqli
1e580 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20 63 68  te3_changes | ch
1e590 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e 0a 54  ange counter]..T
1e5a0 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c 20 62  he exceptional b
1e5b0 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e 65 64  ehaviors defined
1e5c0 20 69 6e 20 74 68 69 73 20 70 61 72 61 67 72 61   in this paragra
1e5d0 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ph might change 
1e5e0 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c  .in a future rel
1e5f0 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c 3e 0a  ease.</p>.</dl>.
1e600 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72 69 74  .<p>^The algorit
1e610 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  hm specified in 
1e620 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20 6f 66  the OR clause of
1e630 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50   an INSERT or UP
1e640 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73 20 61  DATE.overrides a
1e650 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  ny algorithm spe
1e660 63 69 66 69 65 64 20 69 6e 20 61 20 43 52 45 41  cified in a CREA
1e670 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20 6e 6f  TE TABLE..^If no
1e680 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
1e690 65 63 69 66 69 65 64 20 61 6e 79 77 68 65 72 65  ecified anywhere
1e6a0 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f  , the ABORT algo
1e6b0 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f  rithm is used.</
1e6c0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
1e6d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e710 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1e720 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78   REINDEX reindex
1e730 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62 6c 65   REINDEX..Bubble
1e740 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
1e750 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c  stmt 1.</tcl>..<
1e760 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63  p>^The REINDEX c
1e770 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
1e780 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
1e790 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
1e7a0 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
1e7b0 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
1e7c0 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
1e7d0 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
1e7e0 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
1e7f0 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ed..</p>..<p>^If
1e800 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79   the REINDEX key
1e810 77 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  word is not foll
1e820 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74  owed by a collat
1e830 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20  ion-sequence or 
1e840 64 61 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74  database .object
1e850 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65   identifier, the
1e860 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e  n all indices in
1e870 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1e880 74 61 62 61 73 65 73 20 61 72 65 20 72 65 62 75  tabases are rebu
1e890 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ilt...<p>^If the
1e8a0 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64   REINDEX keyword
1e8b0 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
1e8c0 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75  a collation-sequ
1e8d0 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a  ence name, then.
1e8e0 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
1e8f0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1e900 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74  bases that use t
1e910 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69  he named collati
1e920 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65  on sequences.are
1e930 20 72 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70   recreated. ..<p
1e940 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67  >^Or, if the arg
1e950 75 6d 65 6e 74 20 61 74 74 61 63 68 65 64 20 74  ument attached t
1e960 6f 20 74 68 65 20 52 45 49 4e 44 45 58 20 69 64  o the REINDEX id
1e970 65 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69  entifies a speci
1e980 66 69 63 20 0a 64 61 74 61 62 61 73 65 20 74 61  fic .database ta
1e990 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  ble, then all in
1e9a0 64 69 63 65 73 20 61 74 74 61 63 68 65 64 20 74  dices attached t
1e9b0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  o the database t
1e9c0 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74  able are rebuilt
1e9d0 2e 20 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69  . .^If it identi
1e9e0 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20  fies a specific 
1e9f0 64 61 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20  database index, 
1ea00 74 68 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69  then just that i
1ea10 6e 64 65 78 20 69 73 20 72 65 63 72 65 61 74 65  ndex is recreate
1ea20 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20 3c 69  d...<p>^If no <i
1ea30 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
1ea40 69 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 20  i> is specified 
1ea50 61 6e 64 20 74 68 65 72 65 20 65 78 69 73 74 73  and there exists
1ea60 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20 6f 72   both a table or
1ea70 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63 6f 6c  .index and a col
1ea80 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
1ea90 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  of the specified
1eaa0 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65 20 69 6e   name, SQLite in
1eab0 74 65 72 70 72 65 74 73 0a 74 68 69 73 20 61 73  terprets.this as
1eac0 20 61 20 72 65 71 75 65 73 74 20 74 6f 20 72 65   a request to re
1ead0 62 75 69 6c 64 20 74 68 65 20 69 6e 64 69 63 65  build the indice
1eae0 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 6e  s that use the n
1eaf0 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  amed collation s
1eb00 65 71 75 65 6e 63 65 2e 0a 54 68 69 73 20 61 6d  equence..This am
1eb10 62 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73  biguity in the s
1eb20 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f  yntax may be avo
1eb30 69 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73  ided by always s
1eb40 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 69 3e 64  pecifying a.<i>d
1eb50 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e  atabase-name</i>
1eb60 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69 6e 67   when reindexing
1eb70 20 61 20 73 70 65 63 69 66 69 63 20 74 61 62 6c   a specific tabl
1eb80 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c 74 63  e or index...<tc
1eb90 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
1eba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ebb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ebc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ebd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ebe0 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50 4c 41  ##.Section REPLA
1ebf0 43 45 20 72 65 70 6c 61 63 65 20 52 45 50 4c 41  CE replace REPLA
1ec00 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  CE..</tcl>..<p>^
1ec10 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6d 6d  The REPLACE comm
1ec20 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61 73 20  and is an alias 
1ec30 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43 4f 4e  for the "[ON CON
1ec40 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54 20 4f  FLICT | INSERT O
1ec50 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61 72 69  R REPLACE]".vari
1ec60 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  ant of the [INSE
1ec70 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20 0a 54  RT] command.  .T
1ec80 68 69 73 20 61 6c 69 61 73 20 69 73 20 70 72 6f  his alias is pro
1ec90 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74  vided for compat
1eca0 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20 53 51  ibility other SQ
1ecb0 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
1ecc0 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a 5b 49  es.  See the .[I
1ecd0 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 20 64  NSERT] command d
1ece0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1ecf0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1ed00 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a  rmation.</p>  ..
1ed10 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
1ed20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ed60 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45  #####.Section SE
1ed70 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c  LECT select {SEL
1ed80 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75 62 62  ECT query}..Bubb
1ed90 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74  leDiagram select
1eda0 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
1edb0 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 63 6f 72  agram select-cor
1edc0 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  e.BubbleDiagram 
1edd0 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a 42 75  result-column.Bu
1ede0 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e  bbleDiagram join
1edf0 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69  -source.BubbleDi
1ee00 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75  agram single-sou
1ee10 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  rce.BubbleDiagra
1ee20 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62 6c 65  m join-op.Bubble
1ee30 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63 6f 6e  Diagram join-con
1ee40 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65 44 69  straint.BubbleDi
1ee50 61 67 72 61 6d 20 6f 72 64 65 72 69 6e 67 2d 74  agram ordering-t
1ee60 65 72 6d 0a 42 75 62 62 6c 65 44 69 61 67 72 61  erm.BubbleDiagra
1ee70 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61  m compound-opera
1ee80 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e  tor.</tcl>...<p>
1ee90 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
1eea0 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
1eeb0 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61  query the databa
1eec0 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c 74 20  se.  The.result 
1eed0 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73 20 7a  of a SELECT is z
1eee0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  ero or more rows
1eef0 20 6f 66 20 64 61 74 61 20 77 68 65 72 65 20 65   of data where e
1ef00 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20 66 69  ach row.has a fi
1ef10 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  xed number of co
1ef20 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e 54 68 65  lumns.  ..<p>The
1ef30 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ef40 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 63 6f  t is the most co
1ef50 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d 61 6e  mplicated comman
1ef60 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  d in the SQL lan
1ef70 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65 20 74  guage..To make t
1ef80 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 65  he description e
1ef90 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f 77 2c  asier to follow,
1efa0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70 61 73   some of the pas
1efb0 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65 73 63  sages below desc
1efc0 72 69 62 65 0a 74 68 65 20 77 61 79 20 74 68 65  ribe.the way the
1efd0 20 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62   data returned b
1efe0 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  y a SELECT state
1eff0 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d 69 6e  ment is determin
1f000 65 64 20 61 73 20 61 20 73 65 72 69 65 73 20 6f  ed as a series o
1f010 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73 20 69  f.steps. It is i
1f020 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65 65 70  mportant to keep
1f030 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74 68   in mind that th
1f040 69 73 20 69 73 20 70 75 72 65 6c 79 20 69 6c 6c  is is purely ill
1f050 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e 20 70  ustrative -.in p
1f060 72 61 63 74 69 63 65 20 6e 65 69 74 68 65 72 20  ractice neither 
1f070 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79 20 6f  SQLite nor any o
1f080 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 20  ther SQL engine 
1f090 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 66  is required to f
1f0a0 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72 20 61  ollow .this or a
1f0b0 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69 66 69  ny other specifi
1f0c0 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 68 33 3e  c process...<h3>
1f0d0 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20 50 72  Simple Select Pr
1f0e0 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  ocessing</h3>..<
1f0f0 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66 6f 72  p>The syntax for
1f100 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
1f110 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65   statement is de
1f120 70 69 63 74 65 64 20 69 6e 20 74 68 65 20 0a 5b  picted in the .[
1f130 73 65 6c 65 63 74 2d 63 6f 72 65 20 73 79 6e 74  select-core synt
1f140 61 78 20 64 69 61 67 72 61 6d 5d 2e 20 47 65 6e  ax diagram]. Gen
1f150 65 72 61 74 69 6e 67 20 74 68 65 20 72 65 73 75  erating the resu
1f160 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c 65 20  lts of a simple 
1f170 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74  SELECT.statement
1f180 20 69 73 20 70 72 65 73 65 6e 74 65 64 20 61 73   is presented as
1f190 20 61 20 66 6f 75 72 20 73 74 65 70 20 70 72 6f   a four step pro
1f1a0 63 65 73 73 20 69 6e 20 74 68 65 20 64 65 73 63  cess in the desc
1f1b0 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a 0a 0a  ription below:..
1f1c0 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  <ol>.  <li> <p>[
1f1d0 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70 72 6f  FROM clause] pro
1f1e0 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69 6e 70  cessing: The inp
1f1f0 75 74 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ut data for the 
1f200 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 69 73  simple SELECT is
1f210 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d 69 6e  .       determin
1f220 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20 64 61  ed. The input da
1f230 74 61 20 69 73 20 65 69 74 68 65 72 20 69 6d 70  ta is either imp
1f240 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1f250 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20 20 20   row with 0.    
1f260 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66 20 74     columns (if t
1f270 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f 4d 20  here is no FROM 
1f280 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20 64 65  clause) or is de
1f290 74 65 72 6d 69 6e 65 64 20 62 79 20 61 6e 61 6c  termined by anal
1f2a0 79 7a 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  yzing the.      
1f2b0 20 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 73 79   [join-source sy
1f2c0 6e 74 61 78 20 64 69 61 67 72 61 6d 7c 6a 6f 69  ntax diagram|joi
1f2d0 6e 2d 73 6f 75 72 63 65 5d 20 73 70 65 63 69 66  n-source] specif
1f2e0 69 63 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c  ication that fol
1f2f0 6c 6f 77 73 20 0a 20 20 20 20 20 20 20 61 6e 20  lows .       an 
1f300 65 78 70 6c 69 63 69 74 20 46 52 4f 4d 20 63 6c  explicit FROM cl
1f310 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ause..  <li> <p>
1f320 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d 20 70  [WHERE clause] p
1f330 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
1f340 6e 70 75 74 20 64 61 74 61 20 69 73 20 66 69 6c  nput data is fil
1f350 74 65 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  tered using the 
1f360 57 48 45 52 45 0a 20 20 20 20 20 20 20 63 6c 61  WHERE.       cla
1f370 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  use expression. 
1f380 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47 52 4f   .  <li> <p>[GRO
1f390 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59 2c 20  UP BY|GROUP BY, 
1f3a0 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73 75 6c  HAVING and resul
1f3b0 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  t-column express
1f3c0 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a  ion] processing:
1f3d0 20 0a 20 20 20 20 20 20 20 54 68 65 20 73 65 74   .       The set
1f3e0 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1f3f0 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 61  is computed by a
1f400 67 67 72 65 67 61 74 69 6e 67 20 74 68 65 20 64  ggregating the d
1f410 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ata according to
1f420 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52 4f 55  .       any GROU
1f430 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e 64 20  P BY clause and 
1f440 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68 65 20  calculating the 
1f450 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72 65  result-set expre
1f460 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 0a 20  ssions for the. 
1f470 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20 74 68        rows of th
1f480 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74  e filtered input
1f490 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20 3c 6c   dataset.  .  <l
1f4a0 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43 54 7c  i> <p>[DISTINCT|
1f4b0 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b 65 79  DISTINCT/ALL key
1f4c0 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69 6e 67  word] processing
1f4d0 3a 20 49 66 20 74 68 65 20 71 75 65 72 79 20 69  : If the query i
1f4e0 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20 20 20  s a "SELECT.    
1f4f0 20 20 20 44 49 53 54 49 4e 43 54 22 20 71 75 65     DISTINCT" que
1f500 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ry, duplicate ro
1f510 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
1f520 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
1f530 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f 6f 6c  esult rows..</ol
1f540 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
1f550 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73 69 6d  two types of sim
1f560 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ple SELECT state
1f570 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61 74 65  ment - aggregate
1f580 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72 65 67   and .non-aggreg
1f590 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e 41 20  ate queries. ^A 
1f5a0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
1f5b0 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20 61 67  atement is an ag
1f5c0 67 72 65 67 61 74 65 20 71 75 65 72 79 20 69 66  gregate query if
1f5d0 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65 69 74  .it contains eit
1f5e0 68 65 72 20 61 20 47 52 4f 55 50 20 42 59 20 63  her a GROUP BY c
1f5f0 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f 72 20  lause or one or 
1f600 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1f610 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68 65 20  unctions.in the 
1f620 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f 74 68  result-set. ^Oth
1f630 65 72 77 69 73 65 2c 20 69 66 20 61 20 73 69 6d  erwise, if a sim
1f640 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e 74 61  ple SELECT conta
1f650 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61 74 65  ins no aggregate
1f660 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20  .functions or a 
1f670 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 2c  GROUP BY clause,
1f680 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67   it is a non-agg
1f690 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a 0a 3c  regate query...<
1f6a0 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d 69 6e  p><b>1. Determin
1f6b0 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74 20 64  ation of input d
1f6c0 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75 73 65  ata (FROM clause
1f6d0 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c 2f 62   processing).</b
1f6e0 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
1f6f0 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c 2f 74  nt fromclause</t
1f700 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
1f710 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61 75 73  ords {FROM claus
1f720 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  e}</tcl>..<p>The
1f730 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65 64   input data used
1f740 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   by a simple SEL
1f750 45 43 54 20 71 75 65 72 79 20 69 73 20 61 20 73  ECT query is a s
1f760 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e 20 72  et of <i>N</i> r
1f770 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d 3c 2f  ows .each <i>M</
1f780 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 2e  i> columns wide.
1f790 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 46 52  ..<p>^(If the FR
1f7a0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  OM clause is omi
1f7b0 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69 6d 70  tted from a simp
1f7c0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
1f7d0 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 0a 69  ent, then the .i
1f7e0 6e 70 75 74 20 64 61 74 61 20 69 73 20 69 6d 70  nput data is imp
1f7f0 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67 6c 65  licitly a single
1f800 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75 6d 6e   row zero column
1f810 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e 20 3c  s wide)^ (i.e. <
1f820 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a 3c 69  i>N</i>=1 and.<i
1f830 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70 3e 49  >M</i>=0)...<p>I
1f840 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  f a FROM clause 
1f850 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
1f860 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63 68 20  e data on which 
1f870 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1f880 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73 20 63  query.operates c
1f890 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6e  omes from the on
1f8a0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1f8b0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 28   or subqueries (
1f8c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f8d0 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73 69 73  s.in parenthesis
1f8e0 29 20 73 70 65 63 69 66 69 65 64 20 66 6f 6c 6c  ) specified foll
1f8f0 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b  owing the FROM k
1f900 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62 2d 73  eyword. ^A sub-s
1f910 65 6c 65 63 74 20 73 70 65 63 69 66 69 65 64 0a  elect specified.
1f920 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f 75 72  in the join-sour
1f930 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ce following the
1f940 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20   FROM clause in 
1f950 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  a simple SELECT 
1f960 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e  statement is.han
1f970 64 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61  dled as if it wa
1f980 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  s a table contai
1f990 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65  ning the data re
1f9a0 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
1f9b0 69 6e 67 20 74 68 65 0a 73 75 62 2d 73 65 6c 65  ing the.sub-sele
1f9c0 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45  ct statement. ^E
1f9d0 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  ach column of th
1f9e0 65 20 73 75 62 2d 73 65 6c 65 63 74 20 64 61 74  e sub-select dat
1f9f0 61 73 65 74 20 69 6e 68 65 72 69 74 73 20 74 68  aset inherits th
1fa00 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c  e.[collation|col
1fa10 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d  lation sequence]
1fa20 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20   and [affinity] 
1fa30 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
1fa40 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a  ding expression.
1fa50 69 6e 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  in the sub-selec
1fa60 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70  t statement...<p
1fa70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20 6f 6e  >^If there is on
1fa80 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  ly a single tabl
1fa90 65 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f  e in the join-so
1faa0 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  urce following t
1fab0 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20  he FROM.clause, 
1fac0 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64  then the input d
1fad0 61 74 61 20 75 73 65 64 20 62 79 20 74 68 65 20  ata used by the 
1fae0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1faf0 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   is the contents
1fb00 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61   of the.named ta
1fb10 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69  ble. ^If there i
1fb20 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
1fb30 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20  table specified 
1fb40 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a 6a  as part of the.j
1fb50 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c 6c 6f  oin-source follo
1fb60 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 6b 65  wing the FROM ke
1fb70 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68 65 20  yword, then the 
1fb80 63 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61 63 68  contents of each
1fb90 20 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61 72 65   named table.are
1fba0 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73   joined into a s
1fbb0 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f  ingle dataset fo
1fbc0 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
1fbd0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  ECT statement to
1fbe0 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61   operate on..Exa
1fbf0 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74  ctly how the dat
1fc00 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65  a is combined de
1fc10 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65  pends on the spe
1fc20 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 5d 20  cific [join-op] 
1fc30 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73 74 72  and.[join-constr
1fc40 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20 63 6f  aint] used to co
1fc50 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c 65 73  nnect the tables
1fc60 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 74   or subqueries t
1fc70 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41 6c 6c  ogether...<p>All
1fc80 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69 74 65   joins in SQLite
1fc90 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
1fca0 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
1fcb0 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66 74 20  uct of the left 
1fcc0 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 64  and.right-hand d
1fcd0 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20 63 6f  atasets. ^The co
1fce0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63 61 72  lumns of the car
1fcf0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 64  tesian product d
1fd00 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e 20 0a  ataset are, in .
1fd10 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65 20 63  order, all the c
1fd20 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
1fd30 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ft-hand dataset 
1fd40 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20  followed by all 
1fd50 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
1fd60 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
1fd70 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20 69 73  taset. ^There is
1fd80 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20 63 61   a row in the ca
1fd90 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
1fda0 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64 20 62  dataset.formed b
1fdb0 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61 63 68  y combining each
1fdc0 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
1fdd0 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66 72 6f  ion of a row fro
1fde0 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  m the left-hand 
1fdf0 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20  .and right-hand 
1fe00 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e 20 6f  datasets. ^(In o
1fe10 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
1fe20 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
1fe30 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  aset consists of
1fe40 0a 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72 6f 77  .<i>Nlhs</i> row
1fe50 73 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f 69 3e  s of <i>Mlhs</i>
1fe60 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68   columns, and th
1fe70 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
1fe80 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68 73 3c  aset of.<i>Nrhs<
1fe90 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69 3e 4d  /i> rows of <i>M
1fea0 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2c  rhs</i> columns,
1feb0 20 74 68 65 6e 20 74 68 65 20 63 61 72 74 65 73   then the cartes
1fec0 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73 20 61  ian product is a
1fed0 0a 64 61 74 61 73 65 74 20 6f 66 20 3c 69 3e 4e  .dataset of <i>N
1fee0 6c 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72 6f 77  lhs.Nrhs</i> row
1fef0 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69  s, each containi
1ff00 6e 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68 73 3c  ng <i>Mlhs+Mrhs<
1ff10 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a  /i> columns.)^..
1ff20 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d  <p>^If the join-
1ff30 6f 70 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49  op is "CROSS JOI
1ff40 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  N", "INNER JOIN"
1ff50 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f  , "JOIN" or a co
1ff60 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68  mma.(",") and th
1ff70 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20  ere is no ON or 
1ff80 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
1ff90 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
1ffa0 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d   the join is.sim
1ffb0 70 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61  ply the cartesia
1ffc0 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
1ffd0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
1ffe0 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a  hand datasets. .
1fff0 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66  ^There is no dif
20000 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
20010 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  the "INNER JOIN"
20020 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
20030 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e   join.operators.
20040 20 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f   ^(The "CROSS JO
20050 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f  IN" join operato
20060 72 20 70 72 6f 64 75 63 65 73 20 74 68 65 20 73  r produces the s
20070 61 6d 65 20 64 61 74 61 20 61 73 20 74 68 65 20  ame data as the 
20080 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22  ."INNER JOIN", "
20090 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70  JOIN" and "," op
200a0 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69  erators)^, but i
200b0 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70 74 6f 76  s .<a href=optov
200c0 65 72 76 69 65 77 2e 68 74 6d 6c 23 6d 61 6e 63  erview.html#manc
200d0 74 72 6c 3e 68 61 6e 64 6c 65 64 20 73 6c 69 67  trl>handled slig
200e0 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 6c 79  htly differently
200f0 20 62 79 20 74 68 65 20 71 75 65 72 79 0a 6f 70   by the query.op
20100 74 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20 4f 74 68  timizer</a>. Oth
20110 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 74 68  erwise, it is th
20120 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
20130 75 63 74 20 6d 6f 64 69 66 69 65 64 20 0a 61 63  uct modified .ac
20140 63 6f 72 64 69 6e 67 20 74 6f 20 6f 6e 65 20 6f  cording to one o
20150 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f  r more of the fo
20160 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74 20 70  llowing bullet p
20170 6f 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e 0a 20 20  oints: ..<ul>.  
20180 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65  <li> <p>^(If the
20190 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c 61 75  re is an ON clau
201a0 73 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  se specified, th
201b0 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73  en the ON expres
201c0 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65  sion is.       e
201d0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63  valuated for eac
201e0 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72  h row of the car
201f0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61  tesian product a
20200 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f  s a .       [boo
20210 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d  lean expression]
20220 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77  . All rows for w
20230 68 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73  hich the express
20240 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
20250 20 0a 20 20 20 20 20 20 20 66 61 6c 73 65 20 61   .       false a
20260 72 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d  re excluded from
20270 20 74 68 65 20 64 61 74 61 73 65 74 2e 29 5e 0a   the dataset.)^.
20280 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74  .  <li> <p>^If t
20290 68 65 72 65 20 69 73 20 61 20 55 53 49 4e 47 20  here is a USING 
202a0 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 64  clause specified
202b0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
202c0 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 2c  join-constraint,
202d0 0a 20 20 20 20 20 20 20 74 68 65 6e 20 65 61 63  .       then eac
202e0 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  h of the column 
202f0 6e 61 6d 65 73 20 73 70 65 63 69 66 69 65 64 20  names specified 
20300 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
20310 65 20 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20  e datasets to . 
20320 20 20 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c        both the l
20330 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66  eft and right of
20340 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 2e 20 5e 28   the join-op. ^(
20350 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
20360 20 6e 61 6d 65 73 61 6b 65 0a 20 20 20 20 20 20   namesake.      
20370 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 65 78   columns, the ex
20380 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e 58 20  pression "lhs.X 
20390 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76 61 6c  = rhs.X" is eval
203a0 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
203b0 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74 68 65  ow of.       the
203c0 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
203d0 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ct as a [boolean
203e0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 6c   expression]. Al
203f0 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  l rows for which
20400 20 6f 6e 65 0a 20 20 20 20 20 20 20 6f 72 20 6d   one.       or m
20410 6f 72 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  ore of the expre
20420 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 73  ssions evaluates
20430 20 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78   to false are ex
20440 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 0a  cluded from the.
20450 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 73 65         result se
20460 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61  t.)^ ^When compa
20470 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73 20 61  ring values as a
20480 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55 53 49   result of a USI
20490 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 20  NG clause, the. 
204a0 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c        normal rul
204b0 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  es for handling 
204c0 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c  affinities, coll
204d0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 20  ation sequences 
204e0 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  and NULL.       
204f0 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70 61 72  values in compar
20500 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68  isons apply. ^Th
20510 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68  e column from th
20520 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74 68 65  e dataset on the
20530 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68 61 6e  .       left-han
20540 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 6a 6f  d side of the jo
20550 69 6e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63  in operator is c
20560 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
20570 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64  on the left-hand
20580 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f 66 20  .       side of 
20590 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
205a0 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f 72 20  perator (=) for 
205b0 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
205c0 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20  collation .     
205d0 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64 20 61    sequence and a
205e0 66 66 69 6e 69 74 79 20 70 72 65 63 65 64 65 6e  ffinity preceden
205f0 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e  ce...       <p>^
20600 46 6f 72 20 65 61 63 68 20 70 61 69 72 20 6f 66  For each pair of
20610 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66   columns identif
20620 69 65 64 20 62 79 20 61 20 55 53 49 4e 47 20 63  ied by a USING c
20630 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d  lause, the colum
20640 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68  n.       from th
20650 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74  e right-hand dat
20660 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65 64 20  aset is omitted 
20670 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20  from the joined 
20680 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73 20 0a  dataset. ^This .
20690 20 20 20 20 20 20 20 69 73 20 74 68 65 20 6f 6e         is the on
206a0 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  ly difference be
206b0 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20 63 6c  tween a USING cl
206c0 61 75 73 65 20 61 6e 64 20 69 74 73 20 65 71 75  ause and its equ
206d0 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20  ivalent ON.     
206e0 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20    constraint... 
206f0 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
20700 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72  e NATURAL keywor
20710 64 20 69 73 20 61 64 64 65 64 20 74 6f 20 61 6e  d is added to an
20720 79 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  y of the join-op
20730 73 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20  s, then an.     
20740 20 20 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47    implicit USING
20750 20 63 6c 61 75 73 65 20 69 73 20 61 64 64 65 64   clause is added
20760 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e   to the join-con
20770 73 74 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d  straints. The im
20780 70 6c 69 63 69 74 0a 20 20 20 20 20 20 20 55 53  plicit.       US
20790 49 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61  ING clause conta
207a0 69 6e 73 20 65 61 63 68 20 6f 66 20 74 68 65 20  ins each of the 
207b0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
207c0 74 20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68  t appear in both
207d0 0a 20 20 20 20 20 20 20 74 68 65 20 6c 65 66 74  .       the left
207e0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20   and right-hand 
207f0 69 6e 70 75 74 20 64 61 74 61 73 65 74 73 2e 29  input datasets.)
20800 5e 20 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61  ^ ^If the left a
20810 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20  nd right-hand.  
20820 20 20 20 20 20 69 6e 70 75 74 20 64 61 74 61 73       input datas
20830 65 74 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63  ets feature no c
20840 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ommon column nam
20850 65 73 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54  es, then the NAT
20860 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20  URAL keyword.   
20870 20 20 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63      has no effec
20880 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  t on the results
20890 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41   of the join. ^A
208a0 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61   USING or ON cla
208b0 75 73 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e  use may.       n
208c0 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 61  ot be added to a
208d0 20 6a 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69   join that speci
208e0 66 69 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c  fies the NATURAL
208f0 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69   keyword...  <li
20900 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f  > <p>^(If the jo
20910 69 6e 2d 6f 70 20 69 73 20 61 20 22 4c 45 46 54  in-op is a "LEFT
20920 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46 54 20   JOIN" or "LEFT 
20930 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74 68 65  OUTER JOIN", the
20940 6e 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74  n after.       t
20950 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66  he ON or USING f
20960 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73  iltering clauses
20970 20 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69   have been appli
20980 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77  ed, an extra row
20990 20 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65   is .       adde
209a0 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20  d to the output 
209b0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
209c0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66  the original lef
209d0 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20  t-hand input .  
209e0 20 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61       dataset tha
209f0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
20a00 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20   no rows at all 
20a10 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65  in the composite
20a20 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20  .       dataset 
20a30 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65  (if any).)^ ^The
20a40 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74   added rows cont
20a50 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  ain NULL values 
20a60 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20  in the columns. 
20a70 20 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64        that would
20a80 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69   normally contai
20a90 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20  n values copied 
20aa0 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68  from the right-h
20ab0 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20  and input.      
20ac0 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c   dataset.  .</ul
20ad0 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72  >..<p>^(When mor
20ae0 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65  e than two table
20af0 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67  s are joined tog
20b00 65 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66  ether as part of
20b10 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a   a FROM clause,.
20b20 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69  the join operati
20b30 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65  ons are processe
20b40 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20  d in order from 
20b50 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49  left to right. I
20b60 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20  n other .words, 
20b70 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
20b80 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a  (A join-op-1 B j
20b90 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63  oin-op-2 C) is c
20ba0 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20  omputed as .((A 
20bb0 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69  join-op-1 B) joi
20bc0 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 20 20 20  n-op-2 C).)^.   
20bd0 20 20 20 20 0a 0a 3c 70 3e 3c 62 3e 32 2e 20 57      ..<p><b>2. W
20be0 48 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74  HERE clause filt
20bf0 65 72 69 6e 67 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  ering.</b>.<tcl>
20c00 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68 65 72  hd_fragment wher
20c10 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74  eclause</tcl>.<t
20c20 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
20c30 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c 2f 74  WHERE clause}</t
20c40 63 6c 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61 20 57  cl>..<p>^(If a W
20c50 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73  HERE clause is s
20c60 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 57 48  pecified, the WH
20c70 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ERE expression i
20c80 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
20c90 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65  .each row in the
20ca0 20 69 6e 70 75 74 20 64 61 74 61 20 61 73 20 61   input data as a
20cb0 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
20cc0 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20  sion]. All rows 
20cd0 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a 57 48  for which the.WH
20ce0 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
20cf0 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
20d00 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65 78 63  to false are exc
20d10 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64  luded from the d
20d20 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a 63 6f  ataset before.co
20d30 6e 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a 3c 70 3e  ntinuing.)^..<p>
20d40 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e  <b>3. Generation
20d50 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20 72   of the set of r
20d60 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a  esult rows.</b>.
20d70 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
20d80 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e   resultset</tcl>
20d90 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64  .<tcl>hd_keyword
20da0 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65 78  s {result-set ex
20db0 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55  pressions} {GROU
20dc0 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  P BY}</tcl>..<p>
20dd0 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20 64  Once the input d
20de0 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52 4f  ata from the FRO
20df0 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65 65  M clause has bee
20e00 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68  n filtered by th
20e10 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 65  e.WHERE clause e
20e20 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61 6e  xpression (if an
20e30 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20 72  y), the set of r
20e40 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20 74  esult rows for t
20e50 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
20e60 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65 64  T are calculated
20e70 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68  . Exactly how th
20e80 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65 6e  is is done depen
20e90 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ds on whether th
20ea0 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54  e simple .SELECT
20eb0 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
20ec0 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74   or non-aggregat
20ed0 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68 65  e query, and whe
20ee0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47 52  ther or not a GR
20ef0 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77 61  OUP.BY clause wa
20f00 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70  s specified...<p
20f10 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  > The list of ex
20f20 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65 65  pressions betwee
20f30 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e 64  n the SELECT and
20f40 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69   FROM keywords i
20f50 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72  s known as.the r
20f60 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
20f70 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72 65   list.  ^If a re
20f80 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
20f90 69 73 20 74 68 65 20 73 70 65 63 69 61 6c 20 65  is the special e
20fa0 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68  xpression."*" th
20fb0 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69  en all columns i
20fc0 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  n the input data
20fd0 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 64   are substituted
20fe0 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78   for that one ex
20ff0 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74  pression..^(If t
21000 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
21010 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61 20   the alias of a 
21020 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72  table or subquer
21030 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  y in the FROM cl
21040 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  ause.followed by
21050 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63   ".*" then all c
21060 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20  olumns from the 
21070 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 73  named table or s
21080 75 62 71 75 65 72 79 20 61 72 65 0a 73 75 62 73  ubquery are.subs
21090 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 65 20  tituted for the 
210a0 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69 6f  single expressio
210b0 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e 20  n.)^ ^(It is an 
210c0 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22  error to use a "
210d0 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20  *" or."alias.*" 
210e0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e  expression in an
210f0 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72 20  y context other 
21100 74 68 61 6e 20 74 68 61 6e 20 61 20 72 65 73 75  than than a resu
21110 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
21120 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c  st.)^.^(It is al
21130 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75  so an error to u
21140 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61 6c 69  se a "*" or "ali
21150 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e  as.*" expression
21160 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   in a simple SEL
21170 45 43 54 0a 71 75 65 72 79 20 74 68 61 74 20 64  ECT.query that d
21180 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 46  oes not have a F
21190 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c  ROM clause.)^..<
211a0 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20  p> ^(The number 
211b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
211c0 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  e rows returned 
211d0 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  by a simple SELE
211e0 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20  CT statement.is 
211f0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d  equal to the num
21200 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
21210 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
21220 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
21230 20 61 66 74 65 72 0a 73 75 62 73 74 69 74 75 74   after.substitut
21240 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69  ion of * and ali
21250 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  as.* expressions
21260 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c 74 20  .)^ Each result 
21270 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61 74 65  row is calculate
21280 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20  d by.evaluating 
21290 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
212a0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78  in the result ex
212b0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 77 69  pression list wi
212c0 74 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 0a  th respect to a.
212d0 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e  single row of in
212e0 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66 6f 72  put data or, for
212f0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69   aggregate queri
21300 65 73 2c 20 77 69 74 68 20 72 65 73 70 65 63 74  es, with respect
21310 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20 72   to a group.of r
21320 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69  ows...<ul>.  <li
21330 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45  ><p>^If the SELE
21340 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
21350 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  <b>a non-aggrega
21360 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68  te query</b>, th
21370 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65 78 70  en .    each exp
21380 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
21390 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
213a0 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75 61 74   list is evaluat
213b0 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
213c0 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74 61 73  in.    the datas
213d0 65 74 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  et filtered by t
213e0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e  he WHERE clause.
213f0 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
21400 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
21410 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67  ent is <b>an agg
21420 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
21430 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20 20 20  hout a GROUP.   
21440 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20   BY</b> clause, 
21450 74 68 65 6e 20 65 61 63 68 20 61 67 67 72 65 67  then each aggreg
21460 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ate expression i
21470 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
21480 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74   is .    evaluat
21490 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73 20 74  ed once across t
214a0 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 73 65  he entire datase
214b0 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67  t. ^Each non-agg
214c0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
214d0 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72 65 73  n.    in the res
214e0 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61 6c 75  ult-set is evalu
214f0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e  ated once for an
21500 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c   arbitrarily sel
21510 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20 20 20  ected row of.   
21520 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 5e 54   the dataset. ^T
21530 68 65 20 73 61 6d 65 20 61 72 62 69 74 72 61 72  he same arbitrar
21540 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
21550 20 69 73 20 75 73 65 64 20 66 6f 72 20 65 61 63   is used for eac
21560 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67  h.    non-aggreg
21570 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ate expression. 
21580 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61 74 61  ^Or, if the data
21590 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72  set contains zer
215a0 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20  o rows, then .  
215b0 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65    each non-aggre
215c0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20  gate expression 
215d0 69 73 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  is evaluated aga
215e0 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e 73 69  inst a row consi
215f0 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69 72 65  sting.    entire
21600 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65  ly of NULL value
21610 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73  s...   <p>^The s
21620 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
21630 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63 72 65  ult-set data cre
21640 61 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69  ated by evaluati
21650 6e 67 20 74 68 65 20 61 67 67 72 65 67 61 74 65  ng the aggregate
21660 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67  .    and non-agg
21670 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
21680 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
21690 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65 20 72  -set forms the r
216a0 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20  esult of an.    
216b0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
216c0 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 20  without a GROUP 
216d0 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61  BY clause. ^An a
216e0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
216f0 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47 52 4f  ithout a.    GRO
21700 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6c 77  UP BY clause alw
21710 61 79 73 20 72 65 74 75 72 6e 73 20 65 78 61 63  ays returns exac
21720 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64  tly one row of d
21730 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74 68 65  ata, even if the
21740 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20  re are.    zero 
21750 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20 64 61  rows of input da
21760 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28  ta...  <li><p>^(
21770 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  If the SELECT st
21780 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e  atement is <b>an
21790 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
217a0 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20   with a GROUP.  
217b0 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c    BY</b> clause,
217c0 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68   then each of th
217d0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 70  e expressions sp
217e0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
217f0 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f 55 50  of the.    GROUP
21800 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 65 76   BY clause is ev
21810 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
21820 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61 74 61   row of the data
21830 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a 20 20  set. Each row.  
21840 20 20 69 73 20 74 68 65 6e 20 61 73 73 69 67 6e    is then assign
21850 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70 22 20  ed to a "group" 
21860 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73  based on the res
21870 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72 20 77  ults; rows for w
21880 68 69 63 68 0a 20 20 20 20 74 68 65 20 72 65 73  hich.    the res
21890 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69  ults of evaluati
218a0 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  ng the GROUP BY 
218b0 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
218c0 74 68 65 20 73 61 6d 65 20 61 72 65 0a 20 20 20  the same are.   
218d0 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65   assigned to the
218e0 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e   same group.)^ ^
218f0 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
21900 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72 6f 77   of grouping row
21910 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c  s, NULL .    val
21920 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
21930 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75  ed equal. ^The u
21940 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b  sual rules for [
21950 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74  collation|select
21960 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74  ing a.    collat
21970 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 77 69  ion sequence] wi
21980 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f 6d 70  th which to comp
21990 61 72 65 20 74 65 78 74 20 76 61 6c 75 65 73 20  are text values 
219a0 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61 6c 75  apply when evalu
219b0 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72 65 73  ating.    expres
219c0 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50  sions in a GROUP
219d0 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e 54 68   BY clause.  ^Th
219e0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
219f0 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   the GROUP BY cl
21a00 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e  ause.    do <em>
21a10 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f  not</em> have to
21a20 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20   be expressions 
21a30 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 74  that appear in t
21a40 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a  he result. ^The.
21a50 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20      expressions 
21a60 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c  in a GROUP BY cl
21a70 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ause may not be 
21a80 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
21a90 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e  sions...    <p>^
21aa0 28 49 66 20 61 20 48 41 56 49 4e 47 20 63 6c 61  (If a HAVING cla
21ab0 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
21ac0 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
21ad0 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20  d once for each 
21ae0 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20 72 6f  group .    of ro
21af0 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ws as a [boolean
21b00 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66   expression]. If
21b10 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
21b20 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a 20 20  valuating the.  
21b30 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20    HAVING clause 
21b40 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20 67 72  is false, the gr
21b50 6f 75 70 20 69 73 20 64 69 73 63 61 72 64 65 64  oup is discarded
21b60 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41 56 49  .)^ ^If the HAVI
21b70 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20 20 20  NG clause is.   
21b80 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78   an aggregate ex
21b90 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20  pression, it is 
21ba0 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73  evaluated across
21bb0 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
21bc0 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20   group. ^If.    
21bd0 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  a HAVING clause 
21be0 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61  is a non-aggrega
21bf0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69  te expression, i
21c00 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 77  t is evaluated w
21c10 69 74 68 20 72 65 73 70 65 63 74 0a 20 20 20 20  ith respect.    
21c20 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c  to an arbitraril
21c30 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66  y selected row f
21c40 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 20  rom the group.  
21c50 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78 70 72  ^The HAVING expr
21c60 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72  ession may.    r
21c70 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20  efer to values, 
21c80 65 76 65 6e 20 61 67 67 72 65 67 61 74 65 20 66  even aggregate f
21c90 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61  unctions, that a
21ca0 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65  re not in the re
21cb0 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c  sult.</p>..    <
21cc0 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73 73 69  p>^Each expressi
21cd0 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
21ce0 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65 76 61  -set is then eva
21cf0 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
21d00 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70 20 6f  each.    group o
21d10 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68 65 20  f rows. ^If the 
21d20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
21d30 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65   aggregate expre
21d40 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20  ssion, it is .  
21d50 20 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f    evaluated acro
21d60 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  ss all rows in t
21d70 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72  he group. ^Other
21d80 77 69 73 65 2c 20 69 74 20 69 73 20 65 76 61 6c  wise, it is eval
21d90 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 20 20  uated against.  
21da0 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62 69 74    a single arbit
21db0 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f  rarily chosen ro
21dc0 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 68  w from within th
21dd0 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74 68 65  e group. ^If the
21de0 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20 20 74  re is more.    t
21df0 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72  han one non-aggr
21e00 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
21e10 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
21e20 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75 63  et, then all suc
21e30 68 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  h.    expression
21e40 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20  s are evaluated 
21e50 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72 6f 77  for the same row
21e60 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20  ...    <p>^Each 
21e70 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74 20 64  group of input d
21e80 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f 6e 74  ataset rows cont
21e90 72 69 62 75 74 65 73 20 61 20 73 69 6e 67 6c 65  ributes a single
21ea0 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20 20 20   row to the .   
21eb0 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
21ec0 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f  ows. ^Subject to
21ed0 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73 6f 63   filtering assoc
21ee0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 44  iated with the D
21ef0 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65 79 77  ISTINCT.    keyw
21f00 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ord, the number 
21f10 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  of rows returned
21f20 20 62 79 20 61 6e 20 61 67 67 72 65 67 61 74 65   by an aggregate
21f30 20 71 75 65 72 79 20 77 69 74 68 20 61 20 47 52   query with a GR
21f40 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61 75 73  OUP.    BY claus
21f50 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  e is the same as
21f60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67   the number of g
21f70 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20 70 72  roups of rows pr
21f80 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c 79 69  oduced by applyi
21f90 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f 55 50  ng.    the GROUP
21fa0 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47 20 63   BY and HAVING c
21fb0 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20 66 69  lauses to the fi
21fc0 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64 61 74  ltered input dat
21fd0 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  aset..</ul>..<p>
21fe0 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66  <b>4. Removal of
21ff0 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
22000 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73  (DISTINCT proces
22010 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
22020 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74  hd_fragment dist
22030 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  inct</tcl>.<tcl>
22040 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53  hd_keywords {DIS
22050 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  TINCT}</tcl>..<p
22060 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c  >^One of the ALL
22070 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79   or DISTINCT key
22080 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77  words may follow
22090 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77   the SELECT keyw
220a0 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65  ord in a .simple
220b0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
220c0 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  t. ^If the simpl
220d0 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
220e0 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74  LECT ALL, then t
220f0 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66  he.entire set of
22100 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65   result rows are
22110 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
22120 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69   SELECT. ^If nei
22130 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54  ther ALL or.DIST
22140 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e 74  INCT are present
22150 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
22160 69 6f 75 72 20 69 73 20 61 73 20 69 66 20 41 4c  iour is as if AL
22170 4c 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64  L were specified
22180 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  . .^If the simpl
22190 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
221a0 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74  LECT DISTINCT, t
221b0 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hen duplicate ro
221c0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66  ws are removed.f
221d0 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72  rom the set of r
221e0 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72  esult rows befor
221f0 65 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64  e it is returned
22200 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  . ^For the purpo
22210 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67  ses of.detecting
22220 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c   duplicate rows,
22230 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73   two NULL values
22240 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
22250 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68  to be equal. ^Th
22260 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66  e.normal rules f
22270 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63  or selecting a c
22280 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
22290 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  e to compare tex
222a0 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a 61 70  t values with.ap
222b0 70 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d 70 6f 75  ply...<h3>Compou
222c0 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d  nd Select Statem
222d0 65 6e 74 73 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ents.<tcl>hd_fra
222e0 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64 3c 2f  gment compound</
222f0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
22300 77 6f 72 64 73 20 7b 63 6f 6d 70 6f 75 6e 64 20  words {compound 
22310 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
22320 64 20 71 75 65 72 79 7d 3c 2f 74 63 6c 3e 0a 3c  d query}</tcl>.<
22330 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72 20  /h3>..<p>Two or 
22340 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45  more simple SELE
22350 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61  CT statements ma
22360 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64 20 74  y be connected t
22370 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72 6d 0a  ogether to form.
22380 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
22390 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e 49 4f  T using the UNIO
223a0 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e  N, UNION ALL, IN
223b0 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45 50  TERSECT or EXCEP
223c0 54 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 49 6e 20  T operator..^In 
223d0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
223e0 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e 73 74  T, all the const
223f0 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73 20 6d  ituent SELECTs m
22400 75 73 74 20 72 65 74 75 72 6e 20 74 68 65 20 73  ust return the s
22410 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66 20 72  ame .number of r
22420 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e 20 5e  esult columns. ^
22430 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65 6e 74  As the component
22440 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  s of a compound 
22450 53 45 4c 45 43 54 20 6d 75 73 74 0a 62 65 20 73  SELECT must.be s
22460 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
22470 74 65 6d 65 6e 74 73 2c 20 74 68 65 79 20 6d 61  tements, they ma
22480 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 4f 52  y not contain OR
22490 44 45 52 20 42 59 20 6f 72 20 4c 49 4d 49 54 20  DER BY or LIMIT 
224a0 63 6c 61 75 73 65 73 2e 0a 5e 4f 52 44 45 52 20  clauses..^ORDER 
224b0 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
224c0 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63  uses may only oc
224d0 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f  cur at the end o
224e0 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d  f the entire com
224f0 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2e 20 20 0a  pound.SELECT.  .
22500 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e 64 20  .<p>^A compound 
22510 53 45 4c 45 43 54 20 63 72 65 61 74 65 64 20 75  SELECT created u
22520 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f  sing UNION ALL o
22530 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
22540 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f  all the rows.fro
22550 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20  m the SELECT to 
22560 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68 65 20  the left of the 
22570 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74  UNION ALL operat
22580 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68 65 20  or, and all the 
22590 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45  rows.from the SE
225a0 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68  LECT to the righ
225b0 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20 55 4e  t of it. ^The UN
225c0 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77 6f 72  ION operator wor
225d0 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  ks the same way 
225e0 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78  as.UNION ALL, ex
225f0 63 65 70 74 20 74 68 61 74 20 64 75 70 6c 69 63  cept that duplic
22600 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d  ate rows are rem
22610 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 66 69  oved from the fi
22620 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  nal result set..
22630 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54 20 6f  ^The INTERSECT o
22640 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20  perator returns 
22650 74 68 65 20 69 6e 74 65 72 73 65 63 74 69 6f 6e  the intersection
22660 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
22670 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a  of the left and.
22680 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e 20 20  right SELECTs.  
22690 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70 65 72  ^The EXCEPT oper
226a0 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65  ator returns the
226b0 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77 73 20   subset of rows 
226c0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a  returned by the.
226d0 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68 61 74  left SELECT that
226e0 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20 72 65   are not also re
226f0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 72 69  turned by the ri
22700 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54 2e  ght-hand SELECT.
22710 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f 77 73   ^Duplicate.rows
22720 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f   are removed fro
22730 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  m the results of
22740 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20 45   INTERSECT and E
22750 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 73 20  XCEPT operators 
22760 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73 75 6c  before the.resul
22770 74 20 73 65 74 20 69 73 20 72 65 74 75 72 6e 65  t set is returne
22780 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20  d...<p>^For the 
22790 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65  purposes of dete
227a0 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63 61 74  rmining duplicat
227b0 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65 20 72  e rows for the r
227c0 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70 6f 75  esults of compou
227d0 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72 61 74  nd.SELECT operat
227e0 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ors, NULL values
227f0 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
22800 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72 20 4e  equal to other N
22810 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64 0a 64  ULL values and.d
22820 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c  istinct from all
22830 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73   non-NULL values
22840 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  . ^The collation
22850 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74   sequence used t
22860 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f 20 74  o compare .two t
22870 65 78 74 20 76 61 6c 75 65 73 20 69 73 20 64 65  ext values is de
22880 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66 20 74  termined as if t
22890 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
228a0 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
228b0 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73 74 61  -hand.SELECT sta
228c0 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74 68 65  tements were the
228d0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
228e0 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20 6f 66  hand operands of
228f0 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d 29 0a   the equals (=).
22900 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65 70 74  operator, except
22910 20 74 68 61 74 20 67 72 65 61 74 65 72 20 70 72   that greater pr
22920 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f 74 20  ecedence is not 
22930 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20 63 6f  assigned to a co
22940 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65 6e 63  llation .sequenc
22950 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  e specified with
22960 20 74 68 65 20 70 6f 73 74 66 69 78 20 43 4f 4c   the postfix COL
22970 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e 20 5e  LATE operator. ^
22980 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72 61 6e  No affinity.tran
22990 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72 65 20  sformations are 
229a0 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79 20 76  applied to any v
229b0 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d 70 61  alues when compa
229c0 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70 61 72  ring rows as par
229d0 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e 64 20  t of a.compound 
229e0 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57  SELECT. ..<p>^(W
229f0 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d 6f 72  hen three or mor
22a00 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 73  e simple SELECTs
22a10 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 20 69   are connected i
22a20 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  nto a compound S
22a30 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72 6f 75  ELECT,.they grou
22a40 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  p from left to r
22a50 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72 20 77  ight. In other w
22a60 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20 22 42  ords, if "A", "B
22a70 22 20 61 6e 64 20 22 43 22 20 61 72 65 20 61 6c  " and "C" are al
22a80 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  l.simple SELECT 
22a90 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41 20 6f  statements, (A o
22aa0 70 20 42 20 6f 70 20 43 29 20 69 73 20 70 72 6f  p B op C) is pro
22ab0 63 65 73 73 65 64 20 61 73 20 28 28 41 20 6f 70  cessed as ((A op
22ac0 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f   B) op C).)^..</
22ad0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
22ae0 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b 6f 72  ment orderby {or
22af0 64 65 72 20 62 79 7d 3c 2f 74 63 6c 3e 0a 3c 68  der by}</tcl>.<h
22b00 33 3e 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c  3>ORDER BY and L
22b10 49 4d 49 54 2f 4f 46 46 53 45 54 20 43 6c 61 75  IMIT/OFFSET Clau
22b20 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20  ses</h3>..<p>If 
22b30 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
22b40 6e 74 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  nt that returns 
22b50 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
22b60 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  w does not have 
22b70 61 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an.ORDER BY clau
22b80 73 65 2c 20 74 68 65 20 6f 72 64 65 72 20 69 6e  se, the order in
22b90 20 77 68 69 63 68 20 74 68 65 20 72 6f 77 73 20   which the rows 
22ba0 61 72 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  are returned is 
22bb0 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c 20 69  undefined..Or, i
22bc0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
22bd0 6d 65 6e 74 20 64 6f 65 73 20 68 61 76 65 20 61  ment does have a
22be0 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
22bf0 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 69 73 74  e, then the list
22c00 20 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e 73 20   of.expressions 
22c10 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
22c20 4f 52 44 45 52 20 42 59 20 64 65 74 65 72 6d 69  ORDER BY determi
22c30 6e 65 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  ne the order in 
22c40 77 68 69 63 68 20 72 6f 77 73 0a 61 72 65 20 72  which rows.are r
22c50 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
22c60 73 65 72 2e 20 5e 52 6f 77 73 20 61 72 65 20 66  ser. ^Rows are f
22c70 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73 65  irst sorted base
22c80 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
22c90 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   of.evaluating t
22ca0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70  he left-most exp
22cb0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f  ression in the O
22cc0 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68  RDER BY list, th
22cd0 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b  en ties are brok
22ce0 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67  en.by evaluating
22cf0 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74   the second left
22d00 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e  -most expression
22d10 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20   and so on. The 
22d20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74  order in which.t
22d30 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  wo rows for whic
22d40 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65  h all ORDER BY e
22d50 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75  xpressions evalu
22d60 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c  ate to equal val
22d70 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64  ues are.returned
22d80 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e   is undefined. ^
22d90 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
22da0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20  pression may be 
22db0 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f  optionally follo
22dc0 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68  wed.by one of th
22dd0 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28  e keywords ASC (
22de0 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61  smaller values a
22df0 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72 73  re returned firs
22e00 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67  t) or DESC (larg
22e10 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65  er.values are re
22e20 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e  turned first). ^
22e30 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f  If neither ASC o
22e40 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63 69  r DESC are speci
22e50 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73  fied, rows.are s
22e60 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69  orted in ascendi
22e70 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75  ng (smaller valu
22e80 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72 20  es first) order 
22e90 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e  by default...<p>
22ea0 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65 78  Each ORDER BY ex
22eb0 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63  pression is proc
22ec0 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  essed as follows
22ed0 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
22ee0 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52  <p>^If the ORDER
22ef0 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22f00 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74  s a constant int
22f10 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a  eger K then the.
22f20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
22f30 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61  nsidered an alia
22f40 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63  s for the K-th c
22f50 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
22f60 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73  ult set.(columns
22f70 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72   are numbered fr
22f80 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
22f90 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
22fa0 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  )...<li><p>^If t
22fb0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
22fc0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65  ession is an ide
22fd0 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f 72  ntifier that cor
22fe0 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20  responds to.the 
22ff0 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20  alias of one of 
23000 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d  the output colum
23010 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  ns, then the exp
23020 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
23030 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66  dered.an alias f
23040 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  or that column..
23050 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69  .<li><p>^Otherwi
23060 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
23070 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
23080 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72  s any other expr
23090 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65  ession, it .is e
230a0 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65  valuated and the
230b0 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20   returned value 
230c0 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68  used to order th
230d0 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e  e output rows. ^
230e0 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  If.the SELECT st
230f0 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d  atement is a sim
23100 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ple SELECT, then
23110 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79   an ORDER BY may
23120 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62   contain any.arb
23130 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69 6f  itrary expressio
23140 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66  ns. ^However, if
23150 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20 61   the SELECT is a
23160 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
23170 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20  , then.ORDER BY 
23180 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
23190 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73   are not aliases
231a0 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d   to output colum
231b0 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  ns must be exact
231c0 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61  ly.the same as a
231d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65  n expression use
231e0 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63  d as an output c
231f0 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  olumn..</ol>..<p
23200 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
23210 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f  es of sorting ro
23220 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ws, values are c
23230 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20 73  ompared in the s
23240 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b  ame way.as for [
23250 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
23260 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c  ssions]. The col
23270 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
23280 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a  used to compare.
23290 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20  two text values 
232a0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73  is determined as
232b0 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a   follows:..<ol>.
232c0 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
232d0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
232e0 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64  sion is assigned
232f0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
23300 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68  uence using.  th
23310 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41  e postfix [COLLA
23320 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68  TE operator], th
23330 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  en the specified
23340 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
23350 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20  nce is.  used.. 
23360 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
23370 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
23380 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
23390 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e  s an alias to an
233a0 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68   expression.  th
233b0 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73 69  at has been assi
233c0 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  gned a collation
233d0 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20   sequence using 
233e0 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b  the postfix .  [
233f0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
23400 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c  ], then the coll
23410 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61  ation sequence a
23420 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61  ssigned to the a
23430 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73 73  liased.  express
23440 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c  ion is used..  <
23450 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
23460 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
23470 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
23480 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61  a column or an a
23490 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70  lias of.  an exp
234a0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
234b0 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  a column, then t
234c0 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
234d0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
234e0 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  r.  the column i
234f0 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c  s used. .  <li><
23500 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68  p>^Otherwise, th
23510 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61  e [BINARY] colla
23520 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
23530 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   used..</ol>..<p
23540 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  >In a compound S
23550 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
23560 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
23570 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
23580 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
23590 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
235a0 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
235b0 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53  f the compound S
235c0 45 4c 45 43 54 2e 0a 5e 28 49 66 20 61 6e 20 4f  ELECT..^(If an O
235d0 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
235e0 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  on is not an int
235f0 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e  eger alias, then
23600 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
23610 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53  .the left-most S
23620 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d  ELECT in the com
23630 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75  pound for a resu
23640 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d  lt column that m
23650 61 74 63 68 65 73 20 65 69 74 68 65 72 0a 74 68  atches either.th
23660 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72  e second or thir
23670 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49  d rules above. I
23680 66 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  f a match is fou
23690 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68 20 73  nd, the search s
236a0 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70  tops and.the exp
236b0 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c  ression is handl
236c0 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66  ed as an alias f
236d0 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  or the result co
236e0 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73  lumn that it has
236f0 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67   been.matched ag
23700 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65  ainst. Otherwise
23710 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43  , the next SELEC
23720 54 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 69  T to the right i
23730 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20  s tried, and so 
23740 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74  on.)^.^If no mat
23750 63 68 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  ching expression
23760 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e   can be found in
23770 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
23780 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74  mns of any.const
23790 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69  ituent SELECT, i
237a0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e  t is an error. ^
237b0 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  Each term of the
237c0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
237d0 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65   is.processed se
237e0 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79  parately and may
237f0 20 62 65 20 6d 61 74 63 68 65 64 20 61 67 61 69   be matched agai
23800 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  nst result colum
23810 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e  ns from differen
23820 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t.SELECT stateme
23830 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  nts in the compo
23840 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  und.</p>..<p>The
23850 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73   LIMIT clause is
23860 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61   used to place a
23870 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  n upper bound on
23880 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
23890 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20  ows.returned by 
238a0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
238b0 6e 74 2e 20 5e 41 6e 79 20 73 63 61 6c 61 72 20  nt. ^Any scalar 
238c0 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
238d0 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c  e used in the .L
238e0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20  IMIT clause, so 
238f0 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75  long as it evalu
23900 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67  ates to an integ
23910 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68  er or a value th
23920 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65  at can be.lossle
23930 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
23940 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49  o an integer. ^I
23950 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
23960 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
23970 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61  NULL .value or a
23980 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74  ny other value t
23990 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f  hat cannot be lo
239a0 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74  sslessly convert
239b0 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
239c0 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65  , an.error is re
239d0 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20  turned. ^If the 
239e0 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
239f0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20   evaluates to a 
23a00 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a  negative value,.
23a10 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f  then there is no
23a20 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
23a30 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
23a40 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74  ws returned. ^Ot
23a50 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c  herwise, the.SEL
23a60 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20  ECT returns the 
23a70 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20  first N rows of 
23a80 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f  its result set o
23a90 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20  nly, where N is 
23aa0 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74  the value.that t
23ab0 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
23ac0 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
23ad0 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45  . ^Or, if the SE
23ae0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77  LECT statement w
23af0 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73  ould.return less
23b00 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74   than N rows wit
23b10 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61  hout a LIMIT cla
23b20 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e  use, then the en
23b30 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20  tire result set 
23b40 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c  is.returned. ..<
23b50 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f  p>^The expressio
23b60 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  n attached to th
23b70 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45  e optional OFFSE
23b80 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61  T clause that ma
23b90 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54  y follow a.LIMIT
23ba0 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73   clause must als
23bb0 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e  o evaluate to an
23bc0 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76   integer, or a v
23bd0 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
23be0 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76  .losslessly conv
23bf0 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
23c00 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72  ger. ^If an expr
23c10 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46  ession has an OF
23c20 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
23c30 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f  n the first M ro
23c40 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66  ws are omitted f
23c50 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73  rom the result s
23c60 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  et returned by t
23c70 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d  he SELECT.statem
23c80 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74  ent and the next
23c90 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75   N rows are retu
23ca0 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e  rned, where M an
23cb0 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75  d N are the valu
23cc0 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53  es that.the OFFS
23cd0 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  ET and LIMIT cla
23ce0 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f  uses evaluate to
23cf0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
23d00 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45  ^Or, if the SELE
23d10 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20  CT.would return 
23d20 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f  less than M+N ro
23d30 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74  ws if it did not
23d40 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c   have a LIMIT cl
23d50 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66  ause, then the.f
23d60 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20  irst M rows are 
23d70 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
23d80 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28  remaining rows (
23d90 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75  if any) are retu
23da0 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46  rned. ^If the.OF
23db0 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c  FSET clause eval
23dc0 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74  uates to a negat
23dd0 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72  ive value, the r
23de0 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73  esults are the s
23df0 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64  ame as if it.had
23e00 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65   evaluated to ze
23e10 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64  ro...<p>^Instead
23e20 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f   of a separate O
23e30 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68  FFSET clause, th
23e40 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d  e LIMIT clause m
23e50 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73  ay specify two.s
23e60 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e  calar expression
23e70 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61  s separated by a
23e80 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73   comma. ^In this
23e90 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74   case, the first
23ea0 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75   expression.is u
23eb0 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45  sed as the OFFSE
23ec0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  T expression and
23ed0 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74   the second as t
23ee0 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
23ef0 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75  ion..This is cou
23f00 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20  nter-intuitive, 
23f10 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68  as when using th
23f20 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20  e OFFSET clause 
23f30 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68  the second of.th
23f40 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e  e two expression
23f50 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20  s is the OFFSET 
23f60 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68  and the first th
23f70 65 20 4c 49 4d 49 54 2e 20 54 68 69 73 20 69 73  e LIMIT. This is
23f80 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69   intentional.- i
23f90 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70  t maximizes comp
23fa0 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f  atibility with o
23fb0 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73  ther SQL databas
23fc0 65 20 73 79 73 74 65 6d 73 2e 0a 0a 3c 74 63 6c  e systems...<tcl
23fd0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
23fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24020 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
24030 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
24040 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62 6c 65  UPDATEs}..Bubble
24050 44 69 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73  Diagram update-s
24060 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69 61 67  tmt 1.BubbleDiag
24070 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61  ram qualified-ta
24080 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a  ble-name.</tcl>.
24090 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54 45 20 73  .<p>^An UPDATE s
240a0 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
240b0 20 74 6f 20 6d 6f 64 69 66 79 20 61 20 73 75 62   to modify a sub
240c0 73 65 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65  set of the value
240d0 73 20 73 74 6f 72 65 64 20 69 6e 20 0a 7a 65 72  s stored in .zer
240e0 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f  o or more rows o
240f0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
24100 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20  able identified 
24110 62 79 20 74 68 65 20 0a 3c 69 3e 71 75 61 6c 69  by the .<i>quali
24120 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 3c  fied-table-name<
24130 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
24140 20 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44   part of the UPD
24150 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ATE statement...
24160 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54  <p>^If the UPDAT
24170 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  E statement does
24180 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52   not have a WHER
24190 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f  E clause, all ro
241a0 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20  ws in the.table 
241b0 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20  are modified by 
241c0 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68  the UPDATE. ^Oth
241d0 65 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41  erwise, the UPDA
241e0 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20  TE affects only 
241f0 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77  those.rows for w
24200 68 69 63 68 20 74 68 65 20 72 65 73 75 6c 74 20  hich the result 
24210 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  of evaluating th
24220 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 65  e WHERE clause e
24230 78 70 72 65 73 73 69 6f 6e 20 61 73 20 61 20 0a  xpression as a .
24240 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73  [boolean express
24250 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78 70 72  ion|boolean expr
24260 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 5d 2e  ession is true].
24270 20 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e 20 65   ^It is not an e
24280 72 72 6f 72 20 69 66 20 74 68 65 0a 57 48 45 52  rror if the.WHER
24290 45 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f  E clause does no
242a0 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72  t evaluate to tr
242b0 75 65 20 66 6f 72 20 61 6e 79 20 72 6f 77 20 69  ue for any row i
242c0 6e 20 74 68 65 20 74 61 62 6c 65 20 2d 20 74 68  n the table - th
242d0 69 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20 74 68  is just.means th
242e0 61 74 20 74 68 65 20 55 50 44 41 54 45 20 73 74  at the UPDATE st
242f0 61 74 65 6d 65 6e 74 20 61 66 66 65 63 74 73 20  atement affects 
24300 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 54  zero rows...<p>T
24310 68 65 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73  he modifications
24320 20 6d 61 64 65 20 74 6f 20 65 61 63 68 20 72 6f   made to each ro
24330 77 20 61 66 66 65 63 74 65 64 20 62 79 20 61 6e  w affected by an
24340 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
24350 74 20 61 72 65 0a 64 65 74 65 72 6d 69 6e 65 64  t are.determined
24360 20 62 79 20 74 68 65 20 6c 69 73 74 20 6f 66 20   by the list of 
24370 61 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f 6c 6c  assignments foll
24380 6f 77 69 6e 67 20 74 68 65 20 53 45 54 20 6b 65  owing the SET ke
24390 79 77 6f 72 64 2e 20 45 61 63 68 0a 61 73 73 69  yword. Each.assi
243a0 67 6e 6d 65 6e 74 20 73 70 65 63 69 66 69 65 73  gnment specifies
243b0 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74   a column name t
243c0 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68  o the left of th
243d0 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20 61 6e  e equals sign an
243e0 64 20 61 0a 73 63 61 6c 61 72 20 65 78 70 72 65  d a.scalar expre
243f0 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72 69 67  ssion to the rig
24400 68 74 2e 20 5e 46 6f 72 20 65 61 63 68 20 61 66  ht. ^For each af
24410 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68 65 20  fected row, the 
24420 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72  named columns.ar
24430 65 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  e set to the val
24440 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61  ues found by eva
24450 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72  luating the corr
24460 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72  esponding scalar
24470 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e   .expressions. ^
24480 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  If a single colu
24490 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72 73 20  mn-name appears 
244a0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 69  more than once i
244b0 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 61 73  n the list of.as
244c0 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65 73 73  signment express
244d0 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20 74 68  ions, all but th
244e0 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63 63 75  e rightmost occu
244f0 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f 72 65  rrence is ignore
24500 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74  d. ^Columns.that
24510 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69   do not appear i
24520 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 73  n the list of as
24530 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65  signments are le
24540 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e  ft unmodified. ^
24550 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70 72 65  The scalar.expre
24560 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66 65 72  ssions may refer
24570 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   to columns of t
24580 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75 70 64  he row being upd
24590 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73 20 63  ated. ^In this c
245a0 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65  ase all.scalar e
245b0 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
245c0 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72 65 20  valuated before 
245d0 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74 73 20  any assignments 
245e0 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e 5e 54  are made...<p>^T
245f0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f 6e 66  he optional conf
24600 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c 6c 6f  lict-clause allo
24610 77 73 20 74 68 65 20 75 73 65 72 20 74 6f 20 6e  ws the user to n
24620 6f 6d 69 6e 61 74 65 20 61 20 73 70 65 63 69 66  ominate a specif
24630 69 63 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ic.constraint co
24640 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
24650 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75  n algorithm to u
24660 73 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f  se during this o
24670 6e 65 20 55 50 44 41 54 45 20 63 6f 6d 6d 61 6e  ne UPDATE comman
24680 64 2e 0a 52 65 66 65 72 20 74 6f 20 74 68 65 20  d..Refer to the 
24690 73 65 63 74 69 6f 6e 20 65 6e 74 69 74 6c 65 64  section entitled
246a0 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 66   [ON CONFLICT] f
246b0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
246c0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68 33 3e  formation...<h3>
246d0 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20  Restrictions on 
246e0 55 50 44 41 54 45 20 53 74 61 74 65 6d 65 6e 74  UPDATE Statement
246f0 73 20 57 69 74 68 69 6e 20 43 52 45 41 54 45 20  s Within CREATE 
24700 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a 3c 70  TRIGGER</h3>..<p
24710 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  >The following a
24720 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74 61 78  dditional syntax
24730 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
24740 70 6c 79 20 74 6f 20 55 50 44 41 54 45 20 73 74  ply to UPDATE st
24750 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 6f 63  atements that.oc
24760 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 20 62  cur within the b
24770 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41 54 45  ody of a [CREATE
24780 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
24790 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20 20 3c  ent.  ..<ul>.  <
247a0 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e 74 61  li><p>^The <i>ta
247b0 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73 70 65  ble-name</i> spe
247c0 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
247d0 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  f an UPDATE stat
247e0 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20  ement within.   
247f0 20 20 20 61 20 74 72 69 67 67 65 72 20 62 6f 64     a trigger bod
24800 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c  y must be unqual
24810 69 66 69 65 64 2e 20 5e 28 49 6e 20 6f 74 68 65  ified. ^(In othe
24820 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20  r words, the.   
24830 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e     <i>database-n
24840 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 20  ame</i><b>.</b> 
24850 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20 74 61  prefix on the ta
24860 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ble name of the 
24870 55 50 44 41 54 45 20 69 73 0a 20 20 20 20 20 20  UPDATE is.      
24880 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69 74 68  not allowed with
24890 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e 20 5e  in triggers.)^ ^
248a0 55 6e 6c 65 73 73 20 74 68 65 20 74 61 62 6c 65  Unless the table
248b0 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
248c0 69 67 67 65 72 0a 20 20 20 20 20 20 69 73 20 61  igger.      is a
248d0 74 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68  ttached is in th
248e0 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c  e TEMP database,
248f0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
24900 20 75 70 64 61 74 65 64 20 62 79 20 74 68 65 0a   updated by the.
24910 20 20 20 20 20 20 74 72 69 67 67 65 72 20 70 72        trigger pr
24920 6f 67 72 61 6d 20 6d 75 73 74 20 72 65 73 69 64  ogram must resid
24930 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  e in the same da
24940 74 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49  tabase as it. ^I
24950 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20  f the table.    
24960 20 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74    to which the t
24970 72 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68  rigger is attach
24980 65 64 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d  ed is in the TEM
24990 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
249a0 20 74 68 65 0a 20 20 20 20 20 20 75 6e 71 75 61   the.      unqua
249b0 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66 20 74  lified name of t
249c0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 75  he table being u
249d0 70 64 61 74 65 64 20 69 73 20 72 65 73 6f 6c 76  pdated is resolv
249e0 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
249f0 61 79 0a 20 20 20 20 20 20 61 73 20 69 74 20 69  ay.      as it i
24a00 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65  s for a top-leve
24a10 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20  l statement (by 
24a20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20  searching first 
24a30 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
24a40 65 2c 0a 20 20 20 20 20 20 74 68 65 6e 20 74 68  e,.      then th
24a50 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
24a60 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20   then any other 
24a70 64 61 74 61 62 61 73 65 73 20 69 6e 20 74 68 65  databases in the
24a80 20 6f 72 64 65 72 20 74 68 65 79 20 77 65 72 65   order they were
24a90 0a 20 20 20 20 20 20 61 74 74 61 63 68 65 64 29  .      attached)
24aa0 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  ...  <li><p>^The
24ab0 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
24ac0 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
24ad0 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ses are not allo
24ae0 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a 20 20  wed on UPDATE.  
24af0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
24b00 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c  ithin triggers.<
24b10 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  /p>..  <li><p>^T
24b20 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44  he LIMIT and ORD
24b30 45 52 20 42 59 20 63 6c 61 75 73 65 73 20 66 6f  ER BY clauses fo
24b40 72 20 55 50 44 41 54 45 20 61 72 65 20 75 6e 73  r UPDATE are uns
24b50 75 70 70 6f 72 74 65 64 20 77 69 74 68 69 6e 0a  upported within.
24b60 20 20 20 20 20 20 74 72 69 67 67 65 72 73 2c 20        triggers, 
24b70 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
24b80 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  e compilation op
24b90 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 20 62 75  tions used to bu
24ba0 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c 2f 75 6c  ild SQLite..</ul
24bb0 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c 20  >..<h3>Optional 
24bc0 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52 20  LIMIT and ORDER 
24bd0 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33 3e 0a  BY Clauses</h3>.
24be0 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65 20  .<p>^(If SQLite 
24bf0 69 73 20 62 75 69 6c 74 20 77 69 74 68 20 74 68  is built with th
24c00 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
24c10 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
24c20 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69  IMIT].compile-ti
24c30 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e 20 74  me option then t
24c40 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65  he syntax of the
24c50 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
24c60 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a 77 69  t is extended.wi
24c70 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45  th optional ORDE
24c80 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
24c90 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f 6c 6c  lauses)^ as foll
24ca0 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42  ows:</p>..<tcl>B
24cb0 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 64  ubbleDiagram upd
24cc0 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ate-stmt-limited
24cd0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20 61  </tcl>..<p>^If a
24ce0 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
24cf0 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
24d00 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
24d10 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
24d20 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 75  s that.will be u
24d30 70 64 61 74 65 64 20 69 73 20 66 6f 75 6e 64 20  pdated is found 
24d40 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
24d50 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
24d60 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
24d70 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
24d80 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 41  nteger value. ^A
24d90 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20   negative value 
24da0 69 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  is interpreted a
24db0 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a 0a 3c  s "no limit"...<
24dc0 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d 49 54 20  p>^If the LIMIT 
24dd0 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c 75  expression evalu
24de0 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65 67 61  ates to non-nega
24df0 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e 4e 3c  tive value <i>N<
24e00 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55 50 44 41  /i> and the.UPDA
24e10 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73  TE statement has
24e20 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
24e30 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f  use, then all ro
24e40 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ws that would be
24e50 20 75 70 64 61 74 65 64 20 69 6e 0a 74 68 65 20   updated in.the 
24e60 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65 20 4c  absence of the L
24e70 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72 65 20  IMIT clause are 
24e80 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69 6e 67  sorted according
24e90 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59   to the ORDER BY
24ea0 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74 20 3c   and the.first <
24eb0 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74 65 64 2e  i>N</i> updated.
24ec0 20 5e 28 49 66 20 74 68 65 20 55 50 44 41 54 45   ^(If the UPDATE
24ed0 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
24ee0 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20 63 6c  has an OFFSET cl
24ef0 61 75 73 65 2c 0a 74 68 65 6e 20 69 74 20 69 73  ause,.then it is
24f00 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61 6c 75   similarly evalu
24f10 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f  ated and cast to
24f20 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
24f30 65 2e 20 49 66 20 74 68 65 20 4f 46 46 53 45 54  e. If the OFFSET
24f40 0a 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61 6c  .expression eval
24f50 75 61 74 65 73 20 74 6f 20 61 20 6e 6f 6e 2d 6e  uates to a non-n
24f60 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69  egative value <i
24f70 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65  >M</i>, then the
24f80 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 0a   first <i>M</i>.
24f90 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70 65 64  rows are skipped
24fa0 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69   and the followi
24fb0 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  ng <i>N</i> rows
24fc0 20 75 70 64 61 74 65 64 20 69 6e 73 74 65 61 64   updated instead
24fd0 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  .)^..<p>^If the 
24fe0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
24ff0 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59   has no ORDER BY
25000 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
25010 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c  l rows that.woul
25020 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 20  d be updated in 
25030 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
25040 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
25050 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e  are assembled in
25060 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72   an.arbitrary or
25070 64 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79  der before apply
25080 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e  ing the LIMIT an
25090 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73  d OFFSET clauses
250a0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 77   to determine .w
250b0 68 69 63 68 20 61 72 65 20 61 63 74 75 61 6c 6c  hich are actuall
250c0 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c 70 3e 5e  y updated...<p>^
250d0 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  (The ORDER BY cl
250e0 61 75 73 65 20 6f 6e 20 61 6e 20 55 50 44 41 54  ause on an UPDAT
250f0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  E statement is u
25100 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65  sed only to dete
25110 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73  rmine which.rows
25120 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65   fall within the
25130 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65   LIMIT. The orde
25140 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20  r in which rows 
25150 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69 73 20  are modified is 
25160 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73  arbitrary.and is
25170 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20   not influenced 
25180 62 79 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  by the ORDER BY 
25190 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e  clause.)^..<tcl>
251a0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
251b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
251c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
251d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
251e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
251f0 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d 20 76  Section VACUUM v
25200 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a 42 75  acuum VACUUM..Bu
25210 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75  bbleDiagram vacu
25220 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e  um-stmt 1.</tcl>
25230 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
25240 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
25250 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65 20 64  lds the entire d
25260 61 74 61 62 61 73 65 2e 20 54 68 65 72 65 20 61  atabase. There a
25270 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
25280 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
25290 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
252a0 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
252b0 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
252c0 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
252d0 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
252e0 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
252f0 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
25300 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
25310 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
25320 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
25330 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
25340 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
25350 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
25360 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
25370 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
25380 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
25390 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
253a0 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
253b0 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
253c0 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
253d0 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
253e0 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
253f0 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
25400 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
25410 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25420 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
25430 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
25440 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
25450 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
25460 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
25470 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
25480 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
25490 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
254a0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
254b0 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
254c0 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
254d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
254e0 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
254f0 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
25500 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
25510 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
25520 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
25530 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
25540 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25550 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
25560 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
25570 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
25580 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
25590 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
255a0 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
255b0 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
255c0 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
255d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
255e0 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
255f0 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
25600 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
25610 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
25620 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
25630 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
25640 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
25650 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
25660 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
25670 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
25680 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
25690 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
256a0 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
256b0 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
256c0 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
256d0 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
256e0 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
256f0 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
25700 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
25710 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
25720 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
25730 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
25740 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
25750 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
25760 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
25770 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
25780 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
25790 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
257a0 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
257b0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
257c0 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
257d0 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
257e0 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
257f0 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
25800 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
25810 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
25820 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
25830 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f 6e 6c  .<p>^(VACUUM onl
25840 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65 20 6d  y works on the m
25850 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 74  ain database. It
25860 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
25870 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a 61 74   to VACUUM an.at
25880 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
25890 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  file.)^..<p>^The
258a0 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20   VACUUM command 
258b0 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69 6e 67  works by copying
258c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
258d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
258e0 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79 20 64  to.a temporary d
258f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
25900 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e   then overwritin
25910 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77  g the original w
25920 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65 6e 74  ith the .content
25930 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  s of the tempora
25940 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e 20 6f  ry file. ^When o
25950 76 65 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f  verwriting the o
25960 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c 6c 62  riginal, a rollb
25970 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20 5b  ack.journal or [
25980 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
25990 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75 73 65   WAL file is use
259a0 64 20 6a 75 73 74 20 61 73 20 69 74 20 77 6f 75  d just as it wou
259b0 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a 6f 74  ld be for any.ot
259c0 68 65 72 20 64 61 74 61 62 61 73 65 20 74 72 61  her database tra
259d0 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69 73 20  nsaction. ^This 
259e0 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20  means that when 
259f0 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61 74 61  VACUUMing a data
25a00 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68 20 61  base, .as much a
25a10 73 20 74 77 69 63 65 20 74 68 65 20 73 69 7a 65  s twice the size
25a20 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
25a30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
25a40 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 66 72  s required in fr
25a50 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e 0a 0a  ee.disk space...
25a60 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
25a70 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61 6e 67  ommand may chang
25a80 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c 20 52  e the [ROWID | R
25a90 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72 69 65  OWIDs] of entrie
25aa0 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65 73 20  s in any.tables 
25ab0 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61 76 65  that do not have
25ac0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b 49 4e   an explicit [IN
25ad0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
25ae0 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  Y]..</p>..<p>^A 
25af0 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69 6c  VACUUM will fail
25b00 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
25b10 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
25b20 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
25b30 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20 61 63  e one or.more ac
25b40 74 69 76 65 20 53 51 4c 20 73 74 61 74 65 6d 65  tive SQL stateme
25b50 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73 20 72  nts when it is r
25b60 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f 66 20  un...<p>^(As of 
25b70 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
25b80 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  .1, an alternati
25b90 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68 65 20  ve to using the 
25ba0 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74  VACUUM command t
25bb0 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63 65 20  o.reclaim space 
25bc0 61 66 74 65 72 20 64 61 74 61 20 68 61 73 20 62  after data has b
25bd0 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73 20 61  een deleted is a
25be0 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c  uto-vacuum mode,
25bf0 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 0a 74   enabled using.t
25c00 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
25c10 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e   pragma.)^ ^When
25c20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69   [auto_vacuum] i
25c30 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 61 20  s enabled for a 
25c40 64 61 74 61 62 61 73 65 0a 66 72 65 65 20 70 61  database.free pa
25c50 67 65 73 20 6d 61 79 20 62 65 20 72 65 63 6c 61  ges may be recla
25c60 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c 65 74  imed after delet
25c70 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73 69 6e  ing data, causin
25c80 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 68  g the file to sh
25c90 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65  rink,.without re
25ca0 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65 6e 74  building the ent
25cb0 69 72 65 20 64 61 74 61 62 61 73 65 20 75 73 69  ire database usi
25cc0 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f 77 65  ng VACUUM.  Howe
25cd0 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f  ver, using.[auto
25ce0 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61  _vacuum] can lea
25cf0 64 20 74 6f 20 65 78 74 72 61 20 64 61 74 61 62  d to extra datab
25d00 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e  ase file fragmen
25d10 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b 61 75  tation.  And [au
25d20 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20  to_vacuum].does 
25d30 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74  not compact part
25d40 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67  ially filled pag
25d50 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
25d60 73 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65  se as VACUUM doe
25d70 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e  s...</p>...<tcl>
25d80 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
25d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
25dd0 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44  Section {INDEXED
25de0 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b   BY} indexedby {
25df0 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f  {INDEXED BY} {NO
25e00 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74  T INDEXED}}..</t
25e10 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45  cl>.<p>^The INDE
25e20 58 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73  XED BY phrase is
25e30 20 61 6e 20 53 51 4c 20 65 78 74 65 6e 73 69 6f   an SQL extensio
25e40 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 69 6e 20  n found only in 
25e50 53 51 4c 69 74 65 20 77 68 69 63 68 20 63 61 6e  SQLite which can
25e60 0a 62 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  .be used to veri
25e70 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 72 72  fy that the corr
25e80 65 63 74 20 69 6e 64 69 63 65 73 20 61 72 65 20  ect indices are 
25e90 62 65 69 6e 67 20 75 73 65 64 20 6f 6e 20 61 20  being used on a 
25ea0 5b 44 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c 45 43  [DELETE],.[SELEC
25eb0 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20  T], or [UPDATE] 
25ec0 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
25ed0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
25ee0 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  e always follows
25ef0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74   the name of a t
25f00 61 62 6c 65 20 74 68 61 74 20 53 51 4c 69 74 65  able that SQLite
25f10 20 77 69 6c 6c 0a 62 65 20 72 65 61 64 69 6e 67   will.be reading
25f20 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20 42  .  The INDEXED B
25f30 59 20 70 68 72 61 73 65 20 63 61 6e 20 62 65 20  Y phrase can be 
25f40 73 65 65 6e 20 69 6e 20 74 68 65 20 66 6f 6c 6c  seen in the foll
25f50 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a 64 69 61  owing syntax.dia
25f60 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  grams:</p>..<tcl
25f70 3e 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  >.BubbleDiagram 
25f80 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
25f90 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61 67 72  name.BubbleDiagr
25fa0 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72 63 65  am single-source
25fb0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
25fc0 20 22 49 4e 44 45 58 45 44 20 42 59 20 69 6e 64   "INDEXED BY ind
25fd0 65 78 2d 6e 61 6d 65 22 20 63 6c 61 75 73 65 20  ex-name" clause 
25fe0 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 74  specifies that t
25ff0 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d  he named index.m
26000 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f  ust be used in o
26010 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  rder to look up 
26020 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72  values on the pr
26030 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e  eceding table..^
26040 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20 64 6f  If index-name do
26050 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20  es not exist or 
26060 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 66  cannot be used f
26070 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74 68  or the query, th
26080 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61 74 69  en.the preparati
26090 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74  on of the SQL st
260a0 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a 5e  atement fails..^
260b0 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58 45  (The "NOT INDEXE
260c0 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  D" clause specif
260d0 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64 65  ies that no inde
260e0 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64 20  x shall be used 
260f0 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20 74  when.accessing t
26100 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62  he preceding tab
26110 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d  le, including im
26120 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63 72  plied indices cr
26130 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20 61  eate by.UNIQUE a
26140 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  nd PRIMARY KEY c
26150 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f 77  onstraints.  How
26160 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45 47 45  ever, the INTEGE
26170 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 63 61  R PRIMARY KEY.ca
26180 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65 64 20  n still be used 
26190 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69  to look up entri
261a0 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f  es even when "NO
261b0 54 20 49 4e 44 45 58 45 44 22 20 69 73 20 73 70  T INDEXED" is sp
261c0 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a  ecified.)^</p>..
261d0 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61 74 61  <p>Some SQL data
261e0 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f  base engines pro
261f0 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72  vide non-standar
26200 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61 6e 69  d "hint" mechani
26210 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20 62 65  sms which.can be
26220 20 75 73 65 64 20 74 6f 20 67 69 76 65 20 74 68   used to give th
26230 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
26240 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20 77 68  r clues about wh
26250 61 74 20 69 6e 64 69 63 65 73 20 69 74 20 73 68  at indices it sh
26260 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61 20 70  ould.use for a p
26270 61 72 74 69 63 75 6c 61 72 20 73 74 61 74 65 6d  articular statem
26280 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45 58 20  ent.  The INDEX 
26290 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53 51 4c  BY clause of SQL
262a0 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c  ite is .<em>not<
262b0 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d  /em> a hinting m
262c0 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69 74 20  echanism and it 
262d0 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73  should not be us
262e0 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54 68 65  ed as such..^The
262f0 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
26300 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69 76 65  se does not give
26310 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 68   the optimizer h
26320 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69 63 68  ints about which
26330 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b 20 69   index.to use; i
26340 74 20 67 69 76 65 73 20 74 68 65 20 6f 70 74 69  t gives the opti
26350 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72 65 6d  mizer a requirem
26360 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69 6e 64  ent of which ind
26370 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74  ex to use..^If t
26380 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
26390 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20  er is unable to 
263a0 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 73 70  use the index sp
263b0 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0a 49  ecified by the.I
263c0 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 2c 20  NDEX BY clause, 
263d0 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 77  then the query w
263e0 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
263f0 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e   error.</p>..<p>
26400 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63  The INDEXED BY c
26410 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74  lause is <em>not
26420 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66  </em> intended f
26430 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69 6e 67  or use in tuning
26440 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  .the performance
26450 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20 54 68   of a query.  Th
26460 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68 65 20  e intent of the 
26470 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
26480 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20 61 20  e is.to raise a 
26490 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72 20 69  run-time error i
264a0 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67  f a schema chang
264b0 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f 70 70  e, such as dropp
264c0 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e 67 20  ing or.creating 
264d0 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73 65 73  an index, causes
264e0 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 20   the query plan 
264f0 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e 73 69  for a time-sensi
26500 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20 63 68  tive query.to ch
26510 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44 45 58  ange.  The INDEX
26520 45 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ED BY clause is 
26530 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65 6c 70  designed to help
26540 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69 72 61   detect.undesira
26550 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e 20 63  ble query plan c
26560 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20 72 65  hanges during re
26570 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67  gression testing
26580 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61 72 65  ..Developers are
26590 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f 20 6f   admonished to o
265a0 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66 20 49  mit all use of I
265b0 4e 44 45 58 45 44 20 42 59 20 64 75 72 69 6e 67  NDEXED BY during
265c0 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 73  .application des
265d0 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ign, implementat
265e0 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20 61 6e  ion, testing, an
265f0 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a 49 4e  d tuning.  If.IN
26600 44 45 58 45 44 20 42 59 20 69 73 20 74 6f 20 62  DEXED BY is to b
26610 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c 20 69  e used at all, i
26620 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 73 65  t should be inse
26630 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
26640 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65 76 65  .end of the deve
26650 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73 73 20  lopment process 
26660 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20 64 6f  when "locking do
26670 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c 2f 70  wn" a design.</p
26680 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73 6f 3a  >..<h3>See Also:
26690 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 5b 73  </h3>..<p>The [s
266a0 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
266b0 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74 65  us()] C/C++ inte
266c0 72 66 61 63 65 20 74 6f 67 65 74 68 65 72 20 77  rface together w
266d0 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
266e0 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c 53  STMTSTATUS_FULLS
266f0 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b 53  CAN_STEP] and [S
26700 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
26710 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61 6e  _SORT] verbs.can
26720 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 74 65   be used to dete
26730 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 77  ct at run-time w
26740 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65  hen an SQL state
26750 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b 69  ment is not.maki
26760 6e 67 20 65 66 66 65 63 74 69 76 65 20 75 73 65  ng effective use
26770 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d 61   of indices.  Ma
26780 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ny applications 
26790 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75 73  may prefer to.us
267a0 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  e the [sqlite3_s
267b0 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69 6e  tmt_status()] in
267c0 74 65 72 66 61 63 65 20 74 6f 20 64 65 74 65 63  terface to detec
267d0 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a 72  t index misuse.r
267e0 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 49  ather than the I
267f0 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65  NDEXED BY phrase
26800 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65 2e   described here.
26810 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
26820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26860 23 23 23 23 23 23 23 23 23 0a 23 20 41 20 6c 69  #########.# A li
26870 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20  st of keywords. 
26880 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63 63 75   A asterisk occu
26890 72 73 20 61 66 74 65 72 20 74 68 65 20 6b 65 79  rs after the key
268a0 77 6f 72 64 20 69 66 20 69 74 20 69 73 20 6f 6e  word if it is on
268b0 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63 6b 20  .# the fallback 
268c0 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65 79 77  list..#.set keyw
268d0 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20  ord_list [lsort 
268e0 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43  {.   ABORT.   AC
268f0 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41  TION.   ADD.   A
26900 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41  FTER.   ALL.   A
26910 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a  LTER.   ANALYZE.
26920 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20     AND.   AS.   
26930 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20  ASC.   ATTACH.  
26940 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20   AUTOINCREMENT. 
26950 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49    BEFORE.   BEGI
26960 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20  N.   BETWEEN.   
26970 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20  BY.   CASCADE.  
26980 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20   CASE.   CAST.  
26990 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54   CHECK.   COLLAT
269a0 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43  E.   COLUMN.   C
269b0 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43  OMMIT.   CONFLIC
269c0 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a  T.   CONSTRAINT.
269d0 20 20 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f     CREATE.   CRO
269e0 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f 44 41  SS.   CURRENT_DA
269f0 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  TE.   CURRENT_TI
26a00 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54 49  ME.   CURRENT_TI
26a10 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41 42  MESTAMP.   DATAB
26a20 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a 20  ASE.   DEFAULT. 
26a30 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44 45    DEFERRED.   DE
26a40 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c 45  FERRABLE.   DELE
26a50 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44 45  TE.   DESC.   DE
26a60 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43 54  TACH.   DISTINCT
26a70 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a  .   DROP.   END.
26a80 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a     EACH.   ELSE.
26a90 20 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43     ESCAPE.   EXC
26aa0 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45  EPT.   EXCLUSIVE
26ab0 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58  .   EXISTS.   EX
26ac0 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20  PLAIN.   FAIL.  
26ad0 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47 4e 0a   FOR.   FOREIGN.
26ae0 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c 4c 0a     FROM.   FULL.
26af0 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f 55 50     GLOB.   GROUP
26b00 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20 49 46  .   HAVING.   IF
26b10 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20 49 4d  .   IGNORE.   IM
26b20 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a 20 20  MEDIATE.   IN.  
26b30 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45 58 45   INDEX.   INDEXE
26b40 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59 0a 20  D.   INITIALLY. 
26b50 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53 45 52    INNER.   INSER
26b60 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20 20 20  T.   INSTEAD.   
26b70 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49 4e 54  INTERSECT.   INT
26b80 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e 55 4c  O.   IS.   ISNUL
26b90 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b 45 59  L.   JOIN.   KEY
26ba0 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49 4b 45  .   LEFT.   LIKE
26bb0 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d 41 54  .   LIMIT.   MAT
26bc0 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a 20 20  CH.   NATURAL.  
26bd0 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20 4e 4f   NO.   NOT.   NO
26be0 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20  TNULL.   NULL.  
26bf0 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20   OF.   OFFSET.  
26c00 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44   ON.   OR.   ORD
26c10 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 50  ER.   OUTER.   P
26c20 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a 20 20  LAN.   PRAGMA.  
26c30 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52   PRIMARY.   QUER
26c40 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 45  Y.   RAISE.   RE
26c50 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45  FERENCES.   REGE
26c60 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20  XP.   REINDEX.  
26c70 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41   RELEASE.   RENA
26c80 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a 20 20  ME.   REPLACE.  
26c90 20 52 45 53 54 52 49 43 54 0a 20 20 20 52 49 47   RESTRICT.   RIG
26ca0 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b 0a 20  HT.   ROLLBACK. 
26cb0 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50 4f 49    ROW.   SAVEPOI
26cc0 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20  NT.   SELECT.   
26cd0 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20  SET.   TABLE.   
26ce0 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52  TEMP.   TEMPORAR
26cf0 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a  Y.   THEN.   TO.
26d00 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20     TRANSACTION. 
26d10 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e 49    TRIGGER.   UNI
26d20 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20  ON.   UNIQUE.   
26d30 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a  UPDATE.   USING.
26d40 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c     VACUUM.   VAL
26d50 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56  UES.   VIEW.   V
26d60 49 52 54 55 41 4c 0a 20 20 20 57 48 45 4e 0a 20  IRTUAL.   WHEN. 
26d70 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64 5f 70    WHERE.}]..hd_p
26d80 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73 73 3d  uts {<DIV class=
26d90 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e 7d 0a  "pdf_section">}.
26da0 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74 65 20  Section {SQLite 
26db0 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77 6f 72  Keywords} keywor
26dc0 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77 6f 72  ds {{*SQL keywor
26dd0 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64 73  d} {SQL keywords
26de0 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f 44 49  }}.hd_puts {</DI
26df0 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  V>}.</tcl>..<p>T
26e00 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20  he SQL standard 
26e10 73 70 65 63 69 66 69 65 73 20 61 20 68 75 67 65  specifies a huge
26e20 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79 77 6f   number of keywo
26e30 72 64 73 20 77 68 69 63 68 20 6d 61 79 20 6e 6f  rds which may no
26e40 74 0a 62 65 20 75 73 65 64 20 61 73 20 74 68 65  t.be used as the
26e50 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73   names of tables
26e60 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c 75 6d  , indices, colum
26e70 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c 20 75  ns, databases, u
26e80 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75 6e 63  ser-defined.func
26e90 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  tions, collation
26ea0 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  s, virtual table
26eb0 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61 6e 79   modules, or any
26ec0 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f 62 6a   other named obj
26ed0 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20 6f 66  ect..The list of
26ee0 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73 6f 20   keywords is so 
26ef0 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20 70 65  long that few pe
26f00 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d 62 65  ople can remembe
26f10 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20  r them all..For 
26f20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c 20 79  most SQL code, y
26f30 6f 75 72 20 73 61 66 65 73 74 20 62 65 74 20 69  our safest bet i
26f40 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65 20 61  s to never use a
26f50 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  ny English langu
26f60 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68 65 20  age.word as the 
26f70 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72 2d 64  name of a user-d
26f80 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e 3c 2f  efined object.</
26f90 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 77 61  p>..<p>If you wa
26fa0 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65 79 77  nt to use a keyw
26fb0 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c 20 79  ord as a name, y
26fc0 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f 74 65  ou need to quote
26fd0 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72 65 20   it.  There.are 
26fe0 66 6f 75 72 20 77 61 79 73 20 6f 66 20 71 75 6f  four ways of quo
26ff0 74 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 69 6e  ting keywords in
27000 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70   SQLite:</p>..<p
27010 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  >.<blockquote>.<
27020 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c 74 64 20  table>.<tr>.<td 
27030 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
27040 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74  'keyword'</b></t
27050 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30 22  d><td width="20"
27060 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
27070 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65  eyword in single
27080 20 71 75 6f 74 65 73 20 69 73 20 61 20 73 74 72   quotes is a str
27090 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c 2f 74 64  ing literal.</td
270a0 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64  ></tr>..<tr>.<td
270b0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
270c0 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f  >"keyword"</b></
270d0 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74  td><td></td>..<t
270e0 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 69 6e 20  d>^A keyword in 
270f0 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 73  double-quotes is
27100 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c   an identifier.<
27110 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
27120 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
27130 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77 6f 72 64  ><b>&#91;keyword
27140 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  &#93;</b></td><t
27150 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20  d></td>..<td>^A 
27160 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64  keyword enclosed
27170 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b   in square brack
27180 65 74 73 20 69 73 20 0a 20 20 20 20 20 20 20 20  ets is .        
27190 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20 20  an identifier.  
271a0 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61 6e  This is not stan
271b0 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73 20  dard SQL.  This 
271c0 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69 73  quoting mechanis
271d0 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73 65  m.        is use
271e0 64 20 62 79 20 4d 53 20 41 63 63 65 73 73 20 61  d by MS Access a
271f0 6e 64 20 53 51 4c 20 53 65 72 76 65 72 20 61 6e  nd SQL Server an
27200 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  d is included in
27210 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20   SQLite for.    
27220 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74      compatibilit
27230 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  y.</td></tr>..<t
27240 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
27250 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b 65 79 77  op"><b>&#96;keyw
27260 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64  ord&#96;</b></td
27270 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
27280 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
27290 73 65 64 20 69 6e 20 67 72 61 76 65 20 61 63 63  sed in grave acc
272a0 65 6e 74 73 20 28 41 53 43 49 49 20 63 6f 64 65  ents (ASCII code
272b0 20 39 36 29 20 69 73 20 0a 20 20 20 20 20 20 20   96) is .       
272c0 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 20   an identifier. 
272d0 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73 74 61   This is not sta
272e0 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68 69 73  ndard SQL.  This
272f0 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61 6e 69   quoting mechani
27300 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20 75 73  sm.        is us
27310 65 64 20 62 79 20 4d 79 53 51 4c 20 61 6e 64 20  ed by MySQL and 
27320 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53  is included in S
27330 51 4c 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20  QLite for.      
27340 20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e    compatibility.
27350 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62  </td></tr>.</tab
27360 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
27370 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72  >.</p>..<p>For r
27380 65 73 69 6c 69 65 6e 63 65 20 77 68 65 6e 20 63  esilience when c
27390 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74 68 20 68  onfronted with h
273a0 69 73 74 6f 72 69 63 61 6c 20 53 51 4c 20 73 74  istorical SQL st
273b0 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c 69 74 65  atements, SQLite
273c0 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d 65 73 20  .will sometimes 
273d0 62 65 6e 64 20 74 68 65 20 71 75 6f 74 69 6e 67  bend the quoting
273e0 20 72 75 6c 65 73 20 61 62 6f 76 65 3a 3c 2f 70   rules above:</p
273f0 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e  >..<ul>.<li><p>^
27400 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20  If a keyword in 
27410 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73 20 28 65  single.quotes (e
27420 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f 62 3e 20  x: <b>'key'</b> 
27430 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e  or <b>'glob'</b>
27440 29 20 69 73 20 75 73 65 64 20 69 6e 20 61 20 63  ) is used in a c
27450 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 61 6e 20  ontext where.an 
27460 69 64 65 6e 74 69 66 69 65 72 20 69 73 20 61 6c  identifier is al
27470 6c 6f 77 65 64 20 62 75 74 20 77 68 65 72 65 20  lowed but where 
27480 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
27490 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c   is not allowed,
274a0 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b 65 6e 20   then.the token 
274b0 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f  is understood to
274c0 20 62 65 20 61 6e 20 69 64 65 6e 74 69 66 69 65   be an identifie
274d0 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 73  r instead of a s
274e0 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 0a 3c  tring literal..<
274f0 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
27500 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20 69  >^If a keyword i
27510 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74 65 73 20  n double.quotes 
27520 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22 3c 2f 62  (ex: <b>"key"</b
27530 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f  > or <b>"glob"</
27540 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20 61  b>) is used in a
27550 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a 69   context where.i
27560 74 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 73 6f  t cannot be reso
27570 6c 76 65 64 20 74 6f 20 61 6e 20 69 64 65 6e 74  lved to an ident
27580 69 66 69 65 72 20 62 75 74 20 77 68 65 72 65 20  ifier but where 
27590 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
275a0 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  .is allowed, the
275b0 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n the token is u
275c0 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
275d0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
275e0 20 69 6e 73 74 65 61 64 0a 6f 66 20 61 6e 20 69   instead.of an i
275f0 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f  dentifier.</p></
27600 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72  li>.</ul>..<p>Pr
27610 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 63 61  ogrammers are ca
27620 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74 6f 20 75  utioned not to u
27630 73 65 20 74 68 65 20 74 77 6f 20 65 78 63 65 70  se the two excep
27640 74 69 6f 6e 73 20 64 65 73 63 72 69 62 65 64 20  tions described 
27650 69 6e 0a 74 68 65 20 70 72 65 76 69 6f 75 73 20  in.the previous 
27660 62 75 6c 6c 65 74 73 2e 20 20 57 65 20 65 6d 70  bullets.  We emp
27670 68 61 73 69 7a 65 20 74 68 61 74 20 74 68 65 79  hasize that they
27680 20 65 78 69 73 74 20 6f 6e 6c 79 20 73 6f 20 74   exist only so t
27690 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d  hat old.and ill-
276a0 66 6f 72 6d 65 64 20 53 51 4c 20 73 74 61 74 65  formed SQL state
276b0 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75 6e 20 63  ments will run c
276c0 6f 72 72 65 63 74 6c 79 2e 20 20 46 75 74 75 72  orrectly.  Futur
276d0 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51  e versions of.SQ
276e0 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67  Lite might chang
276f0 65 20 74 6f 20 72 61 69 73 65 20 65 72 72 6f 72  e to raise error
27700 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63  s instead of acc
27710 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f  epting the malfo
27720 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20  rmed.statements 
27730 63 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65  covered by the e
27740 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e  xceptions above.
27750 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
27760 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72   adds new keywor
27770 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20  ds from time to 
27780 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b  time when it tak
27790 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72  es on new featur
277a0 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e  es..So to preven
277b0 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d  t your code from
277c0 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79   being broken by
277d0 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d   future enhancem
277e0 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64  ents, you should
277f0 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20  .normally quote 
27800 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74  any identifier t
27810 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73  hat is an Englis
27820 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c  h language word,
27830 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20   even if.you do 
27840 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70  not have to..</p
27850 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20  >..<p>.The list 
27860 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20  below shows all 
27870 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64  possible keyword
27880 73 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75  s used by any bu
27890 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65  ild of.SQLite re
278a0 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d  gardless of [com
278b0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
278c0 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f  s].  .Most reaso
278d0 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74  nable configurat
278e0 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72  ions use most or
278f0 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65   all of these ke
27900 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65  ywords,.but some
27910 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65   keywords may be
27920 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51   omitted when SQ
27930 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
27940 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64  res are.disabled
27950 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73 20 6f  ..^(Regardless o
27960 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  f the compile-ti
27970 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
27980 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  , any identifier
27990 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 6e 0a   that is not on.
279a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 74  the following <t
279b0 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c 65 6e  cl>hd_puts [llen
279c0 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  gth $keyword_lis
279d0 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65 6e 74  t]</tcl> element
279e0 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61 20 6b  .list is not a k
279f0 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20 53 51  eyword to the SQ
27a00 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51 4c 69  L parser in SQLi
27a10 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  te:.</p>..<block
27a20 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 77 69  quote>.<table wi
27a30 64 74 68 3d 22 31 30 30 25 22 3e 3c 74 72 3e 0a  dth="100%"><tr>.
27a40 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65 66 74 22  <td align="left"
27a50 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 77 69   valign="top" wi
27a60 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74 63 6c 3e  dth="20%">.<tcl>
27a70 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20  .set n [llength 
27a80 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74 5d 0a 73  $keyword_list].s
27a90 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74 20 6e 52  et nCol 5.set nR
27aa0 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e 2b 24 6e  ow [expr {($n+$n
27ab0 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d 5d 0a 73  Col-1)/$nCol}].s
27ac0 65 74 20 69 20 30 0a 66 6f 72 65 61 63 68 20 77  et i 0.foreach w
27ad0 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73  ord $keyword_lis
27ae0 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d 3d 24 6e  t {.  if {$i==$n
27af0 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64 5f 70 75  Row} {.    hd_pu
27b00 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20 76 61 6c  ts "</td><td val
27b10 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67  ign=\"top\" alig
27b20 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69 64 74 68  n=\"left\" width
27b30 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20 20 20 73  =\"20%\">".    s
27b40 65 74 20 69 20 31 0a 20 20 7d 20 65 6c 73 65 20  et i 1.  } else 
27b50 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a 20 20 7d  {.    incr i.  }
27b60 0a 20 20 68 64 5f 70 75 74 73 20 22 24 77 6f 72  .  hd_puts "$wor
27b70 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f 74 63 6c  d<br>\n".}.</tcl
27b80 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61  >.</td></tr></ta
27b90 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
27ba0 3e 29 5e 0a                                      >)^.