Documentation Source Text

Hex Artifact Content
Login

Artifact 7bc5934373746fecbf77176339d1d99626258031:


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: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 73  a special tables
1a80: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1a90: 20 77 68 65 72 65 20 74 68 65 20 71 75 65 72 79   where the query
1aa0: 20 6f 70 74 69 6d 69 7a 65 72 20 63 61 6e 20 75   optimizer can u
1ab0: 73 65 0a 74 68 65 6d 20 74 6f 20 68 65 6c 70 20  se.them to help 
1ac0: 6d 61 6b 65 20 62 65 74 74 65 72 20 71 75 65 72  make better quer
1ad0: 79 20 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63  y planning choic
1ae0: 65 73 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d  es..^If no argum
1af0: 65 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20  ents are given, 
1b00: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1b10: 61 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79  abases are.analy
1b20: 7a 65 64 2e 20 20 5e 49 66 20 61 20 64 61 74 61  zed.  ^If a data
1b30: 62 61 73 65 20 6e 61 6d 65 20 69 73 20 67 69 76  base name is giv
1b40: 65 6e 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  en as the argume
1b50: 6e 74 2c 20 74 68 65 6e 20 61 6c 6c 20 74 61 62  nt, then all tab
1b60: 6c 65 73 0a 61 6e 64 20 69 6e 64 69 63 65 73 20  les.and indices 
1b70: 69 6e 20 74 68 61 74 20 6f 6e 65 20 64 61 74 61  in that one data
1b80: 62 61 73 65 20 61 72 65 20 61 6e 61 6c 79 7a 65  base are analyze
1b90: 64 2e 20 20 0a 5e 49 66 20 74 68 65 20 61 72 67  d.  .^If the arg
1ba0: 75 6d 65 6e 74 20 69 73 20 61 20 74 61 62 6c 65  ument is a table
1bb0: 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79   name, then only
1bc0: 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 20   that table and 
1bd0: 74 68 65 0a 69 6e 64 69 63 65 73 20 61 73 73 6f  the.indices asso
1be0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
1bf0: 20 74 61 62 6c 65 20 61 72 65 20 61 6e 61 6c 79   table are analy
1c00: 7a 65 64 2e 20 20 5e 49 66 20 74 68 65 20 61 72  zed.  ^If the ar
1c10: 67 75 6d 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64  gument.is an ind
1c20: 65 78 20 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e  ex name, then on
1c30: 6c 79 20 74 68 61 74 20 6f 6e 65 20 69 6e 64 65  ly that one inde
1c40: 78 20 69 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f  x is analyzed.</
1c50: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66  p>..<p> ^The def
1c60: 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ault implementat
1c70: 69 6f 6e 20 73 74 6f 72 65 73 20 61 6c 6c 20 73  ion stores all s
1c80: 74 61 74 69 73 74 69 63 73 20 69 6e 20 61 20 73  tatistics in a s
1c90: 69 6e 67 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65  ingle.table name
1ca0: 64 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  d <b>sqlite_stat
1cb0: 31 3c 2f 62 3e 2e 20 20 5e 49 66 20 53 51 4c 69  1</b>.  ^If SQLi
1cc0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1cd0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
1ce0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f 70  ENABLE_STAT3] op
1cf0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
1d00: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
1d10: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
1d20: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
1d30: 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 33 3c  <b>sqlite_stat3<
1d40: 2f 62 3e 2e 0a 46 75 74 75 72 65 20 65 6e 68 61  /b>..Future enha
1d50: 6e 63 65 6d 65 6e 74 73 20 6d 61 79 20 63 72 65  ncements may cre
1d60: 61 74 65 0a 61 64 64 69 74 69 6f 6e 61 6c 20 74  ate.additional t
1d70: 61 62 6c 65 73 20 77 69 74 68 20 74 68 65 20 73  ables with the s
1d80: 61 6d 65 20 6e 61 6d 65 20 70 61 74 74 65 72 6e  ame name pattern
1d90: 20 65 78 63 65 70 74 20 77 69 74 68 20 74 68 65   except with the
1da0: 20 22 31 22 0a 6f 72 20 22 33 22 20 63 68 61 6e   "1".or "3" chan
1db0: 67 65 64 20 74 6f 20 6c 61 72 67 65 72 20 64 69  ged to larger di
1dc0: 67 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  gits.</p>..<p> ^
1dd0: 54 68 65 20 5b 41 4c 54 45 52 20 54 41 42 4c 45  The [ALTER TABLE
1de0: 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 0a 6e  ] command does.n
1df0: 6f 74 20 77 6f 72 6b 20 6f 6e 20 74 68 65 20 3c  ot work on the <
1e00: 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 31 3c 2f  b>sqlite_stat1</
1e10: 62 3e 20 6f 72 20 3c 62 3e 73 71 6c 69 74 65 5f  b> or <b>sqlite_
1e20: 73 74 61 74 33 3c 2f 62 3e 20 74 61 62 6c 65 73  stat3</b> tables
1e30: 2c 0a 62 75 74 20 61 6c 6c 20 74 68 65 20 63 6f  ,.but all the co
1e40: 6e 74 65 6e 74 20 6f 66 20 74 68 6f 73 65 20 74  ntent of those t
1e50: 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75 65  ables can be que
1e60: 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c 45  ried using [SELE
1e70: 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20 64  CT].and can be d
1e80: 65 6c 65 74 65 64 2c 20 61 75 67 6d 65 6e 74 65  eleted, augmente
1e90: 64 2c 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 75  d, or modified u
1ea0: 73 69 6e 67 20 74 68 65 20 5b 44 45 4c 45 54 45  sing the [DELETE
1eb0: 5d 2c 0a 5b 49 4e 53 45 52 54 5d 2c 20 61 6e 64  ],.[INSERT], and
1ec0: 20 5b 55 50 44 41 54 45 5d 20 63 6f 6d 6d 61 6e   [UPDATE] comman
1ed0: 64 73 2e 0a 5e 28 54 68 65 20 5b 44 52 4f 50 20  ds..^(The [DROP 
1ee0: 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 77  TABLE] command w
1ef0: 6f 72 6b 73 20 6f 6e 20 3c 62 3e 73 71 6c 69 74  orks on <b>sqlit
1f00: 65 5f 73 74 61 74 31 3c 2f 62 3e 20 61 6e 64 0a  e_stat1</b> and.
1f10: 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 33 3c  <b>sqlite_stat3<
1f20: 2f 62 3e 20 61 73 20 6f 66 20 53 51 4c 69 74 65  /b> as of SQLite
1f30: 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29   version 3.7.9.)
1f40: 5e 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61  ^.Appropriate ca
1f50: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  re should be use
1f60: 64 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20  d when changing 
1f70: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
1f80: 68 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61  he statistics.ta
1f90: 62 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20  bles as invalid 
1fa0: 63 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73  content can caus
1fb0: 65 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65  e SQLite to sele
1fc0: 63 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71  ct inefficient.q
1fd0: 75 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e  uery plans.  Gen
1fe0: 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c  erally speaking,
1ff0: 20 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20   one should not 
2000: 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65  modify the conte
2010: 6e 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73  nt of.the statis
2020: 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61  tics tables by a
2030: 6e 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68  ny mechanism oth
2040: 65 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67  er than invoking
2050: 20 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d   the.ANALYZE com
2060: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  mand.</p>..<p> ^
2070: 53 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65  Statistics gathe
2080: 72 65 64 20 62 79 20 41 4e 41 4c 59 5a 45 20 61  red by ANALYZE a
2090: 72 65 20 3c 75 3e 6e 6f 74 3c 2f 75 3e 20 61 75  re <u>not</u> au
20a0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61  tomatically upda
20b0: 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74 65  ted as.the conte
20c0: 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  nt of the databa
20d0: 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66 20  se changes.  If 
20e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
20f0: 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e  he database.chan
2100: 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74 6c  ges significantl
2110: 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61 74  y, or if the dat
2120: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
2130: 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73  nges, then one s
2140: 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72  hould.consider r
2150: 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41  erunning the ANA
2160: 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20  LYZE command in 
2170: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 20  order to update 
2180: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e 3c  the statistics.<
2190: 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75 65  /p>..<p> The que
21a0: 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74  ry planner might
21b0: 20 6e 6f 74 20 6e 6f 74 69 63 65 20 6d 61 6e 75   not notice manu
21c0: 61 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  al changes to th
21d0: 65 0a 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  e.<b>sqlite_stat
21e0: 31 3c 2f 62 3e 20 61 6e 64 2f 6f 72 20 3c 62 3e  1</b> and/or <b>
21f0: 73 71 6c 69 74 65 33 5f 73 74 61 74 32 3c 2f 62  sqlite3_stat2</b
2200: 3e 20 74 61 62 6c 65 73 2e 20 20 5e 41 6e 20 61  > tables.  ^An a
2210: 70 70 6c 69 63 61 74 69 6f 6e 0a 63 61 6e 20 66  pplication.can f
2220: 6f 72 63 65 20 74 68 65 20 71 75 65 72 79 20 70  orce the query p
2230: 6c 61 6e 6e 65 72 20 74 6f 20 72 65 72 65 61 64  lanner to reread
2240: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
2250: 74 61 62 6c 65 73 20 62 79 20 72 75 6e 6e 69 6e  tables by runnin
2260: 67 0a 3c 62 3e 41 4e 41 4c 59 5a 45 20 73 71 6c  g.<b>ANALYZE sql
2270: 69 74 65 5f 6d 61 73 74 65 72 3c 2f 62 3e 2e 20  ite_master</b>. 
2280: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
2290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22d0: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
22e0: 6f 6e 20 7b 41 54 54 41 43 48 20 44 41 54 41 42  on {ATTACH DATAB
22f0: 41 53 45 7d 20 61 74 74 61 63 68 20 2a 41 54 54  ASE} attach *ATT
2300: 41 43 48 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  ACH..BubbleDiagr
2310: 61 6d 20 61 74 74 61 63 68 2d 73 74 6d 74 20 31  am attach-stmt 1
2320: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68  .</tcl>..<p> ^Th
2330: 65 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53  e ATTACH DATABAS
2340: 45 20 73 74 61 74 65 6d 65 6e 74 20 61 64 64 73  E statement adds
2350: 20 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73   another databas
2360: 65 20 0a 66 69 6c 65 20 74 6f 20 74 68 65 20 63  e .file to the c
2370: 75 72 72 65 6e 74 20 5b 64 61 74 61 62 61 73 65  urrent [database
2380: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 2e 20 0a 5e   connection]. .^
2390: 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72  The filename for
23a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
23b0: 20 62 65 20 61 74 74 61 63 68 65 64 20 69 73 20   be attached is 
23c0: 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65  the value of.the
23d0: 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
23e0: 20 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20 74   occurs before t
23f0: 68 65 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e  he AS keyword..^
2400: 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20  The filename of 
2410: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c  the database fol
2420: 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 73 65  lows the same se
2430: 6d 61 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66  mantics as the.f
2440: 69 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74  ilename argument
2450: 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65   to [sqlite3_ope
2460: 6e 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65  n()] and [sqlite
2470: 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68  3_open_v2()]; th
2480: 65 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22  e.special name "
2490: 5b 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75  [:memory:]" resu
24a0: 6c 74 73 20 69 6e 20 61 6e 20 69 6e 2d 6d 65 6d  lts in an in-mem
24b0: 6f 72 79 20 64 61 74 61 62 61 73 65 20 61 6e 64  ory database and
24c0: 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e 67   an.empty string
24d0: 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e 65   results in a ne
24e0: 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  w temporary data
24f0: 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e  base..^The filen
2500: 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61 6e  ame argument can
2510: 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65 6e   be a [URI filen
2520: 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c 65  ame] if URI file
2530: 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67 0a  name processing.
2540: 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65  is enable on the
2550: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
2560: 74 69 6f 6e 2e 0a 54 68 65 20 6e 61 6d 65 20 74  tion..The name t
2570: 68 61 74 20 6f 63 63 75 72 73 20 61 66 74 65 72  hat occurs after
2580: 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20   the AS keyword 
2590: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
25a0: 68 65 20 64 61 74 61 62 61 73 65 0a 75 73 65 64  he database.used
25b0: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
25c0: 51 4c 69 74 65 2e 0a 5e 54 68 65 20 64 61 74 61  QLite..^The data
25d0: 62 61 73 65 2d 6e 61 6d 65 73 20 27 6d 61 69 6e  base-names 'main
25e0: 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65  ' and .'temp' re
25f0: 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  fer to the main 
2600: 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65  database and the
2610: 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
2620: 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61  or .temporary ta
2630: 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e  bles.  ^The main
2640: 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61   and temp databa
2650: 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74  ses cannot be at
2660: 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68  tached or.detach
2670: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54  ed.</p>..<p> ^(T
2680: 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61  ables in an atta
2690: 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61  ched database ca
26a0: 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f  n be referred to
26b0: 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61   using the synta
26c0: 78 20 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  x .<i>database-n
26d0: 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ame.table-name</
26e0: 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e  i>.)^  ^If the n
26f0: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
2700: 20 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73   is unique.acros
2710: 73 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  s all attached d
2720: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
2730: 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64   main and temp d
2740: 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74  atabases, then t
2750: 68 65 0a 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e  he.<i>database-n
2760: 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69  ame</i> prefix i
2770: 73 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20  s not required. 
2780: 20 5e 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65   ^If two or more
2790: 20 74 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65   tables in.diffe
27a0: 72 65 6e 74 20 64 61 74 61 62 61 73 65 73 20 68  rent databases h
27b0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
27c0: 65 20 61 6e 64 20 74 68 65 20 0a 3c 69 3e 64 61  e and the .<i>da
27d0: 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f 69 3e 20  tabase-name</i> 
27e0: 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20 75 73  prefix is not us
27f0: 65 64 20 6f 6e 20 61 20 74 61 62 6c 65 20 72 65  ed on a table re
2800: 66 65 72 65 6e 63 65 2c 20 74 68 65 6e 20 74 68  ference, then th
2810: 65 0a 74 61 62 6c 65 20 63 68 6f 73 65 6e 20 69  e.table chosen i
2820: 73 20 74 68 65 20 6f 6e 65 20 69 6e 20 74 68 65  s the one in the
2830: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 77   database that w
2840: 61 73 20 6c 65 61 73 74 20 72 65 63 65 6e 74 6c  as least recentl
2850: 79 20 61 74 74 61 63 68 65 64 2e 3c 2f 70 3e 0a  y attached.</p>.
2860: 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f  .<p>.^Transactio
2870: 6e 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  ns involving mul
2880: 74 69 70 6c 65 20 61 74 74 61 63 68 65 64 20 64  tiple attached d
2890: 61 74 61 62 61 73 65 73 20 61 72 65 20 61 74 6f  atabases are ato
28a0: 6d 69 63 2c 0a 61 73 73 75 6d 69 6e 67 20 74 68  mic,.assuming th
28b0: 61 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  at the main data
28c0: 62 61 73 65 20 69 73 20 6e 6f 74 20 22 5b 3a 6d  base is not "[:m
28d0: 65 6d 6f 72 79 3a 5d 22 20 61 6e 64 20 74 68 65  emory:]" and the
28e0: 20 0a 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d   .[journal_mode]
28f0: 20 69 73 20 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20   is not [WAL].  
2900: 5e 28 49 66 20 74 68 65 20 6d 61 69 6e 0a 64 61  ^(If the main.da
2910: 74 61 62 61 73 65 20 69 73 20 22 3a 6d 65 6d 6f  tabase is ":memo
2920: 72 79 3a 22 20 6f 72 20 69 66 20 74 68 65 20 6a  ry:" or if the j
2930: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 69 73 20 57  ournal_mode is W
2940: 41 4c 2c 20 74 68 65 6e 20 0a 74 72 61 6e 73 61  AL, then .transa
2950: 63 74 69 6f 6e 73 20 63 6f 6e 74 69 6e 75 65 20  ctions continue 
2960: 74 6f 20 62 65 20 61 74 6f 6d 69 63 20 77 69 74  to be atomic wit
2970: 68 69 6e 20 65 61 63 68 20 69 6e 64 69 76 69 64  hin each individ
2980: 75 61 6c 0a 64 61 74 61 62 61 73 65 20 66 69 6c  ual.database fil
2990: 65 2e 20 42 75 74 20 69 66 20 74 68 65 20 68 6f  e. But if the ho
29a0: 73 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73  st computer cras
29b0: 68 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  hes in the middl
29c0: 65 0a 6f 66 20 61 20 5b 43 4f 4d 4d 49 54 5d 20  e.of a [COMMIT] 
29d0: 77 68 65 72 65 20 74 77 6f 20 6f 72 20 6d 6f 72  where two or mor
29e0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  e database files
29f0: 20 61 72 65 20 75 70 64 61 74 65 64 2c 0a 73 6f   are updated,.so
2a00: 6d 65 20 6f 66 20 74 68 6f 73 65 20 66 69 6c 65  me of those file
2a10: 73 20 6d 69 67 68 74 20 67 65 74 20 74 68 65 20  s might get the 
2a20: 63 68 61 6e 67 65 73 20 77 68 65 72 65 20 6f 74  changes where ot
2a30: 68 65 72 73 0a 6d 69 67 68 74 20 6e 6f 74 2e 29  hers.might not.)
2a40: 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  ^.</p>..<p> ^The
2a50: 72 65 20 69 73 20 61 20 6c 69 6d 69 74 2c 20 73  re is a limit, s
2a60: 65 74 20 75 73 69 6e 67 20 5b 73 71 6c 69 74 65  et using [sqlite
2a70: 33 5f 6c 69 6d 69 74 28 29 5d 20 61 6e 64 20 0a  3_limit()] and .
2a80: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54  [SQLITE_LIMIT_AT
2a90: 54 41 43 48 45 44 5d 2c 20 74 6f 20 74 68 65 20  TACHED], to the 
2aa0: 6e 75 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61  number of databa
2ab0: 73 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 0a  ses that can be.
2ac0: 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 20 61  simultaneously a
2ad0: 74 74 61 63 68 65 64 20 74 6f 20 61 20 73 69 6e  ttached to a sin
2ae0: 67 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  gle database con
2af0: 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  nection.</p>..<t
2b00: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
2b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b50: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 42 45 47  ###.Section {BEG
2b60: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20  IN TRANSACTION} 
2b70: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 2a 42 45  transaction {*BE
2b80: 47 49 4e 20 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42  GIN COMMIT ROLLB
2b90: 41 43 4b 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  ACK}..BubbleDiag
2ba0: 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d 74 0a 42  ram begin-stmt.B
2bb0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d  ubbleDiagram com
2bc0: 6d 69 74 2d 73 74 6d 74 0a 42 75 62 62 6c 65 44  mit-stmt.BubbleD
2bd0: 69 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d  iagram rollback-
2be0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
2bf0: 0a 5e 4e 6f 20 63 68 61 6e 67 65 73 20 63 61 6e  .^No changes can
2c00: 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20   be made to the 
2c10: 64 61 74 61 62 61 73 65 20 65 78 63 65 70 74 20  database except 
2c20: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
2c30: 74 69 6f 6e 2e 0a 5e 41 6e 79 20 63 6f 6d 6d 61  tion..^Any comma
2c40: 6e 64 20 74 68 61 74 20 63 68 61 6e 67 65 73 20  nd that changes 
2c50: 74 68 65 20 64 61 74 61 62 61 73 65 20 28 62 61  the database (ba
2c60: 73 69 63 61 6c 6c 79 2c 20 61 6e 79 20 53 51 4c  sically, any SQL
2c70: 20 63 6f 6d 6d 61 6e 64 0a 6f 74 68 65 72 20 74   command.other t
2c80: 68 61 6e 20 5b 53 45 4c 45 43 54 5d 29 20 77 69  han [SELECT]) wi
2c90: 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
2ca0: 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
2cb0: 74 69 6f 6e 20 69 66 0a 6f 6e 65 20 69 73 20 6e  tion if.one is n
2cc0: 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20 65 66  ot already in ef
2cd0: 66 65 63 74 2e 20 20 5e 41 75 74 6f 6d 61 74 69  fect.  ^Automati
2ce0: 63 61 6c 6c 79 20 73 74 61 72 74 65 64 20 74 72  cally started tr
2cf0: 61 6e 73 61 63 74 69 6f 6e 73 0a 61 72 65 20 63  ansactions.are c
2d00: 6f 6d 6d 69 74 74 65 64 20 77 68 65 6e 20 74 68  ommitted when th
2d10: 65 20 6c 61 73 74 20 71 75 65 72 79 20 66 69 6e  e last query fin
2d20: 69 73 68 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ishes..</p>..<p>
2d30: 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63  .^Transactions c
2d40: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 6d 61  an be started ma
2d50: 6e 75 61 6c 6c 79 20 75 73 69 6e 67 20 74 68 65  nually using the
2d60: 20 42 45 47 49 4e 0a 63 6f 6d 6d 61 6e 64 2e 20   BEGIN.command. 
2d70: 20 5e 28 53 75 63 68 20 74 72 61 6e 73 61 63 74   ^(Such transact
2d80: 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20 70 65 72  ions usually per
2d90: 73 69 73 74 20 75 6e 74 69 6c 20 74 68 65 20 6e  sist until the n
2da0: 65 78 74 0a 43 4f 4d 4d 49 54 20 6f 72 20 52 4f  ext.COMMIT or RO
2db0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20  LLBACK command. 
2dc0: 20 42 75 74 20 61 20 74 72 61 6e 73 61 63 74 69   But a transacti
2dd0: 6f 6e 20 77 69 6c 6c 20 61 6c 73 6f 20 0a 52 4f  on will also .RO
2de0: 4c 4c 42 41 43 4b 20 69 66 20 74 68 65 20 64 61  LLBACK if the da
2df0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
2e00: 20 6f 72 20 69 66 20 61 6e 20 65 72 72 6f 72 20   or if an error 
2e10: 6f 63 63 75 72 73 0a 61 6e 64 20 74 68 65 20 52  occurs.and the R
2e20: 4f 4c 4c 42 41 43 4b 20 63 6f 6e 66 6c 69 63 74  OLLBACK conflict
2e30: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
2e40: 72 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69  rithm is specifi
2e50: 65 64 2e 29 5e 0a 53 65 65 20 74 68 65 20 64 6f  ed.)^.See the do
2e60: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74  cumentation on t
2e70: 68 65 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  he [ON CONFLICT]
2e80: 0a 63 6c 61 75 73 65 20 66 6f 72 20 61 64 64 69  .clause for addi
2e90: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
2ea0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 52 4f 4c  on about the ROL
2eb0: 4c 42 41 43 4b 0a 63 6f 6e 66 6c 69 63 74 20 72  LBACK.conflict r
2ec0: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
2ed0: 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  thm..</p>..<p>.^
2ee0: 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 20  END TRANSACTION 
2ef0: 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
2f00: 43 4f 4d 4d 49 54 2e 0a 3c 2f 70 3e 0a 0a 3c 70  COMMIT..</p>..<p
2f10: 3e 20 5e 28 54 72 61 6e 73 61 63 74 69 6f 6e 73  > ^(Transactions
2f20: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 42   created using B
2f30: 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 20 64 6f  EGIN...COMMIT do
2f40: 20 6e 6f 74 20 6e 65 73 74 2e 29 5e 0a 5e 46 6f   not nest.)^.^Fo
2f50: 72 20 6e 65 73 74 65 64 20 74 72 61 6e 73 61 63  r nested transac
2f60: 74 69 6f 6e 73 2c 20 75 73 65 20 74 68 65 20 5b  tions, use the [
2f70: 53 41 56 45 50 4f 49 4e 54 5d 20 61 6e 64 20 5b  SAVEPOINT] and [
2f80: 52 45 4c 45 41 53 45 5d 20 63 6f 6d 6d 61 6e 64  RELEASE] command
2f90: 73 2e 0a 54 68 65 20 22 54 4f 20 53 41 56 45 50  s..The "TO SAVEP
2fa0: 4f 49 4e 54 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e  OINT <i>name</i>
2fb0: 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  " clause of the 
2fc0: 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64  ROLLBACK command
2fd0: 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79   shown.in the sy
2fe0: 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f  ntax diagram abo
2ff0: 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69  ve is only appli
3000: 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f  cable to [SAVEPO
3010: 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e  INT].transaction
3020: 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74 20  s.  ^An attempt 
3030: 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42 45  to invoke the BE
3040: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68  GIN command with
3050: 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in.a transaction
3060: 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
3070: 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72 64  an error, regard
3080: 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 0a  less of whether.
3090: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
30a0: 77 61 73 20 73 74 61 72 74 65 64 20 62 79 20 5b  was started by [
30b0: 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20  SAVEPOINT] or a 
30c0: 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68  prior BEGIN..^Th
30d0: 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64  e COMMIT command
30e0: 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43   and the ROLLBAC
30f0: 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75  K command withou
3100: 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65 0a  t the TO clause.
3110: 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e  work the same on
3120: 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72 61   [SAVEPOINT] tra
3130: 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68 65  nsactions as the
3140: 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73 61  y do with transa
3150: 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20 62  ctions.started b
3160: 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 70  y BEGIN.</p>..<p
3170: 3e 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20  >.^Transactions 
3180: 63 61 6e 20 62 65 20 64 65 66 65 72 72 65 64 2c  can be deferred,
3190: 20 69 6d 6d 65 64 69 61 74 65 2c 20 6f 72 20 65   immediate, or e
31a0: 78 63 6c 75 73 69 76 65 2e 20 20 0a 5e 54 68 65  xclusive.  .^The
31b0: 20 64 65 66 61 75 6c 74 20 74 72 61 6e 73 61 63   default transac
31c0: 74 69 6f 6e 20 62 65 68 61 76 69 6f 72 20 69 73  tion behavior is
31d0: 20 64 65 66 65 72 72 65 64 2e 0a 5e 44 65 66 65   deferred..^Defe
31e0: 72 72 65 64 20 6d 65 61 6e 73 20 74 68 61 74 20  rred means that 
31f0: 6e 6f 20 6c 6f 63 6b 73 20 61 72 65 20 61 63 71  no locks are acq
3200: 75 69 72 65 64 0a 6f 6e 20 74 68 65 20 64 61 74  uired.on the dat
3210: 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68 65 20  abase until the 
3220: 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73  database is firs
3230: 74 20 61 63 63 65 73 73 65 64 2e 20 20 5e 54 68  t accessed.  ^Th
3240: 75 73 20 77 69 74 68 20 61 0a 64 65 66 65 72 72  us with a.deferr
3250: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ed transaction, 
3260: 74 68 65 20 42 45 47 49 4e 20 73 74 61 74 65 6d  the BEGIN statem
3270: 65 6e 74 20 69 74 73 65 6c 66 20 64 6f 65 73 20  ent itself does 
3280: 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 0a 66  nothing to the.f
3290: 69 6c 65 73 79 73 74 65 6d 2e 20 20 5e 4c 6f 63  ilesystem.  ^Loc
32a0: 6b 73 0a 61 72 65 20 6e 6f 74 20 61 63 71 75 69  ks.are not acqui
32b0: 72 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69  red until the fi
32c0: 72 73 74 20 72 65 61 64 20 6f 72 20 77 72 69 74  rst read or writ
32d0: 65 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 5e 54  e operation.  ^T
32e0: 68 65 20 66 69 72 73 74 20 72 65 61 64 0a 6f 70  he first read.op
32f0: 65 72 61 74 69 6f 6e 20 61 67 61 69 6e 73 74 20  eration against 
3300: 61 20 64 61 74 61 62 61 73 65 20 63 72 65 61 74  a database creat
3310: 65 73 20 61 20 5b 53 48 41 52 45 44 5d 20 6c 6f  es a [SHARED] lo
3320: 63 6b 20 61 6e 64 20 74 68 65 20 66 69 72 73 74  ck and the first
3330: 0a 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e  .write operation
3340: 20 63 72 65 61 74 65 73 20 61 20 5b 52 45 53 45   creates a [RESE
3350: 52 56 45 44 5d 20 6c 6f 63 6b 2e 20 20 20 5e 42  RVED] lock.   ^B
3360: 65 63 61 75 73 65 20 74 68 65 20 61 63 71 75 69  ecause the acqui
3370: 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f 63 6b 73 20  sition of.locks 
3380: 69 73 20 64 65 66 65 72 72 65 64 20 75 6e 74 69  is deferred unti
3390: 6c 20 74 68 65 79 20 61 72 65 20 6e 65 65 64 65  l they are neede
33a0: 64 2c 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  d, it is possibl
33b0: 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 0a 74  e that another.t
33c0: 68 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73  hread or process
33d0: 20 63 6f 75 6c 64 20 63 72 65 61 74 65 20 61 20   could create a 
33e0: 73 65 70 61 72 61 74 65 20 74 72 61 6e 73 61 63  separate transac
33f0: 74 69 6f 6e 20 61 6e 64 20 77 72 69 74 65 20 74  tion and write t
3400: 6f 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 61  o.the database a
3410: 66 74 65 72 20 74 68 65 20 42 45 47 49 4e 20 6f  fter the BEGIN o
3420: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68  n the current th
3430: 72 65 61 64 20 68 61 73 20 65 78 65 63 75 74 65  read has execute
3440: 64 2e 0a 5e 49 66 20 74 68 65 20 74 72 61 6e 73  d..^If the trans
3450: 61 63 74 69 6f 6e 20 69 73 20 69 6d 6d 65 64 69  action is immedi
3460: 61 74 65 2c 20 74 68 65 6e 20 5b 52 45 53 45 52  ate, then [RESER
3470: 56 45 44 5d 20 6c 6f 63 6b 73 0a 61 72 65 20 61  VED] locks.are a
3480: 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64  cquired on all d
3490: 61 74 61 62 61 73 65 73 20 61 73 20 73 6f 6f 6e  atabases as soon
34a0: 20 61 73 20 74 68 65 20 42 45 47 49 4e 20 63 6f   as the BEGIN co
34b0: 6d 6d 61 6e 64 20 69 73 0a 65 78 65 63 75 74 65  mmand is.execute
34c0: 64 2c 20 77 69 74 68 6f 75 74 20 77 61 69 74 69  d, without waiti
34d0: 6e 67 20 66 6f 72 20 74 68 65 0a 64 61 74 61 62  ng for the.datab
34e0: 61 73 65 20 74 6f 20 62 65 20 75 73 65 64 2e 20  ase to be used. 
34f0: 20 5e 41 66 74 65 72 20 61 20 42 45 47 49 4e 20   ^After a BEGIN 
3500: 49 4d 4d 45 44 49 41 54 45 2c 20 0a 6e 6f 20 6f  IMMEDIATE, .no o
3510: 74 68 65 72 20 5b 64 61 74 61 62 61 73 65 20 63  ther [database c
3520: 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77 69 6c 6c 20  onnection] will 
3530: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
3540: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
3550: 20 6f 72 0a 64 6f 20 61 20 42 45 47 49 4e 20 49   or.do a BEGIN I
3560: 4d 4d 45 44 49 41 54 45 20 6f 72 20 42 45 47 49  MMEDIATE or BEGI
3570: 4e 20 45 58 43 4c 55 53 49 56 45 2e 20 20 5e 4f  N EXCLUSIVE.  ^O
3580: 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 63  ther processes c
3590: 61 6e 20 63 6f 6e 74 69 6e 75 65 0a 74 6f 20 72  an continue.to r
35a0: 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ead from the dat
35b0: 61 62 61 73 65 2c 20 68 6f 77 65 76 65 72 2e 20  abase, however. 
35c0: 20 5e 41 6e 20 65 78 63 6c 75 73 69 76 65 20 74   ^An exclusive t
35d0: 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 75 73 65  ransaction cause
35e0: 73 0a 5b 45 58 43 4c 55 53 49 56 45 5d 20 6c 6f  s.[EXCLUSIVE] lo
35f0: 63 6b 73 20 74 6f 20 62 65 20 61 63 71 75 69 72  cks to be acquir
3600: 65 64 20 6f 6e 20 61 6c 6c 20 64 61 74 61 62 61  ed on all databa
3610: 73 65 73 2e 20 20 5e 41 66 74 65 72 20 61 20 42  ses.  ^After a B
3620: 45 47 49 4e 0a 45 58 43 4c 55 53 49 56 45 2c 20  EGIN.EXCLUSIVE, 
3630: 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61  no other [databa
3640: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 65  se connection] e
3650: 78 63 65 70 74 20 66 6f 72 20 5b 72 65 61 64 5f  xcept for [read_
3660: 75 6e 63 6f 6d 6d 69 74 74 65 64 5d 0a 63 6f 6e  uncommitted].con
3670: 6e 65 63 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65  nections will be
3680: 20 61 62 6c 65 20 74 6f 20 72 65 61 64 20 74 68   able to read th
3690: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e  e database and n
36a0: 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69  o other connecti
36b0: 6f 6e 20 77 69 74 68 6f 75 74 0a 65 78 63 65 70  on without.excep
36c0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 62 6c  tion will be abl
36d0: 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 64  e to write the d
36e0: 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20 74 68  atabase until th
36f0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
3700: 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c 2f 70 3e 0a  .complete..</p>.
3710: 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d 70 6c 69 63  .<p>.^(An implic
3720: 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28  it transaction (
3730: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 68  a transaction th
3740: 61 74 20 69 73 20 73 74 61 72 74 65 64 20 61 75  at is started au
3750: 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 0a 6e 6f 74  tomatically,.not
3760: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
3770: 74 61 72 74 65 64 20 62 79 20 42 45 47 49 4e 29  tarted by BEGIN)
3780: 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 20 61 75   is committed au
3790: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
37a0: 0a 74 68 65 20 6c 61 73 74 20 61 63 74 69 76 65  .the last active
37b0: 20 73 74 61 74 65 6d 65 6e 74 20 66 69 6e 69 73   statement finis
37c0: 68 65 73 2e 20 20 41 20 73 74 61 74 65 6d 65 6e  hes.  A statemen
37d0: 74 20 66 69 6e 69 73 68 65 73 20 77 68 65 6e 20  t finishes when 
37e0: 69 74 73 0a 70 72 65 70 61 72 65 64 20 73 74 61  its.prepared sta
37f0: 74 65 6d 65 6e 74 20 69 73 20 5b 73 71 6c 69 74  tement is [sqlit
3800: 65 33 5f 72 65 73 65 74 28 29 20 7c 20 72 65 73  e3_reset() | res
3810: 65 74 5d 20 6f 72 0a 5b 73 71 6c 69 74 65 33 5f  et] or.[sqlite3_
3820: 66 69 6e 61 6c 69 7a 65 28 29 20 7c 20 66 69 6e  finalize() | fin
3830: 61 6c 69 7a 65 64 5d 2e 20 20 41 6e 20 6f 70 65  alized].  An ope
3840: 6e 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5d  n [sqlite3_blob]
3850: 20 75 73 65 64 20 66 6f 72 0a 69 6e 63 72 65 6d   used for.increm
3860: 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 20 63  ental BLOB I/O c
3870: 6f 75 6e 74 73 20 61 73 20 61 6e 20 75 6e 66 69  ounts as an unfi
3880: 6e 69 73 68 65 64 20 73 74 61 74 65 6d 65 6e 74  nished statement
3890: 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  .  The [sqlite3_
38a0: 62 6c 6f 62 5d 0a 66 69 6e 69 73 68 65 73 20 77  blob].finishes w
38b0: 68 65 6e 20 69 74 20 69 73 20 5b 73 71 6c 69 74  hen it is [sqlit
38c0: 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 29 20  e3_blob_close() 
38d0: 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e 0a 3c 2f 70  | closed].)^.</p
38e0: 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78 70 6c  >..<p>.^The expl
38f0: 69 63 69 74 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d  icit COMMIT comm
3900: 61 6e 64 20 72 75 6e 73 20 69 6d 6d 65 64 69 61  and runs immedia
3910: 74 65 6c 79 2c 20 65 76 65 6e 20 69 66 20 74 68  tely, even if th
3920: 65 72 65 20 61 72 65 0a 70 65 6e 64 69 6e 67 20  ere are.pending 
3930: 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
3940: 6e 74 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  nts.  ^However, 
3950: 69 66 20 74 68 65 72 65 20 61 72 65 20 70 65 6e  if there are pen
3960: 64 69 6e 67 0a 77 72 69 74 65 20 6f 70 65 72 61  ding.write opera
3970: 74 69 6f 6e 73 2c 20 74 68 65 20 43 4f 4d 4d 49  tions, the COMMI
3980: 54 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20 66  T command.will f
3990: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
39a0: 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45 5f 42  r code [SQLITE_B
39b0: 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  USY]..</p>..<p>.
39c0: 5e 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 65  ^An attempt to e
39d0: 78 65 63 75 74 65 20 43 4f 4d 4d 49 54 20 6d 69  xecute COMMIT mi
39e0: 67 68 74 20 61 6c 73 6f 20 72 65 73 75 6c 74 20  ght also result 
39f0: 69 6e 20 61 6e 20 5b 53 51 4c 49 54 45 5f 42 55  in an [SQLITE_BU
3a00: 53 59 5d 20 72 65 74 75 72 6e 20 63 6f 64 65 0a  SY] return code.
3a10: 69 66 20 61 6e 20 61 6e 6f 74 68 65 72 20 74 68  if an another th
3a20: 72 65 61 64 20 6f 72 20 70 72 6f 63 65 73 73 20  read or process 
3a30: 68 61 73 20 61 20 5b 73 68 61 72 65 64 20 6c 6f  has a [shared lo
3a40: 63 6b 5d 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ck] on the datab
3a50: 61 73 65 0a 74 68 61 74 20 70 72 65 76 65 6e 74  ase.that prevent
3a60: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
3a70: 66 72 6f 6d 20 62 65 69 6e 67 20 75 70 64 61 74  from being updat
3a80: 65 64 2e 20 20 5e 57 68 65 6e 20 43 4f 4d 4d 49  ed.  ^When COMMI
3a90: 54 20 66 61 69 6c 73 20 69 6e 20 74 68 69 73 0a  T fails in this.
3aa0: 77 61 79 2c 20 74 68 65 20 74 72 61 6e 73 61 63  way, the transac
3ab0: 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74  tion remains act
3ac0: 69 76 65 20 61 6e 64 20 74 68 65 20 43 4f 4d 4d  ive and the COMM
3ad0: 49 54 20 63 61 6e 20 62 65 20 72 65 74 72 69 65  IT can be retrie
3ae0: 64 20 6c 61 74 65 72 0a 61 66 74 65 72 20 74 68  d later.after th
3af0: 65 20 72 65 61 64 65 72 20 68 61 73 20 68 61 64  e reader has had
3b00: 20 61 20 63 68 61 6e 63 65 20 74 6f 20 63 6c 65   a chance to cle
3b10: 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54  ar..</p>..<p>.^T
3b20: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c  he ROLLBACK will
3b30: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
3b40: 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49 54 45  ror code [SQLITE
3b50: 5f 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 0a  _BUSY] if there.
3b60: 61 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20  are any pending 
3b70: 71 75 65 72 69 65 73 2e 20 20 5e 42 6f 74 68 20  queries.  ^Both 
3b80: 72 65 61 64 2d 6f 6e 6c 79 20 61 6e 64 20 72 65  read-only and re
3b90: 61 64 2f 77 72 69 74 65 20 71 75 65 72 69 65 73  ad/write queries
3ba0: 20 77 69 6c 6c 0a 63 61 75 73 65 20 61 20 52 4f   will.cause a RO
3bb0: 4c 4c 42 41 43 4b 20 74 6f 20 66 61 69 6c 2e 20  LLBACK to fail. 
3bc0: 20 41 20 52 4f 4c 4c 42 41 43 4b 20 6d 75 73 74   A ROLLBACK must
3bd0: 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 61   fail if there a
3be0: 72 65 20 70 65 6e 64 69 6e 67 0a 72 65 61 64 20  re pending.read 
3bf0: 6f 70 65 72 61 74 69 6f 6e 73 20 28 75 6e 6c 69  operations (unli
3c00: 6b 65 20 43 4f 4d 4d 49 54 20 77 68 69 63 68 20  ke COMMIT which 
3c10: 63 61 6e 20 73 75 63 63 65 65 64 29 20 62 65 63  can succeed) bec
3c20: 61 75 73 65 20 62 61 64 20 74 68 69 6e 67 73 0a  ause bad things.
3c30: 77 69 6c 6c 20 68 61 70 70 65 6e 20 69 66 20 74  will happen if t
3c40: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6d 61  he in-memory ima
3c50: 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ge of the databa
3c60: 73 65 20 69 73 20 63 68 61 6e 67 65 64 20 6f 75  se is changed ou
3c70: 74 20 66 72 6f 6d 20 75 6e 64 65 72 0a 61 6e 20  t from under.an 
3c80: 61 63 74 69 76 65 20 71 75 65 72 79 2e 0a 3c 2f  active query..</
3c90: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
3ca0: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
3cb0: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
3cc0: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
3cd0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
3ce0: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
3cf0: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
3d00: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
3d10: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
3d20: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
3d30: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
3d40: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
3d50: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
3d60: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
3d70: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
3d80: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
3d90: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
3da0: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
3db0: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
3dc0: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
3dd0: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
3de0: 74 68 61 74 20 63 61 75 73 65 20 74 68 65 20 62  that cause the b
3df0: 65 68 61 76 69 6f 72 20 69 6e 63 6c 75 64 65 3a  ehavior include:
3e00: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20  </p>..<ul>.<li> 
3e10: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64  [SQLITE_FULL]: d
3e20: 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20  atabase or disk 
3e30: 66 75 6c 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  full.<li> [SQLIT
3e40: 45 5f 49 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49  E_IOERR]: disk I
3e50: 2f 4f 20 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53  /O error.<li> [S
3e60: 51 4c 49 54 45 5f 42 55 53 59 5d 3a 20 64 61 74  QLITE_BUSY]: dat
3e70: 61 62 61 73 65 20 69 6e 20 75 73 65 20 62 79 20  abase in use by 
3e80: 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 0a  another process.
3e90: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d  <li> [SQLITE_NOM
3ea0: 45 4d 5d 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f  EM]: out or memo
3eb0: 72 79 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  ry.<li> [SQLITE_
3ec0: 49 4e 54 45 52 52 55 50 54 5d 3a 20 70 72 6f 63  INTERRUPT]: proc
3ed0: 65 73 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f  essing [sqlite3_
3ee0: 69 6e 74 65 72 72 75 70 74 7c 69 6e 74 65 72 72  interrupt|interr
3ef0: 75 70 74 65 64 5d 0a 20 20 20 20 20 62 79 20 61  upted].     by a
3f00: 70 70 6c 69 63 61 74 69 6f 6e 20 72 65 71 75 65  pplication reque
3f10: 73 74 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a  st.</ul>)^..<p>.
3f20: 5e 46 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73  ^For all of thes
3f30: 65 20 65 72 72 6f 72 73 2c 20 53 51 4c 69 74 65  e errors, SQLite
3f40: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 6e 64   attempts to und
3f50: 6f 20 6a 75 73 74 20 74 68 65 20 6f 6e 65 20 73  o just the one s
3f60: 74 61 74 65 6d 65 6e 74 0a 69 74 20 77 61 73 20  tatement.it was 
3f70: 77 6f 72 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c  working on and l
3f80: 65 61 76 65 20 63 68 61 6e 67 65 73 20 66 72 6f  eave changes fro
3f90: 6d 20 70 72 69 6f 72 20 73 74 61 74 65 6d 65 6e  m prior statemen
3fa0: 74 73 20 77 69 74 68 69 6e 20 74 68 65 0a 73 61  ts within the.sa
3fb0: 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  me transaction i
3fc0: 6e 74 61 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e  ntact and contin
3fd0: 75 65 20 77 69 74 68 20 74 68 65 20 74 72 61 6e  ue with the tran
3fe0: 73 61 63 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76  saction.  ^Howev
3ff0: 65 72 2c 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f  er, .depending o
4000: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
4010: 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20  being evaluated 
4020: 61 6e 64 20 74 68 65 20 70 6f 69 6e 74 20 61 74  and the point at
4030: 20 77 68 69 63 68 20 74 68 65 0a 65 72 72 6f 72   which the.error
4040: 20 6f 63 63 75 72 73 2c 20 69 74 20 6d 69 67 68   occurs, it migh
4050: 74 20 62 65 20 6e 65 63 65 73 73 61 72 79 20 66  t be necessary f
4060: 6f 72 20 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c  or SQLite to rol
4070: 6c 62 61 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c  lback and.cancel
4080: 20 74 68 65 20 65 6e 74 69 72 65 20 74 72 61 6e   the entire tran
4090: 73 61 63 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70  saction.  ^An ap
40a0: 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 65  plication can te
40b0: 6c 6c 20 77 68 69 63 68 0a 63 6f 75 72 73 65 20  ll which.course 
40c0: 6f 66 20 61 63 74 69 6f 6e 20 53 51 4c 69 74 65  of action SQLite
40d0: 20 74 6f 6f 6b 20 62 79 20 75 73 69 6e 67 20 74   took by using t
40e0: 68 65 0a 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f  he.[sqlite3_get_
40f0: 61 75 74 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d  autocommit()] C-
4100: 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66 61  language interfa
4110: 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69  ce.</p>..<p>It i
4120: 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68  s recommended th
4130: 61 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  at applications 
4140: 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 65  respond to the e
4150: 72 72 6f 72 73 0a 6c 69 73 74 65 64 20 61 62 6f  rrors.listed abo
4160: 76 65 20 62 79 20 65 78 70 6c 69 63 69 74 6c 79  ve by explicitly
4170: 20 69 73 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42   issuing a ROLLB
4180: 41 43 4b 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49  ACK command.  ^I
4190: 66 20 74 68 65 20 0a 74 72 61 6e 73 61 63 74 69  f the .transacti
41a0: 6f 6e 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  on has already b
41b0: 65 65 6e 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20  een rolled back 
41c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79  automatically.by
41d0: 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f   the error respo
41e0: 6e 73 65 2c 20 74 68 65 6e 20 74 68 65 20 52 4f  nse, then the RO
41f0: 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77  LLBACK command w
4200: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
4210: 0a 65 72 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68  .error, but no h
4220: 61 72 6d 20 69 73 20 63 61 75 73 65 64 20 62 79  arm is caused by
4230: 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46   this.</p>..<p>F
4240: 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f  uture versions o
4250: 66 20 53 51 4c 69 74 65 20 6d 61 79 20 65 78 74  f SQLite may ext
4260: 65 6e 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  end the list of 
4270: 65 72 72 6f 72 73 20 77 68 69 63 68 0a 6d 69 67  errors which.mig
4280: 68 74 20 63 61 75 73 65 20 61 75 74 6f 6d 61 74  ht cause automat
4290: 69 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72  ic transaction r
42a0: 6f 6c 6c 62 61 63 6b 2e 20 20 46 75 74 75 72 65  ollback.  Future
42b0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c   versions of.SQL
42c0: 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65  ite might change
42d0: 20 74 68 65 20 65 72 72 6f 72 20 72 65 73 70 6f   the error respo
42e0: 6e 73 65 2e 20 20 49 6e 20 70 61 72 74 69 63 75  nse.  In particu
42f0: 6c 61 72 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f  lar, we may.choo
4300: 73 65 20 74 6f 20 73 69 6d 70 6c 69 66 79 20 74  se to simplify t
4310: 68 65 20 69 6e 74 65 72 66 61 63 65 20 69 6e 20  he interface in 
4320: 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  future versions 
4330: 6f 66 20 53 51 4c 69 74 65 20 62 79 0a 63 61 75  of SQLite by.cau
4340: 73 69 6e 67 20 74 68 65 20 65 72 72 6f 72 73 20  sing the errors 
4350: 61 62 6f 76 65 20 74 6f 20 66 6f 72 63 65 20 61  above to force a
4360: 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  n unconditional 
4370: 72 6f 6c 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c  rollback.</p>..<
4380: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
4390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43d0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41  ####.Section {SA
43e0: 56 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69  VEPOINT} savepoi
43f0: 6e 74 20 7b 53 41 56 45 50 4f 49 4e 54 20 52 45  nt {SAVEPOINT RE
4400: 4c 45 41 53 45 7d 0a 0a 42 75 62 62 6c 65 44 69  LEASE}..BubbleDi
4410: 61 67 72 61 6d 20 73 61 76 65 70 6f 69 6e 74 2d  agram savepoint-
4420: 73 74 6d 74 0a 42 75 62 62 6c 65 44 69 61 67 72  stmt.BubbleDiagr
4430: 61 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a  am release-stmt.
4440: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f  BubbleDiagram ro
4450: 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63  llback-stmt.</tc
4460: 6c 3e 0a 0a 3c 70 3e 20 5e 53 41 56 45 50 4f 49  l>..<p> ^SAVEPOI
4470: 4e 54 73 20 61 72 65 20 61 20 6d 65 74 68 6f 64  NTs are a method
4480: 20 6f 66 20 63 72 65 61 74 69 6e 67 20 74 72 61   of creating tra
4490: 6e 73 61 63 74 69 6f 6e 73 2c 20 73 69 6d 69 6c  nsactions, simil
44a0: 61 72 20 74 6f 0a 5b 42 45 47 49 4e 5d 20 61 6e  ar to.[BEGIN] an
44b0: 64 20 5b 43 4f 4d 4d 49 54 5d 2c 20 65 78 63 65  d [COMMIT], exce
44c0: 70 74 20 74 68 61 74 20 74 68 65 20 53 41 56 45  pt that the SAVE
44d0: 50 4f 49 4e 54 20 61 6e 64 20 52 45 4c 45 41 53  POINT and RELEAS
44e0: 45 20 63 6f 6d 6d 61 6e 64 73 0a 61 72 65 20 6e  E commands.are n
44f0: 61 6d 65 64 20 61 6e 64 20 6d 61 79 20 62 65 20  amed and may be 
4500: 6e 65 73 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  nested.</p>..<p>
4510: 20 5e 54 68 65 20 53 41 56 45 50 4f 49 4e 54 20   ^The SAVEPOINT 
4520: 63 6f 6d 6d 61 6e 64 20 73 74 61 72 74 73 20 61  command starts a
4530: 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e   new transaction
4540: 20 77 69 74 68 20 61 20 6e 61 6d 65 2e 0a 5e 54   with a name..^T
4550: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  he transaction n
4560: 61 6d 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65  ames need not be
4570: 20 75 6e 69 71 75 65 2e 0a 5e 28 41 20 53 41 56   unique..^(A SAV
4580: 45 50 4f 49 4e 54 20 63 61 6e 20 62 65 20 73 74  EPOINT can be st
4590: 61 72 74 65 64 20 65 69 74 68 65 72 20 77 69 74  arted either wit
45a0: 68 69 6e 20 6f 72 20 6f 75 74 73 69 64 65 20 6f  hin or outside o
45b0: 66 0a 61 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43  f.a [BEGIN]...[C
45c0: 4f 4d 4d 49 54 5d 2e 29 5e 20 20 5e 28 57 68 65  OMMIT].)^  ^(Whe
45d0: 6e 20 61 20 53 41 56 45 50 4f 49 4e 54 20 69 73  n a SAVEPOINT is
45e0: 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 20   the outer-most 
45f0: 73 61 76 65 70 6f 69 6e 74 0a 61 6e 64 20 69 74  savepoint.and it
4600: 20 69 73 20 6e 6f 74 20 77 69 74 68 69 6e 20 61   is not within a
4610: 20 5b 42 45 47 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d   [BEGIN]...[COMM
4620: 49 54 5d 20 74 68 65 6e 20 74 68 65 20 62 65 68  IT] then the beh
4630: 61 76 69 6f 72 20 69 73 20 74 68 65 0a 73 61 6d  avior is the.sam
4640: 65 20 61 73 20 42 45 47 49 4e 20 44 45 46 45 52  e as BEGIN DEFER
4650: 52 45 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e  RED TRANSACTION.
4660: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  )^</p>..<p>^The 
4670: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
4680: 61 6e 64 20 72 65 76 65 72 74 73 20 74 68 65 20  and reverts the 
4690: 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74  state of the dat
46a0: 61 62 61 73 65 20 62 61 63 6b 20 74 6f 20 77 68  abase back to wh
46b0: 61 74 0a 69 74 20 77 61 73 20 6a 75 73 74 20 61  at.it was just a
46c0: 66 74 65 72 20 74 68 65 20 63 6f 72 72 65 73 70  fter the corresp
46d0: 6f 6e 64 69 6e 67 20 53 41 56 45 50 4f 49 4e 54  onding SAVEPOINT
46e0: 2e 20 20 5e 4e 6f 74 65 20 74 68 61 74 20 75 6e  .  ^Note that un
46f0: 6c 69 6b 65 20 74 68 61 74 0a 70 6c 61 69 6e 20  like that.plain 
4700: 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61  [ROLLBACK] comma
4710: 6e 64 20 28 77 69 74 68 6f 75 74 20 74 68 65 20  nd (without the 
4720: 54 4f 20 6b 65 79 77 6f 72 64 29 20 74 68 65 20  TO keyword) the 
4730: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d  ROLLBACK TO comm
4740: 61 6e 64 0a 64 6f 65 73 20 6e 6f 74 20 63 61 6e  and.does not can
4750: 63 65 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  cel the transact
4760: 69 6f 6e 2e 20 20 5e 49 6e 73 74 65 61 64 20 6f  ion.  ^Instead o
4770: 66 20 63 61 6e 63 65 6c 6c 69 6e 67 20 74 68 65  f cancelling the
4780: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 0a 74 68   transaction,.th
4790: 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f  e ROLLBACK TO co
47a0: 6d 6d 61 6e 64 20 72 65 73 74 61 72 74 73 20 74  mmand restarts t
47b0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  he transaction a
47c0: 67 61 69 6e 20 61 74 20 74 68 65 20 62 65 67 69  gain at the begi
47d0: 6e 6e 69 6e 67 2e 0a 5e 41 6c 6c 20 69 6e 74 65  nning..^All inte
47e0: 72 76 65 6e 69 6e 67 20 53 41 56 45 50 4f 49 4e  rvening SAVEPOIN
47f0: 54 73 20 61 72 65 20 63 61 6e 63 65 6c 65 64 2c  Ts are canceled,
4800: 20 68 6f 77 65 76 65 72 2e 3c 2f 70 3e 0a 0a 3c   however.</p>..<
4810: 70 3e 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63  p>^The RELEASE c
4820: 6f 6d 6d 61 6e 64 20 69 73 20 6c 69 6b 65 20 61  ommand is like a
4830: 20 5b 43 4f 4d 4d 49 54 5d 20 66 6f 72 20 61 20   [COMMIT] for a 
4840: 53 41 56 45 50 4f 49 4e 54 2e 0a 5e 54 68 65 20  SAVEPOINT..^The 
4850: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20  RELEASE command 
4860: 63 61 75 73 65 73 20 61 6c 6c 20 73 61 76 65 70  causes all savep
4870: 6f 69 6e 74 73 20 62 61 63 6b 20 74 6f 20 61 6e  oints back to an
4880: 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  d including the 
4890: 0a 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 61 76  .most recent sav
48a0: 65 70 6f 69 6e 74 20 77 69 74 68 20 61 20 6d 61  epoint with a ma
48b0: 74 63 68 69 6e 67 20 6e 61 6d 65 20 74 6f 20 62  tching name to b
48c0: 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  e removed from t
48d0: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
48e0: 73 74 61 63 6b 2e 20 20 5e 54 68 65 20 52 45 4c  stack.  ^The REL
48f0: 45 41 53 45 20 6f 66 20 61 6e 20 69 6e 6e 65 72  EASE of an inner
4900: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 64 6f 65   transaction.doe
4910: 73 20 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20  s not cause any 
4920: 63 68 61 6e 67 65 73 20 74 6f 20 62 65 20 77 72  changes to be wr
4930: 69 74 74 65 6e 20 74 6f 20 74 68 65 20 64 61 74  itten to the dat
4940: 61 62 61 73 65 20 66 69 6c 65 3b 20 69 74 20 6d  abase file; it m
4950: 65 72 65 6c 79 0a 72 65 6d 6f 76 65 73 20 73 61  erely.removes sa
4960: 76 65 70 6f 69 6e 74 73 20 66 72 6f 6d 20 74 68  vepoints from th
4970: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
4980: 61 63 6b 20 73 75 63 68 20 74 68 61 74 20 69 74  ack such that it
4990: 20 69 73 0a 6e 6f 20 6c 6f 6e 67 65 72 20 70 6f   is.no longer po
49a0: 73 73 69 62 6c 65 20 74 6f 20 52 4f 4c 4c 42 41  ssible to ROLLBA
49b0: 43 4b 20 54 4f 20 74 68 6f 73 65 20 73 61 76 65  CK TO those save
49c0: 70 6f 69 6e 74 73 2e 0a 5e 49 66 20 61 20 52 45  points..^If a RE
49d0: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65  LEASE command re
49e0: 6c 65 61 73 65 73 20 74 68 65 20 6f 75 74 65 72  leases the outer
49f0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 2c 20  most savepoint, 
4a00: 73 6f 0a 74 68 61 74 20 74 68 65 20 74 72 61 6e  so.that the tran
4a10: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 62 65  saction stack be
4a20: 63 6f 6d 65 73 20 65 6d 70 74 79 2c 20 74 68 65  comes empty, the
4a30: 6e 20 52 45 4c 45 41 53 45 20 69 73 20 74 68 65  n RELEASE is the
4a40: 20 73 61 6d 65 0a 61 73 20 5b 43 4f 4d 4d 49 54   same.as [COMMIT
4a50: 5d 2e 0a 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d  ]..^The [COMMIT]
4a60: 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20   command may be 
4a70: 75 73 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20  used to release 
4a80: 61 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 61  all savepoints a
4a90: 6e 64 0a 63 6f 6d 6d 69 74 20 74 68 65 20 74 72  nd.commit the tr
4aa0: 61 6e 73 61 63 74 69 6f 6e 20 65 76 65 6e 20 69  ansaction even i
4ab0: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
4ac0: 6e 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  n was originally
4ad0: 20 73 74 61 72 74 65 64 0a 62 79 20 61 20 53 41   started.by a SA
4ae0: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
4af0: 69 6e 73 74 65 61 64 20 6f 66 20 61 20 5b 42 45  instead of a [BE
4b00: 47 49 4e 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70  GIN] command.</p
4b10: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 73 61  >..<p>^If the sa
4b20: 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20  vepoint-name in 
4b30: 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
4b40: 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  d does not match
4b50: 20 61 6e 79 0a 73 61 76 65 70 6f 69 6e 74 20 63   any.savepoint c
4b60: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4b70: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
4b80: 6b 2c 20 74 68 65 6e 20 6e 6f 20 73 61 76 65 70  k, then no savep
4b90: 6f 69 6e 74 73 20 61 72 65 0a 72 65 6c 65 61 73  oints are.releas
4ba0: 65 64 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ed, the database
4bb0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2c 20 61   is unchanged, a
4bc0: 6e 64 20 74 68 65 20 52 45 4c 45 41 53 45 20 63  nd the RELEASE c
4bd0: 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73 0a 61  ommand returns.a
4be0: 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70  n error.</p>..<p
4bf0: 3e 5e 4e 6f 74 65 20 74 68 61 74 20 61 6e 20 69  >^Note that an i
4c00: 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  nner transaction
4c10: 20 6d 69 67 68 74 20 63 6f 6d 6d 69 74 20 28 75   might commit (u
4c20: 73 69 6e 67 20 74 68 65 20 52 45 4c 45 41 53 45  sing the RELEASE
4c30: 20 63 6f 6d 6d 61 6e 64 29 0a 62 75 74 20 74 68   command).but th
4c40: 65 6e 20 6c 61 74 65 72 20 68 61 76 65 20 69 74  en later have it
4c50: 73 20 77 6f 72 6b 20 75 6e 64 6f 6e 65 20 62 79  s work undone by
4c60: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 69 6e 20 61   a ROLLBACK in a
4c70: 6e 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74  n outer transact
4c80: 69 6f 6e 2e 0a 5e 41 20 70 6f 77 65 72 20 66 61  ion..^A power fa
4c90: 69 6c 75 72 65 20 6f 72 20 70 72 6f 67 72 61 6d  ilure or program
4ca0: 20 63 72 61 73 68 20 6f 72 20 4f 53 20 63 72 61   crash or OS cra
4cb0: 73 68 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68  sh will cause th
4cc0: 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a 74 72 61  e outer-most.tra
4cd0: 6e 73 61 63 74 69 6f 6e 20 74 6f 20 72 6f 6c 6c  nsaction to roll
4ce0: 62 61 63 6b 2c 20 75 6e 64 6f 69 6e 67 20 61 6c  back, undoing al
4cf0: 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  l changes that h
4d00: 61 76 65 20 6f 63 63 75 72 72 65 64 20 77 69 74  ave occurred wit
4d10: 68 69 6e 0a 74 68 61 74 20 6f 75 74 65 72 20 74  hin.that outer t
4d20: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 65 76 65 6e  ransaction, even
4d30: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
4d40: 76 65 20 73 75 70 70 6f 73 65 64 6c 79 20 62 65  ve supposedly be
4d50: 65 6e 20 22 63 6f 6d 6d 69 74 74 65 64 22 0a 62  en "committed".b
4d60: 79 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  y the RELEASE co
4d70: 6d 6d 61 6e 64 2e 20 20 5e 43 6f 6e 74 65 6e 74  mmand.  ^Content
4d80: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
4d90: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68   committed on th
4da0: 65 20 64 69 73 6b 20 0a 75 6e 74 69 6c 20 74 68  e disk .until th
4db0: 65 20 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e  e outermost tran
4dc0: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 2e  saction commits.
4dd0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  </p>..<p>There a
4de0: 72 65 20 73 65 76 65 72 61 6c 20 77 61 79 73 20  re several ways 
4df0: 6f 66 20 74 68 69 6e 6b 69 6e 67 20 61 62 6f 75  of thinking abou
4e00: 74 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f  t the RELEASE co
4e10: 6d 6d 61 6e 64 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  mmand:</p>..<ul>
4e20: 0a 3c 6c 69 3e 3c 70 3e 0a 53 6f 6d 65 20 70 65  .<li><p>.Some pe
4e30: 6f 70 6c 65 20 76 69 65 77 20 52 45 4c 45 41 53  ople view RELEAS
4e40: 45 20 61 73 20 74 68 65 20 65 71 75 69 76 61 6c  E as the equival
4e50: 65 6e 74 20 6f 66 20 43 4f 4d 4d 49 54 20 66 6f  ent of COMMIT fo
4e60: 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e 0a 54  r a SAVEPOINT..T
4e70: 68 69 73 20 69 73 20 61 6e 20 61 63 63 65 70 74  his is an accept
4e80: 61 62 6c 65 20 70 6f 69 6e 74 20 6f 66 20 76 69  able point of vi
4e90: 65 77 20 61 73 20 6c 6f 6e 67 20 61 73 20 6f 6e  ew as long as on
4ea0: 65 20 72 65 6d 65 6d 62 65 72 73 20 74 68 61 74  e remembers that
4eb0: 20 74 68 65 0a 63 68 61 6e 67 65 73 20 63 6f 6d   the.changes com
4ec0: 6d 69 74 74 65 64 20 62 79 20 61 6e 20 69 6e 6e  mitted by an inn
4ed0: 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  er transaction m
4ee0: 69 67 68 74 20 6c 61 74 65 72 20 62 65 20 75 6e  ight later be un
4ef0: 64 6f 6e 65 20 62 79 20 61 0a 72 6f 6c 6c 62 61  done by a.rollba
4f00: 63 6b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74  ck in an outer t
4f10: 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 3c  ransaction.</p><
4f20: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 41 6e  /li>..<li><p>.An
4f30: 6f 74 68 65 72 20 76 69 65 77 20 6f 66 20 52 45  other view of RE
4f40: 4c 45 41 53 45 20 69 73 20 74 68 61 74 20 69 74  LEASE is that it
4f50: 20 6d 65 72 67 65 73 20 61 20 6e 61 6d 65 64 20   merges a named 
4f60: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 6f  transaction into
4f70: 20 69 74 73 0a 70 61 72 65 6e 74 20 74 72 61 6e   its.parent tran
4f80: 73 61 63 74 69 6f 6e 2c 20 73 6f 20 74 68 61 74  saction, so that
4f90: 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61 6e 73   the named trans
4fa0: 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 70  action and its p
4fb0: 61 72 65 6e 74 20 62 65 63 6f 6d 65 0a 74 68 65  arent become.the
4fc0: 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f   same transactio
4fd0: 6e 2e 20 20 41 66 74 65 72 20 52 45 4c 45 41 53  n.  After RELEAS
4fe0: 45 2c 20 74 68 65 20 6e 61 6d 65 64 20 74 72 61  E, the named tra
4ff0: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 69 74 73  nsaction and its
5000: 20 70 61 72 65 6e 74 0a 77 69 6c 6c 20 63 6f 6d   parent.will com
5010: 6d 69 74 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  mit or rollback 
5020: 74 6f 67 65 74 68 65 72 2c 20 77 68 61 74 65 76  together, whatev
5030: 65 72 20 74 68 65 69 72 20 66 61 74 65 20 6d 61  er their fate ma
5040: 79 20 62 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a  y be..</p></li>.
5050: 0a 3c 6c 69 3e 3c 70 3e 0a 4f 6e 65 20 63 61 6e  .<li><p>.One can
5060: 20 61 6c 73 6f 20 74 68 69 6e 6b 20 6f 66 20 73   also think of s
5070: 61 76 65 70 6f 69 6e 74 73 20 61 73 0a 22 6d 61  avepoints as."ma
5080: 72 6b 73 22 20 69 6e 20 74 68 65 20 74 72 61 6e  rks" in the tran
5090: 73 61 63 74 69 6f 6e 20 74 69 6d 65 6c 69 6e 65  saction timeline
50a0: 2e 20 20 49 6e 20 74 68 69 73 20 76 69 65 77 2c  .  In this view,
50b0: 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 63   the SAVEPOINT c
50c0: 6f 6d 6d 61 6e 64 0a 63 72 65 61 74 65 73 20 61  ommand.creates a
50d0: 20 6e 65 77 20 6d 61 72 6b 2c 20 74 68 65 20 52   new mark, the R
50e0: 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d 6d 61  OLLBACK TO comma
50f0: 6e 64 20 72 65 77 69 6e 64 73 20 74 68 65 20 74  nd rewinds the t
5100: 69 6d 65 6c 69 6e 65 20 62 61 63 6b 0a 74 6f 20  imeline back.to 
5110: 61 20 70 6f 69 6e 74 20 6a 75 73 74 20 61 66 74  a point just aft
5120: 65 72 20 74 68 65 20 6e 61 6d 65 64 20 6d 61 72  er the named mar
5130: 6b 2c 20 61 6e 64 20 74 68 65 20 52 45 4c 45 41  k, and the RELEA
5140: 53 45 20 63 6f 6d 6d 61 6e 64 0a 65 72 61 73 65  SE command.erase
5150: 73 20 6d 61 72 6b 73 20 66 72 6f 6d 20 74 68 65  s marks from the
5160: 20 74 69 6d 65 6c 69 6e 65 20 77 69 74 68 6f 75   timeline withou
5170: 74 20 61 63 74 75 61 6c 6c 79 20 6d 61 6b 69 6e  t actually makin
5180: 67 20 61 6e 79 0a 63 68 61 6e 67 65 73 20 74 6f  g any.changes to
5190: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 3c   the database..<
51a0: 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  /p></li>.</ul>..
51b0: 0a 0a 3c 68 33 3e 54 72 61 6e 73 61 63 74 69 6f  ..<h3>Transactio
51c0: 6e 20 4e 65 73 74 69 6e 67 20 52 75 6c 65 73 3c  n Nesting Rules<
51d0: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 61  /h3>..<p>^The la
51e0: 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  st transaction s
51f0: 74 61 72 74 65 64 20 77 69 6c 6c 20 62 65 20 74  tarted will be t
5200: 68 65 20 66 69 72 73 74 0a 74 72 61 6e 73 61 63  he first.transac
5210: 74 69 6f 6e 20 63 6f 6d 6d 69 74 74 65 64 20 6f  tion committed o
5220: 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 3c 2f  r rolled back.</
5230: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 42 45 47  p>..<p>^The [BEG
5240: 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79  IN] command only
5250: 20 77 6f 72 6b 73 20 69 66 20 74 68 65 20 74 72   works if the tr
5260: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
5270: 69 73 20 65 6d 70 74 79 2c 20 6f 72 0a 69 6e 20  is empty, or.in 
5280: 6f 74 68 65 72 20 77 6f 72 64 73 20 69 66 20 74  other words if t
5290: 68 65 72 65 20 61 72 65 20 6e 6f 20 70 65 6e 64  here are no pend
52a0: 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ing transactions
52b0: 2e 20 20 5e 49 66 20 74 68 65 20 74 72 61 6e 73  .  ^If the trans
52c0: 61 63 74 69 6f 6e 0a 73 74 61 63 6b 20 69 73 20  action.stack is 
52d0: 6e 6f 74 20 65 6d 70 74 79 20 77 68 65 6e 20 74  not empty when t
52e0: 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61  he [BEGIN] comma
52f0: 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74  nd is invoked, t
5300: 68 65 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a  hen the command.
5310: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
5320: 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ror.</p>..<p>^Th
5330: 65 20 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61  e [COMMIT] comma
5340: 6e 64 20 63 6f 6d 6d 69 74 73 20 61 6c 6c 20 6f  nd commits all o
5350: 75 74 73 74 61 6e 64 69 6e 67 20 74 72 61 6e 73  utstanding trans
5360: 61 63 74 69 6f 6e 73 20 61 6e 64 20 6c 65 61 76  actions and leav
5370: 65 73 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69  es.the transacti
5380: 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79 2e 3c  on stack empty.<
5390: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c  /p>..<p>^The REL
53a0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 73 74 61  EASE command sta
53b0: 72 74 73 20 77 69 74 68 20 74 68 65 20 6d 6f 73  rts with the mos
53c0: 74 20 72 65 63 65 6e 74 20 61 64 64 69 74 69 6f  t recent additio
53d0: 6e 20 74 6f 20 74 68 65 0a 74 72 61 6e 73 61 63  n to the.transac
53e0: 74 69 6f 6e 20 73 74 61 63 6b 20 61 6e 64 20 72  tion stack and r
53f0: 65 6c 65 61 73 65 73 20 73 61 76 65 70 6f 69 6e  eleases savepoin
5400: 74 73 20 62 61 63 6b 77 61 72 64 73 20 0a 69 6e  ts backwards .in
5410: 20 74 69 6d 65 20 75 6e 74 69 6c 20 69 74 20 72   time until it r
5420: 65 6c 65 61 73 65 73 20 61 20 73 61 76 65 70 6f  eleases a savepo
5430: 69 6e 74 20 77 69 74 68 20 61 20 6d 61 74 63 68  int with a match
5440: 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61  ing savepoint-na
5450: 6d 65 2e 0a 5e 50 72 69 6f 72 20 73 61 76 65 70  me..^Prior savep
5460: 6f 69 6e 74 73 2c 20 65 76 65 6e 20 73 61 76 65  oints, even save
5470: 70 6f 69 6e 74 73 20 77 69 74 68 20 6d 61 74 63  points with matc
5480: 68 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2d 6e  hing savepoint-n
5490: 61 6d 65 73 2c 20 61 72 65 0a 75 6e 63 68 61 6e  ames, are.unchan
54a0: 67 65 64 2e 0a 5e 49 66 20 74 68 65 20 52 45 4c  ged..^If the REL
54b0: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 63 61 75  EASE command cau
54c0: 73 65 73 20 74 68 65 0a 74 72 61 6e 73 61 63 74  ses the.transact
54d0: 69 6f 6e 20 73 74 61 63 6b 20 74 6f 20 62 65 63  ion stack to bec
54e0: 6f 6d 65 20 65 6d 70 74 79 20 28 69 66 20 74 68  ome empty (if th
54f0: 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  e RELEASE comman
5500: 64 20 72 65 6c 65 61 73 65 73 20 74 68 65 0a 6f  d releases the.o
5510: 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73 61 63  utermost transac
5520: 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74  tion from the st
5530: 61 63 6b 29 20 74 68 65 6e 20 74 68 65 20 74 72  ack) then the tr
5540: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74  ansaction commit
5550: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  s.</p>..<p>^The 
5560: 5b 52 4f 4c 4c 42 41 43 4b 5d 20 63 6f 6d 6d 61  [ROLLBACK] comma
5570: 6e 64 20 77 69 74 68 6f 75 74 20 61 20 54 4f 20  nd without a TO 
5580: 63 6c 61 75 73 65 20 72 6f 6c 6c 73 20 62 61 63  clause rolls bac
5590: 6b 73 20 61 6c 6c 20 74 72 61 6e 73 61 63 74 69  ks all transacti
55a0: 6f 6e 73 0a 61 6e 64 20 6c 65 61 76 65 73 20 74  ons.and leaves t
55b0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  he transaction s
55c0: 74 61 63 6b 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a  tack empty.</p>.
55d0: 0a 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43  .<p>^The ROLLBAC
55e0: 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 20 61  K command with a
55f0: 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c 6c 73   TO clause rolls
5600: 20 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f   back transactio
5610: 6e 73 20 67 6f 69 6e 67 0a 62 61 63 6b 77 61 72  ns going.backwar
5620: 64 73 20 69 6e 20 74 69 6d 65 20 62 61 63 6b 20  ds in time back 
5630: 74 6f 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  to the most rece
5640: 6e 74 20 53 41 56 45 50 4f 49 4e 54 20 77 69 74  nt SAVEPOINT wit
5650: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
5660: 65 2e 0a 5e 54 68 65 20 53 41 56 45 50 4f 49 4e  e..^The SAVEPOIN
5670: 54 20 77 69 74 68 20 74 68 65 20 6d 61 74 63 68  T with the match
5680: 69 6e 67 20 6e 61 6d 65 20 72 65 6d 61 69 6e 73  ing name remains
5690: 20 6f 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   on the transact
56a0: 69 6f 6e 20 73 74 61 63 6b 2c 0a 62 75 74 20 61  ion stack,.but a
56b0: 6c 6c 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  ll database chan
56c0: 67 65 73 20 74 68 61 74 20 6f 63 63 75 72 72 65  ges that occurre
56d0: 64 20 61 66 74 65 72 20 74 68 61 74 20 53 41 56  d after that SAV
56e0: 45 50 4f 49 4e 54 20 77 61 73 20 63 72 65 61 74  EPOINT was creat
56f0: 65 64 0a 61 72 65 20 72 6f 6c 6c 65 64 20 62 61  ed.are rolled ba
5700: 63 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 61 76  ck.  ^If the sav
5710: 65 70 6f 69 6e 74 2d 6e 61 6d 65 20 69 6e 20 61  epoint-name in a
5720: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 63 6f 6d   ROLLBACK TO com
5730: 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74 0a 6d 61  mand does not.ma
5740: 74 63 68 20 61 6e 79 20 53 41 56 45 50 4f 49 4e  tch any SAVEPOIN
5750: 54 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 2c 20  T on the stack, 
5760: 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43  then the ROLLBAC
5770: 4b 20 63 6f 6d 6d 61 6e 64 20 66 61 69 6c 73 20  K command fails 
5780: 77 69 74 68 20 61 6e 0a 65 72 72 6f 72 20 61 6e  with an.error an
5790: 64 20 6c 65 61 76 65 73 20 74 68 65 20 73 74 61  d leaves the sta
57a0: 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  te of the databa
57b0: 73 65 20 75 6e 63 68 61 6e 67 65 64 2e 3c 2f 70  se unchanged.</p
57c0: 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
57d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
57f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5810: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
5820: 20 63 6f 6d 6d 65 6e 74 20 63 6f 6d 6d 65 6e 74   comment comment
5830: 20 7b 63 6f 6d 6d 65 6e 74 20 2a 63 6f 6d 6d 65   {comment *comme
5840: 6e 74 73 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  nts}..BubbleDiag
5850: 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74  ram comment-synt
5860: 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43  ax.</tcl>..<p>^C
5870: 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 20  omments are not 
5880: 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75  SQL commands, bu
5890: 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74 68  t can occur with
58a0: 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a 53  in the text of.S
58b0: 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73 65  QL queries passe
58c0: 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72  d to [sqlite3_pr
58d0: 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64 20  epare_v2()] and 
58e0: 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61 63  related interfac
58f0: 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72  es..^Comments ar
5900: 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68 69  e treated as whi
5910: 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20 70  tespace by the p
5920: 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73  arser..^Comments
5930: 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77 68   can begin anywh
5940: 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20 0a  ere whitespace .
5950: 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e  can be found, in
5960: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
5970: 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
5980: 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69  span multiple li
5990: 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53  nes..</p>..<p>^S
59a0: 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69  QL comments begi
59b0: 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73 65  n with two conse
59c0: 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72 61  cutive "-" chara
59d0: 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78 32  cters (ASCII 0x2
59e0: 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75 70  d).and extend up
59f0: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
5a00: 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c 69  g the next newli
5a10: 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41 53  ne character (AS
5a20: 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e 74  CII 0x0a).or unt
5a30: 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  il the end of in
5a40: 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63  put, whichever c
5a50: 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a  omes first.</p>.
5a60: 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d  .<p>^C-style com
5a70: 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74 68  ments begin.with
5a80: 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e 64   "/*" and extend
5a90: 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
5aa0: 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22 2a  ding the next "*
5ab0: 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61 69  /" character pai
5ac0: 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65  r.or until the e
5ad0: 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69  nd of input, whi
5ae0: 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72  chever comes fir
5af0: 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f  st.  ^C-style co
5b00: 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20  mments.can span 
5b10: 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20  multiple lines. 
5b20: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e  </p>..<p>^Commen
5b30: 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e  ts can appear an
5b40: 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63  ywhere whitespac
5b50: 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63  e can occur,.inc
5b60: 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78  luding inside ex
5b70: 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e  pressions and in
5b80: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f   the middle of o
5b90: 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65  ther SQL stateme
5ba0: 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64  nts..^Comments d
5bb0: 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e  o not nest..</p>
5bc0: 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
5bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5c10: 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
5c20: 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63  {CREATE INDEX} c
5c30: 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45  reateindex {{CRE
5c40: 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 42 75 62  ATE INDEX}}..Bub
5c50: 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74  bleDiagram creat
5c60: 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20 31 0a 42  e-index-stmt 1.B
5c70: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 64  ubbleDiagram ind
5c80: 65 78 65 64 2d 63 6f 6c 75 6d 6e 0a 3c 2f 74 63  exed-column.</tc
5c90: 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41  l>..<p>^The CREA
5ca0: 54 45 20 49 4e 44 45 58 20 63 6f 6d 6d 61 6e 64  TE INDEX command
5cb0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
5cc0: 20 6b 65 79 77 6f 72 64 73 20 22 43 52 45 41 54   keywords "CREAT
5cd0: 45 20 49 4e 44 45 58 22 20 66 6f 6c 6c 6f 77 65  E INDEX" followe
5ce0: 64 0a 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66  d.by the name of
5cf0: 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 2c 20   the new index, 
5d00: 74 68 65 20 6b 65 79 77 6f 72 64 20 22 4f 4e 22  the keyword "ON"
5d10: 2c 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  , the name of a 
5d20: 70 72 65 76 69 6f 75 73 6c 79 0a 63 72 65 61 74  previously.creat
5d30: 65 64 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  ed table that is
5d40: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 2c 20   to be indexed, 
5d50: 61 6e 64 20 61 20 70 61 72 65 6e 74 68 65 73 69  and a parenthesi
5d60: 7a 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  zed list of name
5d70: 73 20 6f 66 0a 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of.columns in 
5d80: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
5d90: 72 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  re used for the 
5da0: 69 6e 64 65 78 20 6b 65 79 2e 3c 2f 70 3e 0a 0a  index key.</p>..
5db0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
5dc0: 20 7b 64 65 73 63 69 64 78 7d 20 7b 64 65 73 63   {descidx} {desc
5dd0: 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 7d 20  ending indices} 
5de0: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  {descending inde
5df0: 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45 61 63  x}</tcl>.<p>^Eac
5e00: 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61  h column name ca
5e10: 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  n be followed by
5e20: 20 6f 6e 65 20 6f 66 20 74 68 65 20 22 41 53 43   one of the "ASC
5e30: 22 20 6f 72 20 22 44 45 53 43 22 20 6b 65 79 77  " or "DESC" keyw
5e40: 6f 72 64 73 0a 74 6f 20 69 6e 64 69 63 61 74 65  ords.to indicate
5e50: 20 73 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54   sort order.  ^T
5e60: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6d 61  he sort order ma
5e70: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
5e80: 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64 69 6e  ignored dependin
5e90: 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  g.on the databas
5ea0: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c 20 61  e file format, a
5eb0: 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c 61 72  nd in particular
5ec0: 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66 6f 72   the [schema for
5ed0: 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e 54 68  mat number]..^Th
5ee0: 65 20 22 6c 65 67 61 63 79 22 20 73 63 68 65 6d  e "legacy" schem
5ef0: 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69 67 6e  a format (1) ign
5f00: 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72 74 20  ores index.sort 
5f10: 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64 65 73  order.  ^The des
5f20: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 73 63  cending index sc
5f30: 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34 29 20  hema format (4) 
5f40: 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f 72 74  takes index sort
5f50: 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63 63 6f   order.into acco
5f60: 75 6e 74 2e 20 20 5e 28 4f 6e 6c 79 20 63 6f 70  unt.  ^(Only cop
5f70: 69 65 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 65  ies of SQLite ne
5f80: 77 65 72 20 74 68 61 6e 20 5b 76 65 72 73 69 6f  wer than [versio
5f90: 6e 20 33 2e 33 2e 30 5d 20 0a 28 72 65 6c 65 61  n 3.3.0] .(relea
5fa0: 73 65 64 20 6f 6e 20 32 30 30 36 2d 30 31 2d 31  sed on 2006-01-1
5fb0: 30 29 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75  0) are able to u
5fc0: 6e 64 65 72 73 74 61 6e 64 20 74 68 65 20 6e 65  nderstand the ne
5fd0: 77 65 72 20 64 65 73 63 65 6e 64 69 6e 67 0a 69  wer descending.i
5fe0: 6e 64 65 78 20 66 69 6c 65 20 66 6f 72 6d 61 74  ndex file format
5ff0: 2e 29 5e 20 20 46 6f 72 20 63 6f 6d 70 61 74 69  .)^  For compati
6000: 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20  bility, version 
6010: 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65  of SQLite betwee
6020: 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e  n 3.3.0.and 3.7.
6030: 39 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79  9 use the legacy
6040: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62   schema format b
6050: 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20  y default.  The 
6060: 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72  newer schema for
6070: 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64  mat is.used by d
6080: 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f  efault in versio
6090: 6e 20 33 2e 37 2e 31 30 20 61 6e 64 20 6c 61 74  n 3.7.10 and lat
60a0: 65 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79  er..^The [legacy
60b0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61  _file_format pra
60c0: 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64  gma] can be used
60d0: 20 74 6f 20 63 68 61 6e 67 65 20 73 65 74 20 74   to change set t
60e0: 68 65 20 73 70 65 63 69 66 69 63 0a 62 65 68 61  he specific.beha
60f0: 76 69 6f 72 20 66 6f 72 20 61 6e 79 20 76 65 72  vior for any ver
6100: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 3c  sion of SQLite.<
6110: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c  /p>..<p>^The COL
6120: 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 70 74 69  LATE clause opti
6130: 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67  onally following
6140: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d   each column nam
6150: 65 20 64 65 66 69 6e 65 73 20 61 0a 63 6f 6c 6c  e defines a.coll
6160: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75  ating sequence u
6170: 73 65 64 20 66 6f 72 20 74 65 78 74 20 65 6e 74  sed for text ent
6180: 72 69 65 73 20 69 6e 20 74 68 61 74 20 63 6f 6c  ries in that col
6190: 75 6d 6e 2e 0a 5e 54 68 65 20 64 65 66 61 75 6c  umn..^The defaul
61a0: 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75  t collating.sequ
61b0: 65 6e 63 65 20 69 73 20 74 68 65 20 63 6f 6c 6c  ence is the coll
61c0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 64  ating sequence d
61d0: 65 66 69 6e 65 64 20 66 6f 72 20 74 68 61 74 20  efined for that 
61e0: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 0a 5b 43  column in the.[C
61f0: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
6200: 74 65 6d 65 6e 74 2e 20 20 5e 4f 72 20 69 66 20  tement.  ^Or if 
6210: 6e 6f 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  no collating seq
6220: 75 65 6e 63 65 20 69 73 20 6f 74 68 65 72 77 69  uence is otherwi
6230: 73 65 20 64 65 66 69 6e 65 64 2c 0a 74 68 65 20  se defined,.the 
6240: 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20  built-in BINARY 
6250: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
6260: 63 65 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a  ce is used.</p>.
6270: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f  .<p>There are no
6280: 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
6290: 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  s on the number 
62a0: 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  of indices that 
62b0: 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20  can be.attached 
62c0: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
62d0: 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72  e.  ^(The number
62e0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61   of columns in a
62f0: 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69  n index is .limi
6300: 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ted to the value
6310: 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33   set by.[sqlite3
6320: 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f  _limit]([SQLITE_
6330: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e  LIMIT_COLUMN],..
6340: 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  .).)^</p>..<p>^I
6350: 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79  f the UNIQUE key
6360: 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74  word appears bet
6370: 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20  ween CREATE and 
6380: 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69  INDEX then dupli
6390: 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69  cate.index entri
63a0: 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  es are not allow
63b0: 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70  ed.  ^Any attemp
63c0: 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75  t to insert a du
63d0: 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69  plicate entry.wi
63e0: 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  ll result in an 
63f0: 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65  error.  ^For the
6400: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69   purposes of uni
6410: 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c  que indices, all
6420: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65   NULL values.are
6430: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 64   considered to d
6440: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c  ifferent from al
6450: 6c 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c  l other NULL val
6460: 75 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73  ues and are thus
6470: 20 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73   unique..This is
6480: 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20   one of the two 
6490: 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72  possible interpr
64a0: 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  etations of the 
64b0: 53 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a  SQL-92 standard.
64c0: 28 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e  (the language in
64d0: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73   the standard is
64e0: 20 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20   ambiguous) and 
64f0: 69 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  is the interpret
6500: 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62  ation.followed b
6510: 79 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79  y PostgreSQL, My
6520: 53 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61  SQL, Firebird, a
6530: 6e 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f  nd Oracle.  Info
6540: 72 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f  rmix and.Microso
6550: 66 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f  ft SQL Server fo
6560: 6c 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69  llow the other i
6570: 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
6580: 20 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f   the standard.</
6590: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f  p>..<p>^If the o
65a0: 70 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45  ptional IF NOT E
65b0: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
65c0: 70 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74  present and anot
65d0: 68 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74  her index.with t
65e0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72  he same name alr
65f0: 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65  eady exists, the
6600: 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62  n this command b
6610: 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c  ecomes a no-op.<
6620: 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73  /p>..<p>^Indexes
6630: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74   are removed wit
6640: 68 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45  h the [DROP INDE
6650: 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  X] command.</p>.
6660: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
6670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
66a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
66b0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
66c0: 43 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63  CREATE TABLE} {c
66d0: 72 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52  reatetable} {{CR
66e0: 45 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 42 75  EATE TABLE}}..Bu
66f0: 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
6700: 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74 20 31 0a  te-table-stmt 1.
6710: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63 6f  BubbleDiagram co
6720: 6c 75 6d 6e 2d 64 65 66 0a 42 75 62 62 6c 65 44  lumn-def.BubbleD
6730: 69 61 67 72 61 6d 20 74 79 70 65 2d 6e 61 6d 65  iagram type-name
6740: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
6750: 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74  olumn-constraint
6760: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 74  .BubbleDiagram t
6770: 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 0a  able-constraint.
6780: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 66 6f  BubbleDiagram fo
6790: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
67a0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20  .</tcl>..<p>The 
67b0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 22 20 63  "CREATE TABLE" c
67c0: 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
67d0: 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 74  o create a new t
67e0: 61 62 6c 65 20 69 6e 20 61 6e 20 53 51 4c 69 74  able in an SQLit
67f0: 65 20 0a 64 61 74 61 62 61 73 65 2e 20 41 20 43  e .database. A C
6800: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d  REATE TABLE comm
6810: 61 6e 64 20 73 70 65 63 69 66 69 65 73 20 74 68  and specifies th
6820: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 74 74 72  e following attr
6830: 69 62 75 74 65 73 20 6f 66 20 74 68 65 0a 6e 65  ibutes of the.ne
6840: 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c 3e 0a 20  w table:..<ul>. 
6850: 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e 61 6d 65   <li><p>The name
6860: 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
6870: 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 54 68  e...  <li><p> Th
6880: 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 77 68  e database in wh
6890: 69 63 68 20 74 68 65 20 6e 65 77 20 74 61 62 6c  ich the new tabl
68a0: 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54 61  e is created. Ta
68b0: 62 6c 65 73 20 6d 61 79 20 62 65 20 0a 20 20 20  bles may be .   
68c0: 20 20 20 63 72 65 61 74 65 64 20 69 6e 20 74 68     created in th
68d0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
68e0: 20 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   the temp databa
68f0: 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79 20 61 74  se, or in any at
6900: 74 61 63 68 65 64 0a 20 20 20 20 20 20 64 61 74  tached.      dat
6910: 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  abase...  <li><p
6920: 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 65 61  > The name of ea
6930: 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
6940: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
6950: 70 3e 20 54 68 65 20 64 65 63 6c 61 72 65 64 20  p> The declared 
6960: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
6970: 75 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65  umn in the table
6980: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41 20 64  ...  <li><p> A d
6990: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20  efault value or 
69a0: 65 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 65  expression for e
69b0: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
69c0: 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e  e table...  <li>
69d0: 3c 70 3e 20 41 20 64 65 66 61 75 6c 74 20 63 6f  <p> A default co
69e0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
69f0: 20 74 6f 20 75 73 65 20 77 69 74 68 20 65 61 63   to use with eac
6a00: 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20 3c 6c 69  h column...  <li
6a10: 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c  ><p> Optionally,
6a20: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66   a PRIMARY KEY f
6a30: 6f 72 20 74 68 65 20 74 61 62 6c 65 2e 20 42 6f  or the table. Bo
6a40: 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e  th single column
6a50: 20 61 6e 64 0a 20 20 20 20 20 20 20 63 6f 6d 70   and.       comp
6a60: 6f 73 69 74 65 20 28 6d 75 6c 74 69 70 6c 65 20  osite (multiple 
6a70: 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61 72 79 20  column) primary 
6a80: 6b 65 79 73 20 61 72 65 20 73 75 70 70 6f 72 74  keys are support
6a90: 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20 41  ed...  <li><p> A
6aa0: 20 73 65 74 20 6f 66 20 53 51 4c 20 63 6f 6e 73   set of SQL cons
6ab0: 74 72 61 69 6e 74 73 20 66 6f 72 20 65 61 63 68  traints for each
6ac0: 20 74 61 62 6c 65 2e 20 53 51 4c 69 74 65 20 73   table. SQLite s
6ad0: 75 70 70 6f 72 74 73 20 55 4e 49 51 55 45 2c 20  upports UNIQUE, 
6ae0: 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55 4c 4c 2c  NOT.       NULL,
6af0: 20 43 48 45 43 4b 20 61 6e 64 20 46 4f 52 45 49   CHECK and FOREI
6b00: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
6b10: 74 73 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76  ts..</ul>..<p>Ev
6b20: 65 72 79 20 43 52 45 41 54 45 20 54 41 42 4c 45  ery CREATE TABLE
6b30: 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20   statement must 
6b40: 73 70 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66  specify a name f
6b50: 6f 72 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  or the new table
6b60: 2e 0a 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65  ..  ^(Table name
6b70: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
6b80: 68 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20  h "sqlite_" are 
6b90: 72 65 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74  reserved for int
6ba0: 65 72 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20  ernal use. It.  
6bb0: 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61  is an error to a
6bc0: 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65  ttempt to create
6bd0: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20   a table with a 
6be0: 6e 61 6d 65 20 74 68 61 74 20 73 74 61 72 74 73  name that starts
6bf0: 20 77 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f   with.  "sqlite_
6c00: 22 2e 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20  ".)^..<p> ^If a 
6c10: 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d  &lt;database-nam
6c20: 65 26 67 74 3b 20 69 73 20 73 70 65 63 69 66 69  e&gt; is specifi
6c30: 65 64 2c 20 69 74 20 6d 75 73 74 20 62 65 20 65  ed, it must be e
6c40: 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 0a 20  ither "main", . 
6c50: 20 22 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20   "temp", or the 
6c60: 6e 61 6d 65 20 6f 66 20 61 6e 20 5b 41 54 54 41  name of an [ATTA
6c70: 43 48 20 44 41 54 41 42 41 53 45 7c 61 74 74 61  CH DATABASE|atta
6c80: 63 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e 20  ched database]. 
6c90: 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 20 20  ^In this case.  
6ca0: 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 73  the new table is
6cb0: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
6cc0: 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  named database. 
6cd0: 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22 20 6f  ^If the "TEMP" o
6ce0: 72 20 22 54 45 4d 50 4f 52 41 52 59 22 0a 20 20  r "TEMPORARY".  
6cf0: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 62  keyword occurs b
6d00: 65 74 77 65 65 6e 20 74 68 65 20 22 43 52 45 41  etween the "CREA
6d10: 54 45 22 20 61 6e 64 20 22 54 41 42 4c 45 22 20  TE" and "TABLE" 
6d20: 74 68 65 6e 20 74 68 65 20 6e 65 77 20 74 61 62  then the new tab
6d30: 6c 65 20 69 73 0a 20 20 63 72 65 61 74 65 64 20  le is.  created 
6d40: 69 6e 20 74 68 65 20 74 65 6d 70 20 64 61 74 61  in the temp data
6d50: 62 61 73 65 2e 20 5e 49 74 20 69 73 20 61 6e 20  base. ^It is an 
6d60: 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79  error to specify
6d70: 20 62 6f 74 68 20 61 20 0a 20 20 26 6c 74 3b 64   both a .  &lt;d
6d80: 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67 74 3b  atabase-name&gt;
6d90: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72   and the TEMP or
6da0: 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f   TEMPORARY keywo
6db0: 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 0a 20  rd, unless the. 
6dc0: 20 26 6c 74 3b 64 61 74 61 62 61 73 65 2d 6e 61   &lt;database-na
6dd0: 6d 65 26 67 74 3b 20 69 73 20 22 74 65 6d 70 22  me&gt; is "temp"
6de0: 2e 20 5e 49 66 20 6e 6f 20 64 61 74 61 62 61 73  . ^If no databas
6df0: 65 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66  e name is specif
6e00: 69 65 64 20 61 6e 64 20 74 68 65 0a 20 20 54 45  ied and the.  TE
6e10: 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f  MP keyword is no
6e20: 74 20 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74  t present then t
6e30: 68 65 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  he table is crea
6e40: 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 0a  ted in the main.
6e50: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70 3e    database...<p>
6e60: 0a 20 20 5e 49 74 20 69 73 20 75 73 75 61 6c 6c  .  ^It is usuall
6e70: 79 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74  y an error to at
6e80: 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20  tempt to create 
6e90: 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61  a new table in a
6ea0: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 0a 20   database that. 
6eb0: 20 61 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e   already contain
6ec0: 73 20 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  s a table, index
6ed0: 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68 65 20   or view of the 
6ee0: 73 61 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f 77 65  same name. ^Howe
6ef0: 76 65 72 2c 20 69 66 20 74 68 65 0a 20 20 22 49  ver, if the.  "I
6f00: 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c  F NOT EXISTS" cl
6f10: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
6f20: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
6f30: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
6f40: 61 74 65 6d 65 6e 74 20 61 6e 64 0a 20 20 61 20  atement and.  a 
6f50: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66  table or view of
6f60: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
6f70: 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74  lready exists, t
6f80: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
6f90: 63 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d 70 6c 79  command.  simply
6fa0: 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 20 28   has no effect (
6fb0: 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73  and no error mes
6fc0: 73 61 67 65 20 69 73 20 72 65 74 75 72 6e 65 64  sage is returned
6fd0: 29 2e 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20  ). ^An error is 
6fe0: 73 74 69 6c 6c 0a 20 20 72 65 74 75 72 6e 65 64  still.  returned
6ff0: 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 63 61   if the table ca
7000: 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
7010: 62 65 63 61 75 73 65 20 6f 66 20 61 6e 20 65 78  because of an ex
7020: 69 73 74 69 6e 67 20 69 6e 64 65 78 2c 20 65 76  isting index, ev
7030: 65 6e 20 0a 20 20 69 66 20 74 68 65 20 22 49 46  en .  if the "IF
7040: 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61   NOT EXISTS" cla
7050: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
7060: 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 6e 6f 74  ...<p>^It is not
7070: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 63 72 65   an error to cre
7080: 61 74 65 20 61 20 74 61 62 6c 65 20 74 68 61 74  ate a table that
7090: 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
70a0: 6d 65 20 61 73 20 61 6e 20 0a 20 20 65 78 69 73  me as an .  exis
70b0: 74 69 6e 67 20 5b 43 52 45 41 54 45 20 54 52 49  ting [CREATE TRI
70c0: 47 47 45 52 7c 74 72 69 67 67 65 72 5d 2e 0a 0a  GGER|trigger]...
70d0: 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72 65 20 72  <p>^Tables are r
70e0: 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65  emoved using the
70f0: 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 73 74   [DROP TABLE] st
7100: 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e 0a 0a  atement.  </p>..
7110: 3c 68 33 3e 43 52 45 41 54 45 20 54 41 42 4c 45  <h3>CREATE TABLE
7120: 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 53   ... AS SELECT S
7130: 74 61 74 65 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a  tatements</h3>..
7140: 3c 70 3e 5e 28 41 20 22 43 52 45 41 54 45 20 54  <p>^(A "CREATE T
7150: 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45  ABLE ... AS SELE
7160: 43 54 22 20 73 74 61 74 65 6d 65 6e 74 20 63 72  CT" statement cr
7170: 65 61 74 65 73 20 61 6e 64 20 70 6f 70 75 6c 61  eates and popula
7180: 74 65 73 20 61 20 64 61 74 61 62 61 73 65 0a 74  tes a database.t
7190: 61 62 6c 65 20 62 61 73 65 64 20 6f 6e 20 74 68  able based on th
71a0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
71b0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
71c0: 29 5e 20 5e 28 54 68 65 20 74 61 62 6c 65 20 68  )^ ^(The table h
71d0: 61 73 20 74 68 65 20 73 61 6d 65 0a 6e 75 6d 62  as the same.numb
71e0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73  er of columns as
71f0: 20 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e   the rows return
7200: 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54  ed by the SELECT
7210: 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
7220: 6e 61 6d 65 20 6f 66 0a 65 61 63 68 20 63 6f 6c  name of.each col
7230: 75 6d 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20  umn is the same 
7240: 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  as the name of t
7250: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
7260: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
7270: 65 73 75 6c 74 0a 73 65 74 20 6f 66 20 74 68 65  esult.set of the
7280: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
7290: 74 2e 29 5e 20 5e 28 54 68 65 20 64 65 63 6c 61  t.)^ ^(The decla
72a0: 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68  red type of each
72b0: 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65 74 65 72   column is deter
72c0: 6d 69 6e 65 64 0a 62 79 20 74 68 65 20 5b 65 78  mined.by the [ex
72d0: 70 72 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74  pression affinit
72e0: 79 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  y] of the corres
72f0: 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69  ponding expressi
7300: 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
7310: 20 73 65 74 0a 6f 66 20 74 68 65 20 53 45 4c 45   set.of the SELE
7320: 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73  CT statement, as
7330: 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a   follows:.</p>..
7340: 3c 63 65 6e 74 65 72 3e 3c 74 61 62 6c 65 20 62  <center><table b
7350: 6f 72 64 65 72 3d 31 3e 0a 20 20 3c 74 72 3e 3c  order=1>.  <tr><
7360: 74 68 3e 45 78 70 72 65 73 73 69 6f 6e 20 41 66  th>Expression Af
7370: 66 69 6e 69 74 79 20 20 20 3c 74 68 3e 43 6f 6c  finity   <th>Col
7380: 75 6d 6e 20 44 65 63 6c 61 72 65 64 20 54 79 70  umn Declared Typ
7390: 65 0a 20 20 3c 74 72 3e 3c 74 64 3e 54 45 58 54  e.  <tr><td>TEXT
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73b0: 20 20 3c 74 64 3e 22 54 45 58 54 22 0a 20 20 3c    <td>"TEXT".  <
73c0: 74 72 3e 3c 74 64 3e 4e 55 4d 45 52 49 43 20 20  tr><td>NUMERIC  
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64               <td
73e0: 3e 22 4e 55 4d 22 0a 20 20 3c 74 72 3e 3c 74 64  >"NUM".  <tr><td
73f0: 3e 49 4e 54 45 47 45 52 20 20 20 20 20 20 20 20  >INTEGER        
7400: 20 20 20 20 20 20 20 3c 74 64 3e 22 49 4e 54 22         <td>"INT"
7410: 0a 20 20 3c 74 72 3e 3c 74 64 3e 52 45 41 4c 20  .  <tr><td>REAL 
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7430: 20 3c 74 64 3e 22 52 45 41 4c 22 0a 20 20 3c 74   <td>"REAL".  <t
7440: 72 3e 3c 74 64 3e 4e 4f 4e 45 20 20 20 20 20 20  r><td>NONE      
7450: 20 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e              <td>
7460: 22 22 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67  "" (empty string
7470: 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74  ).</table></cent
7480: 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 28 41 20 74 61  er>)^..<p>^(A ta
7490: 62 6c 65 20 63 72 65 61 74 65 64 20 75 73 69 6e  ble created usin
74a0: 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41  g CREATE TABLE A
74b0: 53 20 68 61 73 20 6e 6f 20 50 52 49 4d 41 52 59  S has no PRIMARY
74c0: 20 4b 45 59 20 61 6e 64 20 6e 6f 0a 63 6f 6e 73   KEY and no.cons
74d0: 74 72 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b  traints of any k
74e0: 69 6e 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74  ind. The default
74f0: 20 76 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63   value of each c
7500: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20 54  olumn is NULL. T
7510: 68 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 6c 61  he default.colla
7520: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
7530: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  r each column of
7540: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
7550: 73 20 42 49 4e 41 52 59 2e 29 5e 0a 0a 3c 70 3e  s BINARY.)^..<p>
7560: 5e 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20  ^Tables created 
7570: 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 41 42  using CREATE TAB
7580: 4c 45 20 41 53 20 61 72 65 20 69 6e 69 74 69 61  LE AS are initia
7590: 6c 6c 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69  lly populated wi
75a0: 74 68 20 74 68 65 0a 72 6f 77 73 20 6f 66 20 64  th the.rows of d
75b0: 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20  ata returned by 
75c0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
75d0: 6d 65 6e 74 2e 20 5e 52 6f 77 73 20 61 72 65 20  ment. ^Rows are 
75e0: 61 73 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75  assigned contigu
75f0: 6f 75 73 6c 79 0a 61 73 63 65 6e 64 69 6e 67 20  ously.ascending 
7600: 5b 72 6f 77 69 64 5d 20 76 61 6c 75 65 73 2c 20  [rowid] values, 
7610: 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c  starting with 1,
7620: 20 69 6e 20 74 68 65 20 5b 6f 72 64 65 72 20 62   in the [order b
7630: 79 7c 6f 72 64 65 72 5d 20 74 68 61 74 20 74 68  y|order] that th
7640: 65 79 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20  ey.are returned 
7650: 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
7660: 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e 68  atement...<tcl>h
7670: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 74 61 62 6c  d_fragment {tabl
7680: 65 63 6f 6c 64 65 66 7d 20 7b 63 6f 6c 75 6d 6e  ecoldef} {column
7690: 20 64 65 66 69 6e 69 74 69 6f 6e 7d 20 7b 63 6f   definition} {co
76a0: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73  lumn definitions
76b0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6c 75  }</tcl>.<h3>Colu
76c0: 6d 6e 20 44 65 66 69 6e 69 74 69 6f 6e 73 3c 2f  mn Definitions</
76d0: 68 33 3e 0a 0a 3c 70 3e 55 6e 6c 65 73 73 20 69  h3>..<p>Unless i
76e0: 74 20 69 73 20 61 20 43 52 45 41 54 45 20 54 41  t is a CREATE TA
76f0: 42 4c 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43  BLE ... AS SELEC
7700: 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 20 43  T statement, a C
7710: 52 45 41 54 45 20 54 41 42 4c 45 20 69 6e 63 6c  REATE TABLE incl
7720: 75 64 65 73 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65  udes.one or more
7730: 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66 7c 63 6f 6c   [column-def|col
7740: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d  umn definitions]
7750: 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  , optionally fol
7760: 6c 6f 77 65 64 20 62 79 20 61 20 6c 69 73 74 20  lowed by a list 
7770: 6f 66 0a 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72  of.[table-constr
7780: 61 69 6e 74 7c 74 61 62 6c 65 20 63 6f 6e 73 74  aint|table const
7790: 72 61 69 6e 74 73 5d 2e 20 20 45 61 63 68 20 63  raints].  Each c
77a0: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
77b0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
77c0: 0a 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c  .name of the col
77d0: 75 6d 6e 2c 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  umn, optionally 
77e0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20  followed by the 
77f0: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f 66  declared type of
7800: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 0a 74 68 65   the column,.the
7810: 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 70  n one or more op
7820: 74 69 6f 6e 61 6c 20 5b 63 6f 6c 75 6d 6e 2d 63  tional [column-c
7830: 6f 6e 73 74 72 61 69 6e 74 7c 63 6f 6c 75 6d 6e  onstraint|column
7840: 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20 49   constraints]. I
7850: 6e 63 6c 75 64 65 64 20 69 6e 0a 74 68 65 20 64  ncluded in.the d
7860: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 22 63 6f  efinition of "co
7870: 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69 6e 74 73  lumn constraints
7880: 22 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  " for the purpos
7890: 65 73 20 6f 66 20 74 68 65 20 70 72 65 76 69 6f  es of the previo
78a0: 75 73 0a 73 74 61 74 65 6d 65 6e 74 20 61 72 65  us.statement are
78b0: 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 61 6e 64   the COLLATE and
78c0: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 73   DEFAULT clauses
78d0: 2c 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68  , even though th
78e0: 65 73 65 20 61 72 65 20 6e 6f 74 20 72 65 61 6c  ese are not real
78f0: 6c 79 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 69  ly.constraints i
7900: 6e 20 74 68 65 20 73 65 6e 73 65 20 74 68 61 74  n the sense that
7910: 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 72 65 73   they do not res
7920: 74 72 69 63 74 20 74 68 65 20 64 61 74 61 20 74  trict the data t
7930: 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 6d 61  hat the table ma
7940: 79 0a 63 6f 6e 74 61 69 6e 2e 20 54 68 65 20 6f  y.contain. The o
7950: 74 68 65 72 20 63 6f 6e 73 74 72 61 69 6e 74 73  ther constraints
7960: 20 2d 20 4e 4f 54 20 4e 55 4c 4c 2c 20 43 48 45   - NOT NULL, CHE
7970: 43 4b 2c 20 55 4e 49 51 55 45 2c 20 50 52 49 4d  CK, UNIQUE, PRIM
7980: 41 52 59 20 4b 45 59 20 61 6e 64 0a 46 4f 52 45  ARY KEY and.FORE
7990: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
79a0: 6e 74 73 20 2d 20 69 6d 70 6f 73 65 20 72 65 73  nts - impose res
79b0: 74 72 69 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65  trictions on the
79c0: 20 74 61 62 6c 65 73 20 64 61 74 61 2c 20 61 6e   tables data, an
79d0: 64 20 61 72 65 20 61 72 65 0a 64 65 73 63 72 69  d are are.descri
79e0: 62 65 64 20 75 6e 64 65 72 20 5b 63 6f 6e 73 74  bed under [const
79f0: 72 61 69 6e 74 73 7c 53 51 4c 20 44 61 74 61 20  raints|SQL Data 
7a00: 43 6f 6e 73 74 72 61 69 6e 74 73 5d 20 62 65 6c  Constraints] bel
7a10: 6f 77 2e 0a 0a 3c 70 3e 5e 55 6e 6c 69 6b 65 20  ow...<p>^Unlike 
7a20: 6d 6f 73 74 20 53 51 4c 20 64 61 74 61 62 61 73  most SQL databas
7a30: 65 73 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20  es, SQLite does 
7a40: 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65  not restrict the
7a50: 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 74 68   type of data th
7a60: 61 74 0a 6d 61 79 20 62 65 20 69 6e 73 65 72 74  at.may be insert
7a70: 65 64 20 69 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e  ed into a column
7a80: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 6f   based on the co
7a90: 6c 75 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 74  lumns declared t
7aa0: 79 70 65 2e 20 49 6e 73 74 65 61 64 2c 0a 53 51  ype. Instead,.SQ
7ab0: 4c 69 74 65 20 75 73 65 73 20 5b 64 79 6e 61 6d  Lite uses [dynam
7ac0: 69 63 20 74 79 70 69 6e 67 5d 2e 20 5e 54 68 65  ic typing]. ^The
7ad0: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6f   declared type o
7ae0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  f a column is us
7af0: 65 64 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20  ed to.determine 
7b00: 74 68 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f  the [affinity] o
7b10: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 6e 6c  f the column onl
7b20: 79 2e 0a 0a 3c 70 3e 54 68 65 20 44 45 46 41 55  y...<p>The DEFAU
7b30: 4c 54 20 63 6c 61 75 73 65 20 73 70 65 63 69 66  LT clause specif
7b40: 69 65 73 20 61 20 64 65 66 61 75 6c 74 20 76 61  ies a default va
7b50: 6c 75 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74  lue to use for t
7b60: 68 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a  he column if no.
7b70: 76 61 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69  value is explici
7b80: 74 6c 79 20 70 72 6f 76 69 64 65 64 20 62 79 20  tly provided by 
7b90: 74 68 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f  the user when do
7ba0: 69 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e  ing an [INSERT].
7bb0: 20 5e 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f   ^If there.is no
7bc0: 20 65 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c   explicit DEFAUL
7bd0: 54 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  T clause attache
7be0: 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  d to a column de
7bf0: 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74  finition, then t
7c00: 68 65 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75  he .default valu
7c10: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
7c20: 69 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78  is NULL. ^(An ex
7c30: 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63  plicit DEFAULT c
7c40: 6c 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66  lause may specif
7c50: 79 0a 74 68 61 74 20 74 68 65 20 64 65 66 61 75  y.that the defau
7c60: 6c 74 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  lt value is NULL
7c70: 2c 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74  , a string const
7c80: 61 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73  ant, a blob cons
7c90: 74 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e  tant, a.signed-n
7ca0: 75 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f  umber, or any co
7cb0: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
7cc0: 6e 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61  n enclosed in pa
7cd0: 72 65 6e 74 68 65 73 65 73 2e 20 41 6e 20 65 78  rentheses. An ex
7ce0: 70 6c 69 63 69 74 0a 64 65 66 61 75 6c 74 20 76  plicit.default v
7cf0: 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62 65  alue may also be
7d00: 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63   one of the spec
7d10: 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e  ial case-indepen
7d20: 64 65 6e 74 20 6b 65 79 77 6f 72 64 73 0a 43 55  dent keywords.CU
7d30: 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52  RRENT_TIME, CURR
7d40: 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52  ENT_DATE or CURR
7d50: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e 29 5e  ENT_TIMESTAMP.)^
7d60: 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
7d70: 65 73 20 6f 66 20 74 68 65 0a 44 45 46 41 55 4c  es of the.DEFAUL
7d80: 54 20 63 6c 61 75 73 65 2c 20 61 6e 20 65 78 70  T clause, an exp
7d90: 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69  ression is consi
7da0: 64 65 72 65 64 20 63 6f 6e 73 74 61 6e 74 20 70  dered constant p
7db0: 72 6f 76 69 64 65 64 20 74 68 61 74 20 69 74 20  rovided that it 
7dc0: 64 6f 65 73 0a 6e 6f 74 20 63 6f 6e 74 61 69 6e  does.not contain
7dd0: 20 61 6e 79 20 73 75 62 2d 71 75 65 72 69 65 73   any sub-queries
7de0: 20 6f 72 20 73 74 72 69 6e 67 20 63 6f 6e 73 74   or string const
7df0: 61 6e 74 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e  ants enclosed in
7e00: 20 64 6f 75 62 6c 65 20 71 75 6f 74 65 73 2e 0a   double quotes..
7e10: 0a 3c 70 3e 5e 28 45 61 63 68 20 74 69 6d 65 20  .<p>^(Each time 
7e20: 61 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65  a row is inserte
7e30: 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  d into the table
7e40: 20 62 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74   by an INSERT st
7e50: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 0a 64 6f  atement that .do
7e60: 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65  es not provide e
7e70: 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66  xplicit values f
7e80: 6f 72 20 61 6c 6c 20 74 61 62 6c 65 20 63 6f 6c  or all table col
7e90: 75 6d 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20  umns the values 
7ea0: 73 74 6f 72 65 64 20 69 6e 0a 74 68 65 20 6e 65  stored in.the ne
7eb0: 77 20 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d  w row are determ
7ec0: 69 6e 65 64 20 62 79 20 74 68 65 69 72 20 64 65  ined by their de
7ed0: 66 61 75 6c 74 20 76 61 6c 75 65 73 29 5e 2c 20  fault values)^, 
7ee0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 75 6c  as follows:..<ul
7ef0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  >.  <li><p>^If t
7f00: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
7f10: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69   of the column i
7f20: 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 4e 55 4c  s a constant NUL
7f30: 4c 2c 20 74 65 78 74 2c 20 62 6c 6f 62 20 6f 72  L, text, blob or
7f40: 0a 20 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62  .    signed-numb
7f50: 65 72 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  er value, then t
7f60: 68 61 74 20 76 61 6c 75 65 20 69 73 20 75 73 65  hat value is use
7f70: 64 20 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68  d directly in th
7f80: 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c  e new row...  <l
7f90: 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66  i><p>^If the def
7fa0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20  ault value of a 
7fb0: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
7fc0: 72 65 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e  ression in paren
7fd0: 74 68 65 73 65 73 2c 20 74 68 65 6e 0a 20 20 20  theses, then.   
7fe0: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
7ff0: 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
8000: 65 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  e for each row i
8010: 6e 73 65 72 74 65 64 20 61 6e 64 20 74 68 65 20  nserted and the 
8020: 72 65 73 75 6c 74 73 0a 20 20 20 20 75 73 65 64  results.    used
8030: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
8040: 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  ..  <li><p>^If t
8050: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
8060: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
8070: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
8080: 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 0a 20 20  RRENT_DATE or.  
8090: 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54    CURRENT_TIMEST
80a0: 41 4d 50 2c 20 74 68 65 6e 20 74 68 65 20 76 61  AMP, then the va
80b0: 6c 75 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  lue used in the 
80c0: 6e 65 77 20 72 6f 77 20 69 73 20 61 20 74 65 78  new row is a tex
80d0: 74 0a 20 20 20 20 72 65 70 72 65 73 65 6e 74 61  t.    representa
80e0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72 72  tion of the curr
80f0: 65 6e 74 20 55 54 43 20 64 61 74 65 20 61 6e 64  ent UTC date and
8100: 2f 6f 72 20 74 69 6d 65 2e 20 5e 46 6f 72 20 43  /or time. ^For C
8110: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 74 68 65  URRENT_TIME, the
8120: 0a 20 20 20 20 66 6f 72 6d 61 74 20 6f 66 20 74  .    format of t
8130: 68 65 20 76 61 6c 75 65 20 69 73 20 22 48 48 3a  he value is "HH:
8140: 4d 4d 3a 53 53 22 2e 20 5e 46 6f 72 20 43 55 52  MM:SS". ^For CUR
8150: 52 45 4e 54 5f 44 41 54 45 2c 20 22 59 59 59 59  RENT_DATE, "YYYY
8160: 2d 4d 4d 2d 44 44 22 2e 20 5e 54 68 65 0a 20 20  -MM-DD". ^The.  
8170: 20 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52    format for CUR
8180: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69  RENT_TIMESTAMP i
8190: 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  s "YYYY-MM-DD HH
81a0: 3a 4d 4d 3a 53 53 22 2e 0a 3c 2f 75 6c 3e 0a 0a  :MM:SS"..</ul>..
81b0: 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  <p>^The COLLATE 
81c0: 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
81d0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 5b   the name of a [
81e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
81f0: 63 65 5d 20 74 6f 20 75 73 65 20 61 73 0a 74 68  ce] to use as.th
8200: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
8210: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ion sequence for
8220: 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 5e 49 66   the column. ^If
8230: 20 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75   no COLLATE clau
8240: 73 65 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c  se is.specified,
8250: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   the default col
8260: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
8270: 69 73 20 5b 42 49 4e 41 52 59 5d 2e 0a 0a 3c 70  is [BINARY]...<p
8280: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
8290: 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62  columns in a tab
82a0: 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79  le is limited by
82b0: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58   the [SQLITE_MAX
82c0: 5f 43 4f 4c 55 4d 4e 5d 0a 63 6f 6d 70 69 6c 65  _COLUMN].compile
82d0: 2d 74 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e  -time parameter.
82e0: 20 5e 41 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f   ^A single row o
82f0: 66 20 61 20 74 61 62 6c 65 20 63 61 6e 6e 6f 74  f a table cannot
8300: 20 73 74 6f 72 65 20 6d 6f 72 65 20 74 68 61 6e   store more than
8310: 0a 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  .[SQLITE_MAX_LEN
8320: 47 54 48 5d 20 62 79 74 65 73 20 6f 66 20 64 61  GTH] bytes of da
8330: 74 61 2e 20 5e 42 6f 74 68 20 6f 66 20 74 68 65  ta. ^Both of the
8340: 73 65 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65  se limits can be
8350: 20 6c 6f 77 65 72 65 64 20 61 74 0a 72 75 6e 74   lowered at.runt
8360: 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73  ime using the [s
8370: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20  qlite3_limit()] 
8380: 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
8390: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
83a0: 61 67 6d 65 6e 74 20 7b 63 6f 6e 73 74 72 61 69  agment {constrai
83b0: 6e 74 73 7d 20 7b 63 6f 6e 73 74 72 61 69 6e 74  nts} {constraint
83c0: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 51 4c  s}</tcl>.<h3>SQL
83d0: 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e 74   Data Constraint
83e0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68  s</h3>..<p>^Each
83f0: 20 74 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65   table in SQLite
8400: 20 6d 61 79 20 68 61 76 65 20 61 74 20 6d 6f 73   may have at mos
8410: 74 20 6f 6e 65 20 3c 62 3e 50 52 49 4d 41 52 59  t one <b>PRIMARY
8420: 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49 66 20 74 68   KEY</b>. ^If th
8430: 65 0a 20 20 6b 65 79 77 6f 72 64 73 20 50 52 49  e.  keywords PRI
8440: 4d 41 52 59 20 4b 45 59 20 61 72 65 20 61 64 64  MARY KEY are add
8450: 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  ed to a column d
8460: 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20  efinition, then 
8470: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a  the primary key.
8480: 20 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20    for the table 
8490: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 61 74  consists of that
84a0: 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
84b0: 5e 4f 72 2c 20 69 66 20 61 20 50 52 49 4d 41 52  ^Or, if a PRIMAR
84c0: 59 20 4b 45 59 20 63 6c 61 75 73 65 20 0a 20 20  Y KEY clause .  
84d0: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
84e0: 61 20 5b 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61  a [table-constra
84f0: 69 6e 74 5d 2c 20 74 68 65 6e 20 74 68 65 20 70  int], then the p
8500: 72 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 74 68  rimary key of th
8510: 65 20 74 61 62 6c 65 0a 20 20 63 6f 6e 73 69 73  e table.  consis
8520: 74 73 20 6f 66 20 74 68 65 20 6c 69 73 74 20 6f  ts of the list o
8530: 66 20 63 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66  f columns specif
8540: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
8550: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  he PRIMARY KEY c
8560: 6c 61 75 73 65 2e 0a 20 20 5e 49 66 20 74 68 65  lause..  ^If the
8570: 72 65 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20  re is more than 
8580: 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  one PRIMARY KEY 
8590: 63 6c 61 75 73 65 20 69 6e 20 61 20 73 69 6e 67  clause in a sing
85a0: 6c 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 0a  le CREATE TABLE.
85b0: 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 74 20    statement, it 
85c0: 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c 70  is an error...<p
85d0: 3e 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20  >If a table has 
85e0: 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20  a single column 
85f0: 70 72 69 6d 61 72 79 20 6b 65 79 2c 20 61 6e 64  primary key, and
8600: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
8610: 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63 6f 6c  pe of that.  col
8620: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
8630: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d  , then the colum
8640: 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61 6e  n is known as an
8650: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
8660: 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 62 65  Y KEY]..  See be
8670: 6c 6f 77 20 66 6f 72 20 61 20 64 65 73 63 72 69  low for a descri
8680: 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65  ption of the spe
8690: 63 69 61 6c 20 70 72 6f 70 65 72 74 69 65 73 20  cial properties 
86a0: 61 6e 64 20 62 65 68 61 76 69 6f 72 73 0a 20 20  and behaviors.  
86b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
86c0: 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an [INTEGER PRIM
86d0: 41 52 59 20 4b 45 59 5d 2e 0a 0a 3c 70 3e 5e 45  ARY KEY]...<p>^E
86e0: 61 63 68 20 72 6f 77 20 69 6e 20 61 20 74 61 62  ach row in a tab
86f0: 6c 65 20 77 69 74 68 20 61 20 70 72 69 6d 61 72  le with a primar
8700: 79 20 6b 65 79 20 6d 75 73 74 20 66 65 61 74 75  y key must featu
8710: 72 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  re a unique comb
8720: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
8730: 75 65 73 20 69 6e 20 69 74 73 20 70 72 69 6d 61  ues in its prima
8740: 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 20  ry key columns. 
8750: 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65  ^For the purpose
8760: 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67  s of determining
8770: 0a 20 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73  .  the uniquenes
8780: 73 20 6f 66 20 70 72 69 6d 61 72 79 20 6b 65 79  s of primary key
8790: 20 76 61 6c 75 65 73 2c 20 4e 55 4c 4c 20 76 61   values, NULL va
87a0: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
87b0: 72 65 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f  red distinct fro
87c0: 6d 0a 20 20 61 6c 6c 20 6f 74 68 65 72 20 76 61  m.  all other va
87d0: 6c 75 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20  lues, including 
87e0: 6f 74 68 65 72 20 4e 55 4c 4c 73 2e 20 5e 49 66  other NULLs. ^If
87f0: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20   an [INSERT] or 
8800: 5b 55 50 44 41 54 45 5d 0a 20 20 73 74 61 74 65  [UPDATE].  state
8810: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
8820: 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c   modify the tabl
8830: 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61  e content so tha
8840: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  t two or more ro
8850: 77 73 0a 20 20 66 65 61 74 75 72 65 20 69 64 65  ws.  feature ide
8860: 6e 74 69 63 61 6c 20 70 72 69 6d 61 72 79 20 6b  ntical primary k
8870: 65 79 20 76 61 6c 75 65 73 2c 20 69 74 20 69 73  ey values, it is
8880: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
8890: 6f 6c 61 74 69 6f 6e 2e 0a 20 20 41 63 63 6f 72  olation..  Accor
88a0: 64 69 6e 67 20 74 6f 20 74 68 65 20 53 51 4c 20  ding to the SQL 
88b0: 73 74 61 6e 64 61 72 64 2c 20 50 52 49 4d 41 52  standard, PRIMAR
88c0: 59 20 4b 45 59 20 73 68 6f 75 6c 64 20 61 6c 77  Y KEY should alw
88d0: 61 79 73 20 69 6d 70 6c 79 20 4e 4f 54 20 4e 55  ays imply NOT NU
88e0: 4c 4c 2e 0a 20 20 55 6e 66 6f 72 74 75 6e 61 74  LL..  Unfortunat
88f0: 65 6c 79 2c 20 64 75 65 20 74 6f 20 61 20 6c 6f  ely, due to a lo
8900: 6e 67 2d 73 74 61 6e 64 69 6e 67 20 63 6f 64 69  ng-standing codi
8910: 6e 67 20 6f 76 65 72 73 69 67 68 74 2c 20 74 68  ng oversight, th
8920: 69 73 20 69 73 20 6e 6f 74 20 74 68 65 0a 20 20  is is not the.  
8930: 63 61 73 65 20 69 6e 20 53 51 4c 69 74 65 2e 20  case in SQLite. 
8940: 5e 55 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c 75  ^Unless the colu
8950: 6d 6e 20 69 73 20 61 6e 20 5b 49 4e 54 45 47 45  mn is an [INTEGE
8960: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 53  R PRIMARY KEY] S
8970: 51 4c 69 74 65 0a 20 20 61 6c 6c 6f 77 73 20 4e  QLite.  allows N
8980: 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 61 20  ULL values in a 
8990: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
89a0: 6d 6e 2e 20 20 57 65 20 63 6f 75 6c 64 20 63 68  mn.  We could ch
89b0: 61 6e 67 65 20 53 51 4c 69 74 65 20 74 6f 0a 20  ange SQLite to. 
89c0: 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65 20   conform to the 
89d0: 73 74 61 6e 64 61 72 64 20 28 61 6e 64 20 77 65  standard (and we
89e0: 20 6d 69 67 68 74 20 64 6f 20 73 6f 20 69 6e 20   might do so in 
89f0: 74 68 65 20 66 75 74 75 72 65 29 2c 20 62 75 74  the future), but
8a00: 20 62 79 20 74 68 65 20 74 69 6d 65 0a 20 20 74   by the time.  t
8a10: 68 65 20 6f 76 65 72 73 69 67 68 74 20 77 61 73  he oversight was
8a20: 20 64 69 73 63 6f 76 65 72 65 64 2c 20 53 51 4c   discovered, SQL
8a30: 69 74 65 20 77 61 73 20 69 6e 20 73 75 63 68 20  ite was in such 
8a40: 77 69 64 65 20 75 73 65 20 74 68 61 74 20 77 65  wide use that we
8a50: 20 66 65 61 72 65 64 0a 20 20 62 72 65 61 6b 69   feared.  breaki
8a60: 6e 67 20 6c 65 67 61 63 79 20 63 6f 64 65 20 69  ng legacy code i
8a70: 66 20 77 65 20 66 69 78 65 64 20 74 68 65 20 70  f we fixed the p
8a80: 72 6f 62 6c 65 6d 2e 20 20 53 6f 20 66 6f 72 20  roblem.  So for 
8a90: 6e 6f 77 20 77 65 20 68 61 76 65 20 63 68 6f 73  now we have chos
8aa0: 65 6e 20 74 6f 0a 20 20 63 6f 6e 74 69 6e 75 65  en to.  continue
8ab0: 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73 20   allowing NULLs 
8ac0: 69 6e 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  in PRIMARY KEY c
8ad0: 6f 6c 75 6d 6e 73 2e 20 20 44 65 76 65 6c 6f 70  olumns.  Develop
8ae0: 65 72 73 20 73 68 6f 75 6c 64 20 62 65 0a 20 20  ers should be.  
8af0: 61 77 61 72 65 2c 20 68 6f 77 65 76 65 72 2c 20  aware, however, 
8b00: 74 68 61 74 20 77 65 20 6d 61 79 20 63 68 61 6e  that we may chan
8b10: 67 65 20 53 51 4c 69 74 65 20 74 6f 20 63 6f 6e  ge SQLite to con
8b20: 66 6f 72 6d 20 74 6f 20 74 68 65 20 53 51 4c 20  form to the SQL 
8b30: 73 74 61 6e 64 61 72 64 20 69 6e 0a 20 20 66 75  standard in.  fu
8b40: 74 75 72 65 20 61 6e 64 20 73 68 6f 75 6c 64 20  ture and should 
8b50: 64 65 73 69 67 6e 20 6e 65 77 20 70 72 6f 67 72  design new progr
8b60: 61 6d 73 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e  ams accordingly.
8b70: 0a 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51 55  ..<p>^A <b>UNIQU
8b80: 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  E</b> constraint
8b90: 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 61   is similar to a
8ba0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e   PRIMARY KEY con
8bb0: 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74 0a  straint, except.
8bc0: 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65 20    that a single 
8bd0: 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 61  table may have a
8be0: 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e 49  ny number of UNI
8bf0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  QUE constraints.
8c00: 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e 49   ^For each.  UNI
8c10: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f  QUE constraint o
8c20: 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61 63  n the table, eac
8c30: 68 20 72 6f 77 20 6d 75 73 74 20 66 65 61 74 75  h row must featu
8c40: 72 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62  re a unique comb
8c50: 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c  ination.  of val
8c60: 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ues in the colum
8c70: 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  ns identified by
8c80: 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73   the UNIQUE cons
8c90: 74 72 61 69 6e 74 2e 20 5e 41 73 20 77 69 74 68  traint. ^As with
8ca0: 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  .  PRIMARY KEY c
8cb0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 66 6f 72 20  onstraints, for 
8cc0: 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
8cd0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
8ce0: 74 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 20  ts NULL values. 
8cf0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
8d00: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c  distinct from al
8d10: 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 28  l other values (
8d20: 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20  including other 
8d30: 4e 55 4c 4c 73 29 2e 0a 20 20 5e 49 66 20 61 6e  NULLs)..  ^If an
8d40: 20 5b 49 4e 53 45 52 54 5d 20 6f 72 20 5b 55 50   [INSERT] or [UP
8d50: 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 20  DATE] statement 
8d60: 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69  attempts to modi
8d70: 66 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  fy the table con
8d80: 74 65 6e 74 20 73 6f 0a 20 20 74 68 61 74 20 74  tent so.  that t
8d90: 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  wo or more rows 
8da0: 66 65 61 74 75 72 65 20 69 64 65 6e 74 69 63 61  feature identica
8db0: 6c 20 76 61 6c 75 65 73 20 69 6e 20 61 20 73 65  l values in a se
8dc0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  t of columns tha
8dd0: 74 0a 20 20 61 72 65 20 73 75 62 6a 65 63 74 20  t.  are subject 
8de0: 74 6f 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  to a UNIQUE cons
8df0: 74 72 61 69 6e 74 2c 20 69 74 20 69 73 20 61 20  traint, it is a 
8e00: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
8e10: 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 5b 49 4e 54 45  tion...<p>^[INTE
8e20: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
8e30: 20 63 6f 6c 75 6d 6e 73 20 61 73 69 64 65 2c 20   columns aside, 
8e40: 62 6f 74 68 20 55 4e 49 51 55 45 20 61 6e 64 20  both UNIQUE and 
8e50: 50 52 49 4d 41 52 59 20 4b 45 59 0a 20 20 63 6f  PRIMARY KEY.  co
8e60: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 69 6d  nstraints are im
8e70: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 72 65  plemented by cre
8e80: 61 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 69  ating an index i
8e90: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
8ea0: 69 6e 20 74 68 65 20 73 61 6d 65 0a 20 20 77 61  in the same.  wa
8eb0: 79 20 61 73 20 61 20 5b 43 52 45 41 54 45 20 49  y as a [CREATE I
8ec0: 4e 44 45 58 7c 22 43 52 45 41 54 45 20 55 4e 49  NDEX|"CREATE UNI
8ed0: 51 55 45 20 49 4e 44 45 58 22 5d 20 73 74 61 74  QUE INDEX"] stat
8ee0: 65 6d 65 6e 74 20 77 6f 75 6c 64 29 2e 20 5e 53  ement would). ^S
8ef0: 75 63 68 20 61 6e 20 0a 20 20 69 6e 64 65 78 20  uch an .  index 
8f00: 69 73 20 75 73 65 64 20 6c 69 6b 65 20 61 6e 79  is used like any
8f10: 20 6f 74 68 65 72 20 69 6e 64 65 78 20 69 6e 20   other index in 
8f20: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
8f30: 5b 6f 70 74 69 6d 69 7a 65 72 7c 6f 70 74 69 6d  [optimizer|optim
8f40: 69 7a 65 0a 20 20 71 75 65 72 69 65 73 5d 2e 20  ize.  queries]. 
8f50: 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 74 68   As a result, th
8f60: 65 72 65 20 6f 66 74 65 6e 20 6e 6f 20 61 64 76  ere often no adv
8f70: 61 6e 74 61 67 65 20 28 62 75 74 20 73 69 67 6e  antage (but sign
8f80: 69 66 69 63 61 6e 74 20 6f 76 65 72 68 65 61 64  ificant overhead
8f90: 29 0a 20 20 69 6e 20 63 72 65 61 74 69 6e 67 20  ).  in creating 
8fa0: 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20 73 65  an index on a se
8fb0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  t of columns tha
8fc0: 74 20 61 72 65 20 61 6c 72 65 61 64 79 20 63 6f  t are already co
8fd0: 6c 6c 65 63 74 69 76 65 6c 79 0a 20 20 73 75 62  llectively.  sub
8fe0: 6a 65 63 74 20 74 6f 20 61 20 55 4e 49 51 55 45  ject to a UNIQUE
8ff0: 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20   or PRIMARY KEY 
9000: 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 3c 74 63  constraint...<tc
9010: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63  l>hd_fragment {c
9020: 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43 4b 7d 20  kconst} {CHECK} 
9030: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
9040: 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72  t} {CHECK constr
9050: 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  aints}</tcl>.<p>
9060: 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c 2f 62 3e  ^(A <b>CHECK</b>
9070: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
9080: 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  be attached to a
9090: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
90a0: 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69 66 69 65  on or.  specifie
90b0: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
90c0: 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61 63  straint. In prac
90d0: 74 69 63 65 20 69 74 20 6d 61 6b 65 73 20 6e 6f  tice it makes no
90e0: 20 64 69 66 66 65 72 65 6e 63 65 2e 29 5e 20 5e   difference.)^ ^
90f0: 28 45 61 63 68 0a 20 20 74 69 6d 65 20 61 20 6e  (Each.  time a n
9100: 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74  ew row is insert
9110: 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
9120: 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67  e or an existing
9130: 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c   row is updated,
9140: 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .  the expressio
9150: 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
9160: 68 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e  h each CHECK con
9170: 73 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75  straint is evalu
9180: 61 74 65 64 20 61 6e 64 0a 20 20 63 61 73 74 20  ated and.  cast 
9190: 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
91a0: 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
91b0: 61 79 20 61 73 20 61 20 5b 43 41 53 54 20 65 78  ay as a [CAST ex
91c0: 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68  pression]. If th
91d0: 65 20 0a 20 20 72 65 73 75 6c 74 20 69 73 20 7a  e .  result is z
91e0: 65 72 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c  ero (integer val
91f0: 75 65 20 30 20 6f 72 20 72 65 61 6c 20 76 61 6c  ue 0 or real val
9200: 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61 20  ue 0.0), then a 
9210: 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 76 69 6f  constraint.  vio
9220: 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63 63 75 72  lation has occur
9230: 72 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 43  red.)^ ^If the C
9240: 48 45 43 4b 20 65 78 70 72 65 73 73 69 6f 6e 20  HECK expression 
9250: 65 76 61 6c 75 61 74 65 73 20 74 6f 20 4e 55 4c  evaluates to NUL
9260: 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f 74 68 65  L, or.  any othe
9270: 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65  r non-zero value
9280: 2c 20 69 74 20 69 73 20 6e 6f 74 20 61 20 63 6f  , it is not a co
9290: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
92a0: 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78 70 72 65  on..  ^The expre
92b0: 73 73 69 6f 6e 20 6f 66 20 61 20 43 48 45 43 4b  ssion of a CHECK
92c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
92d0: 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 73 75  not contain a su
92e0: 62 71 75 65 72 79 2e 0a 0a 3c 70 3e 43 48 45 43  bquery...<p>CHEC
92f0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 68 61  K constraints ha
9300: 76 65 20 62 65 65 6e 20 73 75 70 70 6f 72 74 65  ve been supporte
9310: 64 20 73 69 6e 63 65 20 5b 76 65 72 73 69 6f 6e  d since [version
9320: 20 33 2e 33 2e 30 5d 2e 20 50 72 69 6f 72 20 74   3.3.0]. Prior t
9330: 6f 0a 20 20 76 65 72 73 69 6f 6e 20 33 2e 33 2e  o.  version 3.3.
9340: 30 2c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  0, CHECK constra
9350: 69 6e 74 73 20 77 65 72 65 20 70 61 72 73 65 64  ints were parsed
9360: 20 62 75 74 20 6e 6f 74 20 65 6e 66 6f 72 63 65   but not enforce
9370: 64 2e 0a 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54  d...<p>^A <b>NOT
9380: 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72   NULL</b> constr
9390: 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65  aint may only be
93a0: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63   attached to a c
93b0: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
93c0: 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65  ,.  not specifie
93d0: 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e  d as a table con
93e0: 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75  straint.  Not su
93f0: 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20  rprisingly, ^(a 
9400: 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74  NOT NULL.  const
9410: 72 61 69 6e 74 20 64 69 63 74 61 74 65 73 20 74  raint dictates t
9420: 68 61 74 20 74 68 65 20 61 73 73 6f 63 69 61 74  hat the associat
9430: 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f  ed column may no
9440: 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c  t contain a NULL
9450: 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70   value..  Attemp
9460: 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20  ting to set the 
9470: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
9480: 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74  NULL when insert
9490: 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72  ing a new row or
94a0: 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65  .  updating an e
94b0: 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73  xisting one caus
94c0: 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  es a constraint 
94d0: 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70  violation.)^..<p
94e0: 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63  >Exactly how a c
94f0: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
9500: 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74  ion is dealt wit
9510: 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  h is determined 
9520: 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69  by the.  [confli
9530: 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72  ct clause|constr
9540: 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  aint conflict re
9550: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
9560: 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49  hm]. Each .  PRI
9570: 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45  MARY KEY, UNIQUE
9580: 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43  , NOT NULL and C
9590: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
95a0: 68 61 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f  has a default co
95b0: 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74  nflict.  resolut
95c0: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e  ion algorithm. ^
95d0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49  PRIMARY KEY, UNI
95e0: 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
95f0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79   constraints may
9600: 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79   be.  explicitly
9610: 20 61 73 73 69 67 6e 65 64 20 61 20 64 65 66 61   assigned a defa
9620: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
9630: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
9640: 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20  m by including. 
9650: 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61   a [conflict-cla
9660: 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65  use] in their de
9670: 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20  finitions. ^Or, 
9680: 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  if a constraint 
9690: 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65  definition.  doe
96a0: 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20  s not include a 
96b0: 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65  [conflict-clause
96c0: 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43 48 45  ] or it is a CHE
96d0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74  CK constraint, t
96e0: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e  he default.  con
96f0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
9700: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42   algorithm is AB
9710: 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20  ORT. ^Different 
9720: 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68  constraints with
9730: 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61  in the.  same ta
9740: 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66  ble may have dif
9750: 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63  ferent default c
9760: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
9770: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53  on algorithms. S
9780: 65 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e  ee.  the section
9790: 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46   titled [ON CONF
97a0: 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69  LICT] for additi
97b0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
97c0: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
97d0: 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47  ent rowid {INTEG
97e0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20  ER PRIMARY KEY} 
97f0: 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c  ROWID rowid</tcl
9800: 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64  >.<h3>ROWIDs and
9810: 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49   the INTEGER PRI
9820: 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c  MARY KEY</h3>..<
9830: 70 3e 5e 45 76 65 72 79 20 72 6f 77 20 6f 66 20  p>^Every row of 
9840: 65 76 65 72 79 20 53 51 4c 69 74 65 20 74 61 62  every SQLite tab
9850: 6c 65 20 68 61 73 20 61 20 36 34 2d 62 69 74 20  le has a 64-bit 
9860: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b  signed integer k
9870: 65 79 20 0a 74 68 61 74 20 75 6e 69 71 75 65 6c  ey .that uniquel
9880: 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
9890: 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20   row within its 
98a0: 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 74 65  table. This inte
98b0: 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63  ger is usually.c
98c0: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64  alled the "rowid
98d0: 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61  ". ^The rowid va
98e0: 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65 73  lue can be acces
98f0: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
9900: 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73   the special.cas
9910: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61  e-independent na
9920: 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69  mes "rowid", "oi
9930: 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  d", or "_rowid_"
9940: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63   in place of a c
9950: 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20  olumn name..^If 
9960: 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  a table contains
9970: 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64 20   a user defined 
9980: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f  column named "ro
9990: 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22  wid", "oid" or "
99a0: 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74  _rowid_",.then t
99b0: 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20  hat name always 
99c0: 72 65 66 65 72 73 20 74 68 65 20 65 78 70 6c 69  refers the expli
99d0: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63  citly declared c
99e0: 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74  olumn and cannot
99f0: 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72   be used.to retr
9a00: 69 65 76 65 20 74 68 65 20 69 6e 74 65 67 65 72  ieve the integer
9a10: 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c   rowid value...<
9a20: 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20 65  p>The data for e
9a30: 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c  ach table in SQL
9a40: 69 74 65 20 69 73 20 73 74 6f 72 65 64 20 61 73  ite is stored as
9a50: 20 61 20 42 2d 54 72 65 65 20 73 74 72 75 63 74   a B-Tree struct
9a60: 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  ure containing.a
9a70: 6e 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  n entry for each
9a80: 20 74 61 62 6c 65 20 72 6f 77 2c 20 75 73 69 6e   table row, usin
9a90: 67 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75  g the rowid valu
9aa0: 65 20 61 73 20 74 68 65 20 6b 65 79 2e 20 54 68  e as the key. Th
9ab0: 69 73 20 6d 65 61 6e 73 20 74 68 61 74 0a 72 65  is means that.re
9ac0: 74 72 69 65 76 69 6e 67 20 6f 72 20 73 6f 72 74  trieving or sort
9ad0: 69 6e 67 20 72 65 63 6f 72 64 73 20 62 79 20 72  ing records by r
9ae0: 6f 77 69 64 20 69 73 20 66 61 73 74 2e 20 53 65  owid is fast. Se
9af0: 61 72 63 68 69 6e 67 20 66 6f 72 20 61 20 72 65  arching for a re
9b00: 63 6f 72 64 20 77 69 74 68 20 61 0a 73 70 65 63  cord with a.spec
9b10: 69 66 69 63 20 72 6f 77 69 64 2c 20 6f 72 20 66  ific rowid, or f
9b20: 6f 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 77  or all records w
9b30: 69 74 68 20 72 6f 77 69 64 73 20 77 69 74 68 69  ith rowids withi
9b40: 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 72 61  n a specified ra
9b50: 6e 67 65 20 69 73 0a 61 72 6f 75 6e 64 20 74 77  nge is.around tw
9b60: 69 63 65 20 61 73 20 66 61 73 74 20 61 73 20 61  ice as fast as a
9b70: 20 73 69 6d 69 6c 61 72 20 73 65 61 72 63 68 20   similar search 
9b80: 6d 61 64 65 20 62 79 20 73 70 65 63 69 66 79 69  made by specifyi
9b90: 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 50 52 49  ng any other PRI
9ba0: 4d 41 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64 65  MARY.KEY or inde
9bb0: 78 65 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20  xed value...<p> 
9bc0: 5e 57 69 74 68 20 6f 6e 65 20 65 78 63 65 70 74  ^With one except
9bd0: 69 6f 6e 2c 20 69 66 20 61 20 74 61 62 6c 65 20  ion, if a table 
9be0: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
9bf0: 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  y that consists 
9c00: 6f 66 20 61 20 73 69 6e 67 6c 65 0a 63 6f 6c 75  of a single.colu
9c10: 6d 6e 2c 20 61 6e 64 20 74 68 65 20 64 65 63 6c  mn, and the decl
9c20: 61 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61  ared type of tha
9c30: 74 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54  t column is "INT
9c40: 45 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69 78  EGER" in any mix
9c50: 74 75 72 65 20 6f 66 0a 75 70 70 65 72 20 61 6e  ture of.upper an
9c60: 64 20 6c 6f 77 65 72 20 63 61 73 65 2c 20 74 68  d lower case, th
9c70: 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  en the column be
9c80: 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
9c90: 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 20 53 75  or the rowid. Su
9ca0: 63 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75  ch a.column is u
9cb0: 73 75 61 6c 6c 79 20 72 65 66 65 72 72 65 64 20  sually referred 
9cc0: 74 6f 20 61 73 20 61 6e 20 22 69 6e 74 65 67 65  to as an "intege
9cd0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 22 2e 20  r primary key". 
9ce0: 41 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  A PRIMARY KEY co
9cf0: 6c 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65  lumn.only become
9d00: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
9d10: 6d 61 72 79 20 6b 65 79 20 69 66 20 74 68 65 20  mary key if the 
9d20: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 6e 61  declared type na
9d30: 6d 65 20 69 73 20 65 78 61 63 74 6c 79 0a 22 49  me is exactly."I
9d40: 4e 54 45 47 45 52 22 2e 20 20 5e 4f 74 68 65 72  NTEGER".  ^Other
9d50: 20 69 6e 74 65 67 65 72 20 74 79 70 65 20 6e 61   integer type na
9d60: 6d 65 73 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f  mes like "INT" o
9d70: 72 20 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53  r "BIGINT" or "S
9d80: 48 4f 52 54 20 49 4e 54 45 47 45 52 22 0a 6f 72  HORT INTEGER".or
9d90: 20 22 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47   "UNSIGNED INTEG
9da0: 45 52 22 20 63 61 75 73 65 73 20 74 68 65 20 70  ER" causes the p
9db0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
9dc0: 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  n to behave as a
9dd0: 6e 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65  n ordinary.table
9de0: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74   column with int
9df0: 65 67 65 72 20 5b 61 66 66 69 6e 69 74 79 5d 20  eger [affinity] 
9e00: 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64  and a unique ind
9e10: 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c  ex, not as an al
9e20: 69 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69  ias for.the rowi
9e30: 64 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 63 65  d...<p> The exce
9e40: 70 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20  ption mentioned 
9e50: 61 62 6f 76 65 20 69 73 20 74 68 61 74 20 5e 69  above is that ^i
9e60: 66 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f  f the declaratio
9e70: 6e 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69  n of a column wi
9e80: 74 68 0a 64 65 63 6c 61 72 65 64 20 74 79 70 65  th.declared type
9e90: 20 22 49 4e 54 45 47 45 52 22 20 69 6e 63 6c 75   "INTEGER" inclu
9ea0: 64 65 73 20 61 6e 20 22 50 52 49 4d 41 52 59 20  des an "PRIMARY 
9eb0: 4b 45 59 20 44 45 53 43 22 20 63 6c 61 75 73 65  KEY DESC" clause
9ec0: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65  , it does not.be
9ed0: 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f  come an alias fo
9ee0: 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20  r the rowid and 
9ef0: 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65  is not classifie
9f00: 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20  d as an integer 
9f10: 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69  primary key..Thi
9f20: 73 20 71 75 69 72 6b 20 69 73 20 6e 6f 74 20 62  s quirk is not b
9f30: 79 20 64 65 73 69 67 6e 2e 20 49 74 20 69 73 20  y design. It is 
9f40: 64 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20  due to a bug in 
9f50: 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f  early versions o
9f60: 66 20 53 51 4c 69 74 65 2e 0a 42 75 74 20 66 69  f SQLite..But fi
9f70: 78 69 6e 67 20 74 68 65 20 62 75 67 20 63 6f 75  xing the bug cou
9f80: 6c 64 20 72 65 73 75 6c 74 20 69 6e 20 76 65 72  ld result in ver
9f90: 79 20 73 65 72 69 6f 75 73 20 62 61 63 6b 77 61  y serious backwa
9fa0: 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c  rds incompatibil
9fb0: 69 74 69 65 73 2e 0a 54 68 65 20 53 51 4c 69 74  ities..The SQLit
9fc0: 65 20 64 65 76 65 6c 6f 70 65 72 73 20 66 65 65  e developers fee
9fd0: 6c 20 74 68 61 74 20 67 6f 6f 66 79 20 62 65 68  l that goofy beh
9fe0: 61 76 69 6f 72 20 69 6e 20 61 20 63 6f 72 6e 65  avior in a corne
9ff0: 72 20 63 61 73 65 20 69 73 20 66 61 72 20 62 65  r case is far be
a000: 74 74 65 72 0a 74 68 61 6e 20 61 20 63 6f 6d 70  tter.than a comp
a010: 61 74 69 62 69 6c 69 74 79 20 62 72 65 61 6b 2c  atibility break,
a020: 20 73 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   so the original
a030: 20 62 65 68 61 76 69 6f 72 20 69 73 20 72 65 74   behavior is ret
a040: 61 69 6e 65 64 2e 20 54 68 69 73 20 6d 65 61 6e  ained. This mean
a050: 73 0a 74 68 61 74 20 5e 28 74 68 65 20 66 6f 6c  s.that ^(the fol
a060: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 74 61 62  lowing three tab
a070: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
a080: 61 6c 6c 20 63 61 75 73 65 20 74 68 65 20 63 6f  all cause the co
a090: 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62 65 20 61  lumn "x" to be a
a0a0: 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n.alias for the 
a0b0: 72 6f 77 69 64 20 28 61 6e 20 69 6e 74 65 67 65  rowid (an intege
a0c0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3a 0a  r primary key):.
a0d0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  .<ul>.<li><tt>CR
a0e0: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
a0f0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
a100: 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f  EY ASC, y, z);</
a110: 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41  tt>.<li><tt>CREA
a120: 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
a130: 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
a140: 41 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b  ARY KEY(x ASC));
a150: 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52  </tt>.<li><tt>CR
a160: 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
a170: 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
a180: 49 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43  IMARY KEY(x DESC
a190: 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29 5e  ));</tt>.</ul>)^
a1a0: 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68 65 20 66  ..<p>But ^(the f
a1b0: 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61  ollowing declara
a1c0: 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65  tion does not re
a1d0: 73 75 6c 74 20 69 6e 20 22 78 22 20 62 65 69 6e  sult in "x" bein
a1e0: 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a 74  g an alias for.t
a1f0: 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a 3c  he rowid:.<ul>.<
a200: 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54 41  li><tt>CREATE TA
a210: 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20  BLE t(x INTEGER 
a220: 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43  PRIMARY KEY DESC
a230: 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c 2f  , y, z);</tt>.</
a240: 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69 64  ul>)^..<p>^Rowid
a250: 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 6d   values may be m
a260: 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20 61 6e  odified using an
a270: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
a280: 74 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 77 61  t in the same.wa
a290: 79 20 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63  y as any other c
a2a0: 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c  olumn value can,
a2b0: 20 65 69 74 68 65 72 20 75 73 69 6e 67 20 6f 6e   either using on
a2c0: 65 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69  e of the built-i
a2d0: 6e 20 61 6c 69 61 73 65 73 0a 28 22 72 6f 77 69  n aliases.("rowi
a2e0: 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72  d", "oid" or "_r
a2f0: 6f 77 69 64 5f 22 29 20 6f 72 20 62 79 20 75 73  owid_") or by us
a300: 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72 65  ing an alias cre
a310: 61 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65 67  ated by an integ
a320: 65 72 0a 70 72 69 6d 61 72 79 20 6b 65 79 2e 20  er.primary key. 
a330: 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49  ^Similarly, an I
a340: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
a350: 6d 61 79 20 70 72 6f 76 69 64 65 20 61 20 76 61  may provide a va
a360: 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68  lue to use as th
a370: 65 0a 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68  e.rowid for each
a380: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 2e 20 5e   row inserted. ^
a390: 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20 53  (Unlike normal S
a3a0: 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20 61  QLite columns, a
a3b0: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
a3c0: 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y.key or rowid c
a3d0: 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f 6e 74 61  olumn must conta
a3e0: 69 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  in integer value
a3f0: 73 2e 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  s. Integer prima
a400: 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 0a  ry key or rowid.
a410: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20  columns are not 
a420: 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20 66 6c 6f  able to hold flo
a430: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
a440: 65 73 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c 4f  es, strings, BLO
a450: 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e 0a  Bs, or NULLs.)^.
a460: 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
a470: 45 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65  E statement atte
a480: 6d 70 74 73 20 74 6f 20 73 65 74 20 61 6e 20 69  mpts to set an i
a490: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
a4a0: 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75  ey or rowid colu
a4b0: 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20 6f 72 20  mn.to a NULL or 
a4c0: 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20 74  blob value, or t
a4d0: 6f 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65  o a string or re
a4e0: 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61  al value that ca
a4f0: 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73  nnot be lossless
a500: 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  ly.converted to 
a510: 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 20 22 64  an integer, a "d
a520: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
a530: 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61  " error occurs a
a540: 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  nd the statement
a550: 0a 69 73 20 61 62 6f 72 74 65 64 2e 20 5e 49 66  .is aborted. ^If
a560: 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65   an INSERT state
a570: 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f  ment attempts to
a580: 20 69 6e 73 65 72 74 20 61 20 62 6c 6f 62 20 76   insert a blob v
a590: 61 6c 75 65 2c 20 6f 72 20 61 20 73 74 72 69 6e  alue, or a strin
a5a0: 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  g.or real value 
a5b0: 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
a5c0: 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
a5d0: 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
a5e0: 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74 65 67 65  r into an.intege
a5f0: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  r primary key or
a600: 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61   rowid column, a
a610: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
a620: 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
a630: 73 20 61 6e 64 20 74 68 65 0a 73 74 61 74 65 6d  s and the.statem
a640: 65 6e 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a  ent is aborted..
a650: 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e 53 45 52  .<p>^If an INSER
a660: 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65  T statement atte
a670: 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61  mpts to insert a
a680: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f   NULL value into
a690: 20 61 20 72 6f 77 69 64 20 6f 72 0a 69 6e 74 65   a rowid or.inte
a6a0: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
a6b0: 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73 74  column, the syst
a6c0: 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e  em chooses an in
a6d0: 74 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75  teger value to u
a6e0: 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64 20  se as the.rowid 
a6f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 41  automatically. A
a700: 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72 69   detailed descri
a710: 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20 74 68 69  ption of how thi
a720: 73 20 69 73 20 64 6f 6e 65 20 69 73 20 70 72 6f  s is done is pro
a730: 76 69 64 65 64 0a 3c 61 20 68 72 65 66 3d 22 61  vided.<a href="a
a740: 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65 70  utoinc.html">sep
a750: 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70 3e  arately</a>.</p>
a760: 0a 0a 3c 70 3e 5e 28 54 68 65 20 5b 70 61 72 65  ..<p>^(The [pare
a770: 6e 74 20 6b 65 79 5d 20 6f 66 20 61 20 5b 66 6f  nt key] of a [fo
a780: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
a790: 61 69 6e 74 5d 20 69 73 20 6e 6f 74 20 61 6c 6c  aint] is not all
a7a0: 6f 77 65 64 20 74 6f 0a 75 73 65 20 74 68 65 20  owed to.use the 
a7b0: 72 6f 77 69 64 2e 20 20 54 68 65 20 70 61 72 65  rowid.  The pare
a7c0: 6e 74 20 6b 65 79 20 6d 75 73 74 20 75 73 65 64  nt key must used
a7d0: 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f   named columns o
a7e0: 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c  nly.)^</p>..<tcl
a7f0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
a800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a840: 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45  .Section {CREATE
a850: 20 54 52 49 47 47 45 52 7d 20 63 72 65 61 74 65   TRIGGER} create
a860: 74 72 69 67 67 65 72 20 7b 7b 43 52 45 41 54 45  trigger {{CREATE
a870: 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42 75 62 62   TRIGGER}}..Bubb
a880: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
a890: 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31 0a  -trigger-stmt 1.
a8a0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
a8b0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 73  CREATE TRIGGER s
a8c0: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
a8d0: 20 74 6f 20 61 64 64 20 74 72 69 67 67 65 72 73   to add triggers
a8e0: 20 74 6f 20 74 68 65 20 0a 64 61 74 61 62 61 73   to the .databas
a8f0: 65 20 73 63 68 65 6d 61 2e 20 5e 54 72 69 67 67  e schema. ^Trigg
a900: 65 72 73 20 61 72 65 20 64 61 74 61 62 61 73 65  ers are database
a910: 20 6f 70 65 72 61 74 69 6f 6e 73 20 0a 74 68 61   operations .tha
a920: 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  t are automatica
a930: 6c 6c 79 20 70 65 72 66 6f 72 6d 65 64 20 77 68  lly performed wh
a940: 65 6e 20 61 20 73 70 65 63 69 66 69 65 64 20 64  en a specified d
a950: 61 74 61 62 61 73 65 20 65 76 65 6e 74 0a 6f 63  atabase event.oc
a960: 63 75 72 73 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e  curs.  </p>..<p>
a970: 5e 41 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  ^A trigger may b
a980: 65 20 73 70 65 63 69 66 69 65 64 20 74 6f 20 66  e specified to f
a990: 69 72 65 20 77 68 65 6e 65 76 65 72 20 61 20 5b  ire whenever a [
a9a0: 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54  DELETE], [INSERT
a9b0: 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f  ],.or [UPDATE] o
a9c0: 66 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20 64  f a.particular d
a9d0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 63  atabase table oc
a9e0: 63 75 72 73 2c 20 6f 72 20 77 68 65 6e 65 76 65  curs, or wheneve
a9f0: 72 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 63  r an [UPDATE] oc
aa00: 63 75 72 73 20 6f 6e 0a 6f 6e 20 6f 6e 65 20 6f  curs on.on one o
aa10: 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69 65 64  r more specified
aa20: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 74 61   columns of a ta
aa30: 62 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 74  ble.</p>..<p>^At
aa40: 20 74 68 69 73 20 74 69 6d 65 20 53 51 4c 69 74   this time SQLit
aa50: 65 20 73 75 70 70 6f 72 74 73 20 6f 6e 6c 79 20  e supports only 
aa60: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 74 72 69  FOR EACH ROW tri
aa70: 67 67 65 72 73 2c 20 6e 6f 74 20 46 4f 52 20 45  ggers, not FOR E
aa80: 41 43 48 0a 53 54 41 54 45 4d 45 4e 54 20 74 72  ACH.STATEMENT tr
aa90: 69 67 67 65 72 73 2e 20 5e 48 65 6e 63 65 20 65  iggers. ^Hence e
aaa0: 78 70 6c 69 63 69 74 6c 79 20 73 70 65 63 69 66  xplicitly specif
aab0: 79 69 6e 67 20 46 4f 52 20 45 41 43 48 20 52 4f  ying FOR EACH RO
aac0: 57 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e  W is optional..^
aad0: 46 4f 52 20 45 41 43 48 20 52 4f 57 20 69 6d 70  FOR EACH ROW imp
aae0: 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 53 51  lies that the SQ
aaf0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
ab00: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 74 72  cified in the tr
ab10: 69 67 67 65 72 0a 6d 61 79 20 62 65 20 65 78 65  igger.may be exe
ab20: 63 75 74 65 64 20 28 64 65 70 65 6e 64 69 6e 67  cuted (depending
ab30: 20 6f 6e 20 74 68 65 20 57 48 45 4e 20 63 6c 61   on the WHEN cla
ab40: 75 73 65 29 20 66 6f 72 20 65 61 63 68 20 64 61  use) for each da
ab50: 74 61 62 61 73 65 20 72 6f 77 20 62 65 69 6e 67  tabase row being
ab60: 0a 69 6e 73 65 72 74 65 64 2c 20 75 70 64 61 74  .inserted, updat
ab70: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 62 79  ed or deleted by
ab80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63   the statement c
ab90: 61 75 73 69 6e 67 20 74 68 65 20 74 72 69 67 67  ausing the trigg
aba0: 65 72 20 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  er to fire.</p>.
abb0: 0a 3c 70 3e 5e 28 42 6f 74 68 20 74 68 65 20 57  .<p>^(Both the W
abc0: 48 45 4e 20 63 6c 61 75 73 65 20 61 6e 64 20 74  HEN clause and t
abd0: 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f  he trigger actio
abe0: 6e 73 20 6d 61 79 20 61 63 63 65 73 73 20 65 6c  ns may access el
abf0: 65 6d 65 6e 74 73 20 6f 66 20 0a 74 68 65 20 72  ements of .the r
ac00: 6f 77 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65  ow being inserte
ac10: 64 2c 20 64 65 6c 65 74 65 64 20 6f 72 20 75 70  d, deleted or up
ac20: 64 61 74 65 64 20 75 73 69 6e 67 20 72 65 66 65  dated using refe
ac30: 72 65 6e 63 65 73 20 6f 66 20 74 68 65 20 66 6f  rences of the fo
ac40: 72 6d 20 0a 22 4e 45 57 2e 3c 69 3e 63 6f 6c 75  rm ."NEW.<i>colu
ac50: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 22 20 61 6e 64  mn-name</i>" and
ac60: 20 22 4f 4c 44 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d   "OLD.<i>column-
ac70: 6e 61 6d 65 3c 2f 69 3e 22 2c 20 77 68 65 72 65  name</i>", where
ac80: 0a 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
ac90: 2f 69 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  /i> is the name 
aca0: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  of a column from
acb0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
acc0: 74 68 65 20 74 72 69 67 67 65 72 0a 69 73 20 61  the trigger.is a
acd0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 29  ssociated with.)
ace0: 5e 20 5e 28 4f 4c 44 20 61 6e 64 20 4e 45 57 20  ^ ^(OLD and NEW 
acf0: 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20 6f  references may o
ad00: 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 20 74  nly be used in t
ad10: 72 69 67 67 65 72 73 20 6f 6e 0a 65 76 65 6e 74  riggers on.event
ad20: 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 79  s for which they
ad30: 20 61 72 65 20 72 65 6c 65 76 61 6e 74 2c 20 61   are relevant, a
ad40: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
ad50: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
ad60: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e 0a  cellpadding=10>.
ad70: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
ad80: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
ad90: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
ada0: 3e 49 4e 53 45 52 54 3c 2f 69 3e 3c 2f 74 64 3e  >INSERT</i></td>
adb0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
adc0: 22 3e 4e 45 57 20 72 65 66 65 72 65 6e 63 65 73  ">NEW references
add0: 20 61 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a   are valid</td>.
ade0: 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76  </tr>.<tr>.<td v
adf0: 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
ae00: 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74 68 3d  n="right" width=
ae10: 31 32 30 3e 3c 69 3e 55 50 44 41 54 45 3c 2f 69  120><i>UPDATE</i
ae20: 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ></td>.<td valig
ae30: 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 61 6e 64 20  n="top">NEW and 
ae40: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
ae50: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
ae60: 74 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  tr>.<tr>.<td val
ae70: 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
ae80: 22 72 69 67 68 74 22 20 77 69 64 74 68 3d 31 32  "right" width=12
ae90: 30 3e 3c 69 3e 44 45 4c 45 54 45 3c 2f 69 3e 3c  0><i>DELETE</i><
aea0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
aeb0: 22 74 6f 70 22 3e 4f 4c 44 20 72 65 66 65 72 65  "top">OLD refere
aec0: 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64 3c 2f  nces are valid</
aed0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
aee0: 65 3e 0a 3c 2f 70 3e 29 5e 0a 0a 3c 70 3e 5e 49  e>.</p>)^..<p>^I
aef0: 66 20 61 20 57 48 45 4e 20 63 6c 61 75 73 65 20  f a WHEN clause 
af00: 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74 68 65  is supplied, the
af10: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
af20: 73 70 65 63 69 66 69 65 64 0a 61 72 65 20 6f 6e  specified.are on
af30: 6c 79 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  ly executed for 
af40: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
af50: 68 65 20 57 48 45 4e 0a 63 6c 61 75 73 65 20 69  he WHEN.clause i
af60: 73 20 74 72 75 65 2e 20 5e 49 66 20 6e 6f 20 57  s true. ^If no W
af70: 48 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75  HEN clause is su
af80: 70 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20  pplied, the SQL 
af90: 73 74 61 74 65 6d 65 6e 74 73 0a 61 72 65 20 65  statements.are e
afa0: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
afb0: 72 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  rows.</p>..<p>^T
afc0: 68 65 20 42 45 46 4f 52 45 20 6f 72 20 41 46 54  he BEFORE or AFT
afd0: 45 52 20 6b 65 79 77 6f 72 64 20 64 65 74 65 72  ER keyword deter
afe0: 6d 69 6e 65 73 20 77 68 65 6e 20 74 68 65 20 74  mines when the t
aff0: 72 69 67 67 65 72 20 61 63 74 69 6f 6e 73 0a 77  rigger actions.w
b000: 69 6c 6c 20 62 65 20 65 78 65 63 75 74 65 64 20  ill be executed 
b010: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
b020: 69 6e 73 65 72 74 69 6f 6e 2c 20 6d 6f 64 69 66  insertion, modif
b030: 69 63 61 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76  ication or remov
b040: 61 6c 20 6f 66 20 74 68 65 0a 61 73 73 6f 63 69  al of the.associ
b050: 61 74 65 64 20 72 6f 77 2e 3c 2f 70 3e 0a 0a 3c  ated row.</p>..<
b060: 70 3e 5e 41 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49  p>^An [ON CONFLI
b070: 43 54 5d 20 63 6c 61 75 73 65 20 6d 61 79 20 62  CT] clause may b
b080: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
b090: 61 72 74 20 6f 66 20 61 6e 20 5b 55 50 44 41 54  art of an [UPDAT
b0a0: 45 5d 20 6f 72 20 5b 49 4e 53 45 52 54 5d 0a 61  E] or [INSERT].a
b0b0: 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 74 68 65  ction within the
b0c0: 20 62 6f 64 79 20 6f 66 20 74 68 65 20 74 72 69   body of the tri
b0d0: 67 67 65 72 2e 0a 5e 48 6f 77 65 76 65 72 20 69  gger..^However i
b0e0: 66 20 61 6e 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43  f an [ON CONFLIC
b0f0: 54 5d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  T] clause is spe
b100: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
b110: 66 20 0a 74 68 65 20 73 74 61 74 65 6d 65 6e 74  f .the statement
b120: 20 63 61 75 73 69 6e 67 20 74 68 65 20 74 72 69   causing the tri
b130: 67 67 65 72 20 74 6f 20 66 69 72 65 2c 20 74 68  gger to fire, th
b140: 65 6e 20 63 6f 6e 66 6c 69 63 74 20 68 61 6e 64  en conflict hand
b150: 6c 69 6e 67 0a 70 6f 6c 69 63 79 20 6f 66 20 74  ling.policy of t
b160: 68 65 20 6f 75 74 65 72 20 73 74 61 74 65 6d 65  he outer stateme
b170: 6e 74 20 69 73 20 75 73 65 64 20 69 6e 73 74 65  nt is used inste
b180: 61 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69  ad.</p>..<p>^Tri
b190: 67 67 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61  ggers are automa
b1a0: 74 69 63 61 6c 6c 79 20 5b 44 52 4f 50 20 54 52  tically [DROP TR
b1b0: 49 47 47 45 52 20 7c 20 64 72 6f 70 70 65 64 5d  IGGER | dropped]
b1c0: 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20  .when the table 
b1d0: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 0a 61  that they are .a
b1e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 28  ssociated with (
b1f0: 74 68 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d  the <i>table-nam
b200: 65 3c 2f 69 3e 20 74 61 62 6c 65 29 20 69 73 20  e</i> table) is 
b210: 0a 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 64  .[DROP TABLE | d
b220: 72 6f 70 70 65 64 5d 2e 20 20 5e 48 6f 77 65 76  ropped].  ^Howev
b230: 65 72 20 69 66 20 74 68 65 20 74 72 69 67 67 65  er if the trigge
b240: 72 20 61 63 74 69 6f 6e 73 20 72 65 66 65 72 65  r actions refere
b250: 6e 63 65 0a 6f 74 68 65 72 20 74 61 62 6c 65 73  nce.other tables
b260: 2c 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  , the trigger is
b270: 20 6e 6f 74 20 64 72 6f 70 70 65 64 20 6f 72 20   not dropped or 
b280: 6d 6f 64 69 66 69 65 64 20 69 66 20 74 68 6f 73  modified if thos
b290: 65 20 6f 74 68 65 72 0a 74 61 62 6c 65 73 20 61  e other.tables a
b2a0: 72 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c  re [DROP TABLE |
b2b0: 20 64 72 6f 70 70 65 64 5d 20 6f 72 20 5b 41 4c   dropped] or [AL
b2c0: 54 45 52 20 54 41 42 4c 45 20 7c 20 6d 6f 64 69  TER TABLE | modi
b2d0: 66 69 65 64 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fied].</p>..<p>^
b2e0: 54 72 69 67 67 65 72 73 20 61 72 65 20 72 65 6d  Triggers are rem
b2f0: 6f 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  oved using the [
b300: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 20 73 74  DROP TRIGGER] st
b310: 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  atement.</p>..<h
b320: 33 3e 53 79 6e 74 61 78 20 52 65 73 74 72 69 63  3>Syntax Restric
b330: 74 69 6f 6e 73 20 4f 6e 20 55 50 44 41 54 45 2c  tions On UPDATE,
b340: 20 44 45 4c 45 54 45 2c 20 61 6e 64 20 49 4e 53   DELETE, and INS
b350: 45 52 54 20 53 74 61 74 65 6d 65 6e 74 73 20 57  ERT Statements W
b360: 69 74 68 69 6e 0a 20 20 20 20 54 72 69 67 67 65  ithin.    Trigge
b370: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
b380: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
b390: 54 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54  TE], and [INSERT
b3a0: 5d 0a 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  ].statements wit
b3b0: 68 69 6e 20 74 72 69 67 67 65 72 73 20 64 6f 20  hin triggers do 
b3c0: 6e 6f 74 20 73 75 70 70 6f 72 74 0a 74 68 65 20  not support.the 
b3d0: 66 75 6c 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  full syntax for 
b3e0: 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45 54  [UPDATE], [DELET
b3f0: 45 5d 2c 20 61 6e 64 20 5b 49 4e 53 45 52 54 5d  E], and [INSERT]
b400: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 54 68   statements.  Th
b410: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 72 65 73 74  e following.rest
b420: 72 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 3a 3c  rictions apply:<
b430: 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ul>.<li><p
b440: 3e 0a 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  >.  ^(The name o
b450: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  f the table to b
b460: 65 20 6d 6f 64 69 66 69 65 64 20 69 6e 20 61 6e  e modified in an
b470: 20 5b 55 50 44 41 54 45 5d 2c 20 5b 44 45 4c 45   [UPDATE], [DELE
b480: 54 45 5d 2c 20 6f 72 20 5b 49 4e 53 45 52 54 5d  TE], or [INSERT]
b490: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 6d 75 73  .  statement mus
b4a0: 74 20 62 65 20 61 6e 20 75 6e 71 75 61 6c 69 66  t be an unqualif
b4b0: 69 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20  ied table name. 
b4c0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
b4d0: 20 6f 6e 65 20 6d 75 73 74 0a 20 20 75 73 65 20   one must.  use 
b4e0: 6a 75 73 74 20 22 3c 69 3e 74 61 62 6c 65 6e 61  just "<i>tablena
b4f0: 6d 65 3c 2f 69 3e 22 20 6e 6f 74 20 22 3c 69 3e  me</i>" not "<i>
b500: 64 61 74 61 62 61 73 65 3c 2f 69 3e 3c 62 3e 2e  database</i><b>.
b510: 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 6e 61 6d 65  </b><i>tablename
b520: 3c 2f 69 3e 22 0a 20 20 77 68 65 6e 20 73 70 65  </i>".  when spe
b530: 63 69 66 79 69 6e 67 20 74 68 65 20 74 61 62 6c  cifying the tabl
b540: 65 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  e.)^  ^The table
b550: 20 74 6f 20 62 65 20 6d 6f 64 69 66 69 65 64 20   to be modified 
b560: 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68  must exist in th
b570: 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73  e.  same databas
b580: 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f  e as the table o
b590: 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
b5a0: 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61  the trigger is a
b5b0: 74 74 61 63 68 65 64 2e 0a 20 20 3c 2f 70 3e 3c  ttached..  </p><
b5c0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  /li>..<li><p>.  
b5d0: 5e 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e 54  ^The "INSERT INT
b5e0: 4f 20 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 20 44  O <i>table</i> D
b5f0: 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66  EFAULT VALUES" f
b600: 6f 72 6d 20 6f 66 20 74 68 65 20 5b 49 4e 53 45  orm of the [INSE
b610: 52 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 20 20  RT] statement.  
b620: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
b630: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
b640: 6c 69 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 49 4e  li><p>.  ^The IN
b650: 44 45 58 45 44 20 42 59 20 61 6e 64 20 4e 4f 54  DEXED BY and NOT
b660: 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 73   INDEXED clauses
b670: 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74   are not support
b680: 65 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20  ed for [UPDATE] 
b690: 61 6e 64 0a 20 20 5b 44 45 4c 45 54 45 5d 20 73  and.  [DELETE] s
b6a0: 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 2f 70  tatements..  </p
b6b0: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
b6c0: 20 20 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59    ^(The ORDER BY
b6d0: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
b6e0: 65 73 20 6f 6e 20 5b 55 50 44 41 54 45 5d 20 61  es on [UPDATE] a
b6f0: 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74  nd [DELETE] stat
b700: 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 0a 20  ements are not. 
b710: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 4f 52 44   supported.  ORD
b720: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
b730: 61 72 65 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79  are not normally
b740: 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b   supported for [
b750: 55 50 44 41 54 45 5d 20 6f 72 0a 20 20 5b 44 45  UPDATE] or.  [DE
b760: 4c 45 54 45 5d 20 69 6e 20 61 6e 79 20 63 6f 6e  LETE] in any con
b770: 74 65 78 74 20 62 75 74 20 63 61 6e 20 62 65 20  text but can be 
b780: 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 6f 70 2d  enabled for top-
b790: 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 73  level statements
b7a0: 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51  .  using the [SQ
b7b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
b7c0: 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d  TE_DELETE_LIMIT]
b7d0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
b7e0: 74 69 6f 6e 2e 20 20 48 6f 77 65 76 65 72 2c 0a  tion.  However,.
b7f0: 20 20 74 68 61 74 20 63 6f 6d 70 69 6c 65 2d 74    that compile-t
b800: 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6e 6c 79 20  ime option only 
b810: 61 70 70 6c 69 65 73 20 74 6f 20 74 6f 70 2d 6c  applies to top-l
b820: 65 76 65 6c 20 5b 55 50 44 41 54 45 5d 20 61 6e  evel [UPDATE] an
b830: 64 20 5b 44 45 4c 45 54 45 5d 0a 20 20 73 74 61  d [DELETE].  sta
b840: 74 65 6d 65 6e 74 73 2c 20 6e 6f 74 20 5b 55 50  tements, not [UP
b850: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
b860: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  E] statements wi
b870: 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
b880: 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  .  </p></li>.</u
b890: 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  l>..<tcl>hd_frag
b8a0: 6d 65 6e 74 20 69 6e 73 74 65 61 64 5f 6f 66 5f  ment instead_of_
b8b0: 74 72 69 67 67 65 72 20 7b 49 4e 53 54 45 41 44  trigger {INSTEAD
b8c0: 20 4f 46 7d 20 7b 49 4e 53 54 45 41 44 20 4f 46   OF} {INSTEAD OF
b8d0: 20 74 72 69 67 67 65 72 7d 3c 2f 74 63 6c 3e 0a   trigger}</tcl>.
b8e0: 3c 68 33 3e 49 4e 53 54 45 41 44 20 4f 46 20 74  <h3>INSTEAD OF t
b8f0: 72 69 67 67 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e  rigger</h3>..<p>
b900: 5e 54 72 69 67 67 65 72 73 20 6d 61 79 20 62 65  ^Triggers may be
b910: 20 63 72 65 61 74 65 64 20 6f 6e 20 5b 76 69 65   created on [vie
b920: 77 73 5d 2c 20 61 73 20 77 65 6c 6c 20 61 73 20  ws], as well as 
b930: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c  ordinary tables,
b940: 20 62 79 0a 73 70 65 63 69 66 79 69 6e 67 20 49   by.specifying I
b950: 4e 53 54 45 41 44 20 4f 46 20 69 6e 20 74 68 65  NSTEAD OF in the
b960: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
b970: 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 49 66 20  statement. .^If 
b980: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 4f 4e 20 49  one or more ON I
b990: 4e 53 45 52 54 2c 20 4f 4e 20 44 45 4c 45 54 45  NSERT, ON DELETE
b9a0: 0a 6f 72 20 4f 4e 20 55 50 44 41 54 45 20 74 72  .or ON UPDATE tr
b9b0: 69 67 67 65 72 73 20 61 72 65 20 64 65 66 69 6e  iggers are defin
b9c0: 65 64 20 6f 6e 20 61 20 76 69 65 77 2c 20 74 68  ed on a view, th
b9d0: 65 6e 20 69 74 20 69 73 20 6e 6f 74 20 61 6e 0a  en it is not an.
b9e0: 65 72 72 6f 72 20 74 6f 20 65 78 65 63 75 74 65  error to execute
b9f0: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
ba00: 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  TE or UPDATE sta
ba10: 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65 20 76 69  tement on the vi
ba20: 65 77 2c 20 0a 72 65 73 70 65 63 74 69 76 65 6c  ew, .respectivel
ba30: 79 2e 20 20 5e 49 6e 73 74 65 61 64 2c 0a 65 78  y.  ^Instead,.ex
ba40: 65 63 75 74 69 6e 67 20 61 6e 20 49 4e 53 45 52  ecuting an INSER
ba50: 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  T, DELETE or UPD
ba60: 41 54 45 20 6f 6e 20 74 68 65 20 76 69 65 77 20  ATE on the view 
ba70: 63 61 75 73 65 73 20 74 68 65 20 61 73 73 6f 63  causes the assoc
ba80: 69 61 74 65 64 0a 74 72 69 67 67 65 72 73 20 74  iated.triggers t
ba90: 6f 20 66 69 72 65 2e 20 5e 54 68 65 20 72 65 61  o fire. ^The rea
baa0: 6c 20 74 61 62 6c 65 73 20 75 6e 64 65 72 6c 79  l tables underly
bab0: 69 6e 67 20 74 68 65 20 76 69 65 77 20 61 72 65  ing the view are
bac0: 20 6e 6f 74 20 6d 6f 64 69 66 69 65 64 0a 28 65   not modified.(e
bad0: 78 63 65 70 74 20 70 6f 73 73 69 62 6c 79 20 65  xcept possibly e
bae0: 78 70 6c 69 63 69 74 6c 79 2c 20 62 79 20 61 20  xplicitly, by a 
baf0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 29  trigger program)
bb00: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  .</p>..<p>^Note 
bb10: 74 68 61 74 20 74 68 65 20 5b 73 71 6c 69 74 65  that the [sqlite
bb20: 33 5f 63 68 61 6e 67 65 73 28 29 5d 20 61 6e 64  3_changes()] and
bb30: 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
bb40: 63 68 61 6e 67 65 73 28 29 5d 20 69 6e 74 65 72  changes()] inter
bb50: 66 61 63 65 73 0a 64 6f 20 6e 6f 74 20 63 6f 75  faces.do not cou
bb60: 6e 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72  nt INSTEAD OF tr
bb70: 69 67 67 65 72 20 66 69 72 69 6e 67 73 2c 20 62  igger firings, b
bb80: 75 74 20 74 68 65 0a 5b 63 6f 75 6e 74 5f 63 68  ut the.[count_ch
bb90: 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 20 64 6f  anges pragma] do
bba0: 65 73 20 63 6f 75 6e 74 20 49 4e 53 54 45 41 44  es count INSTEAD
bbb0: 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72 69   OF trigger firi
bbc0: 6e 67 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61  ng.</p>..<h3>Exa
bbd0: 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  mples</h3>..<p>^
bbe0: 28 41 73 73 75 6d 69 6e 67 20 74 68 61 74 20 63  (Assuming that c
bbf0: 75 73 74 6f 6d 65 72 20 72 65 63 6f 72 64 73 20  ustomer records 
bc00: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
bc10: 65 20 22 63 75 73 74 6f 6d 65 72 73 22 20 74 61  e "customers" ta
bc20: 62 6c 65 2c 20 61 6e 64 0a 74 68 61 74 20 6f 72  ble, and.that or
bc30: 64 65 72 20 72 65 63 6f 72 64 73 20 61 72 65 20  der records are 
bc40: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 22 6f  stored in the "o
bc50: 72 64 65 72 73 22 20 74 61 62 6c 65 2c 20 74 68  rders" table, th
bc60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 72 69 67  e following trig
bc70: 67 65 72 0a 65 6e 73 75 72 65 73 20 74 68 61 74  ger.ensures that
bc80: 20 61 6c 6c 20 61 73 73 6f 63 69 61 74 65 64 20   all associated 
bc90: 6f 72 64 65 72 73 20 61 72 65 20 72 65 64 69 72  orders are redir
bca0: 65 63 74 65 64 20 77 68 65 6e 20 61 20 63 75 73  ected when a cus
bcb0: 74 6f 6d 65 72 20 63 68 61 6e 67 65 73 0a 68 69  tomer changes.hi
bcc0: 73 20 6f 72 20 68 65 72 20 61 64 64 72 65 73 73  s or her address
bcd0: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
bce0: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 52 49  ple {.CREATE TRI
bcf0: 47 47 45 52 20 75 70 64 61 74 65 5f 63 75 73 74  GGER update_cust
bd00: 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 55 50 44  omer_address UPD
bd10: 41 54 45 20 4f 46 20 61 64 64 72 65 73 73 20 4f  ATE OF address O
bd20: 4e 20 63 75 73 74 6f 6d 65 72 73 20 0a 20 20 42  N customers .  B
bd30: 45 47 49 4e 0a 20 20 20 20 55 50 44 41 54 45 20  EGIN.    UPDATE 
bd40: 6f 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65  orders SET addre
bd50: 73 73 20 3d 20 6e 65 77 2e 61 64 64 72 65 73 73  ss = new.address
bd60: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
bd70: 6e 61 6d 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b  name = old.name;
bd80: 0a 20 20 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  .  END;.}</tcl>.
bd90: 0a 3c 70 3e 57 69 74 68 20 74 68 69 73 20 74 72  .<p>With this tr
bda0: 69 67 67 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c  igger installed,
bdb0: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73   executing the s
bdc0: 74 61 74 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c  tatement:</p>..<
bdd0: 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50  tcl>Example {.UP
bde0: 44 41 54 45 20 63 75 73 74 6f 6d 65 72 73 20 53  DATE customers S
bdf0: 45 54 20 61 64 64 72 65 73 73 20 3d 20 27 31 20  ET address = '1 
be00: 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52 45 20  Main St.' WHERE 
be10: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
be20: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  es';.}</tcl>..<p
be30: 3e 63 61 75 73 65 73 20 74 68 65 20 66 6f 6c 6c  >causes the foll
be40: 6f 77 69 6e 67 20 74 6f 20 62 65 20 61 75 74 6f  owing to be auto
be50: 6d 61 74 69 63 61 6c 6c 79 20 65 78 65 63 75 74  matically execut
be60: 65 64 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  ed:</p>..<tcl>Ex
be70: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f  ample {.UPDATE o
be80: 72 64 65 72 73 20 53 45 54 20 61 64 64 72 65 73  rders SET addres
be90: 73 20 3d 20 27 31 20 4d 61 69 6e 20 53 74 2e 27  s = '1 Main St.'
bea0: 20 57 48 45 52 45 20 63 75 73 74 6f 6d 65 72 5f   WHERE customer_
beb0: 6e 61 6d 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e  name = 'Jack Jon
bec0: 65 73 27 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a  es';.}</tcl>)^..
bed0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
bee0: 20 75 6e 64 65 66 5f 62 65 66 6f 72 65 20 7b 75   undef_before {u
bef0: 6e 64 65 66 69 6e 65 64 20 42 45 46 4f 52 45 20  ndefined BEFORE 
bf00: 74 72 69 67 67 65 72 20 62 65 68 61 76 69 6f 72  trigger behavior
bf10: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 61 75 74  }</tcl>.<h3>Caut
bf20: 69 6f 6e 73 20 4f 6e 20 54 68 65 20 55 73 65 20  ions On The Use 
bf30: 4f 66 20 42 45 46 4f 52 45 20 74 72 69 67 67 65  Of BEFORE trigge
bf40: 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49 66 20 61  rs</h3>..<p>If a
bf50: 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 6f   BEFORE UPDATE o
bf60: 72 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20  r BEFORE DELETE 
bf70: 74 72 69 67 67 65 72 20 6d 6f 64 69 66 69 65 73  trigger modifies
bf80: 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72 6f   or deletes a ro
bf90: 77 0a 74 68 61 74 20 77 61 73 20 74 6f 20 68 61  w.that was to ha
bfa0: 76 65 20 62 65 65 6e 20 75 70 64 61 74 65 64 20  ve been updated 
bfb0: 6f 72 20 64 65 6c 65 74 65 64 2c 20 74 68 65 6e  or deleted, then
bfc0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
bfd0: 68 65 20 73 75 62 73 65 71 75 65 6e 74 0a 75 70  he subsequent.up
bfe0: 64 61 74 65 20 6f 72 20 64 65 6c 65 74 65 20 6f  date or delete o
bff0: 70 65 72 61 74 69 6f 6e 20 69 73 20 75 6e 64 65  peration is unde
c000: 66 69 6e 65 64 2e 20 20 46 75 72 74 68 65 72 6d  fined.  Furtherm
c010: 6f 72 65 2c 20 69 66 20 61 20 42 45 46 4f 52 45  ore, if a BEFORE
c020: 20 74 72 69 67 67 65 72 0a 6d 6f 64 69 66 69 65   trigger.modifie
c030: 73 20 6f 72 20 64 65 6c 65 74 65 73 20 61 20 72  s or deletes a r
c040: 6f 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20 75  ow, then it is u
c050: 6e 64 65 66 69 6e 65 64 20 77 68 65 74 68 65 72  ndefined whether
c060: 20 6f 72 20 6e 6f 74 20 41 46 54 45 52 20 74 72   or not AFTER tr
c070: 69 67 67 65 72 73 0a 74 68 61 74 20 77 6f 75 6c  iggers.that woul
c080: 64 20 68 61 76 65 20 6f 74 68 65 72 77 69 73 65  d have otherwise
c090: 20 72 75 6e 20 6f 6e 20 74 68 6f 73 65 20 72 6f   run on those ro
c0a0: 77 73 20 77 69 6c 6c 20 69 6e 20 66 61 63 74 20  ws will in fact 
c0b0: 72 75 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  run..</p>..<p>Th
c0c0: 65 20 76 61 6c 75 65 20 6f 66 20 4e 45 57 2e 72  e value of NEW.r
c0d0: 6f 77 69 64 20 69 73 20 75 6e 64 65 66 69 6e 65  owid is undefine
c0e0: 64 20 69 6e 20 61 20 42 45 46 4f 52 45 20 49 4e  d in a BEFORE IN
c0f0: 53 45 52 54 20 74 72 69 67 67 65 72 20 69 6e 20  SERT trigger in 
c100: 77 68 69 63 68 0a 74 68 65 20 72 6f 77 69 64 20  which.the rowid 
c110: 69 73 20 6e 6f 74 20 65 78 70 6c 69 63 69 74 6c  is not explicitl
c120: 79 20 73 65 74 20 74 6f 20 61 6e 20 69 6e 74 65  y set to an inte
c130: 67 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63  ger.</p>..<p>Bec
c140: 61 75 73 65 20 6f 66 20 74 68 65 20 62 65 68 61  ause of the beha
c150: 76 69 6f 72 73 20 64 65 73 63 72 69 62 65 64 20  viors described 
c160: 61 62 6f 76 65 2c 20 70 72 6f 67 72 61 6d 6d 65  above, programme
c170: 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65  rs are encourage
c180: 64 20 74 6f 0a 70 72 65 66 65 72 20 41 46 54 45  d to.prefer AFTE
c190: 52 20 74 72 69 67 67 65 72 73 20 6f 76 65 72 20  R triggers over 
c1a0: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 73 2e  BEFORE triggers.
c1b0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 68 65 20 52 41  </p>..<h3>The RA
c1c0: 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 3c 2f  ISE() function</
c1d0: 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 73 70 65 63  h3>..<p>^(A spec
c1e0: 69 61 6c 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ial SQL function
c1f0: 20 52 41 49 53 45 28 29 20 6d 61 79 20 62 65 20   RAISE() may be 
c200: 75 73 65 64 20 77 69 74 68 69 6e 20 61 20 74 72  used within a tr
c210: 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2c 29 5e  igger-program,)^
c220: 0a 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77  .with the follow
c230: 69 6e 67 20 73 79 6e 74 61 78 3c 2f 70 3e 20 0a  ing syntax</p> .
c240: 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
c250: 72 61 6d 20 72 61 69 73 65 2d 66 75 6e 63 74 69  ram raise-functi
c260: 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 57 68  on</tcl>..<p>^Wh
c270: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 69  en one of the fi
c280: 72 73 74 20 74 68 72 65 65 20 66 6f 72 6d 73 20  rst three forms 
c290: 69 73 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67  is called during
c2a0: 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
c2b0: 0a 65 78 65 63 75 74 69 6f 6e 2c 20 74 68 65 20  .execution, the 
c2c0: 73 70 65 63 69 66 69 65 64 20 5b 4f 4e 20 43 4f  specified [ON CO
c2d0: 4e 46 4c 49 43 54 5d 20 70 72 6f 63 65 73 73 69  NFLICT] processi
c2e0: 6e 67 20 69 73 20 70 65 72 66 6f 72 6d 65 64 0a  ng is performed.
c2f0: 28 65 69 74 68 65 72 20 41 42 4f 52 54 2c 20 46  (either ABORT, F
c300: 41 49 4c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29  AIL or ROLLBACK)
c310: 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
c320: 20 71 75 65 72 79 20 74 65 72 6d 69 6e 61 74 65   query terminate
c330: 73 2e 0a 41 6e 20 65 72 72 6f 72 20 63 6f 64 65  s..An error code
c340: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 53   of [SQLITE_CONS
c350: 54 52 41 49 4e 54 5d 20 69 73 20 72 65 74 75 72  TRAINT] is retur
c360: 6e 65 64 20 74 6f 20 74 68 65 20 61 70 70 6c 69  ned to the appli
c370: 63 61 74 69 6f 6e 2c 0a 61 6c 6f 6e 67 20 77 69  cation,.along wi
c380: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64  th the specified
c390: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 3c   error message.<
c3a0: 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 52 41  /p>..<p>^When RA
c3b0: 49 53 45 28 49 47 4e 4f 52 45 29 20 69 73 20 63  ISE(IGNORE) is c
c3c0: 61 6c 6c 65 64 2c 20 74 68 65 20 72 65 6d 61 69  alled, the remai
c3d0: 6e 64 65 72 20 6f 66 20 74 68 65 20 63 75 72 72  nder of the curr
c3e0: 65 6e 74 20 74 72 69 67 67 65 72 20 70 72 6f 67  ent trigger prog
c3f0: 72 61 6d 2c 0a 74 68 65 20 73 74 61 74 65 6d 65  ram,.the stateme
c400: 6e 74 20 74 68 61 74 20 63 61 75 73 65 64 20 74  nt that caused t
c410: 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
c420: 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  am to execute an
c430: 64 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  d any subsequent
c440: 0a 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d  .trigger program
c450: 73 20 74 68 61 74 20 77 6f 75 6c 64 20 6f 66 20  s that would of 
c460: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 61 72  been executed ar
c470: 65 20 61 62 61 6e 64 6f 6e 65 64 2e 20 5e 4e 6f  e abandoned. ^No
c480: 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e 67 65   database.change
c490: 73 20 61 72 65 20 72 6f 6c 6c 65 64 20 62 61 63  s are rolled bac
c4a0: 6b 2e 20 20 5e 49 66 20 74 68 65 20 73 74 61 74  k.  ^If the stat
c4b0: 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75 73 65  ement that cause
c4c0: 64 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  d the trigger pr
c4d0: 6f 67 72 61 6d 0a 74 6f 20 65 78 65 63 75 74 65  ogram.to execute
c4e0: 20 69 73 20 69 74 73 65 6c 66 20 70 61 72 74 20   is itself part 
c4f0: 6f 66 20 61 20 74 72 69 67 67 65 72 20 70 72 6f  of a trigger pro
c500: 67 72 61 6d 2c 20 74 68 65 6e 20 74 68 61 74 20  gram, then that 
c510: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a  trigger program.
c520: 72 65 73 75 6d 65 73 20 65 78 65 63 75 74 69 6f  resumes executio
c530: 6e 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  n at the beginni
c540: 6e 67 20 6f 66 20 74 68 65 20 6e 65 78 74 20 73  ng of the next s
c550: 74 65 70 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c  tep..</p>...<tcl
c560: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
c570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c5a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c5b0: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
c5c0: 45 20 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76  E VIEW} {createv
c5d0: 69 65 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49  iew} {{CREATE VI
c5e0: 45 57 7d 20 76 69 65 77 20 2a 76 69 65 77 73 7d  EW} view *views}
c5f0: 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  ..BubbleDiagram 
c600: 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74  create-view-stmt
c610: 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54   1.</tcl>..<p>^T
c620: 68 65 20 43 52 45 41 54 45 20 56 49 45 57 20 63  he CREATE VIEW c
c630: 6f 6d 6d 61 6e 64 20 61 73 73 69 67 6e 73 20 61  ommand assigns a
c640: 20 6e 61 6d 65 20 74 6f 20 61 20 70 72 65 2d 70   name to a pre-p
c650: 61 63 6b 61 67 65 64 20 0a 5b 53 45 4c 45 43 54  ackaged .[SELECT
c660: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 5e 4f  ] statement. .^O
c670: 6e 63 65 20 74 68 65 20 76 69 65 77 20 69 73 20  nce the view is 
c680: 63 72 65 61 74 65 64 2c 20 69 74 20 63 61 6e 20  created, it can 
c690: 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 46  be used in the F
c6a0: 52 4f 4d 20 63 6c 61 75 73 65 0a 6f 66 20 61 6e  ROM clause.of an
c6b0: 6f 74 68 65 72 20 5b 53 45 4c 45 43 54 5d 20 69  other [SELECT] i
c6c0: 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
c6d0: 6c 65 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le name..</p>..<
c6e0: 70 3e 5e 49 66 20 74 68 65 20 22 54 45 4d 50 22  p>^If the "TEMP"
c6f0: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
c700: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 20 69  keyword occurs i
c710: 6e 20 62 65 74 77 65 65 6e 20 22 43 52 45 41 54  n between "CREAT
c720: 45 22 0a 61 6e 64 20 22 56 49 45 57 22 20 74 68  E".and "VIEW" th
c730: 65 6e 20 74 68 65 20 76 69 65 77 20 74 68 61 74  en the view that
c740: 20 69 73 20 63 72 65 61 74 65 64 20 69 73 20 6f   is created is o
c750: 6e 6c 79 20 76 69 73 69 62 6c 65 20 74 6f 20 74  nly visible to t
c760: 68 65 0a 70 72 6f 63 65 73 73 20 74 68 61 74 20  he.process that 
c770: 6f 70 65 6e 65 64 20 74 68 65 20 64 61 74 61 62  opened the datab
c780: 61 73 65 20 61 6e 64 20 69 73 20 61 75 74 6f 6d  ase and is autom
c790: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
c7a0: 20 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61   when.the databa
c7b0: 73 65 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 70  se is closed.</p
c7c0: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 26 6c 74  >..<p> ^If a &lt
c7d0: 3b 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 26 67  ;database-name&g
c7e0: 74 3b 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  t; is specified,
c7f0: 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 69   then the view i
c800: 73 20 63 72 65 61 74 65 64 20 69 6e 20 0a 74 68  s created in .th
c810: 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73 65  e named database
c820: 2e 20 5e 49 74 20 69 73 20 61 6e 20 65 72 72 6f  . ^It is an erro
c830: 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74  r to specify bot
c840: 68 20 61 20 26 6c 74 3b 64 61 74 61 62 61 73 65  h a &lt;database
c850: 2d 6e 61 6d 65 26 67 74 3b 0a 61 6e 64 20 74 68  -name&gt;.and th
c860: 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 6f  e TEMP keyword o
c870: 6e 20 61 20 56 49 45 57 2c 20 75 6e 6c 65 73 73  n a VIEW, unless
c880: 20 74 68 65 20 26 6c 74 3b 64 61 74 61 62 61 73   the &lt;databas
c890: 65 2d 6e 61 6d 65 26 67 74 3b 20 69 73 20 22 74  e-name&gt; is "t
c8a0: 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 64 61 74  emp"..^If no dat
c8b0: 61 62 61 73 65 20 6e 61 6d 65 20 69 73 20 73 70  abase name is sp
c8c0: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65  ecified, and the
c8d0: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
c8e0: 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68   not present,.th
c8f0: 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65  e VIEW is create
c900: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
c910: 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
c920: 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c  ^You cannot [DEL
c930: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
c940: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69  or [UPDATE] a vi
c950: 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ew.  ^Views are 
c960: 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51  read-only .in SQ
c970: 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c  Lite.  ^However,
c980: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
c990: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
c9a0: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
c9b0: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
c9c0: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
c9d0: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e  e same thing.  ^
c9e0: 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65  Views are remove
c9f0: 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f  d .with the [DRO
ca00: 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e  P VIEW] command.
ca10: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
ca20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca60: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
ca70: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55  on {CREATE VIRTU
ca80: 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  AL TABLE} {creat
ca90: 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20  evtab} {{CREATE 
caa0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a  VIRTUAL TABLE}}.
cab0: 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
cac0: 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
cad0: 62 6c 65 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ble-stmt 1.</tcl
cae0: 3e 0a 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c  >..<p>A [virtual
caf0: 20 74 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e   table] is an in
cb00: 74 65 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78  terface to an ex
cb10: 74 65 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f  ternal storage o
cb20: 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e  r computation.en
cb30: 67 69 6e 65 20 74 68 61 74 20 61 70 70 65 61 72  gine that appear
cb40: 73 20 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20  s to be a table 
cb50: 62 75 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74  but does not act
cb60: 75 61 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f  ually store info
cb70: 72 6d 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64  rmation.in the d
cb80: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
cb90: 3e 0a 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c  >..<p>In general
cba0: 2c 20 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79  , you can do any
cbb0: 74 68 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69  thing with a [vi
cbc0: 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61  rtual table] tha
cbd0: 74 20 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69  t can be done.wi
cbe0: 74 68 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  th an ordinary t
cbf0: 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61  able, except tha
cc00: 74 20 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72  t ^you cannot cr
cc10: 65 61 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20  eate indices or 
cc20: 74 72 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69  triggers on a.vi
cc30: 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53  rtual table.  ^S
cc40: 6f 6d 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ome virtual tabl
cc50: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
cc60: 73 20 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61  s might impose a
cc70: 64 64 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69  dditional.restri
cc80: 63 74 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61  ctions.  For exa
cc90: 6d 70 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75  mple, many virtu
cca0: 61 6c 20 74 61 62 6c 65 73 20 61 72 65 20 72 65  al tables are re
ccb0: 61 64 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70  ad-only.</p>..<p
ccc0: 3e 54 68 65 20 26 6c 74 3b 6d 6f 64 75 6c 65 2d  >The &lt;module-
ccd0: 6e 61 6d 65 26 67 74 3b 20 69 73 20 74 68 65 20  name&gt; is the 
cce0: 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63  name of an objec
ccf0: 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  t that implement
cd00: 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s.the virtual ta
cd10: 62 6c 65 2e 20 20 5e 54 68 65 20 26 6c 74 3b 6d  ble.  ^The &lt;m
cd20: 6f 64 75 6c 65 2d 6e 61 6d 65 26 67 74 3b 20 6d  odule-name&gt; m
cd30: 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
cd40: 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
cd50: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
cd60: 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
cd70: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
cd80: 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
cd90: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
cda0: 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
cdb0: 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
cdc0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
cdd0: 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
cde0: 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
cdf0: 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
ce00: 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
ce10: 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
ce20: 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
ce30: 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
ce40: 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
ce50: 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
ce60: 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
ce70: 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
ce80: 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
ce90: 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
cea0: 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
ceb0: 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
cec0: 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  [column definiti
ced0: 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74  ons] in a tradit
cee0: 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41  ional.[CREATE TA
cef0: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
cf00: 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73   .^SQLite passes
cf10: 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75   the module argu
cf20: 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74  ments directly.t
cf30: 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20  o the [xCreate] 
cf40: 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d  and [xConnect] m
cf50: 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f  ethods of the mo
cf60: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
cf70: 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20  ion.without any 
cf80: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20  interpretation. 
cf90: 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f   It is the respo
cfa0: 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65  nsibility.of the
cfb0: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
cfc0: 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20  tation to parse 
cfd0: 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69 74  and interpret it
cfe0: 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e  s own arguments.
cff0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74  </p>..<p>^A virt
d000: 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73  ual table is des
d010: 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65  troyed using the
d020: 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20   ordinary.[DROP 
d030: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
d040: 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44  .  There is no.D
d050: 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ROP VIRTUAL TABL
d060: 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  E statement.</p>
d070: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
d080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d0b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d0c0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44  ######.Section D
d0d0: 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45  ELETE delete {DE
d0e0: 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a  LETE *DELETEs}..
d0f0: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
d100: 6c 65 74 65 2d 73 74 6d 74 20 31 0a 42 75 62 62  lete-stmt 1.Bubb
d110: 6c 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66  leDiagram qualif
d120: 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c  ied-table-name.<
d130: 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45  /tcl>..<p>The DE
d140: 4c 45 54 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d  LETE command rem
d150: 6f 76 65 73 20 72 65 63 6f 72 64 73 20 66 72 6f  oves records fro
d160: 6d 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e  m the table iden
d170: 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 20 20  tified by the.  
d180: 20 3c 69 3e 71 75 61 6c 69 66 69 65 64 2d 74 61   <i>qualified-ta
d190: 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 2e 20 0a 0a  ble-name</i>. ..
d1a0: 3c 70 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45  <p>^If the WHERE
d1b0: 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70   clause is not p
d1c0: 72 65 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f  resent, all reco
d1d0: 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
d1e0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20   are deleted..  
d1f0: 20 5e 49 66 20 61 20 57 48 45 52 45 20 63 6c 61   ^If a WHERE cla
d200: 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c  use is supplied,
d210: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65   then only those
d220: 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
d230: 74 68 65 0a 20 20 20 72 65 73 75 6c 74 20 6f 66  the.   result of
d240: 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
d250: 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 73 20  WHERE clause as 
d260: 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  a [boolean expre
d270: 73 73 69 6f 6e 7c 0a 20 20 20 62 6f 6f 6c 65 61  ssion|.   boolea
d280: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
d290: 74 72 75 65 5d 20 61 72 65 20 64 65 6c 65 74 65  true] are delete
d2a0: 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  d...<h3>Restrict
d2b0: 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54 45 20 53  ions on DELETE S
d2c0: 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
d2d0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
d2e0: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
d2f0: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
d300: 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 44 45 4c  ons apply to DEL
d310: 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  ETE statements t
d320: 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e  hat occur within
d330: 20 74 68 65 0a 20 20 20 62 6f 64 79 20 6f 66 20   the.   body of 
d340: 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  a [CREATE TRIGGE
d350: 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a 0a 0a 3c  R] statement:..<
d360: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68  ul>.  <li><p>^Th
d370: 65 20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  e <i>table-name<
d380: 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20 61 73  /i> specified as
d390: 20 70 61 72 74 20 6f 66 20 61 20 44 45 4c 45 54   part of a DELET
d3a0: 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68  E statement with
d3b0: 69 6e 0a 20 20 20 20 61 20 74 72 69 67 67 65 72  in.    a trigger
d3c0: 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e   body must be un
d3d0: 71 75 61 6c 69 66 69 65 64 2e 20 20 5e 28 49 6e  qualified.  ^(In
d3e0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
d3f0: 65 0a 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73  e.    <i>databas
d400: 65 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  e-name</i><b>.</
d410: 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
d420: 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e   table name is n
d430: 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20  ot allowed .    
d440: 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
d450: 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  )^ ^If the table
d460: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
d470: 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
d480: 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20  d is.    not in 
d490: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
d4a0: 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73  e, then DELETE s
d4b0: 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
d4c0: 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
d4d0: 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61   body must opera
d4e0: 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74  te on tables wit
d4f0: 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
d500: 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66  abase as it. ^If
d510: 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74   the table.    t
d520: 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
d530: 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
d540: 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
d550: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
d560: 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65  e.    unqualifie
d570: 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
d580: 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ble being delete
d590: 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
d5a0: 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
d5b0: 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61  .    it is for a
d5c0: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
d5d0: 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
d5e0: 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
d5f0: 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
d600: 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61  .    the main da
d610: 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
d620: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
d630: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
d640: 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61  ey were.    atta
d650: 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c  ched)..    .  <l
d660: 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
d670: 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
d680: 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
d690: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
d6a0: 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65  DELETE.    state
d6b0: 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
d6c0: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
d6d0: 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
d6e0: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
d6f0: 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20  uses (described 
d700: 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70  below) are unsup
d710: 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44  ported for.    D
d720: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
d730: 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
d740: 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  .</p>.</ul>..<h3
d750: 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
d760: 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
d770: 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
d780: 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
d790: 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b  piled with the [
d7a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
d7b0: 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
d7c0: 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
d7d0: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  option, then the
d7e0: 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44   syntax of the D
d7f0: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
d800: 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74  is.extended by t
d810: 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f  he addition of o
d820: 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
d830: 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
d840: 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  es:)^</p>..<tcl>
d850: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
d860: 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  lete-stmt-limite
d870: 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  d</tcl>..<p>^If 
d880: 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
d890: 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
d8a0: 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
d8b0: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
d8c0: 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64  s that.will be d
d8d0: 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20  eleted is found 
d8e0: 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
d8f0: 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
d900: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
d910: 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
d920: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49  nteger value. ^I
d930: 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
d940: 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74  the evaluating t
d950: 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  he LIMIT clause.
d960: 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
d970: 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
d980: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
d990: 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  ue, it is an err
d9a0: 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65  or. ^A .negative
d9b0: 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20   LIMIT value is 
d9c0: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22  interpreted as "
d9d0: 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20  no limit". ^(If 
d9e0: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
d9f0: 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61  ment .also has a
da00: 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
da10: 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69   then it is simi
da20: 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
da30: 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69  and cast to an.i
da40: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67  nteger value. Ag
da50: 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ain, it is an er
da60: 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65  ror if the value
da70: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
da80: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
da90: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e  to an integer.)^
daa0: 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
dab0: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
dac0: 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65  or the calculate
dad0: 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  d.integer value 
dae0: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
daf0: 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45   effective OFFSE
db00: 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e  T value is zero.
db10: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45  ..<p>^(If the DE
db20: 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
db30: 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
db40: 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
db50: 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
db60: 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74  .be deleted in t
db70: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
db80: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
db90: 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
dba0: 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45  ing to the .ORDE
dbb0: 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20  R BY. The first 
dbc0: 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77  <i>M</i> rows, w
dbd0: 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73  here <i>M</i> is
dbe0: 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64   the value found
dbf0: 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   by.evaluating t
dc00: 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
dc10: 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
dc20: 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68   skipped, and th
dc30: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e  e following .<i>
dc40: 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e  N</i>, where <i>
dc50: 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  N</i> is the val
dc60: 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ue of the LIMIT 
dc70: 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
dc80: 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74  deleted.)^.^If t
dc90: 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
dca0: 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  an <i>N</i> rows
dcb0: 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72   remaining after
dcc0: 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53   taking the OFFS
dcd0: 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61  ET clause.into a
dce0: 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68  ccount, or if th
dcf0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65  e LIMIT clause e
dd00: 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65  valuated to a ne
dd10: 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68  gative value, th
dd20: 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67  en all.remaining
dd30: 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
dd40: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44  d...<p>^If the D
dd50: 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
dd60: 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20  has no ORDER BY 
dd70: 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
dd80: 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64   rows that.would
dd90: 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74   be deleted in t
dda0: 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
ddb0: 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
ddc0: 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20  re assembled in 
ddd0: 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64  an.arbitrary ord
dde0: 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69  er before applyi
ddf0: 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  ng the LIMIT and
de00: 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20   OFFSET clauses 
de10: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68  to determine .th
de20: 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72  e subset that ar
de30: 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74  e actually delet
de40: 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
de50: 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
de60: 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
de70: 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  ent is used only
de80: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
de90: 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69  ich.rows fall wi
dea0: 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
deb0: 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  The order in whi
dec0: 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65  ch rows are dele
ded0: 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ted is arbitrary
dee0: 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
def0: 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
df00: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
df10: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
df20: 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b  nt truncateopt {
df30: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
df40: 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ation}</tcl>.<h3
df50: 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70  >The Truncate Op
df60: 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a  timization</h3>.
df70: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48  .<p>^When the WH
df80: 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ERE is omitted f
df90: 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61  rom a DELETE sta
dfa0: 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74  tement and the t
dfb0: 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74  able.being delet
dfc0: 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65  ed has no trigge
dfd0: 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  rs,.SQLite uses 
dfe0: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
dff0: 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74  to erase the ent
e000: 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  ire table conten
e010: 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  t.without having
e020: 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72   to visit each r
e030: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ow of the table 
e040: 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68  individually..Th
e050: 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70  is "truncate" op
e060: 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73  timization makes
e070: 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20   the delete run 
e080: 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69  much faster..Pri
e090: 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65  or to SQLite [ve
e0a0: 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 2c 20 74 68  rsion 3.6.5], th
e0b0: 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d  e truncate optim
e0c0: 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65 61  ization.also mea
e0d0: 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71 6c  nt that the [sql
e0e0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d 20  ite3_changes()] 
e0f0: 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f 74  and.[sqlite3_tot
e100: 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69 6e  al_changes()] in
e110: 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68 65  terfaces.and the
e120: 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20   [count_changes 
e130: 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f 74  pragma].will not
e140: 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e   actually return
e150: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
e160: 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a 54  eleted rows.  .T
e170: 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20  hat problem has 
e180: 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f 66  been fixed as of
e190: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35 5d   [version 3.6.5]
e1a0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75 6e 63  ...<p>^The trunc
e1b0: 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ate optimization
e1c0: 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e 65 6e   can be permanen
e1d0: 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66 6f 72  tly disabled for
e1e0: 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62 79 20   all queries.by 
e1f0: 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51 4c 69  recompiling.SQLi
e200: 74 65 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c  te with the [SQL
e210: 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54  ITE_OMIT_TRUNCAT
e220: 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 5d 20  E_OPTIMIZATION] 
e230: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 77 69  compile-time swi
e240: 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  tch.</p>..<p>The
e250: 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69   truncate optimi
e260: 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73 6f 20  zation can also 
e270: 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 72  be disabled at r
e280: 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74 68 65  untime using.the
e290: 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75   [sqlite3_set_au
e2a0: 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e 74 65  thorizer()] inte
e2b0: 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e 20 61  rface.  ^If an a
e2c0: 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c 62 61  uthorizer callba
e2d0: 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51 4c 49  ck.returns [SQLI
e2e0: 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72 20 61  TE_IGNORE] for a
e2f0: 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  n [SQLITE_DELETE
e300: 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c 20 74  ] action code, t
e310: 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45 20 6f  hen.the DELETE o
e320: 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 70 72  peration will pr
e330: 6f 63 65 65 64 20 62 75 74 20 74 68 65 20 74 72  oceed but the tr
e340: 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74  uncate optimizat
e350: 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79 70 61  ion will.be bypa
e360: 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20 77 69  ssed and rows wi
e370: 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 6f 6e  ll be deleted on
e380: 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a 0a 3c  e by one.</p>..<
e390: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
e3a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e3b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e3c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e3d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e3e0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 45  ####.Section {DE
e3f0: 54 41 43 48 20 44 41 54 41 42 41 53 45 7d 20 64  TACH DATABASE} d
e400: 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a 0a 42  etach *DETACH..B
e410: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65 74  ubbleDiagram det
e420: 61 63 68 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c  ach-stmt 1.</tcl
e430: 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74  >..<p>^This stat
e440: 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20 61  ement detaches a
e450: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74  n additional dat
e460: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e470: 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74   previously .att
e480: 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65 20  ached using the 
e490: 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65  [ATTACH] stateme
e4a0: 6e 74 2e 20 20 0a 5e 49 74 20 69 73 20 70 6f 73  nt.  .^It is pos
e4b0: 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20 74 68  sible to have th
e4c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
e4d0: 66 69 6c 65 20 61 74 74 61 63 68 65 64 20 6d 75  file attached mu
e4e0: 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75 73 69  ltiple times usi
e4f0: 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20 6e 61  ng .different na
e500: 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63 68 69  mes, and detachi
e510: 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74 69 6f  ng one connectio
e520: 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69 6c 6c  n to a file will
e530: 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74 68 65   leave the .othe
e540: 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e 0a 0a  rs intact.</p>..
e550: 3c 70 3e 5e 54 68 69 73 20 73 74 61 74 65 6d 65  <p>^This stateme
e560: 6e 74 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20  nt will fail if 
e570: 53 51 4c 69 74 65 20 69 73 20 69 6e 20 74 68 65  SQLite is in the
e580: 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61   middle of a tra
e590: 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 0a  nsaction.</p>...
e5a0: 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
e5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5f0: 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52  ####.Section {DR
e600: 4f 50 20 49 4e 44 45 58 7d 20 64 72 6f 70 69 6e  OP INDEX} dropin
e610: 64 65 78 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58  dex {{DROP INDEX
e620: 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
e630: 6d 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74 6d  m drop-index-stm
e640: 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  t 1.</tcl>..<p>^
e650: 54 68 65 20 44 52 4f 50 20 49 4e 44 45 58 20 73  The DROP INDEX s
e660: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
e670: 20 61 6e 20 69 6e 64 65 78 20 61 64 64 65 64 0a   an index added.
e680: 77 69 74 68 20 74 68 65 20 5b 43 52 45 41 54 45  with the [CREATE
e690: 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
e6a0: 74 2e 20 20 54 68 65 20 69 6e 64 65 78 20 69 73  t.  The index is
e6b0: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
e6c0: 76 65 64 20 66 72 6f 6d 0a 74 68 65 20 64 69 73  ved from.the dis
e6d0: 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20 77 61 79  k.  The only way
e6e0: 20 74 6f 20 72 65 63 6f 76 65 72 20 74 68 65 20   to recover the 
e6f0: 69 6e 64 65 78 20 69 73 20 74 6f 20 72 65 65 6e  index is to reen
e700: 74 65 72 20 74 68 65 0a 61 70 70 72 6f 70 72 69  ter the.appropri
e710: 61 74 65 20 5b 43 52 45 41 54 45 20 49 4e 44 45  ate [CREATE INDE
e720: 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a  X] command.</p>.
e730: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
e740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e780: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 44  #####.Section {D
e790: 52 4f 50 20 54 41 42 4c 45 7d 20 64 72 6f 70 74  ROP TABLE} dropt
e7a0: 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54 41 42 4c  able {{DROP TABL
e7b0: 45 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72  E}}..BubbleDiagr
e7c0: 61 6d 20 64 72 6f 70 2d 74 61 62 6c 65 2d 73 74  am drop-table-st
e7d0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
e7e0: 5e 54 68 65 20 44 52 4f 50 20 54 41 42 4c 45 20  ^The DROP TABLE 
e7f0: 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65  statement remove
e800: 73 20 61 20 74 61 62 6c 65 20 61 64 64 65 64 20  s a table added 
e810: 77 69 74 68 20 74 68 65 0a 5b 43 52 45 41 54 45  with the.[CREATE
e820: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
e830: 74 2e 20 20 54 68 65 20 6e 61 6d 65 20 73 70 65  t.  The name spe
e840: 63 69 66 69 65 64 20 69 73 20 74 68 65 0a 74 61  cified is the.ta
e850: 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54 68 65 20  ble name.  ^The 
e860: 64 72 6f 70 70 65 64 20 74 61 62 6c 65 20 69 73  dropped table is
e870: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72 65 6d 6f   completely remo
e880: 76 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ved from the dat
e890: 61 62 61 73 65 20 0a 73 63 68 65 6d 61 20 61 6e  abase .schema an
e8a0: 64 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 2e  d the disk file.
e8b0: 20 20 54 68 65 20 74 61 62 6c 65 20 63 61 6e 20    The table can 
e8c0: 6e 6f 74 20 62 65 20 72 65 63 6f 76 65 72 65 64  not be recovered
e8d0: 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69 63 65 73  .  .^All indices
e8e0: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
e8f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
e900: 65 20 74 61 62 6c 65 20 61 72 65 20 61 6c 73 6f  e table are also
e910: 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e 0a 0a 3c   deleted.</p>..<
e920: 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  p>^The optional 
e930: 49 46 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  IF EXISTS clause
e940: 20 73 75 70 70 72 65 73 73 65 73 20 74 68 65 20   suppresses the 
e950: 65 72 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64  error that would
e960: 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73 75 6c 74   normally.result
e970: 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 64 6f   if the table do
e980: 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 3c 2f 70  es not exist.</p
e990: 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f 72 65 69  >..<p>^If [forei
e9a0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
e9b0: 74 73 5d 20 61 72 65 20 65 6e 61 62 6c 65 64 2c  ts] are enabled,
e9c0: 20 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f   a DROP TABLE co
e9d0: 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d 73 20 61  mmand performs a
e9e0: 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44 45 4c 45  n.implicit [DELE
e9f0: 54 45 20 7c 20 44 45 4c 45 54 45 20 46 52 4f 4d  TE | DELETE FROM
ea00: 20 26 6c 74 3b 74 62 6c 26 67 74 3b 5d 20 63 6f   &lt;tbl&gt;] co
ea10: 6d 6d 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d  mmand before rem
ea20: 6f 76 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20  oving the.table 
ea30: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
ea40: 65 20 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74  e schema. ^Any t
ea50: 72 69 67 67 65 72 73 20 61 74 74 61 63 68 65 64  riggers attached
ea60: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72   to the table ar
ea70: 65 0a 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74  e.dropped from t
ea80: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
ea90: 6d 61 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d  ma before the im
eaa0: 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20 46 52  plicit DELETE FR
eab0: 4f 4d 20 26 6c 74 3b 74 62 6c 26 67 74 3b 20 0a  OM &lt;tbl&gt; .
eac0: 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20  is executed, so 
ead0: 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75 73  this cannot caus
eae0: 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20 74  e any triggers t
eaf0: 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74 72  o fire. By contr
eb00: 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63 69  ast, ^an.implici
eb10: 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c  t DELETE FROM &l
eb20: 74 3b 74 62 6c 26 67 74 3b 20 64 6f 65 73 20 63  t;tbl&gt; does c
eb30: 61 75 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75  ause any configu
eb40: 72 65 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79  red.[foreign key
eb50: 20 61 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b   actions] to tak
eb60: 65 20 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68  e place. .^If th
eb70: 65 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54  e implicit DELET
eb80: 45 20 46 52 4f 4d 20 26 6c 74 3b 74 62 6c 26 67  E FROM &lt;tbl&g
eb90: 74 3b 20 65 78 65 63 75 74 65 64 0a 61 73 20 70  t; executed.as p
eba0: 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41  art of a DROP TA
ebb0: 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69 6f 6c  BLE command viol
ebc0: 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64 69 61  ates any immedia
ebd0: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
ebe0: 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e 20 65  onstraints,.an e
ebf0: 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
ec00: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
ec10: 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e 20 5e  s not dropped. ^
ec20: 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63 69 74  If .the implicit
ec30: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 26 6c 74   DELETE FROM &lt
ec40: 3b 74 62 6c 26 67 74 3b 20 63 61 75 73 65 73 20  ;tbl&gt; causes 
ec50: 61 6e 79 20 0a 64 65 66 65 72 72 65 64 20 66 6f  any .deferred fo
ec60: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
ec70: 61 69 6e 74 73 20 74 6f 20 62 65 20 76 69 6f 6c  aints to be viol
ec80: 61 74 65 64 2c 20 61 6e 64 20 74 68 65 20 76 69  ated, and the vi
ec90: 6f 6c 61 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65  olations still.e
eca0: 78 69 73 74 20 77 68 65 6e 20 74 68 65 20 74 72  xist when the tr
ecb0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d  ansaction is com
ecc0: 6d 69 74 74 65 64 2c 20 61 6e 20 65 72 72 6f 72  mitted, an error
ecd0: 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 74 20   is returned at 
ece0: 74 68 65 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d  the time.of comm
ecf0: 69 74 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  it...<tcl>.#####
ed00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ed40: 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
ed50: 6e 20 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d  n {DROP TRIGGER}
ed60: 20 64 72 6f 70 74 72 69 67 67 65 72 20 7b 7b 44   droptrigger {{D
ed70: 52 4f 50 20 54 52 49 47 47 45 52 7d 7d 0a 0a 42  ROP TRIGGER}}..B
ed80: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f  ubbleDiagram dro
ed90: 70 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 20 31  p-trigger-stmt 1
eda0: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65  .</tcl>..<p>^The
edb0: 20 44 52 4f 50 20 54 52 49 47 47 45 52 20 73 74   DROP TRIGGER st
edc0: 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20  atement removes 
edd0: 61 20 74 72 69 67 67 65 72 20 63 72 65 61 74 65  a trigger create
ede0: 64 20 62 79 20 74 68 65 20 0a 5b 43 52 45 41 54  d by the .[CREAT
edf0: 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65  E TRIGGER] state
ee00: 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20 72 65 6d 6f  ment. ^Once remo
ee10: 76 65 64 2c 20 74 68 65 20 74 72 69 67 67 65 72  ved, the trigger
ee20: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 6e   definition is n
ee30: 6f 0a 6c 6f 6e 67 65 72 20 70 72 65 73 65 6e 74  o.longer present
ee40: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   in the sqlite_m
ee50: 61 73 74 65 72 20 28 6f 72 20 73 71 6c 69 74 65  aster (or sqlite
ee60: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20 74 61  _temp_master) ta
ee70: 62 6c 65 20 61 6e 64 20 69 73 0a 6e 6f 74 20 66  ble and is.not f
ee80: 69 72 65 64 20 62 79 20 61 6e 79 20 73 75 62 73  ired by any subs
ee90: 65 71 75 65 6e 74 20 49 4e 53 45 52 54 2c 20 55  equent INSERT, U
eea0: 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20  PDATE or DELETE 
eeb0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70 3e  statements...<p>
eec0: 5e 4e 6f 74 65 20 74 68 61 74 20 74 72 69 67 67  ^Note that trigg
eed0: 65 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  ers are automati
eee0: 63 61 6c 6c 79 20 64 72 6f 70 70 65 64 20 77 68  cally dropped wh
eef0: 65 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  en the associate
ef00: 64 20 74 61 62 6c 65 20 69 73 0a 64 72 6f 70 70  d table is.dropp
ef10: 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ed...<tcl>.#####
ef20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 53 65 63 74 69 6f  #########.Sectio
ef70: 6e 20 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72  n {DROP VIEW} dr
ef80: 6f 70 76 69 65 77 20 7b 7b 44 52 4f 50 20 56 49  opview {{DROP VI
ef90: 45 57 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67  EW}}..BubbleDiag
efa0: 72 61 6d 20 64 72 6f 70 2d 76 69 65 77 2d 73 74  ram drop-view-st
efb0: 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  mt 1.</tcl>..<p>
efc0: 5e 54 68 65 20 44 52 4f 50 20 56 49 45 57 20 73  ^The DROP VIEW s
efd0: 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f 76 65 73  tatement removes
efe0: 20 61 20 76 69 65 77 20 63 72 65 61 74 65 64 20   a view created 
eff0: 62 79 20 74 68 65 20 5b 43 52 45 41 54 45 20 56  by the [CREATE V
f000: 49 45 57 5d 20 0a 20 20 73 74 61 74 65 6d 65 6e  IEW] .  statemen
f010: 74 2e 20 5e 54 68 65 20 76 69 65 77 20 64 65 66  t. ^The view def
f020: 69 6e 69 74 69 6f 6e 20 69 73 20 72 65 6d 6f 76  inition is remov
f030: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
f040: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 62 75 74  base schema, but
f050: 20 0a 20 20 6e 6f 20 61 63 74 75 61 6c 20 64 61   .  no actual da
f060: 74 61 20 69 6e 20 74 68 65 20 75 6e 64 65 72 6c  ta in the underl
f070: 79 69 6e 67 20 62 61 73 65 20 74 61 62 6c 65 73  ying base tables
f080: 20 69 73 20 6d 6f 64 69 66 69 65 64 2e 0a 0a 3c   is modified...<
f090: 70 3e 5e 28 54 68 65 20 76 69 65 77 20 74 6f 20  p>^(The view to 
f0a0: 64 72 6f 70 20 69 73 20 69 64 65 6e 74 69 66 69  drop is identifi
f0b0: 65 64 20 62 79 20 74 68 65 20 76 69 65 77 2d 6e  ed by the view-n
f0c0: 61 6d 65 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c  ame and optional
f0d0: 20 0a 20 20 64 61 74 61 62 61 73 65 2d 6e 61 6d   .  database-nam
f0e0: 65 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  e specified as p
f0f0: 61 72 74 20 6f 66 20 74 68 65 20 44 52 4f 50 20  art of the DROP 
f100: 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2e 20  VIEW statement. 
f110: 54 68 69 73 20 0a 20 20 72 65 66 65 72 65 6e 63  This .  referenc
f120: 65 20 69 73 20 72 65 73 6f 6c 76 65 64 20 75 73  e is resolved us
f130: 69 6e 67 20 74 68 65 20 73 74 61 6e 64 61 72 64  ing the standard
f140: 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 5b   procedure for [
f150: 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f  object resolutio
f160: 6e 5d 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e 49 66  n].)^..<p>.  ^If
f170: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
f180: 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20 66 6f  iew cannot be fo
f190: 75 6e 64 20 61 6e 64 20 74 68 65 20 49 46 20 45  und and the IF E
f1a0: 58 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20  XISTS clause is 
f1b0: 6e 6f 74 20 0a 20 20 70 72 65 73 65 6e 74 2c 20  not .  present, 
f1c0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20  it is an error. 
f1d0: 5e 49 66 20 74 68 65 20 73 70 65 63 69 66 69 65  ^If the specifie
f1e0: 64 20 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65  d view cannot be
f1f0: 20 66 6f 75 6e 64 20 61 6e 64 20 61 6e 20 49 46   found and an IF
f200: 0a 20 20 45 58 49 53 54 53 20 63 6c 61 75 73 65  .  EXISTS clause
f210: 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74   is present in t
f220: 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74 61  he DROP VIEW sta
f230: 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  tement, then the
f240: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69 73 20   statement.  is 
f250: 61 20 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63 6c 3e  a no-op....<tcl>
f260: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
f270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
f2b0: 53 65 63 74 69 6f 6e 20 7b 44 61 74 61 62 61 73  Section {Databas
f2c0: 65 20 4f 62 6a 65 63 74 20 4e 61 6d 65 20 52 65  e Object Name Re
f2d0: 73 6f 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d 69 6e  solution} {namin
f2e0: 67 7d 20 7b 7b 6f 62 6a 65 63 74 20 72 65 73 6f  g} {{object reso
f2f0: 6c 75 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c 3e 0a  lution}}.</tcl>.
f300: 0a 3c 70 3e 0a 20 20 49 6e 20 53 51 4c 69 74 65  .<p>.  In SQLite
f310: 2c 20 61 20 64 61 74 61 62 61 73 65 20 6f 62 6a  , a database obj
f320: 65 63 74 20 28 61 20 74 61 62 6c 65 2c 20 69 6e  ect (a table, in
f330: 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f 72 20  dex, trigger or 
f340: 76 69 65 77 29 20 69 73 20 69 64 65 6e 74 69 66  view) is identif
f350: 69 65 64 0a 20 20 62 79 20 74 68 65 20 6e 61 6d  ied.  by the nam
f360: 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 20  e of the object 
f370: 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
f380: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 61  the database tha
f390: 74 20 69 74 20 72 65 73 69 64 65 73 20 69 6e 2e  t it resides in.
f3a0: 20 0a 20 20 44 61 74 61 62 61 73 65 20 6f 62 6a   .  Database obj
f3b0: 65 63 74 73 20 6d 61 79 20 72 65 73 69 64 65 20  ects may reside 
f3c0: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
f3d0: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
f3e0: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 0a 20  atabase, or in. 
f3f0: 20 61 6e 20 5b 41 54 54 41 43 48 7c 61 74 74 61   an [ATTACH|atta
f400: 63 68 65 64 20 64 61 74 61 62 61 73 65 5d 2e 0a  ched database]..
f410: 0a 3c 70 3e 0a 20 20 54 68 65 20 73 79 6e 74 61  .<p>.  The synta
f420: 78 20 6f 66 20 74 68 65 20 5b 44 52 4f 50 20 54  x of the [DROP T
f430: 41 42 4c 45 5d 2c 20 5b 44 52 4f 50 20 49 4e 44  ABLE], [DROP IND
f440: 45 58 5d 2c 20 5b 44 52 4f 50 20 56 49 45 57 5d  EX], [DROP VIEW]
f450: 2c 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d  , [DROP TRIGGER]
f460: 2c 0a 20 20 5b 52 45 49 4e 44 45 58 5d 2c 20 5b  ,.  [REINDEX], [
f470: 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 61 6e 64  ALTER TABLE] and
f480: 20 6d 61 6e 79 20 6f 74 68 65 72 20 63 6f 6d 6d   many other comm
f490: 61 6e 64 73 20 61 6c 6c 20 70 65 72 6d 69 74 20  ands all permit 
f4a0: 74 68 65 20 75 73 65 72 20 74 6f 0a 20 20 73 70  the user to.  sp
f4b0: 65 63 69 66 79 20 61 20 64 61 74 61 62 61 73 65  ecify a database
f4c0: 20 6f 62 6a 65 63 74 20 65 69 74 68 65 72 20 62   object either b
f4d0: 79 20 69 74 73 20 6e 61 6d 65 20 61 6c 6f 6e 65  y its name alone
f4e0: 2c 20 6f 72 20 62 79 20 61 20 63 6f 6d 62 69 6e  , or by a combin
f4f0: 61 74 69 6f 6e 20 6f 66 0a 20 20 69 74 73 20 6e  ation of.  its n
f500: 61 6d 65 20 61 6e 64 20 74 68 65 20 6e 61 6d 65  ame and the name
f510: 20 6f 66 20 69 74 73 20 64 61 74 61 62 61 73 65   of its database
f520: 2e 20 5e 28 49 66 20 6e 6f 20 64 61 74 61 62 61  . ^(If no databa
f530: 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  se is specified 
f540: 61 73 20 70 61 72 74 0a 20 20 6f 66 20 74 68 65  as part.  of the
f550: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
f560: 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 73  e, then SQLite s
f570: 65 61 72 63 68 65 73 20 74 68 65 20 6d 61 69 6e  earches the main
f580: 2c 20 74 65 6d 70 20 61 6e 64 20 61 6c 6c 20 61  , temp and all a
f590: 74 74 61 63 68 65 64 0a 20 20 64 61 74 61 62 61  ttached.  databa
f5a0: 73 65 73 20 66 6f 72 20 61 6e 20 6f 62 6a 65 63  ses for an objec
f5b0: 74 20 77 69 74 68 20 61 20 6d 61 74 63 68 69 6e  t with a matchin
f5c0: 67 20 6e 61 6d 65 2e 20 54 68 65 20 74 65 6d 70  g name. The temp
f5d0: 20 64 61 74 61 62 61 73 65 20 69 73 20 73 65 61   database is sea
f5e0: 72 63 68 65 64 0a 20 20 66 69 72 73 74 2c 20 66  rched.  first, f
f5f0: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 6d  ollowed by the m
f600: 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 66 6f  ain database, fo
f610: 6c 6c 6f 77 65 64 20 61 6c 6c 20 61 74 74 61 63  llowed all attac
f620: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 69 6e  hed databases in
f630: 20 74 68 65 0a 20 20 6f 72 64 65 72 20 74 68 61   the.  order tha
f640: 74 20 74 68 65 79 20 77 65 72 65 20 61 74 74 61  t they were atta
f650: 63 68 65 64 2e 20 54 68 65 20 72 65 66 65 72 65  ched. The refere
f660: 6e 63 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 20  nce resolves to 
f670: 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 0a  the first match.
f680: 20 20 66 6f 75 6e 64 2e 29 5e 20 46 6f 72 20 65    found.)^ For e
f690: 78 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e 5e 28  xample:..<pre>^(
f6a0: 0a 20 20 20 20 20 20 2f 2a 20 41 64 64 20 61 20  .      /* Add a 
f6b0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 27 74 31 27  table named 't1'
f6c0: 20 74 6f 20 74 68 65 20 74 65 6d 70 2c 20 6d 61   to the temp, ma
f6d0: 69 6e 20 61 6e 64 20 61 6e 20 61 74 74 61 63 68  in and an attach
f6e0: 65 64 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  ed database */. 
f6f0: 20 20 20 20 20 41 54 54 41 43 48 20 27 66 69 6c       ATTACH 'fil
f700: 65 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  e.db' AS aux;.  
f710: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
f720: 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20 20 20   t1(x, y);.     
f730: 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42   CREATE TEMP TAB
f740: 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20  LE t1(x, y);.   
f750: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
f760: 61 75 78 2e 74 31 28 78 2c 20 79 29 3b 0a 0a 20  aux.t1(x, y);.. 
f770: 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20       DROP TABLE 
f780: 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  t1;         /* D
f790: 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 74 65 6d  rop table in tem
f7a0: 70 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  p database */.  
f7b0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
f7c0: 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  1;         /* Dr
f7d0: 6f 70 20 74 61 62 6c 65 20 69 6e 20 6d 61 69 6e  op table in main
f7e0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 20   database */.   
f7f0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
f800: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 6f  ;         /* Dro
f810: 70 20 74 61 62 6c 65 20 69 6e 20 61 75 78 20 64  p table in aux d
f820: 61 74 61 62 61 73 65 20 2a 2f 0a 29 5e 3c 2f 70  atabase */.)^</p
f830: 72 65 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66 20 61  re>..<p>.  ^If a
f840: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
f850: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
f860: 61 72 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74  art of an object
f870: 20 72 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d   reference, it m
f880: 75 73 74 20 62 65 0a 20 20 65 69 74 68 65 72 20  ust be.  either 
f890: 22 6d 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70  "main", or "temp
f8a0: 22 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f 66  " or the name of
f8b0: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
f8c0: 61 62 61 73 65 2e 20 5e 4c 69 6b 65 20 6f 74 68  abase. ^Like oth
f8d0: 65 72 0a 20 20 53 51 4c 20 69 64 65 6e 74 69 66  er.  SQL identif
f8e0: 69 65 72 73 2c 20 64 61 74 61 62 61 73 65 20 6e  iers, database n
f8f0: 61 6d 65 73 20 61 72 65 20 63 61 73 65 2d 69 6e  ames are case-in
f900: 73 65 6e 73 69 74 69 76 65 2e 20 5e 49 66 20 61  sensitive. ^If a
f910: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 20   database name. 
f920: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
f930: 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 6e 61 6d  hen only the nam
f940: 65 64 20 64 61 74 61 62 61 73 65 20 69 73 20 73  ed database is s
f950: 65 61 72 63 68 65 64 20 66 6f 72 20 74 68 65 20  earched for the 
f960: 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 0a 3c  named object...<
f970: 70 3e 0a 20 20 4d 6f 73 74 20 6f 62 6a 65 63 74  p>.  Most object
f980: 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61 79 20   references may 
f990: 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 20 74 6f 20  only resolve to 
f9a0: 61 20 73 70 65 63 69 66 69 63 20 74 79 70 65 20  a specific type 
f9b0: 6f 66 20 6f 62 6a 65 63 74 20 28 66 6f 72 0a 20  of object (for. 
f9c0: 20 65 78 61 6d 70 6c 65 20 61 20 72 65 66 65 72   example a refer
f9d0: 65 6e 63 65 20 74 68 61 74 20 69 73 20 70 61 72  ence that is par
f9e0: 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41 42 4c  t of a DROP TABL
f9f0: 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  E statement may 
fa00: 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 0a 20 20 74  only resolve.  t
fa10: 6f 20 61 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  o a table object
fa20: 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 2c 20  , not an index, 
fa30: 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 29  trigger or view)
fa40: 2e 20 48 6f 77 65 76 65 72 20 69 6e 20 73 6f 6d  . However in som
fa50: 65 20 63 6f 6e 74 65 78 74 73 20 0a 20 20 28 65  e contexts .  (e
fa60: 2e 67 2e 20 5b 52 45 49 4e 44 45 58 5d 29 20 61  .g. [REINDEX]) a
fa70: 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  n object referen
fa80: 63 65 20 6d 61 79 20 62 65 20 72 65 73 6f 6c 76  ce may be resolv
fa90: 65 20 74 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f  e to more than o
faa0: 6e 65 20 74 79 70 65 0a 20 20 6f 66 20 6f 62 6a  ne type.  of obj
fab0: 65 63 74 2e 20 5e 57 68 65 6e 20 73 65 61 72 63  ect. ^When searc
fac0: 68 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  hing database sc
fad0: 68 65 6d 61 73 20 66 6f 72 20 61 20 6e 61 6d 65  hemas for a name
fae0: 64 20 6f 62 6a 65 63 74 2c 20 6f 62 6a 65 63 74  d object, object
faf0: 73 20 6f 66 0a 20 20 74 79 70 65 73 20 74 68 61  s of.  types tha
fb00: 74 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  t cannot be used
fb10: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context 
fb20: 6f 66 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  of the reference
fb30: 20 61 72 65 20 61 6c 77 61 79 73 20 0a 20 20 69   are always .  i
fb40: 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23  gnored...<tcl>.#
fb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb90: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
fba0: 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20 65 78  ction EXPLAIN ex
fbb0: 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a 0a 42  plain EXPLAIN..B
fbc0: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 71 6c  ubbleDiagram sql
fbd0: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
fbe0: 3e 5e 41 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  >^An SQL stateme
fbf0: 6e 74 20 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt can be preced
fc00: 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
fc10: 64 20 22 45 58 50 4c 41 49 4e 22 20 6f 72 0a 62  d "EXPLAIN" or.b
fc20: 79 20 74 68 65 20 70 68 72 61 73 65 20 22 45 58  y the phrase "EX
fc30: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
fc40: 22 2e 20 20 5e 45 69 74 68 65 72 20 6d 6f 64 69  ".  ^Either modi
fc50: 66 69 63 61 74 69 6f 6e 20 63 61 75 73 65 73 20  fication causes 
fc60: 74 68 65 0a 53 51 4c 20 73 74 61 74 65 6d 65 6e  the.SQL statemen
fc70: 74 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  t to behave as a
fc80: 20 71 75 65 72 79 20 61 6e 64 20 74 6f 20 72 65   query and to re
fc90: 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  turn information
fca0: 20 61 62 6f 75 74 0a 68 6f 77 20 74 68 65 20 53   about.how the S
fcb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  QL statement wou
fcc0: 6c 64 20 68 61 76 65 20 6f 70 65 72 61 74 65 64  ld have operated
fcd0: 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
fce0: 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68 72 61 73  keyword or.phras
fcf0: 65 20 68 61 64 20 62 65 65 6e 20 6f 6d 69 74 74  e had been omitt
fd00: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
fd10: 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58 50 4c  output from EXPL
fd20: 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49 4e 20  AIN and EXPLAIN 
fd30: 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20 69 6e  QUERY PLAN is in
fd40: 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74 65 72  tended for.inter
fd50: 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69 73 20  active analysis 
fd60: 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74  and troubleshoot
fd70: 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65 20 64  ing only.  The d
fd80: 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 0a 6f  etails of the .o
fd90: 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61 72 65  utput format are
fda0: 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e   subject to chan
fdb0: 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65 6c 65  ge from one rele
fdc0: 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20 74 6f  ase of SQLite to
fdd0: 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70 6c 69   the next..Appli
fde0: 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6e  cations should n
fdf0: 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e 20 6f  ot use EXPLAIN o
fe00: 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  r EXPLAIN QUERY 
fe10: 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65 69 72  PLAN since.their
fe20: 20 65 78 61 63 74 20 62 65 68 61 76 69 6f 72 20   exact behavior 
fe30: 69 73 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20  is variable and 
fe40: 6f 6e 6c 79 20 70 61 72 74 69 61 6c 6c 79 20 64  only partially d
fe50: 6f 63 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e 0a 0a  ocumented.</p>..
fe60: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45 58 50  <p>^When the EXP
fe70: 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61 70 70  LAIN keyword app
fe80: 65 61 72 73 20 62 79 20 69 74 73 65 6c 66 20 69  ears by itself i
fe90: 74 20 63 61 75 73 65 73 20 74 68 65 20 73 74 61  t causes the sta
fea0: 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61 76 65  tement.to behave
feb0: 20 61 73 20 61 20 71 75 65 72 79 20 74 68 61 74   as a query that
fec0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 65 71   returns the seq
fed0: 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72 74 75  uence of .[virtu
fee0: 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72  al machine instr
fef0: 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f 75 6c  uctions] it woul
ff00: 64 20 68 61 76 65 20 75 73 65 64 20 74 6f 20 65  d have used to e
ff10: 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d 6d 61  xecute the comma
ff20: 6e 64 20 68 61 64 0a 74 68 65 20 45 58 50 4c 41  nd had.the EXPLA
ff30: 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 62  IN keyword not b
ff40: 65 65 6e 20 70 72 65 73 65 6e 74 2e 20 5e 57 68  een present. ^Wh
ff50: 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
ff60: 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61 73 65  UERY PLAN phrase
ff70: 0a 61 70 70 65 61 72 73 2c 20 74 68 65 20 73 74  .appears, the st
ff80: 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73 20  atement returns 
ff90: 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66 6f 72  high-level infor
ffa0: 6d 61 74 69 6f 6e 20 72 65 67 61 72 64 69 6e 67  mation regarding
ffb0: 20 74 68 65 20 71 75 65 72 79 0a 70 6c 61 6e 20   the query.plan 
ffc0: 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20  that would have 
ffd0: 62 65 65 6e 20 75 73 65 64 2e 0a 0a 54 68 65 20  been used...The 
ffe0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
fff0: 41 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 20 64 65  AN command is de
10000 73 63 72 69 62 65 64 20 69 6e 20 0a 5b 65 78 70  scribed in .[exp
10010 6c 61 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 7c  lain query plan|
10020 6d 6f 72 65 20 64 65 74 61 69 6c 20 68 65 72 65  more detail here
10030 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ]...<tcl>.######
10040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10080 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
10090 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78 70 72   expression expr
100a0 20 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20 7b 65   {*expression {e
100b0 78 70 72 65 73 73 69 6f 6e 20 73 79 6e 74 61 78  xpression syntax
100c0 7d 7d 0a 0a 42 75 62 62 6c 65 44 69 61 67 72 61  }}..BubbleDiagra
100d0 6d 20 65 78 70 72 20 31 0a 42 75 62 62 6c 65 44  m expr 1.BubbleD
100e0 69 61 67 72 61 6d 20 6c 69 74 65 72 61 6c 2d 76  iagram literal-v
100f0 61 6c 75 65 0a 42 75 62 62 6c 65 44 69 61 67 72  alue.BubbleDiagr
10100 61 6d 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72  am signed-number
10110 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72  .BubbleDiagram r
10120 61 69 73 65 2d 66 75 6e 63 74 69 6f 6e 0a 3c 2f  aise-function.</
10130 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69 73 20 73 65  tcl>..<p>This se
10140 63 74 69 6f 6e 20 69 73 20 64 69 66 66 65 72 65  ction is differe
10150 6e 74 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65  nt from the othe
10160 72 73 2e 20 20 4d 6f 73 74 20 6f 74 68 65 72 20  rs.  Most other 
10170 73 65 63 74 69 6f 6e 73 20 6f 66 0a 74 68 69 73  sections of.this
10180 20 64 6f 63 75 6d 65 6e 74 20 74 61 6c 6b 73 20   document talks 
10190 61 62 6f 75 74 20 61 20 70 61 72 74 69 63 75 6c  about a particul
101a0 61 72 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  ar SQL command. 
101b0 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 64 6f   This section do
101c0 65 73 0a 6e 6f 74 20 74 61 6c 6b 20 61 62 6f 75  es.not talk abou
101d0 74 20 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63  t a standalone c
101e0 6f 6d 6d 61 6e 64 20 62 75 74 20 61 62 6f 75 74  ommand but about
101f0 20 22 65 78 70 72 65 73 73 69 6f 6e 73 22 20 77   "expressions" w
10200 68 69 63 68 20 61 72 65 20 0a 73 75 62 63 6f 6d  hich are .subcom
10210 70 6f 6e 65 6e 74 73 20 6f 66 20 6d 6f 73 74 20  ponents of most 
10220 6f 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 2e 3c  other commands.<
10230 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
10240 67 6d 65 6e 74 20 62 69 6e 61 72 79 6f 70 73 20  gment binaryops 
10250 7b 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72  {binary operator
10260 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 70 65  s}</tcl>.<h3>Ope
10270 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
10280 28 53 51 4c 69 74 65 20 75 6e 64 65 72 73 74 61  (SQLite understa
10290 6e 64 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  nds the followin
102a0 67 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  g binary operato
102b0 72 73 2c 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  rs, in order fro
102c0 6d 0a 68 69 67 68 65 73 74 20 74 6f 20 6c 6f 77  m.highest to low
102d0 65 73 74 20 70 72 65 63 65 64 65 6e 63 65 3a 3c  est precedence:<
102e0 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
102f0 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
10300 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
10310 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20 20 20 20 25  g>||.*    /    %
10320 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b 26 6c 74 3b  .+    -.&lt;&lt;
10330 20 20 20 26 67 74 3b 26 67 74 3b 20 20 20 26 61     &gt;&gt;   &a
10340 6d 70 3b 20 20 20 20 7c 0a 26 6c 74 3b 20 20 20  mp;    |.&lt;   
10350 20 26 6c 74 3b 3d 20 20 20 26 67 74 3b 20 20 20   &lt;=   &gt;   
10360 20 26 67 74 3b 3d 0a 3d 20 20 20 20 3d 3d 20 20   &gt;=.=    ==  
10370 20 21 3d 20 20 20 26 6c 74 3b 26 67 74 3b 20 20   !=   &lt;&gt;  
10380 20 3c 2f 62 69 67 3e 49 53 20 20 20 49 53 20 4e   </big>IS   IS N
10390 4f 54 20 20 20 49 4e 20 20 20 4c 49 4b 45 20 20  OT   IN   LIKE  
103a0 20 47 4c 4f 42 20 20 20 4d 41 54 43 48 20 20 20   GLOB   MATCH   
103b0 52 45 47 45 58 50 0a 41 4e 44 20 20 20 0a 4f 52  REGEXP.AND   .OR
103c0 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f  </font>.</pre></
103d0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
103e0 70 3e 5e 28 53 75 70 70 6f 72 74 65 64 20 75 6e  p>^(Supported un
103f0 61 72 79 20 70 72 65 66 69 78 20 6f 70 65 72 61  ary prefix opera
10400 74 6f 72 73 20 61 72 65 20 74 68 65 73 65 3a 3c  tors are these:<
10410 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
10420 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74 20 63 6f 6c  ><pre>.<font col
10430 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 3c 62 69  or="#2c2cf0"><bi
10440 67 3e 2d 20 20 20 20 2b 20 20 20 20 7e 20 20 20  g>-    +    ~   
10450 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f 66 6f 6e 74   NOT</big></font
10460 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  >.</pre></blockq
10470 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  uote>)^..<tcl>hd
10480 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 61 74  _fragment collat
10490 65 6f 70 20 7b 43 4f 4c 4c 41 54 45 20 6f 70 65  eop {COLLATE ope
104a0 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  rator}</tcl>.<p>
104b0 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65  ^The COLLATE ope
104c0 72 61 74 6f 72 20 69 73 20 61 20 75 6e 61 72 79  rator is a unary
104d0 20 70 6f 73 74 66 69 78 0a 6f 70 65 72 61 74 6f   postfix.operato
104e0 72 20 74 68 61 74 20 61 73 73 69 67 6e 73 20 61  r that assigns a
104f0 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
10500 65 6e 63 65 5d 20 74 6f 20 61 6e 20 65 78 70 72  ence] to an expr
10510 65 73 73 69 6f 6e 2e 0a 5e 54 68 65 20 43 4f 4c  ession..^The COL
10520 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61  LATE operator ha
10530 73 20 61 20 68 69 67 68 65 72 20 70 72 65 63 65  s a higher prece
10540 64 65 6e 63 65 20 28 62 69 6e 64 73 20 6d 6f 72  dence (binds mor
10550 65 20 74 69 67 68 74 6c 79 29 20 74 68 61 6e 20  e tightly) than 
10560 61 6e 79 0a 70 72 65 66 69 78 20 75 6e 61 72 79  any.prefix unary
10570 20 6f 70 65 72 61 74 6f 72 20 6f 72 20 61 6e 79   operator or any
10580 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
10590 2e 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67  ..^The collating
105a0 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
105b0 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70 65   the COLLATE ope
105c0 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73 20  rator overrides 
105d0 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the.collating se
105e0 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e 65  quence determine
105f0 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54 45  d by the COLLATE
10600 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61 62   clause in a tab
10610 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  le.[column defin
10620 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65 20  ition]..See the 
10630 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  [collating seque
10640 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64 69  nce| detailed di
10650 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c 6c  scussion on coll
10660 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 5d  ating sequences]
10670 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79 70  .in the [datatyp
10680 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e 20  e | Datatype In 
10690 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65 6e  SQLite3] documen
106a0 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
106b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c 2f   information..</
106c0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73  p>..<tcl>hd_puts
106d0 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72 79   ".<p>^The unary
106e0 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61   operator [Opera
106f0 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d 6f  tor +] is a no-o
10700 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20 61  p.  ^It can be a
10710 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e 67  pplied.to string
10720 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f 62  s, numbers, blob
10730 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69 74  s or NULL and it
10740 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20   always returns 
10750 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74 68  a result.with th
10760 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20  e same value as 
10770 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e  the operand.</p>
10780 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65  "</tcl>..<p>Note
10790 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20   that there are 
107a0 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f  two variations o
107b0 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e 64  f the equals and
107c0 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65 72   not equals.oper
107d0 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73 20  ators.  ^Equals 
107e0 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a 3c  can be either..<
107f0 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b 4f  tcl>.hd_puts "[O
10800 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b 4f  perator =] or [O
10810 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54 68  perator ==]..^Th
10820 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70 65  e non-equals ope
10830 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69 74  rator can be eit
10840 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21 3d  her.[Operator !=
10850 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 7b  ] or [Operator {
10860 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68 65  &lt;&gt;}]..^The
10870 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20 6f   [Operator ||] o
10880 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f 6e  perator is \"con
10890 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74 20  catenate\" - it 
108a0 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a 74  joins together.t
108b0 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20 6f  he two strings o
108c0 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e 0a  f its operands..
108d0 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b 4f  ^The operator [O
108e0 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70 75  perator %] outpu
108f0 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ts the value of 
10900 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72 61 6e  its left .operan
10910 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72 69 67  d modulo its rig
10920 68 74 20 6f 70 65 72 61 6e 64 2e 3c 2f 70 3e 0a  ht operand.</p>.
10930 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20  .<p>^The result 
10940 6f 66 20 61 6e 79 20 62 69 6e 61 72 79 20 6f 70  of any binary op
10950 65 72 61 74 6f 72 20 69 73 20 65 69 74 68 65 72  erator is either
10960 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
10970 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78 63 65 70   or .NULL, excep
10980 74 20 66 6f 72 20 74 68 65 20 5b 4f 70 65 72 61  t for the [Opera
10990 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e  tor ||] concaten
109a0 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 20 77  ation operator w
109b0 68 69 63 68 20 61 6c 77 61 79 73 20 0a 65 76 61  hich always .eva
109c0 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72  luates to either
109d0 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65 78 74 20   NULL or a text 
109e0 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f  value.</p>"..hd_
109f0 66 72 61 67 6d 65 6e 74 20 7b 69 73 69 73 6e 6f  fragment {isisno
10a00 74 7d 20 7b 49 53 20 6f 70 65 72 61 74 6f 72 7d  t} {IS operator}
10a10 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f   {IS NOT operato
10a20 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e  r}..hd_puts "<p>
10a30 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f 72 20 49  ^The [Operator I
10a40 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72  S] and [Operator
10a50 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70 65 72 61   {IS NOT}] opera
10a60 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b  tors work.like [
10a70 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61 6e 64 20  Operator =] and 
10a80 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d 20 65 78  [Operator !=] ex
10a90 63 65 70 74 20 77 68 65 6e 20 6f 6e 65 20 6f 72  cept when one or
10aa0 20 62 6f 74 68 20 6f 66 20 74 68 65 0a 6f 70 65   both of the.ope
10ab0 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 2e 20  rands are NULL. 
10ac0 5e 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 69  ^In this case, i
10ad0 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
10ae0 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  are NULL, then t
10af0 68 65 0a 49 53 20 6f 70 65 72 61 74 6f 72 20 65  he.IS operator e
10b00 76 61 6c 75 61 74 65 73 20 74 6f 20 31 20 28 74  valuates to 1 (t
10b10 72 75 65 29 20 61 6e 64 20 74 68 65 20 49 53 20  rue) and the IS 
10b20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20 65 76 61  NOT operator eva
10b30 6c 75 61 74 65 73 0a 74 6f 20 30 20 28 66 61 6c  luates.to 0 (fal
10b40 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20 6f 70 65  se). ^If one ope
10b50 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 61 6e 64  rand is NULL and
10b60 20 74 68 65 20 6f 74 68 65 72 20 69 73 20 6e 6f   the other is no
10b70 74 2c 20 74 68 65 6e 20 74 68 65 0a 49 53 20 6f  t, then the.IS o
10b80 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65  perator evaluate
10b90 73 20 74 6f 20 30 20 28 66 61 6c 73 65 29 20 61  s to 0 (false) a
10ba0 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20 6f 70  nd the IS NOT op
10bb0 65 72 61 74 6f 72 20 69 73 20 31 20 28 74 72 75  erator is 1 (tru
10bc0 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f 74 20 70  e)..^It is not p
10bd0 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 6e 20 49  ossible for an I
10be0 53 20 6f 72 20 49 53 20 4e 4f 54 20 65 78 70 72  S or IS NOT expr
10bf0 65 73 73 69 6f 6e 20 74 6f 20 65 76 61 6c 75 61  ession to evalua
10c00 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65  te to NULL..^Ope
10c10 72 61 74 6f 72 73 20 5b 4f 70 65 72 61 74 6f 72  rators [Operator
10c20 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61 74   IS] and [Operat
10c30 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 68 61 76  or {IS NOT}] hav
10c40 65 20 74 68 65 20 73 61 6d 65 20 0a 70 72 65 63  e the same .prec
10c50 65 64 65 6e 63 65 20 61 73 20 5b 4f 70 65 72 61  edence as [Opera
10c60 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68  tor =]."..<tcl>h
10c70 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 74 76 61  d_fragment litva
10c80 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20 76 61 6c  lue {literal val
10c90 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69  ue}</tcl>.<h3>Li
10ca0 74 65 72 61 6c 20 56 61 6c 75 65 73 3c 2f 68 33  teral Values</h3
10cb0 3e 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61 6c  >.<p>.^A literal
10cc0 20 76 61 6c 75 65 20 69 73 20 61 20 63 6f 6e 73   value is a cons
10cd0 74 61 6e 74 20 6f 66 20 73 6f 6d 65 20 6b 69 6e  tant of some kin
10ce0 64 2e 0a 5e 4c 69 74 65 72 61 6c 20 76 61 6c 75  d..^Literal valu
10cf0 65 73 20 6d 61 79 20 62 65 20 69 6e 74 65 67 65  es may be intege
10d00 72 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  rs, floating poi
10d10 6e 74 20 6e 75 6d 62 65 72 73 2c 20 73 74 72 69  nt numbers, stri
10d20 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72 20 4e  ngs,.BLOBs, or N
10d30 55 4c 4c 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ULLs.</p>..<p>Th
10d40 65 20 73 79 6e 74 61 78 20 66 6f 72 20 69 6e 74  e syntax for int
10d50 65 67 65 72 20 61 6e 64 20 66 6c 6f 61 74 69 6e  eger and floatin
10d60 67 20 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 73  g point literals
10d70 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 22   (collectively."
10d80 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 73  numeric literals
10d90 22 29 20 69 73 20 73 68 6f 77 6e 20 62 79 20 74  ") is shown by t
10da0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61  he following dia
10db0 67 72 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  gram:</p>..<tcl>
10dc0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6e 75  BubbleDiagram nu
10dd0 6d 65 72 69 63 2d 6c 69 74 65 72 61 6c 3c 2f 74  meric-literal</t
10de0 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61 20  cl>..<p>.^(If a 
10df0 6e 75 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 20  numeric literal 
10e00 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20 70 6f  has a decimal po
10e10 69 6e 74 20 6f 72 20 61 6e 20 65 78 70 6f 6e 65  int or an expone
10e20 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 2c  ntiation.clause,
10e30 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c   then it is a fl
10e40 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
10e50 65 72 61 6c 2e 20 20 4f 74 68 65 72 77 69 73 65  eral.  Otherwise
10e60 20 69 73 20 69 74 20 69 73 20 61 6e 20 0a 69 6e   is it is an .in
10e70 74 65 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e  teger literal.)^
10e80 20 20 5e 54 68 65 20 22 45 22 20 63 68 61 72 61    ^The "E" chara
10e90 63 74 65 72 20 74 68 61 74 20 62 65 67 69 6e 73  cter that begins
10ea0 20 74 68 65 20 65 78 70 6f 6e 65 6e 74 69 61 74   the exponentiat
10eb0 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 66 20 61 20  ion.clause of a 
10ec0 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c  floating point l
10ed0 69 74 65 72 61 6c 20 63 61 6e 20 62 65 20 65 69  iteral can be ei
10ee0 74 68 65 72 20 75 70 70 65 72 20 6f 72 20 6c 6f  ther upper or lo
10ef0 77 65 72 20 63 61 73 65 2e 0a 5e 28 54 68 65 20  wer case..^(The 
10f00 22 2e 22 20 63 68 61 72 61 63 74 65 72 20 69 73  "." character is
10f10 20 61 6c 77 61 79 73 20 75 73 65 64 20 0a 61 73   always used .as
10f20 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69   the decimal poi
10f30 6e 74 20 65 76 65 6e 20 69 66 20 74 68 65 20 6c  nt even if the l
10f40 6f 63 61 6c 65 20 73 65 74 74 69 6e 67 20 73 70  ocale setting sp
10f50 65 63 69 66 69 65 73 20 22 2c 22 20 66 6f 72 0a  ecifies "," for.
10f60 74 68 69 73 20 72 6f 6c 65 20 2d 20 74 68 65 20  this role - the 
10f70 75 73 65 20 6f 66 20 22 2c 22 20 66 6f 72 20 74  use of "," for t
10f80 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
10f90 20 77 6f 75 6c 64 20 72 65 73 75 6c 74 20 69 6e   would result in
10fa0 0a 73 79 6e 74 61 63 74 69 63 20 61 6d 62 69 67  .syntactic ambig
10fb0 75 69 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  uity.)^</p>..<p>
10fc0 20 5e 41 20 73 74 72 69 6e 67 20 63 6f 6e 73 74   ^A string const
10fd0 61 6e 74 20 69 73 20 66 6f 72 6d 65 64 20 62 79  ant is formed by
10fe0 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68 65 0a 73   enclosing the.s
10ff0 74 72 69 6e 67 20 69 6e 20 73 69 6e 67 6c 65 20  tring in single 
11000 71 75 6f 74 65 73 20 28 27 29 2e 20 20 5e 41 20  quotes (').  ^A 
11010 73 69 6e 67 6c 65 20 71 75 6f 74 65 20 77 69 74  single quote wit
11020 68 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 63  hin the string c
11030 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64 20 62 79  an.be encoded by
11040 20 70 75 74 74 69 6e 67 20 74 77 6f 20 73 69 6e   putting two sin
11050 67 6c 65 20 71 75 6f 74 65 73 20 69 6e 20 61 20  gle quotes in a 
11060 72 6f 77 20 2d 20 61 73 20 69 6e 20 50 61 73 63  row - as in Pasc
11070 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65 73 63 61  al..C-style esca
11080 70 65 73 20 75 73 69 6e 67 20 74 68 65 20 62 61  pes using the ba
11090 63 6b 73 6c 61 73 68 20 63 68 61 72 61 63 74 65  ckslash characte
110a0 72 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  r are not suppor
110b0 74 65 64 20 62 65 63 61 75 73 65 0a 74 68 65 79  ted because.they
110c0 20 61 72 65 20 6e 6f 74 20 73 74 61 6e 64 61 72   are not standar
110d0 64 20 53 51 4c 2e 0a 5e 42 4c 4f 42 20 6c 69 74  d SQL..^BLOB lit
110e0 65 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67  erals are string
110f0 20 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69   literals contai
11100 6e 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c  ning hexadecimal
11110 20 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64   data and.preced
11120 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22  ed by a single "
11130 78 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63  x" or "X" charac
11140 74 65 72 2e 20 20 5e 28 46 6f 72 20 65 78 61 6d  ter.  ^(For exam
11150 70 6c 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ple:</p>..<block
11160 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 58 27 35 33  quote><pre>.X'53
11170 35 31 34 43 36 39 37 34 36 35 27 0a 3c 2f 70 72  514C697465'.</pr
11180 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
11190 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61  ^..<p>.^A litera
111a0 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f  l value can also
111b0 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e   be the token "N
111c0 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ULL"..</p>..<tcl
111d0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
111e0 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20  param parameter 
111f0 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e  parameters {boun
11200 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f  d parameter} {bo
11210 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c  und parameters}<
11220 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65  /tcl>.<h3>Parame
11230 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20  ters</h3>.<p>.A 
11240 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70  "variable" or "p
11250 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a  arameter" token.
11260 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63  specifies a plac
11270 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65  eholder in the e
11280 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20  xpression for a 
11290 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66  .value that is f
112a0 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74  illed in at runt
112b0 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ime using the.[s
112c0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
112d0 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
112e0 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43  d()] family of C
112f0 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e  /C++ interfaces.
11300 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20  .Parameters can 
11310 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72  take several for
11320 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ms:.</p>..<block
11330 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
11340 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
11350 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
11360 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e  p"><b>?</b><i>NN
11370 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  N</i></td><td wi
11380 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
11390 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20  td>^(A question 
113a0 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79  mark followed by
113b0 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e   a number <i>NNN
113c0 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f  </i> holds a spo
113d0 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68  t for the.NNN-th
113e0 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e   parameter.  NNN
113f0 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
11400 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d   1 and [SQLITE_M
11410 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
11420 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74  ER].)^.</td>.</t
11430 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
11440 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
11450 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
11460 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
11470 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
11480 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
11490 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
114a0 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63  ed by a number c
114b0 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65 74  reates a paramet
114c0 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72  er.with a number
114d0 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
114e0 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n the largest pa
114f0 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
11500 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
11510 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20  .^If this means 
11520 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  the parameter nu
11530 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20  mber is greater 
11540 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
11550 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
11560 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  ], it is an erro
11570 72 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  r..</td>.</tr>.<
11580 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
11590 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
115a0 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41 41  p"><b>:</b><i>AA
115b0 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77  AA</i></td><td w
115c0 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
115d0 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f 6c  <td>^A colon fol
115e0 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65 6e  lowed by an iden
115f0 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c 64  tifier name hold
11600 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 0a  s a spot for a .
11610 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  [sqlite3_bind_pa
11620 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61 6d  rameter_name|nam
11630 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77 69  ed parameter] wi
11640 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41 41  th the name :AAA
11650 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61 72  A.  .^(Named par
11660 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73 6f  ameters are also
11670 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20 6e   numbered. The n
11680 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 69  umber assigned i
11690 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68  s one greater th
116a0 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20 70  an.the largest p
116b0 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20  arameter number 
116c0 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64  already assigned
116d0 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65 61  .)^ ^If this mea
116e0 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  ns the parameter
116f0 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67 6e  .would be assign
11700 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65 61  ed a number grea
11710 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45  ter than [SQLITE
11720 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
11730 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e 20  MBER], it is.an 
11740 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64 20  error. To avoid 
11750 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69 73  confusion, it is
11760 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20 6d   best to avoid m
11770 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64 20  ixing named and 
11780 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65 74  numbered.paramet
11790 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ers.</td>.</tr>.
117a0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
117b0 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
117c0 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e 41  op"><b>@</b><i>A
117d0 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
117e0 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
117f0 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73 69  .<td>^An "at" si
11800 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  gn works exactly
11810 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20 65   like a colon, e
11820 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6e  xcept that the n
11830 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61 6d  ame of.the param
11840 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73 20  eter created is 
11850 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  @AAAA.</td>.</tr
11860 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  >.<tr>.<td align
11870 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d  ="right" valign=
11880 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c 69  "top"><b>$</b><i
11890 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74  >AAAA</i></td><t
118a0 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
118b0 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61 72  d>.<td>^A dollar
118c0 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20 62  -sign followed b
118d0 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  y an identifier 
118e0 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73 20  name also holds 
118f0 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61 6d  a spot for a nam
11900 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69 74  ed.parameter wit
11910 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41 41  h the name $AAAA
11920 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69 66  .  ^(The identif
11930 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69 73  ier name in this
11940 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75 64   case can includ
11950 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 63  e.one or more oc
11960 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a 3a  currences of "::
11970 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20 65  " and a suffix e
11980 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e 2e  nclosed in "(...
11990 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61 6e  )" containing.an
119a0 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29 5e  y text at all.)^
119b0 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69 73    This syntax is
119c0 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20 76   the form of a v
119d0 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  ariable name in 
119e0 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e  the.[http://www.
119f0 74 63 6c 2e 74 6b 2f 20 7c 20 54 63 6c 20 70 72  tcl.tk/ | Tcl pr
11a00 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61  ogramming langua
11a10 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73 65 6e  ge].  The presen
11a20 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e 74 61  ce.of this synta
11a30 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  x results from t
11a40 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
11a50 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20 61 20  ite is really a 
11a60 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f 6e 5d  .[Tcl extension]
11a70 20 74 68 61 74 20 68 61 73 20 65 73 63 61 70 65   that has escape
11a80 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c 64 2e  d into the wild.
11a90 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
11aa0 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
11ab0 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65 74 65  e>..<p>^Paramete
11ac0 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  rs that are not 
11ad0 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73 20  assigned values 
11ae0 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 62  using.[sqlite3_b
11af0 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c  ind_blob() | sql
11b00 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61 72 65  ite3_bind()] are
11b10 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c 4c   treated.as NULL
11b20 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d  .</p>..<p>^The m
11b30 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
11b40 20 6e 75 6d 62 65 72 20 69 73 20 73 65 74 20 61   number is set a
11b50 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62  t compile-time b
11b60 79 0a 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41  y.the [SQLITE_MA
11b70 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
11b80 52 5d 20 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20  R] macro.  ^(An 
11b90 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61  individual [data
11ba0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
11bb0 5d 0a 44 20 63 61 6e 20 72 65 64 75 63 65 20 69  ].D can reduce i
11bc0 74 73 20 6d 61 78 69 6d 75 6d 20 70 61 72 61 6d  ts maximum param
11bd0 65 74 65 72 20 6e 75 6d 62 65 72 20 62 65 6c 6f  eter number belo
11be0 77 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  w the compile-ti
11bf0 6d 65 20 6d 61 78 69 6d 75 6d 0a 75 73 69 6e 67  me maximum.using
11c00 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69   the [sqlite3_li
11c10 6d 69 74 5d 28 44 2c 20 5b 53 51 4c 49 54 45 5f  mit](D, [SQLITE_
11c20 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e  LIMIT_VARIABLE_N
11c30 55 4d 42 45 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65  UMBER],...) inte
11c40 72 66 61 63 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c  rface.)^.</p>..<
11c50 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
11c60 6c 69 6b 65 20 4c 49 4b 45 20 45 53 43 41 50 45  like LIKE ESCAPE
11c70 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
11c80 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f 70 65  IKE and GLOB ope
11c90 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e  rators</h3>.<p>^
11ca0 54 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f  The LIKE operato
11cb0 72 20 64 6f 65 73 20 61 20 70 61 74 74 65 72 6e  r does a pattern
11cc0 20 6d 61 74 63 68 69 6e 67 20 63 6f 6d 70 61 72   matching compar
11cd0 69 73 6f 6e 2e 20 5e 54 68 65 20 6f 70 65 72 61  ison. ^The opera
11ce0 6e 64 0a 74 6f 20 74 68 65 20 72 69 67 68 74 20  nd.to the right 
11cf0 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65 72  of the LIKE oper
11d00 61 74 6f 72 20 63 6f 6e 74 61 69 6e 73 20 74 68  ator contains th
11d10 65 20 70 61 74 74 65 72 6e 20 61 6e 64 20 74 68  e pattern and th
11d20 65 20 6c 65 66 74 20 68 61 6e 64 0a 6f 70 65 72  e left hand.oper
11d30 61 6e 64 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  and contains the
11d40 20 73 74 72 69 6e 67 20 74 6f 20 6d 61 74 63 68   string to match
11d50 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
11d60 74 65 72 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70  tern...<tcl>hd_p
11d70 75 74 73 20 22 5e 41 20 70 65 72 63 65 6e 74 20  uts "^A percent 
11d80 73 79 6d 62 6f 6c 20 28 5c 22 25 5c 22 29 20 69  symbol (\"%\") i
11d90 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
11da0 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 0a 73  rn matches any.s
11db0 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20  equence of zero 
11dc0 6f 72 20 6d 6f 72 65 20 63 68 61 72 61 63 74 65  or more characte
11dd0 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  rs in the string
11de0 2e 20 20 5e 41 6e 20 75 6e 64 65 72 73 63 6f 72  .  ^An underscor
11df0 65 0a 28 5c 22 5f 5c 22 29 20 69 6e 20 74 68 65  e.(\"_\") in the
11e00 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d 61   LIKE pattern ma
11e10 74 63 68 65 73 20 61 6e 79 20 73 69 6e 67 6c 65  tches any single
11e20 20 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68   character in th
11e30 65 0a 73 74 72 69 6e 67 2e 20 20 5e 28 41 6e 79  e.string.  ^(Any
11e40 20 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72   other character
11e50 20 6d 61 74 63 68 65 73 20 69 74 73 65 6c 66 20   matches itself 
11e60 6f 72 20 69 74 73 20 6c 6f 77 65 72 2f 75 70 70  or its lower/upp
11e70 65 72 20 63 61 73 65 0a 65 71 75 69 76 61 6c 65  er case.equivale
11e80 6e 74 20 28 69 2e 65 2e 20 63 61 73 65 2d 69 6e  nt (i.e. case-in
11e90 73 65 6e 73 69 74 69 76 65 20 6d 61 74 63 68 69  sensitive matchi
11ea0 6e 67 29 2e 29 5e 20 20 28 41 20 62 75 67 3a 20  ng).)^  (A bug: 
11eb0 5e 53 51 4c 69 74 65 20 6f 6e 6c 79 0a 75 6e 64  ^SQLite only.und
11ec0 65 72 73 74 61 6e 64 73 20 75 70 70 65 72 2f 6c  erstands upper/l
11ed0 6f 77 65 72 20 63 61 73 65 20 66 6f 72 20 41 53  ower case for AS
11ee0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 62  CII characters b
11ef0 79 20 64 65 66 61 75 6c 74 2e 20 20 5e 54 68 65  y default.  ^The
11f00 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69  .LIKE operator i
11f10 73 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  s case sensitive
11f20 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72 20   by default for 
11f30 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63 74 65  unicode characte
11f40 72 73 20 74 68 61 74 20 61 72 65 0a 62 65 79 6f  rs that are.beyo
11f50 6e 64 20 74 68 65 20 41 53 43 49 49 20 72 61 6e  nd the ASCII ran
11f60 67 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ge.  For example
11f70 2c 0a 5e 74 68 65 20 65 78 70 72 65 73 73 69 6f  ,.^the expressio
11f80 6e 20 3c 62 3e 27 61 27 26 6e 62 73 70 3b 4c 49  n <b>'a'&nbsp;LI
11f90 4b 45 26 6e 62 73 70 3b 27 41 27 3c 2f 62 3e 0a  KE&nbsp;'A'</b>.
11fa0 69 73 20 54 52 55 45 20 62 75 74 20 3c 62 3e 27  is TRUE but <b>'
11fb0 26 61 65 6c 69 67 3b 27 26 6e 62 73 70 3b 4c 49  &aelig;'&nbsp;LI
11fc0 4b 45 26 6e 62 73 70 3b 27 26 41 45 6c 69 67 3b  KE&nbsp;'&AElig;
11fd0 27 3c 2f 62 3e 20 69 73 20 46 41 4c 53 45 2e 29  '</b> is FALSE.)
11fe0 3c 70 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  <p>"</tcl>..<p>^
11ff0 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20  If the optional 
12000 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73  ESCAPE clause is
12010 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
12020 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f  he expression.fo
12030 6c 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41  llowing the ESCA
12040 50 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20  PE keyword must 
12050 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74  evaluate to a st
12060 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20  ring consisting 
12070 6f 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72  of.a single char
12080 61 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61  acter. ^This cha
12090 72 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73  racter may be us
120a0 65 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70  ed in the LIKE p
120b0 61 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64  attern.to includ
120c0 65 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  e literal percen
120d0 74 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20  t or underscore 
120e0 63 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65  characters. ^The
120f0 20 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65   escape.characte
12100 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  r followed by a 
12110 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28  percent symbol (
12120 25 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28  %), underscore (
12130 5f 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a  _), or a second.
12140 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12150 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72  escape character
12160 20 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20   itself matches 
12170 61 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e  a.literal percen
12180 74 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73  t symbol, unders
12190 63 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c  core, or a singl
121a0 65 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74  e escape charact
121b0 65 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79  er,.respectively
121c0 2e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78  ...<p>^The infix
121d0 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69   LIKE operator i
121e0 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
121f0 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70   calling the.app
12200 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
12210 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b   SQL functions [
12220 6c 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69  like(<i>Y</i>,<i
12230 3e 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b  >X</i>)] or.[lik
12240 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c  e(<i>Y</i>,<i>X<
12250 2f 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f  /i>,<i>Z</i>)]</
12260 61 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  a>.</p>..<p>^The
12270 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63   LIKE operator c
12280 61 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20  an be made case 
12290 73 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20  sensitive using 
122a0 74 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74  the.[case_sensit
122b0 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d  ive_like pragma]
122c0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
122d0 72 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f  ragment glob GLO
122e0 42 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  B</tcl>.<p>^The 
122f0 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73  GLOB operator is
12300 20 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45   similar to LIKE
12310 20 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e   but uses the Un
12320 69 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67  ix.file globbing
12330 20 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20   syntax for its 
12340 77 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73  wildcards.  ^Als
12350 6f 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a  o, GLOB is case.
12360 73 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b  sensitive, unlik
12370 65 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47  e LIKE.  ^Both G
12380 4c 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79  LOB and LIKE may
12390 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a   be preceded by.
123a0 74 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20  the NOT keyword 
123b0 74 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65  to invert the se
123c0 6e 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e  nse of the test.
123d0 20 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f    ^The infix GLO
123e0 42 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69  B .operator is i
123f0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
12400 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  lling the functi
12410 6f 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69  on.[glob(<i>Y</i
12420 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64  >,<i>X</i>)] and
12430 20 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64   can be modified
12440 20 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74   by overriding.t
12450 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  hat function.</p
12460 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
12470 65 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58  ent regexp REGEX
12480 50 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  P</tcl>.<p>^The 
12490 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
124a0 69 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e  is a special syn
124b0 74 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65  tax for the rege
124c0 78 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69  xp().user functi
124d0 6f 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28  on.  ^No regexp(
124e0 29 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  ) user function 
124f0 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65  is defined by de
12500 66 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65  fault.and so use
12510 20 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f   of the REGEXP o
12520 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72  perator will nor
12530 6d 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20  mally result in 
12540 61 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an.error message
12550 2e 20 20 5e 49 66 20 61 20 5b 61 70 70 6c 69 63  .  ^If a [applic
12560 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
12570 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65  L function] name
12580 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64  d "regexp".is ad
12590 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c  ded at run-time,
125a0 20 74 68 61 74 20 66 75 6e 63 74 69 6f 6e 20 77   that function w
125b0 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  ill be called in
125c0 20 6f 72 64 65 72 0a 74 6f 20 69 6d 70 6c 65 6d   order.to implem
125d0 65 6e 74 20 74 68 65 20 52 45 47 45 58 50 20 6f  ent the REGEXP o
125e0 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74  perator.</p>..<t
125f0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6d  cl>hd_fragment m
12600 61 74 63 68 20 4d 41 54 43 48 3c 2f 74 63 6c 3e  atch MATCH</tcl>
12610 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43 48 20 6f  .<p>^The MATCH o
12620 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
12630 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
12640 74 68 65 20 6d 61 74 63 68 28 29 0a 61 70 70 6c  the match().appl
12650 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
12660 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54 68 65 20  function.  ^The 
12670 64 65 66 61 75 6c 74 20 6d 61 74 63 68 28 29 20  default match() 
12680 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
12690 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65 73 20 61  ntation.raises a
126a0 6e 20 65 78 63 65 70 74 69 6f 6e 20 61 6e 64 20  n exception and 
126b0 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 75 73  is not really us
126c0 65 66 75 6c 20 66 6f 72 20 61 6e 79 74 68 69 6e  eful for anythin
126d0 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e 73 69 6f  g..^But extensio
126e0 6e 73 20 63 61 6e 20 6f 76 65 72 72 69 64 65 20  ns can override 
126f0 74 68 65 20 6d 61 74 63 68 28 29 20 66 75 6e 63  the match() func
12700 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72 65 0a 68  tion with more.h
12710 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70  elpful logic.</p
12720 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
12730 65 6e 74 20 62 65 74 77 65 65 6e 20 42 45 54 57  ent between BETW
12740 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  EEN</tcl>.<h3>Th
12750 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
12760 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 54 68 65  or</h3>.<p>^(The
12770 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f   BETWEEN operato
12780 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c 79 20 65  r is logically e
12790 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 61 20 70  quivalent to a p
127a0 61 69 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  air of compariso
127b0 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62  ns.."<i>x</i> <b
127c0 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e  >BETWEEN</b> <i>
127d0 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e  y</i> <b>AND</b>
127e0 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73 20 0a 65   <i>z</i>" is .e
127f0 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 0a 22 3c  quivalent to ."<
12800 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c  i>x</i><b>&gt;=<
12810 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41  /b><i>y</i> <b>A
12820 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c  ND</b> <i>x</i><
12830 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c  b>&lt;=</b><i>z<
12840 2f 69 3e 22 20 65 78 63 65 70 74 0a 74 68 61 74  /i>" except.that
12850 20 77 69 74 68 20 42 45 54 57 45 45 4e 2c 20 74   with BETWEEN, t
12860 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72  he <i>x</i> expr
12870 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 65  ession is only e
12880 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 2e 29 5e  valuated once.)^
12890 0a 5e 54 68 65 20 70 72 65 63 65 64 65 6e 63 65  .^The precedence
128a0 20 6f 66 20 74 68 65 20 42 45 54 57 45 45 4e 20   of the BETWEEN 
128b0 6f 70 65 72 61 74 6f 72 20 69 73 20 74 68 65 20  operator is the 
128c0 73 61 6d 65 20 61 73 20 74 68 65 20 70 72 65 63  same as the prec
128d0 65 64 65 6e 63 65 0a 61 73 20 6f 70 65 72 61 74  edence.as operat
128e0 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e  ors <b>==</b> an
128f0 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20  d <b>!=</b> and 
12900 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61 6e 64 20  <b>LIKE</b> and 
12910 67 72 6f 75 70 73 20 6c 65 66 74 20 74 6f 20 72  groups left to r
12920 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ight...<tcl>hd_f
12930 72 61 67 6d 65 6e 74 20 63 61 73 65 20 7b 43 41  ragment case {CA
12940 53 45 20 65 78 70 72 65 73 73 69 6f 6e 7d 3c 2f  SE expression}</
12950 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 43 41 53  tcl>.<h3>The CAS
12960 45 20 65 78 70 72 65 73 73 69 6f 6e 3c 2f 68 33  E expression</h3
12970 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65 78 70 72  >.<p>A CASE expr
12980 65 73 73 69 6f 6e 20 73 65 72 76 65 73 20 61 20  ession serves a 
12990 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20 74 6f 20  role similar to 
129a0 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20 69 6e 20  IF-THEN-ELSE in 
129b0 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d 6d 69 6e  other.programmin
129c0 67 20 6c 61 6e 67 75 61 67 65 73 2e 20 20 0a 0a  g languages.  ..
129d0 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
129e0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
129f0 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
12a00 6e 20 74 68 65 20 43 41 53 45 20 6b 65 79 77 6f  n the CASE keywo
12a10 72 64 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74  rd and the.first
12a20 20 57 48 45 4e 20 6b 65 79 77 6f 72 64 20 69 73   WHEN keyword is
12a30 20 63 61 6c 6c 65 64 20 74 68 65 20 22 62 61 73   called the "bas
12a40 65 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e  e" expression. ^
12a50 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 62 61  There are two ba
12a60 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20 74 68 65  sic forms.of the
12a70 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
12a80 3a 20 74 68 6f 73 65 20 77 69 74 68 20 61 20 62  : those with a b
12a90 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ase expression a
12aa0 6e 64 20 74 68 6f 73 65 20 77 69 74 68 6f 75 74  nd those without
12ab0 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43 41 53 45  ...<p>^In a CASE
12ac0 20 77 69 74 68 6f 75 74 20 61 20 62 61 73 65 20   without a base 
12ad0 65 78 70 72 65 73 73 69 6f 6e 2c 20 65 61 63 68  expression, each
12ae0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
12af0 20 69 73 20 65 76 61 6c 75 61 74 65 64 0a 61 6e   is evaluated.an
12b00 64 20 74 68 65 20 72 65 73 75 6c 74 20 74 72 65  d the result tre
12b10 61 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65 61  ated as a boolea
12b20 6e 2c 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  n, starting with
12b30 20 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 61 6e   the leftmost an
12b40 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a 74 6f 20  d continuing.to 
12b50 74 68 65 20 72 69 67 68 74 2e 20 5e 54 68 65 20  the right. ^The 
12b60 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
12b70 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
12b80 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20   the evaluation 
12b90 6f 66 20 74 68 65 20 54 48 45 4e 0a 65 78 70 72  of the THEN.expr
12ba0 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72 72  ession that corr
12bb0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 66  esponds to the f
12bc0 69 72 73 74 20 57 48 45 4e 20 65 78 70 72 65 73  irst WHEN expres
12bd0 73 69 6f 6e 20 74 68 61 74 20 65 76 61 6c 75 61  sion that evalua
12be0 74 65 73 20 74 6f 0a 74 72 75 65 2e 20 5e 4f 72  tes to.true. ^Or
12bf0 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  , if none of the
12c00 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
12c10 73 20 65 76 61 6c 75 61 74 65 20 74 6f 20 74 72  s evaluate to tr
12c20 75 65 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ue, the result o
12c30 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
12c40 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
12c50 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68  , if any. ^If th
12c60 65 72 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65  ere is no ELSE e
12c70 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f  xpression and.no
12c80 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65  ne of the WHEN e
12c90 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74  xpressions are t
12ca0 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6f 76  rue, then the ov
12cb0 65 72 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20  erall result is 
12cc0 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c  NULL...<p>^A NUL
12cd0 4c 20 72 65 73 75 6c 74 20 69 73 20 63 6f 6e 73  L result is cons
12ce0 69 64 65 72 65 64 20 75 6e 74 72 75 65 20 77 68  idered untrue wh
12cf0 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 57 48  en evaluating WH
12d00 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49  EN terms...<p>^I
12d10 6e 20 61 20 43 41 53 45 20 77 69 74 68 20 61 20  n a CASE with a 
12d20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
12d30 20 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73   the base expres
12d40 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
12d50 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61 6e 64 20  d just.once and 
12d60 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 63 6f  the result is co
12d70 6d 70 61 72 65 64 20 61 67 61 69 6e 73 74 20 74  mpared against t
12d80 68 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  he evaluation of
12d90 20 65 61 63 68 20 57 48 45 4e 20 0a 65 78 70 72   each WHEN .expr
12da0 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c 65 66 74  ession from left
12db0 20 74 6f 20 72 69 67 68 74 2e 20 5e 54 68 65 20   to right. ^The 
12dc0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41  result of the CA
12dd0 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  SE expression is
12de0 20 74 68 65 20 0a 65 76 61 6c 75 61 74 69 6f 6e   the .evaluation
12df0 20 6f 66 20 74 68 65 20 54 48 45 4e 20 65 78 70   of the THEN exp
12e00 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63 6f 72  ression that cor
12e10 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
12e20 66 69 72 73 74 20 57 48 45 4e 0a 65 78 70 72 65  first WHEN.expre
12e30 73 73 69 6f 6e 20 66 6f 72 20 77 68 69 63 68 20  ssion for which 
12e40 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
12e50 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66 20  s true. ^Or, if 
12e60 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45 4e  none of the WHEN
12e70 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61  .expressions eva
12e80 6c 75 61 74 65 20 74 6f 20 61 20 76 61 6c 75 65  luate to a value
12e90 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 62 61   equal to the ba
12ea0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74  se expression, t
12eb0 68 65 20 72 65 73 75 6c 74 0a 6f 66 20 65 76 61  he result.of eva
12ec0 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53 45  luating the ELSE
12ed0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66 20   expression, if 
12ee0 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20 69  any. ^If there i
12ef0 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65 73  s no ELSE expres
12f00 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66  sion and.none of
12f10 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73   the WHEN expres
12f20 73 69 6f 6e 73 20 70 72 6f 64 75 63 65 20 61 20  sions produce a 
12f30 72 65 73 75 6c 74 20 65 71 75 61 6c 20 74 6f 20  result equal to 
12f40 74 68 65 20 62 61 73 65 20 65 78 70 72 65 73 73  the base express
12f50 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72 61 6c 6c  ion,.the overall
12f60 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
12f70 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f 6d 70 61  ..<p>^When compa
12f80 72 69 6e 67 20 61 20 62 61 73 65 20 65 78 70 72  ring a base expr
12f90 65 73 73 69 6f 6e 20 61 67 61 69 6e 73 74 20 61  ession against a
12fa0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
12fb0 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f 6c 6c 61  , the same.colla
12fc0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 61  ting sequence, a
12fd0 66 66 69 6e 69 74 79 2c 20 61 6e 64 20 4e 55 4c  ffinity, and NUL
12fe0 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75 6c 65 73  L-handling rules
12ff0 20 61 70 70 6c 79 20 61 73 20 69 66 20 74 68 65   apply as if the
13000 0a 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e  .base expression
13010 20 61 6e 64 20 57 48 45 4e 20 65 78 70 72 65 73   and WHEN expres
13020 73 69 6f 6e 20 61 72 65 20 72 65 73 70 65 63 74  sion are respect
13030 69 76 65 6c 79 20 74 68 65 20 6c 65 66 74 2d 20  ively the left- 
13040 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f  and.right-hand o
13050 70 65 72 61 6e 64 73 20 6f 66 20 61 6e 20 3c 62  perands of an <b
13060 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67  ig><b>=</b></big
13070 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f 70 3e 20  > operator.</p> 
13080 5e 49 66 20 74 68 65 20 62 61 73 65 20 0a 65 78  ^If the base .ex
13090 70 72 65 73 73 69 6f 6e 20 69 73 20 4e 55 4c 4c  pression is NULL
130a0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
130b0 20 6f 66 20 74 68 65 20 43 41 53 45 20 69 73 20   of the CASE is 
130c0 61 6c 77 61 79 73 20 74 68 65 20 72 65 73 75 6c  always the resul
130d0 74 20 0a 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  t .of evaluating
130e0 20 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73   the ELSE expres
130f0 73 69 6f 6e 20 69 66 20 69 74 20 65 78 69 73 74  sion if it exist
13100 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66 20 69 74  s, or NULL if it
13110 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e   does not...<p>^
13120 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66 20 74 68  Both forms of th
13130 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
13140 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f 72 20 73  n use lazy, or s
13150 68 6f 72 74 2d 63 69 72 63 75 69 74 2c 20 0a 65  hort-circuit, .e
13160 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e  valuation...<p>^
13170 28 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65 72  (The only differ
13180 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65  ence between the
13190 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20 43   following two C
131a0 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ASE expressions 
131b0 69 73 20 74 68 61 74 20 0a 74 68 65 20 3c 69 3e  is that .the <i>
131c0 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69 6f 6e  x</i> expression
131d0 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 65 78   is evaluated ex
131e0 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e 20 74 68  actly once in th
131f0 65 20 66 69 72 73 74 20 65 78 61 6d 70 6c 65 20  e first example 
13200 62 75 74 20 0a 6d 69 67 68 74 20 62 65 20 65 76  but .might be ev
13210 61 6c 75 61 74 65 64 20 6d 75 6c 74 69 70 6c 65  aluated multiple
13220 20 74 69 6d 65 73 20 69 6e 20 74 68 65 20 73 65   times in the se
13230 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e  cond:..<ul><pre>
13240 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57 48 45 4e  .<li>CASE x WHEN
13250 20 77 31 20 54 48 45 4e 20 72 31 20 57 48 45 4e   w1 THEN r1 WHEN
13260 20 77 32 20 54 48 45 4e 20 72 32 20 45 4c 53 45   w2 THEN r2 ELSE
13270 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43 41 53 45   r3 END.<li>CASE
13280 20 57 48 45 4e 20 78 3d 77 31 20 54 48 45 4e 20   WHEN x=w1 THEN 
13290 72 31 20 57 48 45 4e 20 78 3d 77 32 20 54 48 45  r1 WHEN x=w2 THE
132a0 4e 20 72 32 20 45 4c 53 45 20 72 33 20 45 4e 44  N r2 ELSE r3 END
132b0 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a  .</pre></ul>)^..
132c0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
132d0 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f 70 65 72  t in_op {IN oper
132e0 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70  ator} {NOT IN op
132f0 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  erator}</tcl>.<h
13300 33 3e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f 54  3>The IN and NOT
13310 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68   IN operators</h
13320 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 20 61 6e  3>.<p>^The IN an
13330 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f  d NOT IN operato
13340 72 73 20 74 61 6b 65 20 61 20 73 69 6e 67 6c 65  rs take a single
13350 20 73 63 61 6c 61 72 20 6f 70 65 72 61 6e 64 20   scalar operand 
13360 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e 64 20  on the.left and 
13370 61 20 76 65 63 74 6f 72 20 6f 70 65 72 61 6e 64  a vector operand
13380 20 6f 6e 20 74 68 65 20 72 69 67 68 74 0a 66 6f   on the right.fo
13390 72 6d 65 64 20 62 79 20 61 6e 20 65 78 70 6c 69  rmed by an expli
133a0 63 69 74 20 6c 69 73 74 20 6f 66 20 7a 65 72 6f  cit list of zero
133b0 20 6f 72 20 6d 6f 72 65 20 73 63 61 6c 61 72 73   or more scalars
133c0 20 6f 72 20 62 79 20 61 20 0a 73 69 6e 67 6c 65   or by a .single
133d0 20 73 75 62 71 75 65 72 79 2e 0a 5e 57 68 65 6e   subquery..^When
133e0 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
133f0 6e 64 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e  nd of an IN or N
13400 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69  OT IN operator i
13410 73 20 61 20 73 75 62 71 75 65 72 79 2c 20 74 68  s a subquery, th
13420 65 0a 73 75 62 71 75 65 72 79 20 6d 75 73 74 20  e.subquery must 
13430 68 61 76 65 20 61 20 73 69 6e 67 6c 65 20 72 65  have a single re
13440 73 75 6c 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 57 68  sult column..^Wh
13450 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f 70 65  en the right ope
13460 72 61 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79  rand is an empty
13470 20 73 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74   set, the result
13480 20 6f 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20   of IN is false 
13490 61 6e 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f  and the.result o
134a0 66 20 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65  f NOT IN is true
134b0 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
134c0 74 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64  the left operand
134d0 20 61 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65   and even if the
134e0 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73  .left operand is
134f0 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 72 65 73   NULL..^(The res
13500 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ult of an IN or 
13510 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
13520 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
13530 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 6d   the following.m
13540 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72 3e  atrix:..<center>
13550 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
13560 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74 20  >.<tr>.<th>Left 
13570 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20 4e  operand <br>is N
13580 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70  ULL.<th>Right op
13590 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61 69  erand <br>contai
135a0 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68  ns NULL.<th>Righ
135b0 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73  t operand <br>is
135c0 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c 74   an empty set.<t
135d0 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20 66  h>Left operand f
135e0 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e 20  ound <br>within 
135f0 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c 74  right operand.<t
13600 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e  h>Result of <br>
13610 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68 3e  IN operator.<th>
13620 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e 4f  Result of <br>NO
13630 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74  T IN operator.<t
13640 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
13650 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
13660 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
13670 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13680 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
13690 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
136a0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
136b0 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  lse.<td align="c
136c0 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e  enter">true.<tr>
136d0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
136e0 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
136f0 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
13700 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
13710 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73  ign="center">yes
13720 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
13730 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
13740 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a  ="center">false.
13750 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
13760 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64  r">true.<tr>.<td
13770 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
13780 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
13790 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d  nter">does not m
137a0 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d  atter.<td align=
137b0 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
137c0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79  align="center">y
137d0 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  es.<td align="ce
137e0 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20 61  nter">true.<td a
137f0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61  lign="center">fa
13800 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69  lse.<tr>.<td ali
13810 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
13820 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
13830 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d  ">yes.<td align=
13840 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
13850 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e  align="center">n
13860 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  o.<td align="cen
13870 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61 6c  ter">NULL.<td al
13880 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
13890 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  L.<tr>.<td align
138a0 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74  ="center">yes.<t
138b0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
138c0 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72  >does not matter
138d0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
138e0 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e  er">no.<td align
138f0 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e  ="center">does n
13900 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c  ot matter.<td al
13910 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55 4c  ign="center">NUL
13920 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  L.<td align="cen
13930 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62 6c  ter">NULL.</tabl
13940 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
13950 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53 51  <p>^Note that SQ
13960 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65 20  Lite allows the 
13970 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69  parenthesized li
13980 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61 6c  st of scalar val
13990 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68 74  ues on.the right
139a0 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
139b0 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
139c0 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e 20  erator to be an 
139d0 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a 6d  empty list but.m
139e0 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61  ost other SQL da
139f0 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65 20  tabase database 
13a00 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65 20  engines and the 
13a10 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20 72  SQL92 standard r
13a20 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74 20  equire.the list 
13a30 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c 65  to contain at le
13a40 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74 2e  ast one element.
13a50 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
13a60 61 67 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 45 58  agment in_op {EX
13a70 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b  ISTS operator} {
13a80 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72 61  NOT EXISTS opera
13a90 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  tor}</tcl>.<h3>T
13aa0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
13ab0 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  or</h3>..<p>^The
13ac0 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
13ad0 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74 65   always evaluate
13ae0 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  s to one of the 
13af0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 30  integer values 0
13b00 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78 65   .and 1. ^If exe
13b10 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
13b20 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63  T statement spec
13b30 69 66 69 65 64 20 61 73 20 74 68 65 20 72 69 67  ified as the rig
13b40 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e 64  ht-hand .operand
13b50 20 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f   of the EXISTS o
13b60 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72 65  perator would re
13b70 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  turn one or more
13b80 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 0a   rows, then the.
13b90 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
13ba0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e 20  evaluates to 1. 
13bb0 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68  ^If executing th
13bc0 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20 72  e SELECT would r
13bd0 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61 74  eturn.no rows at
13be0 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20 45   all, then the E
13bf0 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65  XISTS operator e
13c00 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20 0a  valuates to 0. .
13c10 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20  .<p>^The number 
13c20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65 61  of columns in ea
13c30 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20  ch row returned 
13c40 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
13c50 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79 29  atement.(if any)
13c60 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66 69   and the specifi
13c70 63 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  c values returne
13c80 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63 74  d have no effect
13c90 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 0a   on the results.
13ca0 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f 70  of the EXISTS op
13cb0 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72 74  erator. ^In part
13cc0 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f 6e  icular, rows con
13cd0 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61 6c  taining NULL val
13ce0 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e 64  ues are.not hand
13cf0 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72 65 6e  led any differen
13d00 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77 69  tly from rows wi
13d10 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75 65  thout NULL value
13d20 73 2e 0a 0a 3c 68 33 3e 53 63 61 6c 61 72 20 53  s...<h3>Scalar S
13d30 75 62 71 75 65 72 69 65 73 3c 2f 68 33 3e 0a 0a  ubqueries</h3>..
13d40 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54 5d 20 73  <p>^A [SELECT] s
13d50 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c 6f 73 65  tatement enclose
13d60 64 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  d in parentheses
13d70 20 6d 61 79 20 61 70 70 65 61 72 20 61 73 20 61   may appear as a
13d80 20 73 63 61 6c 61 72 0a 71 75 61 6e 74 69 74 79   scalar.quantity
13d90 2e 20 5e 41 20 5b 53 45 4c 45 43 54 5d 20 75 73  . ^A [SELECT] us
13da0 65 64 20 61 73 20 61 20 73 63 61 6c 61 72 20 71  ed as a scalar q
13db0 75 61 6e 74 69 74 79 20 6d 75 73 74 20 72 65 74  uantity must ret
13dc0 75 72 6e 20 61 20 72 65 73 75 6c 74 20 73 65 74  urn a result set
13dd0 0a 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63  .with a single c
13de0 6f 6c 75 6d 6e 2e 20 5e 54 68 65 20 72 65 73 75  olumn. ^The resu
13df0 6c 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  lt of the expres
13e00 73 69 6f 6e 20 69 73 20 74 68 65 20 76 61 6c 75  sion is the valu
13e10 65 20 6f 66 20 74 68 65 0a 6f 6e 6c 79 20 63 6f  e of the.only co
13e20 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 69 72 73  lumn in the firs
13e30 74 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20 62  t row returned b
13e40 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
13e50 74 65 6d 65 6e 74 2e 20 5e 49 66 20 74 68 65 20  tement. ^If the 
13e60 53 45 4c 45 43 54 20 0a 79 69 65 6c 64 73 20 6d  SELECT .yields m
13e70 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 65 73  ore than one res
13e80 75 6c 74 20 72 6f 77 2c 20 61 6c 6c 20 72 6f 77  ult row, all row
13e90 73 20 61 66 74 65 72 20 74 68 65 20 66 69 72 73  s after the firs
13ea0 74 20 61 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e  t are ignored. ^
13eb0 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 79 69  If.the SELECT yi
13ec0 65 6c 64 73 20 6e 6f 20 72 6f 77 73 2c 20 74 68  elds no rows, th
13ed0 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  en the value of 
13ee0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13ef0 73 20 4e 55 4c 4c 2e 0a 5e 28 54 68 65 20 4c 49  s NULL..^(The LI
13f00 4d 49 54 20 6f 66 20 61 20 73 63 61 6c 61 72 20  MIT of a scalar 
13f10 73 75 62 71 75 65 72 79 20 69 73 20 61 6c 77 61  subquery is alwa
13f20 79 73 20 31 2e 0a 41 6e 79 20 6f 74 68 65 72 20  ys 1..Any other 
13f30 4c 49 4d 49 54 20 76 61 6c 75 65 20 67 69 76 65  LIMIT value give
13f40 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 74 65 78  n in the SQL tex
13f50 74 20 69 73 20 69 67 6e 6f 72 65 64 2e 29 5e 0a  t is ignored.)^.
13f60 0a 3c 70 3e 5e 41 6c 6c 20 74 79 70 65 73 20 6f  .<p>^All types o
13f70 66 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  f [SELECT] state
13f80 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 20  ment, including 
13f90 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 63 6f  aggregate and co
13fa0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 0a 71 75  mpound SELECT.qu
13fb0 65 72 69 65 73 20 28 71 75 65 72 69 65 73 20 77  eries (queries w
13fc0 69 74 68 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b  ith keywords lik
13fd0 65 20 55 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50  e UNION or EXCEP
13fe0 54 29 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 61  T) are allowed a
13ff0 73 20 73 63 61 6c 61 72 0a 73 75 62 71 75 65 72  s scalar.subquer
14000 69 65 73 2e 0a 0a 3c 68 33 3e 54 61 62 6c 65 20  ies...<h3>Table 
14010 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68 33  Column Names</h3
14020 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20  >..<p>^A column 
14030 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79 20  name can be any 
14040 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65 66  of the names def
14050 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52 45  ined in the [CRE
14060 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65  ATE TABLE].state
14070 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20 74  ment or one of t
14080 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70 65  he following spe
14090 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73  cial identifiers
140a0 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e 22  : "<b>ROWID</b>"
140b0 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c 20  ,."<b>OID</b>", 
140c0 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c 2f  or "<b>_ROWID_</
140d0 62 3e 22 2e 0a 5e 54 68 65 73 65 20 73 70 65 63  b>"..^These spec
140e0 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20  ial identifiers 
140f0 61 6c 6c 20 64 65 73 63 72 69 62 65 20 74 68 65  all describe the
14100 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20  .unique integer 
14110 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64 5d  key (the [rowid]
14120 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
14130 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66 20  h every .row of 
14140 65 76 65 72 79 20 74 61 62 6c 65 2e 0a 5e 54 68  every table..^Th
14150 65 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69  e special identi
14160 66 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72  fiers only refer
14170 20 74 6f 20 74 68 65 20 72 6f 77 20 6b 65 79 20   to the row key 
14180 69 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  if the [CREATE T
14190 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20  ABLE].statement 
141a0 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
141b0 61 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69  a real column wi
141c0 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  th the same name
141d0 2e 0a 5e 54 68 65 20 72 6f 77 69 64 20 63 61 6e  ..^The rowid can
141e0 20 62 65 20 75 73 65 64 20 61 6e 79 77 68 65 72   be used anywher
141f0 65 20 61 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75  e a regular.colu
14200 6d 6e 20 63 61 6e 20 62 65 20 75 73 65 64 2e 3c  mn can be used.<
14210 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45  /p>..<p>^A [SELE
14220 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73  CT] statement us
14230 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20 73  ed as either a s
14240 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 6f  calar subquery o
14250 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74 2d  r as the .right-
14260 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20  hand operand of 
14270 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72  an IN, NOT IN or
14280 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73 69   EXISTS expressi
14290 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a  on may contain .
142a0 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63 6f  references to co
142b0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75 74  lumns in the out
142c0 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20 61  er query. Such a
142d0 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e 6f   subquery is kno
142e0 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74  wn as.a correlat
142f0 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41 20  ed subquery. ^A 
14300 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
14310 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61 74  ery is reevaluat
14320 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74 73  ed each time.its
14330 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75 69   result is requi
14340 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65  red. ^An uncorre
14350 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
14360 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79  s evaluated only
14370 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72 65   once.and the re
14380 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20 6e  sult reused as n
14390 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e  ecessary...<tcl>
143a0 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74  hd_fragment cast
143b0 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65  expr {CAST expre
143c0 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ssion}</tcl>.<h3
143d0 3e 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  >CAST expression
143e0 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53  s</h3>..<p>A CAS
143f0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  T expression is 
14400 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 20  used to convert 
14410 74 68 65 20 76 61 6c 75 65 20 6f 66 20 26 6c 74  the value of &lt
14420 3b 65 78 70 72 26 67 74 3b 20 74 6f 20 0a 61 20  ;expr&gt; to .a 
14430 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72 61  different [stora
14440 67 65 20 63 6c 61 73 73 5d 20 69 6e 20 61 20 73  ge class] in a s
14450 69 6d 69 6c 61 72 20 77 61 79 20 74 6f 20 74 68  imilar way to th
14460 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61  e conversion tha
14470 74 20 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68  t takes.place wh
14480 65 6e 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66  en a [column aff
14490 69 6e 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65  inity] is applie
144a0 64 20 74 6f 20 61 20 76 61 6c 75 65 2e 20 5e 41  d to a value. ^A
144b0 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20 61 20  pplication of a 
144c0 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f 6e 20  CAST.expression 
144d0 69 73 20 64 69 66 66 65 72 65 6e 74 20 74 6f 20  is different to 
144e0 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20 61  application of a
144f0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
14500 2c 20 61 73 0a 77 69 74 68 20 61 20 43 41 53 54  , as.with a CAST
14510 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 65 20   expression the 
14520 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 63 6f  storage class co
14530 6e 76 65 72 73 69 6f 6e 20 69 73 20 66 6f 72 63  nversion is forc
14540 65 64 20 65 76 65 6e 20 0a 69 66 20 69 74 20 69  ed even .if it i
14550 73 20 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 72  s lossy and irrr
14560 65 76 65 72 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e  eversible...<p>^
14570 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
14580 26 6c 74 3b 65 78 70 72 26 67 74 3b 20 69 73 20  &lt;expr&gt; is 
14590 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 72  NULL, then the r
145a0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53  esult of the CAS
145b0 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  T.expression is 
145c0 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e 4f 74 68 65  also NULL. ^Othe
145d0 72 77 69 73 65 2c 20 74 68 65 20 73 74 6f 72 61  rwise, the stora
145e0 67 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20  ge class of the 
145f0 72 65 73 75 6c 74 20 76 61 6c 75 65 0a 69 73 20  result value.is 
14600 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70  determined by ap
14610 70 6c 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65  plying the [rule
14620 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e  s for determinin
14630 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  g column affinit
14640 79 5d 20 74 6f 0a 74 68 65 20 26 6c 74 3b 74 79  y] to.the &lt;ty
14650 70 65 2d 6e 61 6d 65 26 67 74 3b 20 73 70 65 63  pe-name&gt; spec
14660 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
14670 20 74 68 65 20 43 41 53 54 20 65 78 70 72 65 73   the CAST expres
14680 73 69 6f 6e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f  sion...<table bo
14690 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c  rder=1>.<tr>.  <
146a0 74 68 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20  th> Affinity of 
146b0 26 6c 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74  &lt;type-name&gt
146c0 3b 0a 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73  ;.  <th> Convers
146d0 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c  ion Processing.<
146e0 74 72 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20  tr>.  <td> NONE 
146f0 0a 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67  .  <td> ^Casting
14700 20 61 20 76 61 6c 75 65 20 74 6f 20 61 20 26 6c   a value to a &l
14710 74 3b 74 79 70 65 2d 6e 61 6d 65 26 67 74 3b 20  t;type-name&gt; 
14720 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79  with no affinity
14730 20 63 61 75 73 65 73 20 74 68 65 20 76 61 6c 75   causes the valu
14740 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e 76 65 72  e to.  be conver
14750 74 65 64 20 69 6e 74 6f 20 61 20 42 4c 4f 42 2e  ted into a BLOB.
14760 20 20 5e 43 61 73 74 69 6e 67 20 74 6f 20 61 20    ^Casting to a 
14770 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73 20 6f 66  BLOB consists of
14780 20 66 69 72 73 74 20 63 61 73 74 69 6e 67 0a 20   first casting. 
14790 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 54 45   the value to TE
147a0 58 54 20 69 6e 20 74 68 65 20 5b 65 6e 63 6f 64  XT in the [encod
147b0 69 6e 67 5d 20 6f 66 20 74 68 65 20 64 61 74 61  ing] of the data
147c0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  base connection,
147d0 20 74 68 65 6e 0a 20 20 69 6e 74 65 72 70 72 65   then.  interpre
147e0 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 69  ting the resulti
147f0 6e 67 20 62 79 74 65 20 73 65 71 75 65 6e 63 65  ng byte sequence
14800 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65   as a BLOB inste
14810 61 64 20 6f 66 20 61 73 20 54 45 58 54 2e 0a 0a  ad of as TEXT...
14820 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54 45 58 54  <tr>.  <td> TEXT
14830 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63 61 73 74  .  <td> ^To cast
14840 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f   a BLOB value to
14850 20 54 45 58 54 2c 20 74 68 65 20 73 65 71 75 65   TEXT, the seque
14860 6e 63 65 20 6f 66 20 62 79 74 65 73 20 74 68 61  nce of bytes tha
14870 74 20 6d 61 6b 65 20 75 70 20 74 68 65 0a 20 20  t make up the.  
14880 42 4c 4f 42 20 69 73 20 69 6e 74 65 72 70 72 65  BLOB is interpre
14890 74 65 64 20 61 73 20 74 65 78 74 20 65 6e 63 6f  ted as text enco
148a0 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 64 61  ded using the da
148b0 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 2e  tabase encoding.
148c0 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61 73 74 69  .  <p>.   ^Casti
148d0 6e 67 20 61 6e 20 49 4e 54 45 47 45 52 20 6f 72  ng an INTEGER or
148e0 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f   REAL value into
148f0 20 54 45 58 54 20 72 65 6e 64 65 72 73 20 74 68   TEXT renders th
14900 65 20 76 61 6c 75 65 20 61 73 20 69 66 20 76 69  e value as if vi
14910 61 20 0a 20 20 20 20 5b 73 71 6c 69 74 65 33 5f  a .    [sqlite3_
14920 73 6e 70 72 69 6e 74 66 28 29 5d 20 65 78 63 65  snprintf()] exce
14930 70 74 20 74 68 61 74 20 74 68 65 20 72 65 73 75  pt that the resu
14940 6c 74 69 6e 67 20 54 45 58 54 20 75 73 65 73 20  lting TEXT uses 
14950 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
14960 66 0a 20 20 20 20 74 68 65 20 64 61 74 61 62 61  f.    the databa
14970 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a  se connection...
14980 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52 45 41 4c  <tr>.  <td> REAL
14990 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20 63 61  .  <td> ^When ca
149a0 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76 61 6c  sting a BLOB val
149b0 75 65 20 74 6f 20 61 20 52 45 41 4c 2c 20 74 68  ue to a REAL, th
149c0 65 20 76 61 6c 75 65 20 69 73 20 66 69 72 73 74  e value is first
149d0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 0a 20 20   converted to.  
149e0 20 20 20 20 20 20 54 45 58 54 2e 0a 20 20 20 20        TEXT..    
149f0 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74     <p>^When cast
14a00 69 6e 67 20 61 20 54 45 58 54 20 76 61 6c 75 65  ing a TEXT value
14a10 20 74 6f 20 52 45 41 4c 2c 20 74 68 65 20 6c 6f   to REAL, the lo
14a20 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
14a30 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
14a40 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
14a50 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
14a60 65 64 20 61 73 20 61 20 72 65 61 6c 20 6e 75 6d  ed as a real num
14a70 62 65 72 20 69 73 20 65 78 74 72 61 63 74 65 64  ber is extracted
14a80 20 66 72 6f 6d 0a 20 20 20 20 20 20 20 20 74 68   from.        th
14a90 65 20 54 45 58 54 20 76 61 6c 75 65 20 61 6e 64  e TEXT value and
14aa0 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 69   the remainder i
14ab0 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61  gnored. ^Any lea
14ac0 64 69 6e 67 20 73 70 61 63 65 73 20 69 6e 20 74  ding spaces in t
14ad0 68 65 0a 20 20 20 20 20 20 20 20 54 45 58 54 20  he.        TEXT 
14ae0 76 61 6c 75 65 20 61 72 65 20 69 67 6e 6f 72 65  value are ignore
14af0 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 67 69 6e  d when convergin
14b00 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 52  g from TEXT to R
14b10 45 41 4c 2e 20 5e 28 49 66 20 74 68 65 72 65 20  EAL. ^(If there 
14b20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 72  is.        no pr
14b30 65 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65  efix that can be
14b40 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
14b50 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 74  a real number, t
14b60 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
14b70 0a 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 73  .        convers
14b80 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e 0a 0a 3c  ion is 0.0.)^..<
14b90 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e 54 45 47  tr>.  <td> INTEG
14ba0 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e 20  ER.  <td> ^When 
14bb0 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20 76  casting a BLOB v
14bc0 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c  alue to INTEGER,
14bd0 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69   the value is fi
14be0 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  rst converted to
14bf0 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20  .        TEXT.. 
14c00 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63        <p>^When c
14c10 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61  asting a TEXT va
14c20 6c 75 65 20 74 6f 20 49 4e 54 45 47 45 52 2c 20  lue to INTEGER, 
14c30 74 68 65 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73  the longest poss
14c40 69 62 6c 65 20 70 72 65 66 69 78 20 6f 66 0a 20  ible prefix of. 
14c50 20 20 20 20 20 20 20 74 68 65 20 76 61 6c 75 65         the value
14c60 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
14c70 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
14c80 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 69 73  nteger number is
14c90 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
14ca0 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
14cb0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
14cc0 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
14cd0 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
14ce0 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
14cf0 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
14d00 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20  when converting 
14d10 66 72 6f 6d 20 54 45 58 54 20 74 6f 20 49 4e 54  from TEXT to INT
14d20 45 47 45 52 20 61 72 65 20 69 67 6e 6f 72 65 64  EGER are ignored
14d30 2e 20 5e 49 66 20 74 68 65 72 65 0a 20 20 20 20  . ^If there.    
14d40 20 20 20 20 69 73 20 6e 6f 20 70 72 65 66 69 78      is no prefix
14d50 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74   that can be int
14d60 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
14d70 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 2c 20 74  nteger number, t
14d80 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20  he result.      
14d90 20 20 6f 66 20 74 68 65 20 63 6f 6e 76 65 72 73    of the convers
14da0 69 6f 6e 20 69 73 20 30 2e 0a 0a 20 20 20 20 20  ion is 0...     
14db0 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66 20 61   <p>^A cast of a
14dc0 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e 74 6f   REAL value into
14dd0 20 61 6e 20 49 4e 54 45 47 45 52 20 77 69 6c 6c   an INTEGER will
14de0 20 74 72 75 6e 63 61 74 65 20 74 68 65 20 66 72   truncate the fr
14df0 61 63 74 69 6f 6e 61 6c 0a 20 20 20 20 20 20 70  actional.      p
14e00 61 72 74 20 6f 66 20 74 68 65 20 52 45 41 4c 2e  art of the REAL.
14e10 20 20 5e 49 66 20 61 20 52 45 41 4c 20 69 73 20    ^If a REAL is 
14e20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20  too large to be 
14e30 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
14e40 6e 20 0a 20 20 20 20 20 20 49 4e 54 45 47 45 52  n .      INTEGER
14e50 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
14e60 20 6f 66 20 74 68 65 20 63 61 73 74 20 69 73 20   of the cast is 
14e70 74 68 65 20 6c 61 72 67 65 73 74 20 6e 65 67 61  the largest nega
14e80 74 69 76 65 20 69 6e 74 65 67 65 72 3a 20 0a 20  tive integer: . 
14e90 20 20 20 20 20 2d 39 32 32 33 33 37 32 30 33 36       -9223372036
14ea0 38 35 34 37 37 35 38 30 38 2e 0a 0a 3c 74 72 3e  854775808...<tr>
14eb0 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a  .  <td> NUMERIC.
14ec0 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20    <td> ^Casting 
14ed0 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42 20 76  a TEXT or BLOB v
14ee0 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49  alue into NUMERI
14ef0 43 20 66 69 72 73 74 20 64 6f 65 73 20 61 20 66  C first does a f
14f00 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65 72 73  orced.   convers
14f10 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62 75  ion into REAL bu
14f20 74 20 74 68 65 6e 20 66 75 72 74 68 65 72 20 63  t then further c
14f30 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73 75  onverts the resu
14f40 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52 20  lt into INTEGER 
14f50 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69  if.   and only i
14f60 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
14f70 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e   from REAL to IN
14f80 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65 73  TEGER is lossles
14f90 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65  s and reversible
14fa0 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74 68 65  ..   This is the
14fb0 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e   only context in
14fc0 20 53 51 4c 69 74 65 20 77 68 65 72 65 20 74 68   SQLite where th
14fd0 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49 4e  e NUMERIC and IN
14fe0 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74 69 65  TEGER [affinitie
14ff0 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64 69 66  s].   behave dif
15000 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e  ferently..   <p>
15010 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45 41 4c   ^Casting a REAL
15020 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61 6c 75   or INTEGER valu
15030 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69 73 20  e to NUMERIC is 
15040 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66  a no-op, even if
15050 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c 75 65   a real.   value
15060 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65   could be lossle
15070 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
15080 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c  o an integer...<
15090 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tr>..</table>..
150a0 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68  <p>^Note that th
150b0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61  e result from ca
150c0 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c  sting any non-BL
150d0 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  OB value into a 
150e0 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72 65  .BLOB and the re
150f0 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e  sult from castin
15100 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65  g any BLOB value
15110 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42   into a non-BLOB
15120 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20 64 69   value.may be di
15130 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64 69 6e  fferent dependin
15140 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65  g on whether the
15150 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63 6f 64   database [encod
15160 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55  ing] is UTF-8,.U
15170 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54 46 2d  TF-16be, or UTF-
15180 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  16le....<tcl>hd_
15190 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e  fragment boolean
151a0 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78  expr {boolean ex
151b0 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
151c0 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72  <h3>Boolean Expr
151d0 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
151e0 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67  >The SQL languag
151f0 65 20 66 65 61 74 75 72 65 73 20 73 65 76 65 72  e features sever
15200 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  al contexts wher
15210 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  e an expression 
15220 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20 61 6e  is .evaluated an
15230 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  d the result con
15240 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c  verted to a bool
15250 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66 61 6c  ean (true or fal
15260 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65 73 65  se) value. These
15270 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a  .contexts are:..
15280 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20    <ul>.    <li> 
15290 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
152a0 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20 55 50   of a SELECT, UP
152b0 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20 73  DATE or DELETE s
152c0 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c  tatement,.    <l
152d0 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49  i> the ON or USI
152e0 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
152f0 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43 54 20  oin in a SELECT 
15300 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c  statement,.    <
15310 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47 20 63  li> the HAVING c
15320 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
15330 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
15340 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
15350 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51 4c 20  lause of an SQL 
15360 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20 20 20  trigger, and.   
15370 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
15380 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73 65 73  lause or clauses
15390 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20 65 78   of some CASE ex
153a0 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75  pressions..  </u
153b0 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76  l>..<p>^(To conv
153c0 65 72 74 20 74 68 65 20 72 65 73 75 6c 74 73 20  ert the results 
153d0 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73  of an SQL expres
153e0 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61  sion to a boolea
153f0 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a  n value, SQLite.
15400 66 69 72 73 74 20 63 61 73 74 73 20 74 68 65 20  first casts the 
15410 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45  result to a NUME
15420 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65  RIC value in the
15430 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 0a   same way as a .
15440 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
15450 5d 2e 20 41 20 4e 55 4c 4c 20 6f 72 20 7a 65 72  ]. A NULL or zer
15460 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67 65 72  o value (integer
15470 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
15480 20 76 61 6c 75 65 20 30 2e 30 29 20 69 73 0a 63   value 0.0) is.c
15490 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
154a0 66 61 6c 73 65 2e 20 41 6c 6c 20 6f 74 68 65 72  false. All other
154b0 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
154c0 69 64 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a  idered true.)^..
154d0 3c 70 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65  <p>^(For example
154e0 2c 20 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c  , the values NUL
154f0 4c 2c 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c  L, 0.0, 0, 'engl
15500 69 73 68 27 20 61 6e 64 20 27 30 27 20 61 72 65  ish' and '0' are
15510 20 61 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a   all considered.
15520 74 6f 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e  to be false.)^ ^
15530 28 56 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20  (Values 1, 1.0, 
15540 30 2e 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31  0.1, -0.1 and '1
15550 65 6e 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e  english' are con
15560 73 69 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74  sidered to .be t
15570 72 75 65 2e 29 5e 0a 0a 3c 68 33 3e 46 75 6e 63  rue.)^..<h3>Func
15580 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 42  tions</h3>.<p>^B
15590 6f 74 68 20 5b 63 6f 72 65 66 75 6e 63 7c 73 69  oth [corefunc|si
155a0 6d 70 6c 65 5d 20 61 6e 64 20 5b 61 67 67 66 75  mple] and [aggfu
155b0 6e 63 7c 61 67 67 72 65 67 61 74 65 5d 20 66 75  nc|aggregate] fu
155c0 6e 63 74 69 6f 6e 73 20 61 72 65 20 73 75 70 70  nctions are supp
155d0 6f 72 74 65 64 2e 0a 28 46 6f 72 20 70 72 65 73  orted..(For pres
155e0 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 6f 73 65  entation purpose
155f0 73 2c 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69  s, simple functi
15600 6f 6e 73 20 61 72 65 20 66 75 72 74 68 65 72 20  ons are further 
15610 73 75 62 64 69 76 69 64 65 64 20 69 6e 74 6f 0a  subdivided into.
15620 5b 63 6f 72 65 66 75 6e 63 20 7c 20 63 6f 72 65  [corefunc | core
15630 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 6e 64 20   functions] and 
15640 5b 64 61 74 65 66 75 6e 63 20 7c 20 64 61 74 65  [datefunc | date
15650 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d  -time functions]
15660 2e 29 0a 5e 41 20 73 69 6d 70 6c 65 20 66 75 6e  .).^A simple fun
15670 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ction can be use
15680 64 20 69 6e 20 61 6e 79 20 65 78 70 72 65 73 73  d in any express
15690 69 6f 6e 2e 20 20 5e 53 69 6d 70 6c 65 20 66 75  ion.  ^Simple fu
156a0 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e 0a 61  nctions return.a
156b0 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69 61 74   result immediat
156c0 65 6c 79 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ely based on the
156d0 69 72 20 69 6e 70 75 74 73 2e 20 20 5e 41 67 67  ir inputs.  ^Agg
156e0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
156f0 0a 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65  .may only be use
15700 64 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  d in a SELECT st
15710 61 74 65 6d 65 6e 74 2e 20 20 5e 41 67 67 72 65  atement.  ^Aggre
15720 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 63  gate functions c
15730 6f 6d 70 75 74 65 0a 74 68 65 69 72 20 72 65 73  ompute.their res
15740 75 6c 74 20 61 63 72 6f 73 73 20 61 6c 6c 20 72  ult across all r
15750 6f 77 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ows of the resul
15760 74 20 73 65 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  t set.</p>..<tcl
15770 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
15780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
157a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
157b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
157c0 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65 20 46  .Section {Core F
157d0 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75  unctions} corefu
157e0 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d 0a 70  nc {*corefunc}.p
157f0 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e  roc funcdef {syn
15800 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
15810 63 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 7b  c} {.  hd_puts {
15820 3c 74 72 3e 7d 0a 20 20 72 65 67 73 75 62 20 2d  <tr>}.  regsub -
15830 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e  all {\s+} [strin
15840 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20  g trim $syntax] 
15850 7b 3c 62 72 3e 3c 2f 62 72 3e 7d 20 73 79 6e 74  {<br></br>} synt
15860 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
15870 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20   {\(([^*)]+)\)} 
15880 24 73 79 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c  $syntax {(<i>\1<
15890 2f 69 3e 29 7d 20 73 79 6e 74 61 78 0a 20 20 72  /i>)} syntax.  r
158a0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24  egsub -all {,} $
158b0 73 79 6e 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e  syntax {</i>,<i>
158c0 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
158d0 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c  b -all {<i>\.\.\
158e0 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b  .</i>} $syntax {
158f0 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a 20 20 68 64  ...} syntax.  hd
15900 5f 70 75 74 73 20 22 3c 74 64 20 76 61 6c 69 67  _puts "<td valig
15910 6e 3d 5c 22 74 6f 70 5c 22 20 61 6c 69 67 6e 3d  n=\"top\" align=
15920 5c 22 72 69 67 68 74 5c 22 20 77 69 64 74 68 3d  \"right\" width=
15930 5c 22 31 32 30 5c 22 3e 22 0a 20 20 69 66 20 7b  \"120\">".  if {
15940 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
15950 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65  ds]==0} {.    re
15960 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24  gexp {[a-z_]+} $
15970 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20  syntax name.    
15980 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d  hd_fragment $nam
15990 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65  e *$name "${name
159a0 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  }() SQL function
159b0 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ".  } else {.   
159c0 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c   set fragname [l
159d0 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20  index $keywords 
159e0 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61  0].    regsub -a
159f0 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61  ll {[^a-z]} $fra
15a00 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d  gname {} fragnam
15a10 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
15a20 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20  t $fragname.    
15a30 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73  eval hd_keywords
15a40 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e   [string map {\n
15a50 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d   { }} $keywords]
15a60 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22  .  }.  hd_puts "
15a70 24 73 79 6e 74 61 78 3c 2f 74 64 3e 22 0a 20 20  $syntax</td>".  
15a80 68 64 5f 70 75 74 73 20 7b 3c 74 64 20 76 61 6c  hd_puts {<td val
15a90 69 67 6e 3d 22 74 6f 70 22 3e 7d 0a 20 20 68 64  ign="top">}.  hd
15aa0 5f 72 65 73 6f 6c 76 65 20 24 64 65 73 63 0a 20  _resolve $desc. 
15ab0 20 68 64 5f 70 75 74 73 20 7b 3c 2f 74 64 3e 3c   hd_puts {</td><
15ac0 2f 74 72 3e 7d 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a  /tr>}.}.</tcl>..
15ad0 3c 70 3e 54 68 65 20 63 6f 72 65 20 66 75 6e 63  <p>The core func
15ae0 74 69 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f  tions shown belo
15af0 77 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  w are available 
15b00 62 79 20 64 65 66 61 75 6c 74 2e 20 0a 5b 64 61  by default. .[da
15b10 74 65 66 75 6e 63 20 7c 20 44 61 74 65 20 26 61  tefunc | Date &a
15b20 6d 70 3b 20 54 69 6d 65 20 66 75 6e 63 74 69 6f  mp; Time functio
15b30 6e 73 5d 20 61 6e 64 0a 5b 61 67 67 66 75 6e 63  ns] and.[aggfunc
15b40 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
15b50 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75  ctions] are docu
15b60 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74 65 6c  mented separatel
15b70 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61 74 69  y.  An.applicati
15b80 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20 61 64  on may define ad
15b90 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f  ditional.functio
15ba0 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20  ns written in C 
15bb0 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65  and added to the
15bc0 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
15bd0 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69   using.the [sqli
15be0 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
15bf0 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a  ion()] API.</p>.
15c00 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
15c10 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 31 30 3e   cellpadding=10>
15c20 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64 65 66 20 7b  .<tcl>.funcdef {
15c30 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  abs(X)} {} {.  ^
15c40 54 68 65 20 61 62 73 28 58 29 20 66 75 6e 63 74  The abs(X) funct
15c50 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
15c60 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
15c70 66 20 74 68 65 20 6e 75 6d 65 72 69 63 0a 20 20  f the numeric.  
15c80 61 72 67 75 6d 65 6e 74 20 58 2e 20 20 5e 41 62  argument X.  ^Ab
15c90 73 28 58 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  s(X) returns NUL
15ca0 4c 20 69 66 20 58 20 69 73 20 4e 55 4c 4c 2e 20  L if X is NULL. 
15cb0 0a 20 20 5e 28 41 62 73 28 58 29 20 72 65 74 75  .  ^(Abs(X) retu
15cc0 72 6e 20 30 2e 30 20 69 66 20 58 20 69 73 20 61  rn 0.0 if X is a
15cd0 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 0a   string or blob.
15ce0 20 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65    that cannot be
15cf0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
15d00 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 2e 29 5e  numeric value.)^
15d10 20 20 5e 49 66 20 58 20 69 73 20 74 68 65 20 0a    ^If X is the .
15d20 20 20 69 6e 74 65 67 65 72 20 2d 39 32 32 33 33    integer -92233
15d30 37 32 30 33 36 38 35 34 37 37 35 38 30 37 20 74  72036854775807 t
15d40 68 65 6e 20 61 62 73 28 58 29 20 74 68 72 6f 77  hen abs(X) throw
15d50 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
15d60 72 66 6c 6f 77 0a 20 20 65 72 72 6f 72 20 73 69  rflow.  error si
15d70 6e 63 65 20 74 68 65 72 65 20 69 73 20 6e 6f 20  nce there is no 
15d80 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 73 69 74  equivalent posit
15d90 69 76 65 20 36 34 2d 62 69 74 20 74 77 6f 20 63  ive 64-bit two c
15da0 6f 6d 70 6c 65 6d 65 6e 74 20 76 61 6c 75 65 2e  omplement value.
15db0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63 68 61  .}..funcdef {cha
15dc0 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  nges()} {} {.  ^
15dd0 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 66 75  The changes() fu
15de0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
15df0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74  he number of dat
15e00 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
15e10 77 65 72 65 20 63 68 61 6e 67 65 64 0a 20 20 6f  were changed.  o
15e20 72 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65  r inserted or de
15e30 6c 65 74 65 64 20 62 79 20 74 68 65 20 6d 6f 73  leted by the mos
15e40 74 20 72 65 63 65 6e 74 6c 79 20 63 6f 6d 70 6c  t recently compl
15e50 65 74 65 64 20 49 4e 53 45 52 54 2c 20 44 45 4c  eted INSERT, DEL
15e60 45 54 45 2c 0a 20 20 6f 72 20 55 50 44 41 54 45  ETE,.  or UPDATE
15e70 20 73 74 61 74 65 6d 65 6e 74 2c 20 65 78 63 6c   statement, excl
15e80 75 73 69 76 65 20 6f 66 20 73 74 61 74 65 6d 65  usive of stateme
15e90 6e 74 73 20 69 6e 20 6c 6f 77 65 72 2d 6c 65 76  nts in lower-lev
15ea0 65 6c 20 74 72 69 67 67 65 72 73 2e 0a 20 20 5e  el triggers..  ^
15eb0 54 68 65 20 63 68 61 6e 67 65 73 28 29 20 53 51  The changes() SQ
15ec0 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  L function is a 
15ed0 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
15ee0 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e  he [sqlite3_chan
15ef0 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 66  ges()].  C/C++ f
15f00 75 6e 63 74 69 6f 6e 20 61 6e 64 20 68 65 6e 63  unction and henc
15f10 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 73 61  e follows the sa
15f20 6d 65 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 75  me rules for cou
15f30 6e 74 69 6e 67 20 63 68 61 6e 67 65 73 2e 0a 7d  nting changes..}
15f40 0a 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65  ..funcdef {coale
15f50 73 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d  sce(X,Y,...)} {}
15f60 20 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73   {.  ^The coales
15f70 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ce() function re
15f80 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
15f90 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55  its first non-NU
15fa0 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a  LL argument, or.
15fb0 20 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72    NULL if all ar
15fc0 67 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c  guments are NULL
15fd0 2e 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d  .  ^Coalesce() m
15fe0 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20  ust be at least 
15ff0 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a  .  2 arguments..
16000 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f 62  }..funcdef {glob
16010 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
16020 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75 6e  he glob(X,Y) fun
16030 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c  ction is equival
16040 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78 70  ent to the.  exp
16050 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47 4c  ression "<b>Y GL
16060 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f 74  OB X</b>"..  Not
16070 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e 64  e that the X and
16080 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65   Y arguments are
16090 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68 65   reversed in the
160a0 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f 6e   glob() function
160b0 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20 74  .  relative to t
160c0 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d 20  he infix [GLOB] 
160d0 6f 70 65 72 61 74 6f 72 2e 0a 20 20 5e 49 66 20  operator..  ^If 
160e0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
160f0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d 20  ate_function()] 
16100 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73 65  interface is use
16110 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65 20  d to.  override 
16120 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  the glob(X,Y) fu
16130 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20 61  nction with an a
16140 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
16150 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a 20  mentation then. 
16160 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65 72   the [GLOB] oper
16170 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b 65  ator will invoke
16180 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65   the alternative
16190 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
161a0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66 6e  .}..funcdef {ifn
161b0 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ull(X,Y)} {} {. 
161c0 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66   ^The ifnull() f
161d0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
161e0 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69  a copy of its fi
161f0 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67  rst non-NULL arg
16200 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c  ument, or.  NULL
16210 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e   if both argumen
16220 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 49  ts are NULL.  ^I
16230 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61 76  fnull() must hav
16240 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67 75  e exactly 2 argu
16250 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69 66  ments..  ^The if
16260 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20  null() function 
16270 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
16280 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77 69   [coalesce()] wi
16290 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
162a0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65  ..}..funcdef {he
162b0 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
162c0 65 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e  e hex() function
162d0 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20   interprets its 
162e0 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c  argument as a BL
162f0 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20  OB and returns. 
16300 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
16310 69 73 20 74 68 65 20 75 70 70 65 72 2d 63 61 73  is the upper-cas
16320 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65  e hexadecimal re
16330 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63  ndering of the c
16340 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74  ontent of.  that
16350 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65   blob..}..funcde
16360 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  f {last_insert_r
16370 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  owid()} {} {.  ^
16380 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f  The last_insert_
16390 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
163a0 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f   returns the [RO
163b0 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61  WID].  of the la
163c0 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72  st row insert fr
163d0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
163e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68  connection which
163f0 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66   invoked the.  f
16400 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20  unction..  ^The 
16410 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
16420 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  d() SQL function
16430 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
16440 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
16450 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
16460 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69  rowid()] C/C++ i
16470 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f  nterface functio
16480 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
16490 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20  ength(X)} {} {. 
164a0 20 5e 46 6f 72 20 61 20 73 74 72 69 6e 67 20 76   ^For a string v
164b0 61 6c 75 65 20 58 2c 20 74 68 65 20 6c 65 6e 67  alue X, the leng
164c0 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  th(X) function r
164d0 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
164e0 72 20 6f 66 20 0a 20 20 63 68 61 72 61 63 74 65  r of .  characte
164f0 72 73 20 28 6e 6f 74 20 62 79 74 65 73 29 20 69  rs (not bytes) i
16500 6e 20 58 20 70 72 69 6f 72 20 74 6f 20 74 68 65  n X prior to the
16510 20 66 69 72 73 74 20 4e 55 4c 20 63 68 61 72 61   first NUL chara
16520 63 74 65 72 2e 0a 20 20 53 69 6e 63 65 20 53 51  cter..  Since SQ
16530 4c 69 74 65 20 73 74 72 69 6e 67 73 20 64 6f 20  Lite strings do 
16540 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e  not normally con
16550 74 61 69 6e 20 4e 55 4c 20 63 68 61 72 61 63 74  tain NUL charact
16560 65 72 73 2c 20 74 68 65 20 6c 65 6e 67 74 68 28  ers, the length(
16570 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 77 69  X).  function wi
16580 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65 74 75 72  ll usually retur
16590 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  n the total numb
165a0 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
165b0 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 58   in the string X
165c0 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20  ..  ^For a blob 
165d0 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74 68 28  value X, length(
165e0 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  X) returns the n
165f0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
16600 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49  n the blob..  ^I
16610 66 20 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  f X is NULL then
16620 20 6c 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55   length(X) is NU
16630 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e  LL..  ^If X is n
16640 75 6d 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67  umeric then leng
16650 74 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68  th(X) returns th
16660 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74  e length of a st
16670 72 69 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74  ring.  represent
16680 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ation of X..}..f
16690 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59  uncdef {like(X,Y
166a0 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b  ) like(X,Y,Z)} {
166b0 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28  } {.  ^The like(
166c0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  ) function is us
166d0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
166e0 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45  the.  "<b>Y LIKE
166f0 20 58 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a   X &#91;ESCAPE Z
16700 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65  &#93;</b>" expre
16710 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68  ssion. .  ^If th
16720 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
16730 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
16740 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ent, then the.  
16750 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
16760 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  is invoked with 
16770 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e  three arguments.
16780 20 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74    ^Otherwise, it
16790 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69   is.  invoked wi
167a0 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
167b0 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74   only. Note that
167c0 20 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72   the X and Y par
167d0 61 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65  ameters are.  re
167e0 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69  versed in the li
167f0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ke() function re
16800 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
16810 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  fix [LIKE] opera
16820 74 6f 72 2e 0a 20 20 5e 54 68 65 20 5b 73 71 6c  tor..  ^The [sql
16830 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
16840 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
16850 65 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  e can be used to
16860 20 6f 76 65 72 72 69 64 65 20 74 68 65 0a 20 20   override the.  
16870 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
16880 61 6e 64 20 74 68 65 72 65 62 79 20 63 68 61 6e  and thereby chan
16890 67 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ge the operation
168a0 20 6f 66 20 74 68 65 0a 20 20 5b 4c 49 4b 45 5d   of the.  [LIKE]
168b0 20 6f 70 65 72 61 74 6f 72 2e 20 20 57 68 65 6e   operator.  When
168c0 20 6f 76 65 72 72 69 64 69 6e 67 20 74 68 65 20   overriding the 
168d0 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 2c  like() function,
168e0 20 69 74 20 6d 61 79 20 62 65 20 69 6d 70 6f 72   it may be impor
168f0 74 61 6e 74 0a 20 20 74 6f 20 6f 76 65 72 72 69  tant.  to overri
16900 64 65 20 62 6f 74 68 20 74 68 65 20 74 77 6f 20  de both the two 
16910 61 6e 64 20 74 68 72 65 65 20 61 72 67 75 6d 65  and three argume
16920 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  nt versions of t
16930 68 65 20 6c 69 6b 65 28 29 20 0a 20 20 66 75 6e  he like() .  fun
16940 63 74 69 6f 6e 2e 20 4f 74 68 65 72 77 69 73 65  ction. Otherwise
16950 2c 20 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65  , different code
16960 20 6d 61 79 20 62 65 20 63 61 6c 6c 65 64 20 74   may be called t
16970 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
16980 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f    [LIKE] operato
16990 72 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  r depending on w
169a0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
169b0 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20 77   ESCAPE clause w
169c0 61 73 20 0a 20 20 73 70 65 63 69 66 69 65 64 2e  as .  specified.
169d0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61  .}..funcdef {loa
169e0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c  d_extension(X) l
169f0 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c  oad_extension(X,
16a00 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
16a10 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
16a20 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61  ,Y) function loa
16a30 64 73 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73  ds SQLite extens
16a40 69 6f 6e 73 20 6f 75 74 20 6f 66 20 74 68 65 20  ions out of the 
16a50 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61 72 79  shared.  library
16a60 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20 75 73   file named X us
16a70 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f  ing the entry po
16a80 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72 65 73  int Y.  ^The res
16a90 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65  ult of load_exte
16aa0 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77  nsion().  is alw
16ab0 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66  ays a NULL.  ^If
16ac0 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68   Y is omitted th
16ad0 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 65  en the default e
16ae0 6e 74 72 79 20 70 6f 69 6e 74 0a 20 20 6f 66 20  ntry point.  of 
16af0 3c 62 3e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  <b>sqlite3_exten
16b00 73 69 6f 6e 5f 69 6e 69 74 3c 2f 62 3e 20 69 73  sion_init</b> is
16b10 20 75 73 65 64 2e 20 20 5e 54 68 65 20 6c 6f 61   used.  ^The loa
16b20 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75  d_extension() fu
16b30 6e 63 74 69 6f 6e 0a 20 20 72 61 69 73 65 73 20  nction.  raises 
16b40 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20  an exception if 
16b50 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 61  the extension fa
16b60 69 6c 73 20 74 6f 20 6c 6f 61 64 20 6f 72 20 69  ils to load or i
16b70 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63  nitialize correc
16b80 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20  tly...  <p>^The 
16b90 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
16ba0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66   function will f
16bb0 61 69 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e  ail if the exten
16bc0 73 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f  sion attempts to
16bd0 20 0a 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65   .  modify or de
16be0 6c 65 74 65 20 61 6e 20 53 51 4c 20 66 75 6e 63  lete an SQL func
16bf0 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  tion or collatin
16c00 67 20 73 65 71 75 65 6e 63 65 2e 20 20 5e 54 68  g sequence.  ^Th
16c10 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61  e.  extension ca
16c20 6e 20 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69  n add new functi
16c30 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67  ons or collating
16c40 20 73 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20   sequences, but 
16c50 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20  cannot.  modify 
16c60 6f 72 20 64 65 6c 65 74 65 20 65 78 69 73 74 69  or delete existi
16c70 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  ng functions or 
16c80 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
16c90 63 65 73 20 62 65 63 61 75 73 65 0a 20 20 74 68  ces because.  th
16ca0 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e  ose functions an
16cb0 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d/or collating s
16cc0 65 71 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62  equences might b
16cd0 65 20 75 73 65 64 20 65 6c 73 65 77 68 65 72 65  e used elsewhere
16ce0 0a 20 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  .  in the curren
16cf0 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20  tly running SQL 
16d00 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c  statement.  To l
16d10 6f 61 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  oad an extension
16d20 20 74 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20   that.  changes 
16d30 6f 72 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74  or deletes funct
16d40 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e  ions or collatin
16d50 67 20 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65  g sequences, use
16d60 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
16d70 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
16d80 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49  ] C-language API
16d90 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  .</p>.}..funcdef
16da0 20 7b 6c 6f 77 65 72 28 58 29 7d 20 7b 7d 20 7b   {lower(X)} {} {
16db0 0a 20 20 5e 54 68 65 20 6c 6f 77 65 72 28 58 29  .  ^The lower(X)
16dc0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
16dd0 73 20 61 20 63 6f 70 79 20 6f 66 20 73 74 72 69  s a copy of stri
16de0 6e 67 20 58 20 77 69 74 68 20 61 6c 6c 20 41 53  ng X with all AS
16df0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20  CII characters. 
16e00 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c 6f   converted to lo
16e10 77 65 72 20 63 61 73 65 2e 20 20 5e 54 68 65 20  wer case.  ^The 
16e20 64 65 66 61 75 6c 74 20 62 75 69 6c 74 2d 69 6e  default built-in
16e30 20 6c 6f 77 65 72 28 29 20 66 75 6e 63 74 69 6f   lower() functio
16e40 6e 20 77 6f 72 6b 73 0a 20 20 66 6f 72 20 41 53  n works.  for AS
16e50 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 6f  CII characters o
16e60 6e 6c 79 2e 20 20 54 6f 20 64 6f 20 63 61 73 65  nly.  To do case
16e70 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 6e 20   conversions on 
16e80 6e 6f 6e 2d 41 53 43 49 49 0a 20 20 63 68 61 72  non-ASCII.  char
16e90 61 63 74 65 72 73 2c 20 6c 6f 61 64 20 74 68 65  acters, load the
16ea0 20 49 43 55 20 65 78 74 65 6e 73 69 6f 6e 2e 0a   ICU extension..
16eb0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 74 72 69  }..funcdef {ltri
16ec0 6d 28 58 29 20 6c 74 72 69 6d 28 58 2c 59 29 7d  m(X) ltrim(X,Y)}
16ed0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 74 72   {} {.  ^The ltr
16ee0 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  im(X,Y) function
16ef0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
16f00 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f  g formed by remo
16f10 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c  ving any and all
16f20 0a 20 20 63 68 61 72 61 63 74 65 72 73 20 74 68  .  characters th
16f30 61 74 20 61 70 70 65 61 72 20 69 6e 20 59 20 66  at appear in Y f
16f40 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73 69 64  rom the left sid
16f50 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  e of X..  ^If th
16f60 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
16f70 6f 6d 69 74 74 65 64 2c 20 6c 74 72 69 6d 28 58  omitted, ltrim(X
16f80 29 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73  ) removes spaces
16f90 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 20 73   from the left s
16fa0 69 64 65 0a 20 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ide.  of X..}..f
16fb0 75 6e 63 64 65 66 20 7b 6d 61 78 28 58 2c 59 2c  uncdef {max(X,Y,
16fc0 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43 6f 72 65 46  ...)} {*maxCoreF
16fd0 75 6e 63 20 2a 6d 61 78 20 7b 6d 61 78 28 29 20  unc *max {max() 
16fe0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  SQL function}} {
16ff0 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
17000 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e  gument max() fun
17010 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
17020 65 20 61 72 67 75 6d 65 6e 74 20 77 69 74 68 20  e argument with 
17030 74 68 65 20 0a 20 20 6d 61 78 69 6d 75 6d 20 76  the .  maximum v
17040 61 6c 75 65 2c 20 6f 72 20 72 65 74 75 72 6e 20  alue, or return 
17050 4e 55 4c 4c 20 69 66 20 61 6e 79 20 61 72 67 75  NULL if any argu
17060 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 2e 20 0a 20  ment is NULL. . 
17070 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75   ^The multi-argu
17080 6d 65 6e 74 20 6d 61 78 28 29 20 66 75 6e 63 74  ment max() funct
17090 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73  ion searches its
170a0 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
170b0 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20  left to right.  
170c0 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20  for an argument 
170d0 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63  that defines a c
170e0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
170f0 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
17100 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63  collating.  func
17110 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
17120 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  ing comparisons.
17130 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68    ^If none of th
17140 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d  e arguments to m
17150 61 78 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20  ax().  define a 
17160 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
17170 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e  on, then the BIN
17180 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ARY collating fu
17190 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  nction is used..
171a0 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d    Note that <b>m
171b0 61 78 28 29 3c 2f 62 3e 20 69 73 20 61 20 73 69  ax()</b> is a si
171c0 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  mple function wh
171d0 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f 72  en.  it has 2 or
171e0 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73 20   more arguments 
171f0 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73 20  but operates as 
17200 61 6e 0a 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63  an.  [minAggFunc
17210 20 7c 20 61 67 67 72 65 67 61 74 65 20 66 75 6e   | aggregate fun
17220 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20  ction] if given 
17230 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72  only a single ar
17240 67 75 6d 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64  gument..}..funcd
17250 65 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29  ef {min(X,Y,...)
17260 7d 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20  } {*minCoreFunc 
17270 2a 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20  *min {min() SQL 
17280 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
17290 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65  The multi-argume
172a0 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f  nt min() functio
172b0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72  n returns the ar
172c0 67 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a  gument with the.
172d0 20 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e    minimum value.
172e0 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72  .  ^The multi-ar
172f0 67 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e  gument min() fun
17300 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69  ction searches i
17310 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f  ts arguments fro
17320 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a  m left to right.
17330 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e    for an argumen
17340 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
17350 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
17360 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61  ion and uses tha
17370 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75  t collating.  fu
17380 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
17390 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  tring comparison
173a0 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20  s.  ^If none of 
173b0 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  the arguments to
173c0 20 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20   min().  define 
173d0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
173e0 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42  tion, then the B
173f0 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
17400 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
17410 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74 20 3c 62  ..  Note that <b
17420 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20  >min()</b> is a 
17430 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20  simple function 
17440 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20  when.  it has 2 
17450 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74  or more argument
17460 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61  s but operates a
17470 73 20 61 6e 20 0a 20 20 5b 6d 61 78 41 67 67 46  s an .  [maxAggF
17480 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20  unc | aggregate 
17490 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76  function] if giv
174a0 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67  en.  only a sing
174b0 6c 65 20 61 72 67 75 6d 65 6e 74 2e 0a 7d 0a 0a  le argument..}..
174c0 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66 28  funcdef {nullif(
174d0 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
174e0 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75  e nullif(X,Y) fu
174f0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69  nction returns i
17500 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
17510 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  t if the argumen
17520 74 73 20 61 72 65 0a 20 20 64 69 66 66 65 72 65  ts are.  differe
17530 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20 74  nt and NULL if t
17540 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
17550 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68 65   the same.  ^The
17560 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e   nullif(X,Y) fun
17570 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65 73  ction.  searches
17580 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66   its arguments f
17590 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
175a0 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e  t for an argumen
175b0 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61  t that defines a
175c0 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  .  collating fun
175d0 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74  ction and uses t
175e0 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  hat collating fu
175f0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
17600 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69 73  tring.  comparis
17610 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68 65  ons.  ^If neithe
17620 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e 75  r argument to nu
17630 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20 61  llif() defines a
17640 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
17650 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20 42  ion.  then the B
17660 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a 7d  INARY is used..}
17670 0a 0a 66 75 6e 63 64 65 66 20 7b 71 75 6f 74 65  ..funcdef {quote
17680 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
17690 20 71 75 6f 74 65 28 58 29 20 66 75 6e 63 74 69   quote(X) functi
176a0 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  on returns the t
176b0 65 78 74 20 6f 66 20 61 6e 20 53 51 4c 20 6c 69  ext of an SQL li
176c0 74 65 72 61 6c 20 77 68 69 63 68 0a 20 20 69 73  teral which.  is
176d0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 69 74   the value of it
176e0 73 20 61 72 67 75 6d 65 6e 74 20 73 75 69 74 61  s argument suita
176f0 62 6c 65 20 66 6f 72 20 69 6e 63 6c 75 73 69 6f  ble for inclusio
17700 6e 20 69 6e 74 6f 20 61 6e 20 53 51 4c 20 73 74  n into an SQL st
17710 61 74 65 6d 65 6e 74 2e 0a 20 20 5e 53 74 72 69  atement..  ^Stri
17720 6e 67 73 20 61 72 65 20 73 75 72 72 6f 75 6e 64  ngs are surround
17730 65 64 20 62 79 20 73 69 6e 67 6c 65 2d 71 75 6f  ed by single-quo
17740 74 65 73 20 77 69 74 68 20 65 73 63 61 70 65 73  tes with escapes
17750 20 6f 6e 20 69 6e 74 65 72 69 6f 72 20 71 75 6f   on interior quo
17760 74 65 73 0a 20 20 61 73 20 6e 65 65 64 65 64 2e  tes.  as needed.
17770 20 20 5e 42 4c 4f 42 73 20 61 72 65 20 65 6e 63    ^BLOBs are enc
17780 6f 64 65 64 20 61 73 20 68 65 78 61 64 65 63 69  oded as hexadeci
17790 6d 61 6c 20 6c 69 74 65 72 61 6c 73 2e 0a 20 20  mal literals..  
177a0 5e 53 74 72 69 6e 67 73 20 77 69 74 68 20 65 6d  ^Strings with em
177b0 62 65 64 64 65 64 20 4e 55 4c 20 63 68 61 72 61  bedded NUL chara
177c0 63 74 65 72 73 20 63 61 6e 6e 6f 74 20 62 65 20  cters cannot be 
177d0 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 73  represented as s
177e0 74 72 69 6e 67 0a 20 20 6c 69 74 65 72 61 6c 73  tring.  literals
177f0 20 69 6e 20 53 51 4c 20 61 6e 64 20 68 65 6e 63   in SQL and henc
17800 65 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 73  e the returned s
17810 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73  tring literal is
17820 20 74 72 75 6e 63 61 74 65 64 20 70 72 69 6f 72   truncated prior
17830 0a 20 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  .  to the first 
17840 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  NUL..}..funcdef 
17850 7b 72 61 6e 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a  {random()} {} {.
17860 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 28 29 20    ^The random() 
17870 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
17880 20 61 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d   a pseudo-random
17890 20 69 6e 74 65 67 65 72 0a 20 20 62 65 74 77 65   integer.  betwe
178a0 65 6e 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  en -922337203685
178b0 34 37 37 35 38 30 38 20 61 6e 64 20 2b 39 32 32  4775808 and +922
178c0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
178d0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61  ..}..funcdef {ra
178e0 6e 64 6f 6d 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20  ndomblob(N)} {} 
178f0 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64 6f 6d 62  {.  ^The randomb
17900 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20  lob(N) function 
17910 72 65 74 75 72 6e 20 61 6e 20 4e 2d 62 79 74 65  return an N-byte
17920 20 62 6c 6f 62 20 63 6f 6e 74 61 69 6e 69 6e 67   blob containing
17930 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20   pseudo-random. 
17940 20 62 79 74 65 73 2e 20 5e 49 66 20 4e 20 69 73   bytes. ^If N is
17950 20 6c 65 73 73 20 74 68 61 6e 20 31 20 74 68 65   less than 1 the
17960 6e 20 61 20 31 2d 62 79 74 65 20 72 61 6e 64 6f  n a 1-byte rando
17970 6d 20 62 6c 6f 62 20 69 73 20 72 65 74 75 72 6e  m blob is return
17980 65 64 2e 0a 0a 20 20 3c 70 3e 48 69 6e 74 3a 20  ed...  <p>Hint: 
17990 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61   applications ca
179a0 6e 20 67 65 6e 65 72 61 74 65 20 67 6c 6f 62 61  n generate globa
179b0 6c 6c 79 20 75 6e 69 71 75 65 20 69 64 65 6e 74  lly unique ident
179c0 69 66 69 65 72 73 0a 20 20 75 73 69 6e 67 20 74  ifiers.  using t
179d0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 67  his function tog
179e0 65 74 68 65 72 20 77 69 74 68 20 5b 68 65 78 28  ether with [hex(
179f0 29 5d 20 61 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77  )] and/or.  [low
17a00 65 72 28 29 5d 20 6c 69 6b 65 20 74 68 69 73 3a  er()] like this:
17a10 3c 2f 70 3e 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75  </p>..  <blockqu
17a20 6f 74 65 3e 0a 20 20 68 65 78 28 72 61 6e 64 6f  ote>.  hex(rando
17a30 6d 62 6c 6f 62 28 31 36 29 29 3c 62 72 3e 3c 2f  mblob(16))<br></
17a40 62 72 3e 0a 20 20 6c 6f 77 65 72 28 68 65 78 28  br>.  lower(hex(
17a50 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 29  randomblob(16)))
17a60 0a 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  .  </blockquote>
17a70 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 65 70  .}..funcdef {rep
17a80 6c 61 63 65 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20  lace(X,Y,Z)} {} 
17a90 7b 0a 20 20 5e 54 68 65 20 72 65 70 6c 61 63 65  {.  ^The replace
17aa0 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
17ab0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
17ac0 67 20 66 6f 72 6d 65 64 20 62 79 20 73 75 62 73  g formed by subs
17ad0 74 69 74 75 74 69 6e 67 0a 20 20 73 74 72 69 6e  tituting.  strin
17ae0 67 20 5a 20 66 6f 72 20 65 76 65 72 79 20 6f 63  g Z for every oc
17af0 63 75 72 72 65 6e 63 65 20 6f 66 20 73 74 72 69  currence of stri
17b00 6e 67 20 59 20 69 6e 20 73 74 72 69 6e 67 20 58  ng Y in string X
17b10 2e 20 20 5e 54 68 65 20 5b 42 49 4e 41 52 59 5d  .  ^The [BINARY]
17b20 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  .  collating seq
17b30 75 65 6e 63 65 20 69 73 20 75 73 65 64 20 66 6f  uence is used fo
17b40 72 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20  r comparisons.  
17b50 5e 49 66 20 59 20 69 73 20 61 6e 20 65 6d 70 74  ^If Y is an empt
17b60 79 0a 20 20 73 74 72 69 6e 67 20 74 68 65 6e 20  y.  string then 
17b70 72 65 74 75 72 6e 20 58 20 75 6e 63 68 61 6e 67  return X unchang
17b80 65 64 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 6f  ed.  ^If Z is no
17b90 74 20 69 6e 69 74 69 61 6c 6c 79 0a 20 20 61 20  t initially.  a 
17ba0 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 63 61  string, it is ca
17bb0 73 74 20 74 6f 20 61 20 55 54 46 2d 38 20 73 74  st to a UTF-8 st
17bc0 72 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 70 72  ring prior to pr
17bd0 6f 63 65 73 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e  ocessing..}..fun
17be0 63 64 65 66 20 7b 72 6f 75 6e 64 28 58 29 20 72  cdef {round(X) r
17bf0 6f 75 6e 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  ound(X,Y)} {} {.
17c00 20 20 5e 54 68 65 20 72 6f 75 6e 64 28 58 2c 59    ^The round(X,Y
17c10 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
17c20 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  ns a floating-po
17c30 69 6e 74 0a 20 20 76 61 6c 75 65 20 58 20 72 6f  int.  value X ro
17c40 75 6e 64 65 64 20 74 6f 20 59 20 64 69 67 69 74  unded to Y digit
17c50 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f  s to the right o
17c60 66 20 74 68 65 20 64 65 63 69 6d 61 6c 20 70 6f  f the decimal po
17c70 69 6e 74 2e 0a 20 20 5e 49 66 20 74 68 65 20 59  int..  ^If the Y
17c80 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69   argument is omi
17c90 74 74 65 64 2c 20 69 74 20 69 73 20 61 73 73 75  tted, it is assu
17ca0 6d 65 64 20 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a  med to be 0..}..
17cb0 66 75 6e 63 64 65 66 20 7b 72 74 72 69 6d 28 58  funcdef {rtrim(X
17cc0 29 20 72 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d  ) rtrim(X,Y)} {}
17cd0 20 7b 0a 20 20 5e 54 68 65 20 72 74 72 69 6d 28   {.  ^The rtrim(
17ce0 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
17cf0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
17d00 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
17d10 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
17d20 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
17d30 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
17d40 20 74 68 65 20 72 69 67 68 74 20 73 69 64 65 20   the right side 
17d50 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68 65 20  of X..  ^If the 
17d60 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d  Y argument is om
17d70 69 74 74 65 64 2c 20 72 74 72 69 6d 28 58 29 20  itted, rtrim(X) 
17d80 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20 66  removes spaces f
17d90 72 6f 6d 20 74 68 65 20 72 69 67 68 74 0a 20 20  rom the right.  
17da0 73 69 64 65 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75  side of X..}..fu
17db0 6e 63 64 65 66 20 7b 73 6f 75 6e 64 65 78 28 58  ncdef {soundex(X
17dc0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
17dd0 6f 75 6e 64 65 78 28 58 29 20 66 75 6e 63 74 69  oundex(X) functi
17de0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
17df0 69 6e 67 20 74 68 61 74 20 69 73 20 74 68 65 20  ing that is the 
17e00 73 6f 75 6e 64 65 78 20 65 6e 63 6f 64 69 6e 67  soundex encoding
17e10 20 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e   .  of the strin
17e20 67 20 58 2e 0a 20 20 5e 54 68 65 20 73 74 72 69  g X..  ^The stri
17e30 6e 67 20 22 3f 30 30 30 22 20 69 73 20 72 65 74  ng "?000" is ret
17e40 75 72 6e 65 64 20 69 66 20 74 68 65 20 61 72 67  urned if the arg
17e50 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c 20 6f 72  ument is NULL or
17e60 20 63 6f 6e 74 61 69 6e 73 0a 20 20 6e 6f 20 41   contains.  no A
17e70 53 43 49 49 20 61 6c 70 68 61 62 65 74 69 63 20  SCII alphabetic 
17e80 63 68 61 72 61 63 74 65 72 73 2e 0a 20 20 5e 28  characters..  ^(
17e90 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
17ea0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 53 51   omitted from SQ
17eb0 4c 69 74 65 20 62 79 20 64 65 66 61 75 6c 74 2e  Lite by default.
17ec0 0a 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 61 76  .  It is only av
17ed0 61 69 6c 61 62 6c 65 20 69 66 20 74 68 65 20 5b  ailable if the [
17ee0 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 5d 20  SQLITE_SOUNDEX] 
17ef0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
17f00 69 6f 6e 0a 20 20 69 73 20 75 73 65 64 20 77 68  ion.  is used wh
17f10 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75 69  en SQLite is bui
17f20 6c 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lt.)^.}..funcdef
17f30 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65   {sqlite_compile
17f40 6f 70 74 69 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b  option_get(N)} {
17f50 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74  } {.  ^The sqlit
17f60 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
17f70 67 65 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69  get() SQL functi
17f80 6f 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20  on is a wrapper 
17f90 61 72 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71  around the.  [sq
17fa0 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
17fb0 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b  ion_get()] C/C++
17fc0 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68   function..  ^Th
17fd0 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
17fe0 6e 73 20 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70  ns the N-th comp
17ff0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
18000 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51  used to build SQ
18010 4c 69 74 65 0a 20 20 6f 72 20 4e 55 4c 4c 20 69  Lite.  or NULL i
18020 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61  f N is out of ra
18030 6e 67 65 2e 20 20 53 65 65 20 61 6c 73 6f 20 74  nge.  See also t
18040 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  he [compile_opti
18050 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a  ons pragma]..}..
18060 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
18070 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
18080 65 64 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ed(X)} {} {.  ^T
18090 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  he sqlite_compil
180a0 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 20 53  eoption_used() S
180b0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  QL function is a
180c0 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20   wrapper around 
180d0 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63  the.  [sqlite3_c
180e0 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65  ompileoption_use
180f0 64 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74  d()] C/C++ funct
18100 69 6f 6e 2e 0a 20 20 5e 57 68 65 6e 20 74 68 65  ion..  ^When the
18110 20 61 72 67 75 6d 65 6e 74 20 58 20 74 6f 20 73   argument X to s
18120 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
18130 69 6f 6e 5f 75 73 65 64 28 58 29 20 69 73 20 61  ion_used(X) is a
18140 20 73 74 72 69 6e 67 20 77 68 69 63 68 0a 20 20   string which.  
18150 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
18160 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
18170 74 69 6f 6e 2c 20 74 68 69 73 20 72 6f 75 74 69  tion, this routi
18180 6e 65 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  ne returns true 
18190 28 31 29 20 6f 72 0a 20 20 66 61 6c 73 65 20 28  (1) or.  false (
181a0 30 29 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  0) depending on 
181b0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
181c0 68 61 74 20 6f 70 74 69 6f 6e 20 77 61 73 20 75  hat option was u
181d0 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 0a 20  sed during the. 
181e0 20 62 75 69 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64   build..}..funcd
181f0 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72 63  ef {sqlite_sourc
18200 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  e_id()} {} {.  ^
18210 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72 63  The sqlite_sourc
18220 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  e_id() function 
18230 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
18240 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73   that identifies
18250 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63 20   the.  specific 
18260 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73  version of the s
18270 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74 20  ource code that 
18280 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69 6c  was used to buil
18290 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20 6c  d the SQLite.  l
182a0 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73 74  ibrary.  ^The st
182b0 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
182c0 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69   sqlite_source_i
182d0 64 28 29 20 62 65 67 69 6e 73 20 77 69 74 68 0a  d() begins with.
182e0 20 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74    the date and t
182f0 69 6d 65 20 74 68 61 74 20 74 68 65 20 73 6f 75  ime that the sou
18300 72 63 65 20 63 6f 64 65 20 77 61 73 20 63 68 65  rce code was che
18310 63 6b 65 64 20 69 6e 20 61 6e 64 20 69 73 20 66  cked in and is f
18320 6f 6c 6c 6f 77 73 20 62 79 0a 20 20 61 6e 20 53  ollows by.  an S
18330 48 41 31 20 68 61 73 68 20 74 68 61 74 20 75 6e  HA1 hash that un
18340 69 71 75 65 6c 79 20 69 64 65 6e 74 69 66 69 65  iquely identifie
18350 73 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65  s the source tre
18360 65 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69  e.  ^This functi
18370 6f 6e 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77  on is.  an SQL w
18380 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
18390 65 20 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63  e [sqlite3_sourc
183a0 65 69 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61  eid()] C interfa
183b0 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ce..}..funcdef {
183c0 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
183d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
183e0 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66  lite_version() f
183f0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
18400 74 68 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69  the version stri
18410 6e 67 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ng for the SQLit
18420 65 0a 20 20 6c 69 62 72 61 72 79 20 74 68 61 74  e.  library that
18430 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54   is running.  ^T
18440 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
18450 61 6e 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72  an SQL.  wrapper
18460 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c   around the [sql
18470 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
18480 29 5d 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a  )] C-interface..
18490 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73  }..funcdef {subs
184a0 74 72 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72  tr(X,Y,Z) substr
184b0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
184c0 68 65 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  he substr(X,Y,Z)
184d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
184e0 73 20 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66  s a substring of
184f0 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20   input string X 
18500 74 68 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69  that begins.  wi
18510 74 68 20 74 68 65 20 59 2d 74 68 20 63 68 61 72  th the Y-th char
18520 61 63 74 65 72 20 61 6e 64 20 77 68 69 63 68 20  acter and which 
18530 69 73 20 5a 20 63 68 61 72 61 63 74 65 72 73 20  is Z characters 
18540 6c 6f 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73  long..  ^If Z is
18550 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75   omitted then su
18560 62 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  bstr(X,Y) return
18570 73 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73  s all characters
18580 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64   through the end
18590 0a 20 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  .  of the string
185a0 20 58 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74   X beginning wit
185b0 68 20 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54  h the Y-th..  ^T
185c0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61  he left-most cha
185d0 72 61 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e  racter of X is n
185e0 75 6d 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20  umber 1.  ^If Y 
185f0 69 73 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68  is negative.  th
18600 65 6e 20 74 68 65 20 66 69 72 73 74 20 63 68 61  en the first cha
18610 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 75  racter of the su
18620 62 73 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64  bstring is found
18630 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f   by counting fro
18640 6d 20 74 68 65 0a 20 20 72 69 67 68 74 20 72 61  m the.  right ra
18650 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65  ther than the le
18660 66 74 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65  ft.  ^If Z is ne
18670 67 61 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68  gative then.  th
18680 65 20 61 62 73 28 5a 29 20 63 68 61 72 61 63 74  e abs(Z) charact
18690 65 72 73 20 70 72 65 63 65 64 69 6e 67 20 74 68  ers preceding th
186a0 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65 72  e Y-th character
186b0 20 61 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20   are returned.. 
186c0 20 5e 49 66 20 58 20 69 73 20 61 20 73 74 72 69   ^If X is a stri
186d0 6e 67 20 74 68 65 6e 20 63 68 61 72 61 63 74 65  ng then characte
186e0 72 73 20 69 6e 64 69 63 65 73 20 72 65 66 65 72  rs indices refer
186f0 20 74 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38   to actual UTF-8
18700 20 0a 20 20 63 68 61 72 61 63 74 65 72 73 2e 20   .  characters. 
18710 20 5e 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42   ^If X is a BLOB
18720 20 74 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65   then the indice
18730 73 20 72 65 66 65 72 20 74 6f 20 62 79 74 65 73  s refer to bytes
18740 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f  ..}..funcdef {to
18750 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b  tal_changes()} {
18760 7d 20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c  } {.  ^The total
18770 5f 63 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74  _changes() funct
18780 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
18790 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68  number of row ch
187a0 61 6e 67 65 73 0a 20 20 63 61 75 73 65 64 20 62  anges.  caused b
187b0 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
187c0 20 6f 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61   or DELETE.  sta
187d0 74 65 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68  tements since th
187e0 65 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61  e current databa
187f0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61  se connection wa
18800 73 20 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69  s opened..  ^Thi
18810 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  s function is a 
18820 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
18830 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61  he [sqlite3_tota
18840 6c 5f 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43  l_changes()].  C
18850 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
18860 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d  }..funcdef {trim
18870 28 58 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b  (X) trim(X,Y)} {
18880 7d 20 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28  } {.  ^The trim(
18890 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  X,Y) function re
188a0 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66  turns a string f
188b0 6f 72 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e  ormed by removin
188c0 67 20 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20  g any and all.  
188d0 63 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20  characters that 
188e0 61 70 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d  appear in Y from
188f0 20 62 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e   both ends of X.
18900 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
18910 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
18920 2c 20 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65  , trim(X) remove
18930 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f  s spaces from bo
18940 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a  th ends of X..}.
18950 0a 66 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66  .funcdef {typeof
18960 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
18970 20 74 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74   typeof(X) funct
18980 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74  ion returns a st
18990 72 69 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61  ring that indica
189a0 74 65 73 20 74 68 65 20 5b 64 61 74 61 74 79 70  tes the [datatyp
189b0 65 5d 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72  e] of.  the expr
189c0 65 73 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22  ession X: "null"
189d0 2c 20 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65  , "integer", "re
189e0 61 6c 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20  al", "text", or 
189f0 22 62 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64  "blob"..}..funcd
18a00 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
18a10 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
18a20 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
18a30 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
18a40 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
18a50 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
18a60 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
18a70 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
18a80 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
18a90 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
18aa0 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
18ab0 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
18ac0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
18ad0 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
18ae0 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
18af0 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
18b00 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
18b10 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
18b20 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
18b30 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
18b40 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
18b50 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
18b60 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
18b70 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
18b80 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
18b90 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
18ba0 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
18bb0 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
18bc0 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
18bd0 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
18be0 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
18bf0 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
18c00 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
18c10 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
18c20 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
18c30 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 3c 2f 74 61 62  ..}.</tcl>.</tab
18c40 6c 65 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  le>..<tcl>.#####
18c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c90 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
18ca0 6e 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65  n {Date And Time
18cb0 20 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65   Functions} date
18cc0 66 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 7d  func {*datefunc}
18cd0 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61  .hd_keywords {da
18ce0 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  te() SQL functio
18cf0 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c 20 66  n} {time() SQL f
18d00 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79 77  unction}.hd_keyw
18d10 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65 28 29  ords {datetime()
18d20 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b   SQL function} {
18d30 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51 4c 20  julianday() SQL 
18d40 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65 79  function}.hd_key
18d50 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d 65 28  words {strftime(
18d60 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
18d70 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  </tcl>..<p>.SQLi
18d80 74 65 20 73 75 70 70 6f 72 74 73 20 66 69 76 65  te supports five
18d90 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
18da0 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f 6c 6c  unctions as foll
18db0 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c  ows:.</p>..<p>.<
18dc0 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61  ol>.<li> ^(<b>da
18dd0 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  te(</b><i>timest
18de0 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
18df0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
18e00 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
18e10 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69 6d 65  >.<li> ^(<b>time
18e20 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69  (</b><i>timestri
18e30 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f  ng, modifier, mo
18e40 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c  difier, ...</i><
18e50 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a  b>)</b>)^ </li>.
18e60 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65 74 69  <li> ^(<b>dateti
18e70 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
18e80 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
18e90 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
18ea0 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
18eb0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75 6c 69  >.<li> ^(<b>juli
18ec0 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74 69 6d  anday(</b><i>tim
18ed0 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65  estring, modifie
18ee0 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e  r, modifier, ...
18ef0 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c  </i><b>)</b>)^ <
18f00 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 73  /li>.<li> ^(<b>s
18f10 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 66  trftime(</b><i>f
18f20 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72 69 6e  ormat, timestrin
18f30 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64  g, modifier, mod
18f40 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62  ifier, ...</i><b
18f50 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c  >)</b>)^ </li>.<
18f60 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c 20 66  /ol>..<p>.^All f
18f70 69 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ive date and tim
18f80 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61 6b 65  e functions take
18f90 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67 20 61   a time string a
18fa0 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e 20 0a  s an argument. .
18fb0 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67  ^The time string
18fc0 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
18fd0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
18fe0 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20 73 74  ifiers. .^The st
18ff0 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f  rftime() functio
19000 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61 20 66  n also takes a f
19010 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61 73 20  ormat string as 
19020 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
19030 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  nt..</p>..<p>.Th
19040 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
19050 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
19060 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74 70 3a  subset of.[http:
19070 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
19080 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36 30 31  rg/wiki/ISO_8601
19090 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64 61 74   | IS0-8601] dat
190a0 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72 6d 61  e and time.forma
190b0 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28 29 20  ts..^The date() 
190c0 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
190d0 20 74 68 65 20 64 61 74 65 20 69 6e 20 74 68 69   the date in thi
190e0 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59 2d 4d  s format: YYYY-M
190f0 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69 6d 65  M-DD. .^The time
19100 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
19110 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61 73 20  rns the time as 
19120 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68 65 20  HH:MM:SS. .^The 
19130 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e 63 74  datetime() funct
19140 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59 59 59  ion returns "YYY
19150 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
19160 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69 61 6e  ". .^(The julian
19170 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  day() function r
19180 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68 74 74  eturns the .[htt
19190 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
191a0 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
191b0 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
191c0 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65 72 20  y] - the.number 
191d0 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 6e 6f  of days since no
191e0 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63 68 20  on in Greenwich 
191f0 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34 2c 20  on November 24, 
19200 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68 74 74  4714 B.C. .([htt
19210 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
19220 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c 65 70  .org/wiki/Prolep
19230 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f 63 61  tic_Gregorian_ca
19240 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65 70 74  lendar | Prolept
19250 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63 61 6c  ic Gregorian cal
19260 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68 65 20  endar]).)^.^The 
19270 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75 74 69  strftime() routi
19280 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  ne returns the d
19290 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20 61 63  ate formatted ac
192a0 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68 65 20  cording to .the 
192b0 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 70  format string sp
192c0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 66  ecified as the f
192d0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 5e  irst argument..^
192e0 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  The format strin
192f0 67 20 73 75 70 70 6f 72 74 73 20 74 68 65 20 6d  g supports the m
19300 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62 73 74  ost common subst
19310 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64 20 69  itutions found i
19320 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 6f  n the .[http://o
19330 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f 6e 6c  pengroup.org/onl
19340 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38 37 39  inepubs/00790879
19350 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65 2e 68  9/xsh/strftime.h
19360 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65 28 29  tml | strftime()
19370 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f 6d 20   function].from 
19380 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
19390 69 62 72 61 72 79 20 70 6c 75 73 20 74 77 6f 20  ibrary plus two 
193a0 6e 65 77 20 73 75 62 73 74 69 74 75 74 69 6f 6e  new substitution
193b0 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a 5e 28  s, %f and %J..^(
193c0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73  The following is
193d0 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69 73 74   a complete list
193e0 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66 74 69   of valid strfti
193f0 6d 65 28 29 20 73 75 62 73 74 69 74 75 74 69 6f  me() substitutio
19400 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ns:.</p>..<block
19410 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f  quote>.<table bo
19420 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64  rder="0" cellpad
19430 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61  ding="0" cellspa
19440 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74  cing="0">.<tr><t
19450 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31 30 22  d><td width="10"
19460 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e  ><td></tr>..<tr>
19470 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74 64 3e  <td> %d <td><td>
19480 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a 20 30   day of month: 0
19490 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20 3c 74  0.<tr><td> %f <t
194a0 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f 6e 61  d><td> fractiona
194b0 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e 53 53  l seconds: SS.SS
194c0 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20 3c 74  S.<tr><td> %H <t
194d0 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30 30 2d  d><td> hour: 00-
194e0 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25 6a 20  24 .<tr><td> %j 
194f0 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20  <td><td> day of 
19500 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a 3c 74  year: 001-366.<t
19510 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e 3c 74  r><td> %J <td><t
19520 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75  d> Julian day nu
19530 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20 25 6d  mber.<tr><td> %m
19540 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74 68 3a   <td><td> month:
19550 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64 3e 20   01-12.<tr><td> 
19560 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69 6e 75  %M <td><td> minu
19570 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e 3c 74  te: 00-59.<tr><t
19580 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %s <td><td> s
19590 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37  econds since 197
195a0 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74 64 3e  0-01-01.<tr><td>
195b0 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73 65 63   %S <td><td> sec
195c0 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  onds: 00-59.<tr>
195d0 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74 64 3e  <td> %w <td><td>
195e0 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30 2d 36   day of week 0-6
195f0 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d 30 0a   with Sunday==0.
19600 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74 64 3e  <tr><td> %W <td>
19610 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79 65 61  <td> week of yea
19620 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c 74 64  r: 00-53.<tr><td
19630 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20 79 65  > %Y <td><td> ye
19640 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a 3c 74  ar: 0000-9999.<t
19650 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e 3c 74  r><td> %% <td><t
19660 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  d> %.</table>.</
19670 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
19680 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68 61 74  p>.^(Notice that
19690 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74 65 20   all other date 
196a0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
196b0 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72 65 73  ns can be expres
196c0 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f 66 20  sed.in terms of 
196d0 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f 70 3e  strftime():.</p>
196e0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ..<blockquote>.<
196f0 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22  table border="0"
19700 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22   cellpadding="0"
19710 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22   cellspacing="0"
19720 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46 75 6e  >.<tr><td><b>Fun
19730 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77 69 64  ction</b><td wid
19740 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62 3e 45  th="30"><td><b>E
19750 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66 74 69  quivalent strfti
19760 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c 74 64  me()</b>.<tr><td
19770 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20 20 20  >   date(...)   
19780 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
19790 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 27  ftime('%Y-%m-%d'
197a0 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
197b0 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20 20 20    time(...)     
197c0 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
197d0 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27 2c 20  ime('%H:%M:%S', 
197e0 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
197f0 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20 20 3c  datetime(...)  <
19800 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
19810 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25  e('%Y-%m-%d %H:%
19820 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
19830 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64 61 79  <td>   julianday
19840 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e 20 20  (...) <td><td>  
19850 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c 20 2e  strftime('%J', .
19860 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  ..).</table>.</b
19870 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
19880 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61 73 6f  >.The only reaso
19890 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69 6e 67  ns for providing
198a0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68 65 72   functions other
198b0 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65 28 29   than strftime()
198c0 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e 69 65   is.for convenie
198d0 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66 66 69  nce and for effi
198e0 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a 3c 68  ciency..</p>..<h
198f0 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73 3c 2f  3>Time Strings</
19900 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69 6d 65  h3>..<p>^(A time
19910 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65 20 69   string can be i
19920 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  n any of the fol
19930 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73 3a 3c  lowing formats:<
19940 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 3c  /p>..<ol>.<li> <
19950 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e  i>YYYY-MM-DD</i>
19960 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
19970 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c  -DD HH:MM</i>.<l
19980 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
19990 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c   HH:MM:SS</i>.<l
199a0 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44  i> <i>YYYY-MM-DD
199b0 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69   HH:MM:SS.SSS</i
199c0 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
199d0 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
199e0 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69  <i>HH:MM</i>.<li
199f0 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
19a00 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
19a10 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
19a20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
19a30 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
19a40 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
19a50 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  > <i>HH:MM</i>.<
19a60 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  li> <i>HH:MM:SS<
19a70 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
19a80 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69  M:SS.SSS</i>.<li
19a90 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c 6c 69  > <b>now</b>.<li
19aa0 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44 44 3c  > <i>DDDDDDDDDD<
19ab0 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  /i>.</ol>)^..<p>
19ac0 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35 20 74  .^In formats 5 t
19ad0 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20 22 54  hrough 7, the "T
19ae0 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c 20 63  " is a literal c
19af0 68 61 72 61 63 74 65 72 20 73 65 70 61 72 61 74  haracter separat
19b00 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20 61 6e  ing .the date an
19b10 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73 20 72  d the time, as r
19b20 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68 74 74  equired by .[htt
19b30 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72 67 2f  p://www.w3c.org/
19b40 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69 6d 65  TR/NOTE-datetime
19b50 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20 0a 5e   | ISO-8601]. .^
19b60 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f 75 67  Formats 8 throug
19b70 68 20 31 30 20 74 68 61 74 20 73 70 65 63 69 66  h 10 that specif
19b80 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20 61 73  y only a time as
19b90 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66 20 0a  sume a date of .
19ba0 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f 72 6d  2000-01-01. Form
19bb0 61 74 20 31 31 2c 20 74 68 65 20 73 74 72 69 6e  at 11, the strin
19bc0 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f 6e 76  g 'now', is conv
19bd0 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 0a  erted into the .
19be0 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64  current date and
19bf0 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69 6e 65   time as obtaine
19c00 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75 72 72  d from the xCurr
19c10 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64 0a 6f  entTime method.o
19c20 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76  f the [sqlite3_v
19c30 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20 75 73  fs] object in us
19c40 65 2e 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  e..^[http://en.w
19c50 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
19c60 69 2f 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e  i/Coordinated_Un
19c70 69 76 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55  iversal_Time | U
19c80 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
19c90 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d  ated Time (UTC)]
19ca0 20 69 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d   is used. .^Form
19cb0 61 74 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68  at 12 is the .[h
19cc0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
19cd0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
19ce0 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
19cf0 64 61 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72  day number].expr
19d00 65 73 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74  essed as a float
19d10 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
19d20 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66  .</p>..<h3>Modif
19d30 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  iers</h3>..<p>^T
19d40 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  he time string c
19d50 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  an be followed b
19d60 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
19d70 6f 64 69 66 69 65 72 73 20 74 68 61 74 20 0a 61  odifiers that .a
19d80 6c 74 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72  lter date and/or
19d90 20 74 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64   time. ^Each mod
19da0 69 66 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73  ifier.is a trans
19db0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
19dc0 73 20 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65  s applied to the
19dd0 20 74 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69   time value to i
19de0 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69  ts left..^Modifi
19df0 65 72 73 20 61 72 65 20 61 70 70 6c 69 65 64 20  ers are applied 
19e00 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
19e10 68 74 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70  ht; order is imp
19e20 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76  ortant..^(The av
19e30 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72  ailable modifier
19e40 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  s are as follows
19e50 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  .</p>..<ol>.<li>
19e60 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e   NNN days.<li> N
19e70 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e  NN hours.<li> NN
19e80 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e  N minutes.<li> N
19e90 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a  NN.NNNN seconds.
19ea0 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a  <li> NNN months.
19eb0 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c  <li> NNN years.<
19ec0 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e  li> start of mon
19ed0 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66  th.<li> start of
19ee0 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74   year.<li> start
19ef0 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65   of day.<li> wee
19f00 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78  kday N.<li> unix
19f10 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c  epoch.<li> local
19f20 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c  time.<li> utc .<
19f30 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  /ol>)^..<p>^The 
19f40 66 69 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69  first six modifi
19f50 65 72 73 20 28 31 20 74 68 72 6f 75 67 68 20 36  ers (1 through 6
19f60 29 20 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68  ) .simply add th
19f70 65 20 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75  e specified amou
19f80 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68  nt of time to th
19f90 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
19fa0 0a 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68  .specified by th
19fb0 65 20 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65  e preceding time
19fc0 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66  string and modif
19fd0 69 65 72 73 2e 0a 5e 4e 6f 74 65 20 74 68 61 74  iers..^Note that
19fe0 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f   "&plusmn;NNN mo
19ff0 6e 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72  nths" works by r
1a000 65 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69  endering the ori
1a010 67 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a  ginal date into.
1a020 74 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66  the YYYY-MM-DD f
1a030 6f 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68  ormat, adding th
1a040 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f  e &plusmn;NNN to
1a050 20 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61   the MM month va
1a060 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c  lue, then.normal
1a070 69 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  izing the result
1a080 2e 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78  .  ^Thus, for ex
1a090 61 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20  ample, the data 
1a0a0 32 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66  2001-03-31 modif
1a0b0 69 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68  ied.by '+1 month
1a0c0 27 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c  ' initially yiel
1a0d0 64 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62  ds 2001-04-31, b
1a0e0 75 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61  ut April only ha
1a0f0 73 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65  s 30 days.so the
1a100 20 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69   date is normali
1a110 7a 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30  zed to 2001-05-0
1a120 31 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65  1.  ^A similar e
1a130 66 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65  ffect occurs whe
1a140 6e 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64  n.the original d
1a150 61 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20  ate is February 
1a160 32 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72  29 of a leapyear
1a170 20 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65   and the modifie
1a180 72 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79  r is.&plusmn;N y
1a190 65 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20  ears where N is 
1a1a0 6e 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f  not a multiple o
1a1b0 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  f four.</p>..<p>
1a1c0 5e 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20  ^The "start of" 
1a1d0 6d 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72  modifiers (7 thr
1a1e0 6f 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68  ough 9) shift th
1a1f0 65 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73  e date backwards
1a200 20 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69   .to the beginni
1a210 6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ng of the curren
1a220 74 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72  t month, year or
1a230 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54   day.</p>..<p>^T
1a240 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64  he "weekday" mod
1a250 69 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74  ifier advances t
1a260 68 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 20  he date forward 
1a270 74 6f 20 74 68 65 20 6e 65 78 74 20 64 61 74 65  to the next date
1a280 20 0a 77 68 65 72 65 20 74 68 65 20 77 65 65 6b   .where the week
1a290 64 61 79 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e  day number is N.
1a2a0 20 53 75 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f   Sunday is 0, Mo
1a2b0 6e 64 61 79 20 69 73 20 31 2c 20 61 6e 64 20 73  nday is 1, and s
1a2c0 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70  o forth.</p>..<p
1a2d0 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63 68  >^The "unixepoch
1a2e0 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29 20  " modifier (11) 
1a2f0 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69 74  only works if it
1a300 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
1a310 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72 69  lows .a timestri
1a320 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44 44 44  ng in the DDDDDD
1a330 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e 54  DDDD format. .^T
1a340 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61 75  his modifier cau
1a350 73 65 73 20 74 68 65 20 44 44 44 44 44 44 44 44  ses the DDDDDDDD
1a360 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70 72  DD to be interpr
1a370 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20 4a  eted not .as a J
1a380 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  ulian day number
1a390 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79 20   as it normally 
1a3a0 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61 73  would be, but as
1a3b0 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1a3c0 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 55  pedia.org/wiki/U
1a3d0 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78 20  nix_time | Unix 
1a3e0 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75 6d  Time] - the .num
1a3f0 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
1a400 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20 74  ince 1970.  If t
1a410 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1a420 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f 74  odifier does not
1a430 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73 74  .follow a timest
1a440 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72 6d  ring of the form
1a450 20 44 44 44 44 44 44 44 44 44 44 20 77 68 69 63   DDDDDDDDDD whic
1a460 68 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  h expresses the 
1a470 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e 64  number.of second
1a480 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72 20  s since 1970 or 
1a490 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69 65  if other modifie
1a4a0 72 73 0a 73 65 70 61 72 61 74 65 20 74 68 65 20  rs.separate the 
1a4b0 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
1a4c0 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72 20  fier from prior 
1a4d0 44 44 44 44 44 44 44 44 44 44 20 74 68 65 6e 20  DDDDDDDDDD then 
1a4e0 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73 20  the.behavior is 
1a4f0 75 6e 64 65 66 69 6e 65 64 2e 0a 44 75 65 20 74  undefined..Due t
1a500 6f 20 70 72 65 63 69 73 69 6f 6e 20 6c 69 6d 69  o precision limi
1a510 74 61 74 69 6f 6e 73 20 69 6d 70 6f 73 65 64 20  tations imposed 
1a520 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
1a530 61 74 69 6f 6e 73 20 75 73 65 0a 6f 66 20 36 34  ations use.of 64
1a540 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2c 20 74  -bit integers, t
1a550 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d  he "unixepoch" m
1a560 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72  odifier only wor
1a570 6b 73 20 66 6f 72 0a 64 61 74 65 73 20 62 65 74  ks for.dates bet
1a580 77 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20  ween 0000-01-01 
1a590 30 30 3a 30 30 3a 30 30 20 61 6e 64 20 35 33 35  00:00:00 and 535
1a5a0 32 2d 31 31 2d 30 31 20 31 30 3a 35 32 3a 34 37  2-11-01 10:52:47
1a5b0 20 28 75 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20   (unix times.of 
1a5c0 2d 36 32 31 36 37 32 31 39 32 30 30 20 74 68 72  -62167219200 thr
1a5d0 6f 75 67 68 20 31 30 36 37 35 31 39 39 31 36 37  ough 10675199167
1a5e0 29 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  ).</p>..<p>^The 
1a5f0 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69  "localtime" modi
1a600 66 69 65 72 20 28 31 32 29 20 61 73 73 75 6d 65  fier (12) assume
1a610 73 20 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e  s the time strin
1a620 67 20 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73  g to its left is
1a630 20 69 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f   in.Universal Co
1a640 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28  ordinated Time (
1a650 55 54 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73  UTC) and adjusts
1a660 20 74 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67   the time.string
1a670 20 73 6f 20 74 68 61 74 20 69 74 20 64 69 73 70   so that it disp
1a680 6c 61 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20  lays localtime. 
1a690 20 49 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a   If "localtime".
1a6a0 66 6f 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74  follows a time t
1a6b0 68 61 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20  hat is not UTC, 
1a6c0 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
1a6d0 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  r is undefined..
1a6e0 5e 28 54 68 65 20 22 75 74 63 22 20 69 73 20 74  ^(The "utc" is t
1a6f0 68 65 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22  he opposite of "
1a700 6c 6f 63 61 6c 74 69 6d 65 22 2e 20 20 22 75 74  localtime".  "ut
1a710 63 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  c" assumes that 
1a720 74 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74  the string.to it
1a730 73 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65  s left is in the
1a740 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20   local timezone 
1a750 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74  and adjusts that
1a760 20 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e   string to be in
1a770 20 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70   UTC.)^.If the p
1a780 72 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e  rior string is n
1a790 6f 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c  ot in localtime,
1a7a0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
1a7b0 20 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64   of "utc" is.und
1a7c0 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  efined.</p>..<h3
1a7d0 3e 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a  >Examples</h3>..
1a7e0 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
1a7f0 20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70   current date.<p
1a800 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53  >..<blockquote>S
1a810 45 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27  ELECT date('now'
1a820 29 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  );</blockquote>)
1a830 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1a840 74 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20  the last day of 
1a850 74 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74  the current mont
1a860 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  h.</p>..<blockqu
1a870 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28  ote>SELECT date(
1a880 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
1a890 6d 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68  month','+1 month
1a8a0 27 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62  ','-1 day');.</b
1a8b0 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28  lockquote>)^..^(
1a8c0 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64  <p>Compute the d
1a8d0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76  ate and time giv
1a8e0 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74  en a unix timest
1a8f0 61 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c  amp 1092941466.<
1a900 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
1a910 3e 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74  >.    SELECT dat
1a920 65 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36  etime(1092941466
1a930 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a  , 'unixepoch');.
1a940 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1a950 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
1a960 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
1a970 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d  given a unix tim
1a980 65 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36  estamp 109294146
1a990 36 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61  6, and .compensa
1a9a0 74 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61  te for your loca
1a9b0 6c 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a  l timezone.</p>.
1a9c0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1a9d0 53 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28  SELECT datetime(
1a9e0 31 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69  1092941466, 'uni
1a9f0 78 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74  xepoch', 'localt
1aa00 69 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  ime');.</blockqu
1aa10 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
1aa20 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
1aa30 20 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e   unix timestamp.
1aa40 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1aa50 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66  e>.  SELECT strf
1aa60 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29  time('%s','now')
1aa70 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1aa80 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
1aa90 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61  the number of da
1aaa0 79 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67  ys since the sig
1aab0 6e 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44  ning of the US D
1aac0 65 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e  eclaration.of In
1aad0 64 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a  dependence.</p>.
1aae0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
1aaf0 53 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79  SELECT julianday
1ab00 28 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e  ('now') - julian
1ab10 64 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27  day('1776-07-04'
1ab20 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  );.</blockquote>
1ab30 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65  )^..^(<p>Compute
1ab40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
1ab50 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70  econds since a p
1ab60 61 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74  articular moment
1ab70 20 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c   in 2004:</p>..<
1ab80 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45  blockquote>.  SE
1ab90 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
1aba0 73 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66  s','now') - strf
1abb0 74 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d  time('%s','2004-
1abc0 30 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29  01-01 02:34:56')
1abd0 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
1abe0 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65  ^..^(<p>.Compute
1abf0 20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65   the date of the
1ac00 20 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69   first Tuesday i
1ac10 6e 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68  n October.for th
1ac20 65 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a  e current year..
1ac30 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
1ac40 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65  e>.  SELECT date
1ac50 28 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66  ('now','start of
1ac60 20 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68   year','+9 month
1ac70 73 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b  s','weekday 2');
1ac80 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
1ac90 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
1aca0 68 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68  he time since th
1acb0 65 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20  e unix epoch in 
1acc0 73 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73  seconds .(like s
1acd0 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f  trftime('%s','no
1ace0 77 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75  w') except inclu
1acf0 64 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70  des fractional p
1ad00 61 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  art):</p>..<bloc
1ad10 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
1ad20 20 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77   (julianday('now
1ad30 27 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a  ') - 2440587.5)*
1ad40 38 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b  86400.0;.</block
1ad50 71 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61  quote>)^..<h3>Ca
1ad60 76 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f  veats And Bugs</
1ad70 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70  h3>..<p>The comp
1ad80 75 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c  utation of local
1ad90 20 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65   time depends he
1ada0 61 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69  avily on the whi
1adb0 6d 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e  m .of politician
1adc0 73 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69  s and is thus di
1add0 66 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63  fficult to get c
1ade0 6f 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20  orrect for .all 
1adf0 6c 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69  locales. ^In thi
1ae00 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  s implementation
1ae10 2c 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  , the standard C
1ae20 20 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69   library .functi
1ae30 6f 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  on localtime_r()
1ae40 20 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69   is used to assi
1ae50 73 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c  st in the calcul
1ae60 61 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20  ation of .local 
1ae70 74 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f  time.  ^(The .lo
1ae80 63 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75  caltime_r() C fu
1ae90 6e 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20  nction normally 
1aea0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79  only works for y
1aeb0 65 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37  ears.between 197
1aec0 30 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20  0 and 2037. For 
1aed0 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68  dates outside th
1aee0 69 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65  is range, SQLite
1aef0 20 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61   .attempts to ma
1af00 70 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20  p the year into 
1af10 61 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65  an equivalent ye
1af20 61 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20  ar within .this 
1af30 72 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61  range, do the ca
1af40 6c 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20  lculation, then 
1af50 6d 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63  map the year bac
1af60 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28  k.)^</p>...<p>^(
1af70 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20  These functions 
1af80 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61  only work for da
1af90 74 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30  tes between 0000
1afa0 2d 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a  -01-01 00:00:00.
1afb0 61 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32  and 9999-12-31 2
1afc0 33 3a 35 39 3a 35 39 20 28 6a 75 6c 69 64 61 6e  3:59:59 (julidan
1afd0 20 64 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32   day numbers 172
1afe0 31 30 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35  1059.5 through 5
1aff0 33 37 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72  373484.5).)^.For
1b000 20 64 61 74 65 73 20 6f 75 74 73 69 64 65 20 74   dates outside t
1b010 68 61 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72  hat range, the r
1b020 65 73 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a  esults of these.
1b030 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e  functions are un
1b040 64 65 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  defined.</p>..<p
1b050 3e 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f  >Non-Vista Windo
1b060 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c  ws platforms onl
1b070 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65  y support one se
1b080 74 20 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20  t of DST rules. 
1b090 0a 56 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70  .Vista only supp
1b0a0 6f 72 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66  orts two. Theref
1b0b0 6f 72 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c  ore, on these pl
1b0c0 61 74 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72  atforms, .histor
1b0d0 69 63 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61  ical DST calcula
1b0e0 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e  tions will be in
1b0f0 63 6f 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78  correct. .For ex
1b100 61 6d 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53  ample, in the US
1b110 2c 20 69 6e 20 32 30 30 37 20 74 68 65 20 44 53  , in 2007 the DS
1b120 54 20 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e  T rules changed.
1b130 20 0a 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64   .Non-Vista Wind
1b140 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70  ows platforms ap
1b150 70 6c 79 20 74 68 65 20 6e 65 77 20 32 30 30 37  ply the new 2007
1b160 20 44 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61   DST rules .to a
1b170 6c 6c 20 70 72 65 76 69 6f 75 73 20 79 65 61 72  ll previous year
1b180 73 20 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61  s as well. Vista
1b190 20 64 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62   does somewhat b
1b1a0 65 74 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65  etter.getting re
1b1b0 73 75 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61  sults correct ba
1b1c0 63 6b 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e  ck to 1986, when
1b1d0 20 74 68 65 20 72 75 6c 65 73 20 77 65 72 65 20   the rules were 
1b1e0 61 6c 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70  also changed.</p
1b1f0 3e 0a 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e  >..<p>All intern
1b200 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  al computations 
1b210 61 73 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74  assume the .[htt
1b220 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1b230 2e 6f 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72  .org/wiki/Gregor
1b240 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47  ian_calendar | G
1b250 72 65 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61  regorian calenda
1b260 72 5d 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69  r].system.  It i
1b270 73 20 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74  s also assumed t
1b280 68 61 74 20 65 76 65 72 79 0a 64 61 79 20 69 73  hat every.day is
1b290 20 65 78 61 63 74 6c 79 20 38 36 34 30 30 20 73   exactly 86400 s
1b2a0 65 63 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69  econds in durati
1b2b0 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  on.</p>..<tcl>.#
1b2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b300 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
1b310 63 74 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65  ction {Aggregate
1b320 20 46 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66   Functions} aggf
1b330 75 6e 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 3c  unc {*aggfunc}.<
1b340 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 54 68 65 20 61  /tcl>..<p>.The a
1b350 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1b360 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61  ns shown below a
1b370 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20  re available by 
1b380 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74 69  default.  Additi
1b390 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20 66  onal.aggregate f
1b3a0 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e  unctions written
1b3b0 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64 64   in C may be add
1b3c0 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 73  ed using the .[s
1b3d0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
1b3e0 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41 50  nction()]</a>.AP
1b3f0 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20  I.</p>..<p>.^In 
1b400 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66 75  any aggregate fu
1b410 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65  nction that take
1b420 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  s a single argum
1b430 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d 65  ent, that argume
1b440 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65 64  nt.can be preced
1b450 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f 72  ed by the keywor
1b460 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49 6e  d DISTINCT.  ^In
1b470 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75 70   such cases, dup
1b480 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73 20  licate.elements 
1b490 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65 66  are filtered bef
1b4a0 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65 64  ore being passed
1b4b0 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65 67   into the aggreg
1b4c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e 46  ate function..^F
1b4d0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
1b4e0 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74 28  function "count(
1b4f0 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69 6c  distinct X)" wil
1b500 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  l return the num
1b510 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74 20  ber.of distinct 
1b520 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
1b530 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68   X instead of th
1b540 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1b550 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75 65  f non-null.value
1b560 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a 3c  s in column X..<
1b570 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  /p>..<table bord
1b580 65 72 3d 30 20 63 65 6c 6c 70 61 64 64 69 6e 67  er=0 cellpadding
1b590 3d 31 30 3e 0a 3c 74 63 6c 3e 0a 66 75 6e 63 64  =10>.<tcl>.funcd
1b5a0 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61 76  ef {avg(X)} {*av
1b5b0 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67 61  g {avg() aggrega
1b5c0 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
1b5d0 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75 6e    ^The avg() fun
1b5e0 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
1b5f0 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c 75  the average valu
1b600 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  e of all non-NUL
1b610 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68 69  L <i>X</i> withi
1b620 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e 53  n a.  group.  ^S
1b630 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20 76  tring and BLOB v
1b640 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  alues that do no
1b650 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d 62  t look like numb
1b660 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72 70  ers are.  interp
1b670 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e 54  reted as 0..  ^T
1b680 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
1b690 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20 66  () is always a f
1b6a0 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
1b6b0 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20  lue as long as. 
1b6c0 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74 20   at there is at 
1b6d0 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e 55  least one non-NU
1b6e0 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69 66  LL input even if
1b6f0 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61 72   all.  inputs ar
1b700 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54 68  e integers.  ^Th
1b710 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67 28  e result of avg(
1b720 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  ) is NULL if and
1b730 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72 65   only if.  there
1b740 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1b750 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66 75   inputs.  .}..fu
1b760 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29 20  ncdef {count(X) 
1b770 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75 6e  count(*)} {*coun
1b780 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72 65  t {count() aggre
1b790 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20  gate function}} 
1b7a0 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28 58  {.  ^The count(X
1b7b0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1b7c0 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66 20  ns.  a count of 
1b7d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
1b7e0 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58 3c  mes.  that <i>X<
1b7f0 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20  /i> is not NULL 
1b800 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54 68  in a group.  ^Th
1b810 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63 74  e count(*) funct
1b820 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20 61  ion.  (with no a
1b830 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72 6e  rguments) return
1b840 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
1b850 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
1b860 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
1b870 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61  def {group_conca
1b880 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63 61  t(X) group_conca
1b890 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72 6f  t(X,Y)} {.  *gro
1b8a0 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75 70  up_concat {group
1b8b0 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65 67  _concat() aggreg
1b8c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20  ate function}.} 
1b8d0 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f 63  {.  ^The group_c
1b8e0 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f 6e  oncat() function
1b8f0 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72   returns.  a str
1b900 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
1b910 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f   concatenation o
1b920 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  f.  all non-NULL
1b930 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58 3c   values of <i>X<
1b940 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d 65  /i>.  ^If parame
1b950 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20  ter <i>Y</i> is 
1b960 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20 69  present then.  i
1b970 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  t is used as the
1b980 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65 74   separator.  bet
1b990 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20 6f  ween instances o
1b9a0 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41 20  f <i>X</i>.  ^A 
1b9b0 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20 75  comma (",") is u
1b9c0 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61 72  sed as the separ
1b9d0 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c 2f  ator.  if <i>Y</
1b9e0 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20 20  i> is omitted.  
1b9f0 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  The order of the
1ba00 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65 6c   concatenated el
1ba10 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62 69  ements is.  arbi
1ba20 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64 65  trary..}..funcde
1ba30 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61 78  f {max(X)} {*max
1ba40 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61 78  AggFunc *agg_max
1ba50 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61 74   {max() aggregat
1ba60 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
1ba70 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67 72   ^The max() aggr
1ba80 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
1ba90 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78   returns the max
1baa0 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61 6c  imum value of al
1bab0 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
1bac0 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 61  group..  ^The ma
1bad0 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  ximum value is t
1bae0 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f  he value that wo
1baf0 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20  uld be returned 
1bb00 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52 44  last in an.  ORD
1bb10 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61 6d  ER BY on the sam
1bb20 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67 72  e column.  ^Aggr
1bb30 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74 75  egate max() retu
1bb40 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20 61  rns NULL .  if a
1bb50 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65  nd only if there
1bb60 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c   are no non-NULL
1bb70 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
1bb80 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
1bb90 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e 41   {min(X)} {*minA
1bba0 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e 20  ggFunc *agg_min 
1bbb0 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65  {min() aggregate
1bbc0 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20   function}} {.  
1bbd0 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72 65  ^The min() aggre
1bbe0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20  gate function.  
1bbf0 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e 69  returns the mini
1bc00 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c  mum non-NULL val
1bc10 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
1bc20 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
1bc30 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76 61   ^The minimum va
1bc40 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73 74  lue is the first
1bc50 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20   non-NULL value 
1bc60 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65 61  that would appea
1bc70 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52 20  r.  in an ORDER 
1bc80 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  BY of the column
1bc90 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d  ..  ^Aggregate m
1bca0 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c  in() returns NUL
1bcb0 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
1bcc0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
1bcd0 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73 20  n-NULL.  values 
1bce0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
1bcf0 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58 29  .funcdef {sum(X)
1bd00 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20 2a   total(X)} {.  *
1bd10 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74 6f  sumFunc *sum *to
1bd20 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67 67  tal.  {sum() agg
1bd30 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
1bd40 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67 72  .  {total() aggr
1bd50 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a  egate function}.
1bd60 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28 29  } {.  ^The sum()
1bd70 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67 67   and total() agg
1bd80 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1bd90 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f 66  .  return sum of
1bda0 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61   all non-NULL va
1bdb0 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75  lues in the grou
1bdc0 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20 61  p..  ^If there a
1bdd0 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69  re no non-NULL i
1bde0 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20 73  nput rows then s
1bdf0 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20 4e  um() returns.  N
1be00 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29 20  ULL but total() 
1be10 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20 4e  returns 0.0..  N
1be20 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d 61  ULL is not norma
1be30 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72 65  lly a helpful re
1be40 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75 6d  sult for the sum
1be50 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62 75   of no rows.  bu
1be60 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  t the SQL standa
1be70 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20 61  rd requires it a
1be80 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20 20  nd most other.  
1be90 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
1bea0 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20 73  ines implement s
1beb0 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73 6f  um() that way so
1bec0 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74 20   SQLite does it 
1bed0 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77 61  in the.  same wa
1bee0 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
1bef0 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20 54   compatible.   T
1bf00 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  he non-standard 
1bf10 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f 6e  total() function
1bf20 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20 61  .  is provided a
1bf30 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 77  s a convenient w
1bf40 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  ay to work aroun
1bf50 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70 72  d this design pr
1bf60 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20 53  oblem.  in the S
1bf70 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70 3e  QL language.</p>
1bf80 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73 75  ..  <p>^The resu
1bf90 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69 73  lt of total() is
1bfa0 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
1bfb0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
1bfc0 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66    ^The result of
1bfd0 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e 74   sum() is an int
1bfe0 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61 6c  eger value if al
1bff0 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  l non-NULL input
1c000 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e 0a  s are integers..
1c010 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74 20    ^If any input 
1c020 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69 74  to sum() is neit
1c030 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  her an integer o
1c040 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e 20  r a NULL.  then 
1c050 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61 20  sum() returns a 
1c060 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
1c070 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69 67  alue.  which mig
1c080 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78 69  ht be an approxi
1c090 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 72  mation to the tr
1c0a0 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c  ue sum.</p>..  <
1c0b0 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74 68  p>^Sum() will th
1c0c0 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72 20  row an "integer 
1c0d0 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70 74  overflow" except
1c0e0 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75 74  ion if all input
1c0f0 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72 73  s.  are integers
1c100 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20 61   or NULL.  and a
1c110 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
1c120 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e 79  ow occurs at any
1c130 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74 68   point during th
1c140 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a 20  e computation.. 
1c150 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72 20   ^Total() never 
1c160 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65  throws an intege
1c170 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f  r overflow..}.</
1c180 74 63 6c 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c  tcl>.</table>..<
1c190 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1c1a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c1b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c1d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c1e0 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45  ###.Section INSE
1c1f0 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52  RT insert {INSER
1c200 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 42 75 62  T *INSERTs}..Bub
1c210 62 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72  bleDiagram inser
1c220 74 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  t-stmt 1.</tcl>.
1c230 0a 3c 70 3e 54 68 65 20 49 4e 53 45 52 54 20 73  .<p>The INSERT s
1c240 74 61 74 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69  tatement comes i
1c250 6e 20 74 68 72 65 65 20 62 61 73 69 63 20 66 6f  n three basic fo
1c260 72 6d 73 2e 20 20 0a 3c 75 6c 3e 0a 3c 6c 69 3e  rms.  .<ul>.<li>
1c270 3c 70 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f  <p>^The first fo
1c280 72 6d 20 28 77 69 74 68 20 74 68 65 20 22 56 41  rm (with the "VA
1c290 4c 55 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63  LUES" keyword) c
1c2a0 72 65 61 74 65 73 20 61 20 73 69 6e 67 6c 65 20  reates a single 
1c2b0 6e 65 77 20 72 6f 77 20 69 6e 0a 61 6e 20 65 78  new row in.an ex
1c2c0 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49  isting table. ^I
1c2d0 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
1c2e0 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74 68   is specified th
1c2f0 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
1c300 0a 76 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20  .values must be 
1c310 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
1c320 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1c330 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1c340 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68  ^In this case.th
1c350 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
1c360 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
1c370 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
1c380 69 6e 20 74 68 65 20 56 41 4c 55 45 53 20 6c 69  in the VALUES li
1c390 73 74 20 69 73 20 0a 69 6e 73 65 72 74 65 64 20  st is .inserted 
1c3a0 69 6e 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f  into the left-mo
1c3b0 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
1c3c0 20 6e 65 77 20 72 6f 77 2c 20 61 6e 64 20 73 6f   new row, and so
1c3d0 20 6f 6e 2e 20 5e 49 66 20 61 0a 63 6f 6c 75 6d   on. ^If a.colum
1c3e0 6e 2d 6c 69 73 74 20 69 73 20 73 70 65 63 69 66  n-list is specif
1c3f0 69 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  ied, then the nu
1c400 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6d  mber of values m
1c410 75 73 74 20 6d 61 74 63 68 20 74 68 65 20 6e 75  ust match the nu
1c420 6d 62 65 72 20 6f 66 0a 73 70 65 63 69 66 69 65  mber of.specifie
1c430 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45 61 63 68  d columns. ^Each
1c440 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f   of the named co
1c450 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6e 65 77  lumns of the new
1c460 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65   row is populate
1c470 64 0a 77 69 74 68 20 74 68 65 20 72 65 73 75 6c  d.with the resul
1c480 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  ts of evaluating
1c490 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
1c4a0 6e 67 20 56 41 4c 55 45 53 20 65 78 70 72 65 73  ng VALUES expres
1c4b0 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c  sion. ^Table.col
1c4c0 75 6d 6e 73 20 74 68 61 74 20 64 6f 20 6e 6f 74  umns that do not
1c4d0 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 63   appear in the c
1c4e0 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72 65 20 70  olumn list are p
1c4f0 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68  opulated with th
1c500 65 20 64 65 66 61 75 6c 74 0a 63 6f 6c 75 6d 6e  e default.column
1c510 20 76 61 6c 75 65 20 28 73 70 65 63 69 66 69 65   value (specifie
1c520 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
1c530 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
1c540 61 74 65 6d 65 6e 74 29 2c 20 6f 72 20 77 69 74  atement), or wit
1c550 68 20 4e 55 4c 4c 20 69 66 0a 6e 6f 20 64 65 66  h NULL if.no def
1c560 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 73 70  ault value is sp
1c570 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70  ecified...<li><p
1c580 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d  >The second form
1c590 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73   of the INSERT s
1c5a0 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e  tatement contain
1c5b0 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  s a SELECT state
1c5c0 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f 66 20  ment.instead of 
1c5d0 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 2e  a VALUES clause.
1c5e0 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73   ^A new entry is
1c5f0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
1c600 68 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63  he table for eac
1c610 68 0a 72 6f 77 20 6f 66 20 64 61 74 61 20 72 65  h.row of data re
1c620 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
1c630 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73  ing the SELECT s
1c640 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20 61 20  tatement. ^If a 
1c650 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73  column-list is.s
1c660 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75  pecified, the nu
1c670 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1c680 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  in the result of
1c690 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74   the SELECT must
1c6a0 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20   be the same.as 
1c6b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  the number of it
1c6c0 65 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ems in the colum
1c6d0 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72 77 69  n-list. ^Otherwi
1c6e0 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75 6d 6e  se, if no column
1c6f0 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66 69  -list is.specifi
1c700 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ed, the number o
1c710 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1c720 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 53   result of the S
1c730 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74 68  ELECT must be th
1c740 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e 75  e same.as the nu
1c750 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1c760 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 41  in the table. ^A
1c770 6e 79 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  ny SELECT statem
1c780 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 63  ent, including.c
1c790 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 20  ompound SELECTs 
1c7a0 61 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  and SELECT state
1c7b0 6d 65 6e 74 73 20 77 69 74 68 20 4f 52 44 45 52  ments with ORDER
1c7c0 20 42 59 20 61 6e 64 2f 6f 72 20 4c 49 4d 49 54   BY and/or LIMIT
1c7d0 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20 62   clauses, .may b
1c7e0 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e 53  e used in an INS
1c7f0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 66  ERT statement of
1c800 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 6c 69   this form...<li
1c810 3e 3c 70 3e 54 68 65 20 74 68 69 72 64 20 66 6f  ><p>The third fo
1c820 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rm of an INSERT 
1c830 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77 69 74  statement is wit
1c840 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  h DEFAULT VALUES
1c850 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54 20 2e  ..^(The INSERT .
1c860 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  .. DEFAULT VALUE
1c870 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 73 65  S statement inse
1c880 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e 65 77  rts a single new
1c890 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6e 61   row into the.na
1c8a0 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e 45 61  med table.)^ ^Ea
1c8b0 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
1c8c0 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75   new row is popu
1c8d0 6c 61 74 65 64 20 77 69 74 68 20 69 74 73 20 64  lated with its d
1c8e0 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 0a 6f 72  efault value,.or
1c8f0 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20   with a NULL if 
1c900 6e 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  no default value
1c910 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
1c920 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c   part of the col
1c930 75 6d 6e 0a 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn.definition i
1c940 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  n the CREATE TAB
1c950 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  LE statement...<
1c960 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70  /ul>..<p>^The op
1c970 74 69 6f 6e 61 6c 20 63 6f 6e 66 6c 69 63 74 2d  tional conflict-
1c980 63 6c 61 75 73 65 20 61 6c 6c 6f 77 73 20 74 68  clause allows th
1c990 65 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  e specification 
1c9a0 6f 66 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  of an alternativ
1c9b0 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e  e.constraint con
1c9c0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
1c9d0 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
1c9e0 65 20 64 75 72 69 6e 67 20 74 68 69 73 20 6f 6e  e during this on
1c9f0 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d 61 6e 64  e INSERT command
1ca00 2e 0a 53 65 65 20 74 68 65 20 73 65 63 74 69 6f  ..See the sectio
1ca10 6e 20 74 69 74 6c 65 64 0a 5b 4f 4e 20 43 4f 4e  n titled.[ON CON
1ca20 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
1ca30 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1ca40 6e 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  n..For compatibi
1ca50 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51 4c 2c  lity with MySQL,
1ca60 20 5e 74 68 65 20 70 61 72 73 65 72 20 61 6c 6c   ^the parser all
1ca70 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66 20 74  ows the use of t
1ca80 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77 6f 72  he.single keywor
1ca90 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67 5f  d <a href="lang_
1caa0 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e 52 45  replace.html">RE
1cab0 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61 6e 20  PLACE</a> as an 
1cac0 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e 53 45  .alias for "INSE
1cad0 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22 2e 0a  RT OR REPLACE"..
1cae0 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69 6f 6e  .<p>^(The option
1caf0 61 6c 20 22 3c 69 3e 64 61 74 61 62 61 73 65 2d  al "<i>database-
1cb00 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
1cb10 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
1cb20 3c 69 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69  <i>table-name</i
1cb30 3e 0a 69 73 20 73 75 70 70 6f 72 74 20 66 6f 72  >.is support for
1cb40 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52   top-level INSER
1cb50 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
1cb60 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  y.)^  ^The table
1cb70 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e   name must be.un
1cb80 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e  qualified for IN
1cb90 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
1cba0 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
1cbb0 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  n [CREATE TRIGGE
1cbc0 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e  R] statements..^
1cbd0 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22  Similarly, the "
1cbe0 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
1cbf0 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
1cc00 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
1cc10 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f  supported for.to
1cc20 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
1cc30 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61  tatements only a
1cc40 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52  nd not for INSER
1cc50 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
1cc60 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70  hin.triggers..<p
1cc70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  >..<tcl>.#######
1cc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cc90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ccb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ccc0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1ccd0 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
1cce0 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b  use} conflict {{
1ccf0 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d  conflict clause}
1cd00 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a   {ON CONFLICT}}.
1cd10 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  .BubbleDiagram c
1cd20 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 0a 3c  onflict-clause.<
1cd30 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e  /tcl>..<p>The ON
1cd40 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1cd50 20 69 73 20 6e 6f 74 20 61 20 73 65 70 61 72 61   is not a separa
1cd60 74 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 20  te SQL command. 
1cd70 20 49 74 20 69 73 20 61 0a 6e 6f 6e 2d 73 74 61   It is a.non-sta
1cd80 6e 64 61 72 64 20 63 6c 61 75 73 65 20 74 68 61  ndard clause tha
1cd90 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20  t can appear in 
1cda0 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63  many other SQL c
1cdb0 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67  ommands..It is g
1cdc0 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63  iven its own sec
1cdd0 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63  tion in this doc
1cde0 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69 74  ument because it
1cdf0 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20   is not.part of 
1ce00 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64  standard SQL and
1ce10 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74   therefore might
1ce20 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72   not be familiar
1ce30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73  .</p>..<p>^The s
1ce40 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e  yntax for the ON
1ce50 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
1ce60 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f   is as shown abo
1ce70 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54  ve for.the CREAT
1ce80 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e  E TABLE command.
1ce90 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52    ^For the INSER
1cea0 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d  T and.UPDATE com
1ceb0 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f  mands, the keywo
1cec0 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  rds "ON CONFLICT
1ced0 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  " are replaced b
1cee0 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74  y "OR" so that.t
1cef0 68 65 20 73 79 6e 74 61 78 20 72 65 61 64 73 20  he syntax reads 
1cf00 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20  more naturally. 
1cf10 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e   For example, in
1cf20 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54  stead of."INSERT
1cf30 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e   ON CONFLICT IGN
1cf40 4f 52 45 22 20 77 65 20 68 61 76 65 20 22 49 4e  ORE" we have "IN
1cf50 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e  SERT OR IGNORE".
1cf60 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68  .The keywords ch
1cf70 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65 61  ange but the mea
1cf80 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75  ning of the clau
1cf90 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65  se is the same.e
1cfa0 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a  ither way.</p>..
1cfb0 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
1cfc0 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65  CT clause applie
1cfd0 73 20 74 6f 20 55 4e 49 51 55 45 20 61 6e 64 20  s to UNIQUE and 
1cfe0 4e 4f 54 20 4e 55 4c 4c 0a 63 6f 6e 73 74 72 61  NOT NULL.constra
1cff0 69 6e 74 73 20 28 61 6e 64 20 74 6f 20 50 52 49  ints (and to PRI
1d000 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
1d010 69 6e 74 73 20 77 68 69 63 68 20 66 6f 72 20 74  ints which for t
1d020 68 65 20 70 75 72 70 6f 73 65 73 20 0a 6f 66 20  he purposes .of 
1d030 74 68 69 73 20 73 65 63 74 69 6f 6e 20 61 72 65  this section are
1d040 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
1d050 61 73 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  as UNIQUE constr
1d060 61 69 6e 74 73 29 2e 0a 54 68 65 20 4f 4e 20 43  aints)..The ON C
1d070 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
1d080 6d 20 64 6f 65 73 20 6e 6f 74 0a 61 70 70 6c 79  m does not.apply
1d090 20 74 6f 20 5b 46 4f 52 45 49 47 4e 20 4b 45 59   to [FOREIGN KEY
1d0a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 0a 54   constraints]..T
1d0b0 68 65 72 65 20 61 72 65 20 66 69 76 65 20 63 6f  here are five co
1d0c0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1d0d0 6e 20 61 6c 67 6f 72 69 74 68 6d 20 63 68 6f 69  n algorithm choi
1d0e0 63 65 73 3a 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41  ces:.ROLLBACK, A
1d0f0 42 4f 52 54 2c 20 46 41 49 4c 2c 20 49 47 4e 4f  BORT, FAIL, IGNO
1d100 52 45 2c 20 61 6e 64 20 52 45 50 4c 41 43 45 2e  RE, and REPLACE.
1d110 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  .^The default co
1d120 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1d130 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  n algorithm is A
1d140 42 4f 52 54 2e 20 20 54 68 69 73 0a 69 73 20 77  BORT.  This.is w
1d150 68 61 74 20 74 68 65 79 20 6d 65 61 6e 3a 3c 2f  hat they mean:</
1d160 70 3e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e  p>..<dl>.<dt><b>
1d170 52 4f 4c 4c 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74  ROLLBACK</b></dt
1d180 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
1d190 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
1d1a0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
1d1b0 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
1d1c0 4f 4c 4c 42 41 43 4b 0a 72 65 73 6f 6c 75 74 69  OLLBACK.resoluti
1d1d0 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f  on algorithm abo
1d1e0 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
1d1f0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 69  SQL statement wi
1d200 74 68 0a 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e  th.an SQLITE_CON
1d210 53 54 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e  STRAINT error an
1d220 64 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 68 65  d rolls back the
1d230 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
1d240 74 69 6f 6e 2e 0a 5e 49 66 20 6e 6f 20 74 72 61  tion..^If no tra
1d250 6e 73 61 63 74 69 6f 6e 20 69 73 0a 61 63 74 69  nsaction is.acti
1d260 76 65 20 28 6f 74 68 65 72 20 74 68 61 6e 20 74  ve (other than t
1d270 68 65 20 69 6d 70 6c 69 65 64 20 74 72 61 6e 73  he implied trans
1d280 61 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63  action that is c
1d290 72 65 61 74 65 64 20 6f 6e 20 65 76 65 72 79 0a  reated on every.
1d2a0 63 6f 6d 6d 61 6e 64 29 20 74 68 65 6e 20 74 68  command) then th
1d2b0 65 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 6f 6c  e ROLLBACK resol
1d2c0 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1d2d0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
1d2e0 73 20 74 68 65 0a 41 42 4f 52 54 20 61 6c 67 6f  s the.ABORT algo
1d2f0 72 69 74 68 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a  rithm.</p></dd>.
1d300 0a 3c 64 74 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62  .<dt><b>ABORT</b
1d310 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e  ></dt>.<dd><p> ^
1d320 57 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62  When an applicab
1d330 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  le constraint vi
1d340 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20  olation occurs, 
1d350 74 68 65 20 41 42 4f 52 54 0a 72 65 73 6f 6c 75  the ABORT.resolu
1d360 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 61  tion algorithm a
1d370 62 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  borts the curren
1d380 74 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  t SQL statement.
1d390 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 43  with an SQLITE_C
1d3a0 4f 4e 53 54 52 41 49 54 20 65 72 72 6f 72 20 61  ONSTRAIT error a
1d3b0 6e 64 20 62 61 63 6b 73 20 6f 75 74 20 61 6e 79  nd backs out any
1d3c0 20 63 68 61 6e 67 65 73 0a 6d 61 64 65 20 62 79   changes.made by
1d3d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
1d3e0 20 73 74 61 74 65 6d 65 6e 74 3b 20 62 75 74 20   statement; but 
1d3f0 63 68 61 6e 67 65 73 20 63 61 75 73 65 64 0a 62  changes caused.b
1d400 79 20 70 72 69 6f 72 20 53 51 4c 20 73 74 61 74  y prior SQL stat
1d410 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 68  ements within th
1d420 65 20 73 61 6d 65 20 74 72 61 6e 73 61 63 74 69  e same transacti
1d430 6f 6e 20 61 72 65 20 70 72 65 73 65 72 76 65 64  on are preserved
1d440 20 61 6e 64 20 74 68 65 0a 74 72 61 6e 73 61 63   and the.transac
1d450 74 69 6f 6e 20 72 65 6d 61 69 6e 73 20 61 63 74  tion remains act
1d460 69 76 65 2e 0a 54 68 69 73 20 69 73 20 74 68 65  ive..This is the
1d470 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
1d480 72 20 61 6e 64 20 74 68 65 20 62 65 68 61 76 69  r and the behavi
1d490 6f 72 20 70 72 6f 73 63 72 69 62 65 64 20 74 68  or proscribed th
1d4a0 65 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c  e SQL.standard.<
1d4b0 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
1d4c0 3e 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c  >FAIL</b></dt>.<
1d4d0 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20  dd><p> ^When an 
1d4e0 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74  applicable const
1d4f0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
1d500 6f 63 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c  occurs, the FAIL
1d510 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
1d520 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65  rithm aborts the
1d530 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
1d540 74 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53  tement with an.S
1d550 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
1d560 20 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68   error.  ^But th
1d570 65 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f  e FAIL resolutio
1d580 6e 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20  n does not.back 
1d590 6f 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65  out prior change
1d5a0 73 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  s of the SQL sta
1d5b0 74 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c  tement that fail
1d5c0 65 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65  ed nor does.it e
1d5d0 6e 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  nd the transacti
1d5e0 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65  on..^For example
1d5f0 2c 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73  , if an UPDATE.s
1d600 74 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74  tatement encount
1d610 65 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e  ered a constrain
1d620 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74  t violation on t
1d630 68 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61  he 100th row tha
1d640 74 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f  t.it attempts to
1d650 20 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68   update, then th
1d660 65 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63  e first 99 row c
1d670 68 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65  hanges are prese
1d680 72 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73  rved.but changes
1d690 20 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64   to rows 100 and
1d6a0 20 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63   beyond never oc
1d6b0 63 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  cur.</p></dd>..<
1d6c0 64 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e  dt><b>IGNORE</b>
1d6d0 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57  </dt>.<dd><p> ^W
1d6e0 68 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c  hen an applicabl
1d6f0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
1d700 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a  lation occurs, .
1d710 74 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c  the IGNORE resol
1d720 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20  ution algorithm 
1d730 73 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f  skips the one ro
1d740 77 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a  w that contains.
1d750 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
1d760 69 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e  iolation and con
1d770 74 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e  tinues processin
1d780 67 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77  g subsequent row
1d790 73 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61  s.of the SQL sta
1d7a0 74 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74  tement as if not
1d7b0 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e  hing went wrong.
1d7c0 0a 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f  .Other rows befo
1d7d0 72 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65  re and after the
1d7e0 20 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69   row that.contai
1d7f0 6e 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  ned the constrai
1d800 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
1d810 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
1d820 61 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e  ated.normally. ^
1d830 4e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  No error is retu
1d840 72 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49 47  rned when the IG
1d850 4e 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  NORE conflict re
1d860 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74  solution.algorit
1d870 68 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c  hm is used.</p><
1d880 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50  /dd>..<dt><b>REP
1d890 4c 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  LACE</b></dt>.<d
1d8a0 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 55 4e  d><p> ^When a UN
1d8b0 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
1d8c0 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73  violation occurs
1d8d0 2c 20 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c  , the REPLACE al
1d8e0 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20  gorithm.deletes 
1d8f0 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77  pre-existing row
1d900 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69  s that are causi
1d910 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
1d920 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f  t violation.prio
1d930 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f  r to inserting o
1d940 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63  r updating the c
1d950 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74  urrent row and t
1d960 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69  he command conti
1d970 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20  nues .executing 
1d980 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20  normally..^If a 
1d990 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
1d9a0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
1d9b0 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41 43  curs, the REPLAC
1d9c0 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73 6f 6c  E conflict.resol
1d9d0 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 74  ution replaces t
1d9e0 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 69  he NULL value wi
1d9f0 74 68 0a 68 65 20 64 65 66 61 75 6c 74 20 76 61  th.he default va
1da00 6c 75 65 20 66 6f 72 20 74 68 61 74 20 63 6f 6c  lue for that col
1da10 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68 65 20 63  umn, or if the c
1da20 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20 64 65 66  olumn has no def
1da30 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74 68 65 6e  ault.value, then
1da40 20 74 68 65 20 41 42 4f 52 54 20 61 6c 67 6f 72   the ABORT algor
1da50 69 74 68 6d 20 69 73 20 75 73 65 64 2e 0a 5e 49  ithm is used..^I
1da60 66 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  f a CHECK constr
1da70 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
1da80 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c 41  ccurs, the REPLA
1da90 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
1daa0 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
1dab0 20 61 6c 77 61 79 73 20 77 6f 72 6b 73 20 6c 69   always works li
1dac0 6b 65 20 41 42 4f 52 54 2e 3c 2f 70 3e 0a 0a 3c  ke ABORT.</p>..<
1dad0 70 3e 5e 57 68 65 6e 20 74 68 65 20 52 45 50 4c  p>^When the REPL
1dae0 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ACE conflict res
1daf0 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79  olution strategy
1db00 20 64 65 6c 65 74 65 73 20 72 6f 77 73 20 69 6e   deletes rows in
1db10 20 6f 72 64 65 72 20 74 6f 0a 73 61 74 69 73 66   order to.satisf
1db20 79 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  y a constraint, 
1db30 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  [CREATE TRIGGER 
1db40 7c 20 64 65 6c 65 74 65 20 74 72 69 67 67 65 72  | delete trigger
1db50 73 5d 20 66 69 72 65 20 69 66 20 61 6e 64 20 6f  s] fire if and o
1db60 6e 6c 79 20 69 66 0a 5b 72 65 63 75 72 73 69 76  nly if.[recursiv
1db70 65 5f 74 72 69 67 67 65 72 73 20 70 72 61 67 6d  e_triggers pragm
1db80 61 20 7c 20 72 65 63 75 72 73 69 76 65 20 74 72  a | recursive tr
1db90 69 67 67 65 72 73 5d 20 61 72 65 20 65 6e 61 62  iggers] are enab
1dba0 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  led.</p>..<p>^Th
1dbb0 65 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74  e [sqlite3_updat
1dbc0 65 5f 68 6f 6f 6b 20 7c 20 75 70 64 61 74 65 20  e_hook | update 
1dbd0 68 6f 6f 6b 5d 20 69 73 20 6e 6f 74 20 69 6e 76  hook] is not inv
1dbe0 6f 6b 65 64 20 66 6f 72 20 72 6f 77 73 20 74 68  oked for rows th
1dbf0 61 74 0a 61 72 65 20 64 65 6c 65 74 65 64 20 62  at.are deleted b
1dc00 79 20 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f  y the REPLACE co
1dc10 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
1dc20 6e 20 73 74 72 61 74 65 67 79 2e 20 20 5e 4e 6f  n strategy.  ^No
1dc30 72 20 64 6f 65 73 0a 52 45 50 4c 41 43 45 20 69  r does.REPLACE i
1dc40 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 5b 73 71  ncrement the [sq
1dc50 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 7c 20  lite3_changes | 
1dc60 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 2e  change counter].
1dc70 0a 54 68 65 20 65 78 63 65 70 74 69 6f 6e 61 6c  .The exceptional
1dc80 20 62 65 68 61 76 69 6f 72 73 20 64 65 66 69 6e   behaviors defin
1dc90 65 64 20 69 6e 20 74 68 69 73 20 70 61 72 61 67  ed in this parag
1dca0 72 61 70 68 20 6d 69 67 68 74 20 63 68 61 6e 67  raph might chang
1dcb0 65 20 0a 69 6e 20 61 20 66 75 74 75 72 65 20 72  e .in a future r
1dcc0 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 3c 2f 64 6c  elease.</p>.</dl
1dcd0 3e 0a 0a 3c 70 3e 5e 54 68 65 20 61 6c 67 6f 72  >..<p>^The algor
1dce0 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69  ithm specified i
1dcf0 6e 20 74 68 65 20 4f 52 20 63 6c 61 75 73 65 20  n the OR clause 
1dd00 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  of an INSERT or 
1dd10 55 50 44 41 54 45 0a 6f 76 65 72 72 69 64 65 73  UPDATE.overrides
1dd20 20 61 6e 79 20 61 6c 67 6f 72 69 74 68 6d 20 73   any algorithm s
1dd30 70 65 63 69 66 69 65 64 20 69 6e 20 61 20 43 52  pecified in a CR
1dd40 45 41 54 45 20 54 41 42 4c 45 2e 0a 5e 49 66 20  EATE TABLE..^If 
1dd50 6e 6f 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  no algorithm is 
1dd60 73 70 65 63 69 66 69 65 64 20 61 6e 79 77 68 65  specified anywhe
1dd70 72 65 2c 20 74 68 65 20 41 42 4f 52 54 20 61 6c  re, the ABORT al
1dd80 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
1dd90 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  </p>..<tcl>.####
1dda0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ddb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ddc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ddd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dde0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
1ddf0 6f 6e 20 52 45 49 4e 44 45 58 20 72 65 69 6e 64  on REINDEX reind
1de00 65 78 20 52 45 49 4e 44 45 58 0a 0a 42 75 62 62  ex REINDEX..Bubb
1de10 6c 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65  leDiagram reinde
1de20 78 2d 73 74 6d 74 20 31 0a 3c 2f 74 63 6c 3e 0a  x-stmt 1.</tcl>.
1de30 0a 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58  .<p>^The REINDEX
1de40 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
1de50 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72   to delete and r
1de60 65 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20  ecreate indices 
1de70 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68  from scratch..Th
1de80 69 73 20 69 73 20 75 73 65 66 75 6c 20 77 68 65  is is useful whe
1de90 6e 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  n the definition
1dea0 20 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20   of a collation 
1deb0 73 65 71 75 65 6e 63 65 20 68 61 73 20 63 68 61  sequence has cha
1dec0 6e 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  nged..</p>..<p>^
1ded0 49 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b  If the REINDEX k
1dee0 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f  eyword is not fo
1def0 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c  llowed by a coll
1df00 61 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f  ation-sequence o
1df10 72 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a 65  r database .obje
1df20 63 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74  ct identifier, t
1df30 68 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20  hen all indices 
1df40 69 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  in all attached 
1df50 64 61 74 61 62 61 73 65 73 20 61 72 65 20 72 65  databases are re
1df60 62 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74  built...<p>^If t
1df70 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f  he REINDEX keywo
1df80 72 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  rd is followed b
1df90 79 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65  y a collation-se
1dfa0 71 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65  quence name, the
1dfb0 6e 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e  n.all indices in
1dfc0 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1dfd0 74 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65  tabases that use
1dfe0 20 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61   the named colla
1dff0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a 61  tion sequences.a
1e000 72 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a 0a  re recreated. ..
1e010 3c 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20 61  <p>^Or, if the a
1e020 72 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65 64  rgument attached
1e030 20 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58 20   to the REINDEX 
1e040 69 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65  identifies a spe
1e050 63 69 66 69 63 20 0a 64 61 74 61 62 61 73 65 20  cific .database 
1e060 74 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20  table, then all 
1e070 69 6e 64 69 63 65 73 20 61 74 74 61 63 68 65 64  indices attached
1e080 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
1e090 20 74 61 62 6c 65 20 61 72 65 20 72 65 62 75 69   table are rebui
1e0a0 6c 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65 6e  lt. .^If it iden
1e0b0 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69  tifies a specifi
1e0c0 63 20 64 61 74 61 62 61 73 65 20 69 6e 64 65 78  c database index
1e0d0 2c 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61 74  , then just that
1e0e0 20 69 6e 64 65 78 20 69 73 20 72 65 63 72 65 61   index is recrea
1e0f0 74 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 6e 6f 20  ted...<p>^If no 
1e100 3c 69 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  <i>database-name
1e110 3c 2f 69 3e 20 69 73 20 73 70 65 63 69 66 69 65  </i> is specifie
1e120 64 20 61 6e 64 20 74 68 65 72 65 20 65 78 69 73  d and there exis
1e130 74 73 20 62 6f 74 68 20 61 20 74 61 62 6c 65 20  ts both a table 
1e140 6f 72 0a 69 6e 64 65 78 20 61 6e 64 20 61 20 63  or.index and a c
1e150 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1e160 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  e of the specifi
1e170 65 64 20 6e 61 6d 65 2c 20 53 51 4c 69 74 65 20  ed name, SQLite 
1e180 69 6e 74 65 72 70 72 65 74 73 0a 74 68 69 73 20  interprets.this 
1e190 61 73 20 61 20 72 65 71 75 65 73 74 20 74 6f 20  as a request to 
1e1a0 72 65 62 75 69 6c 64 20 74 68 65 20 69 6e 64 69  rebuild the indi
1e1b0 63 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ces that use the
1e1c0 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e   named collation
1e1d0 20 73 65 71 75 65 6e 63 65 2e 0a 54 68 69 73 20   sequence..This 
1e1e0 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68 65  ambiguity in the
1e1f0 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61   syntax may be a
1e200 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79 73  voided by always
1e210 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 69   specifying a.<i
1e220 3e 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3c 2f  >database-name</
1e230 69 3e 20 77 68 65 6e 20 72 65 69 6e 64 65 78 69  i> when reindexi
1e240 6e 67 20 61 20 73 70 65 63 69 66 69 63 20 74 61  ng a specific ta
1e250 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 0a 3c  ble or index...<
1e260 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
1e270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e2b0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 50  ####.Section REP
1e2c0 4c 41 43 45 20 72 65 70 6c 61 63 65 20 52 45 50  LACE replace REP
1e2d0 4c 41 43 45 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  LACE..</tcl>..<p
1e2e0 3e 5e 54 68 65 20 52 45 50 4c 41 43 45 20 63 6f  >^The REPLACE co
1e2f0 6d 6d 61 6e 64 20 69 73 20 61 6e 20 61 6c 69 61  mmand is an alia
1e300 73 20 66 6f 72 20 74 68 65 20 22 5b 4f 4e 20 43  s for the "[ON C
1e310 4f 4e 46 4c 49 43 54 20 7c 20 49 4e 53 45 52 54  ONFLICT | INSERT
1e320 20 4f 52 20 52 45 50 4c 41 43 45 5d 22 0a 76 61   OR REPLACE]".va
1e330 72 69 61 6e 74 20 6f 66 20 74 68 65 20 5b 49 4e  riant of the [IN
1e340 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64 2e 20 20  SERT] command.  
1e350 0a 54 68 69 73 20 61 6c 69 61 73 20 69 73 20 70  .This alias is p
1e360 72 6f 76 69 64 65 64 20 66 6f 72 20 63 6f 6d 70  rovided for comp
1e370 61 74 69 62 69 6c 69 74 79 20 6f 74 68 65 72 20  atibility other 
1e380 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67  SQL database eng
1e390 69 6e 65 73 2e 20 20 53 65 65 20 74 68 65 20 0a  ines.  See the .
1e3a0 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d 61 6e 64  [INSERT] command
1e3b0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1e3c0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1e3d0 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 20 20  formation.</p>  
1e3e0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
1e3f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e430 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
1e440 53 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53  SELECT select {S
1e450 45 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 42 75  ELECT query}..Bu
1e460 62 62 6c 65 44 69 61 67 72 61 6d 20 73 65 6c 65  bbleDiagram sele
1e470 63 74 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65  ct-stmt 1.Bubble
1e480 44 69 61 67 72 61 6d 20 73 65 6c 65 63 74 2d 63  Diagram select-c
1e490 6f 72 65 0a 42 75 62 62 6c 65 44 69 61 67 72 61  ore.BubbleDiagra
1e4a0 6d 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 0a  m result-column.
1e4b0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 6a 6f  BubbleDiagram jo
1e4c0 69 6e 2d 73 6f 75 72 63 65 0a 42 75 62 62 6c 65  in-source.Bubble
1e4d0 44 69 61 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73  Diagram single-s
1e4e0 6f 75 72 63 65 0a 42 75 62 62 6c 65 44 69 61 67  ource.BubbleDiag
1e4f0 72 61 6d 20 6a 6f 69 6e 2d 6f 70 0a 42 75 62 62  ram join-op.Bubb
1e500 6c 65 44 69 61 67 72 61 6d 20 6a 6f 69 6e 2d 63  leDiagram join-c
1e510 6f 6e 73 74 72 61 69 6e 74 0a 42 75 62 62 6c 65  onstraint.Bubble
1e520 44 69 61 67 72 61 6d 20 6f 72 64 65 72 69 6e 67  Diagram ordering
1e530 2d 74 65 72 6d 0a 42 75 62 62 6c 65 44 69 61 67  -term.BubbleDiag
1e540 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65  ram compound-ope
1e550 72 61 74 6f 72 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c  rator.</tcl>...<
1e560 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61  p>The SELECT sta
1e570 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  tement is used t
1e580 6f 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61  o query the data
1e590 62 61 73 65 2e 20 20 54 68 65 0a 72 65 73 75 6c  base.  The.resul
1e5a0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 69 73  t of a SELECT is
1e5b0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f   zero or more ro
1e5c0 77 73 20 6f 66 20 64 61 74 61 20 77 68 65 72 65  ws of data where
1e5d0 20 65 61 63 68 20 72 6f 77 0a 68 61 73 20 61 20   each row.has a 
1e5e0 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  fixed number of 
1e5f0 63 6f 6c 75 6d 6e 73 2e 20 20 0a 0a 3c 70 3e 54  columns.  ..<p>T
1e600 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1e610 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ent is the most 
1e620 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d  complicated comm
1e630 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  and in the SQL l
1e640 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65  anguage..To make
1e650 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
1e660 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f   easier to follo
1e670 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70  w, some of the p
1e680 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65  assages below de
1e690 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74  scribe.the way t
1e6a0 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
1e6b0 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61   by a SELECT sta
1e6c0 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d  tement is determ
1e6d0 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73  ined as a series
1e6e0 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73   of.steps. It is
1e6f0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65   important to ke
1e700 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20  ep in mind that 
1e710 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69  this is purely i
1e720 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e  llustrative -.in
1e730 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65   practice neithe
1e740 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79  r SQLite nor any
1e750 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e   other SQL engin
1e760 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
1e770 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72   follow .this or
1e780 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69   any other speci
1e790 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 68  fic process...<h
1e7a0 33 3e 53 69 6d 70 6c 65 20 53 65 6c 65 63 74 20  3>Simple Select 
1e7b0 50 72 6f 63 65 73 73 69 6e 67 3c 2f 68 33 3e 0a  Processing</h3>.
1e7c0 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20 66  .<p>The syntax f
1e7d0 6f 72 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  or a simple SELE
1e7e0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
1e7f0 64 65 70 69 63 74 65 64 20 69 6e 20 74 68 65 20  depicted in the 
1e800 0a 5b 73 65 6c 65 63 74 2d 63 6f 72 65 20 73 79  .[select-core sy
1e810 6e 74 61 78 20 64 69 61 67 72 61 6d 5d 2e 20 47  ntax diagram]. G
1e820 65 6e 65 72 61 74 69 6e 67 20 74 68 65 20 72 65  enerating the re
1e830 73 75 6c 74 73 20 6f 66 20 61 20 73 69 6d 70 6c  sults of a simpl
1e840 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
1e850 6e 74 20 69 73 20 70 72 65 73 65 6e 74 65 64 20  nt is presented 
1e860 61 73 20 61 20 66 6f 75 72 20 73 74 65 70 20 70  as a four step p
1e870 72 6f 63 65 73 73 20 69 6e 20 74 68 65 20 64 65  rocess in the de
1e880 73 63 72 69 70 74 69 6f 6e 20 62 65 6c 6f 77 3a  scription below:
1e890 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ol>.  <li> <p
1e8a0 3e 5b 46 52 4f 4d 20 63 6c 61 75 73 65 5d 20 70  >[FROM clause] p
1e8b0 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65 20 69  rocessing: The i
1e8c0 6e 70 75 74 20 64 61 74 61 20 66 6f 72 20 74 68  nput data for th
1e8d0 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  e simple SELECT 
1e8e0 69 73 0a 20 20 20 20 20 20 20 64 65 74 65 72 6d  is.       determ
1e8f0 69 6e 65 64 2e 20 54 68 65 20 69 6e 70 75 74 20  ined. The input 
1e900 64 61 74 61 20 69 73 20 65 69 74 68 65 72 20 69  data is either i
1e910 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
1e920 6c 65 20 72 6f 77 20 77 69 74 68 20 30 0a 20 20  le row with 0.  
1e930 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 28 69 66       columns (if
1e940 20 74 68 65 72 65 20 69 73 20 6e 6f 20 46 52 4f   there is no FRO
1e950 4d 20 63 6c 61 75 73 65 29 20 6f 72 20 69 73 20  M clause) or is 
1e960 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 6e  determined by an
1e970 61 6c 79 7a 69 6e 67 20 74 68 65 0a 20 20 20 20  alyzing the.    
1e980 20 20 20 5b 6a 6f 69 6e 2d 73 6f 75 72 63 65 20     [join-source 
1e990 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 7c 6a  syntax diagram|j
1e9a0 6f 69 6e 2d 73 6f 75 72 63 65 5d 20 73 70 65 63  oin-source] spec
1e9b0 69 66 69 63 61 74 69 6f 6e 20 74 68 61 74 20 66  ification that f
1e9c0 6f 6c 6c 6f 77 73 20 0a 20 20 20 20 20 20 20 61  ollows .       a
1e9d0 6e 20 65 78 70 6c 69 63 69 74 20 46 52 4f 4d 20  n explicit FROM 
1e9e0 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e 20 3c  clause..  <li> <
1e9f0 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73 65 5d  p>[WHERE clause]
1ea00 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54 68 65   processing: The
1ea10 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 66   input data is f
1ea20 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20 74 68  iltered using th
1ea30 65 20 57 48 45 52 45 0a 20 20 20 20 20 20 20 63  e WHERE.       c
1ea40 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
1ea50 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 47  .  .  <li> <p>[G
1ea60 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20 42 59  ROUP BY|GROUP BY
1ea70 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72 65 73  , HAVING and res
1ea80 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70 72 65  ult-column expre
1ea90 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73 69 6e  ssion] processin
1eaa0 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65 20 73  g: .       The s
1eab0 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
1eac0 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  s is computed by
1ead0 20 61 67 67 72 65 67 61 74 69 6e 67 20 74 68 65   aggregating the
1eae0 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e 67 20   data according 
1eaf0 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20 47 52  to.       any GR
1eb00 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61 6e  OUP BY clause an
1eb10 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20 74 68  d calculating th
1eb20 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70  e result-set exp
1eb30 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74 68 65  ressions for the
1eb40 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f 66 20  .       rows of 
1eb50 74 68 65 20 66 69 6c 74 65 72 65 64 20 69 6e 70  the filtered inp
1eb60 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a 20 20  ut dataset.  .  
1eb70 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49 4e 43  <li> <p>[DISTINC
1eb80 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c 20 6b  T|DISTINCT/ALL k
1eb90 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73 73 69  eyword] processi
1eba0 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65 72 79  ng: If the query
1ebb0 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a 20 20   is a "SELECT.  
1ebc0 20 20 20 20 20 44 49 53 54 49 4e 43 54 22 20 71       DISTINCT" q
1ebd0 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74 65 20  uery, duplicate 
1ebe0 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
1ebf0 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66   from the set of
1ec00 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a 3c 2f   result rows..</
1ec10 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  ol>..<p>There ar
1ec20 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66 20 73  e two types of s
1ec30 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
1ec40 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65 67 61  tement - aggrega
1ec50 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67 67 72  te and .non-aggr
1ec60 65 67 61 74 65 20 71 75 65 72 69 65 73 2e 20 5e  egate queries. ^
1ec70 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20  A simple SELECT 
1ec80 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e 20  statement is an 
1ec90 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
1eca0 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73 20 65  if.it contains e
1ecb0 69 74 68 65 72 20 61 20 47 52 4f 55 50 20 42 59  ither a GROUP BY
1ecc0 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65 20 6f   clause or one o
1ecd0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1ece0 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20 74 68   functions.in th
1ecf0 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20 5e 4f  e result-set. ^O
1ed00 74 68 65 72 77 69 73 65 2c 20 69 66 20 61 20 73  therwise, if a s
1ed10 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63 6f 6e  imple SELECT con
1ed20 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65 67 61  tains no aggrega
1ed30 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  te.functions or 
1ed40 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  a GROUP BY claus
1ed50 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e 2d 61  e, it is a non-a
1ed60 67 67 72 65 67 61 74 65 20 71 75 65 72 79 2e 0a  ggregate query..
1ed70 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65 72 6d  .<p><b>1. Determ
1ed80 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70 75 74  ination of input
1ed90 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c 61 75   data (FROM clau
1eda0 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29 2e 3c  se processing).<
1edb0 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  /b>.<tcl>hd_frag
1edc0 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73 65 3c  ment fromclause<
1edd0 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
1ede0 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63 6c 61  ywords {FROM cla
1edf0 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  use}</tcl>..<p>T
1ee00 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73  he input data us
1ee10 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53  ed by a simple S
1ee20 45 4c 45 43 54 20 71 75 65 72 79 20 69 73 20 61  ELECT query is a
1ee30 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f 69 3e   set of <i>N</i>
1ee40 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69 3e 4d   rows .each <i>M
1ee50 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77 69 64  </i> columns wid
1ee60 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20  e...<p>^(If the 
1ee70 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 6f  FROM clause is o
1ee80 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20 73 69  mitted from a si
1ee90 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
1eea0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  ement, then the 
1eeb0 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 69  .input data is i
1eec0 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69 6e 67  mplicitly a sing
1eed0 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f 6c 75  le row zero colu
1eee0 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e 65 2e  mns wide)^ (i.e.
1eef0 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e 64 0a   <i>N</i>=1 and.
1ef00 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a 3c 70  <i>M</i>=0)...<p
1ef10 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73  >If a FROM claus
1ef20 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
1ef30 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68 69 63  the data on whic
1ef40 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  h a simple SELEC
1ef50 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74 65 73  T query.operates
1ef60 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20   comes from the 
1ef70 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  one or more tabl
1ef80 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
1ef90 20 28 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65   (SELECT stateme
1efa0 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65 73  nts.in parenthes
1efb0 69 73 29 20 73 70 65 63 69 66 69 65 64 20 66 6f  is) specified fo
1efc0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d  llowing the FROM
1efd0 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73 75 62   keyword. ^A sub
1efe0 2d 73 65 6c 65 63 74 20 73 70 65 63 69 66 69 65  -select specifie
1eff0 64 0a 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 73 6f  d.in the join-so
1f000 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  urce following t
1f010 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
1f020 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  n a simple SELEC
1f030 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 68  T statement is.h
1f040 61 6e 64 6c 65 64 20 61 73 20 69 66 20 69 74 20  andled as if it 
1f050 77 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 74  was a table cont
1f060 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61 20  aining the data 
1f070 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
1f080 75 74 69 6e 67 20 74 68 65 0a 73 75 62 2d 73 65  uting the.sub-se
1f090 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 20  lect statement. 
1f0a0 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20  ^Each column of 
1f0b0 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 64  the sub-select d
1f0c0 61 74 61 73 65 74 20 69 6e 68 65 72 69 74 73 20  ataset inherits 
1f0d0 74 68 65 0a 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63  the.[collation|c
1f0e0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1f0f0 65 5d 20 61 6e 64 20 5b 61 66 66 69 6e 69 74 79  e] and [affinity
1f100 5d 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  ] of the corresp
1f110 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f  onding expressio
1f120 6e 0a 69 6e 20 74 68 65 20 73 75 62 2d 73 65 6c  n.in the sub-sel
1f130 65 63 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ect statement...
1f140 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73 20  <p>^If there is 
1f150 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 74 61  only a single ta
1f160 62 6c 65 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d  ble in the join-
1f170 73 6f 75 72 63 65 20 66 6f 6c 6c 6f 77 69 6e 67  source following
1f180 20 74 68 65 20 46 52 4f 4d 0a 63 6c 61 75 73 65   the FROM.clause
1f190 2c 20 74 68 65 6e 20 74 68 65 20 69 6e 70 75 74  , then the input
1f1a0 20 64 61 74 61 20 75 73 65 64 20 62 79 20 74 68   data used by th
1f1b0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1f1c0 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  nt is the conten
1f1d0 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 64 20  ts of the.named 
1f1e0 74 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 72 65  table. ^If there
1f1f0 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e   is more than on
1f200 65 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  e table specifie
1f210 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
1f220 0a 6a 6f 69 6e 2d 73 6f 75 72 63 65 20 66 6f 6c  .join-source fol
1f230 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20  lowing the FROM 
1f240 6b 65 79 77 6f 72 64 2c 20 74 68 65 6e 20 74 68  keyword, then th
1f250 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 65 61  e contents of ea
1f260 63 68 20 6e 61 6d 65 64 20 74 61 62 6c 65 0a 61  ch named table.a
1f270 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61  re joined into a
1f280 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20   single dataset 
1f290 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53  for the simple S
1f2a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1f2b0 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45  to operate on..E
1f2c0 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64  xactly how the d
1f2d0 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20  ata is combined 
1f2e0 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73  depends on the s
1f2f0 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70  pecific [join-op
1f300 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63 6f 6e 73  ] and.[join-cons
1f310 74 72 61 69 6e 74 5d 20 75 73 65 64 20 74 6f 20  traint] used to 
1f320 63 6f 6e 6e 65 63 74 20 74 68 65 20 74 61 62 6c  connect the tabl
1f330 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
1f340 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c 70 3e 41   together...<p>A
1f350 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53 51 4c 69  ll joins in SQLi
1f360 74 65 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20  te are based on 
1f370 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
1f380 6f 64 75 63 74 20 6f 66 20 74 68 65 20 6c 65 66  oduct of the lef
1f390 74 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e 64  t and.right-hand
1f3a0 20 64 61 74 61 73 65 74 73 2e 20 5e 54 68 65 20   datasets. ^The 
1f3b0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 63  columns of the c
1f3c0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
1f3d0 20 64 61 74 61 73 65 74 20 61 72 65 2c 20 69 6e   dataset are, in
1f3e0 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20 74 68 65   .order, all the
1f3f0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
1f400 6c 65 66 74 2d 68 61 6e 64 20 64 61 74 61 73 65  left-hand datase
1f410 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c  t followed by al
1f420 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66  l the columns.of
1f430 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
1f440 64 61 74 61 73 65 74 2e 20 5e 54 68 65 72 65 20  dataset. ^There 
1f450 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  is a row in the 
1f460 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63  cartesian produc
1f470 74 20 64 61 74 61 73 65 74 0a 66 6f 72 6d 65 64  t dataset.formed
1f480 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 65 61   by combining ea
1f490 63 68 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e  ch unique combin
1f4a0 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f 77 20 66  ation of a row f
1f4b0 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 68 61 6e  rom the left-han
1f4c0 64 20 0a 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  d .and right-han
1f4d0 64 20 64 61 74 61 73 65 74 73 2e 20 5e 28 49 6e  d datasets. ^(In
1f4e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
1f4f0 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64   the left-hand d
1f500 61 74 61 73 65 74 20 63 6f 6e 73 69 73 74 73 20  ataset consists 
1f510 6f 66 0a 3c 69 3e 4e 6c 68 73 3c 2f 69 3e 20 72  of.<i>Nlhs</i> r
1f520 6f 77 73 20 6f 66 20 3c 69 3e 4d 6c 68 73 3c 2f  ows of <i>Mlhs</
1f530 69 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20  i> columns, and 
1f540 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64  the right-hand d
1f550 61 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 72 68  ataset of.<i>Nrh
1f560 73 3c 2f 69 3e 20 72 6f 77 73 20 6f 66 20 3c 69  s</i> rows of <i
1f570 3e 4d 72 68 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e  >Mrhs</i> column
1f580 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61 72 74  s, then the cart
1f590 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 69 73  esian product is
1f5a0 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20 3c 69   a.dataset of <i
1f5b0 3e 4e 6c 68 73 2e 4e 72 68 73 3c 2f 69 3e 20 72  >Nlhs.Nrhs</i> r
1f5c0 6f 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69  ows, each contai
1f5d0 6e 69 6e 67 20 3c 69 3e 4d 6c 68 73 2b 4d 72 68  ning <i>Mlhs+Mrh
1f5e0 73 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e  s</i> columns.)^
1f5f0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69  ..<p>^If the joi
1f600 6e 2d 6f 70 20 69 73 20 22 43 52 4f 53 53 20 4a  n-op is "CROSS J
1f610 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49  OIN", "INNER JOI
1f620 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20  N", "JOIN" or a 
1f630 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20  comma.(",") and 
1f640 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f  there is no ON o
1f650 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20  r USING clause, 
1f660 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1f670 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73  of the join is.s
1f680 69 6d 70 6c 79 20 74 68 65 20 63 61 72 74 65 73  imply the cartes
1f690 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74  ian product of t
1f6a0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
1f6b0 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
1f6c0 20 0a 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64   .^There is no d
1f6d0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
1f6e0 6e 20 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49  n the "INNER JOI
1f6f0 4e 22 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22  N", "JOIN" and "
1f700 2c 22 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72  ," join.operator
1f710 73 2e 20 5e 28 54 68 65 20 22 43 52 4f 53 53 20  s. ^(The "CROSS 
1f720 4a 4f 49 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61  JOIN" join opera
1f730 74 6f 72 20 70 72 6f 64 75 63 65 73 20 74 68 65  tor produces the
1f740 20 73 61 6d 65 20 64 61 74 61 20 61 73 20 74 68   same data as th
1f750 65 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c  e ."INNER JOIN",
1f760 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20   "JOIN" and "," 
1f770 6f 70 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74  operators)^, but
1f780 20 69 73 20 0a 3c 61 20 68 72 65 66 3d 6f 70 74   is .<a href=opt
1f790 6f 76 65 72 76 69 65 77 2e 68 74 6d 6c 23 6d 61  overview.html#ma
1f7a0 6e 63 74 72 6c 3e 68 61 6e 64 6c 65 64 20 73 6c  nctrl>handled sl
1f7b0 69 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74  ightly different
1f7c0 6c 79 20 62 79 20 74 68 65 20 71 75 65 72 79 0a  ly by the query.
1f7d0 6f 70 74 69 6d 69 7a 65 72 3c 2f 61 3e 2e 20 4f  optimizer</a>. O
1f7e0 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73 20  therwise, it is 
1f7f0 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72  the cartesian pr
1f800 6f 64 75 63 74 20 6d 6f 64 69 66 69 65 64 20 0a  oduct modified .
1f810 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 6f 6e 65  according to one
1f820 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20   or more of the 
1f830 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c 6c 65 74  following bullet
1f840 20 70 6f 69 6e 74 73 3a 20 0a 0a 3c 75 6c 3e 0a   points: ..<ul>.
1f850 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74    <li> <p>^(If t
1f860 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20 63 6c  here is an ON cl
1f870 61 75 73 65 20 73 70 65 63 69 66 69 65 64 2c 20  ause specified, 
1f880 74 68 65 6e 20 74 68 65 20 4f 4e 20 65 78 70 72  then the ON expr
1f890 65 73 73 69 6f 6e 20 69 73 0a 20 20 20 20 20 20  ession is.      
1f8a0 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
1f8b0 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 63  ach row of the c
1f8c0 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74  artesian product
1f8d0 20 61 73 20 61 20 0a 20 20 20 20 20 20 20 5b 62   as a .       [b
1f8e0 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
1f8f0 6e 5d 2e 20 41 6c 6c 20 72 6f 77 73 20 66 6f 72  n]. All rows for
1f900 20 77 68 69 63 68 20 74 68 65 20 65 78 70 72 65   which the expre
1f910 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
1f920 74 6f 20 0a 20 20 20 20 20 20 20 66 61 6c 73 65  to .       false
1f930 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 66 72   are excluded fr
1f940 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74 2e 29  om the dataset.)
1f950 5e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66  ^..  <li> <p>^If
1f960 20 74 68 65 72 65 20 69 73 20 61 20 55 53 49 4e   there is a USIN
1f970 47 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  G clause specifi
1f980 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1f990 65 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e  e join-constrain
1f9a0 74 2c 0a 20 20 20 20 20 20 20 74 68 65 6e 20 65  t,.       then e
1f9b0 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ach of the colum
1f9c0 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66 69 65  n names specifie
1f9d0 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  d must exist in 
1f9e0 74 68 65 20 64 61 74 61 73 65 74 73 20 74 6f 20  the datasets to 
1f9f0 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74 68 65  .       both the
1fa00 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
1fa10 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 2e 20  of the join-op. 
1fa20 5e 28 46 6f 72 20 65 61 63 68 20 70 61 69 72 20  ^(For each pair 
1fa30 6f 66 20 6e 61 6d 65 73 61 6b 65 0a 20 20 20 20  of namesake.    
1fa40 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20     columns, the 
1fa50 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e  expression "lhs.
1fa60 58 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76  X = rhs.X" is ev
1fa70 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
1fa80 20 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74   row of.       t
1fa90 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
1faa0 64 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65  duct as a [boole
1fab0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
1fac0 41 6c 6c 20 72 6f 77 73 20 66 6f 72 20 77 68 69  All rows for whi
1fad0 63 68 20 6f 6e 65 0a 20 20 20 20 20 20 20 6f 72  ch one.       or
1fae0 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 65 78 70   more of the exp
1faf0 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
1fb00 65 73 20 74 6f 20 66 61 6c 73 65 20 61 72 65 20  es to false are 
1fb10 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  excluded from th
1fb20 65 0a 20 20 20 20 20 20 20 72 65 73 75 6c 74 20  e.       result 
1fb30 73 65 74 2e 29 5e 20 5e 57 68 65 6e 20 63 6f 6d  set.)^ ^When com
1fb40 70 61 72 69 6e 67 20 76 61 6c 75 65 73 20 61 73  paring values as
1fb50 20 61 20 72 65 73 75 6c 74 20 6f 66 20 61 20 55   a result of a U
1fb60 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68 65  SING clause, the
1fb70 0a 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 20 72  .       normal r
1fb80 75 6c 65 73 20 66 6f 72 20 68 61 6e 64 6c 69 6e  ules for handlin
1fb90 67 20 61 66 66 69 6e 69 74 69 65 73 2c 20 63 6f  g affinities, co
1fba0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
1fbb0 73 20 61 6e 64 20 4e 55 4c 4c 0a 20 20 20 20 20  s and NULL.     
1fbc0 20 20 76 61 6c 75 65 73 20 69 6e 20 63 6f 6d 70    values in comp
1fbd0 61 72 69 73 6f 6e 73 20 61 70 70 6c 79 2e 20 5e  arisons apply. ^
1fbe0 54 68 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20  The column from 
1fbf0 74 68 65 20 64 61 74 61 73 65 74 20 6f 6e 20 74  the dataset on t
1fc00 68 65 0a 20 20 20 20 20 20 20 6c 65 66 74 2d 68  he.       left-h
1fc10 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20  and side of the 
1fc20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20 69 73  join operator is
1fc30 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
1fc40 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61  e on the left-ha
1fc50 6e 64 0a 20 20 20 20 20 20 20 73 69 64 65 20 6f  nd.       side o
1fc60 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
1fc70 20 6f 70 65 72 61 74 6f 72 20 28 3d 29 20 66 6f   operator (=) fo
1fc80 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
1fc90 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 20  f collation .   
1fca0 20 20 20 20 73 65 71 75 65 6e 63 65 20 61 6e 64      sequence and
1fcb0 20 61 66 66 69 6e 69 74 79 20 70 72 65 63 65 64   affinity preced
1fcc0 65 6e 63 65 2e 0a 0a 20 20 20 20 20 20 20 3c 70  ence...       <p
1fcd0 3e 5e 46 6f 72 20 65 61 63 68 20 70 61 69 72 20  >^For each pair 
1fce0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 64 65 6e 74  of columns ident
1fcf0 69 66 69 65 64 20 62 79 20 61 20 55 53 49 4e 47  ified by a USING
1fd00 20 63 6c 61 75 73 65 2c 20 74 68 65 20 63 6f 6c   clause, the col
1fd10 75 6d 6e 0a 20 20 20 20 20 20 20 66 72 6f 6d 20  umn.       from 
1fd20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64  the right-hand d
1fd30 61 74 61 73 65 74 20 69 73 20 6f 6d 69 74 74 65  ataset is omitte
1fd40 64 20 66 72 6f 6d 20 74 68 65 20 6a 6f 69 6e 65  d from the joine
1fd50 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 69 73  d dataset. ^This
1fd60 20 0a 20 20 20 20 20 20 20 69 73 20 74 68 65 20   .       is the 
1fd70 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20  only difference 
1fd80 62 65 74 77 65 65 6e 20 61 20 55 53 49 4e 47 20  between a USING 
1fd90 63 6c 61 75 73 65 20 61 6e 64 20 69 74 73 20 65  clause and its e
1fda0 71 75 69 76 61 6c 65 6e 74 20 4f 4e 0a 20 20 20  quivalent ON.   
1fdb0 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a      constraint..
1fdc0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20  .  <li> <p>^(If 
1fdd0 74 68 65 20 4e 41 54 55 52 41 4c 20 6b 65 79 77  the NATURAL keyw
1fde0 6f 72 64 20 69 73 20 61 64 64 65 64 20 74 6f 20  ord is added to 
1fdf0 61 6e 79 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d  any of the join-
1fe00 6f 70 73 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  ops, then an.   
1fe10 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55 53 49      implicit USI
1fe20 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 64 64  NG clause is add
1fe30 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63  ed to the join-c
1fe40 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68 65 20  onstraints. The 
1fe50 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20 20 20  implicit.       
1fe60 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e  USING clause con
1fe70 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20 74 68  tains each of th
1fe80 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
1fe90 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 62 6f  hat appear in bo
1fea0 74 68 0a 20 20 20 20 20 20 20 74 68 65 20 6c 65  th.       the le
1feb0 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
1fec0 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73  d input datasets
1fed0 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65 66 74  .)^ ^If the left
1fee0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
1fef0 20 20 20 20 20 20 20 69 6e 70 75 74 20 64 61 74         input dat
1ff00 61 73 65 74 73 20 66 65 61 74 75 72 65 20 6e 6f  asets feature no
1ff10 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e   common column n
1ff20 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65 20 4e  ames, then the N
1ff30 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20  ATURAL keyword. 
1ff40 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65 66 66        has no eff
1ff50 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  ect on the resul
1ff60 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20  ts of the join. 
1ff70 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63  ^A USING or ON c
1ff80 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20 20 20  lause may.      
1ff90 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f   not be added to
1ffa0 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73 70 65   a join that spe
1ffb0 63 69 66 69 65 73 20 74 68 65 20 4e 41 54 55 52  cifies the NATUR
1ffc0 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c  AL keyword...  <
1ffd0 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20  li> <p>^(If the 
1ffe0 6a 6f 69 6e 2d 6f 70 20 69 73 20 61 20 22 4c 45  join-op is a "LE
1fff0 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22 4c 45 46  FT JOIN" or "LEF
20000 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22 2c 20 74  T OUTER JOIN", t
20010 68 65 6e 20 61 66 74 65 72 0a 20 20 20 20 20 20  hen after.      
20020 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47   the ON or USING
20030 20 66 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73   filtering claus
20040 65 73 20 68 61 76 65 20 62 65 65 6e 20 61 70 70  es have been app
20050 6c 69 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72  lied, an extra r
20060 6f 77 20 69 73 20 0a 20 20 20 20 20 20 20 61 64  ow is .       ad
20070 64 65 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ded to the outpu
20080 74 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  t for each row i
20090 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c  n the original l
200a0 65 66 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a  eft-hand input .
200b0 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20 74         dataset t
200c0 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
200d0 74 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c  to no rows at al
200e0 6c 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69  l in the composi
200f0 74 65 0a 20 20 20 20 20 20 20 64 61 74 61 73 65  te.       datase
20100 74 20 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54  t (if any).)^ ^T
20110 68 65 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f  he added rows co
20120 6e 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65  ntain NULL value
20130 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s in the columns
20140 0a 20 20 20 20 20 20 20 74 68 61 74 20 77 6f 75  .       that wou
20150 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74  ld normally cont
20160 61 69 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65  ain values copie
20170 64 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74  d from the right
20180 2d 68 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20  -hand input.    
20190 20 20 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f     dataset.  .</
201a0 75 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d  ul>..<p>^(When m
201b0 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62  ore than two tab
201c0 6c 65 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74  les are joined t
201d0 6f 67 65 74 68 65 72 20 61 73 20 70 61 72 74 20  ogether as part 
201e0 6f 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65  of a FROM clause
201f0 2c 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61  ,.the join opera
20200 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73  tions are proces
20210 73 65 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f  sed in order fro
20220 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
20230 20 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73   In other .words
20240 2c 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  , the FROM claus
20250 65 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42  e (A join-op-1 B
20260 20 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73   join-op-2 C) is
20270 20 63 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28   computed as .((
20280 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a  A join-op-1 B) j
20290 6f 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 20  oin-op-2 C).)^. 
202a0 20 20 20 20 20 20 0a 0a 3c 70 3e 3c 62 3e 32 2e        ..<p><b>2.
202b0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 69   WHERE clause fi
202c0 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 3c 74 63  ltering.</b>.<tc
202d0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68  l>hd_fragment wh
202e0 65 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a  ereclause</tcl>.
202f0 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
20300 20 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c   {WHERE clause}<
20310 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 28 49 66 20 61  /tcl>..<p>^(If a
20320 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 73   WHERE clause is
20330 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20   specified, the 
20340 57 48 45 52 45 20 65 78 70 72 65 73 73 69 6f 6e  WHERE expression
20350 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f   is evaluated fo
20360 72 20 0a 65 61 63 68 20 72 6f 77 20 69 6e 20 74  r .each row in t
20370 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61 73  he input data as
20380 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72   a [boolean expr
20390 65 73 73 69 6f 6e 5d 2e 20 41 6c 6c 20 72 6f 77  ession]. All row
203a0 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 0a  s for which the.
203b0 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70  WHERE clause exp
203c0 72 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65  ression evaluate
203d0 73 20 74 6f 20 66 61 6c 73 65 20 61 72 65 20 65  s to false are e
203e0 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  xcluded from the
203f0 20 64 61 74 61 73 65 74 20 62 65 66 6f 72 65 0a   dataset before.
20400 63 6f 6e 74 69 6e 75 69 6e 67 2e 29 5e 0a 0a 3c  continuing.)^..<
20410 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69  p><b>3. Generati
20420 6f 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66  on of the set of
20430 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62   result rows.</b
20440 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  >.<tcl>hd_fragme
20450 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63  nt resultset</tc
20460 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
20470 72 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20  rds {result-set 
20480 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52  expressions} {GR
20490 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c  OUP BY}</tcl>..<
204a0 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74  p>Once the input
204b0 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46   data from the F
204c0 52 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62  ROM clause has b
204d0 65 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20  een filtered by 
204e0 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
204f0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20   expression (if 
20500 61 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66  any), the set of
20510 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72   result rows for
20520 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c   the simple .SEL
20530 45 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74  ECT are calculat
20540 65 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20  ed. Exactly how 
20550 74 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70  this is done dep
20560 65 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20  ends on whether 
20570 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
20580 43 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  CT is an aggrega
20590 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67  te or non-aggreg
205a0 61 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77  ate query, and w
205b0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
205c0 47 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20  GROUP.BY clause 
205d0 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a  was specified...
205e0 3c 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20  <p> The list of 
205f0 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77  expressions betw
20600 65 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61  een the SELECT a
20610 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73  nd FROM keywords
20620 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65   is known as.the
20630 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
20640 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20  on list.  ^If a 
20650 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
20660 6e 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c  n is the special
20670 20 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20   expression."*" 
20680 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  then all columns
20690 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
206a0 74 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74  ta are substitut
206b0 65 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20  ed for that one 
206c0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66  expression..^(If
206d0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
206e0 69 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20  is the alias of 
206f0 61 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  a table or subqu
20700 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
20710 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20  clause.followed 
20720 62 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c  by ".*" then all
20730 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68   columns from th
20740 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72  e named table or
20750 20 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75   subquery are.su
20760 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68  bstituted for th
20770 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73  e single express
20780 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61  ion.)^ ^(It is a
20790 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61  n error to use a
207a0 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a   "*" or."alias.*
207b0 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  " expression in 
207c0 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65  any context othe
207d0 72 20 74 68 61 6e 20 74 68 61 6e 20 61 20 72 65  r than than a re
207e0 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20  sult expression 
207f0 6c 69 73 74 2e 29 5e 0a 5e 28 49 74 20 69 73 20  list.)^.^(It is 
20800 61 6c 73 6f 20 61 6e 20 65 72 72 6f 72 20 74 6f  also an error to
20810 20 75 73 65 20 61 20 22 2a 22 20 6f 72 20 22 61   use a "*" or "a
20820 6c 69 61 73 2e 2a 22 20 65 78 70 72 65 73 73 69  lias.*" expressi
20830 6f 6e 20 69 6e 20 61 20 73 69 6d 70 6c 65 20 53  on in a simple S
20840 45 4c 45 43 54 0a 71 75 65 72 79 20 74 68 61 74  ELECT.query that
20850 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61   does not have a
20860 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 29 5e 0a   FROM clause.)^.
20870 0a 3c 70 3e 20 5e 28 54 68 65 20 6e 75 6d 62 65  .<p> ^(The numbe
20880 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
20890 74 68 65 20 72 6f 77 73 20 72 65 74 75 72 6e 65  the rows returne
208a0 64 20 62 79 20 61 20 73 69 6d 70 6c 65 20 53 45  d by a simple SE
208b0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 69  LECT statement.i
208c0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6e  s equal to the n
208d0 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
208e0 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  ions in the resu
208f0 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69  lt expression li
20900 73 74 20 61 66 74 65 72 0a 73 75 62 73 74 69 74  st after.substit
20910 75 74 69 6f 6e 20 6f 66 20 2a 20 61 6e 64 20 61  ution of * and a
20920 6c 69 61 73 2e 2a 20 65 78 70 72 65 73 73 69 6f  lias.* expressio
20930 6e 73 2e 29 5e 20 45 61 63 68 20 72 65 73 75 6c  ns.)^ Each resul
20940 74 20 72 6f 77 20 69 73 20 63 61 6c 63 75 6c 61  t row is calcula
20950 74 65 64 20 62 79 0a 65 76 61 6c 75 61 74 69 6e  ted by.evaluatin
20960 67 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  g the expression
20970 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
20980 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
20990 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20  with respect to 
209a0 61 0a 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a.single row of 
209b0 69 6e 70 75 74 20 64 61 74 61 20 6f 72 2c 20 66  input data or, f
209c0 6f 72 20 61 67 67 72 65 67 61 74 65 20 71 75 65  or aggregate que
209d0 72 69 65 73 2c 20 77 69 74 68 20 72 65 73 70 65  ries, with respe
209e0 63 74 20 74 6f 20 61 20 67 72 6f 75 70 0a 6f 66  ct to a group.of
209f0 20 72 6f 77 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c   rows...<ul>.  <
20a00 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45  li><p>^If the SE
20a10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
20a20 73 20 3c 62 3e 61 20 6e 6f 6e 2d 61 67 67 72 65  s <b>a non-aggre
20a30 67 61 74 65 20 71 75 65 72 79 3c 2f 62 3e 2c 20  gate query</b>, 
20a40 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20 65  then .    each e
20a50 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
20a60 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
20a70 6f 6e 20 6c 69 73 74 20 69 73 20 65 76 61 6c 75  on list is evalu
20a80 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
20a90 77 20 69 6e 0a 20 20 20 20 74 68 65 20 64 61 74  w in.    the dat
20aa0 61 73 65 74 20 66 69 6c 74 65 72 65 64 20 62 79  aset filtered by
20ab0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
20ac0 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  e...  <li><p>^If
20ad0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
20ae0 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61  ement is <b>an a
20af0 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
20b00 69 74 68 6f 75 74 20 61 20 47 52 4f 55 50 0a 20  ithout a GROUP. 
20b10 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65     BY</b> clause
20b20 2c 20 74 68 65 6e 20 65 61 63 68 20 61 67 67 72  , then each aggr
20b30 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
20b40 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
20b50 65 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75  et is .    evalu
20b60 61 74 65 64 20 6f 6e 63 65 20 61 63 72 6f 73 73  ated once across
20b70 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
20b80 73 65 74 2e 20 5e 45 61 63 68 20 6e 6f 6e 2d 61  set. ^Each non-a
20b90 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
20ba0 69 6f 6e 0a 20 20 20 20 69 6e 20 74 68 65 20 72  ion.    in the r
20bb0 65 73 75 6c 74 2d 73 65 74 20 69 73 20 65 76 61  esult-set is eva
20bc0 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
20bd0 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73  an arbitrarily s
20be0 65 6c 65 63 74 65 64 20 72 6f 77 20 6f 66 0a 20  elected row of. 
20bf0 20 20 20 74 68 65 20 64 61 74 61 73 65 74 2e 20     the dataset. 
20c00 5e 54 68 65 20 73 61 6d 65 20 61 72 62 69 74 72  ^The same arbitr
20c10 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
20c20 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 65  ow is used for e
20c30 61 63 68 0a 20 20 20 20 6e 6f 6e 2d 61 67 67 72  ach.    non-aggr
20c40 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
20c50 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 64 61  . ^Or, if the da
20c60 74 61 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 7a  taset contains z
20c70 65 72 6f 20 72 6f 77 73 2c 20 74 68 65 6e 20 0a  ero rows, then .
20c80 20 20 20 20 65 61 63 68 20 6e 6f 6e 2d 61 67 67      each non-agg
20c90 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
20ca0 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  n is evaluated a
20cb0 67 61 69 6e 73 74 20 61 20 72 6f 77 20 63 6f 6e  gainst a row con
20cc0 73 69 73 74 69 6e 67 0a 20 20 20 20 65 6e 74 69  sisting.    enti
20cd0 72 65 6c 79 20 6f 66 20 4e 55 4c 4c 20 76 61 6c  rely of NULL val
20ce0 75 65 73 2e 0a 0a 20 20 20 3c 70 3e 5e 54 68 65  ues...   <p>^The
20cf0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
20d00 65 73 75 6c 74 2d 73 65 74 20 64 61 74 61 20 63  esult-set data c
20d10 72 65 61 74 65 64 20 62 79 20 65 76 61 6c 75 61  reated by evalua
20d20 74 69 6e 67 20 74 68 65 20 61 67 67 72 65 67 61  ting the aggrega
20d30 74 65 0a 20 20 20 20 61 6e 64 20 6e 6f 6e 2d 61  te.    and non-a
20d40 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
20d50 69 6f 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  ions in the resu
20d60 6c 74 2d 73 65 74 20 66 6f 72 6d 73 20 74 68 65  lt-set forms the
20d70 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 0a 20 20   result of an.  
20d80 20 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72    aggregate quer
20d90 79 20 77 69 74 68 6f 75 74 20 61 20 47 52 4f 55  y without a GROU
20da0 50 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 41 6e  P BY clause. ^An
20db0 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79   aggregate query
20dc0 20 77 69 74 68 6f 75 74 20 61 0a 20 20 20 20 47   without a.    G
20dd0 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 61  ROUP BY clause a
20de0 6c 77 61 79 73 20 72 65 74 75 72 6e 73 20 65 78  lways returns ex
20df0 61 63 74 6c 79 20 6f 6e 65 20 72 6f 77 20 6f 66  actly one row of
20e00 20 64 61 74 61 2c 20 65 76 65 6e 20 69 66 20 74   data, even if t
20e10 68 65 72 65 20 61 72 65 0a 20 20 20 20 7a 65 72  here are.    zer
20e20 6f 20 72 6f 77 73 20 6f 66 20 69 6e 70 75 74 20  o rows of input 
20e30 64 61 74 61 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  data...  <li><p>
20e40 5e 28 49 66 20 74 68 65 20 53 45 4c 45 43 54 20  ^(If the SELECT 
20e50 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e  statement is <b>
20e60 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
20e70 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a  ry with a GROUP.
20e80 20 20 20 20 42 59 3c 2f 62 3e 20 63 6c 61 75 73      BY</b> claus
20e90 65 2c 20 74 68 65 6e 20 65 61 63 68 20 6f 66 20  e, then each of 
20ea0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
20eb0 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
20ec0 74 20 6f 66 20 74 68 65 0a 20 20 20 20 47 52 4f  t of the.    GRO
20ed0 55 50 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  UP BY clause is 
20ee0 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61  evaluated for ea
20ef0 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 64 61  ch row of the da
20f00 74 61 73 65 74 2e 20 45 61 63 68 20 72 6f 77 0a  taset. Each row.
20f10 20 20 20 20 69 73 20 74 68 65 6e 20 61 73 73 69      is then assi
20f20 67 6e 65 64 20 74 6f 20 61 20 22 67 72 6f 75 70  gned to a "group
20f30 22 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72  " based on the r
20f40 65 73 75 6c 74 73 3b 20 72 6f 77 73 20 66 6f 72  esults; rows for
20f50 20 77 68 69 63 68 0a 20 20 20 20 74 68 65 20 72   which.    the r
20f60 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61  esults of evalua
20f70 74 69 6e 67 20 74 68 65 20 47 52 4f 55 50 20 42  ting the GROUP B
20f80 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  Y expressions ar
20f90 65 20 74 68 65 20 73 61 6d 65 20 61 72 65 0a 20  e the same are. 
20fa0 20 20 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74     assigned to t
20fb0 68 65 20 73 61 6d 65 20 67 72 6f 75 70 2e 29 5e  he same group.)^
20fc0 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
20fd0 65 73 20 6f 66 20 67 72 6f 75 70 69 6e 67 20 72  es of grouping r
20fe0 6f 77 73 2c 20 4e 55 4c 4c 20 0a 20 20 20 20 76  ows, NULL .    v
20ff0 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
21000 65 72 65 64 20 65 71 75 61 6c 2e 20 5e 54 68 65  ered equal. ^The
21010 20 75 73 75 61 6c 20 72 75 6c 65 73 20 66 6f 72   usual rules for
21020 20 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65   [collation|sele
21030 63 74 69 6e 67 20 61 0a 20 20 20 20 63 6f 6c 6c  cting a.    coll
21040 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20  ation sequence] 
21050 77 69 74 68 20 77 68 69 63 68 20 74 6f 20 63 6f  with which to co
21060 6d 70 61 72 65 20 74 65 78 74 20 76 61 6c 75 65  mpare text value
21070 73 20 61 70 70 6c 79 20 77 68 65 6e 20 65 76 61  s apply when eva
21080 6c 75 61 74 69 6e 67 0a 20 20 20 20 65 78 70 72  luating.    expr
21090 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52 4f  essions in a GRO
210a0 55 50 20 42 59 20 63 6c 61 75 73 65 2e 20 20 5e  UP BY clause.  ^
210b0 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  The expressions 
210c0 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  in the GROUP BY 
210d0 63 6c 61 75 73 65 0a 20 20 20 20 64 6f 20 3c 65  clause.    do <e
210e0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 68 61 76 65 20  m>not</em> have 
210f0 74 6f 20 62 65 20 65 78 70 72 65 73 73 69 6f 6e  to be expression
21100 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
21110 20 74 68 65 20 72 65 73 75 6c 74 2e 20 5e 54 68   the result. ^Th
21120 65 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  e.    expression
21130 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20  s in a GROUP BY 
21140 63 6c 61 75 73 65 20 6d 61 79 20 6e 6f 74 20 62  clause may not b
21150 65 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  e aggregate expr
21160 65 73 73 69 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70  essions...    <p
21170 3e 5e 28 49 66 20 61 20 48 41 56 49 4e 47 20 63  >^(If a HAVING c
21180 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
21190 65 64 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  ed, it is evalua
211a0 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63  ted once for eac
211b0 68 20 67 72 6f 75 70 20 0a 20 20 20 20 6f 66 20  h group .    of 
211c0 72 6f 77 73 20 61 73 20 61 20 5b 62 6f 6f 6c 65  rows as a [boole
211d0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
211e0 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
211f0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 0a   evaluating the.
21200 20 20 20 20 48 41 56 49 4e 47 20 63 6c 61 75 73      HAVING claus
21210 65 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 20  e is false, the 
21220 67 72 6f 75 70 20 69 73 20 64 69 73 63 61 72 64  group is discard
21230 65 64 2e 29 5e 20 5e 49 66 20 74 68 65 20 48 41  ed.)^ ^If the HA
21240 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 0a 20  VING clause is. 
21250 20 20 20 61 6e 20 61 67 67 72 65 67 61 74 65 20     an aggregate 
21260 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69  expression, it i
21270 73 20 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f  s evaluated acro
21280 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74  ss all rows in t
21290 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 0a 20 20  he group. ^If.  
212a0 20 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73    a HAVING claus
212b0 65 20 69 73 20 61 20 6e 6f 6e 2d 61 67 67 72 65  e is a non-aggre
212c0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  gate expression,
212d0 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64   it is evaluated
212e0 20 77 69 74 68 20 72 65 73 70 65 63 74 0a 20 20   with respect.  
212f0 20 20 74 6f 20 61 6e 20 61 72 62 69 74 72 61 72    to an arbitrar
21300 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77  ily selected row
21310 20 66 72 6f 6d 20 74 68 65 20 67 72 6f 75 70 2e   from the group.
21320 20 20 5e 54 68 65 20 48 41 56 49 4e 47 20 65 78    ^The HAVING ex
21330 70 72 65 73 73 69 6f 6e 20 6d 61 79 0a 20 20 20  pression may.   
21340 20 72 65 66 65 72 20 74 6f 20 76 61 6c 75 65 73   refer to values
21350 2c 20 65 76 65 6e 20 61 67 67 72 65 67 61 74 65  , even aggregate
21360 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 61 74   functions, that
21370 20 61 72 65 20 6e 6f 74 20 69 6e 20 74 68 65 20   are not in the 
21380 72 65 73 75 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20  result.</p>..   
21390 20 3c 70 3e 5e 45 61 63 68 20 65 78 70 72 65 73   <p>^Each expres
213a0 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75  sion in the resu
213b0 6c 74 2d 73 65 74 20 69 73 20 74 68 65 6e 20 65  lt-set is then e
213c0 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f  valuated once fo
213d0 72 20 65 61 63 68 0a 20 20 20 20 67 72 6f 75 70  r each.    group
213e0 20 6f 66 20 72 6f 77 73 2e 20 5e 49 66 20 74 68   of rows. ^If th
213f0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
21400 61 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70  an aggregate exp
21410 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 0a  ression, it is .
21420 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 61 63      evaluated ac
21430 72 6f 73 73 20 61 6c 6c 20 72 6f 77 73 20 69 6e  ross all rows in
21440 20 74 68 65 20 67 72 6f 75 70 2e 20 5e 4f 74 68   the group. ^Oth
21450 65 72 77 69 73 65 2c 20 69 74 20 69 73 20 65 76  erwise, it is ev
21460 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a  aluated against.
21470 20 20 20 20 61 20 73 69 6e 67 6c 65 20 61 72 62      a single arb
21480 69 74 72 61 72 69 6c 79 20 63 68 6f 73 65 6e 20  itrarily chosen 
21490 72 6f 77 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  row from within 
214a0 74 68 65 20 67 72 6f 75 70 2e 20 5e 49 66 20 74  the group. ^If t
214b0 68 65 72 65 20 69 73 20 6d 6f 72 65 0a 20 20 20  here is more.   
214c0 20 74 68 61 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67   than one non-ag
214d0 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
214e0 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  on in the result
214f0 2d 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 20 73  -set, then all s
21500 75 63 68 0a 20 20 20 20 65 78 70 72 65 73 73 69  uch.    expressi
21510 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65  ons are evaluate
21520 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 72  d for the same r
21530 6f 77 2e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63  ow...    <p>^Eac
21540 68 20 67 72 6f 75 70 20 6f 66 20 69 6e 70 75 74  h group of input
21550 20 64 61 74 61 73 65 74 20 72 6f 77 73 20 63 6f   dataset rows co
21560 6e 74 72 69 62 75 74 65 73 20 61 20 73 69 6e 67  ntributes a sing
21570 6c 65 20 72 6f 77 20 74 6f 20 74 68 65 20 0a 20  le row to the . 
21580 20 20 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74     set of result
21590 20 72 6f 77 73 2e 20 5e 53 75 62 6a 65 63 74 20   rows. ^Subject 
215a0 74 6f 20 66 69 6c 74 65 72 69 6e 67 20 61 73 73  to filtering ass
215b0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
215c0 20 44 49 53 54 49 4e 43 54 0a 20 20 20 20 6b 65   DISTINCT.    ke
215d0 79 77 6f 72 64 2c 20 74 68 65 20 6e 75 6d 62 65  yword, the numbe
215e0 72 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  r of rows return
215f0 65 64 20 62 79 20 61 6e 20 61 67 67 72 65 67 61  ed by an aggrega
21600 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61 20  te query with a 
21610 47 52 4f 55 50 0a 20 20 20 20 42 59 20 63 6c 61  GROUP.    BY cla
21620 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 20  use is the same 
21630 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
21640 20 67 72 6f 75 70 73 20 6f 66 20 72 6f 77 73 20   groups of rows 
21650 70 72 6f 64 75 63 65 64 20 62 79 20 61 70 70 6c  produced by appl
21660 79 69 6e 67 0a 20 20 20 20 74 68 65 20 47 52 4f  ying.    the GRO
21670 55 50 20 42 59 20 61 6e 64 20 48 41 56 49 4e 47  UP BY and HAVING
21680 20 63 6c 61 75 73 65 73 20 74 6f 20 74 68 65 20   clauses to the 
21690 66 69 6c 74 65 72 65 64 20 69 6e 70 75 74 20 64  filtered input d
216a0 61 74 61 73 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  ataset..</ul>..<
216b0 70 3e 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20  p><b>4. Removal 
216c0 6f 66 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  of duplicate row
216d0 73 20 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63  s (DISTINCT proc
216e0 65 73 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63  essing).</b>.<tc
216f0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69  l>hd_fragment di
21700 73 74 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63  stinct</tcl>.<tc
21710 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44  l>hd_keywords {D
21720 49 53 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a  ISTINCT}</tcl>..
21730 3c 70 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41  <p>^One of the A
21740 4c 4c 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b  LL or DISTINCT k
21750 65 79 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c  eywords may foll
21760 6f 77 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65  ow the SELECT ke
21770 79 77 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70  yword in a .simp
21780 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
21790 65 6e 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d  ent. ^If the sim
217a0 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  ple SELECT is a 
217b0 53 45 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e  SELECT ALL, then
217c0 20 74 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20   the.entire set 
217d0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61  of result rows a
217e0 72 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  re returned by t
217f0 68 65 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e  he SELECT. ^If n
21800 65 69 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49  either ALL or.DI
21810 53 54 49 4e 43 54 20 61 72 65 20 70 72 65 73 65  STINCT are prese
21820 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68  nt, then the beh
21830 61 76 69 6f 75 72 20 69 73 20 61 73 20 69 66 20  aviour is as if 
21840 41 4c 4c 20 77 65 72 65 20 73 70 65 63 69 66 69  ALL were specifi
21850 65 64 2e 20 0a 5e 49 66 20 74 68 65 20 73 69 6d  ed. .^If the sim
21860 70 6c 65 20 53 45 4c 45 43 54 20 69 73 20 61 20  ple SELECT is a 
21870 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 2c  SELECT DISTINCT,
21880 20 74 68 65 6e 20 64 75 70 6c 69 63 61 74 65 20   then duplicate 
21890 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
218a0 0a 66 72 6f 6d 20 74 68 65 20 73 65 74 20 6f 66  .from the set of
218b0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 62 65 66   result rows bef
218c0 6f 72 65 20 69 74 20 69 73 20 72 65 74 75 72 6e  ore it is return
218d0 65 64 2e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  ed. ^For the pur
218e0 70 6f 73 65 73 20 6f 66 0a 64 65 74 65 63 74 69  poses of.detecti
218f0 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  ng duplicate row
21900 73 2c 20 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75  s, two NULL valu
21910 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
21920 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e  d to be equal. ^
21930 54 68 65 0a 6e 6f 72 6d 61 6c 20 72 75 6c 65 73  The.normal rules
21940 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61   for selecting a
21950 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
21960 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  nce to compare t
21970 65 78 74 20 76 61 6c 75 65 73 20 77 69 74 68 0a  ext values with.
21980 61 70 70 6c 79 2e 0a 0a 3c 68 33 3e 43 6f 6d 70  apply...<h3>Comp
21990 6f 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74  ound Select Stat
219a0 65 6d 65 6e 74 73 0a 3c 74 63 6c 3e 68 64 5f 66  ements.<tcl>hd_f
219b0 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75 6e 64  ragment compound
219c0 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  </tcl>.<tcl>hd_k
219d0 65 79 77 6f 72 64 73 20 7b 63 6f 6d 70 6f 75 6e  eywords {compoun
219e0 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f  d select} {compo
219f0 75 6e 64 20 71 75 65 72 79 7d 3c 2f 74 63 6c 3e  und query}</tcl>
21a00 0a 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f  .</h3>..<p>Two o
21a10 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20 53 45  r more simple SE
21a20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
21a30 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65 64  may be connected
21a40 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f 72   together to for
21a50 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  m.a compound SEL
21a60 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55 4e  ECT using the UN
21a70 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20  ION, UNION ALL, 
21a80 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58 43  INTERSECT or EXC
21a90 45 50 54 20 6f 70 65 72 61 74 6f 72 2e 0a 5e 49  EPT operator..^I
21aa0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  n a compound SEL
21ab0 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63 6f 6e  ECT, all the con
21ac0 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 73  stituent SELECTs
21ad0 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 68 65   must return the
21ae0 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20 6f 66   same .number of
21af0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 2e   result columns.
21b00 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f 6e 65   ^As the compone
21b10 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  nts of a compoun
21b20 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a 62 65  d SELECT must.be
21b30 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
21b40 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65 79 20  tatements, they 
21b50 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  may not contain 
21b60 4f 52 44 45 52 20 42 59 20 6f 72 20 4c 49 4d 49  ORDER BY or LIMI
21b70 54 20 63 6c 61 75 73 65 73 2e 0a 5e 4f 52 44 45  T clauses..^ORDE
21b80 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63  R BY and LIMIT c
21b90 6c 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20  lauses may only 
21ba0 6f 63 63 75 72 20 61 74 20 74 68 65 20 65 6e 64  occur at the end
21bb0 20 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 63   of the entire c
21bc0 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2e 20  ompound.SELECT. 
21bd0 20 0a 0a 3c 70 3e 5e 41 20 63 6f 6d 70 6f 75 6e   ..<p>^A compoun
21be0 64 20 53 45 4c 45 43 54 20 63 72 65 61 74 65 64  d SELECT created
21bf0 20 75 73 69 6e 67 20 55 4e 49 4f 4e 20 41 4c 4c   using UNION ALL
21c00 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e   operator return
21c10 73 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66  s all the rows.f
21c20 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74  rom the SELECT t
21c30 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20 74 68  o the left of th
21c40 65 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72  e UNION ALL oper
21c50 61 74 6f 72 2c 20 61 6e 64 20 61 6c 6c 20 74 68  ator, and all th
21c60 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20  e rows.from the 
21c70 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 72 69  SELECT to the ri
21c80 67 68 74 20 6f 66 20 69 74 2e 20 5e 54 68 65 20  ght of it. ^The 
21c90 55 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 77  UNION operator w
21ca0 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61  orks the same wa
21cb0 79 20 61 73 0a 55 4e 49 4f 4e 20 41 4c 4c 2c 20  y as.UNION ALL, 
21cc0 65 78 63 65 70 74 20 74 68 61 74 20 64 75 70 6c  except that dupl
21cd0 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72  icate rows are r
21ce0 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
21cf0 66 69 6e 61 6c 20 72 65 73 75 6c 74 20 73 65 74  final result set
21d00 2e 0a 5e 54 68 65 20 49 4e 54 45 52 53 45 43 54  ..^The INTERSECT
21d10 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75 72 6e   operator return
21d20 73 20 74 68 65 20 69 6e 74 65 72 73 65 63 74 69  s the intersecti
21d30 6f 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  on of the result
21d40 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  s of the left an
21d50 64 0a 72 69 67 68 74 20 53 45 4c 45 43 54 73 2e  d.right SELECTs.
21d60 20 20 5e 54 68 65 20 45 58 43 45 50 54 20 6f 70    ^The EXCEPT op
21d70 65 72 61 74 6f 72 20 72 65 74 75 72 6e 73 20 74  erator returns t
21d80 68 65 20 73 75 62 73 65 74 20 6f 66 20 72 6f 77  he subset of row
21d90 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
21da0 65 0a 6c 65 66 74 20 53 45 4c 45 43 54 20 74 68  e.left SELECT th
21db0 61 74 20 61 72 65 20 6e 6f 74 20 61 6c 73 6f 20  at are not also 
21dc0 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
21dd0 72 69 67 68 74 2d 68 61 6e 64 20 53 45 4c 45 43  right-hand SELEC
21de0 54 2e 20 5e 44 75 70 6c 69 63 61 74 65 0a 72 6f  T. ^Duplicate.ro
21df0 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
21e00 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 73 20  rom the results 
21e10 6f 66 20 49 4e 54 45 52 53 45 43 54 20 61 6e 64  of INTERSECT and
21e20 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
21e30 73 20 62 65 66 6f 72 65 20 74 68 65 0a 72 65 73  s before the.res
21e40 75 6c 74 20 73 65 74 20 69 73 20 72 65 74 75 72  ult set is retur
21e50 6e 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 74 68  ned...<p>^For th
21e60 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65  e purposes of de
21e70 74 65 72 6d 69 6e 69 6e 67 20 64 75 70 6c 69 63  termining duplic
21e80 61 74 65 20 72 6f 77 73 20 66 6f 72 20 74 68 65  ate rows for the
21e90 20 72 65 73 75 6c 74 73 20 6f 66 20 63 6f 6d 70   results of comp
21ea0 6f 75 6e 64 0a 53 45 4c 45 43 54 20 6f 70 65 72  ound.SELECT oper
21eb0 61 74 6f 72 73 2c 20 4e 55 4c 4c 20 76 61 6c 75  ators, NULL valu
21ec0 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
21ed0 64 20 65 71 75 61 6c 20 74 6f 20 6f 74 68 65 72  d equal to other
21ee0 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 6e 64   NULL values and
21ef0 0a 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61  .distinct from a
21f00 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
21f10 65 73 2e 20 5e 54 68 65 20 63 6f 6c 6c 61 74 69  es. ^The collati
21f20 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  on sequence used
21f30 20 74 6f 20 63 6f 6d 70 61 72 65 20 0a 74 77 6f   to compare .two
21f40 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73 20   text values is 
21f50 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 69 66  determined as if
21f60 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
21f70 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
21f80 68 74 2d 68 61 6e 64 0a 53 45 4c 45 43 54 20 73  ht-hand.SELECT s
21f90 74 61 74 65 6d 65 6e 74 73 20 77 65 72 65 20 74  tatements were t
21fa0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
21fb0 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 73 20  t-hand operands 
21fc0 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 28 3d  of the equals (=
21fd0 29 0a 6f 70 65 72 61 74 6f 72 2c 20 65 78 63 65  ).operator, exce
21fe0 70 74 20 74 68 61 74 20 67 72 65 61 74 65 72 20  pt that greater 
21ff0 70 72 65 63 65 64 65 6e 63 65 20 69 73 20 6e 6f  precedence is no
22000 74 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61 20  t assigned to a 
22010 63 6f 6c 6c 61 74 69 6f 6e 20 0a 73 65 71 75 65  collation .seque
22020 6e 63 65 20 73 70 65 63 69 66 69 65 64 20 77 69  nce specified wi
22030 74 68 20 74 68 65 20 70 6f 73 74 66 69 78 20 43  th the postfix C
22040 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 2e  OLLATE operator.
22050 20 5e 4e 6f 20 61 66 66 69 6e 69 74 79 0a 74 72   ^No affinity.tr
22060 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 20 61 72  ansformations ar
22070 65 20 61 70 70 6c 69 65 64 20 74 6f 20 61 6e 79  e applied to any
22080 20 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6d   values when com
22090 70 61 72 69 6e 67 20 72 6f 77 73 20 61 73 20 70  paring rows as p
220a0 61 72 74 20 6f 66 20 61 0a 63 6f 6d 70 6f 75 6e  art of a.compoun
220b0 64 20 53 45 4c 45 43 54 2e 20 0a 0a 3c 70 3e 5e  d SELECT. ..<p>^
220c0 28 57 68 65 6e 20 74 68 72 65 65 20 6f 72 20 6d  (When three or m
220d0 6f 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  ore simple SELEC
220e0 54 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64  Ts are connected
220f0 20 69 6e 74 6f 20 61 20 63 6f 6d 70 6f 75 6e 64   into a compound
22100 20 53 45 4c 45 43 54 2c 0a 74 68 65 79 20 67 72   SELECT,.they gr
22110 6f 75 70 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  oup from left to
22120 20 72 69 67 68 74 2e 20 49 6e 20 6f 74 68 65 72   right. In other
22130 20 77 6f 72 64 73 2c 20 69 66 20 22 41 22 2c 20   words, if "A", 
22140 22 42 22 20 61 6e 64 20 22 43 22 20 61 72 65 20  "B" and "C" are 
22150 61 6c 6c 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43  all.simple SELEC
22160 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 28 41  T statements, (A
22170 20 6f 70 20 42 20 6f 70 20 43 29 20 69 73 20 70   op B op C) is p
22180 72 6f 63 65 73 73 65 64 20 61 73 20 28 28 41 20  rocessed as ((A 
22190 6f 70 20 42 29 20 6f 70 20 43 29 2e 29 5e 0a 0a  op B) op C).)^..
221a0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
221b0 61 67 6d 65 6e 74 20 6f 72 64 65 72 62 79 20 7b  agment orderby {
221c0 6f 72 64 65 72 20 62 79 7d 3c 2f 74 63 6c 3e 0a  order by}</tcl>.
221d0 3c 68 33 3e 4f 52 44 45 52 20 42 59 20 61 6e 64  <h3>ORDER BY and
221e0 20 4c 49 4d 49 54 2f 4f 46 46 53 45 54 20 43 6c   LIMIT/OFFSET Cl
221f0 61 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 49  auses</h3>..<p>I
22200 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
22210 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75 72 6e  ment that return
22220 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
22230 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  row does not hav
22240 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20 63 6c  e an.ORDER BY cl
22250 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65 72 20  ause, the order 
22260 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 6f 77  in which the row
22270 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 69  s are returned i
22280 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f 72 2c  s undefined..Or,
22290 20 69 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   if a SELECT sta
222a0 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61 76 65  tement does have
222b0 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
222c0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 69  use, then the li
222d0 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69 6f 6e  st of.expression
222e0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
222f0 65 20 4f 52 44 45 52 20 42 59 20 64 65 74 65 72  e ORDER BY deter
22300 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72 20 69  mine the order i
22310 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61 72 65  n which rows.are
22320 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
22330 20 75 73 65 72 2e 20 5e 52 6f 77 73 20 61 72 65   user. ^Rows are
22340 20 66 69 72 73 74 20 73 6f 72 74 65 64 20 62 61   first sorted ba
22350 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
22360 74 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67  ts of.evaluating
22370 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65   the left-most e
22380 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
22390 20 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20   ORDER BY list, 
223a0 74 68 65 6e 20 74 69 65 73 20 61 72 65 20 62 72  then ties are br
223b0 6f 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69  oken.by evaluati
223c0 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65  ng the second le
223d0 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69  ft-most expressi
223e0 6f 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68  on and so on. Th
223f0 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
22400 0a 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68  .two rows for wh
22410 69 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59  ich all ORDER BY
22420 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61   expressions eva
22430 6c 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76  luate to equal v
22440 61 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e  alues are.return
22450 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ed is undefined.
22460 20 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20   ^Each ORDER BY 
22470 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62  expression may b
22480 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c  e optionally fol
22490 6c 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20  lowed.by one of 
224a0 74 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43  the keywords ASC
224b0 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73   (smaller values
224c0 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69   are returned fi
224d0 72 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61  rst) or DESC (la
224e0 72 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20  rger.values are 
224f0 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e  returned first).
22500 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53 43   ^If neither ASC
22510 20 6f 72 20 44 45 53 43 20 61 72 65 20 73 70 65   or DESC are spe
22520 63 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65  cified, rows.are
22530 20 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e   sorted in ascen
22540 64 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61  ding (smaller va
22550 6c 75 65 73 20 66 69 72 73 74 29 20 6f 72 64 65  lues first) orde
22560 72 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c  r by default...<
22570 70 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20  p>Each ORDER BY 
22580 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72  expression is pr
22590 6f 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f  ocessed as follo
225a0 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
225b0 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44  i><p>^If the ORD
225c0 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
225d0 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69   is a constant i
225e0 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68  nteger K then th
225f0 65 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e.expression is 
22600 63 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c  considered an al
22610 69 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68  ias for the K-th
22620 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72   column of the r
22630 65 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d  esult set.(colum
22640 6e 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  ns are numbered 
22650 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
22660 68 74 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  ht starting with
22670 20 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66   1)...<li><p>^If
22680 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78   the ORDER BY ex
22690 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69  pression is an i
226a0 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 63  dentifier that c
226b0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68  orresponds to.th
226c0 65 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f  e alias of one o
226d0 66 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c  f the output col
226e0 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65  umns, then the e
226f0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e  xpression is con
22700 73 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73  sidered.an alias
22710 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e   for that column
22720 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72  ...<li><p>^Other
22730 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44  wise, if the ORD
22740 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22750 20 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78   is any other ex
22760 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73  pression, it .is
22770 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74   evaluated and t
22780 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75  he returned valu
22790 65 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20  e used to order 
227a0 74 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e  the output rows.
227b0 20 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20   ^If.the SELECT 
227c0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73  statement is a s
227d0 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68  imple SELECT, th
227e0 65 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d  en an ORDER BY m
227f0 61 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61  ay contain any.a
22800 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73  rbitrary express
22810 69 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20  ions. ^However, 
22820 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73  if the SELECT is
22830 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a compound SELE
22840 43 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42  CT, then.ORDER B
22850 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  Y expressions th
22860 61 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73  at are not alias
22870 65 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c  es to output col
22880 75 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61  umns must be exa
22890 63 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73  ctly.the same as
228a0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75   an expression u
228b0 73 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74  sed as an output
228c0 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a   column..</ol>..
228d0 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
228e0 6f 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20  oses of sorting 
228f0 72 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65  rows, values are
22900 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65   compared in the
22910 20 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72   same way.as for
22920 20 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70   [comparison exp
22930 72 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63  ressions]. The c
22940 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
22950 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  e used to compar
22960 65 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65  e.two text value
22970 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
22980 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c  as follows:..<ol
22990 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74  >.  <li><p>^If t
229a0 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  he ORDER BY expr
229b0 65 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e  ession is assign
229c0 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ed a collation s
229d0 65 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20  equence using.  
229e0 74 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c  the postfix [COL
229f0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20  LATE operator], 
22a00 74 68 65 6e 20 74 68 65 20 73 70 65 63 69 66 69  then the specifi
22a10 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
22a20 75 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e  uence is.  used.
22a30 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72  .  <li><p>^Other
22a40 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44  wise, if the ORD
22a50 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
22a60 20 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20   is an alias to 
22a70 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20  an expression.  
22a80 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 61 73  that has been as
22a90 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69  signed a collati
22aa0 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e  on sequence usin
22ab0 67 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20  g the postfix . 
22ac0 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74   [COLLATE operat
22ad0 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  or], then the co
22ae0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
22af0 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65   assigned to the
22b00 20 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65   aliased.  expre
22b10 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20  ssion is used.. 
22b20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69   <li><p>^Otherwi
22b30 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52  se, if the ORDER
22b40 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
22b50 73 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e  s a column or an
22b60 20 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65   alias of.  an e
22b70 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
22b80 73 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e  s a column, then
22b90 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   the default col
22ba0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
22bb0 66 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e  for.  the column
22bc0 20 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69   is used. .  <li
22bd0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
22be0 74 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c  the [BINARY] col
22bf0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
22c00 69 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a  is used..</ol>..
22c10 3c 70 3e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  <p>In a compound
22c20 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
22c30 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20  t, all ORDER BY 
22c40 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20  expressions are 
22c50 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73  handled.as alias
22c60 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68  es for one of th
22c70 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  e result columns
22c80 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64   of the compound
22c90 20 53 45 4c 45 43 54 2e 0a 5e 28 49 66 20 61 6e   SELECT..^(If an
22ca0 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
22cb0 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6e 20 69  sion is not an i
22cc0 6e 74 65 67 65 72 20 61 6c 69 61 73 2c 20 74 68  nteger alias, th
22cd0 65 6e 20 53 51 4c 69 74 65 20 73 65 61 72 63 68  en SQLite search
22ce0 65 73 0a 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  es.the left-most
22cf0 20 53 45 4c 45 43 54 20 69 6e 20 74 68 65 20 63   SELECT in the c
22d00 6f 6d 70 6f 75 6e 64 20 66 6f 72 20 61 20 72 65  ompound for a re
22d10 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68 61 74  sult column that
22d20 20 6d 61 74 63 68 65 73 20 65 69 74 68 65 72 0a   matches either.
22d30 74 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 74 68  the second or th
22d40 69 72 64 20 72 75 6c 65 73 20 61 62 6f 76 65 2e  ird rules above.
22d50 20 49 66 20 61 20 6d 61 74 63 68 20 69 73 20 66   If a match is f
22d60 6f 75 6e 64 2c 20 74 68 65 20 73 65 61 72 63 68  ound, the search
22d70 20 73 74 6f 70 73 20 61 6e 64 0a 74 68 65 20 65   stops and.the e
22d80 78 70 72 65 73 73 69 6f 6e 20 69 73 20 68 61 6e  xpression is han
22d90 64 6c 65 64 20 61 73 20 61 6e 20 61 6c 69 61 73  dled as an alias
22da0 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
22db0 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 74 20 68  column that it h
22dc0 61 73 20 62 65 65 6e 0a 6d 61 74 63 68 65 64 20  as been.matched 
22dd0 61 67 61 69 6e 73 74 2e 20 4f 74 68 65 72 77 69  against. Otherwi
22de0 73 65 2c 20 74 68 65 20 6e 65 78 74 20 53 45 4c  se, the next SEL
22df0 45 43 54 20 74 6f 20 74 68 65 20 72 69 67 68 74  ECT to the right
22e00 20 69 73 20 74 72 69 65 64 2c 20 61 6e 64 20 73   is tried, and s
22e10 6f 20 6f 6e 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d  o on.)^.^If no m
22e20 61 74 63 68 69 6e 67 20 65 78 70 72 65 73 73 69  atching expressi
22e30 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20  on can be found 
22e40 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  in the result co
22e50 6c 75 6d 6e 73 20 6f 66 20 61 6e 79 0a 63 6f 6e  lumns of any.con
22e60 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43 54 2c  stituent SELECT,
22e70 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 2e   it is an error.
22e80 20 5e 45 61 63 68 20 74 65 72 6d 20 6f 66 20 74   ^Each term of t
22e90 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
22ea0 73 65 20 69 73 0a 70 72 6f 63 65 73 73 65 64 20  se is.processed 
22eb0 73 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6d  separately and m
22ec0 61 79 20 62 65 20 6d 61 74 63 68 65 64 20 61 67  ay be matched ag
22ed0 61 69 6e 73 74 20 72 65 73 75 6c 74 20 63 6f 6c  ainst result col
22ee0 75 6d 6e 73 20 66 72 6f 6d 20 64 69 66 66 65 72  umns from differ
22ef0 65 6e 74 0a 53 45 4c 45 43 54 20 73 74 61 74 65  ent.SELECT state
22f00 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 6d  ments in the com
22f10 70 6f 75 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  pound.</p>..<p>T
22f20 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
22f30 69 73 20 75 73 65 64 20 74 6f 20 70 6c 61 63 65  is used to place
22f40 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
22f50 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
22f60 20 72 6f 77 73 0a 72 65 74 75 72 6e 65 64 20 62   rows.returned b
22f70 79 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  y a SELECT state
22f80 6d 65 6e 74 2e 20 5e 41 6e 79 20 73 63 61 6c 61  ment. ^Any scala
22f90 72 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  r expression may
22fa0 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
22fb0 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73  .LIMIT clause, s
22fc0 6f 20 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61  o long as it eva
22fd0 6c 75 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74  luates to an int
22fe0 65 67 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20  eger or a value 
22ff0 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73  that can be.loss
23000 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64  lessly converted
23010 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   to an integer. 
23020 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69  ^If the expressi
23030 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
23040 61 20 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72  a NULL .value or
23050 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65   any other value
23060 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
23070 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
23080 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
23090 65 72 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20  er, an.error is 
230a0 72 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68  returned. ^If th
230b0 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
230c0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
230d0 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
230e0 2c 0a 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  ,.then there is 
230f0 6e 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  no upper bound o
23100 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
23110 72 6f 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  rows returned. ^
23120 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53  Otherwise, the.S
23130 45 4c 45 43 54 20 72 65 74 75 72 6e 73 20 74 68  ELECT returns th
23140 65 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f  e first N rows o
23150 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  f its result set
23160 20 6f 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69   only, where N i
23170 73 20 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74  s the value.that
23180 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
23190 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
231a0 74 6f 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20  to. ^Or, if the 
231b0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
231c0 20 77 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65   would.return le
231d0 73 73 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77  ss than N rows w
231e0 69 74 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63  ithout a LIMIT c
231f0 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
23200 65 6e 74 69 72 65 20 72 65 73 75 6c 74 20 73 65  entire result se
23210 74 20 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a  t is.returned. .
23220 0a 3c 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73  .<p>^The express
23230 69 6f 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20  ion attached to 
23240 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46  the optional OFF
23250 53 45 54 20 63 6c 61 75 73 65 20 74 68 61 74 20  SET clause that 
23260 6d 61 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d  may follow a.LIM
23270 49 54 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61  IT clause must a
23280 6c 73 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20  lso evaluate to 
23290 61 6e 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61  an integer, or a
232a0 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20   value that can 
232b0 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be.losslessly co
232c0 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
232d0 74 65 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78  teger. ^If an ex
232e0 70 72 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20  pression has an 
232f0 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74  OFFSET clause,.t
23300 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20  hen the first M 
23310 72 6f 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64  rows are omitted
23320 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74   from the result
23330 20 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79   set returned by
23340 20 74 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74   the SELECT.stat
23350 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65  ement and the ne
23360 78 74 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65  xt N rows are re
23370 74 75 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20  turned, where M 
23380 61 6e 64 20 4e 20 61 72 65 20 74 68 65 20 76 61  and N are the va
23390 6c 75 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46  lues that.the OF
233a0 46 53 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63  FSET and LIMIT c
233b0 6c 61 75 73 65 73 20 65 76 61 6c 75 61 74 65 20  lauses evaluate 
233c0 74 6f 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  to, respectively
233d0 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45  . ^Or, if the SE
233e0 4c 45 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72  LECT.would retur
233f0 6e 20 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20  n less than M+N 
23400 72 6f 77 73 20 69 66 20 69 74 20 64 69 64 20 6e  rows if it did n
23410 6f 74 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20  ot have a LIMIT 
23420 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65  clause, then the
23430 0a 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72  .first M rows ar
23440 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68  e skipped and th
23450 65 20 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73  e remaining rows
23460 20 28 69 66 20 61 6e 79 29 20 61 72 65 20 72 65   (if any) are re
23470 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a  turned. ^If the.
23480 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 76  OFFSET clause ev
23490 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67  aluates to a neg
234a0 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65  ative value, the
234b0 20 72 65 73 75 6c 74 73 20 61 72 65 20 74 68 65   results are the
234c0 20 73 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68   same as if it.h
234d0 61 64 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20  ad evaluated to 
234e0 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65  zero...<p>^Inste
234f0 61 64 20 6f 66 20 61 20 73 65 70 61 72 61 74 65  ad of a separate
23500 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
23510 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
23520 20 6d 61 79 20 73 70 65 63 69 66 79 20 74 77 6f   may specify two
23530 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69  .scalar expressi
23540 6f 6e 73 20 73 65 70 61 72 61 74 65 64 20 62 79  ons separated by
23550 20 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68   a comma. ^In th
23560 69 73 20 63 61 73 65 2c 20 74 68 65 20 66 69 72  is case, the fir
23570 73 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73  st expression.is
23580 20 75 73 65 64 20 61 73 20 74 68 65 20 4f 46 46   used as the OFF
23590 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61  SET expression a
235a0 6e 64 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73  nd the second as
235b0 20 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65   the LIMIT expre
235c0 73 73 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63  ssion..This is c
235d0 6f 75 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65  ounter-intuitive
235e0 2c 20 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20  , as when using 
235f0 74 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73  the OFFSET claus
23600 65 20 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a  e the second of.
23610 74 68 65 20 74 77 6f 20 65 78 70 72 65 73 73 69  the two expressi
23620 6f 6e 73 20 69 73 20 74 68 65 20 4f 46 46 53 45  ons is the OFFSE
23630 54 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20  T and the first 
23640 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 69 73 20  the LIMIT. This 
23650 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d  is intentional.-
23660 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f   it maximizes co
23670 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
23680 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62   other SQL datab
23690 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 0a 3c 74  ase systems...<t
236a0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
236b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
236c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
236d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
236e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
236f0 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54  ##.Section UPDAT
23700 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54 45  E update {UPDATE
23710 20 2a 55 50 44 41 54 45 73 7d 0a 0a 42 75 62 62   *UPDATEs}..Bubb
23720 6c 65 44 69 61 67 72 61 6d 20 75 70 64 61 74 65  leDiagram update
23730 2d 73 74 6d 74 20 31 0a 42 75 62 62 6c 65 44 69  -stmt 1.BubbleDi
23740 61 67 72 61 6d 20 71 75 61 6c 69 66 69 65 64 2d  agram qualified-
23750 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f 74 63 6c  table-name.</tcl
23760 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41 54 45  >..<p>^An UPDATE
23770 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
23780 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 61 20 73  ed to modify a s
23790 75 62 73 65 74 20 6f 66 20 74 68 65 20 76 61 6c  ubset of the val
237a0 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20 0a 7a  ues stored in .z
237b0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  ero or more rows
237c0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
237d0 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65   table identifie
237e0 64 20 62 79 20 74 68 65 20 0a 3c 69 3e 71 75 61  d by the .<i>qua
237f0 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
23800 65 3c 2f 69 3e 20 73 70 65 63 69 66 69 65 64 20  e</i> specified 
23810 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 55  as part of the U
23820 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
23830 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44  ..<p>^If the UPD
23840 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ATE statement do
23850 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48  es not have a WH
23860 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20  ERE clause, all 
23870 72 6f 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c  rows in the.tabl
23880 65 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62  e are modified b
23890 79 20 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f  y the UPDATE. ^O
238a0 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 55 50  therwise, the UP
238b0 44 41 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c  DATE affects onl
238c0 79 20 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72  y those.rows for
238d0 20 77 68 69 63 68 20 74 68 65 20 72 65 73 75 6c   which the resul
238e0 74 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20  t of evaluating 
238f0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
23900 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 61   expression as a
23910 20 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65   .[boolean expre
23920 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e 20 65 78  ssion|boolean ex
23930 70 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65  pression is true
23940 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74 20 61 6e  ]. ^It is not an
23950 20 65 72 72 6f 72 20 69 66 20 74 68 65 0a 57 48   error if the.WH
23960 45 52 45 20 63 6c 61 75 73 65 20 64 6f 65 73 20  ERE clause does 
23970 6e 6f 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20  not evaluate to 
23980 74 72 75 65 20 66 6f 72 20 61 6e 79 20 72 6f 77  true for any row
23990 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 2d 20   in the table - 
239a0 74 68 69 73 20 6a 75 73 74 0a 6d 65 61 6e 73 20  this just.means 
239b0 74 68 61 74 20 74 68 65 20 55 50 44 41 54 45 20  that the UPDATE 
239c0 73 74 61 74 65 6d 65 6e 74 20 61 66 66 65 63 74  statement affect
239d0 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a 0a 3c 70  s zero rows...<p
239e0 3e 54 68 65 20 6d 6f 64 69 66 69 63 61 74 69 6f  >The modificatio
239f0 6e 73 20 6d 61 64 65 20 74 6f 20 65 61 63 68 20  ns made to each 
23a00 72 6f 77 20 61 66 66 65 63 74 65 64 20 62 79 20  row affected by 
23a10 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
23a20 65 6e 74 20 61 72 65 0a 64 65 74 65 72 6d 69 6e  ent are.determin
23a30 65 64 20 62 79 20 74 68 65 20 6c 69 73 74 20 6f  ed by the list o
23a40 66 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 66 6f  f assignments fo
23a50 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53 45 54 20  llowing the SET 
23a60 6b 65 79 77 6f 72 64 2e 20 45 61 63 68 0a 61 73  keyword. Each.as
23a70 73 69 67 6e 6d 65 6e 74 20 73 70 65 63 69 66 69  signment specifi
23a80 65 73 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  es a column name
23a90 20 74 6f 20 74 68 65 20 6c 65 66 74 20 6f 66 20   to the left of 
23aa0 74 68 65 20 65 71 75 61 6c 73 20 73 69 67 6e 20  the equals sign 
23ab0 61 6e 64 20 61 0a 73 63 61 6c 61 72 20 65 78 70  and a.scalar exp
23ac0 72 65 73 73 69 6f 6e 20 74 6f 20 74 68 65 20 72  ression to the r
23ad0 69 67 68 74 2e 20 5e 46 6f 72 20 65 61 63 68 20  ight. ^For each 
23ae0 61 66 66 65 63 74 65 64 20 72 6f 77 2c 20 74 68  affected row, th
23af0 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 0a  e named columns.
23b00 61 72 65 20 73 65 74 20 74 6f 20 74 68 65 20 76  are set to the v
23b10 61 6c 75 65 73 20 66 6f 75 6e 64 20 62 79 20 65  alues found by e
23b20 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 63 6f  valuating the co
23b30 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 63 61 6c  rresponding scal
23b40 61 72 20 0a 65 78 70 72 65 73 73 69 6f 6e 73 2e  ar .expressions.
23b50 20 5e 49 66 20 61 20 73 69 6e 67 6c 65 20 63 6f   ^If a single co
23b60 6c 75 6d 6e 2d 6e 61 6d 65 20 61 70 70 65 61 72  lumn-name appear
23b70 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  s more than once
23b80 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0a   in the list of.
23b90 61 73 73 69 67 6e 6d 65 6e 74 20 65 78 70 72 65  assignment expre
23ba0 73 73 69 6f 6e 73 2c 20 61 6c 6c 20 62 75 74 20  ssions, all but 
23bb0 74 68 65 20 72 69 67 68 74 6d 6f 73 74 20 6f 63  the rightmost oc
23bc0 63 75 72 72 65 6e 63 65 20 69 73 20 69 67 6e 6f  currence is igno
23bd0 72 65 64 2e 20 5e 43 6f 6c 75 6d 6e 73 0a 74 68  red. ^Columns.th
23be0 61 74 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72  at do not appear
23bf0 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
23c00 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20  assignments are 
23c10 6c 65 66 74 20 75 6e 6d 6f 64 69 66 69 65 64 2e  left unmodified.
23c20 20 5e 54 68 65 20 73 63 61 6c 61 72 0a 65 78 70   ^The scalar.exp
23c30 72 65 73 73 69 6f 6e 73 20 6d 61 79 20 72 65 66  ressions may ref
23c40 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66  er to columns of
23c50 20 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 75   the row being u
23c60 70 64 61 74 65 64 2e 20 5e 49 6e 20 74 68 69 73  pdated. ^In this
23c70 20 63 61 73 65 20 61 6c 6c 0a 73 63 61 6c 61 72   case all.scalar
23c80 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
23c90 20 65 76 61 6c 75 61 74 65 64 20 62 65 66 6f 72   evaluated befor
23ca0 65 20 61 6e 79 20 61 73 73 69 67 6e 6d 65 6e 74  e any assignment
23cb0 73 20 61 72 65 20 6d 61 64 65 2e 0a 0a 3c 70 3e  s are made...<p>
23cc0 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 6f  ^The optional co
23cd0 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 61 6c  nflict-clause al
23ce0 6c 6f 77 73 20 74 68 65 20 75 73 65 72 20 74 6f  lows the user to
23cf0 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73 70 65 63   nominate a spec
23d00 69 66 69 63 0a 63 6f 6e 73 74 72 61 69 6e 74 20  ific.constraint 
23d10 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
23d20 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  ion algorithm to
23d30 20 75 73 65 20 64 75 72 69 6e 67 20 74 68 69 73   use during this
23d40 20 6f 6e 65 20 55 50 44 41 54 45 20 63 6f 6d 6d   one UPDATE comm
23d50 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f 20 74 68  and..Refer to th
23d60 65 20 73 65 63 74 69 6f 6e 20 65 6e 74 69 74 6c  e section entitl
23d70 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d  ed [ON CONFLICT]
23d80 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
23d90 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 3c 68  information...<h
23da0 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  3>Restrictions o
23db0 6e 20 55 50 44 41 54 45 20 53 74 61 74 65 6d 65  n UPDATE Stateme
23dc0 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54  nts Within CREAT
23dd0 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a  E TRIGGER</h3>..
23de0 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
23df0 20 61 64 64 69 74 69 6f 6e 61 6c 20 73 79 6e 74   additional synt
23e00 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ax restrictions 
23e10 61 70 70 6c 79 20 74 6f 20 55 50 44 41 54 45 20  apply to UPDATE 
23e20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a  statements that.
23e30 6f 63 63 75 72 20 77 69 74 68 69 6e 20 74 68 65  occur within the
23e40 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45 41   body of a [CREA
23e50 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
23e60 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c 3e 0a 20  ement.  ..<ul>. 
23e70 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 69 3e   <li><p>^The <i>
23e80 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 73  table-name</i> s
23e90 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
23ea0 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20 73 74   of an UPDATE st
23eb0 61 74 65 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20  atement within. 
23ec0 20 20 20 20 20 61 20 74 72 69 67 67 65 72 20 62       a trigger b
23ed0 6f 64 79 20 6d 75 73 74 20 62 65 20 75 6e 71 75  ody must be unqu
23ee0 61 6c 69 66 69 65 64 2e 20 5e 28 49 6e 20 6f 74  alified. ^(In ot
23ef0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 20  her words, the. 
23f00 20 20 20 20 20 3c 69 3e 64 61 74 61 62 61 73 65       <i>database
23f10 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62  -name</i><b>.</b
23f20 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  > prefix on the 
23f30 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68  table name of th
23f40 65 20 55 50 44 41 54 45 20 69 73 0a 20 20 20 20  e UPDATE is.    
23f50 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 77 69    not allowed wi
23f60 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 29 5e  thin triggers.)^
23f70 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74 61 62   ^Unless the tab
23f80 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  le to which the 
23f90 74 72 69 67 67 65 72 0a 20 20 20 20 20 20 69 73  trigger.      is
23fa0 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
23fb0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
23fc0 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  e, the table bei
23fd0 6e 67 20 75 70 64 61 74 65 64 20 62 79 20 74 68  ng updated by th
23fe0 65 0a 20 20 20 20 20 20 74 72 69 67 67 65 72 20  e.      trigger 
23ff0 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72 65 73  program must res
24000 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ide in the same 
24010 64 61 74 61 62 61 73 65 20 61 73 20 69 74 2e 20  database as it. 
24020 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20  ^If the table.  
24030 20 20 20 20 74 6f 20 77 68 69 63 68 20 74 68 65      to which the
24040 20 74 72 69 67 67 65 72 20 69 73 20 61 74 74 61   trigger is atta
24050 63 68 65 64 20 69 73 20 69 6e 20 74 68 65 20 54  ched is in the T
24060 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20 74 68  EMP database, th
24070 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75 6e 71  en the.      unq
24080 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66  ualified name of
24090 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
240a0 20 75 70 64 61 74 65 64 20 69 73 20 72 65 73 6f   updated is reso
240b0 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  lved in the same
240c0 20 77 61 79 0a 20 20 20 20 20 20 61 73 20 69 74   way.      as it
240d0 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65   is for a top-le
240e0 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62  vel statement (b
240f0 79 20 73 65 61 72 63 68 69 6e 67 20 66 69 72 73  y searching firs
24100 74 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  t the TEMP datab
24110 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65 6e 20  ase,.      then 
24120 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
24130 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74 68 65  e, then any othe
24140 72 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 74  r databases in t
24150 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 77 65  he order they we
24160 72 65 0a 20 20 20 20 20 20 61 74 74 61 63 68 65  re.      attache
24170 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  d)...  <li><p>^T
24180 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
24190 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
241a0 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  auses are not al
241b0 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54 45 0a  lowed on UPDATE.
241c0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
241d0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
241e0 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
241f0 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f  ^The LIMIT and O
24200 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 73 20  RDER BY clauses 
24210 66 6f 72 20 55 50 44 41 54 45 20 61 72 65 20 75  for UPDATE are u
24220 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74 68 69  nsupported withi
24230 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65 72 73  n.      triggers
24240 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
24250 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  the compilation 
24260 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 20  options used to 
24270 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a 3c 2f  build SQLite..</
24280 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61  ul>..<h3>Optiona
24290 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45  l LIMIT and ORDE
242a0 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f 68 33  R BY Clauses</h3
242b0 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74  >..<p>^(If SQLit
242c0 65 20 69 73 20 62 75 69 6c 74 20 77 69 74 68 20  e is built with 
242d0 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
242e0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
242f0 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c 65 2d  _LIMIT].compile-
24300 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 65 6e  time option then
24310 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74   the syntax of t
24320 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
24330 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65 64 0a  ent is extended.
24340 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  with optional OR
24350 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
24360 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20 66 6f   clauses)^ as fo
24370 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  llows:</p>..<tcl
24380 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 75  >BubbleDiagram u
24390 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74  pdate-stmt-limit
243a0 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66  ed</tcl>..<p>^If
243b0 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
243c0 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54  ment has a LIMIT
243d0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78   clause, the max
243e0 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72  imum number of r
243f0 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65  ows that.will be
24400 20 75 70 64 61 74 65 64 20 69 73 20 66 6f 75 6e   updated is foun
24410 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
24420 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67  the accompanying
24430 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
24440 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e  casting.it to an
24450 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
24460 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  ^A negative valu
24470 65 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  e is interpreted
24480 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22 2e 0a   as "no limit"..
24490 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49 4d 49  .<p>^If the LIMI
244a0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
244b0 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d 6e 65  luates to non-ne
244c0 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c 69 3e  gative value <i>
244d0 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a 55 50  N</i> and the.UP
244e0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  DATE statement h
244f0 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
24500 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
24510 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
24520 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a 74 68  be updated in.th
24530 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68 65  e absence of the
24540 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 72   LIMIT clause ar
24550 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64 69  e sorted accordi
24560 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20  ng to the ORDER 
24570 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72 73 74  BY and the.first
24580 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61 74 65   <i>N</i> update
24590 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50 44 41  d. ^(If the UPDA
245a0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  TE statement als
245b0 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  o has an OFFSET 
245c0 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69 74 20  clause,.then it 
245d0 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61  is similarly eva
245e0 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20  luated and cast 
245f0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
24600 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46 46 53  lue. If the OFFS
24610 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20 65 76  ET.expression ev
24620 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 6f 6e  aluates to a non
24630 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20  -negative value 
24640 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e 20 74  <i>M</i>, then t
24650 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69  he first <i>M</i
24660 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69 70 70  >.rows are skipp
24670 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f  ed and the follo
24680 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f  wing <i>N</i> ro
24690 77 73 20 75 70 64 61 74 65 64 20 69 6e 73 74 65  ws updated inste
246a0 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ad.)^..<p>^If th
246b0 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
246c0 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45 52 20  nt has no ORDER 
246d0 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20  BY clause, then 
246e0 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a 77 6f  all rows that.wo
246f0 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20 69  uld be updated i
24700 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66  n the absence of
24710 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73   the LIMIT claus
24720 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65 64 20  e are assembled 
24730 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72 79 20  in an.arbitrary 
24740 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61 70 70  order before app
24750 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lying the LIMIT 
24760 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61 75 73  and OFFSET claus
24770 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  es to determine 
24780 0a 77 68 69 63 68 20 61 72 65 20 61 63 74 75 61  .which are actua
24790 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a 3c 70  lly updated...<p
247a0 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42 59 20  >^(The ORDER BY 
247b0 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55 50 44  clause on an UPD
247c0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ATE statement is
247d0 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65   used only to de
247e0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f  termine which.ro
247f0 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e 20 74  ws fall within t
24800 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72  he LIMIT. The or
24810 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
24820 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 69  s are modified i
24830 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e 64 20  s arbitrary.and 
24840 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e 63 65  is not influence
24850 64 20 62 79 20 74 68 65 20 4f 52 44 45 52 20 42  d by the ORDER B
24860 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 74 63  Y clause.)^..<tc
24870 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
24880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
248a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
248b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
248c0 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55 55 4d  #.Section VACUUM
248d0 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d 0a 0a   vacuum VACUUM..
248e0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61  BubbleDiagram va
248f0 63 75 75 6d 2d 73 74 6d 74 20 31 0a 3c 2f 74 63  cuum-stmt 1.</tc
24900 6c 3e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41  l>..<p>.  The VA
24910 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62  CUUM command reb
24920 75 69 6c 64 73 20 74 68 65 20 65 6e 74 69 72 65  uilds the entire
24930 20 64 61 74 61 62 61 73 65 2e 20 54 68 65 72 65   database. There
24940 20 61 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20   are several .  
24950 72 65 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69  reasons an appli
24960 63 61 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20  cation might do 
24970 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  this:..<ul>.  <l
24980 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53  i> <p> ^Unless S
24990 51 4c 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67  QLite is running
249a0 20 69 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d   in "auto_vacuum
249b0 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65  =FULL" mode, whe
249c0 6e 20 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61  n a large.     a
249d0 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73  mount of data is
249e0 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68   deleted from th
249f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
24a00 69 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64  it leaves behind
24a10 20 65 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63   empty.     spac
24a20 65 2c 20 6f 72 20 22 66 72 65 65 22 20 64 61 74  e, or "free" dat
24a30 61 62 61 73 65 20 70 61 67 65 73 2e 20 54 68 69  abase pages. Thi
24a40 73 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  s means the data
24a50 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a  base file might.
24a60 20 20 20 20 20 62 65 20 6c 61 72 67 65 72 20 74       be larger t
24a70 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63  han strictly nec
24a80 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67  essary. ^Running
24a90 20 56 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69   VACUUM to rebui
24aa0 6c 64 20 74 68 65 20 0a 20 20 20 20 20 64 61 74  ld the .     dat
24ab0 61 62 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74  abase reclaims t
24ac0 68 69 73 20 73 70 61 63 65 20 61 6e 64 20 72 65  his space and re
24ad0 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f  duces the size o
24ae0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
24af0 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ile...  <li> <p>
24b00 20 5e 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72   ^Frequent inser
24b10 74 73 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64  ts, updates, and
24b20 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75   deletes can cau
24b30 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  se the database 
24b40 66 69 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63  file.     to bec
24b50 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d  ome fragmented -
24b60 20 77 68 65 72 65 20 64 61 74 61 20 66 6f 72 20   where data for 
24b70 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f  a single table o
24b80 72 20 69 6e 64 65 78 20 69 73 20 73 63 61 74 74  r index is scatt
24b90 65 72 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e  ered .     aroun
24ba0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
24bb0 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41  ile. ^Running VA
24bc0 43 55 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61  CUUM ensures tha
24bd0 74 20 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64  t each table and
24be0 0a 20 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c  .     index is l
24bf0 61 72 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f  argely stored co
24c00 6e 74 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69  ntiguously withi
24c10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
24c20 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20  ile. ^In some.  
24c30 20 20 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d     cases, VACUUM
24c40 20 6d 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65   may also reduce
24c50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
24c60 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20  artially filled 
24c70 70 61 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68  pages in.     th
24c80 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 64 75  e database, redu
24c90 63 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66  cing the size of
24ca0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
24cb0 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c  le further...  <
24cc0 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c  li> <p> ^Normall
24cd0 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  y, the database 
24ce0 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20  [page_size] and 
24cf0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
24d00 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
24d10 20 73 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f   supports [auto_
24d20 76 61 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20  vacuum] must be 
24d30 63 6f 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72  configured befor
24d40 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
24d50 69 6c 65 20 69 73 0a 20 20 20 20 20 61 63 74 75  ile is.     actu
24d60 61 6c 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48  ally created. ^H
24d70 6f 77 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74  owever, when not
24d80 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64   in [write-ahead
24d90 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20   log] mode, the 
24da0 0a 20 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65  .     [page_size
24db0 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76  ] and/or [auto_v
24dc0 61 63 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65  acuum] propertie
24dd0 73 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67  s of an existing
24de0 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 62 65   database may be
24df0 0a 20 20 20 20 20 63 68 61 6e 67 65 64 20 62 79  .     changed by
24e00 20 75 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65   using the [page
24e10 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67  _size pragma|pag
24e20 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20  e_size]  and/or 
24e30 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75  .     [auto_vacu
24e40 75 6d 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76  um|pragma auto_v
24e50 61 63 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61  acuum] pragmas a
24e60 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74  nd then immediat
24e70 65 6c 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20  ely VACUUMing.  
24e80 20 20 20 74 68 65 20 64 61 74 61 62 61 73 65 2e     the database.
24e90 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65   ^When in [write
24ea0 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65  -ahead log] mode
24eb0 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f  , only the [auto
24ec0 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75  _vacuum].     su
24ed0 70 70 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63  pport property c
24ee0 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 75 73  an be changed us
24ef0 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c  ing VACUUM..</ul
24f00 3e 0a 0a 3c 70 3e 5e 28 56 41 43 55 55 4d 20 6f  >..<p>^(VACUUM o
24f10 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 68 65  nly works on the
24f20 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
24f30 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
24f40 6c 65 20 74 6f 20 56 41 43 55 55 4d 20 61 6e 0a  le to VACUUM an.
24f50 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
24f60 65 20 66 69 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54  e file.)^..<p>^T
24f70 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
24f80 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69  d works by copyi
24f90 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  ng the contents 
24fa0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
24fb0 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79  into.a temporary
24fc0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
24fd0 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74  nd then overwrit
24fe0 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
24ff0 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65   with the .conte
25000 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  nts of the tempo
25010 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e  rary file. ^When
25020 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65   overwriting the
25030 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c   original, a rol
25040 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72  lback.journal or
25050 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
25060 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75  g] WAL file is u
25070 73 65 64 20 6a 75 73 74 20 61 73 20 69 74 20 77  sed just as it w
25080 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a  ould be for any.
25090 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20 74  other database t
250a0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69  ransaction. ^Thi
250b0 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65  s means that whe
250c0 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61  n VACUUMing a da
250d0 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68  tabase, .as much
250e0 20 61 73 20 74 77 69 63 65 20 74 68 65 20 73 69   as twice the si
250f0 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  ze of the origin
25100 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  al database file
25110 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
25120 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e  free.disk space.
25130 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d  ..<p>^The VACUUM
25140 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63 68 61   command may cha
25150 6e 67 65 20 74 68 65 20 5b 52 4f 57 49 44 20 7c  nge the [ROWID |
25160 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e 74 72   ROWIDs] of entr
25170 69 65 73 20 69 6e 20 61 6e 79 0a 74 61 62 6c 65  ies in any.table
25180 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 68 61  s that do not ha
25190 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 5b  ve an explicit [
251a0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
251b0 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  KEY]..</p>..<p>^
251c0 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61  A VACUUM will fa
251d0 69 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 61  il if there is a
251e0 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  n open transacti
251f0 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  on, or if there 
25200 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72 65 20  are one or.more 
25210 61 63 74 69 76 65 20 53 51 4c 20 73 74 61 74 65  active SQL state
25220 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20 69 73  ments when it is
25230 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 73 20 6f   run...<p>^(As o
25240 66 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  f SQLite version
25250 20 33 2e 31 2c 20 61 6e 20 61 6c 74 65 72 6e 61   3.1, an alterna
25260 74 69 76 65 20 74 6f 20 75 73 69 6e 67 20 74 68  tive to using th
25270 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64  e VACUUM command
25280 20 74 6f 0a 72 65 63 6c 61 69 6d 20 73 70 61 63   to.reclaim spac
25290 65 20 61 66 74 65 72 20 64 61 74 61 20 68 61 73  e after data has
252a0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 20 69 73   been deleted is
252b0 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64   auto-vacuum mod
252c0 65 2c 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  e, enabled using
252d0 0a 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75  .the [auto_vacuu
252e0 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20 5e 57 68  m] pragma.)^ ^Wh
252f0 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  en [auto_vacuum]
25300 20 69 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20   is enabled for 
25310 61 20 64 61 74 61 62 61 73 65 0a 66 72 65 65 20  a database.free 
25320 70 61 67 65 73 20 6d 61 79 20 62 65 20 72 65 63  pages may be rec
25330 6c 61 69 6d 65 64 20 61 66 74 65 72 20 64 65 6c  laimed after del
25340 65 74 69 6e 67 20 64 61 74 61 2c 20 63 61 75 73  eting data, caus
25350 69 6e 67 20 74 68 65 20 66 69 6c 65 20 74 6f 20  ing the file to 
25360 73 68 72 69 6e 6b 2c 0a 77 69 74 68 6f 75 74 20  shrink,.without 
25370 72 65 62 75 69 6c 64 69 6e 67 20 74 68 65 20 65  rebuilding the e
25380 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 75  ntire database u
25390 73 69 6e 67 20 56 41 43 55 55 4d 2e 20 20 48 6f  sing VACUUM.  Ho
253a0 77 65 76 65 72 2c 20 75 73 69 6e 67 0a 5b 61 75  wever, using.[au
253b0 74 6f 5f 76 61 63 75 75 6d 5d 20 63 61 6e 20 6c  to_vacuum] can l
253c0 65 61 64 20 74 6f 20 65 78 74 72 61 20 64 61 74  ead to extra dat
253d0 61 62 61 73 65 20 66 69 6c 65 20 66 72 61 67 6d  abase file fragm
253e0 65 6e 74 61 74 69 6f 6e 2e 20 20 41 6e 64 20 5b  entation.  And [
253f0 61 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65  auto_vacuum].doe
25400 73 20 6e 6f 74 20 63 6f 6d 70 61 63 74 20 70 61  s not compact pa
25410 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70  rtially filled p
25420 61 67 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ages of the data
25430 62 61 73 65 20 61 73 20 56 41 43 55 55 4d 20 64  base as VACUUM d
25440 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63  oes...</p>...<tc
25450 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
25460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
254a0 23 0a 53 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58  #.Section {INDEX
254b0 45 44 20 42 59 7d 20 69 6e 64 65 78 65 64 62 79  ED BY} indexedby
254c0 20 7b 7b 49 4e 44 45 58 45 44 20 42 59 7d 20 7b   {{INDEXED BY} {
254d0 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c  NOT INDEXED}}..<
254e0 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e  /tcl>.<p>^The IN
254f0 44 45 58 45 44 20 42 59 20 70 68 72 61 73 65 20  DEXED BY phrase 
25500 69 73 20 61 6e 20 53 51 4c 20 65 78 74 65 6e 73  is an SQL extens
25510 69 6f 6e 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 69  ion found only i
25520 6e 20 53 51 4c 69 74 65 20 77 68 69 63 68 20 63  n SQLite which c
25530 61 6e 0a 62 65 20 75 73 65 64 20 74 6f 20 76 65  an.be used to ve
25540 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
25550 72 72 65 63 74 20 69 6e 64 69 63 65 73 20 61 72  rrect indices ar
25560 65 20 62 65 69 6e 67 20 75 73 65 64 20 6f 6e 20  e being used on 
25570 61 20 5b 44 45 4c 45 54 45 5d 2c 0a 5b 53 45 4c  a [DELETE],.[SEL
25580 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45  ECT], or [UPDATE
25590 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68  ] statement..^Th
255a0 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72  e INDEXED BY phr
255b0 61 73 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  ase always follo
255c0 77 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ws the name of a
255d0 20 74 61 62 6c 65 20 74 68 61 74 20 53 51 4c 69   table that SQLi
255e0 74 65 20 77 69 6c 6c 0a 62 65 20 72 65 61 64 69  te will.be readi
255f0 6e 67 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44  ng.  The INDEXED
25600 20 42 59 20 70 68 72 61 73 65 20 63 61 6e 20 62   BY phrase can b
25610 65 20 73 65 65 6e 20 69 6e 20 74 68 65 20 66 6f  e seen in the fo
25620 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 0a 64  llowing syntax.d
25630 69 61 67 72 61 6d 73 3a 3c 2f 70 3e 0a 0a 3c 74  iagrams:</p>..<t
25640 63 6c 3e 0a 42 75 62 62 6c 65 44 69 61 67 72 61  cl>.BubbleDiagra
25650 6d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  m qualified-tabl
25660 65 2d 6e 61 6d 65 0a 42 75 62 62 6c 65 44 69 61  e-name.BubbleDia
25670 67 72 61 6d 20 73 69 6e 67 6c 65 2d 73 6f 75 72  gram single-sour
25680 63 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  ce.</tcl>..<p>^T
25690 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20 69  he "INDEXED BY i
256a0 6e 64 65 78 2d 6e 61 6d 65 22 20 63 6c 61 75 73  ndex-name" claus
256b0 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61 74  e specifies that
256c0 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78   the named index
256d0 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e  .must be used in
256e0 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75   order to look u
256f0 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68 65 20  p values on the 
25700 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c 65 2e  preceding table.
25710 0a 5e 49 66 20 69 6e 64 65 78 2d 6e 61 6d 65 20  .^If index-name 
25720 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f  does not exist o
25730 72 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  r cannot be used
25740 20 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20   for the query, 
25750 74 68 65 6e 0a 74 68 65 20 70 72 65 70 61 72 61  then.the prepara
25760 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20  tion of the SQL 
25770 73 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e  statement fails.
25780 0a 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45  .^(The "NOT INDE
25790 58 45 44 22 20 63 6c 61 75 73 65 20 73 70 65 63  XED" clause spec
257a0 69 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e  ifies that no in
257b0 64 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65  dex shall be use
257c0 64 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67  d when.accessing
257d0 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
257e0 61 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  able, including 
257f0 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20  implied indices 
25800 63 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45  create by.UNIQUE
25810 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59   and PRIMARY KEY
25820 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48   constraints.  H
25830 6f 77 65 76 65 72 2c 20 74 68 65 20 49 4e 54 45  owever, the INTE
25840 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  GER PRIMARY KEY.
25850 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65  can still be use
25860 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 65 6e 74  d to look up ent
25870 72 69 65 73 20 65 76 65 6e 20 77 68 65 6e 20 22  ries even when "
25880 4e 4f 54 20 49 4e 44 45 58 45 44 22 20 69 73 20  NOT INDEXED" is 
25890 73 70 65 63 69 66 69 65 64 2e 29 5e 3c 2f 70 3e  specified.)^</p>
258a0 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c 20 64 61  ..<p>Some SQL da
258b0 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70  tabase engines p
258c0 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74 61 6e 64  rovide non-stand
258d0 61 72 64 20 22 68 69 6e 74 22 20 6d 65 63 68 61  ard "hint" mecha
258e0 6e 69 73 6d 73 20 77 68 69 63 68 0a 63 61 6e 20  nisms which.can 
258f0 62 65 20 75 73 65 64 20 74 6f 20 67 69 76 65 20  be used to give 
25900 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
25910 7a 65 72 20 63 6c 75 65 73 20 61 62 6f 75 74 20  zer clues about 
25920 77 68 61 74 20 69 6e 64 69 63 65 73 20 69 74 20  what indices it 
25930 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f 72 20 61  should.use for a
25940 20 70 61 72 74 69 63 75 6c 61 72 20 73 74 61 74   particular stat
25950 65 6d 65 6e 74 2e 20 20 54 68 65 20 49 4e 44 45  ement.  The INDE
25960 58 20 42 59 20 63 6c 61 75 73 65 20 6f 66 20 53  X BY clause of S
25970 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d 3e 6e 6f  QLite is .<em>no
25980 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74 69 6e 67  t</em> a hinting
25990 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 69   mechanism and i
259a0 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20  t should not be 
259b0 75 73 65 64 20 61 73 20 73 75 63 68 2e 0a 5e 54  used as such..^T
259c0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  he INDEXED BY cl
259d0 61 75 73 65 20 64 6f 65 73 20 6e 6f 74 20 67 69  ause does not gi
259e0 76 65 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ve the optimizer
259f0 20 68 69 6e 74 73 20 61 62 6f 75 74 20 77 68 69   hints about whi
25a00 63 68 20 69 6e 64 65 78 0a 74 6f 20 75 73 65 3b  ch index.to use;
25a10 20 69 74 20 67 69 76 65 73 20 74 68 65 20 6f 70   it gives the op
25a20 74 69 6d 69 7a 65 72 20 61 20 72 65 71 75 69 72  timizer a requir
25a30 65 6d 65 6e 74 20 6f 66 20 77 68 69 63 68 20 69  ement of which i
25a40 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a 5e 49 66  ndex to use..^If
25a50 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d   the query optim
25a60 69 7a 65 72 20 69 73 20 75 6e 61 62 6c 65 20 74  izer is unable t
25a70 6f 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20  o use the index 
25a80 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
25a90 0a 49 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65  .INDEX BY clause
25aa0 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79  , then the query
25ab0 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
25ac0 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c  an error.</p>..<
25ad0 70 3e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  p>The INDEXED BY
25ae0 20 63 6c 61 75 73 65 20 69 73 20 3c 65 6d 3e 6e   clause is <em>n
25af0 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e 64 65 64  ot</em> intended
25b00 20 66 6f 72 20 75 73 65 20 69 6e 20 74 75 6e 69   for use in tuni
25b10 6e 67 0a 74 68 65 20 70 65 72 66 6f 72 6d 61 6e  ng.the performan
25b20 63 65 20 6f 66 20 61 20 71 75 65 72 79 2e 20 20  ce of a query.  
25b30 54 68 65 20 69 6e 74 65 6e 74 20 6f 66 20 74 68  The intent of th
25b40 65 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  e INDEXED BY cla
25b50 75 73 65 20 69 73 0a 74 6f 20 72 61 69 73 65 20  use is.to raise 
25b60 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f 72  a run-time error
25b70 20 69 66 20 61 20 73 63 68 65 6d 61 20 63 68 61   if a schema cha
25b80 6e 67 65 2c 20 73 75 63 68 20 61 73 20 64 72 6f  nge, such as dro
25b90 70 70 69 6e 67 20 6f 72 0a 63 72 65 61 74 69 6e  pping or.creatin
25ba0 67 20 61 6e 20 69 6e 64 65 78 2c 20 63 61 75 73  g an index, caus
25bb0 65 73 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  es the query pla
25bc0 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d 73 65 6e  n for a time-sen
25bd0 73 69 74 69 76 65 20 71 75 65 72 79 0a 74 6f 20  sitive query.to 
25be0 63 68 61 6e 67 65 2e 20 20 54 68 65 20 49 4e 44  change.  The IND
25bf0 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
25c00 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 68 65  s designed to he
25c10 6c 70 20 64 65 74 65 63 74 0a 75 6e 64 65 73 69  lp detect.undesi
25c20 72 61 62 6c 65 20 71 75 65 72 79 20 70 6c 61 6e  rable query plan
25c30 20 63 68 61 6e 67 65 73 20 64 75 72 69 6e 67 20   changes during 
25c40 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 69  regression testi
25c50 6e 67 2e 0a 44 65 76 65 6c 6f 70 65 72 73 20 61  ng..Developers a
25c60 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f  re admonished to
25c70 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66   omit all use of
25c80 20 49 4e 44 45 58 45 44 20 42 59 20 64 75 72 69   INDEXED BY duri
25c90 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ng.application d
25ca0 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74  esign, implement
25cb0 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20  ation, testing, 
25cc0 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a  and tuning.  If.
25cd0 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 74 6f  INDEXED BY is to
25ce0 20 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c   be used at all,
25cf0 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e   it should be in
25d00 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
25d10 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65  ry.end of the de
25d20 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73  velopment proces
25d30 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20  s when "locking 
25d40 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c  down" a design.<
25d50 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73  /p>..<h3>See Als
25d60 6f 3a 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  o:</h3>..<p>The 
25d70 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  [sqlite3_stmt_st
25d80 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  atus()] C/C++ in
25d90 74 65 72 66 61 63 65 20 74 6f 67 65 74 68 65 72  terface together
25da0 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54   with the.[SQLIT
25db0 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c  E_STMTSTATUS_FUL
25dc0 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20  LSCAN_STEP] and 
25dd0 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
25de0 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63  US_SORT] verbs.c
25df0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  an be used to de
25e00 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65  tect at run-time
25e10 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61   when an SQL sta
25e20 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61  tement is not.ma
25e30 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65 20 75  king effective u
25e40 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20  se of indices.  
25e50 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e  Many application
25e60 73 20 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a  s may prefer to.
25e70 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33  use the [sqlite3
25e80 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20  _stmt_status()] 
25e90 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64 65 74  interface to det
25ea0 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65  ect index misuse
25eb0 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65  .rather than the
25ec0 20 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61   INDEXED BY phra
25ed0 73 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72  se described her
25ee0 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
25ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f30 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 41 20  ###########.# A 
25f40 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72 64 73  list of keywords
25f50 2e 20 20 41 20 61 73 74 65 72 69 73 6b 20 6f 63  .  A asterisk oc
25f60 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20 6b  curs after the k
25f70 65 79 77 6f 72 64 20 69 66 20 69 74 20 69 73 20  eyword if it is 
25f80 6f 6e 0a 23 20 74 68 65 20 66 61 6c 6c 62 61 63  on.# the fallbac
25f90 6b 20 6c 69 73 74 2e 0a 23 0a 73 65 74 20 6b 65  k list..#.set ke
25fa0 79 77 6f 72 64 5f 6c 69 73 74 20 5b 6c 73 6f 72  yword_list [lsor
25fb0 74 20 7b 0a 20 20 20 41 42 4f 52 54 0a 20 20 20  t {.   ABORT.   
25fc0 41 43 54 49 4f 4e 0a 20 20 20 41 44 44 0a 20 20  ACTION.   ADD.  
25fd0 20 41 46 54 45 52 0a 20 20 20 41 4c 4c 0a 20 20   AFTER.   ALL.  
25fe0 20 41 4c 54 45 52 0a 20 20 20 41 4e 41 4c 59 5a   ALTER.   ANALYZ
25ff0 45 0a 20 20 20 41 4e 44 0a 20 20 20 41 53 0a 20  E.   AND.   AS. 
26000 20 20 41 53 43 0a 20 20 20 41 54 54 41 43 48 0a    ASC.   ATTACH.
26010 20 20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54     AUTOINCREMENT
26020 0a 20 20 20 42 45 46 4f 52 45 0a 20 20 20 42 45  .   BEFORE.   BE
26030 47 49 4e 0a 20 20 20 42 45 54 57 45 45 4e 0a 20  GIN.   BETWEEN. 
26040 20 20 42 59 0a 20 20 20 43 41 53 43 41 44 45 0a    BY.   CASCADE.
26050 20 20 20 43 41 53 45 0a 20 20 20 43 41 53 54 0a     CASE.   CAST.
26060 20 20 20 43 48 45 43 4b 0a 20 20 20 43 4f 4c 4c     CHECK.   COLL
26070 41 54 45 0a 20 20 20 43 4f 4c 55 4d 4e 0a 20 20  ATE.   COLUMN.  
26080 20 43 4f 4d 4d 49 54 0a 20 20 20 43 4f 4e 46 4c   COMMIT.   CONFL
26090 49 43 54 0a 20 20 20 43 4f 4e 53 54 52 41 49 4e  ICT.   CONSTRAIN
260a0 54 0a 20 20 20 43 52 45 41 54 45 0a 20 20 20 43  T.   CREATE.   C
260b0 52 4f 53 53 0a 20 20 20 43 55 52 52 45 4e 54 5f  ROSS.   CURRENT_
260c0 44 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f  DATE.   CURRENT_
260d0 54 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f  TIME.   CURRENT_
260e0 54 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54  TIMESTAMP.   DAT
260f0 41 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54  ABASE.   DEFAULT
26100 0a 20 20 20 44 45 46 45 52 52 45 44 0a 20 20 20  .   DEFERRED.   
26110 44 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45  DEFERRABLE.   DE
26120 4c 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20  LETE.   DESC.   
26130 44 45 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e  DETACH.   DISTIN
26140 43 54 0a 20 20 20 44 52 4f 50 0a 20 20 20 45 4e  CT.   DROP.   EN
26150 44 0a 20 20 20 45 41 43 48 0a 20 20 20 45 4c 53  D.   EACH.   ELS
26160 45 0a 20 20 20 45 53 43 41 50 45 0a 20 20 20 45  E.   ESCAPE.   E
26170 58 43 45 50 54 0a 20 20 20 45 58 43 4c 55 53 49  XCEPT.   EXCLUSI
26180 56 45 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20  VE.   EXISTS.   
26190 45 58 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a  EXPLAIN.   FAIL.
261a0 20 20 20 46 4f 52 0a 20 20 20 46 4f 52 45 49 47     FOR.   FOREIG
261b0 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55 4c  N.   FROM.   FUL
261c0 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47 52 4f  L.   GLOB.   GRO
261d0 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20 20  UP.   HAVING.   
261e0 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20 20  IF.   IGNORE.   
261f0 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e 0a  IMMEDIATE.   IN.
26200 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44 45     INDEX.   INDE
26210 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c 59  XED.   INITIALLY
26220 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e 53  .   INNER.   INS
26230 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a 20  ERT.   INSTEAD. 
26240 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20 49    INTERSECT.   I
26250 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53 4e  NTO.   IS.   ISN
26260 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20 4b  ULL.   JOIN.   K
26270 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c 49  EY.   LEFT.   LI
26280 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20 4d  KE.   LIMIT.   M
26290 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c 0a  ATCH.   NATURAL.
262a0 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20 20     NO.   NOT.   
262b0 4e 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a  NOTNULL.   NULL.
262c0 20 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a     OF.   OFFSET.
262d0 20 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f     ON.   OR.   O
262e0 52 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20  RDER.   OUTER.  
262f0 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41 0a   PLAN.   PRAGMA.
26300 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55     PRIMARY.   QU
26310 45 52 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20  ERY.   RAISE.   
26320 52 45 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45  REFERENCES.   RE
26330 47 45 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a  GEXP.   REINDEX.
26340 20 20 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45     RELEASE.   RE
26350 4e 41 4d 45 0a 20 20 20 52 45 50 4c 41 43 45 0a  NAME.   REPLACE.
26360 20 20 20 52 45 53 54 52 49 43 54 0a 20 20 20 52     RESTRICT.   R
26370 49 47 48 54 0a 20 20 20 52 4f 4c 4c 42 41 43 4b  IGHT.   ROLLBACK
26380 0a 20 20 20 52 4f 57 0a 20 20 20 53 41 56 45 50  .   ROW.   SAVEP
26390 4f 49 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20  OINT.   SELECT. 
263a0 20 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20    SET.   TABLE. 
263b0 20 20 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52    TEMP.   TEMPOR
263c0 41 52 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54  ARY.   THEN.   T
263d0 4f 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e  O.   TRANSACTION
263e0 0a 20 20 20 54 52 49 47 47 45 52 0a 20 20 20 55  .   TRIGGER.   U
263f0 4e 49 4f 4e 0a 20 20 20 55 4e 49 51 55 45 0a 20  NION.   UNIQUE. 
26400 20 20 55 50 44 41 54 45 0a 20 20 20 55 53 49 4e    UPDATE.   USIN
26410 47 0a 20 20 20 56 41 43 55 55 4d 0a 20 20 20 56  G.   VACUUM.   V
26420 41 4c 55 45 53 0a 20 20 20 56 49 45 57 0a 20 20  ALUES.   VIEW.  
26430 20 56 49 52 54 55 41 4c 0a 20 20 20 57 48 45 4e   VIRTUAL.   WHEN
26440 0a 20 20 20 57 48 45 52 45 0a 7d 5d 0a 0a 68 64  .   WHERE.}]..hd
26450 5f 70 75 74 73 20 7b 3c 44 49 56 20 63 6c 61 73  _puts {<DIV clas
26460 73 3d 22 70 64 66 5f 73 65 63 74 69 6f 6e 22 3e  s="pdf_section">
26470 7d 0a 53 65 63 74 69 6f 6e 20 7b 53 51 4c 69 74  }.Section {SQLit
26480 65 20 4b 65 79 77 6f 72 64 73 7d 20 6b 65 79 77  e Keywords} keyw
26490 6f 72 64 73 20 7b 7b 2a 53 51 4c 20 6b 65 79 77  ords {{*SQL keyw
264a0 6f 72 64 7d 20 7b 53 51 4c 20 6b 65 79 77 6f 72  ord} {SQL keywor
264b0 64 73 7d 7d 0a 68 64 5f 70 75 74 73 20 7b 3c 2f  ds}}.hd_puts {</
264c0 44 49 56 3e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  DIV>}.</tcl>..<p
264d0 3e 54 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72  >The SQL standar
264e0 64 20 73 70 65 63 69 66 69 65 73 20 61 20 68 75  d specifies a hu
264f0 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79  ge number of key
26500 77 6f 72 64 73 20 77 68 69 63 68 20 6d 61 79 20  words which may 
26510 6e 6f 74 0a 62 65 20 75 73 65 64 20 61 73 20 74  not.be used as t
26520 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 61 62 6c  he names of tabl
26530 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 63 6f 6c  es, indices, col
26540 75 6d 6e 73 2c 20 64 61 74 61 62 61 73 65 73 2c  umns, databases,
26550 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0a 66 75   user-defined.fu
26560 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69  nctions, collati
26570 6f 6e 73 2c 20 76 69 72 74 75 61 6c 20 74 61 62  ons, virtual tab
26580 6c 65 20 6d 6f 64 75 6c 65 73 2c 20 6f 72 20 61  le modules, or a
26590 6e 79 20 6f 74 68 65 72 20 6e 61 6d 65 64 20 6f  ny other named o
265a0 62 6a 65 63 74 2e 0a 54 68 65 20 6c 69 73 74 20  bject..The list 
265b0 6f 66 20 6b 65 79 77 6f 72 64 73 20 69 73 20 73  of keywords is s
265c0 6f 20 6c 6f 6e 67 20 74 68 61 74 20 66 65 77 20  o long that few 
265d0 70 65 6f 70 6c 65 20 63 61 6e 20 72 65 6d 65 6d  people can remem
265e0 62 65 72 20 74 68 65 6d 20 61 6c 6c 2e 0a 46 6f  ber them all..Fo
265f0 72 20 6d 6f 73 74 20 53 51 4c 20 63 6f 64 65 2c  r most SQL code,
26600 20 79 6f 75 72 20 73 61 66 65 73 74 20 62 65 74   your safest bet
26610 20 69 73 20 74 6f 20 6e 65 76 65 72 20 75 73 65   is to never use
26620 20 61 6e 79 20 45 6e 67 6c 69 73 68 20 6c 61 6e   any English lan
26630 67 75 61 67 65 0a 77 6f 72 64 20 61 73 20 74 68  guage.word as th
26640 65 20 6e 61 6d 65 20 6f 66 20 61 20 75 73 65 72  e name of a user
26650 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 2e  -defined object.
26660 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20  </p>..<p>If you 
26670 77 61 6e 74 20 74 6f 20 75 73 65 20 61 20 6b 65  want to use a ke
26680 79 77 6f 72 64 20 61 73 20 61 20 6e 61 6d 65 2c  yword as a name,
26690 20 79 6f 75 20 6e 65 65 64 20 74 6f 20 71 75 6f   you need to quo
266a0 74 65 20 69 74 2e 20 20 54 68 65 72 65 0a 61 72  te it.  There.ar
266b0 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20  e three ways of 
266c0 71 75 6f 74 69 6e 67 20 6b 65 79 77 6f 72 64 73  quoting keywords
266d0 20 69 6e 20 53 51 4c 69 74 65 3a 3c 2f 70 3e 0a   in SQLite:</p>.
266e0 0a 3c 70 3e 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  .<p>.<blockquote
266f0 3e 0a 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 09 3c  >.<table>.<tr>.<
26700 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
26710 3c 62 3e 27 6b 65 79 77 6f 72 64 27 3c 2f 62 3e  <b>'keyword'</b>
26720 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
26730 32 30 22 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e  20"></td>..<td>^
26740 41 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e  A keyword in sin
26750 67 6c 65 20 71 75 6f 74 65 73 20 69 73 20 61 20  gle quotes is a 
26760 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 2e 3c  string literal.<
26770 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09  /td></tr>..<tr>.
26780 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
26790 3e 3c 62 3e 22 6b 65 79 77 6f 72 64 22 3c 2f 62  ><b>"keyword"</b
267a0 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a  ></td><td></td>.
267b0 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
267c0 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73  in double-quotes
267d0 20 69 73 20 61 6e 20 69 64 65 6e 74 69 66 69 65   is an identifie
267e0 72 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  r.</td></tr>..<t
267f0 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
26800 6f 70 22 3e 3c 62 3e 26 23 39 31 3b 6b 65 79 77  op"><b>&#91;keyw
26810 6f 72 64 26 23 39 33 3b 3c 2f 62 3e 3c 2f 74 64  ord&#93;</b></td
26820 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e  ><td></td>..<td>
26830 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e 63 6c 6f  ^A keyword enclo
26840 73 65 64 20 69 6e 20 73 71 75 61 72 65 20 62 72  sed in square br
26850 61 63 6b 65 74 73 20 69 73 20 0a 20 20 20 20 20  ackets is .     
26860 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72     an identifier
26870 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 73  .  This is not s
26880 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54 68  tandard SQL.  Th
26890 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68 61  is quoting mecha
268a0 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73 20  nism.        is 
268b0 75 73 65 64 20 62 79 20 4d 53 20 41 63 63 65 73  used by MS Acces
268c0 73 20 61 6e 64 20 53 51 4c 20 53 65 72 76 65 72  s and SQL Server
268d0 20 61 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64   and is included
268e0 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20   in SQLite for. 
268f0 20 20 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69         compatibi
26900 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  lity.</td></tr>.
26910 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
26920 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39 36 3b 6b  ="top"><b>&#96;k
26930 65 79 77 6f 72 64 26 23 39 36 3b 3c 2f 62 3e 3c  eyword&#96;</b><
26940 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e 0a 09 3c  /td><td></td>..<
26950 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20 65 6e  td>^A keyword en
26960 63 6c 6f 73 65 64 20 69 6e 20 67 72 61 76 65 20  closed in grave 
26970 61 63 63 65 6e 74 73 20 28 41 53 43 49 49 20 63  accents (ASCII c
26980 6f 64 65 20 39 36 29 20 69 73 20 0a 20 20 20 20  ode 96) is .    
26990 20 20 20 20 61 6e 20 69 64 65 6e 74 69 66 69 65      an identifie
269a0 72 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  r.  This is not 
269b0 73 74 61 6e 64 61 72 64 20 53 51 4c 2e 20 20 54  standard SQL.  T
269c0 68 69 73 20 71 75 6f 74 69 6e 67 20 6d 65 63 68  his quoting mech
269d0 61 6e 69 73 6d 0a 20 20 20 20 20 20 20 20 69 73  anism.        is
269e0 20 75 73 65 64 20 62 79 20 4d 79 53 51 4c 20 61   used by MySQL a
269f0 6e 64 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  nd is included i
26a00 6e 20 53 51 4c 69 74 65 20 66 6f 72 0a 20 20 20  n SQLite for.   
26a10 20 20 20 20 20 63 6f 6d 70 61 74 69 62 69 6c 69       compatibili
26a20 74 79 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 2f  ty.</td></tr>.</
26a30 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
26a40 6f 74 65 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f  ote>.</p>..<p>Fo
26a50 72 20 72 65 73 69 6c 69 65 6e 63 65 20 77 68 65  r resilience whe
26a60 6e 20 63 6f 6e 66 72 6f 6e 74 65 64 20 77 69 74  n confronted wit
26a70 68 20 68 69 73 74 6f 72 69 63 61 6c 20 53 51 4c  h historical SQL
26a80 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 53 51 4c   statements, SQL
26a90 69 74 65 0a 77 69 6c 6c 20 73 6f 6d 65 74 69 6d  ite.will sometim
26aa0 65 73 20 62 65 6e 64 20 74 68 65 20 71 75 6f 74  es bend the quot
26ab0 69 6e 67 20 72 75 6c 65 73 20 61 62 6f 76 65 3a  ing rules above:
26ac0 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ul>.<li><
26ad0 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72 64 20  p>^If a keyword 
26ae0 69 6e 20 73 69 6e 67 6c 65 0a 71 75 6f 74 65 73  in single.quotes
26af0 20 28 65 78 3a 20 3c 62 3e 27 6b 65 79 27 3c 2f   (ex: <b>'key'</
26b00 62 3e 20 6f 72 20 3c 62 3e 27 67 6c 6f 62 27 3c  b> or <b>'glob'<
26b10 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69 6e 20  /b>) is used in 
26b20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72 65 0a  a context where.
26b30 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 73  an identifier is
26b40 20 61 6c 6c 6f 77 65 64 20 62 75 74 20 77 68 65   allowed but whe
26b50 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
26b60 72 61 6c 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ral is not allow
26b70 65 64 2c 20 74 68 65 6e 0a 74 68 65 20 74 6f 6b  ed, then.the tok
26b80 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  en is understood
26b90 20 74 6f 20 62 65 20 61 6e 20 69 64 65 6e 74 69   to be an identi
26ba0 66 69 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20  fier instead of 
26bb0 61 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  a string literal
26bc0 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  ..</p></li>..<li
26bd0 3e 3c 70 3e 5e 49 66 20 61 20 6b 65 79 77 6f 72  ><p>^If a keywor
26be0 64 20 69 6e 20 64 6f 75 62 6c 65 0a 71 75 6f 74  d in double.quot
26bf0 65 73 20 28 65 78 3a 20 3c 62 3e 22 6b 65 79 22  es (ex: <b>"key"
26c00 3c 2f 62 3e 20 6f 72 20 3c 62 3e 22 67 6c 6f 62  </b> or <b>"glob
26c10 22 3c 2f 62 3e 29 20 69 73 20 75 73 65 64 20 69  "</b>) is used i
26c20 6e 20 61 20 63 6f 6e 74 65 78 74 20 77 68 65 72  n a context wher
26c30 65 0a 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 72  e.it cannot be r
26c40 65 73 6f 6c 76 65 64 20 74 6f 20 61 6e 20 69 64  esolved to an id
26c50 65 6e 74 69 66 69 65 72 20 62 75 74 20 77 68 65  entifier but whe
26c60 72 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  re a string lite
26c70 72 61 6c 0a 69 73 20 61 6c 6c 6f 77 65 64 2c 20  ral.is allowed, 
26c80 74 68 65 6e 20 74 68 65 20 74 6f 6b 65 6e 20 69  then the token i
26c90 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20  s understood to 
26ca0 62 65 20 61 20 73 74 72 69 6e 67 20 6c 69 74 65  be a string lite
26cb0 72 61 6c 20 69 6e 73 74 65 61 64 0a 6f 66 20 61  ral instead.of a
26cc0 6e 20 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 70  n identifier.</p
26cd0 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ></li>.</ul>..<p
26ce0 3e 50 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65  >Programmers are
26cf0 20 63 61 75 74 69 6f 6e 65 64 20 6e 6f 74 20 74   cautioned not t
26d00 6f 20 75 73 65 20 74 68 65 20 74 77 6f 20 65 78  o use the two ex
26d10 63 65 70 74 69 6f 6e 73 20 64 65 73 63 72 69 62  ceptions describ
26d20 65 64 20 69 6e 0a 74 68 65 20 70 72 65 76 69 6f  ed in.the previo
26d30 75 73 20 62 75 6c 6c 65 74 73 2e 20 20 57 65 20  us bullets.  We 
26d40 65 6d 70 68 61 73 69 7a 65 20 74 68 61 74 20 74  emphasize that t
26d50 68 65 79 20 65 78 69 73 74 20 6f 6e 6c 79 20 73  hey exist only s
26d60 6f 20 74 68 61 74 20 6f 6c 64 0a 61 6e 64 20 69  o that old.and i
26d70 6c 6c 2d 66 6f 72 6d 65 64 20 53 51 4c 20 73 74  ll-formed SQL st
26d80 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 72 75  atements will ru
26d90 6e 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 46 75  n correctly.  Fu
26da0 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
26db0 0a 53 51 4c 69 74 65 20 6d 69 67 68 74 20 63 68  .SQLite might ch
26dc0 61 6e 67 65 20 74 6f 20 72 61 69 73 65 20 65 72  ange to raise er
26dd0 72 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  rors instead of 
26de0 61 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61  accepting the ma
26df0 6c 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e  lformed.statemen
26e00 74 73 20 63 6f 76 65 72 65 64 20 62 79 20 74 68  ts covered by th
26e10 65 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f  e exceptions abo
26e20 76 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c  ve.</p>..<p>.SQL
26e30 69 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79  ite adds new key
26e40 77 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20  words from time 
26e50 74 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20  to time when it 
26e60 74 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61  takes on new fea
26e70 74 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65  tures..So to pre
26e80 76 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66  vent your code f
26e90 72 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e  rom being broken
26ea0 20 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e   by future enhan
26eb0 63 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f  cements, you sho
26ec0 75 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f  uld.normally quo
26ed0 74 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65  te any identifie
26ee0 72 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67  r that is an Eng
26ef0 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f  lish language wo
26f00 72 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20  rd, even if.you 
26f10 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a  do not have to..
26f20 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69  </p>..<p>.The li
26f30 73 74 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 61  st below shows a
26f40 6c 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65 79 77  ll possible keyw
26f50 6f 72 64 73 20 75 73 65 64 20 62 79 20 61 6e 79  ords used by any
26f60 20 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65   build of.SQLite
26f70 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 5b   regardless of [
26f80 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
26f90 69 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65  ions].  .Most re
26fa0 61 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75  asonable configu
26fb0 72 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74  rations use most
26fc0 20 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65   or all of these
26fd0 20 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74 20 73   keywords,.but s
26fe0 6f 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d 61 79  ome keywords may
26ff0 20 62 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e   be omitted when
27000 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65   SQL language fe
27010 61 74 75 72 65 73 20 61 72 65 0a 64 69 73 61 62  atures are.disab
27020 6c 65 64 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73  led..^(Regardles
27030 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 65  s of the compile
27040 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
27050 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69 66  ion, any identif
27060 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ier that is not 
27070 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  on.the following
27080 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c   <tcl>hd_puts [l
27090 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f  length $keyword_
270a0 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d  list]</tcl> elem
270b0 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20  ent.list is not 
270c0 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74 68 65  a keyword to the
270d0 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e 20 53   SQL parser in S
270e0 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  QLite:.</p>..<bl
270f0 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65  ockquote>.<table
27100 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e 3c 74   width="100%"><t
27110 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 6c 65  r>.<td align="le
27120 66 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  ft" valign="top"
27130 20 77 69 64 74 68 3d 22 32 30 25 22 3e 0a 3c 74   width="20%">.<t
27140 63 6c 3e 0a 73 65 74 20 6e 20 5b 6c 6c 65 6e 67  cl>.set n [lleng
27150 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c 69 73 74  th $keyword_list
27160 5d 0a 73 65 74 20 6e 43 6f 6c 20 35 0a 73 65 74  ].set nCol 5.set
27170 20 6e 52 6f 77 20 5b 65 78 70 72 20 7b 28 24 6e   nRow [expr {($n
27180 2b 24 6e 43 6f 6c 2d 31 29 2f 24 6e 43 6f 6c 7d  +$nCol-1)/$nCol}
27190 5d 0a 73 65 74 20 69 20 30 0a 66 6f 72 65 61 63  ].set i 0.foreac
271a0 68 20 77 6f 72 64 20 24 6b 65 79 77 6f 72 64 5f  h word $keyword_
271b0 6c 69 73 74 20 7b 0a 20 20 69 66 20 7b 24 69 3d  list {.  if {$i=
271c0 3d 24 6e 52 6f 77 7d 20 7b 0a 20 20 20 20 68 64  =$nRow} {.    hd
271d0 5f 70 75 74 73 20 22 3c 2f 74 64 3e 3c 74 64 20  _puts "</td><td 
271e0 76 61 6c 69 67 6e 3d 5c 22 74 6f 70 5c 22 20 61  valign=\"top\" a
271f0 6c 69 67 6e 3d 5c 22 6c 65 66 74 5c 22 20 77 69  lign=\"left\" wi
27200 64 74 68 3d 5c 22 32 30 25 5c 22 3e 22 0a 20 20  dth=\"20%\">".  
27210 20 20 73 65 74 20 69 20 31 0a 20 20 7d 20 65 6c    set i 1.  } el
27220 73 65 20 7b 0a 20 20 20 20 69 6e 63 72 20 69 0a  se {.    incr i.
27230 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 24    }.  hd_puts "$
27240 77 6f 72 64 3c 62 72 3e 5c 6e 22 0a 7d 0a 3c 2f  word<br>\n".}.</
27250 74 63 6c 3e 0a 3c 2f 74 64 3e 3c 2f 74 72 3e 3c  tcl>.</td></tr><
27260 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75  /table></blockqu
27270 6f 74 65 3e 29 5e 0a                             ote>)^.