/ Hex Artifact Content
Login

Artifact 528299b8316726dbcc5548e9aa0648c8b1bd055b:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 54 43 4c  #.# Run this TCL
0010: 20 73 63 72 69 70 74 20 74 6f 20 67 65 6e 65 72   script to gener
0020: 61 74 65 20 48 54 4d 4c 20 66 6f 72 20 74 68 65  ate HTML for the
0030: 20 67 6f 61 6c 73 2e 68 74 6d 6c 20 66 69 6c 65   goals.html file
0040: 2e 0a 23 0a 73 65 74 20 72 63 73 69 64 20 7b 24  ..#.set rcsid {$
0050: 49 64 3a 20 77 68 65 6e 74 6f 75 73 65 2e 74 63  Id: whentouse.tc
0060: 6c 2c 76 20 31 2e 35 20 32 30 30 35 2f 30 33 2f  l,v 1.5 2005/03/
0070: 31 39 20 30 33 3a 34 31 3a 35 38 20 64 72 68 20  19 03:41:58 drh 
0080: 45 78 70 20 24 7d 0a 73 6f 75 72 63 65 20 63 6f  Exp $}.source co
0090: 6d 6d 6f 6e 2e 74 63 6c 0a 68 65 61 64 65 72 20  mmon.tcl.header 
00a0: 7b 41 70 70 72 6f 70 72 69 61 74 65 20 55 73 65  {Appropriate Use
00b0: 73 20 46 6f 72 20 53 51 4c 69 74 65 7d 0a 0a 70  s For SQLite}..p
00c0: 75 74 73 20 7b 0a 3c 70 3e 0a 53 51 4c 69 74 65  uts {.<p>.SQLite
00d0: 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
00e0: 6f 6d 20 6d 6f 73 74 20 6f 74 68 65 72 20 53 51  om most other SQ
00f0: 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
0100: 65 73 20 69 6e 20 74 68 61 74 20 69 74 73 0a 70  es in that its.p
0110: 72 69 6d 61 72 79 20 64 65 73 69 67 6e 20 67 6f  rimary design go
0120: 61 6c 20 69 73 20 74 6f 20 62 65 20 73 69 6d 70  al is to be simp
0130: 6c 65 3a 0a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  le:.</p>..<ul>.<
0140: 6c 69 3e 53 69 6d 70 6c 65 20 74 6f 20 61 64 6d  li>Simple to adm
0150: 69 6e 69 73 74 65 72 3c 2f 6c 69 3e 0a 3c 6c 69  inister</li>.<li
0160: 3e 53 69 6d 70 6c 65 20 74 6f 20 6f 70 65 72 61  >Simple to opera
0170: 74 65 3c 2f 6c 69 3e 0a 3c 6c 69 3e 53 69 6d 70  te</li>.<li>Simp
0180: 6c 65 20 74 6f 20 65 6d 62 65 64 20 69 6e 20 61  le to embed in a
0190: 20 6c 61 72 67 65 72 20 70 72 6f 67 72 61 6d 3c   larger program<
01a0: 2f 6c 69 3e 0a 3c 6c 69 3e 53 69 6d 70 6c 65 20  /li>.<li>Simple 
01b0: 74 6f 20 6d 61 69 6e 74 61 69 6e 20 61 6e 64 20  to maintain and 
01c0: 63 75 73 74 6f 6d 69 7a 65 3c 2f 6c 69 3e 0a 3c  customize</li>.<
01d0: 2f 75 6c 3e 0a 0a 3c 70 3e 0a 4d 61 6e 79 20 70  /ul>..<p>.Many p
01e0: 65 6f 70 6c 65 20 6c 69 6b 65 20 53 51 4c 69 74  eople like SQLit
01f0: 65 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20  e because it is 
0200: 73 6d 61 6c 6c 20 61 6e 64 20 66 61 73 74 2e 20  small and fast. 
0210: 20 42 75 74 20 74 68 6f 73 65 0a 71 75 61 6c 69   But those.quali
0220: 74 69 65 73 20 61 72 65 20 6a 75 73 74 20 68 61  ties are just ha
0230: 70 70 79 20 61 63 63 69 64 65 6e 74 73 2e 0a 55  ppy accidents..U
0240: 73 65 72 73 20 61 6c 73 6f 20 66 69 6e 64 20 74  sers also find t
0250: 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 76 65  hat SQLite is ve
0260: 72 79 20 72 65 6c 69 61 62 6c 65 2e 20 20 52 65  ry reliable.  Re
0270: 6c 69 61 62 69 6c 69 74 79 20 69 73 0a 61 20 63  liability is.a c
0280: 6f 6e 73 65 71 75 65 6e 63 65 20 6f 66 20 73 69  onsequence of si
0290: 6d 70 6c 69 63 69 74 79 2e 20 20 57 69 74 68 20  mplicity.  With 
02a0: 6c 65 73 73 20 63 6f 6d 70 6c 69 63 61 74 69 6f  less complicatio
02b0: 6e 2c 20 74 68 65 72 65 20 69 73 0a 6c 65 73 73  n, there is.less
02c0: 20 74 6f 20 67 6f 20 77 72 6f 6e 67 2e 20 20 53   to go wrong.  S
02d0: 6f 2c 20 79 65 73 2c 20 53 51 4c 69 74 65 20 69  o, yes, SQLite i
02e0: 73 20 73 6d 61 6c 6c 2c 20 66 61 73 74 2c 20 61  s small, fast, a
02f0: 6e 64 20 72 65 6c 69 61 62 6c 65 2c 0a 62 75 74  nd reliable,.but
0300: 20 66 69 72 73 74 20 61 6e 64 20 66 6f 72 65 6d   first and forem
0310: 6f 73 74 2c 20 53 51 4c 69 74 65 20 73 74 72 69  ost, SQLite stri
0320: 76 65 73 20 74 6f 20 62 65 20 73 69 6d 70 6c 65  ves to be simple
0330: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 69 6d 70  ..</p>..<p>.Simp
0340: 6c 69 63 69 74 79 20 69 6e 20 61 20 64 61 74 61  licity in a data
0350: 62 61 73 65 20 65 6e 67 69 6e 65 20 63 61 6e 20  base engine can 
0360: 62 65 20 65 69 74 68 65 72 20 61 20 73 74 72 65  be either a stre
0370: 6e 67 74 68 20 6f 72 20 61 0a 77 65 61 6b 6e 65  ngth or a.weakne
0380: 73 73 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ss, depending on
0390: 20 77 68 61 74 20 79 6f 75 20 61 72 65 20 74 72   what you are tr
03a0: 79 69 6e 67 20 74 6f 20 64 6f 2e 20 20 49 6e 20  ying to do.  In 
03b0: 6f 72 64 65 72 20 74 6f 0a 61 63 68 69 65 76 65  order to.achieve
03c0: 20 73 69 6d 70 6c 69 63 69 74 79 2c 20 53 51 4c   simplicity, SQL
03d0: 69 74 65 20 68 61 73 20 68 61 64 20 74 6f 20 73  ite has had to s
03e0: 61 63 72 69 66 69 63 65 20 6f 74 68 65 72 20 63  acrifice other c
03f0: 68 61 72 61 63 74 65 72 69 73 74 69 63 73 0a 74  haracteristics.t
0400: 68 61 74 20 73 6f 6d 65 20 70 65 6f 70 6c 65 20  hat some people 
0410: 66 69 6e 64 20 75 73 65 66 75 6c 2c 20 73 75 63  find useful, suc
0420: 68 20 61 73 20 68 69 67 68 20 63 6f 6e 63 75 72  h as high concur
0430: 72 65 6e 63 79 2c 20 66 69 6e 65 2d 67 72 61 69  rency, fine-grai
0440: 6e 65 64 0a 61 63 63 65 73 73 20 63 6f 6e 74 72  ned.access contr
0450: 6f 6c 2c 20 61 20 72 69 63 68 20 73 65 74 20 6f  ol, a rich set o
0460: 66 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  f built-in funct
0470: 69 6f 6e 73 2c 20 73 74 6f 72 65 64 20 70 72 6f  ions, stored pro
0480: 63 65 64 75 72 65 73 2c 0a 65 73 6f 74 65 72 69  cedures,.esoteri
0490: 63 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66  c SQL language f
04a0: 65 61 74 75 72 65 73 2c 20 58 4d 4c 20 61 6e 64  eatures, XML and
04b0: 2f 6f 72 20 4a 61 76 61 20 65 78 74 65 6e 73 69  /or Java extensi
04c0: 6f 6e 73 2c 0a 74 65 72 61 2d 20 6f 72 20 70 65  ons,.tera- or pe
04d0: 74 61 2d 62 79 74 65 20 73 63 61 6c 61 62 69 6c  ta-byte scalabil
04e0: 69 74 79 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ity, and so fort
04f0: 68 2e 20 20 49 66 20 79 6f 75 20 6e 65 65 64 20  h.  If you need 
0500: 73 6f 6d 65 20 6f 66 20 74 68 65 73 65 0a 66 65  some of these.fe
0510: 61 74 75 72 65 73 20 61 6e 64 20 64 6f 20 6e 6f  atures and do no
0520: 74 20 6d 69 6e 64 20 74 68 65 20 61 64 64 65 64  t mind the added
0530: 20 63 6f 6d 70 6c 65 78 69 74 79 20 74 68 61 74   complexity that
0540: 20 74 68 65 79 0a 62 72 69 6e 67 2c 20 74 68 65   they.bring, the
0550: 6e 20 53 51 4c 69 74 65 20 69 73 20 70 72 6f 62  n SQLite is prob
0560: 61 62 6c 79 20 6e 6f 74 20 74 68 65 20 64 61 74  ably not the dat
0570: 61 62 61 73 65 20 66 6f 72 20 79 6f 75 2e 0a 53  abase for you..S
0580: 51 4c 69 74 65 20 69 73 20 6e 6f 74 20 69 6e 74  QLite is not int
0590: 65 6e 64 65 64 20 74 6f 20 62 65 20 61 6e 20 65  ended to be an e
05a0: 6e 74 65 72 70 72 69 73 65 20 64 61 74 61 62 61  nterprise databa
05b0: 73 65 20 65 6e 67 69 6e 65 2e 20 20 49 74 0a 6e  se engine.  It.n
05c0: 6f 74 20 64 65 73 69 67 6e 65 64 20 74 6f 20 63  ot designed to c
05d0: 6f 6d 70 65 74 65 20 77 69 74 68 20 4f 72 61 63  ompete with Orac
05e0: 6c 65 20 6f 72 20 50 6f 73 74 67 72 65 53 51 4c  le or PostgreSQL
05f0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
0600: 62 61 73 69 63 20 72 75 6c 65 20 6f 66 20 74 68  basic rule of th
0610: 75 6d 62 20 66 6f 72 20 77 68 65 6e 20 69 74 20  umb for when it 
0620: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 74  is appropriate t
0630: 6f 20 75 73 65 20 53 51 4c 69 74 65 20 69 73 0a  o use SQLite is.
0640: 74 68 69 73 3a 20 20 55 73 65 20 53 51 4c 69 74  this:  Use SQLit
0650: 65 20 69 6e 20 73 69 74 75 61 74 69 6f 6e 73 20  e in situations 
0660: 77 68 65 72 65 20 73 69 6d 70 6c 69 63 69 74 79  where simplicity
0670: 20 6f 66 20 61 64 6d 69 6e 69 73 74 72 61 74 69   of administrati
0680: 6f 6e 2c 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69  on,.implementati
0690: 6f 6e 2c 20 61 6e 64 20 6d 61 69 6e 74 65 6e 61  on, and maintena
06a0: 6e 63 65 20 61 72 65 20 6d 6f 72 65 20 69 6d 70  nce are more imp
06b0: 6f 72 74 61 6e 74 20 74 68 61 6e 20 74 68 65 20  ortant than the 
06c0: 63 6f 75 6e 74 6c 65 73 73 0a 63 6f 6d 70 6c 65  countless.comple
06d0: 78 20 66 65 61 74 75 72 65 73 20 74 68 61 74 20  x features that 
06e0: 65 6e 74 65 72 70 72 69 73 65 20 64 61 74 61 62  enterprise datab
06f0: 61 73 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76  ase engines prov
0700: 69 64 65 2e 0a 41 73 20 69 74 20 74 75 72 6e 73  ide..As it turns
0710: 20 6f 75 74 2c 20 73 69 74 75 61 74 69 6f 6e 73   out, situations
0720: 20 77 68 65 72 65 20 73 69 6d 70 6c 69 63 69 74   where simplicit
0730: 79 20 69 73 20 74 68 65 20 62 65 74 74 65 72 20  y is the better 
0740: 63 68 6f 69 63 65 0a 61 72 65 20 6d 6f 72 65 20  choice.are more 
0750: 63 6f 6d 6d 6f 6e 20 74 68 61 74 20 6d 61 6e 79  common that many
0760: 20 70 65 6f 70 6c 65 20 72 65 61 6c 69 7a 65 2e   people realize.
0770: 0a 3c 2f 70 3e 0a 0a 3c 68 32 3e 53 69 74 75 61  .</p>..<h2>Situa
0780: 74 69 6f 6e 73 20 57 68 65 72 65 20 53 51 4c 69  tions Where SQLi
0790: 74 65 20 57 6f 72 6b 73 20 57 65 6c 6c 3c 2f 68  te Works Well</h
07a0: 32 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  2>..<ul>.<li><p>
07b0: 3c 62 3e 57 65 62 73 69 74 65 73 3c 2f 62 3e 3c  <b>Websites</b><
07c0: 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75  /p>..<p>SQLite u
07d0: 73 75 61 6c 6c 79 20 77 69 6c 6c 20 77 6f 72 6b  sually will work
07e0: 20 67 72 65 61 74 20 61 73 20 74 68 65 20 64 61   great as the da
07f0: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 66 6f  tabase engine fo
0800: 72 20 6c 6f 77 20 74 6f 0a 6d 65 64 69 75 6d 20  r low to.medium 
0810: 74 72 61 66 66 69 63 20 77 65 62 73 69 74 65 73  traffic websites
0820: 20 28 77 68 69 63 68 20 69 73 20 74 6f 20 73 61   (which is to sa
0830: 79 2c 20 39 39 2e 39 25 20 6f 66 20 61 6c 6c 20  y, 99.9% of all 
0840: 77 65 62 73 69 74 65 73 29 2e 0a 54 68 65 20 61  websites)..The a
0850: 6d 6f 75 6e 74 20 6f 66 20 77 65 62 20 74 72 61  mount of web tra
0860: 66 66 69 63 20 74 68 61 74 20 53 51 4c 69 74 65  ffic that SQLite
0870: 20 63 61 6e 20 68 61 6e 64 6c 65 20 64 65 70 65   can handle depe
0880: 6e 64 73 2c 20 6f 66 20 63 6f 75 72 73 65 2c 0a  nds, of course,.
0890: 6f 6e 20 68 6f 77 20 68 65 61 76 69 6c 79 20 74  on how heavily t
08a0: 68 65 20 77 65 62 73 69 74 65 20 75 73 65 73 20  he website uses 
08b0: 69 74 73 20 64 61 74 61 62 61 73 65 2e 20 20 47  its database.  G
08c0: 65 6e 65 72 61 6c 6c 79 0a 73 70 65 61 6b 69 6e  enerally.speakin
08d0: 67 2c 20 61 6e 79 20 73 69 74 65 20 74 68 61 74  g, any site that
08e0: 20 67 65 74 73 20 66 65 77 65 72 20 74 68 61 6e   gets fewer than
08f0: 20 61 20 31 30 30 30 30 30 20 68 69 74 73 2f 64   a 100000 hits/d
0900: 61 79 20 73 68 6f 75 6c 64 20 77 6f 72 6b 0a 66  ay should work.f
0910: 69 6e 65 20 77 69 74 68 20 53 51 4c 69 74 65 2e  ine with SQLite.
0920: 0a 54 68 65 20 31 30 30 30 30 30 20 68 69 74 73  .The 100000 hits
0930: 2f 64 61 79 20 66 69 67 75 72 65 20 69 73 20 61  /day figure is a
0940: 20 63 6f 6e 73 65 72 76 61 74 69 76 65 20 65 73   conservative es
0950: 74 69 6d 61 74 65 2c 20 6e 6f 74 20 61 0a 68 61  timate, not a.ha
0960: 72 64 20 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a  rd upper bound..
0970: 53 51 4c 69 74 65 20 68 61 73 20 62 65 65 6e 20  SQLite has been 
0980: 64 65 6d 6f 6e 73 74 72 61 74 65 64 20 74 6f 20  demonstrated to 
0990: 77 6f 72 6b 20 77 69 74 68 20 31 30 20 74 69 6d  work with 10 tim
09a0: 65 73 20 74 68 61 74 20 61 6d 6f 75 6e 74 0a 6f  es that amount.o
09b0: 66 20 74 72 61 66 66 69 63 2e 3c 2f 70 3e 0a 3c  f traffic.</p>.<
09c0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
09d0: 45 6d 62 65 64 64 65 64 20 64 65 76 69 63 65 73  Embedded devices
09e0: 20 61 6e 64 20 61 70 70 6c 69 63 61 74 69 6f 6e   and application
09f0: 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65  s</b></p>..<p>Be
0a00: 63 61 75 73 65 20 61 6e 20 53 51 4c 69 74 65 20  cause an SQLite 
0a10: 64 61 74 61 62 61 73 65 20 72 65 71 75 69 72 65  database require
0a20: 73 20 6c 69 74 74 6c 65 20 6f 72 20 6e 6f 20 61  s little or no a
0a30: 64 6d 69 6e 69 73 74 72 61 74 69 6f 6e 2c 0a 53  dministration,.S
0a40: 51 4c 69 74 65 20 69 73 20 61 20 67 6f 6f 64 20  QLite is a good 
0a50: 63 68 6f 69 63 65 20 66 6f 72 20 64 65 76 69 63  choice for devic
0a60: 65 73 20 6f 72 20 73 65 72 76 69 63 65 73 20 74  es or services t
0a70: 68 61 74 20 6d 75 73 74 20 77 6f 72 6b 0a 75 6e  hat must work.un
0a80: 61 74 74 65 6e 64 65 64 20 61 6e 64 20 77 69 74  attended and wit
0a90: 68 6f 75 74 20 68 75 6d 61 6e 20 73 75 70 70 6f  hout human suppo
0aa0: 72 74 2e 20 20 53 51 4c 69 74 65 20 69 73 20 61  rt.  SQLite is a
0ab0: 20 67 6f 6f 64 20 66 69 74 20 66 6f 72 0a 75 73   good fit for.us
0ac0: 65 20 69 6e 20 63 65 6c 6c 70 68 6f 6e 65 73 2c  e in cellphones,
0ad0: 20 50 44 41 73 2c 20 73 65 74 2d 74 6f 70 20 62   PDAs, set-top b
0ae0: 6f 78 65 73 2c 20 61 6e 64 2f 6f 72 20 61 70 70  oxes, and/or app
0af0: 6c 69 61 6e 63 65 73 2e 20 20 49 74 20 61 6c 73  liances.  It als
0b00: 6f 0a 77 6f 72 6b 73 20 77 65 6c 6c 20 61 73 20  o.works well as 
0b10: 61 6e 20 65 6d 62 65 64 64 65 64 20 64 61 74 61  an embedded data
0b20: 62 61 73 65 20 69 6e 20 64 6f 77 6e 6c 6f 61 64  base in download
0b30: 61 62 6c 65 20 63 6f 6e 73 75 6d 65 72 20 61 70  able consumer ap
0b40: 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e  plications..</p>
0b50: 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  .</li>..<li><p><
0b60: 62 3e 41 70 70 6c 69 63 61 74 69 6f 6e 20 46 69  b>Application Fi
0b70: 6c 65 20 46 6f 72 6d 61 74 3c 2f 62 3e 3c 2f 70  le Format</b></p
0b80: 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 68 61  >..<p>.SQLite ha
0b90: 73 20 62 65 65 6e 20 75 73 65 64 20 77 69 74 68  s been used with
0ba0: 20 67 72 65 61 74 20 73 75 63 63 65 73 73 20 61   great success a
0bb0: 73 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 66 69  s the on-disk fi
0bc0: 6c 65 20 66 6f 72 6d 61 74 0a 66 6f 72 20 64 65  le format.for de
0bd0: 73 6b 74 6f 70 20 61 70 70 6c 69 63 61 74 69 6f  sktop applicatio
0be0: 6e 73 20 73 75 63 68 20 61 73 20 66 69 6e 61 6e  ns such as finan
0bf0: 63 69 61 6c 20 61 6e 61 6c 79 73 69 73 20 74 6f  cial analysis to
0c00: 6f 6c 73 2c 20 43 41 44 0a 70 61 63 6b 61 67 65  ols, CAD.package
0c10: 73 2c 20 72 65 63 6f 72 64 20 6b 65 65 70 69 6e  s, record keepin
0c20: 67 20 70 72 6f 67 72 61 6d 73 2c 20 61 6e 64 20  g programs, and 
0c30: 73 6f 20 66 6f 72 74 68 2e 20 20 54 68 65 20 74  so forth.  The t
0c40: 72 61 64 69 74 69 6f 6e 61 6c 0a 46 69 6c 65 2f  raditional.File/
0c50: 4f 70 65 6e 20 6f 70 65 72 61 74 69 6f 6e 20 64  Open operation d
0c60: 6f 65 73 20 61 6e 20 73 71 6c 69 74 65 33 5f 6f  oes an sqlite3_o
0c70: 70 65 6e 28 29 20 61 6e 64 20 65 78 65 63 75 74  pen() and execut
0c80: 65 73 20 61 0a 42 45 47 49 4e 20 54 52 41 4e 53  es a.BEGIN TRANS
0c90: 41 43 54 49 4f 4e 20 74 6f 20 67 65 74 20 65 78  ACTION to get ex
0ca0: 63 6c 75 73 69 76 65 20 61 63 63 65 73 73 20 74  clusive access t
0cb0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20  o the content.  
0cc0: 46 69 6c 65 2f 53 61 76 65 0a 64 6f 65 73 20 61  File/Save.does a
0cd0: 20 43 4f 4d 4d 49 54 20 66 6f 6c 6c 6f 77 65 64   COMMIT followed
0ce0: 20 62 79 20 61 6e 6f 74 68 65 72 20 42 45 47 49   by another BEGI
0cf0: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 2e 20 20  N TRANSACTION.  
0d00: 54 68 65 20 75 73 65 0a 6f 66 20 74 72 61 6e 73  The use.of trans
0d10: 61 63 74 69 6f 6e 73 20 67 75 61 72 61 6e 74 65  actions guarante
0d20: 65 73 20 74 68 61 74 20 75 70 64 61 74 65 73 20  es that updates 
0d30: 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  to the applicati
0d40: 6f 6e 20 66 69 6c 65 20 61 72 65 20 61 74 6f 6d  on file are atom
0d50: 69 63 2c 0a 64 75 72 61 62 6c 65 2c 20 69 73 6f  ic,.durable, iso
0d60: 6c 61 74 65 64 2c 20 61 6e 64 20 63 6f 6e 73 69  lated, and consi
0d70: 73 74 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  stent..</p>..<p>
0d80: 0a 54 65 6d 70 6f 72 61 72 79 20 74 72 69 67 67  .Temporary trigg
0d90: 65 72 73 20 63 61 6e 20 62 65 20 61 64 64 65 64  ers can be added
0da0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
0db0: 20 74 6f 20 72 65 63 6f 72 64 20 61 6c 6c 0a 63   to record all.c
0dc0: 68 61 6e 67 65 73 20 69 6e 74 6f 20 61 20 28 74  hanges into a (t
0dd0: 65 6d 70 6f 72 61 72 79 29 20 75 6e 64 6f 2f 72  emporary) undo/r
0de0: 65 64 6f 20 6c 6f 67 20 74 61 62 6c 65 2e 20 20  edo log table.  
0df0: 54 68 65 73 65 20 63 68 61 6e 67 65 73 20 63 61  These changes ca
0e00: 6e 20 74 68 65 6e 0a 62 65 20 70 6c 61 79 65 64  n then.be played
0e10: 20 62 61 63 6b 20 77 68 65 6e 20 74 68 65 20 75   back when the u
0e20: 73 65 72 20 70 72 65 73 73 65 73 20 74 68 65 20  ser presses the 
0e30: 55 6e 64 6f 20 61 6e 64 20 52 65 64 6f 20 62 75  Undo and Redo bu
0e40: 74 74 6f 6e 73 2e 20 20 55 73 69 6e 67 0a 74 68  ttons.  Using.th
0e50: 69 73 20 74 65 63 68 6e 69 71 75 65 2c 20 61 20  is technique, a 
0e60: 75 6e 6c 69 6d 69 74 65 64 20 64 65 70 74 68 20  unlimited depth 
0e70: 75 6e 64 6f 2f 72 65 64 6f 20 69 6d 70 6c 65 6d  undo/redo implem
0e80: 65 6e 74 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  entation can be 
0e90: 77 72 69 74 74 65 6e 0a 69 6e 20 73 75 72 70 72  written.in surpr
0ea0: 69 73 69 6e 67 20 6c 69 74 74 6c 65 20 63 6f 64  ising little cod
0eb0: 65 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c  e..</p>.</li>..<
0ec0: 6c 69 3e 3c 70 3e 3c 62 3e 52 65 70 6c 61 63 65  li><p><b>Replace
0ed0: 6d 65 6e 74 20 66 6f 72 20 3c 69 3e 61 64 20 68  ment for <i>ad h
0ee0: 6f 63 3c 2f 69 3e 20 64 69 73 6b 20 66 69 6c 65  oc</i> disk file
0ef0: 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 4d 61  s</b></p>..<p>Ma
0f00: 6e 79 20 70 72 6f 67 72 61 6d 73 20 75 73 65 20  ny programs use 
0f10: 66 6f 70 65 6e 28 29 2c 20 66 72 65 61 64 28 29  fopen(), fread()
0f20: 2c 20 61 6e 64 20 66 77 72 69 74 65 28 29 20 74  , and fwrite() t
0f30: 6f 20 63 72 65 61 74 65 20 61 6e 64 0a 6d 61 6e  o create and.man
0f40: 61 67 65 20 66 69 6c 65 73 20 6f 66 20 64 61 74  age files of dat
0f50: 61 20 69 6e 20 68 6f 6d 65 2d 67 72 6f 77 6e 20  a in home-grown 
0f60: 66 6f 72 6d 61 74 73 2e 20 20 53 51 4c 69 74 65  formats.  SQLite
0f70: 20 77 6f 72 6b 73 20 0a 70 61 72 74 69 63 75 6c   works .particul
0f80: 61 72 6c 79 20 77 65 6c 6c 20 61 73 20 61 0a 72  arly well as a.r
0f90: 65 70 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20 74  eplacement for t
0fa0: 68 65 73 65 20 3c 69 3e 61 64 20 68 6f 63 3c 2f  hese <i>ad hoc</
0fb0: 69 3e 20 64 61 74 61 20 66 69 6c 65 73 2e 3c 2f  i> data files.</
0fc0: 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  p>.</li>..<li><p
0fd0: 3e 3c 62 3e 49 6e 74 65 72 6e 61 6c 20 6f 72 20  ><b>Internal or 
0fe0: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
0ff0: 73 65 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  ses</b></p>..<p>
1000: 0a 46 6f 72 20 70 72 6f 67 72 61 6d 73 20 74 68  .For programs th
1010: 61 74 20 68 61 76 65 20 61 20 6c 6f 74 20 6f 66  at have a lot of
1020: 20 64 61 74 61 20 74 68 61 74 20 6d 75 73 74 20   data that must 
1030: 62 65 20 73 69 66 74 65 64 20 61 6e 64 20 73 6f  be sifted and so
1040: 72 74 65 64 0a 69 6e 20 64 69 76 65 72 73 65 20  rted.in diverse 
1050: 77 61 79 73 2c 20 69 74 20 69 73 20 6f 66 74 65  ways, it is ofte
1060: 6e 20 65 61 73 69 65 72 20 61 6e 64 20 71 75 69  n easier and qui
1070: 63 6b 65 72 20 74 6f 20 6c 6f 61 64 20 74 68 65  cker to load the
1080: 20 64 61 74 61 20 69 6e 74 6f 0a 61 6e 20 69 6e   data into.an in
1090: 2d 6d 65 6d 6f 72 79 20 53 51 4c 69 74 65 20 64  -memory SQLite d
10a0: 61 74 61 62 61 73 65 20 61 6e 64 20 75 73 65 20  atabase and use 
10b0: 71 75 65 72 69 65 73 20 77 69 74 68 20 6a 6f 69  queries with joi
10c0: 6e 73 20 61 6e 64 20 4f 52 44 45 52 20 42 59 0a  ns and ORDER BY.
10d0: 63 6c 61 75 73 65 73 20 74 6f 20 65 78 74 72 61  clauses to extra
10e0: 63 74 20 74 68 65 20 64 61 74 61 20 69 6e 20 74  ct the data in t
10f0: 68 65 20 66 6f 72 6d 20 61 6e 64 20 6f 72 64 65  he form and orde
1100: 72 20 6e 65 65 64 65 64 20 72 61 74 68 65 72 20  r needed rather 
1110: 74 68 61 6e 0a 74 6f 20 74 72 79 20 74 6f 20 63  than.to try to c
1120: 6f 64 65 20 74 68 65 20 73 61 6d 65 20 6f 70 65  ode the same ope
1130: 72 61 74 69 6f 6e 73 20 6d 61 6e 75 61 6c 6c 79  rations manually
1140: 2e 0a 55 73 69 6e 67 20 61 6e 20 53 51 4c 20 64  ..Using an SQL d
1150: 61 74 61 62 61 73 65 20 69 6e 74 65 72 6e 61 6c  atabase internal
1160: 6c 79 20 69 6e 20 74 68 69 73 20 77 61 79 20 61  ly in this way a
1170: 6c 73 6f 20 67 69 76 65 73 20 74 68 65 20 70 72  lso gives the pr
1180: 6f 67 72 61 6d 0a 67 72 65 61 74 65 72 20 66 6c  ogram.greater fl
1190: 65 78 69 62 69 6c 69 74 79 20 73 69 6e 63 65 20  exibility since 
11a0: 6e 65 77 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20  new columns and 
11b0: 69 6e 64 69 63 65 73 20 63 61 6e 20 62 65 20 61  indices can be a
11c0: 64 64 65 64 20 77 69 74 68 6f 75 74 0a 68 61 76  dded without.hav
11d0: 69 6e 67 20 74 6f 20 72 65 63 6f 64 65 20 65 76  ing to recode ev
11e0: 65 72 79 20 71 75 65 72 79 2e 0a 3c 2f 70 3e 0a  ery query..</p>.
11f0: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  </li>..<li><p><b
1200: 3e 43 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 64 61  >Command-line da
1210: 74 61 73 65 74 20 61 6e 61 6c 79 73 69 73 20 74  taset analysis t
1220: 6f 6f 6c 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  ool</b></p>..<p>
1230: 0a 45 78 70 65 72 69 65 6e 63 65 64 20 53 51 4c  .Experienced SQL
1240: 20 75 73 65 72 73 20 63 61 6e 20 65 6d 70 6c 6f   users can emplo
1250: 79 0a 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  y.the command-li
1260: 6e 65 20 3c 62 3e 73 71 6c 69 74 65 3c 2f 62 3e  ne <b>sqlite</b>
1270: 20 70 72 6f 67 72 61 6d 20 74 6f 20 61 6e 61 6c   program to anal
1280: 79 7a 65 20 6d 69 73 63 65 6c 6c 61 6e 65 6f 75  yze miscellaneou
1290: 73 0a 64 61 74 61 73 65 74 73 2e 20 52 61 77 20  s.datasets. Raw 
12a0: 64 61 74 61 20 63 61 6e 20 62 65 20 69 6d 70 6f  data can be impo
12b0: 72 74 65 64 20 66 72 6f 6d 20 43 53 56 20 66 69  rted from CSV fi
12c0: 6c 65 73 2c 20 74 68 65 6e 20 74 68 61 74 0a 64  les, then that.d
12d0: 61 74 61 20 63 61 6e 20 62 65 20 73 6c 69 63 65  ata can be slice
12e0: 64 20 61 6e 64 20 64 69 63 65 64 20 74 6f 20 67  d and diced to g
12f0: 65 6e 65 72 61 74 65 20 61 20 6d 79 72 69 61 64  enerate a myriad
1300: 20 6f 66 20 73 75 6d 6d 61 72 79 0a 72 65 70 6f   of summary.repo
1310: 72 74 73 2e 20 20 50 6f 73 73 69 62 6c 65 20 75  rts.  Possible u
1320: 73 65 73 20 69 6e 63 6c 75 64 65 20 77 65 62 73  ses include webs
1330: 69 74 65 20 6c 6f 67 20 61 6e 61 6c 79 73 69 73  ite log analysis
1340: 2c 20 73 70 6f 72 74 73 0a 73 74 61 74 69 73 74  , sports.statist
1350: 69 63 73 20 61 6e 61 6c 79 73 69 73 2c 20 63 6f  ics analysis, co
1360: 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 70 72 6f  mpilation of pro
1370: 67 72 61 6d 6d 69 6e 67 20 6d 65 74 72 69 63 73  gramming metrics
1380: 2c 20 61 6e 64 0a 61 6e 61 6c 79 73 69 73 20 6f  , and.analysis o
1390: 66 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 72  f experimental r
13a0: 65 73 75 6c 74 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  esults..</p>..<p
13b0: 3e 0a 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 64  >.You can also d
13c0: 6f 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  o the same thing
13d0: 20 77 69 74 68 20 61 20 65 6e 74 65 72 70 72 69   with a enterpri
13e0: 73 65 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72  se client/server
13f0: 0a 64 61 74 61 62 61 73 65 2c 20 6f 66 20 63 6f  .database, of co
1400: 75 72 73 65 2e 20 20 54 68 65 20 61 64 76 61 6e  urse.  The advan
1410: 74 61 67 65 73 20 74 6f 20 75 73 69 6e 67 20 53  tages to using S
1420: 51 4c 69 74 65 20 69 6e 20 74 68 69 73 20 73 69  QLite in this si
1430: 74 75 61 74 69 6f 6e 0a 61 72 65 20 74 68 61 74  tuation.are that
1440: 20 53 51 4c 69 74 65 20 69 73 20 6d 75 63 68 20   SQLite is much 
1450: 65 61 73 69 65 72 20 74 6f 20 73 65 74 20 75 70  easier to set up
1460: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 69   and the resulti
1470: 6e 67 20 64 61 74 61 62 61 73 65 20 0a 69 73 20  ng database .is 
1480: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 74 68  a single file th
1490: 61 74 20 79 6f 75 20 63 61 6e 20 73 74 6f 72 65  at you can store
14a0: 20 6f 6e 20 61 20 66 6c 6f 70 70 79 20 64 69 73   on a floppy dis
14b0: 6b 20 6f 72 20 66 6c 61 73 68 2d 6d 65 6d 6f 72  k or flash-memor
14c0: 79 20 73 74 69 63 6b 0a 6f 72 20 65 6d 61 69 6c  y stick.or email
14d0: 20 74 6f 20 61 20 63 6f 6c 6c 65 61 67 75 65 2e   to a colleague.
14e0: 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69  .</p>.</li>..<li
14f0: 3e 3c 70 3e 3c 62 3e 53 74 61 6e 64 2d 69 6e 20  ><p><b>Stand-in 
1500: 66 6f 72 20 61 6e 20 65 6e 74 65 72 70 72 69 73  for an enterpris
1510: 65 20 64 61 74 61 62 61 73 65 20 64 75 72 69 6e  e database durin
1520: 67 20 64 65 6d 6f 73 20 6f 72 20 74 65 73 74 69  g demos or testi
1530: 6e 67 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ng</b></p>..<p>.
1540: 49 66 20 79 6f 75 20 61 72 65 20 77 72 69 74 69  If you are writi
1550: 6e 67 20 61 20 63 6c 69 65 6e 74 20 61 70 70 6c  ng a client appl
1560: 69 63 61 74 69 6f 6e 20 66 6f 72 20 61 6e 20 65  ication for an e
1570: 6e 74 65 72 70 72 69 73 65 20 64 61 74 61 62 61  nterprise databa
1580: 73 65 20 65 6e 67 69 6e 65 2c 0a 69 74 20 6d 61  se engine,.it ma
1590: 6b 65 73 20 73 65 6e 73 65 20 74 6f 20 75 73 65  kes sense to use
15a0: 20 61 20 67 65 6e 65 72 69 63 20 64 61 74 61 62   a generic datab
15b0: 61 73 65 20 62 61 63 6b 65 6e 64 20 74 68 61 74  ase backend that
15c0: 20 61 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 63   allows you to c
15d0: 6f 6e 6e 65 63 74 0a 74 6f 20 6d 61 6e 79 20 64  onnect.to many d
15e0: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
15f0: 66 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  f SQL database e
1600: 6e 67 69 6e 65 73 2e 20 20 49 74 20 6d 61 6b 65  ngines.  It make
1610: 73 20 65 76 65 6e 20 62 65 74 74 65 72 0a 73 65  s even better.se
1620: 6e 73 65 20 74 6f 0a 67 6f 20 61 68 65 61 64 20  nse to.go ahead 
1630: 61 6e 64 20 69 6e 63 6c 75 64 65 20 53 51 4c 69  and include SQLi
1640: 74 65 20 69 6e 20 74 68 65 20 6d 69 78 20 6f 66  te in the mix of
1650: 20 73 75 70 70 6f 72 74 65 64 20 64 61 74 61 62   supported datab
1660: 61 73 65 20 61 6e 64 20 74 6f 20 73 74 61 74 69  ase and to stati
1670: 63 61 6c 6c 79 0a 6c 69 6e 6b 20 74 68 65 20 53  cally.link the S
1680: 51 4c 69 74 65 20 65 6e 67 69 6e 65 20 69 6e 20  QLite engine in 
1690: 77 69 74 68 20 74 68 65 20 63 6c 69 65 6e 74 2e  with the client.
16a0: 20 20 54 68 61 74 20 77 61 79 20 74 68 65 20 63    That way the c
16b0: 6c 69 65 6e 74 20 70 72 6f 67 72 61 6d 0a 63 61  lient program.ca
16c0: 6e 20 62 65 20 75 73 65 64 20 73 74 61 6e 64 61  n be used standa
16d0: 6c 6f 6e 65 20 77 69 74 68 20 61 6e 20 53 51 4c  lone with an SQL
16e0: 69 74 65 20 64 61 74 61 20 66 69 6c 65 20 66 6f  ite data file fo
16f0: 72 20 74 65 73 74 69 6e 67 20 6f 72 20 66 6f 72  r testing or for
1700: 0a 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 73 2e  .demonstrations.
1710: 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69  .</p>.</li>..<li
1720: 3e 3c 70 3e 3c 62 3e 44 61 74 61 62 61 73 65 20  ><p><b>Database 
1730: 50 65 64 61 67 6f 67 79 3c 2f 62 3e 3c 2f 70 3e  Pedagogy</b></p>
1740: 0a 0a 3c 70 3e 0a 42 65 63 61 75 73 65 20 69 74  ..<p>.Because it
1750: 20 69 73 20 73 69 6d 70 6c 65 20 74 6f 20 73 65   is simple to se
1760: 74 75 70 20 61 6e 64 20 75 73 65 20 28 69 6e 73  tup and use (ins
1770: 74 61 6c 6c 61 74 69 6f 6e 20 69 73 20 74 72 69  tallation is tri
1780: 76 69 61 6c 3a 20 6a 75 73 74 0a 63 6f 70 79 20  vial: just.copy 
1790: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 3c 2f 62  the <b>sqlite</b
17a0: 3e 20 6f 72 20 3c 62 3e 73 71 6c 69 74 65 2e 65  > or <b>sqlite.e
17b0: 78 65 3c 2f 62 3e 20 65 78 65 63 75 74 61 62 6c  xe</b> executabl
17c0: 65 20 74 6f 20 74 68 65 20 74 61 72 67 65 74 20  e to the target 
17d0: 6d 61 63 68 69 6e 65 0a 61 6e 64 20 72 75 6e 20  machine.and run 
17e0: 69 74 29 20 53 51 4c 69 74 65 20 6d 61 6b 65 73  it) SQLite makes
17f0: 20 61 20 67 6f 6f 64 20 64 61 74 61 62 61 73 65   a good database
1800: 20 65 6e 67 69 6e 65 20 66 6f 72 20 75 73 65 20   engine for use 
1810: 69 6e 20 74 65 61 63 68 69 6e 67 20 53 51 4c 2e  in teaching SQL.
1820: 0a 53 74 75 64 65 6e 74 73 20 63 61 6e 20 65 61  .Students can ea
1830: 73 69 6c 79 20 63 72 65 61 74 65 20 61 73 20 6d  sily create as m
1840: 61 6e 79 20 64 61 74 61 62 61 73 65 73 20 61 73  any databases as
1850: 20 74 68 65 79 20 6c 69 6b 65 20 61 6e 64 20 63   they like and c
1860: 61 6e 0a 65 6d 61 69 6c 20 64 61 74 61 62 61 73  an.email databas
1870: 65 73 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  es to the instru
1880: 63 74 6f 72 20 66 6f 72 20 63 6f 6d 6d 65 6e 74  ctor for comment
1890: 73 20 6f 72 20 67 72 61 64 69 6e 67 2e 20 20 46  s or grading.  F
18a0: 6f 72 20 6d 6f 72 65 0a 61 64 76 61 6e 63 65 64  or more.advanced
18b0: 20 73 74 75 64 65 6e 74 73 20 77 68 6f 20 61 72   students who ar
18c0: 65 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  e interested in 
18d0: 73 74 75 64 79 69 6e 67 20 68 6f 77 20 61 6e 20  studying how an 
18e0: 52 44 42 4d 53 20 69 73 0a 69 6d 70 6c 65 6d 65  RDBMS is.impleme
18f0: 6e 74 65 64 2c 20 74 68 65 20 6d 6f 64 75 6c 61  nted, the modula
1900: 72 20 61 6e 64 20 77 65 6c 6c 2d 63 6f 6d 6d 65  r and well-comme
1910: 6e 74 65 64 20 61 6e 64 20 64 6f 63 75 6d 65 6e  nted and documen
1920: 74 65 64 20 53 51 4c 69 74 65 20 63 6f 64 65 0a  ted SQLite code.
1930: 63 61 6e 20 73 65 72 76 65 20 61 73 20 61 20 67  can serve as a g
1940: 6f 6f 64 20 62 61 73 69 73 2e 20 20 54 68 69 73  ood basis.  This
1950: 20 69 73 20 6e 6f 74 20 74 6f 20 73 61 79 20 74   is not to say t
1960: 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 61 6e  hat SQLite is an
1970: 20 61 63 63 75 72 61 74 65 0a 6d 6f 64 65 6c 20   accurate.model 
1980: 6f 66 20 68 6f 77 20 6f 74 68 65 72 20 64 61 74  of how other dat
1990: 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 61 72  abase engines ar
19a0: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20 62  e implemented, b
19b0: 75 74 20 72 61 74 68 65 72 20 61 20 73 74 75 64  ut rather a stud
19c0: 65 6e 74 20 77 68 6f 0a 75 6e 64 65 72 73 74 61  ent who.understa
19d0: 6e 64 73 20 68 6f 77 20 53 51 4c 69 74 65 20 77  nds how SQLite w
19e0: 6f 72 6b 73 20 63 61 6e 20 6d 6f 72 65 20 71 75  orks can more qu
19f0: 69 63 6b 6c 79 20 63 6f 6d 70 72 65 68 65 6e 64  ickly comprehend
1a00: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 61 6c   the operational
1a10: 0a 70 72 69 6e 63 69 70 6c 65 73 20 6f 66 20 6f  .principles of o
1a20: 74 68 65 72 20 73 79 73 74 65 6d 73 2e 0a 3c 2f  ther systems..</
1a30: 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  p>.</li>..<li><p
1a40: 3e 3c 62 3e 45 78 70 65 72 69 6d 65 6e 74 61 6c  ><b>Experimental
1a50: 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 65 78   SQL language ex
1a60: 74 65 6e 73 69 6f 6e 73 3c 2f 62 3e 3c 2f 70 3e  tensions</b></p>
1a70: 0a 0a 3c 70 3e 54 68 65 20 73 69 6d 70 6c 65 2c  ..<p>The simple,
1a80: 20 6d 6f 64 75 6c 61 72 20 64 65 73 69 67 6e 20   modular design 
1a90: 6f 66 20 53 51 4c 69 74 65 20 6d 61 6b 65 73 20  of SQLite makes 
1aa0: 69 74 20 61 20 67 6f 6f 64 20 70 6c 61 74 66 6f  it a good platfo
1ab0: 72 6d 20 66 6f 72 0a 70 72 6f 74 6f 74 79 70 69  rm for.prototypi
1ac0: 6e 67 20 6e 65 77 2c 20 65 78 70 65 72 69 6d 65  ng new, experime
1ad0: 6e 74 61 6c 20 64 61 74 61 62 61 73 65 20 6c 61  ntal database la
1ae0: 6e 67 75 61 67 65 20 66 65 61 74 75 72 65 73 20  nguage features 
1af0: 6f 72 20 69 64 65 61 73 2e 0a 3c 2f 70 3e 0a 3c  or ideas..</p>.<
1b00: 2f 6c 69 3e 0a 0a 0a 3c 2f 75 6c 3e 0a 0a 3c 68  /li>...</ul>..<h
1b10: 32 3e 53 69 74 75 61 74 69 6f 6e 73 20 57 68 65  2>Situations Whe
1b20: 72 65 20 41 6e 6f 74 68 65 72 20 52 44 42 4d 53  re Another RDBMS
1b30: 20 4d 61 79 20 57 6f 72 6b 20 42 65 74 74 65 72   May Work Better
1b40: 3c 2f 68 32 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  </h2>..<ul>.<li>
1b50: 3c 70 3e 3c 62 3e 43 6c 69 65 6e 74 2f 53 65 72  <p><b>Client/Ser
1b60: 76 65 72 20 41 70 70 6c 69 63 61 74 69 6f 6e 73  ver Applications
1b70: 3c 2f 62 3e 3c 70 3e 0a 0a 3c 70 3e 49 66 20 79  </b><p>..<p>If y
1b80: 6f 75 20 68 61 76 65 20 6d 61 6e 79 20 63 6c 69  ou have many cli
1b90: 65 6e 74 20 70 72 6f 67 72 61 6d 73 20 61 63 63  ent programs acc
1ba0: 65 73 73 69 6e 67 20 61 20 63 6f 6d 6d 6f 6e 20  essing a common 
1bb0: 64 61 74 61 62 61 73 65 0a 6f 76 65 72 20 61 20  database.over a 
1bc0: 6e 65 74 77 6f 72 6b 2c 20 79 6f 75 20 73 68 6f  network, you sho
1bd0: 75 6c 64 20 63 6f 6e 73 69 64 65 72 20 75 73 69  uld consider usi
1be0: 6e 67 20 61 20 63 6c 69 65 6e 74 2f 73 65 72 76  ng a client/serv
1bf0: 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69  er database.engi
1c00: 6e 65 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51  ne instead of SQ
1c10: 4c 69 74 65 2e 20 20 53 51 4c 69 74 65 20 77 69  Lite.  SQLite wi
1c20: 6c 6c 20 77 6f 72 6b 20 6f 76 65 72 20 61 20 6e  ll work over a n
1c30: 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65  etwork filesyste
1c40: 6d 2c 0a 62 75 74 20 62 65 63 61 75 73 65 20 6f  m,.but because o
1c50: 66 20 74 68 65 20 6c 61 74 65 6e 63 79 20 61 73  f the latency as
1c60: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 6d 6f  sociated with mo
1c70: 73 74 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73  st network files
1c80: 79 73 74 65 6d 73 2c 0a 70 65 72 66 6f 72 6d 61  ystems,.performa
1c90: 6e 63 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  nce will not be 
1ca0: 67 72 65 61 74 2e 20 20 41 6c 73 6f 2c 20 74 68  great.  Also, th
1cb0: 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 6c  e file locking l
1cc0: 6f 67 69 63 20 6f 66 0a 6d 61 6e 79 20 6e 65 74  ogic of.many net
1cd0: 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 73  work filesystems
1ce0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1cf0: 63 6f 6e 74 61 69 6e 73 20 62 75 67 73 20 28 6f  contains bugs (o
1d00: 6e 20 62 6f 74 68 20 55 6e 69 78 0a 61 6e 64 20  n both Unix.and 
1d10: 77 69 6e 64 6f 77 73 29 2e 20 20 49 66 20 66 69  windows).  If fi
1d20: 6c 65 20 6c 6f 63 6b 69 6e 67 20 64 6f 65 73 20  le locking does 
1d30: 6e 6f 74 20 77 6f 72 6b 20 6c 69 6b 65 20 69 74  not work like it
1d40: 20 73 68 6f 75 6c 64 2c 0a 69 74 20 6d 69 67 68   should,.it migh
1d50: 74 20 62 65 20 70 6f 73 73 69 62 6c 65 20 66 6f  t be possible fo
1d60: 72 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 63 6c  r two or more cl
1d70: 69 65 6e 74 20 70 72 6f 67 72 61 6d 73 20 74 6f  ient programs to
1d80: 20 6d 6f 64 69 66 79 20 74 68 65 0a 73 61 6d 65   modify the.same
1d90: 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 61 6d   part of the sam
1da0: 65 20 64 61 74 61 62 61 73 65 20 61 74 20 74 68  e database at th
1db0: 65 20 73 61 6d 65 20 74 69 6d 65 2c 20 72 65 73  e same time, res
1dc0: 75 6c 74 69 6e 67 20 69 6e 20 0a 64 61 74 61 62  ulting in .datab
1dd0: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ase corruption. 
1de0: 20 42 65 63 61 75 73 65 20 74 68 69 73 20 70 72   Because this pr
1df0: 6f 62 6c 65 6d 20 72 65 73 75 6c 74 73 20 66 72  oblem results fr
1e00: 6f 6d 20 62 75 67 73 20 69 6e 0a 74 68 65 20 75  om bugs in.the u
1e10: 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79  nderlying filesy
1e20: 73 74 65 6d 20 69 6d 70 6c 65 6d 65 6e 74 61 74  stem implementat
1e30: 69 6f 6e 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ion, there is no
1e40: 74 68 69 6e 67 20 53 51 4c 69 74 65 0a 63 61 6e  thing SQLite.can
1e50: 20 64 6f 20 74 6f 20 70 72 65 76 65 6e 74 20 69   do to prevent i
1e60: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 67 6f 6f  t.</p>..<p>A goo
1e70: 64 20 72 75 6c 65 20 6f 66 20 74 68 75 6d 62 20  d rule of thumb 
1e80: 69 73 20 74 68 61 74 20 79 6f 75 20 73 68 6f 75  is that you shou
1e90: 6c 64 20 61 76 6f 69 64 20 75 73 69 6e 67 20 53  ld avoid using S
1ea0: 51 4c 69 74 65 0a 69 6e 20 73 69 74 75 61 74 69  QLite.in situati
1eb0: 6f 6e 73 20 77 68 65 72 65 20 74 68 65 20 73 61  ons where the sa
1ec0: 6d 65 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c  me database will
1ed0: 20 62 65 20 61 63 63 65 73 73 65 64 20 73 69 6d   be accessed sim
1ee0: 75 6c 74 61 6e 65 6f 75 73 6c 79 0a 66 72 6f 6d  ultaneously.from
1ef0: 20 6d 61 6e 79 20 63 6f 6d 70 75 74 65 72 73 20   many computers 
1f00: 6f 76 65 72 20 61 20 6e 65 74 77 6f 72 6b 20 66  over a network f
1f10: 69 6c 65 73 79 73 74 65 6d 2e 3c 2f 70 3e 0a 3c  ilesystem.</p>.<
1f20: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
1f30: 48 69 67 68 2d 76 6f 6c 75 6d 65 20 57 65 62 73  High-volume Webs
1f40: 69 74 65 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70  ites</b></p>..<p
1f50: 3e 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 72  >SQLite will nor
1f60: 6d 61 6c 6c 79 20 77 6f 72 6b 20 66 69 6e 65 20  mally work fine 
1f70: 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
1f80: 62 61 63 6b 65 6e 64 20 74 6f 20 61 20 77 65 62  backend to a web
1f90: 73 69 74 65 2e 0a 42 75 74 20 69 66 20 79 6f 75  site..But if you
1fa0: 20 77 65 62 73 69 74 65 20 69 73 20 73 6f 20 62   website is so b
1fb0: 75 73 79 20 74 68 61 74 20 79 6f 75 72 20 61 72  usy that your ar
1fc0: 65 20 74 68 69 6e 6b 69 6e 67 20 6f 66 20 73 70  e thinking of sp
1fd0: 6c 69 74 74 69 6e 67 20 74 68 65 0a 64 61 74 61  litting the.data
1fe0: 62 61 73 65 20 63 6f 6d 70 6f 6e 65 6e 74 20 6f  base component o
1ff0: 66 66 20 6f 6e 74 6f 20 61 20 73 65 70 61 72 61  ff onto a separa
2000: 74 65 20 6d 61 63 68 69 6e 65 2c 20 74 68 65 6e  te machine, then
2010: 20 79 6f 75 20 73 68 6f 75 6c 64 20 0a 64 65 66   you should .def
2020: 69 6e 69 74 65 6c 79 20 63 6f 6e 73 69 64 65 72  initely consider
2030: 20 75 73 69 6e 67 20 61 6e 20 65 6e 74 65 72 70   using an enterp
2040: 72 69 73 65 2d 63 6c 61 73 73 20 63 6c 69 65 6e  rise-class clien
2050: 74 2f 73 65 72 76 65 72 20 64 61 74 61 62 61 73  t/server databas
2060: 65 0a 65 6e 67 69 6e 65 20 69 6e 73 74 65 61 64  e.engine instead
2070: 20 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a   of SQLite.</p>.
2080: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  </li>..<li><p><b
2090: 3e 56 65 72 79 20 6c 61 72 67 65 20 64 61 74 61  >Very large data
20a0: 73 65 74 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70  sets</b></p>..<p
20b0: 3e 57 68 65 6e 20 79 6f 75 20 73 74 61 72 74 20  >When you start 
20c0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e  a transaction in
20d0: 20 53 51 4c 69 74 65 20 28 77 68 69 63 68 20 68   SQLite (which h
20e0: 61 70 70 65 6e 73 20 61 75 74 6f 6d 61 74 69 63  appens automatic
20f0: 61 6c 6c 79 0a 62 65 66 6f 72 65 20 61 6e 79 20  ally.before any 
2100: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 20  write operation 
2110: 74 68 61 74 20 69 73 20 6e 6f 74 20 77 69 74 68  that is not with
2120: 69 6e 20 61 6e 20 65 78 70 6c 69 63 69 74 20 42  in an explicit B
2130: 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49 54 29 0a 74  EGIN...COMMIT).t
2140: 68 65 20 65 6e 67 69 6e 65 20 68 61 73 20 74 6f  he engine has to
2150: 20 61 6c 6c 6f 63 61 74 65 20 61 20 62 69 74 6d   allocate a bitm
2160: 61 70 20 6f 66 20 64 69 72 74 79 20 70 61 67 65  ap of dirty page
2170: 73 20 69 6e 20 74 68 65 20 64 69 73 6b 20 66 69  s in the disk fi
2180: 6c 65 20 74 6f 0a 68 65 6c 70 20 69 74 20 6d 61  le to.help it ma
2190: 6e 61 67 65 20 69 74 73 20 72 6f 6c 6c 62 61 63  nage its rollbac
21a0: 6b 20 6a 6f 75 72 6e 61 6c 2e 20 20 53 51 4c 69  k journal.  SQLi
21b0: 74 65 20 6e 65 65 64 73 20 32 35 36 20 62 79 74  te needs 256 byt
21c0: 65 73 20 6f 66 20 52 41 4d 20 66 6f 72 0a 65 76  es of RAM for.ev
21d0: 65 72 79 20 31 4d 42 20 6f 66 20 64 61 74 61 62  ery 1MB of datab
21e0: 61 73 65 2e 20 20 46 6f 72 20 73 6d 61 6c 6c 65  ase.  For smalle
21f0: 72 20 64 61 74 61 62 61 73 65 73 2c 20 74 68 65  r databases, the
2200: 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72   amount of memor
2210: 79 0a 72 65 71 75 69 72 65 64 20 69 73 20 6e 6f  y.required is no
2220: 74 20 61 20 70 72 6f 62 6c 65 6d 2c 20 62 75 74  t a problem, but
2230: 20 77 68 65 6e 20 64 61 74 61 62 61 73 65 20 62   when database b
2240: 65 67 69 6e 20 74 6f 20 67 72 6f 77 20 69 6e 74  egin to grow int
2250: 6f 20 74 68 65 0a 6d 75 6c 74 69 2d 67 69 67 61  o the.multi-giga
2260: 62 79 74 65 20 72 61 6e 67 65 2c 20 74 68 65 20  byte range, the 
2270: 73 69 7a 65 20 6f 66 20 74 68 65 20 62 69 74 6d  size of the bitm
2280: 61 70 20 63 61 6e 20 67 65 74 20 71 75 69 74 65  ap can get quite
2290: 20 6c 61 72 67 65 2e 20 20 49 66 0a 79 6f 75 20   large.  If.you 
22a0: 6e 65 65 64 20 74 6f 20 73 74 6f 72 65 20 61 6e  need to store an
22b0: 64 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  d modify more th
22c0: 61 6e 20 61 20 66 65 77 20 64 6f 7a 65 6e 20 47  an a few dozen G
22d0: 42 20 6f 66 20 64 61 74 61 2c 20 79 6f 75 20 73  B of data, you s
22e0: 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20 75  hould.consider u
22f0: 73 69 6e 67 20 61 20 64 69 66 66 65 72 65 6e 74  sing a different
2300: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
2310: 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c  ..</p>.</li>..<l
2320: 69 3e 3c 70 3e 3c 62 3e 48 69 67 68 20 43 6f 6e  i><p><b>High Con
2330: 63 75 72 72 65 6e 63 79 3c 2f 62 3e 3c 2f 70 3e  currency</b></p>
2340: 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 75 73 65  ..<p>.SQLite use
2350: 73 20 72 65 61 64 65 72 2f 77 72 69 74 65 72 20  s reader/writer 
2360: 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 20 65 6e 74  locks on the ent
2370: 69 72 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ire database fil
2380: 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73 0a 69  e.  That means.i
2390: 66 20 61 6e 79 20 70 72 6f 63 65 73 73 20 69 73  f any process is
23a0: 20 72 65 61 64 69 6e 67 20 66 72 6f 6d 20 61 6e   reading from an
23b0: 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 64 61  y part of the da
23c0: 74 61 62 61 73 65 2c 20 61 6c 6c 20 6f 74 68 65  tabase, all othe
23d0: 72 0a 70 72 6f 63 65 73 73 65 73 20 61 72 65 20  r.processes are 
23e0: 70 72 65 76 65 6e 74 65 64 20 66 72 6f 6d 20 77  prevented from w
23f0: 72 69 74 69 6e 67 20 61 6e 79 20 6f 74 68 65 72  riting any other
2400: 20 70 61 72 74 20 6f 66 20 74 68 65 20 64 61 74   part of the dat
2410: 61 62 61 73 65 2e 0a 53 69 6d 69 6c 61 72 6c 79  abase..Similarly
2420: 2c 20 69 66 20 61 6e 79 20 6f 6e 65 20 70 72 6f  , if any one pro
2430: 63 65 73 73 20 69 73 20 77 72 69 74 69 6e 67 20  cess is writing 
2440: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  to the database,
2450: 0a 61 6c 6c 20 6f 74 68 65 72 20 70 72 6f 63 65  .all other proce
2460: 73 73 65 73 20 61 72 65 20 70 72 65 76 65 6e 74  sses are prevent
2470: 65 64 20 66 72 6f 6d 20 72 65 61 64 69 6e 67 20  ed from reading 
2480: 61 6e 79 20 6f 74 68 65 72 20 70 61 72 74 20 6f  any other part o
2490: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 2e 0a  f the.database..
24a0: 46 6f 72 20 6d 61 6e 79 20 73 69 74 75 61 74 69  For many situati
24b0: 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e 6f 74  ons, this is not
24c0: 20 61 20 70 72 6f 62 6c 65 6d 2e 20 20 45 61 63   a problem.  Eac
24d0: 68 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 6f  h application.do
24e0: 65 73 20 69 74 73 20 64 61 74 61 62 61 73 65 20  es its database 
24f0: 77 6f 72 6b 20 71 75 69 63 6b 6c 79 20 61 6e 64  work quickly and
2500: 20 6d 6f 76 65 73 20 6f 6e 2c 20 61 6e 64 20 6e   moves on, and n
2510: 6f 20 6c 6f 63 6b 20 6c 61 73 74 73 20 66 6f 72  o lock lasts for
2520: 20 6d 6f 72 65 0a 74 68 61 6e 20 61 20 66 65 77   more.than a few
2530: 20 64 6f 7a 65 6e 20 6d 69 6c 6c 69 73 65 63 6f   dozen milliseco
2540: 6e 64 73 2e 20 20 42 75 74 20 74 68 65 72 65 20  nds.  But there 
2550: 61 72 65 20 73 6f 6d 65 20 61 70 70 6c 69 63 61  are some applica
2560: 74 69 6f 6e 73 20 74 68 61 74 20 72 65 71 75 69  tions that requi
2570: 72 65 0a 6d 6f 72 65 20 63 6f 6e 63 75 72 72 65  re.more concurre
2580: 6e 63 79 2c 20 61 6e 64 20 74 68 6f 73 65 20 61  ncy, and those a
2590: 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20  pplications may 
25a0: 6e 65 65 64 20 74 6f 20 73 65 65 6b 20 61 20 64  need to seek a d
25b0: 69 66 66 65 72 65 6e 74 0a 73 6f 6c 75 74 69 6f  ifferent.solutio
25c0: 6e 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c  n..</p>.</li>..<
25d0: 2f 75 6c 3e 0a 0a 7d 0a 66 6f 6f 74 65 72 20 24  /ul>..}.footer $
25e0: 72 63 73 69 64 0a                                rcsid.