/ Hex Artifact Content
Login

Artifact fdacb0ba2d39831e8a6240d05a490026ad4c4e4c:


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 32 20 32 30 30 34 2f 31 30 2f  l,v 1.2 2004/10/
0070: 31 30 20 31 37 3a 32 34 3a 35 35 20 64 72 68 20  10 17:24:55 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 65 6e 63 79 2c 20 66 69 6e 65 2d 67  currency, 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 69 6e 67 20 61 20 63 6c  are writing a cl
15d0: 69 65 6e 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  ient application
15e0: 20 66 6f 72 20 61 6e 20 65 6e 74 65 72 70 72 69   for an enterpri
15f0: 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  se database engi
1600: 6e 65 2c 0a 69 74 20 6d 61 6b 65 73 20 73 65 6e  ne,.it makes sen
1610: 73 65 20 74 6f 20 75 73 65 20 61 20 67 65 6e 65  se to use a gene
1620: 72 69 63 20 64 61 74 61 62 61 73 65 20 62 61 63  ric database bac
1630: 6b 65 6e 64 20 74 68 61 74 20 61 6c 6c 6f 77 73  kend that allows
1640: 20 79 6f 75 20 74 6f 20 63 6f 6e 6e 65 63 74 0a   you to connect.
1650: 74 6f 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  to many differen
1660: 74 20 6b 69 6e 64 73 20 6f 66 20 53 51 4c 20 64  t kinds of SQL d
1670: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
1680: 20 20 49 74 20 6d 61 6b 65 73 20 65 76 65 6e 20    It makes even 
1690: 62 65 74 74 65 72 0a 73 65 6e 73 65 20 74 6f 0a  better.sense to.
16a0: 67 6f 20 61 68 65 61 64 20 61 6e 64 20 69 6e 63  go ahead and inc
16b0: 6c 75 64 65 20 53 51 4c 69 74 65 20 69 6e 20 74  lude SQLite in t
16c0: 68 65 20 6d 69 78 20 6f 66 20 73 75 70 70 6f 72  he mix of suppor
16d0: 74 65 64 20 64 61 74 61 62 61 73 65 20 61 6e 64  ted database and
16e0: 20 74 6f 20 73 74 61 74 69 63 61 6c 6c 79 0a 6c   to statically.l
16f0: 69 6e 6b 20 74 68 65 20 53 51 4c 69 74 65 20 65  ink the SQLite e
1700: 6e 67 69 6e 65 20 69 6e 20 77 69 74 68 20 74 68  ngine in with th
1710: 65 20 63 6c 69 65 6e 74 2e 20 20 54 68 61 74 20  e client.  That 
1720: 77 61 79 20 74 68 65 20 63 6c 69 65 6e 74 20 70  way the client p
1730: 72 6f 67 72 61 6d 0a 63 61 6e 20 62 65 20 75 73  rogram.can be us
1740: 65 64 20 73 74 61 6e 64 61 6c 6f 6e 65 20 77 69  ed standalone wi
1750: 74 68 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74  th an SQLite dat
1760: 61 20 66 69 6c 65 20 66 6f 72 20 74 65 73 74 69  a file for testi
1770: 6e 67 20 6f 72 20 66 6f 72 0a 64 65 6d 6f 6e 73  ng or for.demons
1780: 74 72 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 3c  trations..</p>.<
1790: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
17a0: 44 61 74 61 62 61 73 65 20 50 65 64 61 67 6f 67  Database Pedagog
17b0: 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 42  y</b></p>..<p>.B
17c0: 65 63 61 75 73 65 20 69 74 20 69 73 20 73 69 6d  ecause it is sim
17d0: 70 6c 65 20 74 6f 20 73 65 74 75 70 20 61 6e 64  ple to setup and
17e0: 20 75 73 65 20 28 69 6e 73 74 61 6c 6c 61 74 69   use (installati
17f0: 6f 6e 20 69 73 20 74 72 69 76 69 61 6c 3a 20 6a  on is trivial: j
1800: 75 73 74 0a 63 6f 70 79 20 74 68 65 20 3c 62 3e  ust.copy the <b>
1810: 73 71 6c 69 74 65 3c 2f 62 3e 20 6f 72 20 3c 62  sqlite</b> or <b
1820: 3e 73 71 6c 69 74 65 2e 65 78 65 3c 2f 62 3e 20  >sqlite.exe</b> 
1830: 65 78 65 63 75 74 61 62 6c 65 20 74 6f 20 74 68  executable to th
1840: 65 20 74 61 72 67 65 74 20 6d 61 63 68 69 6e 65  e target machine
1850: 0a 61 6e 64 20 72 75 6e 20 69 74 29 20 53 51 4c  .and run it) SQL
1860: 69 74 65 20 6d 61 6b 65 73 20 61 20 67 6f 6f 64  ite makes a good
1870: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
1880: 20 66 6f 72 20 75 73 65 20 69 6e 20 74 65 61 63   for use in teac
1890: 68 69 6e 67 20 53 51 4c 2e 0a 53 74 75 64 65 6e  hing SQL..Studen
18a0: 74 73 20 63 61 6e 20 65 61 73 69 6c 79 20 63 72  ts can easily cr
18b0: 65 61 74 65 20 61 73 20 6d 61 6e 79 20 64 61 74  eate as many dat
18c0: 61 62 61 73 65 73 20 61 73 20 74 68 65 79 20 6c  abases as they l
18d0: 69 6b 65 20 61 6e 64 20 63 61 6e 0a 65 6d 61 69  ike and can.emai
18e0: 6c 20 64 61 74 61 62 61 73 65 73 20 74 6f 20 74  l databases to t
18f0: 68 65 20 69 6e 73 74 72 75 63 74 6f 72 20 66 6f  he instructor fo
1900: 72 20 63 6f 6d 6d 65 6e 74 73 20 6f 72 20 67 72  r comments or gr
1910: 61 64 69 6e 67 2e 20 20 46 6f 72 20 6d 6f 72 65  ading.  For more
1920: 0a 61 64 76 61 6e 63 65 64 20 73 74 75 64 65 6e  .advanced studen
1930: 74 73 20 77 68 6f 20 61 72 65 20 69 6e 74 65 72  ts who are inter
1940: 65 73 74 65 64 20 69 6e 20 73 74 75 64 79 69 6e  ested in studyin
1950: 67 20 68 6f 77 20 61 6e 20 52 44 42 4d 53 20 69  g how an RDBMS i
1960: 73 0a 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20 74  s.implemented, t
1970: 68 65 20 6d 6f 64 75 6c 61 72 20 61 6e 64 20 77  he modular and w
1980: 65 6c 6c 2d 63 6f 6d 6d 65 6e 74 65 64 20 61 6e  ell-commented an
1990: 64 20 64 6f 63 75 6d 65 6e 74 65 64 20 53 51 4c  d documented SQL
19a0: 69 74 65 20 63 6f 64 65 0a 63 61 6e 20 73 65 72  ite code.can ser
19b0: 76 65 20 61 73 20 61 20 67 6f 6f 64 20 62 61 73  ve as a good bas
19c0: 69 73 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  is.  This is not
19d0: 20 74 6f 20 73 61 79 20 74 68 61 74 20 53 51 4c   to say that SQL
19e0: 69 74 65 20 69 73 20 61 6e 20 61 63 63 75 72 61  ite is an accura
19f0: 74 65 0a 6d 6f 64 65 6c 20 6f 66 20 68 6f 77 20  te.model of how 
1a00: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20 65  other database e
1a10: 6e 67 69 6e 65 73 20 61 72 65 20 69 6d 70 6c 65  ngines are imple
1a20: 6d 65 6e 74 65 64 2c 20 62 75 74 20 72 61 74 68  mented, but rath
1a30: 65 72 20 61 20 73 74 75 64 65 6e 74 20 77 68 6f  er a student who
1a40: 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 68 6f 77  .understands how
1a50: 20 53 51 4c 69 74 65 20 77 6f 72 6b 73 20 63 61   SQLite works ca
1a60: 6e 20 6d 6f 72 65 20 71 75 69 63 6b 6c 79 20 63  n more quickly c
1a70: 6f 6d 70 72 65 68 65 6e 64 20 74 68 65 20 6f 70  omprehend the op
1a80: 65 72 61 74 69 6f 6e 61 6c 0a 70 72 69 6e 63 69  erational.princi
1a90: 70 6c 65 73 20 6f 66 20 6f 74 68 65 72 20 73 79  ples of other sy
1aa0: 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69  stems..</p>.</li
1ab0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 78 70  >..<li><p><b>Exp
1ac0: 65 72 69 6d 65 6e 74 61 6c 20 53 51 4c 20 6c 61  erimental SQL la
1ad0: 6e 67 75 61 67 65 20 65 78 74 65 6e 73 69 6f 6e  nguage extension
1ae0: 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  s</b></p>..<p>Th
1af0: 65 20 73 69 6d 70 6c 65 2c 20 6d 6f 64 75 6c 61  e simple, modula
1b00: 72 20 64 65 73 69 67 6e 20 6f 66 20 53 51 4c 69  r design of SQLi
1b10: 74 65 20 6d 61 6b 65 73 20 69 74 20 61 20 67 6f  te makes it a go
1b20: 6f 64 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 0a  od platform for.
1b30: 70 72 6f 74 6f 74 79 70 69 6e 67 20 6e 65 77 2c  prototyping new,
1b40: 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 64 61   experimental da
1b50: 74 61 62 61 73 65 20 6c 61 6e 67 75 61 67 65 20  tabase language 
1b60: 66 65 61 74 75 72 65 73 20 6f 72 20 69 64 65 61  features or idea
1b70: 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 0a  s..</p>.</li>...
1b80: 3c 2f 75 6c 3e 0a 0a 3c 68 32 3e 53 69 74 75 61  </ul>..<h2>Situa
1b90: 74 69 6f 6e 73 20 57 68 65 72 65 20 41 6e 6f 74  tions Where Anot
1ba0: 68 65 72 20 52 44 42 4d 53 20 4d 61 79 20 57 6f  her RDBMS May Wo
1bb0: 72 6b 20 42 65 74 74 65 72 3c 2f 68 32 3e 0a 0a  rk Better</h2>..
1bc0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 43  <ul>.<li><p><b>C
1bd0: 6c 69 65 6e 74 2f 53 65 72 76 65 72 20 41 70 70  lient/Server App
1be0: 6c 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 70 3e  lications</b><p>
1bf0: 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 68 61 76 65  ..<p>If you have
1c00: 20 6d 61 6e 79 20 63 6c 69 65 6e 74 20 70 72 6f   many client pro
1c10: 67 72 61 6d 73 20 61 63 63 65 73 73 20 61 20 63  grams access a c
1c20: 6f 6d 6d 6f 6e 20 64 61 74 61 62 61 73 65 0a 6f  ommon database.o
1c30: 76 65 72 20 61 20 6e 65 74 77 6f 72 6b 2c 20 79  ver a network, y
1c40: 6f 75 20 73 68 6f 75 6c 64 20 63 6f 6e 73 69 64  ou should consid
1c50: 65 72 20 75 73 69 6e 67 20 61 20 63 6c 69 65 6e  er using a clien
1c60: 74 2f 73 65 72 76 65 72 20 64 61 74 61 62 61 73  t/server databas
1c70: 65 0a 65 6e 67 69 6e 65 20 69 6e 73 74 65 61 64  e.engine instead
1c80: 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 53 51 4c   of SQLite.  SQL
1c90: 69 74 65 20 77 69 6c 6c 20 77 6f 72 6b 20 6f 76  ite will work ov
1ca0: 65 72 20 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c  er a network fil
1cb0: 65 73 79 73 74 65 6d 2c 0a 62 75 74 20 62 65 63  esystem,.but bec
1cc0: 61 75 73 65 20 6f 66 20 74 68 65 20 6c 61 74 65  ause of the late
1cd0: 6e 63 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ncy associated w
1ce0: 69 74 68 20 6d 6f 73 74 20 6e 65 74 77 6f 72 6b  ith most network
1cf0: 20 66 69 6c 65 73 79 73 74 65 6d 73 2c 0a 70 65   filesystems,.pe
1d00: 72 66 6f 72 6d 61 6e 63 65 20 77 69 6c 6c 20 6e  rformance will n
1d10: 6f 74 20 62 65 20 67 72 65 61 74 2e 20 20 41 6c  ot be great.  Al
1d20: 73 6f 2c 20 74 68 65 20 66 69 6c 65 20 6c 6f 63  so, the file loc
1d30: 6b 69 6e 67 20 6c 6f 67 69 63 20 6f 66 0a 6d 61  king logic of.ma
1d40: 6e 79 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73  ny network files
1d50: 79 73 74 65 6d 73 20 69 6d 70 6c 65 6d 65 6e 74  ystems implement
1d60: 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 62  ation contains b
1d70: 75 67 73 20 28 6f 6e 20 62 6f 74 68 20 55 6e 69  ugs (on both Uni
1d80: 78 0a 61 6e 64 20 77 69 6e 64 6f 77 73 29 2e 20  x.and windows). 
1d90: 20 49 66 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67   If file locking
1da0: 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 6c   does not work l
1db0: 69 6b 65 20 69 74 20 73 68 6f 75 6c 64 2c 0a 69  ike it should,.i
1dc0: 74 20 6d 69 67 68 74 20 62 65 20 70 6f 73 73 69  t might be possi
1dd0: 62 6c 65 20 66 6f 72 20 74 77 6f 20 6f 72 20 6d  ble for two or m
1de0: 6f 72 65 20 63 6c 69 65 6e 74 20 70 72 6f 67 72  ore client progr
1df0: 61 6d 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ams to modify th
1e00: 65 0a 73 61 6d 65 20 70 61 72 74 20 6f 66 20 74  e.same part of t
1e10: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
1e20: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1e30: 65 2c 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  e, resulting in 
1e40: 0a 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70  .database corrup
1e50: 74 69 6f 6e 2e 20 20 42 65 63 61 75 73 65 20 74  tion.  Because t
1e60: 68 69 73 20 70 72 6f 62 6c 65 6d 20 72 65 73 75  his problem resu
1e70: 6c 74 73 20 66 72 6f 6d 20 62 75 67 73 20 69 6e  lts from bugs in
1e80: 0a 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20  .the underlying 
1e90: 66 69 6c 65 73 79 73 74 65 6d 20 69 6d 70 6c 65  filesystem imple
1ea0: 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 72 65  mentation, there
1eb0: 20 69 73 20 6e 6f 74 68 69 6e 67 20 53 51 4c 69   is nothing SQLi
1ec0: 74 65 0a 63 61 6e 20 64 6f 20 74 6f 20 70 72 65  te.can do to pre
1ed0: 76 65 6e 74 20 69 74 2e 3c 2f 70 3e 0a 0a 3c 70  vent it.</p>..<p
1ee0: 3e 41 20 67 6f 6f 64 20 72 75 6c 65 20 6f 66 20  >A good rule of 
1ef0: 74 68 75 6d 62 20 69 73 20 74 68 61 74 20 79 6f  thumb is that yo
1f00: 75 20 73 68 6f 75 6c 64 20 61 76 6f 69 64 20 75  u should avoid u
1f10: 73 69 6e 67 20 53 51 4c 69 74 65 0a 69 6e 20 73  sing SQLite.in s
1f20: 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20  ituations where 
1f30: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
1f40: 65 20 77 69 6c 6c 20 62 65 20 61 63 63 65 73 73  e will be access
1f50: 65 64 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c  ed simultaneousl
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 69 6e 67 20 74 68   of splitting th
2050: 65 0a 64 61 74 61 62 61 73 65 20 63 6f 6d 70 6f  e.database compo
2060: 6e 65 6e 74 20 6f 66 66 20 6f 6e 74 6f 20 61 20  nent off onto a 
2070: 73 65 70 61 72 61 74 65 20 6d 61 63 68 69 6e 65  separate machine
2080: 2c 20 74 68 65 6e 20 79 6f 75 20 73 68 6f 75 6c  , then you shoul
2090: 64 20 0a 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  d .definitely co
20a0: 6e 73 69 64 65 72 20 75 73 69 6e 67 20 61 6e 20  nsider using an 
20b0: 65 6e 74 65 72 70 72 69 73 65 2d 63 6c 61 73 73  enterprise-class
20c0: 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 64   client/server d
20d0: 61 74 61 62 61 73 65 0a 65 6e 67 69 6e 65 20 69  atabase.engine i
20e0: 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 69 74 65  nstead of SQLite
20f0: 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69  .</p>.</li>..<li
2100: 3e 3c 70 3e 3c 62 3e 56 65 72 79 20 6c 61 72 67  ><p><b>Very larg
2110: 65 20 64 61 74 61 73 65 74 73 3c 2f 62 3e 3c 2f  e datasets</b></
2120: 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 79 6f 75 20  p>..<p>When you 
2130: 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
2140: 69 6f 6e 20 69 6e 20 53 51 4c 69 74 65 20 28 77  ion in SQLite (w
2150: 68 69 63 68 20 68 61 70 70 65 6e 73 20 61 75 74  hich happens aut
2160: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 65 66 6f 72  omatically.befor
2170: 65 20 61 6e 79 20 77 72 69 74 65 20 6f 70 65 72  e any write oper
2180: 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 6e 6f  ation that is no
2190: 74 20 77 69 74 68 69 6e 20 61 6e 20 65 78 70 6c  t within an expl
21a0: 69 63 69 74 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d  icit BEGIN...COM
21b0: 4d 49 54 29 0a 74 68 65 20 65 6e 67 69 6e 65 20  MIT).the engine 
21c0: 68 61 73 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  has to allocate 
21d0: 61 20 62 69 74 6d 61 70 20 6f 66 20 64 69 72 74  a bitmap of dirt
21e0: 79 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64  y pages in the d
21f0: 69 73 6b 20 66 69 6c 65 20 74 6f 0a 68 65 6c 70  isk file to.help
2200: 20 69 74 20 6d 61 6e 61 67 65 20 69 74 73 20 72   it manage its r
2210: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
2220: 20 20 53 51 4c 69 74 65 20 6e 65 65 64 73 20 32    SQLite needs 2
2230: 35 36 20 62 79 74 65 73 20 6f 66 20 52 41 4d 20  56 bytes of RAM 
2240: 66 6f 72 0a 65 76 65 72 79 20 31 4d 42 20 6f 66  for.every 1MB of
2250: 20 64 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20   database.  For 
2260: 73 6d 61 6c 6c 65 72 20 64 61 74 61 62 61 73 65  smaller database
2270: 73 2c 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  s, the amount of
2280: 20 6d 65 6d 6f 72 79 0a 72 65 71 75 69 72 65 64   memory.required
2290: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
22a0: 6d 2c 20 62 75 74 20 77 68 65 6e 20 64 61 74 61  m, but when data
22b0: 62 61 73 65 20 62 65 67 69 6e 20 74 6f 20 67 72  base begin to gr
22c0: 6f 77 20 69 6e 74 6f 20 74 68 65 0a 6d 75 6c 74  ow into the.mult
22d0: 69 2d 67 69 67 61 62 79 74 65 20 72 61 6e 67 65  i-gigabyte range
22e0: 2c 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  , the size of th
22f0: 65 20 62 69 74 6d 61 70 20 63 61 6e 20 67 65 74  e bitmap can get
2300: 20 71 75 69 74 65 20 6c 61 72 67 65 2e 20 20 49   quite large.  I
2310: 66 0a 79 6f 75 20 6e 65 65 64 20 74 6f 20 73 74  f.you need to st
2320: 6f 72 65 20 61 6e 64 20 6d 6f 64 69 66 79 20 6d  ore and modify m
2330: 6f 72 65 20 74 68 61 6e 20 61 20 66 65 77 20 64  ore than a few d
2340: 6f 7a 65 6e 20 47 42 20 6f 66 20 64 61 74 61 2c  ozen GB of data,
2350: 20 79 6f 75 20 73 68 6f 75 6c 64 0a 63 6f 6e 73   you should.cons
2360: 69 64 65 72 20 75 73 69 6e 67 20 61 20 64 69 66  ider using a dif
2370: 66 65 72 65 6e 74 20 64 61 74 61 62 61 73 65 20  ferent database 
2380: 65 6e 67 69 6e 65 2e 0a 3c 2f 70 3e 0a 3c 2f 6c  engine..</p>.</l
2390: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 48 69  i>..<li><p><b>Hi
23a0: 67 68 20 43 6f 6e 63 75 72 72 65 6e 63 79 3c 2f  gh Concurrency</
23b0: 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  b></p>..<p>.SQLi
23c0: 74 65 20 75 73 65 73 20 72 65 61 64 65 72 2f 77  te uses reader/w
23d0: 72 69 74 65 72 20 6c 6f 63 6b 73 20 6f 6e 20 74  riter locks on t
23e0: 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
23f0: 73 65 20 66 69 6c 65 2e 20 20 54 68 61 74 20 6d  se file.  That m
2400: 65 61 6e 73 0a 69 66 20 61 6e 79 20 70 72 6f 63  eans.if any proc
2410: 65 73 73 20 69 73 20 72 65 61 64 69 6e 67 20 66  ess is reading f
2420: 72 6f 6d 20 61 6e 79 20 70 61 72 74 20 6f 66 20  rom any part of 
2430: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 61 6c  the database, al
2440: 6c 20 6f 74 68 65 72 0a 70 72 6f 63 65 73 73 65  l other.processe
2450: 73 20 61 72 65 20 70 72 65 76 65 6e 74 65 64 20  s are prevented 
2460: 66 72 6f 6d 20 77 72 69 74 69 6e 67 20 61 6e 79  from writing any
2470: 20 6f 74 68 65 72 20 70 61 72 74 20 6f 66 20 74   other part of t
2480: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 53 69 6d  he database..Sim
2490: 69 6c 61 72 6c 79 2c 20 69 66 20 61 6e 79 20 6f  ilarly, if any o
24a0: 6e 65 20 70 72 6f 63 65 73 73 20 69 73 20 77 72  ne process is wr
24b0: 69 74 69 6e 67 20 74 6f 20 61 6e 79 20 70 61 72  iting to any par
24c0: 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
24d0: 65 2c 0a 61 6c 6c 20 6f 74 68 65 72 20 70 72 6f  e,.all other pro
24e0: 63 65 73 73 65 73 20 61 72 65 20 70 72 65 76 65  cesses are preve
24f0: 6e 74 65 64 20 66 72 6f 6d 20 72 65 61 64 69 6e  nted from readin
2500: 67 20 61 6e 79 20 6f 74 68 65 72 20 70 61 72 74  g any other part
2510: 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65   of the.database
2520: 2e 0a 46 6f 72 20 6d 61 6e 79 20 73 69 74 75 61  ..For many situa
2530: 74 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20 6e  tions, this is n
2540: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 20 20 45  ot a problem.  E
2550: 61 63 68 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a  ach application.
2560: 64 6f 65 73 20 69 74 73 20 64 61 74 61 62 61 73  does its databas
2570: 65 20 77 6f 72 6b 20 71 75 69 63 6b 6c 79 20 61  e work quickly a
2580: 6e 64 20 6d 6f 76 65 73 20 6f 6e 2c 20 61 6e 64  nd moves on, and
2590: 20 6e 6f 20 6c 6f 63 6b 20 6c 61 73 74 73 20 66   no lock lasts f
25a0: 6f 72 20 6d 6f 72 65 0a 74 68 61 6e 20 61 20 66  or more.than a f
25b0: 65 77 20 64 6f 7a 65 6e 20 6d 69 6c 6c 69 73 65  ew dozen millise
25c0: 63 6f 6e 64 73 2e 20 20 42 75 74 20 74 68 65 72  conds.  But ther
25d0: 65 20 61 72 65 20 73 6f 6d 65 20 70 72 6f 62 6c  e are some probl
25e0: 65 6d 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ems that require
25f0: 0a 6d 6f 72 65 20 63 6f 6e 63 75 72 72 65 6e 63  .more concurrenc
2600: 79 2c 20 61 6e 64 20 74 68 6f 73 65 20 70 72 6f  y, and those pro
2610: 62 6c 65 6d 73 20 77 69 6c 6c 20 6e 65 65 64 20  blems will need 
2620: 74 6f 20 73 65 65 6b 20 61 20 64 69 66 66 65 72  to seek a differ
2630: 65 6e 74 0a 73 6f 6c 75 74 69 6f 6e 2e 0a 3c 2f  ent.solution..</
2640: 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 2f 75 6c 3e 0a  p>.</li>..</ul>.
2650: 0a 7d 0a 0a 0a 70 75 74 73 20 7b 0a 3c 70 3e 3c  .}...puts {.<p><
2660: 68 72 20 2f 3e 3c 2f 70 3e 0a 3c 70 3e 0a 3c 61  hr /></p>.<p>.<a
2670: 20 68 72 65 66 3d 22 69 6e 64 65 78 2e 68 74 6d   href="index.htm
2680: 6c 22 3e 3c 69 6d 67 20 73 72 63 3d 22 2f 67 6f  l"><img src="/go
2690: 62 61 63 6b 2e 6a 70 67 22 20 62 6f 72 64 65 72  back.jpg" border
26a0: 3d 30 20 2f 3e 0a 42 61 63 6b 20 74 6f 20 74 68  =0 />.Back to th
26b0: 65 20 53 51 4c 69 74 65 20 68 6f 6d 65 20 70 61  e SQLite home pa
26c0: 67 65 3c 2f 61 3e 0a 3c 2f 70 3e 0a 0a 3c 2f 62  ge</a>.</p>..</b
26d0: 6f 64 79 3e 3c 2f 68 74 6d 6c 3e 7d 0a           ody></html>}.