/ Hex Artifact Content
Login

Artifact a8335bce47cc2fddb07f19052cb0cb4d9129a8e4:


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 31 20 32 30 30 34 2f 30 31 2f  l,v 1.1 2004/01/
0070: 32 37 20 31 35 3a 35 38 3a 33 38 20 64 72 68 20  27 15:58:38 drh 
0080: 45 78 70 20 24 7d 0a 0a 70 75 74 73 20 7b 3c 68  Exp $}..puts {<h
0090: 74 6d 6c 3e 0a 3c 68 65 61 64 3e 3c 74 69 74 6c  tml>.<head><titl
00a0: 65 3e 41 70 70 72 6f 70 72 69 61 74 65 20 55 73  e>Appropriate Us
00b0: 65 73 20 6f 66 20 53 51 4c 69 74 65 3c 2f 74 69  es of SQLite</ti
00c0: 74 6c 65 3e 3c 2f 68 65 61 64 3e 0a 3c 62 6f 64  tle></head>.<bod
00d0: 79 20 62 67 63 6f 6c 6f 72 3d 77 68 69 74 65 3e  y bgcolor=white>
00e0: 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65 6e 74 65  .<h1 align=cente
00f0: 72 3e 41 70 70 72 6f 70 72 69 61 74 65 20 55 73  r>Appropriate Us
0100: 65 73 20 4f 66 20 53 51 4c 69 74 65 3c 2f 68 31  es Of SQLite</h1
0110: 3e 0a 7d 0a 70 75 74 73 20 22 3c 70 20 61 6c 69  >.}.puts "<p ali
0120: 67 6e 3d 63 65 6e 74 65 72 3e 0a 28 54 68 69 73  gn=center>.(This
0130: 20 70 61 67 65 20 77 61 73 20 6c 61 73 74 20 6d   page was last m
0140: 6f 64 69 66 69 65 64 20 6f 6e 20 5b 6c 72 61 6e  odified on [lran
0150: 67 65 20 24 72 63 73 69 64 20 33 20 34 5d 20 55  ge $rcsid 3 4] U
0160: 54 43 29 0a 3c 2f 70 3e 22 0a 0a 70 75 74 73 20  TC).</p>"..puts 
0170: 7b 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 69 73 20  {.<p>.SQLite is 
0180: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 6d  different from m
0190: 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61  ost other SQL da
01a0: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
01b0: 6e 20 74 68 61 74 20 69 74 73 0a 70 72 69 6d 61  n that its.prima
01c0: 72 79 20 64 65 73 69 67 6e 20 67 6f 61 6c 20 69  ry design goal i
01d0: 73 20 74 6f 20 62 65 20 73 69 6d 70 6c 65 3a 0a  s to be simple:.
01e0: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 53  </p>..<ul>.<li>S
01f0: 69 6d 70 6c 65 20 74 6f 20 61 64 6d 69 6e 69 73  imple to adminis
0200: 74 65 72 3c 2f 6c 69 3e 0a 3c 6c 69 3e 53 69 6d  ter</li>.<li>Sim
0210: 70 6c 65 20 74 6f 20 6f 70 65 72 61 74 65 3c 2f  ple to operate</
0220: 6c 69 3e 0a 3c 6c 69 3e 53 69 6d 70 6c 65 20 74  li>.<li>Simple t
0230: 6f 20 75 73 65 20 69 6e 20 61 20 70 72 6f 67 72  o use in a progr
0240: 61 6d 3c 2f 6c 69 3e 0a 3c 6c 69 3e 53 69 6d 70  am</li>.<li>Simp
0250: 6c 65 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20 61  le to maintain a
0260: 6e 64 20 63 75 73 74 6f 6d 69 7a 65 3c 2f 6c 69  nd customize</li
0270: 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 0a 4d 61 6e  >.</ul>..<p>.Man
0280: 79 20 70 65 6f 70 6c 65 20 6c 69 6b 65 20 53 51  y people like SQ
0290: 4c 69 74 65 20 62 65 63 61 75 73 65 20 69 74 20  Lite because it 
02a0: 69 73 20 73 6d 61 6c 6c 20 61 6e 64 20 66 61 73  is small and fas
02b0: 74 2e 20 20 42 75 74 20 74 68 6f 73 65 0a 71 75  t.  But those.qu
02c0: 61 6c 69 74 69 65 73 20 61 72 65 20 6a 75 73 74  alities are just
02d0: 20 68 61 70 70 79 20 61 63 63 69 64 65 6e 74 73   happy accidents
02e0: 2e 0a 55 73 65 72 73 20 61 6c 73 6f 20 66 69 6e  ..Users also fin
02f0: 64 20 74 68 61 74 20 53 51 4c 69 74 65 20 69 73  d that SQLite is
0300: 20 76 65 72 79 20 72 65 6c 69 61 62 6c 65 2e 20   very reliable. 
0310: 20 52 65 6c 69 61 62 69 6c 69 74 79 20 69 73 0a   Reliability is.
0320: 61 20 63 6f 6e 73 65 71 75 65 6e 63 65 20 6f 66  a consequence of
0330: 20 73 69 6d 70 6c 69 63 69 74 79 2e 20 20 57 69   simplicity.  Wi
0340: 74 68 20 6c 65 73 73 20 63 6f 6d 70 6c 69 63 61  th less complica
0350: 74 69 6f 6e 2c 20 74 68 65 72 65 20 69 73 0a 6c  tion, there is.l
0360: 65 73 73 20 74 6f 20 67 6f 20 77 72 6f 6e 67 2e  ess to go wrong.
0370: 20 20 53 6f 2c 20 79 65 73 2c 20 53 51 4c 69 74    So, yes, SQLit
0380: 65 20 69 73 20 73 6d 61 6c 6c 2c 20 66 61 73 74  e is small, fast
0390: 2c 20 61 6e 64 20 72 65 6c 69 61 62 6c 65 2c 0a  , and reliable,.
03a0: 62 75 74 20 66 69 72 73 74 20 61 6e 64 20 66 6f  but first and fo
03b0: 72 65 6d 6f 73 74 2c 20 53 51 4c 69 74 65 20 73  remost, SQLite s
03c0: 74 72 69 76 65 73 20 74 6f 20 62 65 20 73 69 6d  trives to be sim
03d0: 70 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  ple..</p>..<p>.S
03e0: 69 6d 70 6c 69 63 69 74 79 20 69 6e 20 61 20 64  implicity in a d
03f0: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 63  atabase engine c
0400: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 73  an be either a s
0410: 74 72 65 6e 67 74 68 20 6f 72 20 61 0a 77 65 61  trength or a.wea
0420: 6b 6e 65 73 73 2c 20 64 65 70 65 6e 64 69 6e 67  kness, depending
0430: 20 6f 6e 20 77 68 61 74 20 79 6f 75 20 61 72 65   on what you are
0440: 20 74 72 79 69 6e 67 20 74 6f 20 64 6f 2e 20 20   trying to do.  
0450: 49 6e 20 6f 72 64 65 72 20 74 6f 0a 61 63 68 69  In order to.achi
0460: 65 76 65 20 73 69 6d 70 6c 69 63 69 74 79 2c 20  eve simplicity, 
0470: 53 51 4c 69 74 65 20 68 61 73 20 68 61 64 20 74  SQLite has had t
0480: 6f 20 73 61 63 72 69 66 69 63 65 20 6f 74 68 65  o sacrifice othe
0490: 72 20 63 68 61 72 61 63 74 65 72 69 73 74 69 63  r characteristic
04a0: 73 0a 74 68 61 74 20 73 6f 6d 65 20 70 65 6f 70  s.that some peop
04b0: 6c 65 20 66 69 6e 64 20 75 73 65 66 75 6c 2c 20  le find useful, 
04c0: 73 75 63 68 20 61 73 20 68 69 67 68 20 63 6f 6e  such as high con
04d0: 63 75 72 72 61 6e 63 79 2c 20 66 69 6e 65 2d 67  currancy, fine-g
04e0: 72 61 69 6e 65 64 0a 61 63 63 65 73 73 20 63 6f  rained.access co
04f0: 6e 74 72 6f 6c 2c 20 61 20 72 69 63 68 20 73 65  ntrol, a rich se
0500: 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20 66 75  t of built-in fu
0510: 6e 63 74 69 6f 6e 73 2c 20 73 74 6f 72 65 64 20  nctions, stored 
0520: 70 72 6f 63 65 64 75 72 65 73 2c 0a 65 73 6f 74  procedures,.esot
0530: 65 72 69 63 20 53 51 4c 20 6c 61 6e 67 75 61 67  eric SQL languag
0540: 65 20 66 65 61 74 75 72 65 73 2c 20 58 4d 4c 20  e features, XML 
0550: 61 6e 64 2f 6f 72 20 4a 61 76 61 20 65 78 74 65  and/or Java exte
0560: 6e 73 69 6f 6e 73 2c 0a 74 65 72 61 2d 20 6f 72  nsions,.tera- or
0570: 20 70 65 74 61 2d 62 79 74 65 20 73 63 61 6c 61   peta-byte scala
0580: 62 69 6c 69 74 79 2c 20 61 6e 64 20 73 6f 20 66  bility, and so f
0590: 6f 72 74 68 2e 20 20 49 66 20 79 6f 75 20 6e 65  orth.  If you ne
05a0: 65 64 20 74 68 65 73 65 0a 6b 69 6e 64 73 20 6f  ed these.kinds o
05b0: 66 20 66 65 61 74 75 72 65 73 20 61 6e 64 20 64  f features and d
05c0: 6f 6e 27 74 20 6d 69 6e 64 20 74 68 65 20 61 64  on't mind the ad
05d0: 64 65 64 20 63 6f 6d 70 6c 65 78 69 74 79 20 74  ded complexity t
05e0: 68 61 74 20 74 68 65 79 0a 62 72 69 6e 67 2c 20  hat they.bring, 
05f0: 74 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 70  then SQLite is p
0600: 72 6f 62 61 62 6c 79 20 6e 6f 74 20 74 68 65 20  robably not the 
0610: 64 61 74 61 62 61 73 65 20 66 6f 72 20 79 6f 75  database for you
0620: 2e 0a 53 51 4c 69 74 65 20 69 73 20 6e 6f 74 20  ..SQLite is not 
0630: 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 61  intended to be a
0640: 6e 20 65 6e 74 65 72 70 72 69 73 65 20 64 61 74  n enterprise dat
0650: 61 62 61 73 65 20 65 6e 67 69 6e 65 2e 20 20 49  abase engine.  I
0660: 74 0a 6e 6f 74 20 64 65 73 69 67 6e 65 64 20 74  t.not designed t
0670: 6f 20 63 6f 6d 70 65 74 65 20 77 69 74 68 20 4f  o compete with O
0680: 72 61 63 6c 65 20 6f 72 20 50 6f 73 74 67 72 65  racle or Postgre
0690: 53 51 4c 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54  SQL..</p>..<p>.T
06a0: 68 65 20 62 61 73 69 63 20 72 75 6c 65 20 6f 66  he basic rule of
06b0: 20 74 68 75 6d 62 20 66 6f 72 20 77 68 65 6e 20   thumb for when 
06c0: 69 74 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  it is appropriat
06d0: 65 20 74 6f 20 75 73 65 20 53 51 4c 69 74 65 20  e to use SQLite 
06e0: 69 73 0a 74 68 69 73 3a 20 20 55 73 65 20 53 51  is.this:  Use SQ
06f0: 4c 69 74 65 20 69 6e 20 73 69 74 75 61 74 69 6f  Lite in situatio
0700: 6e 73 20 77 68 65 72 65 20 73 69 6d 70 6c 69 63  ns where simplic
0710: 69 74 79 20 6f 66 20 61 64 6d 69 6e 69 73 74 72  ity of administr
0720: 61 74 69 6f 6e 2c 0a 69 6d 70 6c 65 6d 65 6e 74  ation,.implement
0730: 61 74 69 6f 6e 2c 20 61 6e 64 20 6d 61 69 6e 74  ation, and maint
0740: 65 6e 61 6e 63 65 20 61 72 65 20 6d 6f 72 65 20  enance are more 
0750: 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 6e 20 74  important than t
0760: 68 65 20 63 6f 75 6e 74 6c 65 73 73 0a 63 6f 6d  he countless.com
0770: 70 6c 65 78 20 66 65 61 74 75 72 65 73 20 74 68  plex features th
0780: 61 74 20 65 6e 74 65 72 70 72 69 73 65 20 64 61  at enterprise da
0790: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 70  tabase engines p
07a0: 72 6f 76 69 64 65 2e 0a 41 73 20 69 74 20 74 75  rovide..As it tu
07b0: 72 6e 73 20 6f 75 74 2c 20 73 69 74 75 61 74 69  rns out, situati
07c0: 6f 6e 73 20 77 68 65 72 65 20 73 69 6d 70 6c 69  ons where simpli
07d0: 63 69 74 79 20 69 73 20 74 68 65 20 62 65 74 74  city is the bett
07e0: 65 72 20 63 68 6f 69 63 65 0a 61 72 65 20 6d 6f  er choice.are mo
07f0: 72 65 20 63 6f 6d 6d 6f 6e 20 74 68 61 74 20 6d  re common that m
0800: 61 6e 79 20 70 65 6f 70 6c 65 20 72 65 61 6c 69  any people reali
0810: 7a 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 32 3e 53 69  ze..</p>..<h2>Si
0820: 74 75 61 74 69 6f 6e 73 20 57 68 65 72 65 20 53  tuations Where S
0830: 51 4c 69 74 65 20 57 6f 72 6b 73 20 57 65 6c 6c  QLite Works Well
0840: 3c 2f 68 32 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  </h2>..<ul>.<li>
0850: 3c 70 3e 3c 62 3e 57 65 62 73 69 74 65 73 3c 2f  <p><b>Websites</
0860: 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74  b></p>..<p>SQLit
0870: 65 20 75 73 75 61 6c 6c 79 20 77 69 6c 6c 20 77  e usually will w
0880: 6f 72 6b 20 67 72 65 61 74 20 61 73 20 74 68 65  ork great as the
0890: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
08a0: 20 66 6f 72 20 6c 6f 77 20 74 6f 0a 6d 65 64 69   for low to.medi
08b0: 75 6d 20 74 72 61 66 66 69 63 20 77 65 62 73 69  um traffic websi
08c0: 74 65 73 20 28 77 68 69 63 68 20 69 73 20 74 6f  tes (which is to
08d0: 20 73 61 79 2c 20 39 39 2e 39 25 20 6f 66 20 61   say, 99.9% of a
08e0: 6c 6c 20 77 65 62 73 69 74 65 73 29 2e 0a 54 68  ll websites)..Th
08f0: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 77 65 62 20  e amount of web 
0900: 74 72 61 66 66 69 63 20 74 68 61 74 20 53 51 4c  traffic that SQL
0910: 69 74 65 20 63 61 6e 20 68 61 6e 64 6c 65 20 64  ite can handle d
0920: 65 70 65 6e 64 73 2c 20 6f 66 20 63 6f 75 72 73  epends, of cours
0930: 65 2c 0a 6f 6e 20 68 6f 77 20 68 65 61 76 69 6c  e,.on how heavil
0940: 79 20 74 68 65 20 77 65 62 73 69 74 65 20 75 73  y the website us
0950: 65 73 20 69 74 73 20 64 61 74 61 62 61 73 65 2e  es its database.
0960: 20 20 47 65 6e 65 72 61 6c 6c 79 0a 73 70 65 61    Generally.spea
0970: 6b 69 6e 67 2c 20 61 6e 79 20 73 69 74 65 20 74  king, any site t
0980: 68 61 74 20 67 65 74 73 20 66 65 77 65 72 20 74  hat gets fewer t
0990: 68 61 6e 20 61 20 31 30 30 30 30 30 20 68 69 74  han a 100000 hit
09a0: 73 2f 64 61 79 20 73 68 6f 75 6c 64 20 77 6f 72  s/day should wor
09b0: 6b 0a 66 69 6e 65 2e 20 20 54 68 65 20 31 30 30  k.fine.  The 100
09c0: 30 30 30 20 68 69 74 73 2f 64 61 79 20 66 69 67  000 hits/day fig
09d0: 75 72 65 20 69 73 20 61 20 63 6f 6e 73 65 72 76  ure is a conserv
09e0: 61 74 69 76 65 20 65 73 74 69 6d 61 74 65 2c 20  ative estimate, 
09f0: 6e 6f 74 20 61 0a 68 61 72 64 20 75 70 70 65 72  not a.hard upper
0a00: 20 62 6f 75 6e 64 2e 0a 53 51 4c 69 74 65 20 68   bound..SQLite h
0a10: 61 73 20 62 65 65 6e 20 64 65 6d 6f 6e 73 74 72  as been demonstr
0a20: 61 74 65 64 20 74 6f 20 77 6f 72 6b 20 77 69 74  ated to work wit
0a30: 68 20 31 30 20 74 69 6d 65 73 20 74 68 61 74 20  h 10 times that 
0a40: 61 6d 6f 75 6e 74 0a 6f 66 20 74 72 61 66 66 69  amount.of traffi
0a50: 63 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c  c.</p>.</li>..<l
0a60: 69 3e 3c 70 3e 3c 62 3e 45 6d 62 65 64 64 65 64  i><p><b>Embedded
0a70: 20 64 65 76 69 63 65 73 20 61 6e 64 20 61 70 70   devices and app
0a80: 6c 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 2f 70  lications</b></p
0a90: 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 61 6e  >..<p>Because an
0aa0: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0ab0: 20 72 65 71 75 69 72 65 73 20 6c 69 74 74 6c 65   requires little
0ac0: 20 6f 72 20 6e 6f 20 61 64 6d 69 6e 69 73 74 72   or no administr
0ad0: 61 74 69 6f 6e 2c 0a 53 51 4c 69 74 65 20 69 73  ation,.SQLite is
0ae0: 20 61 20 67 6f 6f 64 20 63 68 6f 69 63 65 20 66   a good choice f
0af0: 6f 72 20 64 65 76 69 63 65 73 20 6f 72 20 73 65  or devices or se
0b00: 72 76 69 63 65 73 20 74 68 61 74 20 6d 75 73 74  rvices that must
0b10: 20 77 6f 72 6b 0a 75 6e 61 74 74 65 6e 64 65 64   work.unattended
0b20: 20 61 6e 64 20 77 69 74 68 6f 75 74 20 68 75 6d   and without hum
0b30: 61 6e 20 73 75 70 70 6f 72 74 2e 20 20 53 51 4c  an support.  SQL
0b40: 69 74 65 20 69 73 20 61 20 67 6f 6f 64 20 66 69  ite is a good fi
0b50: 74 20 66 6f 72 0a 75 73 65 20 69 6e 20 63 65 6c  t for.use in cel
0b60: 6c 70 68 6f 6e 65 73 2c 20 50 44 41 73 2c 20 73  lphones, PDAs, s
0b70: 65 74 2d 74 6f 70 20 62 6f 78 65 73 2c 20 61 6e  et-top boxes, an
0b80: 64 2f 6f 72 20 61 70 70 6c 69 61 6e 63 65 73 2e  d/or appliances.
0b90: 20 20 49 74 20 61 6c 73 6f 0a 77 6f 72 6b 73 20    It also.works 
0ba0: 77 65 6c 6c 20 61 73 20 61 6e 20 65 6d 62 65 64  well as an embed
0bb0: 64 65 64 20 64 61 74 61 62 61 73 65 20 69 6e 20  ded database in 
0bc0: 64 6f 77 6e 6c 6f 61 64 61 62 6c 65 20 63 6f 6e  downloadable con
0bd0: 73 75 6d 65 72 20 61 70 70 6c 69 63 61 74 69 6f  sumer applicatio
0be0: 6e 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  ns..</p>.</li>..
0bf0: 3c 6c 69 3e 3c 70 3e 3c 62 3e 41 70 70 6c 69 63  <li><p><b>Applic
0c00: 61 74 69 6f 6e 20 46 69 6c 65 20 46 6f 72 6d 61  ation File Forma
0c10: 74 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53  t</b></p>..<p>.S
0c20: 51 4c 69 74 65 20 68 61 73 20 62 65 65 6e 20 75  QLite has been u
0c30: 73 65 64 20 77 69 74 68 20 67 72 65 61 74 20 73  sed with great s
0c40: 75 63 63 65 73 73 20 61 73 20 74 68 65 20 6f 6e  uccess as the on
0c50: 2d 64 69 73 6b 20 66 69 6c 65 20 66 6f 72 6d 61  -disk file forma
0c60: 74 0a 66 6f 72 20 64 65 73 6b 74 6f 70 20 61 70  t.for desktop ap
0c70: 70 6c 69 63 61 74 69 6f 6e 73 20 73 75 63 68 20  plications such 
0c80: 61 73 20 66 69 6e 61 6e 63 69 61 6c 20 61 6e 61  as financial ana
0c90: 6c 79 73 69 73 20 74 6f 6f 6c 73 2c 20 43 41 44  lysis tools, CAD
0ca0: 0a 70 61 63 6b 61 67 65 73 2c 20 72 65 63 6f 72  .packages, recor
0cb0: 64 20 6b 65 65 70 69 6e 67 20 70 72 6f 67 72 61  d keeping progra
0cc0: 6d 73 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ms, and so forth
0cd0: 2e 20 20 54 68 65 20 74 72 61 64 69 74 69 6f 6e  .  The tradition
0ce0: 61 6c 0a 46 69 6c 65 2f 4f 70 65 6e 20 6f 70 65  al.File/Open ope
0cf0: 72 61 74 69 6f 6e 20 64 6f 65 73 20 61 6e 20 73  ration does an s
0d00: 71 6c 69 74 65 5f 6f 70 65 6e 28 29 20 61 6e 64  qlite_open() and
0d10: 20 65 78 65 63 75 74 65 73 20 61 0a 42 45 47 49   executes a.BEGI
0d20: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 74 6f  N TRANSACTION to
0d30: 20 67 65 74 20 65 78 63 6c 75 73 69 76 65 20 61   get exclusive a
0d40: 63 63 65 73 73 20 74 6f 20 74 68 65 20 63 6f 6e  ccess to the con
0d50: 74 65 6e 74 2e 20 20 46 69 6c 65 2f 53 61 76 65  tent.  File/Save
0d60: 0a 64 6f 65 73 20 61 20 43 4f 4d 4d 49 54 20 66  .does a COMMIT f
0d70: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 6f 74 68  ollowed by anoth
0d80: 65 72 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43  er BEGIN TRANSAC
0d90: 54 49 4f 4e 2e 20 20 54 68 65 20 75 73 65 0a 6f  TION.  The use.o
0da0: 66 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 67  f transactions g
0db0: 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 75  uarantees that u
0dc0: 70 64 61 74 65 73 20 74 6f 20 74 68 65 20 61 70  pdates to the ap
0dd0: 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 20 61  plication file a
0de0: 72 65 20 61 74 6f 6d 69 63 2c 0a 64 75 72 61 62  re atomic,.durab
0df0: 6c 65 2c 20 69 73 6f 6c 61 74 65 64 2c 20 61 6e  le, isolated, an
0e00: 64 20 63 6f 6e 73 69 73 74 65 6e 74 2e 0a 3c 2f  d consistent..</
0e10: 70 3e 0a 0a 3c 70 3e 0a 54 65 6d 70 6f 72 61 72  p>..<p>.Temporar
0e20: 79 20 74 72 69 67 67 65 72 73 20 63 61 6e 20 62  y triggers can b
0e30: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64  e added to the d
0e40: 61 74 61 62 61 73 65 20 74 6f 20 72 65 63 6f 72  atabase to recor
0e50: 64 20 61 6c 6c 0a 63 68 61 6e 67 65 73 20 69 6e  d all.changes in
0e60: 74 6f 20 61 20 28 74 65 6d 70 6f 72 61 72 79 29  to a (temporary)
0e70: 20 75 6e 64 6f 2f 72 65 64 6f 20 6c 6f 67 20 74   undo/redo log t
0e80: 61 62 6c 65 2e 20 20 54 68 65 73 65 20 63 68 61  able.  These cha
0e90: 6e 67 65 73 20 63 61 6e 20 74 68 65 6e 0a 62 65  nges can then.be
0ea0: 20 70 6c 61 79 65 64 20 62 61 63 6b 20 77 68 65   played back whe
0eb0: 6e 20 74 68 65 20 75 73 65 72 20 70 72 65 73 73  n the user press
0ec0: 65 73 20 74 68 65 20 55 6e 64 6f 20 61 6e 64 20  es the Undo and 
0ed0: 52 65 64 6f 20 62 75 74 74 6f 6e 73 2e 20 20 55  Redo buttons.  U
0ee0: 73 69 6e 67 0a 74 68 69 73 20 74 65 63 68 6e 69  sing.this techni
0ef0: 71 75 65 2c 20 61 20 75 6e 6c 69 6d 69 74 65 64  que, a unlimited
0f00: 20 64 65 70 74 68 20 75 6e 64 6f 2f 72 65 64 6f   depth undo/redo
0f10: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0f20: 63 61 6e 20 62 65 20 77 72 69 74 74 65 6e 0a 69  can be written.i
0f30: 6e 20 73 75 72 70 72 69 73 69 6e 67 20 6c 69 74  n surprising lit
0f40: 74 6c 65 20 63 6f 64 65 2e 0a 3c 2f 70 3e 0a 3c  tle code..</p>.<
0f50: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
0f60: 52 65 70 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20  Replacement for 
0f70: 3c 69 3e 61 64 20 68 6f 63 3c 2f 69 3e 20 64 69  <i>ad hoc</i> di
0f80: 73 6b 20 66 69 6c 65 73 3c 2f 62 3e 3c 2f 70 3e  sk files</b></p>
0f90: 0a 0a 3c 70 3e 4d 61 6e 79 20 70 72 6f 67 72 61  ..<p>Many progra
0fa0: 6d 73 20 75 73 65 20 66 6f 70 65 6e 28 29 2c 20  ms use fopen(), 
0fb0: 66 72 65 61 64 28 29 2c 20 61 6e 64 20 66 77 72  fread(), and fwr
0fc0: 69 74 65 28 29 20 74 6f 20 63 72 65 61 74 65 20  ite() to create 
0fd0: 61 6e 64 0a 6d 61 6e 61 67 65 20 66 69 6c 65 73  and.manage files
0fe0: 20 6f 66 20 64 61 74 61 20 69 6e 20 68 6f 6d 65   of data in home
0ff0: 2d 67 72 6f 77 6e 20 66 6f 72 6d 61 74 73 2e 20  -grown formats. 
1000: 20 53 51 4c 69 74 65 20 77 6f 72 6b 73 20 77 65   SQLite works we
1010: 6c 6c 20 61 73 20 61 0a 72 65 70 6c 61 63 65 6d  ll as a.replacem
1020: 65 6e 74 20 66 6f 72 20 74 68 65 73 65 20 3c 69  ent for these <i
1030: 3e 61 64 20 68 6f 63 3c 2f 69 3e 20 64 61 74 61  >ad hoc</i> data
1040: 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 3c 2f 6c 69   files.</p>.</li
1050: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 6e 74  >..<li><p><b>Int
1060: 65 72 6e 61 6c 20 6f 72 20 74 65 6d 70 6f 72 61  ernal or tempora
1070: 72 79 20 64 61 74 61 62 61 73 65 73 3c 2f 62 3e  ry databases</b>
1080: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 70 72  </p>..<p>.For pr
1090: 6f 67 72 61 6d 73 20 74 68 61 74 20 68 61 76 65  ograms that have
10a0: 20 61 20 6c 6f 74 20 6f 66 20 64 61 74 61 20 74   a lot of data t
10b0: 68 61 74 20 6d 75 73 74 20 62 65 20 73 69 66 74  hat must be sift
10c0: 65 64 20 61 6e 64 20 73 6f 72 74 65 64 0a 69 6e  ed and sorted.in
10d0: 20 64 69 76 65 72 73 65 20 77 61 79 73 2c 20 69   diverse ways, i
10e0: 74 20 69 73 20 6f 66 74 65 6e 20 65 61 73 69 65  t is often easie
10f0: 72 20 61 6e 64 20 71 75 69 63 6b 65 72 20 74 6f  r and quicker to
1100: 20 6c 6f 61 64 20 74 68 65 20 64 61 74 61 20 69   load the data i
1110: 6e 74 6f 0a 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  nto.an in-memory
1120: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
1130: 20 61 6e 64 20 75 73 65 20 71 75 65 72 79 20 77   and use query w
1140: 69 74 68 20 6a 6f 69 6e 73 20 61 6e 64 20 4f 52  ith joins and OR
1150: 44 45 52 20 42 59 0a 63 6c 61 75 73 65 73 20 74  DER BY.clauses t
1160: 6f 20 65 78 74 72 61 63 74 20 74 68 65 20 64 61  o extract the da
1170: 74 61 20 69 6e 20 74 68 65 20 66 6f 72 6d 20 61  ta in the form a
1180: 6e 64 20 6f 72 64 65 72 20 6e 65 65 64 65 64 20  nd order needed 
1190: 72 61 74 68 65 72 20 74 68 61 6e 0a 74 6f 20 74  rather than.to t
11a0: 72 79 20 74 6f 20 63 6f 64 65 20 74 68 65 20 73  ry to code the s
11b0: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 6d  ame operations m
11c0: 61 6e 75 61 6c 6c 79 2e 0a 55 73 69 6e 67 20 61  anually..Using a
11d0: 6e 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 69  n SQL database i
11e0: 6e 74 65 72 6e 61 6c 6c 79 20 69 6e 20 74 68 69  nternally in thi
11f0: 73 20 77 61 79 20 61 6c 73 6f 20 67 69 76 65 73  s way also gives
1200: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 67 72 65   the program.gre
1210: 61 74 65 72 20 66 6c 65 78 69 62 69 6c 69 74 79  ater flexibility
1220: 20 73 69 6e 63 65 20 6e 65 77 20 63 6f 6c 75 6d   since new colum
1230: 6e 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 63  ns and indices c
1240: 61 6e 20 62 65 20 61 64 64 65 64 20 77 69 74 68  an be added with
1250: 6f 75 74 0a 68 61 76 69 6e 67 20 74 6f 20 72 65  out.having to re
1260: 63 6f 64 65 20 65 76 65 72 79 20 71 75 65 72 79  code every query
1270: 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c  ..</p>.</li>..<l
1280: 69 3e 3c 70 3e 3c 62 3e 43 6f 6d 6d 61 6e 64 2d  i><p><b>Command-
1290: 6c 69 6e 65 20 64 61 74 61 73 65 74 20 61 6e 61  line dataset ana
12a0: 6c 79 73 69 73 20 74 6f 6f 6c 3c 2f 62 3e 3c 2f  lysis tool</b></
12b0: 70 3e 0a 0a 3c 70 3e 0a 45 78 70 65 72 69 65 6e  p>..<p>.Experien
12c0: 63 65 64 20 53 51 4c 20 75 73 65 72 73 20 63 61  ced SQL users ca
12d0: 6e 20 65 6d 70 6c 6f 79 0a 74 68 65 20 63 6f 6d  n employ.the com
12e0: 6d 61 6e 64 2d 6c 69 6e 65 20 3c 62 3e 73 71 6c  mand-line <b>sql
12f0: 69 74 65 3c 2f 62 3e 20 70 72 6f 67 72 61 6d 20  ite</b> program 
1300: 74 6f 20 61 6e 61 6c 79 7a 65 20 6d 69 73 63 65  to analyze misce
1310: 6c 6c 61 6e 65 6f 75 73 0a 64 61 74 61 73 65 74  llaneous.dataset
1320: 73 2e 20 52 61 77 20 64 61 74 61 20 63 61 6e 20  s. Raw data can 
1330: 62 65 20 69 6d 70 6f 72 74 65 64 20 75 73 69 6e  be imported usin
1340: 67 20 74 68 65 20 43 4f 50 59 20 63 6f 6d 6d 61  g the COPY comma
1350: 6e 64 2c 20 74 68 65 6e 20 74 68 61 74 0a 64 61  nd, then that.da
1360: 74 61 20 63 61 6e 20 62 65 20 73 6c 69 63 65 64  ta can be sliced
1370: 20 61 6e 64 20 64 69 63 65 64 20 74 6f 20 67 65   and diced to ge
1380: 6e 65 72 61 74 65 20 61 20 6d 79 72 69 61 64 20  nerate a myriad 
1390: 6f 66 20 73 75 6d 6d 61 72 79 0a 72 65 70 6f 72  of summary.repor
13a0: 74 73 2e 20 20 50 6f 73 73 69 62 6c 65 20 75 73  ts.  Possible us
13b0: 65 73 20 69 6e 63 6c 75 64 65 20 77 65 62 73 69  es include websi
13c0: 74 65 20 6c 6f 67 20 61 6e 61 6c 79 73 69 73 2c  te log analysis,
13d0: 20 73 70 6f 72 74 73 0a 73 74 61 74 69 73 74 69   sports.statisti
13e0: 63 73 20 61 6e 61 6c 79 73 69 73 2c 20 63 6f 6d  cs analysis, com
13f0: 70 69 6c 61 74 69 6f 6e 20 6f 66 20 70 72 6f 67  pilation of prog
1400: 72 61 6d 6d 69 6e 67 20 6d 65 74 72 69 63 73 2c  ramming metrics,
1410: 20 61 6e 64 0a 61 6e 61 6c 79 73 69 73 20 6f 66   and.analysis of
1420: 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 72 65   experimental re
1430: 73 75 6c 74 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  sults..</p>..<p>
1440: 0a 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 64 6f  .You can also do
1450: 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
1460: 77 69 74 68 20 61 20 65 6e 74 65 72 70 72 69 73  with a enterpris
1470: 65 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 0a  e client/server.
1480: 64 61 74 61 62 61 73 65 2c 20 6f 66 20 63 6f 75  database, of cou
1490: 72 73 65 2e 20 20 54 68 65 20 61 64 76 61 6e 74  rse.  The advant
14a0: 61 67 65 73 20 74 6f 20 75 73 69 6e 67 20 53 51  ages to using SQ
14b0: 4c 69 74 65 20 69 6e 20 74 68 69 73 20 73 69 74  Lite in this sit
14c0: 75 61 74 69 6f 6e 0a 61 72 65 20 74 68 61 74 20  uation.are that 
14d0: 53 51 4c 69 74 65 20 69 73 20 6d 75 63 68 20 65  SQLite is much e
14e0: 61 73 69 65 72 20 74 6f 20 73 65 74 20 75 70 20  asier to set up 
14f0: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 69 6e  and the resultin
1500: 67 20 64 61 74 61 62 61 73 65 20 0a 69 73 20 61  g database .is a
1510: 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 74 68 61   single file tha
1520: 74 20 79 6f 75 20 63 61 6e 20 73 74 6f 72 65 20  t you can store 
1530: 6f 6e 20 61 20 66 6c 6f 70 70 79 20 64 69 73 6b  on a floppy disk
1540: 20 6f 72 20 65 6d 61 69 6c 20 74 6f 0a 61 20 63   or email to.a c
1550: 6f 6c 6c 65 61 67 75 65 2e 0a 3c 2f 70 3e 0a 3c  olleague..</p>.<
1560: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
1570: 53 74 61 6e 64 2d 69 6e 20 66 6f 72 20 61 6e 20  Stand-in for an 
1580: 65 6e 74 65 72 70 72 69 73 65 20 64 61 74 61 62  enterprise datab
1590: 61 73 65 20 64 75 72 69 6e 67 20 64 65 6d 6f 73  ase during demos
15a0: 20 6f 72 20 74 65 73 74 69 6e 67 3c 2f 62 3e 3c   or testing</b><
15b0: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 79 6f 75 20  /p>..<p>.If you 
15c0: 61 72 65 20 77 72 69 74 74 69 6e 67 20 61 20 63  are writting a c
15d0: 6c 69 65 6e 74 20 61 70 70 6c 69 63 61 74 69 6f  lient applicatio
15e0: 6e 20 66 6f 72 20 61 6e 20 65 6e 74 65 72 70 72  n for an enterpr
15f0: 69 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  ise database eng
1600: 69 6e 65 2c 0a 69 74 20 6d 61 6b 65 73 20 73 65  ine,.it makes se
1610: 6e 73 65 20 74 6f 20 75 73 65 20 61 20 67 65 6e  nse to use a gen
1620: 65 72 69 63 20 64 61 74 61 62 61 73 65 20 62 61  eric database ba
1630: 63 6b 65 6e 64 20 74 68 61 74 20 61 6c 6c 6f 77  ckend that allow
1640: 73 20 79 6f 75 20 74 6f 20 63 6f 6e 6e 65 63 74  s you to connect
1650: 0a 74 6f 20 6d 61 6e 79 20 64 69 66 66 65 72 65  .to many differe
1660: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 53 51 4c 20  nt kinds of SQL 
1670: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
1680: 2e 20 20 49 74 20 6d 61 6b 65 73 20 65 76 65 6e  .  It makes even
1690: 20 62 65 74 74 65 72 0a 73 65 6e 73 65 20 74 6f   better.sense to
16a0: 0a 67 6f 20 61 68 65 61 64 20 61 6e 64 20 69 6e  .go ahead and in
16b0: 63 6c 75 64 65 20 53 51 4c 69 74 65 20 69 6e 20  clude SQLite in 
16c0: 74 68 65 20 6d 69 78 20 6f 66 20 73 75 70 70 6f  the mix of suppo
16d0: 72 74 65 64 20 64 61 74 61 62 61 73 65 20 61 6e  rted database an
16e0: 64 20 74 6f 20 73 74 61 74 69 63 61 6c 6c 79 0a  d to statically.
16f0: 6c 69 6e 6b 20 74 68 65 20 53 51 4c 69 74 65 20  link the SQLite 
1700: 65 6e 67 69 6e 65 20 69 6e 20 77 69 74 68 20 74  engine in with t
1710: 68 65 20 63 6c 69 65 6e 74 2e 20 20 54 68 61 74  he client.  That
1720: 20 77 61 79 20 74 68 65 20 63 6c 69 65 6e 74 20   way the client 
1730: 70 72 6f 67 72 61 6d 0a 63 61 6e 20 62 65 20 75  program.can be u
1740: 73 65 64 20 73 74 61 6e 64 61 6c 6f 6e 65 20 77  sed standalone w
1750: 69 74 68 20 61 6e 20 53 51 4c 69 74 65 20 64 61  ith an SQLite da
1760: 74 61 20 66 69 6c 65 20 66 6f 72 20 74 65 73 74  ta file for test
1770: 69 6e 67 20 6f 72 20 66 6f 72 0a 64 65 6d 6f 6e  ing or for.demon
1780: 73 74 72 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a  strations..</p>.
1790: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  </li>..<li><p><b
17a0: 3e 44 61 74 61 62 61 73 65 20 50 65 64 61 67 6f  >Database Pedago
17b0: 67 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  gy</b></p>..<p>.
17c0: 42 65 63 61 75 73 65 20 69 74 20 69 73 20 73 69  Because it is si
17d0: 6d 70 6c 65 20 74 6f 20 73 65 74 75 70 20 61 6e  mple to setup an
17e0: 64 20 75 73 65 20 28 69 6e 73 74 61 6c 6c 61 74  d use (installat
17f0: 69 6f 6e 20 69 73 20 74 72 69 76 69 61 6c 3a 20  ion is trivial: 
1800: 6a 75 73 74 0a 63 6f 70 79 20 74 68 65 20 3c 62  just.copy the <b
1810: 3e 73 71 6c 69 74 65 3c 2f 62 3e 20 6f 72 20 3c  >sqlite</b> or <
1820: 62 3e 73 71 6c 69 74 65 2e 65 78 65 3c 2f 62 3e  b>sqlite.exe</b>
1830: 20 65 78 65 63 75 74 61 62 6c 65 20 74 6f 20 74   executable to t
1840: 68 65 20 74 61 72 67 65 74 20 6d 61 63 68 69 6e  he target machin
1850: 65 0a 61 6e 64 20 72 75 6e 20 69 74 29 20 53 51  e.and run it) SQ
1860: 4c 69 74 65 20 6d 61 6b 65 73 20 61 20 67 6f 6f  Lite makes a goo
1870: 64 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  d database engin
1880: 65 20 66 6f 72 20 75 73 65 20 69 6e 20 74 65 61  e for use in tea
1890: 63 68 69 6e 67 20 53 51 4c 2e 0a 53 74 75 64 65  ching SQL..Stude
18a0: 6e 74 73 20 63 61 6e 20 65 61 73 69 6c 79 20 63  nts can easily c
18b0: 72 65 61 74 65 20 61 73 20 6d 61 6e 79 20 64 61  reate as many da
18c0: 74 61 62 61 73 65 73 20 61 73 20 74 68 65 79 20  tabases as they 
18d0: 6c 69 6b 65 20 61 6e 64 20 63 61 6e 0a 65 6d 61  like and can.ema
18e0: 69 6c 20 64 61 74 61 62 61 73 65 73 20 74 6f 20  il databases to 
18f0: 74 68 65 20 69 6e 73 74 72 75 63 74 6f 72 20 66  the instructor f
1900: 6f 72 20 63 6f 6d 6d 65 6e 74 73 20 6f 72 20 67  or comments or g
1910: 72 61 64 69 6e 67 2e 20 20 46 6f 72 20 6d 6f 72  rading.  For mor
1920: 65 0a 61 64 76 61 6e 63 65 64 20 73 74 75 64 65  e.advanced stude
1930: 6e 74 73 20 77 68 6f 20 61 72 65 20 69 6e 74 65  nts who are inte
1940: 72 65 73 74 65 64 20 69 6e 20 73 74 75 64 79 69  rested in studyi
1950: 6e 67 20 68 6f 77 20 61 6e 20 52 44 42 4d 53 20  ng how an RDBMS 
1960: 69 73 0a 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20  is.implemented, 
1970: 74 68 65 20 6d 6f 64 75 6c 61 72 20 61 6e 64 20  the modular and 
1980: 77 65 6c 6c 2d 63 6f 6d 6d 65 6e 74 65 64 20 61  well-commented a
1990: 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64 20 53 51  nd documented SQ
19a0: 4c 69 74 65 20 63 6f 64 65 0a 63 61 6e 20 73 65  Lite code.can se
19b0: 72 76 65 20 61 73 20 61 20 67 6f 6f 64 20 62 61  rve as a good ba
19c0: 73 69 73 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  sis.  This is no
19d0: 74 20 74 6f 20 73 61 79 20 74 68 61 74 20 53 51  t to say that SQ
19e0: 4c 69 74 65 20 69 73 20 61 6e 20 61 63 63 75 72  Lite is an accur
19f0: 61 74 65 0a 6d 6f 64 65 6c 20 6f 66 20 68 6f 77  ate.model of how
1a00: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20   other database 
1a10: 65 6e 67 69 6e 65 73 20 61 72 65 20 69 6d 70 6c  engines are impl
1a20: 65 6d 65 6e 74 65 64 2c 20 62 75 74 20 72 61 74  emented, but rat
1a30: 68 65 72 20 61 20 73 74 75 64 65 6e 74 20 77 68  her a student wh
1a40: 6f 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 68 6f  o.understands ho
1a50: 77 20 53 51 4c 69 74 65 20 77 6f 72 6b 73 20 63  w SQLite works c
1a60: 61 6e 20 6d 6f 72 65 20 71 75 69 63 6b 6c 79 20  an more quickly 
1a70: 63 6f 6d 70 72 65 68 65 6e 64 20 74 68 65 20 6f  comprehend the o
1a80: 70 65 72 61 74 69 6f 6e 61 6c 0a 70 72 69 6e 63  perational.princ
1a90: 69 70 6c 65 73 20 6f 66 20 6f 74 68 65 72 20 73  iples of other s
1aa0: 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c  ystems..</p>.</l
1ab0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 78  i>..<li><p><b>Ex
1ac0: 70 65 72 69 6d 65 6e 74 61 6c 20 53 51 4c 20 6c  perimental SQL l
1ad0: 61 6e 67 75 61 67 65 20 65 78 74 65 6e 73 69 6f  anguage extensio
1ae0: 6e 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ns</b></p>..<p>T
1af0: 68 65 20 73 69 6d 70 6c 65 2c 20 6d 6f 64 75 6c  he simple, modul
1b00: 61 72 20 64 65 73 69 67 6e 20 6f 66 20 53 51 4c  ar design of SQL
1b10: 69 74 65 20 6d 61 6b 65 73 20 69 74 20 61 20 67  ite makes it a g
1b20: 6f 6f 64 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72  ood platform for
1b30: 0a 70 72 6f 74 6f 74 79 70 69 6e 67 20 6e 65 77  .prototyping new
1b40: 2c 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 64  , experimental d
1b50: 61 74 61 62 61 73 65 20 6c 61 6e 67 75 61 67 65  atabase language
1b60: 20 66 65 61 74 75 72 65 73 20 6f 72 20 69 64 65   features or ide
1b70: 61 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  as..</p>.</li>..
1b80: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 32 3e 53 69 74 75  .</ul>..<h2>Situ
1b90: 61 74 69 6f 6e 73 20 57 68 65 72 65 20 41 6e 6f  ations Where Ano
1ba0: 74 68 65 72 20 52 44 42 4d 53 20 4d 61 79 20 57  ther RDBMS May W
1bb0: 6f 72 6b 20 42 65 74 74 65 72 3c 2f 68 32 3e 0a  ork Better</h2>.
1bc0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  .<ul>.<li><p><b>
1bd0: 43 6c 69 65 6e 74 2f 53 65 72 76 65 72 20 41 70  Client/Server Ap
1be0: 70 6c 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 70  plications</b><p
1bf0: 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 68 61 76  >..<p>If you hav
1c00: 65 20 6d 61 6e 79 20 63 6c 69 65 6e 74 20 70 72  e many client pr
1c10: 6f 67 72 61 6d 73 20 61 63 63 65 73 73 20 61 20  ograms access a 
1c20: 63 6f 6d 6d 6f 6e 20 64 61 74 61 62 61 73 65 0a  common database.
1c30: 6f 76 65 72 20 61 20 6e 65 74 77 6f 72 6b 2c 20  over a network, 
1c40: 79 6f 75 20 73 68 6f 75 6c 64 20 63 6f 6e 73 69  you should consi
1c50: 64 65 72 20 75 73 69 6e 67 20 61 20 63 6c 69 65  der using a clie
1c60: 6e 74 2f 73 65 72 76 65 72 20 64 61 74 61 62 61  nt/server databa
1c70: 73 65 0a 65 6e 67 69 6e 65 20 69 6e 73 74 65 61  se.engine instea
1c80: 64 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 53 51  d of SQLite.  SQ
1c90: 4c 69 74 65 20 77 69 6c 6c 20 77 6f 72 6b 20 6f  Lite will work o
1ca0: 76 65 72 20 61 20 6e 65 74 77 6f 72 6b 20 66 69  ver a network fi
1cb0: 6c 65 73 79 73 74 65 6d 2c 0a 62 75 74 20 62 65  lesystem,.but be
1cc0: 63 61 75 73 65 20 6f 66 20 74 68 65 20 6c 61 74  cause of the lat
1cd0: 65 6e 63 79 20 61 73 73 6f 63 69 61 74 65 64 20  ency associated 
1ce0: 77 69 74 68 20 6d 6f 73 74 20 6e 65 74 77 6f 72  with most networ
1cf0: 6b 20 66 69 6c 65 73 79 73 74 65 6d 73 2c 0a 70  k filesystems,.p
1d00: 65 72 66 6f 72 6d 61 6e 63 65 20 77 69 6c 6c 20  erformance will 
1d10: 6e 6f 74 20 62 65 20 67 72 65 61 74 2e 20 20 41  not be great.  A
1d20: 6c 73 6f 2c 20 74 68 65 20 66 69 6c 65 20 6c 6f  lso, the file lo
1d30: 63 6b 69 6e 67 20 6c 6f 67 69 63 20 6f 66 0a 6d  cking logic of.m
1d40: 61 6e 79 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65  any network file
1d50: 73 79 73 74 65 6d 73 20 69 6d 70 6c 65 6d 65 6e  systems implemen
1d60: 74 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  tation contains 
1d70: 62 75 67 73 20 28 6f 6e 20 62 6f 74 68 20 55 6e  bugs (on both Un
1d80: 69 78 0a 61 6e 64 20 77 69 6e 64 6f 77 73 29 2e  ix.and windows).
1d90: 20 20 49 66 20 66 69 6c 65 20 6c 6f 63 6b 69 6e    If file lockin
1da0: 67 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20  g does not work 
1db0: 6c 69 6b 65 20 69 74 20 73 68 6f 75 6c 64 2c 0a  like it should,.
1dc0: 69 74 20 6d 69 67 68 74 20 62 65 20 70 6f 73 73  it might be poss
1dd0: 69 62 6c 65 20 66 6f 72 20 74 77 6f 20 6f 72 20  ible for two or 
1de0: 6d 6f 72 65 20 63 6c 69 65 6e 74 20 70 72 6f 67  more client prog
1df0: 72 61 6d 73 20 74 6f 20 6d 6f 64 69 66 79 20 74  rams to modify t
1e00: 68 65 0a 73 61 6d 65 20 70 61 72 74 20 6f 66 20  he.same part of 
1e10: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
1e20: 65 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  e at the same ti
1e30: 6d 65 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e  me, resulting in
1e40: 20 0a 64 61 74 61 62 61 73 65 20 63 6f 72 72 75   .database corru
1e50: 70 74 69 6f 6e 2e 20 20 42 65 63 61 75 73 65 20  ption.  Because 
1e60: 74 68 69 73 20 70 72 6f 62 6c 65 6d 20 72 65 73  this problem res
1e70: 75 6c 74 73 20 66 72 6f 6d 20 62 75 67 73 20 69  ults from bugs i
1e80: 6e 0a 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  n.the underlying
1e90: 20 66 69 6c 65 73 79 73 74 65 6d 20 69 6d 70 6c   filesystem impl
1ea0: 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 72  ementation, ther
1eb0: 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 53 51 4c  e is nothing SQL
1ec0: 69 74 65 0a 63 61 6e 20 64 6f 20 74 6f 20 70 72  ite.can do to pr
1ed0: 65 76 65 6e 74 20 69 74 2e 3c 2f 70 3e 0a 0a 3c  event it.</p>..<
1ee0: 70 3e 41 20 67 6f 6f 64 20 72 75 6c 65 20 6f 66  p>A good rule of
1ef0: 20 74 68 75 6d 62 20 69 73 20 74 68 61 74 20 79   thumb is that y
1f00: 6f 75 20 73 68 6f 75 6c 64 20 61 76 6f 69 64 20  ou should avoid 
1f10: 75 73 69 6e 67 20 53 51 4c 69 74 65 0a 69 6e 20  using SQLite.in 
1f20: 73 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65  situations where
1f30: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
1f40: 73 65 20 77 69 6c 6c 20 62 65 20 61 63 63 65 73  se will be acces
1f50: 73 65 64 20 73 69 6d 75 6c 74 65 6e 6f 75 73 6c  sed simultenousl
1f60: 79 0a 66 72 6f 6d 20 6d 61 6e 79 20 63 6f 6d 70  y.from many comp
1f70: 75 74 65 72 73 20 6f 76 65 72 20 61 20 6e 65 74  uters over a net
1f80: 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 2e  work filesystem.
1f90: 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  </p>.</li>..<li>
1fa0: 3c 70 3e 3c 62 3e 48 69 67 68 2d 76 6f 6c 75 6d  <p><b>High-volum
1fb0: 65 20 57 65 62 73 69 74 65 73 3c 2f 62 3e 3c 2f  e Websites</b></
1fc0: 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 77 69  p>..<p>SQLite wi
1fd0: 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 72 6b  ll normally work
1fe0: 20 66 69 6e 65 20 61 73 20 74 68 65 20 64 61 74   fine as the dat
1ff0: 61 62 61 73 65 20 62 61 63 6b 65 6e 64 20 74 6f  abase backend to
2000: 20 61 20 77 65 62 73 69 74 65 2e 0a 42 75 74 20   a website..But 
2010: 69 66 20 79 6f 75 20 77 65 62 73 69 74 65 20 69  if you website i
2020: 73 20 73 6f 20 62 75 73 79 20 74 68 61 74 20 79  s so busy that y
2030: 6f 75 72 20 61 72 65 20 74 68 69 6e 6b 69 6e 67  our are thinking
2040: 20 6f 66 20 73 70 6c 69 74 74 65 64 20 74 68 65   of splitted the
2050: 0a 64 61 74 61 62 61 73 65 20 63 6f 6d 70 6f 6e  .database compon
2060: 65 6e 74 20 6f 66 66 20 6f 6e 74 6f 20 61 20 73  ent off onto a s
2070: 65 70 61 72 61 74 65 20 6d 61 63 68 69 6e 65 2c  eparate machine,
2080: 20 74 68 65 6e 20 79 6f 75 20 73 68 6f 75 6c 64   then you should
2090: 20 0a 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 6e   .definitely con
20a0: 73 69 64 65 72 20 75 73 69 6e 67 20 61 6e 20 65  sider using an e
20b0: 6e 74 65 72 70 72 69 73 65 2d 63 6c 61 73 73 20  nterprise-class 
20c0: 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 64 61  client/server da
20d0: 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 20 69 6e  tabase.engine in
20e0: 73 74 65 61 64 20 6f 66 20 53 51 4c 69 74 65 2e  stead of SQLite.
20f0: 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  </p>.</li>..<li>
2100: 3c 70 3e 3c 62 3e 56 65 72 79 20 6c 61 72 67 65  <p><b>Very large
2110: 20 64 61 74 61 73 65 74 73 3c 2f 62 3e 3c 2f 70   datasets</b></p
2120: 3e 0a 0a 3c 70 3e 57 68 65 6e 20 79 6f 75 20 73  >..<p>When you s
2130: 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
2140: 6f 6e 20 69 6e 20 53 51 4c 69 74 65 20 28 77 68  on in SQLite (wh
2150: 69 63 68 20 68 61 70 70 65 6e 73 20 61 75 74 6f  ich happens auto
2160: 6d 61 74 69 63 61 6c 6c 79 0a 62 65 66 6f 72 65  matically.before
2170: 20 61 6e 79 20 77 72 69 74 65 20 6f 70 65 72 61   any write opera
2180: 74 69 6f 6e 20 74 68 61 74 20 69 73 20 6e 6f 74  tion that is not
2190: 20 77 69 74 68 69 6e 20 61 6e 20 65 78 70 6c 69   within an expli
21a0: 63 69 74 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d  cit BEGIN...COMM
21b0: 49 54 29 0a 74 68 65 20 65 6e 67 69 6e 65 20 68  IT).the engine h
21c0: 61 73 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 61  as to allocate a
21d0: 20 62 69 74 6d 61 70 20 6f 66 20 64 69 72 74 79   bitmap of dirty
21e0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 69   pages in the di
21f0: 73 6b 20 66 69 6c 65 20 74 6f 0a 68 65 6c 70 20  sk file to.help 
2200: 69 74 20 6d 61 6e 61 67 65 20 69 74 73 20 72 6f  it manage its ro
2210: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
2220: 20 53 51 4c 69 74 65 20 6e 65 65 64 73 20 32 35   SQLite needs 25
2230: 36 20 62 79 74 65 73 20 6f 66 20 52 41 4d 20 66  6 bytes of RAM f
2240: 6f 72 0a 65 76 65 72 79 20 31 4d 42 20 6f 66 20  or.every 1MB of 
2250: 64 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 73  database.  For s
2260: 6d 61 6c 6c 65 72 20 64 61 74 61 62 61 73 65 73  maller databases
2270: 2c 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  , the amount of 
2280: 6d 65 6d 6f 72 79 0a 72 65 71 75 69 72 65 64 20  memory.required 
2290: 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d  is not a problem
22a0: 2c 20 62 75 74 20 77 68 65 6e 20 64 61 74 61 62  , but when datab
22b0: 61 73 65 20 62 65 67 69 6e 20 74 6f 20 67 72 6f  ase begin to gro
22c0: 77 20 69 6e 74 6f 20 74 68 65 0a 6d 75 6c 74 69  w into the.multi
22d0: 2d 67 69 67 61 62 79 74 65 20 72 61 6e 67 65 2c  -gigabyte range,
22e0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
22f0: 20 62 69 74 6d 61 70 20 63 61 6e 20 67 65 74 20   bitmap can get 
2300: 71 75 69 74 65 20 6c 61 72 67 65 2e 20 20 49 66  quite large.  If
2310: 0a 79 6f 75 20 6e 65 65 64 20 74 6f 20 73 74 6f  .you need to sto
2320: 72 65 20 61 6e 64 20 6d 6f 64 69 66 79 20 6d 6f  re and modify mo
2330: 72 65 20 74 68 61 6e 20 61 20 66 65 77 20 64 6f  re than a few do
2340: 7a 65 6e 20 47 42 20 6f 66 20 64 61 74 61 2c 20  zen GB of data, 
2350: 79 6f 75 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69  you should.consi
2360: 64 65 72 20 75 73 69 6e 67 20 61 20 64 69 66 66  der using a diff
2370: 65 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 65  erent database e
2380: 6e 67 69 6e 65 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69  ngine..</p>.</li
2390: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 48 69 67  >..<li><p><b>Hig
23a0: 68 20 43 6f 6e 63 75 72 72 61 6e 63 79 3c 2f 62  h Concurrancy</b
23b0: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74  ></p>..<p>.SQLit
23c0: 65 20 75 73 65 73 20 72 65 61 64 65 72 2f 77 72  e uses reader/wr
23d0: 69 74 65 72 20 6c 6f 63 6b 73 20 6f 6e 20 74 68  iter locks on th
23e0: 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
23f0: 65 20 66 69 6c 65 2e 20 20 54 68 61 74 20 6d 65  e file.  That me
2400: 61 6e 73 0a 69 66 20 61 6e 79 20 70 72 6f 63 65  ans.if any proce
2410: 73 73 20 69 73 20 72 65 61 64 69 6e 67 20 66 72  ss is reading fr
2420: 6f 6d 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74  om any part of t
2430: 68 65 20 64 61 74 61 62 61 73 65 2c 20 61 6c 6c  he database, all
2440: 20 6f 74 68 65 72 0a 70 72 6f 63 65 73 73 65 73   other.processes
2450: 20 61 72 65 20 70 72 65 76 65 6e 74 65 64 20 66   are prevented f
2460: 72 6f 6d 20 77 72 69 74 69 6e 67 20 61 6e 79 20  rom writing any 
2470: 6f 74 68 65 72 20 70 61 72 74 20 6f 66 20 74 68  other part of th
2480: 65 20 64 61 74 61 62 61 73 65 2e 0a 53 69 6d 69  e database..Simi
2490: 6c 61 72 6c 79 2c 20 69 66 20 61 6e 79 20 6f 6e  larly, if any on
24a0: 65 20 70 72 6f 63 65 73 73 20 69 73 20 77 72 69  e process is wri
24b0: 74 69 6e 67 20 74 6f 20 61 6e 79 20 70 61 72 74  ting to any part
24c0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
24d0: 2c 0a 61 6c 6c 20 6f 74 68 65 72 20 70 72 6f 63  ,.all other proc
24e0: 65 73 73 65 73 20 61 72 65 20 70 72 65 76 65 6e  esses are preven
24f0: 74 65 64 20 66 72 6f 6d 20 72 65 61 64 69 6e 67  ted from reading
2500: 20 61 6e 79 20 6f 74 68 65 72 20 70 61 72 74 20   any other part 
2510: 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 2e  of the.database.
2520: 0a 46 6f 72 20 6d 61 6e 79 20 73 69 74 75 61 74  .For many situat
2530: 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e 6f  ions, this is no
2540: 74 20 61 20 70 72 6f 62 6c 65 6d 2e 20 20 45 61  t a problem.  Ea
2550: 63 68 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64  ch application.d
2560: 6f 65 73 20 69 74 73 20 64 61 74 61 62 61 73 65  oes its database
2570: 20 77 6f 72 6b 20 71 75 69 63 6b 6c 79 20 61 6e   work quickly an
2580: 64 20 6d 6f 76 65 73 20 6f 6e 2c 20 61 6e 64 20  d moves on, and 
2590: 6e 6f 20 6c 6f 63 6b 20 6c 61 73 74 73 20 66 6f  no lock lasts fo
25a0: 72 20 6d 6f 72 65 0a 74 68 61 6e 20 61 20 66 65  r more.than a fe
25b0: 77 20 64 6f 7a 65 6e 20 6d 69 6c 6c 69 73 65 63  w dozen millisec
25c0: 6f 6e 64 73 2e 20 20 42 75 74 20 74 68 65 72 65  onds.  But there
25d0: 20 61 72 65 20 73 6f 6d 65 20 70 72 6f 62 6c 65   are some proble
25e0: 6d 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0a  ms that require.
25f0: 6d 6f 72 65 20 63 6f 6e 63 75 72 72 61 6e 63 79  more concurrancy
2600: 2c 20 61 6e 64 20 74 68 6f 73 65 20 70 72 6f 62  , and those prob
2610: 6c 65 6d 73 20 77 69 6c 6c 20 6e 65 65 64 20 74  lems will need t
2620: 6f 20 73 65 65 6b 20 61 20 64 69 66 66 65 72 65  o seek a differe
2630: 6e 74 0a 73 6f 6c 75 74 69 6f 6e 2e 0a 3c 2f 70  nt.solution..</p
2640: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 2f 75 6c 3e 0a 0a  >.</li>..</ul>..
2650: 7d 0a 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 3c 68  }...puts {.<p><h
2660: 72 20 2f 3e 3c 2f 70 3e 0a 3c 70 3e 0a 3c 61 20  r /></p>.<p>.<a 
2670: 68 72 65 66 3d 22 69 6e 64 65 78 2e 68 74 6d 6c  href="index.html
2680: 22 3e 3c 69 6d 67 20 73 72 63 3d 22 2f 67 6f 62  "><img src="/gob
2690: 61 63 6b 2e 6a 70 67 22 20 62 6f 72 64 65 72 3d  ack.jpg" border=
26a0: 30 20 2f 3e 0a 42 61 63 6b 20 74 6f 20 74 68 65  0 />.Back to the
26b0: 20 53 51 4c 69 74 65 20 68 6f 6d 65 20 70 61 67   SQLite home pag
26c0: 65 3c 2f 61 3e 0a 3c 2f 70 3e 0a 0a 3c 2f 62 6f  e</a>.</p>..</bo
26d0: 64 79 3e 3c 2f 68 74 6d 6c 3e 7d 0a              dy></html>}.