/ Hex Artifact Content
Login

Artifact c3b50d3ac31c54be2a1af9b488a89d22f1e6e746:


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 33 20 32 30 30 35 2f 30 31 2f  l,v 1.3 2005/01/
0070: 30 33 20 30 31 3a 33 33 3a 30 30 20 64 72 68 20  03 01:33:00 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 75 73 65 20 69 6e 20 61 20 70  le to use in a p
0190: 72 6f 67 72 61 6d 3c 2f 6c 69 3e 0a 3c 6c 69 3e  rogram</li>.<li>
01a0: 53 69 6d 70 6c 65 20 74 6f 20 6d 61 69 6e 74 61  Simple to mainta
01b0: 69 6e 20 61 6e 64 20 63 75 73 74 6f 6d 69 7a 65  in and customize
01c0: 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  </li>.</ul>..<p>
01d0: 0a 4d 61 6e 79 20 70 65 6f 70 6c 65 20 6c 69 6b  .Many people lik
01e0: 65 20 53 51 4c 69 74 65 20 62 65 63 61 75 73 65  e SQLite because
01f0: 20 69 74 20 69 73 20 73 6d 61 6c 6c 20 61 6e 64   it is small and
0200: 20 66 61 73 74 2e 20 20 42 75 74 20 74 68 6f 73   fast.  But thos
0210: 65 0a 71 75 61 6c 69 74 69 65 73 20 61 72 65 20  e.qualities are 
0220: 6a 75 73 74 20 68 61 70 70 79 20 61 63 63 69 64  just happy accid
0230: 65 6e 74 73 2e 0a 55 73 65 72 73 20 61 6c 73 6f  ents..Users also
0240: 20 66 69 6e 64 20 74 68 61 74 20 53 51 4c 69 74   find that SQLit
0250: 65 20 69 73 20 76 65 72 79 20 72 65 6c 69 61 62  e is very reliab
0260: 6c 65 2e 20 20 52 65 6c 69 61 62 69 6c 69 74 79  le.  Reliability
0270: 20 69 73 0a 61 20 63 6f 6e 73 65 71 75 65 6e 63   is.a consequenc
0280: 65 20 6f 66 20 73 69 6d 70 6c 69 63 69 74 79 2e  e of simplicity.
0290: 20 20 57 69 74 68 20 6c 65 73 73 20 63 6f 6d 70    With less comp
02a0: 6c 69 63 61 74 69 6f 6e 2c 20 74 68 65 72 65 20  lication, there 
02b0: 69 73 0a 6c 65 73 73 20 74 6f 20 67 6f 20 77 72  is.less to go wr
02c0: 6f 6e 67 2e 20 20 53 6f 2c 20 79 65 73 2c 20 53  ong.  So, yes, S
02d0: 51 4c 69 74 65 20 69 73 20 73 6d 61 6c 6c 2c 20  QLite is small, 
02e0: 66 61 73 74 2c 20 61 6e 64 20 72 65 6c 69 61 62  fast, and reliab
02f0: 6c 65 2c 0a 62 75 74 20 66 69 72 73 74 20 61 6e  le,.but first an
0300: 64 20 66 6f 72 65 6d 6f 73 74 2c 20 53 51 4c 69  d foremost, SQLi
0310: 74 65 20 73 74 72 69 76 65 73 20 74 6f 20 62 65  te strives to be
0320: 20 73 69 6d 70 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c   simple..</p>..<
0330: 70 3e 0a 53 69 6d 70 6c 69 63 69 74 79 20 69 6e  p>.Simplicity in
0340: 20 61 20 64 61 74 61 62 61 73 65 20 65 6e 67 69   a database engi
0350: 6e 65 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  ne can be either
0360: 20 61 20 73 74 72 65 6e 67 74 68 20 6f 72 20 61   a strength or a
0370: 0a 77 65 61 6b 6e 65 73 73 2c 20 64 65 70 65 6e  .weakness, depen
0380: 64 69 6e 67 20 6f 6e 20 77 68 61 74 20 79 6f 75  ding on what you
0390: 20 61 72 65 20 74 72 79 69 6e 67 20 74 6f 20 64   are trying to d
03a0: 6f 2e 20 20 49 6e 20 6f 72 64 65 72 20 74 6f 0a  o.  In order to.
03b0: 61 63 68 69 65 76 65 20 73 69 6d 70 6c 69 63 69  achieve simplici
03c0: 74 79 2c 20 53 51 4c 69 74 65 20 68 61 73 20 68  ty, SQLite has h
03d0: 61 64 20 74 6f 20 73 61 63 72 69 66 69 63 65 20  ad to sacrifice 
03e0: 6f 74 68 65 72 20 63 68 61 72 61 63 74 65 72 69  other characteri
03f0: 73 74 69 63 73 0a 74 68 61 74 20 73 6f 6d 65 20  stics.that some 
0400: 70 65 6f 70 6c 65 20 66 69 6e 64 20 75 73 65 66  people find usef
0410: 75 6c 2c 20 73 75 63 68 20 61 73 20 68 69 67 68  ul, such as high
0420: 20 63 6f 6e 63 75 72 72 65 6e 63 79 2c 20 66 69   concurrency, fi
0430: 6e 65 2d 67 72 61 69 6e 65 64 0a 61 63 63 65 73  ne-grained.acces
0440: 73 20 63 6f 6e 74 72 6f 6c 2c 20 61 20 72 69 63  s control, a ric
0450: 68 20 73 65 74 20 6f 66 20 62 75 69 6c 74 2d 69  h set of built-i
0460: 6e 20 66 75 6e 63 74 69 6f 6e 73 2c 20 73 74 6f  n functions, sto
0470: 72 65 64 20 70 72 6f 63 65 64 75 72 65 73 2c 0a  red procedures,.
0480: 65 73 6f 74 65 72 69 63 20 53 51 4c 20 6c 61 6e  esoteric SQL lan
0490: 67 75 61 67 65 20 66 65 61 74 75 72 65 73 2c 20  guage features, 
04a0: 58 4d 4c 20 61 6e 64 2f 6f 72 20 4a 61 76 61 20  XML and/or Java 
04b0: 65 78 74 65 6e 73 69 6f 6e 73 2c 0a 74 65 72 61  extensions,.tera
04c0: 2d 20 6f 72 20 70 65 74 61 2d 62 79 74 65 20 73  - or peta-byte s
04d0: 63 61 6c 61 62 69 6c 69 74 79 2c 20 61 6e 64 20  calability, and 
04e0: 73 6f 20 66 6f 72 74 68 2e 20 20 49 66 20 79 6f  so forth.  If yo
04f0: 75 20 6e 65 65 64 20 74 68 65 73 65 0a 6b 69 6e  u need these.kin
0500: 64 73 20 6f 66 20 66 65 61 74 75 72 65 73 20 61  ds of features a
0510: 6e 64 20 64 6f 6e 27 74 20 6d 69 6e 64 20 74 68  nd don't mind th
0520: 65 20 61 64 64 65 64 20 63 6f 6d 70 6c 65 78 69  e added complexi
0530: 74 79 20 74 68 61 74 20 74 68 65 79 0a 62 72 69  ty that they.bri
0540: 6e 67 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  ng, then SQLite 
0550: 69 73 20 70 72 6f 62 61 62 6c 79 20 6e 6f 74 20  is probably not 
0560: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72  the database for
0570: 20 79 6f 75 2e 0a 53 51 4c 69 74 65 20 69 73 20   you..SQLite is 
0580: 6e 6f 74 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  not intended to 
0590: 62 65 20 61 6e 20 65 6e 74 65 72 70 72 69 73 65  be an enterprise
05a0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
05b0: 2e 20 20 49 74 0a 6e 6f 74 20 64 65 73 69 67 6e  .  It.not design
05c0: 65 64 20 74 6f 20 63 6f 6d 70 65 74 65 20 77 69  ed to compete wi
05d0: 74 68 20 4f 72 61 63 6c 65 20 6f 72 20 50 6f 73  th Oracle or Pos
05e0: 74 67 72 65 53 51 4c 2e 0a 3c 2f 70 3e 0a 0a 3c  tgreSQL..</p>..<
05f0: 70 3e 0a 54 68 65 20 62 61 73 69 63 20 72 75 6c  p>.The basic rul
0600: 65 20 6f 66 20 74 68 75 6d 62 20 66 6f 72 20 77  e of thumb for w
0610: 68 65 6e 20 69 74 20 69 73 20 61 70 70 72 6f 70  hen it is approp
0620: 72 69 61 74 65 20 74 6f 20 75 73 65 20 53 51 4c  riate to use SQL
0630: 69 74 65 20 69 73 0a 74 68 69 73 3a 20 20 55 73  ite is.this:  Us
0640: 65 20 53 51 4c 69 74 65 20 69 6e 20 73 69 74 75  e SQLite in situ
0650: 61 74 69 6f 6e 73 20 77 68 65 72 65 20 73 69 6d  ations where sim
0660: 70 6c 69 63 69 74 79 20 6f 66 20 61 64 6d 69 6e  plicity of admin
0670: 69 73 74 72 61 74 69 6f 6e 2c 0a 69 6d 70 6c 65  istration,.imple
0680: 6d 65 6e 74 61 74 69 6f 6e 2c 20 61 6e 64 20 6d  mentation, and m
0690: 61 69 6e 74 65 6e 61 6e 63 65 20 61 72 65 20 6d  aintenance are m
06a0: 6f 72 65 20 69 6d 70 6f 72 74 61 6e 74 20 74 68  ore important th
06b0: 61 6e 20 74 68 65 20 63 6f 75 6e 74 6c 65 73 73  an the countless
06c0: 0a 63 6f 6d 70 6c 65 78 20 66 65 61 74 75 72 65  .complex feature
06d0: 73 20 74 68 61 74 20 65 6e 74 65 72 70 72 69 73  s that enterpris
06e0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  e database engin
06f0: 65 73 20 70 72 6f 76 69 64 65 2e 0a 41 73 20 69  es provide..As i
0700: 74 20 74 75 72 6e 73 20 6f 75 74 2c 20 73 69 74  t turns out, sit
0710: 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20 73 69  uations where si
0720: 6d 70 6c 69 63 69 74 79 20 69 73 20 74 68 65 20  mplicity is the 
0730: 62 65 74 74 65 72 20 63 68 6f 69 63 65 0a 61 72  better choice.ar
0740: 65 20 6d 6f 72 65 20 63 6f 6d 6d 6f 6e 20 74 68  e more common th
0750: 61 74 20 6d 61 6e 79 20 70 65 6f 70 6c 65 20 72  at many people r
0760: 65 61 6c 69 7a 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68  ealize..</p>..<h
0770: 32 3e 53 69 74 75 61 74 69 6f 6e 73 20 57 68 65  2>Situations Whe
0780: 72 65 20 53 51 4c 69 74 65 20 57 6f 72 6b 73 20  re SQLite Works 
0790: 57 65 6c 6c 3c 2f 68 32 3e 0a 0a 3c 75 6c 3e 0a  Well</h2>..<ul>.
07a0: 3c 6c 69 3e 3c 70 3e 3c 62 3e 57 65 62 73 69 74  <li><p><b>Websit
07b0: 65 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 53  es</b></p>..<p>S
07c0: 51 4c 69 74 65 20 75 73 75 61 6c 6c 79 20 77 69  QLite usually wi
07d0: 6c 6c 20 77 6f 72 6b 20 67 72 65 61 74 20 61 73  ll work great as
07e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
07f0: 67 69 6e 65 20 66 6f 72 20 6c 6f 77 20 74 6f 0a  gine for low to.
0800: 6d 65 64 69 75 6d 20 74 72 61 66 66 69 63 20 77  medium traffic w
0810: 65 62 73 69 74 65 73 20 28 77 68 69 63 68 20 69  ebsites (which i
0820: 73 20 74 6f 20 73 61 79 2c 20 39 39 2e 39 25 20  s to say, 99.9% 
0830: 6f 66 20 61 6c 6c 20 77 65 62 73 69 74 65 73 29  of all websites)
0840: 2e 0a 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  ..The amount of 
0850: 77 65 62 20 74 72 61 66 66 69 63 20 74 68 61 74  web traffic that
0860: 20 53 51 4c 69 74 65 20 63 61 6e 20 68 61 6e 64   SQLite can hand
0870: 6c 65 20 64 65 70 65 6e 64 73 2c 20 6f 66 20 63  le depends, of c
0880: 6f 75 72 73 65 2c 0a 6f 6e 20 68 6f 77 20 68 65  ourse,.on how he
0890: 61 76 69 6c 79 20 74 68 65 20 77 65 62 73 69 74  avily the websit
08a0: 65 20 75 73 65 73 20 69 74 73 20 64 61 74 61 62  e uses its datab
08b0: 61 73 65 2e 20 20 47 65 6e 65 72 61 6c 6c 79 0a  ase.  Generally.
08c0: 73 70 65 61 6b 69 6e 67 2c 20 61 6e 79 20 73 69  speaking, any si
08d0: 74 65 20 74 68 61 74 20 67 65 74 73 20 66 65 77  te that gets few
08e0: 65 72 20 74 68 61 6e 20 61 20 31 30 30 30 30 30  er than a 100000
08f0: 20 68 69 74 73 2f 64 61 79 20 73 68 6f 75 6c 64   hits/day should
0900: 20 77 6f 72 6b 0a 66 69 6e 65 20 77 69 74 68 20   work.fine with 
0910: 53 51 4c 69 74 65 2e 0a 54 68 65 20 31 30 30 30  SQLite..The 1000
0920: 30 30 20 68 69 74 73 2f 64 61 79 20 66 69 67 75  00 hits/day figu
0930: 72 65 20 69 73 20 61 20 63 6f 6e 73 65 72 76 61  re is a conserva
0940: 74 69 76 65 20 65 73 74 69 6d 61 74 65 2c 20 6e  tive estimate, n
0950: 6f 74 20 61 0a 68 61 72 64 20 75 70 70 65 72 20  ot a.hard upper 
0960: 62 6f 75 6e 64 2e 0a 53 51 4c 69 74 65 20 68 61  bound..SQLite ha
0970: 73 20 62 65 65 6e 20 64 65 6d 6f 6e 73 74 72 61  s been demonstra
0980: 74 65 64 20 74 6f 20 77 6f 72 6b 20 77 69 74 68  ted to work with
0990: 20 31 30 20 74 69 6d 65 73 20 74 68 61 74 20 61   10 times that a
09a0: 6d 6f 75 6e 74 0a 6f 66 20 74 72 61 66 66 69 63  mount.of traffic
09b0: 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69  .</p>.</li>..<li
09c0: 3e 3c 70 3e 3c 62 3e 45 6d 62 65 64 64 65 64 20  ><p><b>Embedded 
09d0: 64 65 76 69 63 65 73 20 61 6e 64 20 61 70 70 6c  devices and appl
09e0: 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 2f 70 3e  ications</b></p>
09f0: 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 61 6e 20  ..<p>Because an 
0a00: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0a10: 72 65 71 75 69 72 65 73 20 6c 69 74 74 6c 65 20  requires little 
0a20: 6f 72 20 6e 6f 20 61 64 6d 69 6e 69 73 74 72 61  or no administra
0a30: 74 69 6f 6e 2c 0a 53 51 4c 69 74 65 20 69 73 20  tion,.SQLite is 
0a40: 61 20 67 6f 6f 64 20 63 68 6f 69 63 65 20 66 6f  a good choice fo
0a50: 72 20 64 65 76 69 63 65 73 20 6f 72 20 73 65 72  r devices or ser
0a60: 76 69 63 65 73 20 74 68 61 74 20 6d 75 73 74 20  vices that must 
0a70: 77 6f 72 6b 0a 75 6e 61 74 74 65 6e 64 65 64 20  work.unattended 
0a80: 61 6e 64 20 77 69 74 68 6f 75 74 20 68 75 6d 61  and without huma
0a90: 6e 20 73 75 70 70 6f 72 74 2e 20 20 53 51 4c 69  n support.  SQLi
0aa0: 74 65 20 69 73 20 61 20 67 6f 6f 64 20 66 69 74  te is a good fit
0ab0: 20 66 6f 72 0a 75 73 65 20 69 6e 20 63 65 6c 6c   for.use in cell
0ac0: 70 68 6f 6e 65 73 2c 20 50 44 41 73 2c 20 73 65  phones, PDAs, se
0ad0: 74 2d 74 6f 70 20 62 6f 78 65 73 2c 20 61 6e 64  t-top boxes, and
0ae0: 2f 6f 72 20 61 70 70 6c 69 61 6e 63 65 73 2e 20  /or appliances. 
0af0: 20 49 74 20 61 6c 73 6f 0a 77 6f 72 6b 73 20 77   It also.works w
0b00: 65 6c 6c 20 61 73 20 61 6e 20 65 6d 62 65 64 64  ell as an embedd
0b10: 65 64 20 64 61 74 61 62 61 73 65 20 69 6e 20 64  ed database in d
0b20: 6f 77 6e 6c 6f 61 64 61 62 6c 65 20 63 6f 6e 73  ownloadable cons
0b30: 75 6d 65 72 20 61 70 70 6c 69 63 61 74 69 6f 6e  umer application
0b40: 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c  s..</p>.</li>..<
0b50: 6c 69 3e 3c 70 3e 3c 62 3e 41 70 70 6c 69 63 61  li><p><b>Applica
0b60: 74 69 6f 6e 20 46 69 6c 65 20 46 6f 72 6d 61 74  tion File Format
0b70: 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51  </b></p>..<p>.SQ
0b80: 4c 69 74 65 20 68 61 73 20 62 65 65 6e 20 75 73  Lite has been us
0b90: 65 64 20 77 69 74 68 20 67 72 65 61 74 20 73 75  ed with great su
0ba0: 63 63 65 73 73 20 61 73 20 74 68 65 20 6f 6e 2d  ccess as the on-
0bb0: 64 69 73 6b 20 66 69 6c 65 20 66 6f 72 6d 61 74  disk file format
0bc0: 0a 66 6f 72 20 64 65 73 6b 74 6f 70 20 61 70 70  .for desktop app
0bd0: 6c 69 63 61 74 69 6f 6e 73 20 73 75 63 68 20 61  lications such a
0be0: 73 20 66 69 6e 61 6e 63 69 61 6c 20 61 6e 61 6c  s financial anal
0bf0: 79 73 69 73 20 74 6f 6f 6c 73 2c 20 43 41 44 0a  ysis tools, CAD.
0c00: 70 61 63 6b 61 67 65 73 2c 20 72 65 63 6f 72 64  packages, record
0c10: 20 6b 65 65 70 69 6e 67 20 70 72 6f 67 72 61 6d   keeping program
0c20: 73 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  s, and so forth.
0c30: 20 20 54 68 65 20 74 72 61 64 69 74 69 6f 6e 61    The traditiona
0c40: 6c 0a 46 69 6c 65 2f 4f 70 65 6e 20 6f 70 65 72  l.File/Open oper
0c50: 61 74 69 6f 6e 20 64 6f 65 73 20 61 6e 20 73 71  ation does an sq
0c60: 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61 6e 64  lite3_open() and
0c70: 20 65 78 65 63 75 74 65 73 20 61 0a 42 45 47 49   executes a.BEGI
0c80: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 74 6f  N TRANSACTION to
0c90: 20 67 65 74 20 65 78 63 6c 75 73 69 76 65 20 61   get exclusive a
0ca0: 63 63 65 73 73 20 74 6f 20 74 68 65 20 63 6f 6e  ccess to the con
0cb0: 74 65 6e 74 2e 20 20 46 69 6c 65 2f 53 61 76 65  tent.  File/Save
0cc0: 0a 64 6f 65 73 20 61 20 43 4f 4d 4d 49 54 20 66  .does a COMMIT f
0cd0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 6f 74 68  ollowed by anoth
0ce0: 65 72 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43  er BEGIN TRANSAC
0cf0: 54 49 4f 4e 2e 20 20 54 68 65 20 75 73 65 0a 6f  TION.  The use.o
0d00: 66 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 67  f transactions g
0d10: 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 75  uarantees that u
0d20: 70 64 61 74 65 73 20 74 6f 20 74 68 65 20 61 70  pdates to the ap
0d30: 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 20 61  plication file a
0d40: 72 65 20 61 74 6f 6d 69 63 2c 0a 64 75 72 61 62  re atomic,.durab
0d50: 6c 65 2c 20 69 73 6f 6c 61 74 65 64 2c 20 61 6e  le, isolated, an
0d60: 64 20 63 6f 6e 73 69 73 74 65 6e 74 2e 0a 3c 2f  d consistent..</
0d70: 70 3e 0a 0a 3c 70 3e 0a 54 65 6d 70 6f 72 61 72  p>..<p>.Temporar
0d80: 79 20 74 72 69 67 67 65 72 73 20 63 61 6e 20 62  y triggers can b
0d90: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64  e added to the d
0da0: 61 74 61 62 61 73 65 20 74 6f 20 72 65 63 6f 72  atabase to recor
0db0: 64 20 61 6c 6c 0a 63 68 61 6e 67 65 73 20 69 6e  d all.changes in
0dc0: 74 6f 20 61 20 28 74 65 6d 70 6f 72 61 72 79 29  to a (temporary)
0dd0: 20 75 6e 64 6f 2f 72 65 64 6f 20 6c 6f 67 20 74   undo/redo log t
0de0: 61 62 6c 65 2e 20 20 54 68 65 73 65 20 63 68 61  able.  These cha
0df0: 6e 67 65 73 20 63 61 6e 20 74 68 65 6e 0a 62 65  nges can then.be
0e00: 20 70 6c 61 79 65 64 20 62 61 63 6b 20 77 68 65   played back whe
0e10: 6e 20 74 68 65 20 75 73 65 72 20 70 72 65 73 73  n the user press
0e20: 65 73 20 74 68 65 20 55 6e 64 6f 20 61 6e 64 20  es the Undo and 
0e30: 52 65 64 6f 20 62 75 74 74 6f 6e 73 2e 20 20 55  Redo buttons.  U
0e40: 73 69 6e 67 0a 74 68 69 73 20 74 65 63 68 6e 69  sing.this techni
0e50: 71 75 65 2c 20 61 20 75 6e 6c 69 6d 69 74 65 64  que, a unlimited
0e60: 20 64 65 70 74 68 20 75 6e 64 6f 2f 72 65 64 6f   depth undo/redo
0e70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
0e80: 63 61 6e 20 62 65 20 77 72 69 74 74 65 6e 0a 69  can be written.i
0e90: 6e 20 73 75 72 70 72 69 73 69 6e 67 20 6c 69 74  n surprising lit
0ea0: 74 6c 65 20 63 6f 64 65 2e 0a 3c 2f 70 3e 0a 3c  tle code..</p>.<
0eb0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
0ec0: 52 65 70 6c 61 63 65 6d 65 6e 74 20 66 6f 72 20  Replacement for 
0ed0: 3c 69 3e 61 64 20 68 6f 63 3c 2f 69 3e 20 64 69  <i>ad hoc</i> di
0ee0: 73 6b 20 66 69 6c 65 73 3c 2f 62 3e 3c 2f 70 3e  sk files</b></p>
0ef0: 0a 0a 3c 70 3e 4d 61 6e 79 20 70 72 6f 67 72 61  ..<p>Many progra
0f00: 6d 73 20 75 73 65 20 66 6f 70 65 6e 28 29 2c 20  ms use fopen(), 
0f10: 66 72 65 61 64 28 29 2c 20 61 6e 64 20 66 77 72  fread(), and fwr
0f20: 69 74 65 28 29 20 74 6f 20 63 72 65 61 74 65 20  ite() to create 
0f30: 61 6e 64 0a 6d 61 6e 61 67 65 20 66 69 6c 65 73  and.manage files
0f40: 20 6f 66 20 64 61 74 61 20 69 6e 20 68 6f 6d 65   of data in home
0f50: 2d 67 72 6f 77 6e 20 66 6f 72 6d 61 74 73 2e 20  -grown formats. 
0f60: 20 53 51 4c 69 74 65 20 77 6f 72 6b 73 20 0a 70   SQLite works .p
0f70: 61 72 74 69 63 75 6c 61 72 6c 79 20 77 65 6c 6c  articularly well
0f80: 20 61 73 20 61 0a 72 65 70 6c 61 63 65 6d 65 6e   as a.replacemen
0f90: 74 20 66 6f 72 20 74 68 65 73 65 20 3c 69 3e 61  t for these <i>a
0fa0: 64 20 68 6f 63 3c 2f 69 3e 20 64 61 74 61 20 66  d hoc</i> data f
0fb0: 69 6c 65 73 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  iles.</p>.</li>.
0fc0: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 6e 74 65 72  .<li><p><b>Inter
0fd0: 6e 61 6c 20 6f 72 20 74 65 6d 70 6f 72 61 72 79  nal or temporary
0fe0: 20 64 61 74 61 62 61 73 65 73 3c 2f 62 3e 3c 2f   databases</b></
0ff0: 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 70 72 6f 67  p>..<p>.For prog
1000: 72 61 6d 73 20 74 68 61 74 20 68 61 76 65 20 61  rams that have a
1010: 20 6c 6f 74 20 6f 66 20 64 61 74 61 20 74 68 61   lot of data tha
1020: 74 20 6d 75 73 74 20 62 65 20 73 69 66 74 65 64  t must be sifted
1030: 20 61 6e 64 20 73 6f 72 74 65 64 0a 69 6e 20 64   and sorted.in d
1040: 69 76 65 72 73 65 20 77 61 79 73 2c 20 69 74 20  iverse ways, it 
1050: 69 73 20 6f 66 74 65 6e 20 65 61 73 69 65 72 20  is often easier 
1060: 61 6e 64 20 71 75 69 63 6b 65 72 20 74 6f 20 6c  and quicker to l
1070: 6f 61 64 20 74 68 65 20 64 61 74 61 20 69 6e 74  oad the data int
1080: 6f 0a 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 53  o.an in-memory S
1090: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61  QLite database a
10a0: 6e 64 20 75 73 65 20 71 75 65 72 69 65 73 20 77  nd use queries w
10b0: 69 74 68 20 6a 6f 69 6e 73 20 61 6e 64 20 4f 52  ith joins and OR
10c0: 44 45 52 20 42 59 0a 63 6c 61 75 73 65 73 20 74  DER BY.clauses t
10d0: 6f 20 65 78 74 72 61 63 74 20 74 68 65 20 64 61  o extract the da
10e0: 74 61 20 69 6e 20 74 68 65 20 66 6f 72 6d 20 61  ta in the form a
10f0: 6e 64 20 6f 72 64 65 72 20 6e 65 65 64 65 64 20  nd order needed 
1100: 72 61 74 68 65 72 20 74 68 61 6e 0a 74 6f 20 74  rather than.to t
1110: 72 79 20 74 6f 20 63 6f 64 65 20 74 68 65 20 73  ry to code the s
1120: 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 6d  ame operations m
1130: 61 6e 75 61 6c 6c 79 2e 0a 55 73 69 6e 67 20 61  anually..Using a
1140: 6e 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 69  n SQL database i
1150: 6e 74 65 72 6e 61 6c 6c 79 20 69 6e 20 74 68 69  nternally in thi
1160: 73 20 77 61 79 20 61 6c 73 6f 20 67 69 76 65 73  s way also gives
1170: 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 67 72 65   the program.gre
1180: 61 74 65 72 20 66 6c 65 78 69 62 69 6c 69 74 79  ater flexibility
1190: 20 73 69 6e 63 65 20 6e 65 77 20 63 6f 6c 75 6d   since new colum
11a0: 6e 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 63  ns and indices c
11b0: 61 6e 20 62 65 20 61 64 64 65 64 20 77 69 74 68  an be added with
11c0: 6f 75 74 0a 68 61 76 69 6e 67 20 74 6f 20 72 65  out.having to re
11d0: 63 6f 64 65 20 65 76 65 72 79 20 71 75 65 72 79  code every query
11e0: 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c  ..</p>.</li>..<l
11f0: 69 3e 3c 70 3e 3c 62 3e 43 6f 6d 6d 61 6e 64 2d  i><p><b>Command-
1200: 6c 69 6e 65 20 64 61 74 61 73 65 74 20 61 6e 61  line dataset ana
1210: 6c 79 73 69 73 20 74 6f 6f 6c 3c 2f 62 3e 3c 2f  lysis tool</b></
1220: 70 3e 0a 0a 3c 70 3e 0a 45 78 70 65 72 69 65 6e  p>..<p>.Experien
1230: 63 65 64 20 53 51 4c 20 75 73 65 72 73 20 63 61  ced SQL users ca
1240: 6e 20 65 6d 70 6c 6f 79 0a 74 68 65 20 63 6f 6d  n employ.the com
1250: 6d 61 6e 64 2d 6c 69 6e 65 20 3c 62 3e 73 71 6c  mand-line <b>sql
1260: 69 74 65 3c 2f 62 3e 20 70 72 6f 67 72 61 6d 20  ite</b> program 
1270: 74 6f 20 61 6e 61 6c 79 7a 65 20 6d 69 73 63 65  to analyze misce
1280: 6c 6c 61 6e 65 6f 75 73 0a 64 61 74 61 73 65 74  llaneous.dataset
1290: 73 2e 20 52 61 77 20 64 61 74 61 20 63 61 6e 20  s. Raw data can 
12a0: 62 65 20 69 6d 70 6f 72 74 65 64 20 66 72 6f 6d  be imported from
12b0: 20 43 53 56 20 66 69 6c 65 73 2c 20 74 68 65 6e   CSV files, then
12c0: 20 74 68 61 74 0a 64 61 74 61 20 63 61 6e 20 62   that.data can b
12d0: 65 20 73 6c 69 63 65 64 20 61 6e 64 20 64 69 63  e sliced and dic
12e0: 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
12f0: 20 6d 79 72 69 61 64 20 6f 66 20 73 75 6d 6d 61   myriad of summa
1300: 72 79 0a 72 65 70 6f 72 74 73 2e 20 20 50 6f 73  ry.reports.  Pos
1310: 73 69 62 6c 65 20 75 73 65 73 20 69 6e 63 6c 75  sible uses inclu
1320: 64 65 20 77 65 62 73 69 74 65 20 6c 6f 67 20 61  de website log a
1330: 6e 61 6c 79 73 69 73 2c 20 73 70 6f 72 74 73 0a  nalysis, sports.
1340: 73 74 61 74 69 73 74 69 63 73 20 61 6e 61 6c 79  statistics analy
1350: 73 69 73 2c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  sis, compilation
1360: 20 6f 66 20 70 72 6f 67 72 61 6d 6d 69 6e 67 20   of programming 
1370: 6d 65 74 72 69 63 73 2c 20 61 6e 64 0a 61 6e 61  metrics, and.ana
1380: 6c 79 73 69 73 20 6f 66 20 65 78 70 65 72 69 6d  lysis of experim
1390: 65 6e 74 61 6c 20 72 65 73 75 6c 74 73 2e 0a 3c  ental results..<
13a0: 2f 70 3e 0a 0a 3c 70 3e 0a 59 6f 75 20 63 61 6e  /p>..<p>.You can
13b0: 20 61 6c 73 6f 20 64 6f 20 74 68 65 20 73 61 6d   also do the sam
13c0: 65 20 74 68 69 6e 67 20 77 69 74 68 20 61 20 65  e thing with a e
13d0: 6e 74 65 72 70 72 69 73 65 20 63 6c 69 65 6e 74  nterprise client
13e0: 2f 73 65 72 76 65 72 0a 64 61 74 61 62 61 73 65  /server.database
13f0: 2c 20 6f 66 20 63 6f 75 72 73 65 2e 20 20 54 68  , of course.  Th
1400: 65 20 61 64 76 61 6e 74 61 67 65 73 20 74 6f 20  e advantages to 
1410: 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69 6e 20  using SQLite in 
1420: 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 0a 61  this situation.a
1430: 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 69  re that SQLite i
1440: 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f  s much easier to
1450: 20 73 65 74 20 75 70 20 61 6e 64 20 74 68 65 20   set up and the 
1460: 72 65 73 75 6c 74 69 6e 67 20 64 61 74 61 62 61  resulting databa
1470: 73 65 20 0a 69 73 20 61 20 73 69 6e 67 6c 65 20  se .is a single 
1480: 66 69 6c 65 20 74 68 61 74 20 79 6f 75 20 63 61  file that you ca
1490: 6e 20 73 74 6f 72 65 20 6f 6e 20 61 20 66 6c 6f  n store on a flo
14a0: 70 70 79 20 64 69 73 6b 20 6f 72 20 66 6c 61 73  ppy disk or flas
14b0: 68 2d 6d 65 6d 6f 72 79 20 73 74 69 63 6b 0a 6f  h-memory stick.o
14c0: 72 20 65 6d 61 69 6c 20 74 6f 20 61 20 63 6f 6c  r email to a col
14d0: 6c 65 61 67 75 65 2e 0a 3c 2f 70 3e 0a 3c 2f 6c  league..</p>.</l
14e0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 53 74  i>..<li><p><b>St
14f0: 61 6e 64 2d 69 6e 20 66 6f 72 20 61 6e 20 65 6e  and-in for an en
1500: 74 65 72 70 72 69 73 65 20 64 61 74 61 62 61 73  terprise databas
1510: 65 20 64 75 72 69 6e 67 20 64 65 6d 6f 73 20 6f  e during demos o
1520: 72 20 74 65 73 74 69 6e 67 3c 2f 62 3e 3c 2f 70  r testing</b></p
1530: 3e 0a 0a 3c 70 3e 0a 49 66 20 79 6f 75 20 61 72  >..<p>.If you ar
1540: 65 20 77 72 69 74 69 6e 67 20 61 20 63 6c 69 65  e writing a clie
1550: 6e 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 66  nt application f
1560: 6f 72 20 61 6e 20 65 6e 74 65 72 70 72 69 73 65  or an enterprise
1570: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
1580: 2c 0a 69 74 20 6d 61 6b 65 73 20 73 65 6e 73 65  ,.it makes sense
1590: 20 74 6f 20 75 73 65 20 61 20 67 65 6e 65 72 69   to use a generi
15a0: 63 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 65  c database backe
15b0: 6e 64 20 74 68 61 74 20 61 6c 6c 6f 77 73 20 79  nd that allows y
15c0: 6f 75 20 74 6f 20 63 6f 6e 6e 65 63 74 0a 74 6f  ou to connect.to
15d0: 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
15e0: 6b 69 6e 64 73 20 6f 66 20 53 51 4c 20 64 61 74  kinds of SQL dat
15f0: 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20  abase engines.  
1600: 49 74 20 6d 61 6b 65 73 20 65 76 65 6e 20 62 65  It makes even be
1610: 74 74 65 72 0a 73 65 6e 73 65 20 74 6f 0a 67 6f  tter.sense to.go
1620: 20 61 68 65 61 64 20 61 6e 64 20 69 6e 63 6c 75   ahead and inclu
1630: 64 65 20 53 51 4c 69 74 65 20 69 6e 20 74 68 65  de SQLite in the
1640: 20 6d 69 78 20 6f 66 20 73 75 70 70 6f 72 74 65   mix of supporte
1650: 64 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  d database and t
1660: 6f 20 73 74 61 74 69 63 61 6c 6c 79 0a 6c 69 6e  o statically.lin
1670: 6b 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67  k the SQLite eng
1680: 69 6e 65 20 69 6e 20 77 69 74 68 20 74 68 65 20  ine in with the 
1690: 63 6c 69 65 6e 74 2e 20 20 54 68 61 74 20 77 61  client.  That wa
16a0: 79 20 74 68 65 20 63 6c 69 65 6e 74 20 70 72 6f  y the client pro
16b0: 67 72 61 6d 0a 63 61 6e 20 62 65 20 75 73 65 64  gram.can be used
16c0: 20 73 74 61 6e 64 61 6c 6f 6e 65 20 77 69 74 68   standalone with
16d0: 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 20   an SQLite data 
16e0: 66 69 6c 65 20 66 6f 72 20 74 65 73 74 69 6e 67  file for testing
16f0: 20 6f 72 20 66 6f 72 0a 64 65 6d 6f 6e 73 74 72   or for.demonstr
1700: 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c  ations..</p>.</l
1710: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 44 61  i>..<li><p><b>Da
1720: 74 61 62 61 73 65 20 50 65 64 61 67 6f 67 79 3c  tabase Pedagogy<
1730: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 42 65 63  /b></p>..<p>.Bec
1740: 61 75 73 65 20 69 74 20 69 73 20 73 69 6d 70 6c  ause it is simpl
1750: 65 20 74 6f 20 73 65 74 75 70 20 61 6e 64 20 75  e to setup and u
1760: 73 65 20 28 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  se (installation
1770: 20 69 73 20 74 72 69 76 69 61 6c 3a 20 6a 75 73   is trivial: jus
1780: 74 0a 63 6f 70 79 20 74 68 65 20 3c 62 3e 73 71  t.copy the <b>sq
1790: 6c 69 74 65 3c 2f 62 3e 20 6f 72 20 3c 62 3e 73  lite</b> or <b>s
17a0: 71 6c 69 74 65 2e 65 78 65 3c 2f 62 3e 20 65 78  qlite.exe</b> ex
17b0: 65 63 75 74 61 62 6c 65 20 74 6f 20 74 68 65 20  ecutable to the 
17c0: 74 61 72 67 65 74 20 6d 61 63 68 69 6e 65 0a 61  target machine.a
17d0: 6e 64 20 72 75 6e 20 69 74 29 20 53 51 4c 69 74  nd run it) SQLit
17e0: 65 20 6d 61 6b 65 73 20 61 20 67 6f 6f 64 20 64  e makes a good d
17f0: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 66  atabase engine f
1800: 6f 72 20 75 73 65 20 69 6e 20 74 65 61 63 68 69  or use in teachi
1810: 6e 67 20 53 51 4c 2e 0a 53 74 75 64 65 6e 74 73  ng SQL..Students
1820: 20 63 61 6e 20 65 61 73 69 6c 79 20 63 72 65 61   can easily crea
1830: 74 65 20 61 73 20 6d 61 6e 79 20 64 61 74 61 62  te as many datab
1840: 61 73 65 73 20 61 73 20 74 68 65 79 20 6c 69 6b  ases as they lik
1850: 65 20 61 6e 64 20 63 61 6e 0a 65 6d 61 69 6c 20  e and can.email 
1860: 64 61 74 61 62 61 73 65 73 20 74 6f 20 74 68 65  databases to the
1870: 20 69 6e 73 74 72 75 63 74 6f 72 20 66 6f 72 20   instructor for 
1880: 63 6f 6d 6d 65 6e 74 73 20 6f 72 20 67 72 61 64  comments or grad
1890: 69 6e 67 2e 20 20 46 6f 72 20 6d 6f 72 65 0a 61  ing.  For more.a
18a0: 64 76 61 6e 63 65 64 20 73 74 75 64 65 6e 74 73  dvanced students
18b0: 20 77 68 6f 20 61 72 65 20 69 6e 74 65 72 65 73   who are interes
18c0: 74 65 64 20 69 6e 20 73 74 75 64 79 69 6e 67 20  ted in studying 
18d0: 68 6f 77 20 61 6e 20 52 44 42 4d 53 20 69 73 0a  how an RDBMS is.
18e0: 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20 74 68 65  implemented, the
18f0: 20 6d 6f 64 75 6c 61 72 20 61 6e 64 20 77 65 6c   modular and wel
1900: 6c 2d 63 6f 6d 6d 65 6e 74 65 64 20 61 6e 64 20  l-commented and 
1910: 64 6f 63 75 6d 65 6e 74 65 64 20 53 51 4c 69 74  documented SQLit
1920: 65 20 63 6f 64 65 0a 63 61 6e 20 73 65 72 76 65  e code.can serve
1930: 20 61 73 20 61 20 67 6f 6f 64 20 62 61 73 69 73   as a good basis
1940: 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 74  .  This is not t
1950: 6f 20 73 61 79 20 74 68 61 74 20 53 51 4c 69 74  o say that SQLit
1960: 65 20 69 73 20 61 6e 20 61 63 63 75 72 61 74 65  e is an accurate
1970: 0a 6d 6f 64 65 6c 20 6f 66 20 68 6f 77 20 6f 74  .model of how ot
1980: 68 65 72 20 64 61 74 61 62 61 73 65 20 65 6e 67  her database eng
1990: 69 6e 65 73 20 61 72 65 20 69 6d 70 6c 65 6d 65  ines are impleme
19a0: 6e 74 65 64 2c 20 62 75 74 20 72 61 74 68 65 72  nted, but rather
19b0: 20 61 20 73 74 75 64 65 6e 74 20 77 68 6f 0a 75   a student who.u
19c0: 6e 64 65 72 73 74 61 6e 64 73 20 68 6f 77 20 53  nderstands how S
19d0: 51 4c 69 74 65 20 77 6f 72 6b 73 20 63 61 6e 20  QLite works can 
19e0: 6d 6f 72 65 20 71 75 69 63 6b 6c 79 20 63 6f 6d  more quickly com
19f0: 70 72 65 68 65 6e 64 20 74 68 65 20 6f 70 65 72  prehend the oper
1a00: 61 74 69 6f 6e 61 6c 0a 70 72 69 6e 63 69 70 6c  ational.principl
1a10: 65 73 20 6f 66 20 6f 74 68 65 72 20 73 79 73 74  es of other syst
1a20: 65 6d 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  ems..</p>.</li>.
1a30: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 78 70 65 72  .<li><p><b>Exper
1a40: 69 6d 65 6e 74 61 6c 20 53 51 4c 20 6c 61 6e 67  imental SQL lang
1a50: 75 61 67 65 20 65 78 74 65 6e 73 69 6f 6e 73 3c  uage extensions<
1a60: 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  /b></p>..<p>The 
1a70: 73 69 6d 70 6c 65 2c 20 6d 6f 64 75 6c 61 72 20  simple, modular 
1a80: 64 65 73 69 67 6e 20 6f 66 20 53 51 4c 69 74 65  design of SQLite
1a90: 20 6d 61 6b 65 73 20 69 74 20 61 20 67 6f 6f 64   makes it a good
1aa0: 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 0a 70 72   platform for.pr
1ab0: 6f 74 6f 74 79 70 69 6e 67 20 6e 65 77 2c 20 65  ototyping new, e
1ac0: 78 70 65 72 69 6d 65 6e 74 61 6c 20 64 61 74 61  xperimental data
1ad0: 62 61 73 65 20 6c 61 6e 67 75 61 67 65 20 66 65  base language fe
1ae0: 61 74 75 72 65 73 20 6f 72 20 69 64 65 61 73 2e  atures or ideas.
1af0: 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 0a 3c 2f  .</p>.</li>...</
1b00: 75 6c 3e 0a 0a 3c 68 32 3e 53 69 74 75 61 74 69  ul>..<h2>Situati
1b10: 6f 6e 73 20 57 68 65 72 65 20 41 6e 6f 74 68 65  ons Where Anothe
1b20: 72 20 52 44 42 4d 53 20 4d 61 79 20 57 6f 72 6b  r RDBMS May Work
1b30: 20 42 65 74 74 65 72 3c 2f 68 32 3e 0a 0a 3c 75   Better</h2>..<u
1b40: 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 43 6c 69  l>.<li><p><b>Cli
1b50: 65 6e 74 2f 53 65 72 76 65 72 20 41 70 70 6c 69  ent/Server Appli
1b60: 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 70 3e 0a 0a  cations</b><p>..
1b70: 3c 70 3e 49 66 20 79 6f 75 20 68 61 76 65 20 6d  <p>If you have m
1b80: 61 6e 79 20 63 6c 69 65 6e 74 20 70 72 6f 67 72  any client progr
1b90: 61 6d 73 20 61 63 63 65 73 73 20 61 20 63 6f 6d  ams access a com
1ba0: 6d 6f 6e 20 64 61 74 61 62 61 73 65 0a 6f 76 65  mon database.ove
1bb0: 72 20 61 20 6e 65 74 77 6f 72 6b 2c 20 79 6f 75  r a network, you
1bc0: 20 73 68 6f 75 6c 64 20 63 6f 6e 73 69 64 65 72   should consider
1bd0: 20 75 73 69 6e 67 20 61 20 63 6c 69 65 6e 74 2f   using a client/
1be0: 73 65 72 76 65 72 20 64 61 74 61 62 61 73 65 0a  server database.
1bf0: 65 6e 67 69 6e 65 20 69 6e 73 74 65 61 64 20 6f  engine instead o
1c00: 66 20 53 51 4c 69 74 65 2e 20 20 53 51 4c 69 74  f SQLite.  SQLit
1c10: 65 20 77 69 6c 6c 20 77 6f 72 6b 20 6f 76 65 72  e will work over
1c20: 20 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73   a network files
1c30: 79 73 74 65 6d 2c 0a 62 75 74 20 62 65 63 61 75  ystem,.but becau
1c40: 73 65 20 6f 66 20 74 68 65 20 6c 61 74 65 6e 63  se of the latenc
1c50: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
1c60: 68 20 6d 6f 73 74 20 6e 65 74 77 6f 72 6b 20 66  h most network f
1c70: 69 6c 65 73 79 73 74 65 6d 73 2c 0a 70 65 72 66  ilesystems,.perf
1c80: 6f 72 6d 61 6e 63 65 20 77 69 6c 6c 20 6e 6f 74  ormance will not
1c90: 20 62 65 20 67 72 65 61 74 2e 20 20 41 6c 73 6f   be great.  Also
1ca0: 2c 20 74 68 65 20 66 69 6c 65 20 6c 6f 63 6b 69  , the file locki
1cb0: 6e 67 20 6c 6f 67 69 63 20 6f 66 0a 6d 61 6e 79  ng logic of.many
1cc0: 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73   network filesys
1cd0: 74 65 6d 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tems implementat
1ce0: 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 62 75 67  ion contains bug
1cf0: 73 20 28 6f 6e 20 62 6f 74 68 20 55 6e 69 78 0a  s (on both Unix.
1d00: 61 6e 64 20 77 69 6e 64 6f 77 73 29 2e 20 20 49  and windows).  I
1d10: 66 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 64  f file locking d
1d20: 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 6c 69 6b  oes not work lik
1d30: 65 20 69 74 20 73 68 6f 75 6c 64 2c 0a 69 74 20  e it should,.it 
1d40: 6d 69 67 68 74 20 62 65 20 70 6f 73 73 69 62 6c  might be possibl
1d50: 65 20 66 6f 72 20 74 77 6f 20 6f 72 20 6d 6f 72  e for two or mor
1d60: 65 20 63 6c 69 65 6e 74 20 70 72 6f 67 72 61 6d  e client program
1d70: 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 0a  s to modify the.
1d80: 73 61 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65  same part of the
1d90: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
1da0: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2c  t the same time,
1db0: 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 0a 64   resulting in .d
1dc0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
1dd0: 6f 6e 2e 20 20 42 65 63 61 75 73 65 20 74 68 69  on.  Because thi
1de0: 73 20 70 72 6f 62 6c 65 6d 20 72 65 73 75 6c 74  s problem result
1df0: 73 20 66 72 6f 6d 20 62 75 67 73 20 69 6e 0a 74  s from bugs in.t
1e00: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 66 69  he underlying fi
1e10: 6c 65 73 79 73 74 65 6d 20 69 6d 70 6c 65 6d 65  lesystem impleme
1e20: 6e 74 61 74 69 6f 6e 2c 20 74 68 65 72 65 20 69  ntation, there i
1e30: 73 20 6e 6f 74 68 69 6e 67 20 53 51 4c 69 74 65  s nothing SQLite
1e40: 0a 63 61 6e 20 64 6f 20 74 6f 20 70 72 65 76 65  .can do to preve
1e50: 6e 74 20 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  nt it.</p>..<p>A
1e60: 20 67 6f 6f 64 20 72 75 6c 65 20 6f 66 20 74 68   good rule of th
1e70: 75 6d 62 20 69 73 20 74 68 61 74 20 79 6f 75 20  umb is that you 
1e80: 73 68 6f 75 6c 64 20 61 76 6f 69 64 20 75 73 69  should avoid usi
1e90: 6e 67 20 53 51 4c 69 74 65 0a 69 6e 20 73 69 74  ng SQLite.in sit
1ea0: 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20 74 68  uations where th
1eb0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
1ec0: 77 69 6c 6c 20 62 65 20 61 63 63 65 73 73 65 64  will be accessed
1ed0: 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 0a   simultaneously.
1ee0: 66 72 6f 6d 20 6d 61 6e 79 20 63 6f 6d 70 75 74  from many comput
1ef0: 65 72 73 20 6f 76 65 72 20 61 20 6e 65 74 77 6f  ers over a netwo
1f00: 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 2e 3c 2f  rk filesystem.</
1f10: 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  p>.</li>..<li><p
1f20: 3e 3c 62 3e 48 69 67 68 2d 76 6f 6c 75 6d 65 20  ><b>High-volume 
1f30: 57 65 62 73 69 74 65 73 3c 2f 62 3e 3c 2f 70 3e  Websites</b></p>
1f40: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 77 69 6c 6c  ..<p>SQLite will
1f50: 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 72 6b 20 66   normally work f
1f60: 69 6e 65 20 61 73 20 74 68 65 20 64 61 74 61 62  ine as the datab
1f70: 61 73 65 20 62 61 63 6b 65 6e 64 20 74 6f 20 61  ase backend to a
1f80: 20 77 65 62 73 69 74 65 2e 0a 42 75 74 20 69 66   website..But if
1f90: 20 79 6f 75 20 77 65 62 73 69 74 65 20 69 73 20   you website is 
1fa0: 73 6f 20 62 75 73 79 20 74 68 61 74 20 79 6f 75  so busy that you
1fb0: 72 20 61 72 65 20 74 68 69 6e 6b 69 6e 67 20 6f  r are thinking o
1fc0: 66 20 73 70 6c 69 74 74 69 6e 67 20 74 68 65 0a  f splitting the.
1fd0: 64 61 74 61 62 61 73 65 20 63 6f 6d 70 6f 6e 65  database compone
1fe0: 6e 74 20 6f 66 66 20 6f 6e 74 6f 20 61 20 73 65  nt off onto a se
1ff0: 70 61 72 61 74 65 20 6d 61 63 68 69 6e 65 2c 20  parate machine, 
2000: 74 68 65 6e 20 79 6f 75 20 73 68 6f 75 6c 64 20  then you should 
2010: 0a 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 6e 73  .definitely cons
2020: 69 64 65 72 20 75 73 69 6e 67 20 61 6e 20 65 6e  ider using an en
2030: 74 65 72 70 72 69 73 65 2d 63 6c 61 73 73 20 63  terprise-class c
2040: 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 64 61 74  lient/server dat
2050: 61 62 61 73 65 0a 65 6e 67 69 6e 65 20 69 6e 73  abase.engine ins
2060: 74 65 61 64 20 6f 66 20 53 51 4c 69 74 65 2e 3c  tead of SQLite.<
2070: 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  /p>.</li>..<li><
2080: 70 3e 3c 62 3e 56 65 72 79 20 6c 61 72 67 65 20  p><b>Very large 
2090: 64 61 74 61 73 65 74 73 3c 2f 62 3e 3c 2f 70 3e  datasets</b></p>
20a0: 0a 0a 3c 70 3e 57 68 65 6e 20 79 6f 75 20 73 74  ..<p>When you st
20b0: 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
20c0: 6e 20 69 6e 20 53 51 4c 69 74 65 20 28 77 68 69  n in SQLite (whi
20d0: 63 68 20 68 61 70 70 65 6e 73 20 61 75 74 6f 6d  ch happens autom
20e0: 61 74 69 63 61 6c 6c 79 0a 62 65 66 6f 72 65 20  atically.before 
20f0: 61 6e 79 20 77 72 69 74 65 20 6f 70 65 72 61 74  any write operat
2100: 69 6f 6e 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ion that is not 
2110: 77 69 74 68 69 6e 20 61 6e 20 65 78 70 6c 69 63  within an explic
2120: 69 74 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d 49  it BEGIN...COMMI
2130: 54 29 0a 74 68 65 20 65 6e 67 69 6e 65 20 68 61  T).the engine ha
2140: 73 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 61 20  s to allocate a 
2150: 62 69 74 6d 61 70 20 6f 66 20 64 69 72 74 79 20  bitmap of dirty 
2160: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 69 73  pages in the dis
2170: 6b 20 66 69 6c 65 20 74 6f 0a 68 65 6c 70 20 69  k file to.help i
2180: 74 20 6d 61 6e 61 67 65 20 69 74 73 20 72 6f 6c  t manage its rol
2190: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 20  lback journal.  
21a0: 53 51 4c 69 74 65 20 6e 65 65 64 73 20 32 35 36  SQLite needs 256
21b0: 20 62 79 74 65 73 20 6f 66 20 52 41 4d 20 66 6f   bytes of RAM fo
21c0: 72 0a 65 76 65 72 79 20 31 4d 42 20 6f 66 20 64  r.every 1MB of d
21d0: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 73 6d  atabase.  For sm
21e0: 61 6c 6c 65 72 20 64 61 74 61 62 61 73 65 73 2c  aller databases,
21f0: 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d   the amount of m
2200: 65 6d 6f 72 79 0a 72 65 71 75 69 72 65 64 20 69  emory.required i
2210: 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2c  s not a problem,
2220: 20 62 75 74 20 77 68 65 6e 20 64 61 74 61 62 61   but when databa
2230: 73 65 20 62 65 67 69 6e 20 74 6f 20 67 72 6f 77  se begin to grow
2240: 20 69 6e 74 6f 20 74 68 65 0a 6d 75 6c 74 69 2d   into the.multi-
2250: 67 69 67 61 62 79 74 65 20 72 61 6e 67 65 2c 20  gigabyte range, 
2260: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2270: 62 69 74 6d 61 70 20 63 61 6e 20 67 65 74 20 71  bitmap can get q
2280: 75 69 74 65 20 6c 61 72 67 65 2e 20 20 49 66 0a  uite large.  If.
2290: 79 6f 75 20 6e 65 65 64 20 74 6f 20 73 74 6f 72  you need to stor
22a0: 65 20 61 6e 64 20 6d 6f 64 69 66 79 20 6d 6f 72  e and modify mor
22b0: 65 20 74 68 61 6e 20 61 20 66 65 77 20 64 6f 7a  e than a few doz
22c0: 65 6e 20 47 42 20 6f 66 20 64 61 74 61 2c 20 79  en GB of data, y
22d0: 6f 75 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64  ou should.consid
22e0: 65 72 20 75 73 69 6e 67 20 61 20 64 69 66 66 65  er using a diffe
22f0: 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 65 6e  rent database en
2300: 67 69 6e 65 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e  gine..</p>.</li>
2310: 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 48 69 67 68  ..<li><p><b>High
2320: 20 43 6f 6e 63 75 72 72 65 6e 63 79 3c 2f 62 3e   Concurrency</b>
2330: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
2340: 20 75 73 65 73 20 72 65 61 64 65 72 2f 77 72 69   uses reader/wri
2350: 74 65 72 20 6c 6f 63 6b 73 20 6f 6e 20 74 68 65  ter locks on the
2360: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2370: 20 66 69 6c 65 2e 20 20 54 68 61 74 20 6d 65 61   file.  That mea
2380: 6e 73 0a 69 66 20 61 6e 79 20 70 72 6f 63 65 73  ns.if any proces
2390: 73 20 69 73 20 72 65 61 64 69 6e 67 20 66 72 6f  s is reading fro
23a0: 6d 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  m any part of th
23b0: 65 20 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20  e database, all 
23c0: 6f 74 68 65 72 0a 70 72 6f 63 65 73 73 65 73 20  other.processes 
23d0: 61 72 65 20 70 72 65 76 65 6e 74 65 64 20 66 72  are prevented fr
23e0: 6f 6d 20 77 72 69 74 69 6e 67 20 61 6e 79 20 6f  om writing any o
23f0: 74 68 65 72 20 70 61 72 74 20 6f 66 20 74 68 65  ther part of the
2400: 20 64 61 74 61 62 61 73 65 2e 0a 53 69 6d 69 6c   database..Simil
2410: 61 72 6c 79 2c 20 69 66 20 61 6e 79 20 6f 6e 65  arly, if any one
2420: 20 70 72 6f 63 65 73 73 20 69 73 20 77 72 69 74   process is writ
2430: 69 6e 67 20 74 6f 20 61 6e 79 20 70 61 72 74 20  ing to any part 
2440: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  of 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.