/ Hex Artifact Content
Login

Artifact 3e522a06ad41992023c80ca29a048ae2331ca5bd:


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 34 20 32 30 30 35 2f 30 31 2f  l,v 1.4 2005/01/
0070: 32 30 20 32 32 3a 34 38 3a 34 39 20 64 72 68 20  20 22:48:49 drh 
0080: 45 78 70 20 24 7d 0a 73 6f 75 72 63 65 20 63 6f  Exp $}.source co
0090: 6d 6d 6f 6e 2e 74 63 6c 0a 68 65 61 64 65 72 20  mmon.tcl.header 
00a0: 7b 41 70 70 72 6f 70 72 69 61 74 65 20 55 73 65  {Appropriate Use
00b0: 73 20 46 6f 72 20 53 51 4c 69 74 65 7d 0a 0a 70  s For SQLite}..p
00c0: 75 74 73 20 7b 0a 3c 70 3e 0a 53 51 4c 69 74 65  uts {.<p>.SQLite
00d0: 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
00e0: 6f 6d 20 6d 6f 73 74 20 6f 74 68 65 72 20 53 51  om most other SQ
00f0: 4c 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  L database engin
0100: 65 73 20 69 6e 20 74 68 61 74 20 69 74 73 0a 70  es in that its.p
0110: 72 69 6d 61 72 79 20 64 65 73 69 67 6e 20 67 6f  rimary design go
0120: 61 6c 20 69 73 20 74 6f 20 62 65 20 73 69 6d 70  al is to be simp
0130: 6c 65 3a 0a 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c  le:.</p>..<ul>.<
0140: 6c 69 3e 53 69 6d 70 6c 65 20 74 6f 20 61 64 6d  li>Simple to adm
0150: 69 6e 69 73 74 65 72 3c 2f 6c 69 3e 0a 3c 6c 69  inister</li>.<li
0160: 3e 53 69 6d 70 6c 65 20 74 6f 20 6f 70 65 72 61  >Simple to opera
0170: 74 65 3c 2f 6c 69 3e 0a 3c 6c 69 3e 53 69 6d 70  te</li>.<li>Simp
0180: 6c 65 20 74 6f 20 65 6d 62 65 64 20 69 6e 20 61  le to embed in a
0190: 20 6c 61 72 67 65 72 20 70 72 6f 67 72 61 6d 3c   larger program<
01a0: 2f 6c 69 3e 0a 3c 6c 69 3e 53 69 6d 70 6c 65 20  /li>.<li>Simple 
01b0: 74 6f 20 6d 61 69 6e 74 61 69 6e 20 61 6e 64 20  to maintain and 
01c0: 63 75 73 74 6f 6d 69 7a 65 3c 2f 6c 69 3e 0a 3c  customize</li>.<
01d0: 2f 75 6c 3e 0a 0a 3c 70 3e 0a 4d 61 6e 79 20 70  /ul>..<p>.Many p
01e0: 65 6f 70 6c 65 20 6c 69 6b 65 20 53 51 4c 69 74  eople like SQLit
01f0: 65 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20  e because it is 
0200: 73 6d 61 6c 6c 20 61 6e 64 20 66 61 73 74 2e 20  small and fast. 
0210: 20 42 75 74 20 74 68 6f 73 65 0a 71 75 61 6c 69   But those.quali
0220: 74 69 65 73 20 61 72 65 20 6a 75 73 74 20 68 61  ties are just ha
0230: 70 70 79 20 61 63 63 69 64 65 6e 74 73 2e 0a 55  ppy accidents..U
0240: 73 65 72 73 20 61 6c 73 6f 20 66 69 6e 64 20 74  sers also find t
0250: 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 76 65  hat SQLite is ve
0260: 72 79 20 72 65 6c 69 61 62 6c 65 2e 20 20 52 65  ry reliable.  Re
0270: 6c 69 61 62 69 6c 69 74 79 20 69 73 0a 61 20 63  liability is.a c
0280: 6f 6e 73 65 71 75 65 6e 63 65 20 6f 66 20 73 69  onsequence of si
0290: 6d 70 6c 69 63 69 74 79 2e 20 20 57 69 74 68 20  mplicity.  With 
02a0: 6c 65 73 73 20 63 6f 6d 70 6c 69 63 61 74 69 6f  less complicatio
02b0: 6e 2c 20 74 68 65 72 65 20 69 73 0a 6c 65 73 73  n, there is.less
02c0: 20 74 6f 20 67 6f 20 77 72 6f 6e 67 2e 20 20 53   to go wrong.  S
02d0: 6f 2c 20 79 65 73 2c 20 53 51 4c 69 74 65 20 69  o, yes, SQLite i
02e0: 73 20 73 6d 61 6c 6c 2c 20 66 61 73 74 2c 20 61  s small, fast, a
02f0: 6e 64 20 72 65 6c 69 61 62 6c 65 2c 0a 62 75 74  nd reliable,.but
0300: 20 66 69 72 73 74 20 61 6e 64 20 66 6f 72 65 6d   first and forem
0310: 6f 73 74 2c 20 53 51 4c 69 74 65 20 73 74 72 69  ost, SQLite stri
0320: 76 65 73 20 74 6f 20 62 65 20 73 69 6d 70 6c 65  ves to be simple
0330: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 69 6d 70  ..</p>..<p>.Simp
0340: 6c 69 63 69 74 79 20 69 6e 20 61 20 64 61 74 61  licity in a data
0350: 62 61 73 65 20 65 6e 67 69 6e 65 20 63 61 6e 20  base engine can 
0360: 62 65 20 65 69 74 68 65 72 20 61 20 73 74 72 65  be either a stre
0370: 6e 67 74 68 20 6f 72 20 61 0a 77 65 61 6b 6e 65  ngth or a.weakne
0380: 73 73 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ss, depending on
0390: 20 77 68 61 74 20 79 6f 75 20 61 72 65 20 74 72   what you are tr
03a0: 79 69 6e 67 20 74 6f 20 64 6f 2e 20 20 49 6e 20  ying to do.  In 
03b0: 6f 72 64 65 72 20 74 6f 0a 61 63 68 69 65 76 65  order to.achieve
03c0: 20 73 69 6d 70 6c 69 63 69 74 79 2c 20 53 51 4c   simplicity, SQL
03d0: 69 74 65 20 68 61 73 20 68 61 64 20 74 6f 20 73  ite has had to s
03e0: 61 63 72 69 66 69 63 65 20 6f 74 68 65 72 20 63  acrifice other c
03f0: 68 61 72 61 63 74 65 72 69 73 74 69 63 73 0a 74  haracteristics.t
0400: 68 61 74 20 73 6f 6d 65 20 70 65 6f 70 6c 65 20  hat some people 
0410: 66 69 6e 64 20 75 73 65 66 75 6c 2c 20 73 75 63  find useful, suc
0420: 68 20 61 73 20 68 69 67 68 20 63 6f 6e 63 75 72  h as high concur
0430: 72 65 6e 63 79 2c 20 66 69 6e 65 2d 67 72 61 69  rency, fine-grai
0440: 6e 65 64 0a 61 63 63 65 73 73 20 63 6f 6e 74 72  ned.access contr
0450: 6f 6c 2c 20 61 20 72 69 63 68 20 73 65 74 20 6f  ol, a rich set o
0460: 66 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  f built-in funct
0470: 69 6f 6e 73 2c 20 73 74 6f 72 65 64 20 70 72 6f  ions, stored pro
0480: 63 65 64 75 72 65 73 2c 0a 65 73 6f 74 65 72 69  cedures,.esoteri
0490: 63 20 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66  c SQL language f
04a0: 65 61 74 75 72 65 73 2c 20 58 4d 4c 20 61 6e 64  eatures, XML and
04b0: 2f 6f 72 20 4a 61 76 61 20 65 78 74 65 6e 73 69  /or Java extensi
04c0: 6f 6e 73 2c 0a 74 65 72 61 2d 20 6f 72 20 70 65  ons,.tera- or pe
04d0: 74 61 2d 62 79 74 65 20 73 63 61 6c 61 62 69 6c  ta-byte scalabil
04e0: 69 74 79 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ity, and so fort
04f0: 68 2e 20 20 49 66 20 79 6f 75 20 6e 65 65 64 20  h.  If you need 
0500: 73 6f 6d 65 20 6f 66 20 74 68 65 73 65 0a 6c 61  some of these.la
0510: 74 74 65 72 20 6f 66 20 66 65 61 74 75 72 65 73  tter of features
0520: 20 61 6e 64 20 64 6f 20 6e 6f 74 20 6d 69 6e 64   and do not mind
0530: 20 74 68 65 20 61 64 64 65 64 20 63 6f 6d 70 6c   the added compl
0540: 65 78 69 74 79 20 74 68 61 74 20 74 68 65 79 0a  exity that they.
0550: 62 72 69 6e 67 2c 20 74 68 65 6e 20 53 51 4c 69  bring, then SQLi
0560: 74 65 20 69 73 20 70 72 6f 62 61 62 6c 79 20 6e  te is probably n
0570: 6f 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ot the database 
0580: 66 6f 72 20 79 6f 75 2e 0a 53 51 4c 69 74 65 20  for you..SQLite 
0590: 69 73 20 6e 6f 74 20 69 6e 74 65 6e 64 65 64 20  is not intended 
05a0: 74 6f 20 62 65 20 61 6e 20 65 6e 74 65 72 70 72  to be an enterpr
05b0: 69 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  ise database eng
05c0: 69 6e 65 2e 20 20 49 74 0a 6e 6f 74 20 64 65 73  ine.  It.not des
05d0: 69 67 6e 65 64 20 74 6f 20 63 6f 6d 70 65 74 65  igned to compete
05e0: 20 77 69 74 68 20 4f 72 61 63 6c 65 20 6f 72 20   with Oracle or 
05f0: 50 6f 73 74 67 72 65 53 51 4c 2e 0a 3c 2f 70 3e  PostgreSQL..</p>
0600: 0a 0a 3c 70 3e 0a 54 68 65 20 62 61 73 69 63 20  ..<p>.The basic 
0610: 72 75 6c 65 20 6f 66 20 74 68 75 6d 62 20 66 6f  rule of thumb fo
0620: 72 20 77 68 65 6e 20 69 74 20 69 73 20 61 70 70  r when it is app
0630: 72 6f 70 72 69 61 74 65 20 74 6f 20 75 73 65 20  ropriate to use 
0640: 53 51 4c 69 74 65 20 69 73 0a 74 68 69 73 3a 20  SQLite is.this: 
0650: 20 55 73 65 20 53 51 4c 69 74 65 20 69 6e 20 73   Use SQLite in s
0660: 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20  ituations where 
0670: 73 69 6d 70 6c 69 63 69 74 79 20 6f 66 20 61 64  simplicity of ad
0680: 6d 69 6e 69 73 74 72 61 74 69 6f 6e 2c 0a 69 6d  ministration,.im
0690: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 61 6e  plementation, an
06a0: 64 20 6d 61 69 6e 74 65 6e 61 6e 63 65 20 61 72  d maintenance ar
06b0: 65 20 6d 6f 72 65 20 69 6d 70 6f 72 74 61 6e 74  e more important
06c0: 20 74 68 61 6e 20 74 68 65 20 63 6f 75 6e 74 6c   than the countl
06d0: 65 73 73 0a 63 6f 6d 70 6c 65 78 20 66 65 61 74  ess.complex feat
06e0: 75 72 65 73 20 74 68 61 74 20 65 6e 74 65 72 70  ures that enterp
06f0: 72 69 73 65 20 64 61 74 61 62 61 73 65 20 65 6e  rise database en
0700: 67 69 6e 65 73 20 70 72 6f 76 69 64 65 2e 0a 41  gines provide..A
0710: 73 20 69 74 20 74 75 72 6e 73 20 6f 75 74 2c 20  s it turns out, 
0720: 73 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65  situations where
0730: 20 73 69 6d 70 6c 69 63 69 74 79 20 69 73 20 74   simplicity is t
0740: 68 65 20 62 65 74 74 65 72 20 63 68 6f 69 63 65  he better choice
0750: 0a 61 72 65 20 6d 6f 72 65 20 63 6f 6d 6d 6f 6e  .are more common
0760: 20 74 68 61 74 20 6d 61 6e 79 20 70 65 6f 70 6c   that many peopl
0770: 65 20 72 65 61 6c 69 7a 65 2e 0a 3c 2f 70 3e 0a  e realize..</p>.
0780: 0a 3c 68 32 3e 53 69 74 75 61 74 69 6f 6e 73 20  .<h2>Situations 
0790: 57 68 65 72 65 20 53 51 4c 69 74 65 20 57 6f 72  Where SQLite Wor
07a0: 6b 73 20 57 65 6c 6c 3c 2f 68 32 3e 0a 0a 3c 75  ks Well</h2>..<u
07b0: 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 57 65 62  l>.<li><p><b>Web
07c0: 73 69 74 65 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c  sites</b></p>..<
07d0: 70 3e 53 51 4c 69 74 65 20 75 73 75 61 6c 6c 79  p>SQLite usually
07e0: 20 77 69 6c 6c 20 77 6f 72 6b 20 67 72 65 61 74   will work great
07f0: 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
0800: 20 65 6e 67 69 6e 65 20 66 6f 72 20 6c 6f 77 20   engine for low 
0810: 74 6f 0a 6d 65 64 69 75 6d 20 74 72 61 66 66 69  to.medium traffi
0820: 63 20 77 65 62 73 69 74 65 73 20 28 77 68 69 63  c websites (whic
0830: 68 20 69 73 20 74 6f 20 73 61 79 2c 20 39 39 2e  h is to say, 99.
0840: 39 25 20 6f 66 20 61 6c 6c 20 77 65 62 73 69 74  9% of all websit
0850: 65 73 29 2e 0a 54 68 65 20 61 6d 6f 75 6e 74 20  es)..The amount 
0860: 6f 66 20 77 65 62 20 74 72 61 66 66 69 63 20 74  of web traffic t
0870: 68 61 74 20 53 51 4c 69 74 65 20 63 61 6e 20 68  hat SQLite can h
0880: 61 6e 64 6c 65 20 64 65 70 65 6e 64 73 2c 20 6f  andle depends, o
0890: 66 20 63 6f 75 72 73 65 2c 0a 6f 6e 20 68 6f 77  f course,.on how
08a0: 20 68 65 61 76 69 6c 79 20 74 68 65 20 77 65 62   heavily the web
08b0: 73 69 74 65 20 75 73 65 73 20 69 74 73 20 64 61  site uses its da
08c0: 74 61 62 61 73 65 2e 20 20 47 65 6e 65 72 61 6c  tabase.  General
08d0: 6c 79 0a 73 70 65 61 6b 69 6e 67 2c 20 61 6e 79  ly.speaking, any
08e0: 20 73 69 74 65 20 74 68 61 74 20 67 65 74 73 20   site that gets 
08f0: 66 65 77 65 72 20 74 68 61 6e 20 61 20 31 30 30  fewer than a 100
0900: 30 30 30 20 68 69 74 73 2f 64 61 79 20 73 68 6f  000 hits/day sho
0910: 75 6c 64 20 77 6f 72 6b 0a 66 69 6e 65 20 77 69  uld work.fine wi
0920: 74 68 20 53 51 4c 69 74 65 2e 0a 54 68 65 20 31  th SQLite..The 1
0930: 30 30 30 30 30 20 68 69 74 73 2f 64 61 79 20 66  00000 hits/day f
0940: 69 67 75 72 65 20 69 73 20 61 20 63 6f 6e 73 65  igure is a conse
0950: 72 76 61 74 69 76 65 20 65 73 74 69 6d 61 74 65  rvative estimate
0960: 2c 20 6e 6f 74 20 61 0a 68 61 72 64 20 75 70 70  , not a.hard upp
0970: 65 72 20 62 6f 75 6e 64 2e 0a 53 51 4c 69 74 65  er bound..SQLite
0980: 20 68 61 73 20 62 65 65 6e 20 64 65 6d 6f 6e 73   has been demons
0990: 74 72 61 74 65 64 20 74 6f 20 77 6f 72 6b 20 77  trated to work w
09a0: 69 74 68 20 31 30 20 74 69 6d 65 73 20 74 68 61  ith 10 times tha
09b0: 74 20 61 6d 6f 75 6e 74 0a 6f 66 20 74 72 61 66  t amount.of traf
09c0: 66 69 63 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  fic.</p>.</li>..
09d0: 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 6d 62 65 64 64  <li><p><b>Embedd
09e0: 65 64 20 64 65 76 69 63 65 73 20 61 6e 64 20 61  ed devices and a
09f0: 70 70 6c 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c  pplications</b><
0a00: 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20  /p>..<p>Because 
0a10: 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  an SQLite databa
0a20: 73 65 20 72 65 71 75 69 72 65 73 20 6c 69 74 74  se requires litt
0a30: 6c 65 20 6f 72 20 6e 6f 20 61 64 6d 69 6e 69 73  le or no adminis
0a40: 74 72 61 74 69 6f 6e 2c 0a 53 51 4c 69 74 65 20  tration,.SQLite 
0a50: 69 73 20 61 20 67 6f 6f 64 20 63 68 6f 69 63 65  is a good choice
0a60: 20 66 6f 72 20 64 65 76 69 63 65 73 20 6f 72 20   for devices or 
0a70: 73 65 72 76 69 63 65 73 20 74 68 61 74 20 6d 75  services that mu
0a80: 73 74 20 77 6f 72 6b 0a 75 6e 61 74 74 65 6e 64  st work.unattend
0a90: 65 64 20 61 6e 64 20 77 69 74 68 6f 75 74 20 68  ed and without h
0aa0: 75 6d 61 6e 20 73 75 70 70 6f 72 74 2e 20 20 53  uman support.  S
0ab0: 51 4c 69 74 65 20 69 73 20 61 20 67 6f 6f 64 20  QLite is a good 
0ac0: 66 69 74 20 66 6f 72 0a 75 73 65 20 69 6e 20 63  fit for.use in c
0ad0: 65 6c 6c 70 68 6f 6e 65 73 2c 20 50 44 41 73 2c  ellphones, PDAs,
0ae0: 20 73 65 74 2d 74 6f 70 20 62 6f 78 65 73 2c 20   set-top boxes, 
0af0: 61 6e 64 2f 6f 72 20 61 70 70 6c 69 61 6e 63 65  and/or appliance
0b00: 73 2e 20 20 49 74 20 61 6c 73 6f 0a 77 6f 72 6b  s.  It also.work
0b10: 73 20 77 65 6c 6c 20 61 73 20 61 6e 20 65 6d 62  s well as an emb
0b20: 65 64 64 65 64 20 64 61 74 61 62 61 73 65 20 69  edded database i
0b30: 6e 20 64 6f 77 6e 6c 6f 61 64 61 62 6c 65 20 63  n downloadable c
0b40: 6f 6e 73 75 6d 65 72 20 61 70 70 6c 69 63 61 74  onsumer applicat
0b50: 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e  ions..</p>.</li>
0b60: 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 41 70 70 6c  ..<li><p><b>Appl
0b70: 69 63 61 74 69 6f 6e 20 46 69 6c 65 20 46 6f 72  ication File For
0b80: 6d 61 74 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e  mat</b></p>..<p>
0b90: 0a 53 51 4c 69 74 65 20 68 61 73 20 62 65 65 6e  .SQLite has been
0ba0: 20 75 73 65 64 20 77 69 74 68 20 67 72 65 61 74   used with great
0bb0: 20 73 75 63 63 65 73 73 20 61 73 20 74 68 65 20   success as the 
0bc0: 6f 6e 2d 64 69 73 6b 20 66 69 6c 65 20 66 6f 72  on-disk file for
0bd0: 6d 61 74 0a 66 6f 72 20 64 65 73 6b 74 6f 70 20  mat.for desktop 
0be0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 75 63  applications suc
0bf0: 68 20 61 73 20 66 69 6e 61 6e 63 69 61 6c 20 61  h as financial a
0c00: 6e 61 6c 79 73 69 73 20 74 6f 6f 6c 73 2c 20 43  nalysis tools, C
0c10: 41 44 0a 70 61 63 6b 61 67 65 73 2c 20 72 65 63  AD.packages, rec
0c20: 6f 72 64 20 6b 65 65 70 69 6e 67 20 70 72 6f 67  ord keeping prog
0c30: 72 61 6d 73 2c 20 61 6e 64 20 73 6f 20 66 6f 72  rams, and so for
0c40: 74 68 2e 20 20 54 68 65 20 74 72 61 64 69 74 69  th.  The traditi
0c50: 6f 6e 61 6c 0a 46 69 6c 65 2f 4f 70 65 6e 20 6f  onal.File/Open o
0c60: 70 65 72 61 74 69 6f 6e 20 64 6f 65 73 20 61 6e  peration does an
0c70: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20   sqlite3_open() 
0c80: 61 6e 64 20 65 78 65 63 75 74 65 73 20 61 0a 42  and executes a.B
0c90: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
0ca0: 20 74 6f 20 67 65 74 20 65 78 63 6c 75 73 69 76   to get exclusiv
0cb0: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
0cc0: 63 6f 6e 74 65 6e 74 2e 20 20 46 69 6c 65 2f 53  content.  File/S
0cd0: 61 76 65 0a 64 6f 65 73 20 61 20 43 4f 4d 4d 49  ave.does a COMMI
0ce0: 54 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  T followed by an
0cf0: 6f 74 68 65 72 20 42 45 47 49 4e 20 54 52 41 4e  other BEGIN TRAN
0d00: 53 41 43 54 49 4f 4e 2e 20 20 54 68 65 20 75 73  SACTION.  The us
0d10: 65 0a 6f 66 20 74 72 61 6e 73 61 63 74 69 6f 6e  e.of transaction
0d20: 73 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 61  s guarantees tha
0d30: 74 20 75 70 64 61 74 65 73 20 74 6f 20 74 68 65  t updates to the
0d40: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c   application fil
0d50: 65 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 64 75  e are atomic,.du
0d60: 72 61 62 6c 65 2c 20 69 73 6f 6c 61 74 65 64 2c  rable, isolated,
0d70: 20 61 6e 64 20 63 6f 6e 73 69 73 74 65 6e 74 2e   and consistent.
0d80: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 65 6d 70 6f  .</p>..<p>.Tempo
0d90: 72 61 72 79 20 74 72 69 67 67 65 72 73 20 63 61  rary triggers ca
0da0: 6e 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  n be added to th
0db0: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 72 65  e database to re
0dc0: 63 6f 72 64 20 61 6c 6c 0a 63 68 61 6e 67 65 73  cord all.changes
0dd0: 20 69 6e 74 6f 20 61 20 28 74 65 6d 70 6f 72 61   into a (tempora
0de0: 72 79 29 20 75 6e 64 6f 2f 72 65 64 6f 20 6c 6f  ry) undo/redo lo
0df0: 67 20 74 61 62 6c 65 2e 20 20 54 68 65 73 65 20  g table.  These 
0e00: 63 68 61 6e 67 65 73 20 63 61 6e 20 74 68 65 6e  changes can then
0e10: 0a 62 65 20 70 6c 61 79 65 64 20 62 61 63 6b 20  .be played back 
0e20: 77 68 65 6e 20 74 68 65 20 75 73 65 72 20 70 72  when the user pr
0e30: 65 73 73 65 73 20 74 68 65 20 55 6e 64 6f 20 61  esses the Undo a
0e40: 6e 64 20 52 65 64 6f 20 62 75 74 74 6f 6e 73 2e  nd Redo buttons.
0e50: 20 20 55 73 69 6e 67 0a 74 68 69 73 20 74 65 63    Using.this tec
0e60: 68 6e 69 71 75 65 2c 20 61 20 75 6e 6c 69 6d 69  hnique, a unlimi
0e70: 74 65 64 20 64 65 70 74 68 20 75 6e 64 6f 2f 72  ted depth undo/r
0e80: 65 64 6f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  edo implementati
0e90: 6f 6e 20 63 61 6e 20 62 65 20 77 72 69 74 74 65  on can be writte
0ea0: 6e 0a 69 6e 20 73 75 72 70 72 69 73 69 6e 67 20  n.in surprising 
0eb0: 6c 69 74 74 6c 65 20 63 6f 64 65 2e 0a 3c 2f 70  little code..</p
0ec0: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  >.</li>..<li><p>
0ed0: 3c 62 3e 52 65 70 6c 61 63 65 6d 65 6e 74 20 66  <b>Replacement f
0ee0: 6f 72 20 3c 69 3e 61 64 20 68 6f 63 3c 2f 69 3e  or <i>ad hoc</i>
0ef0: 20 64 69 73 6b 20 66 69 6c 65 73 3c 2f 62 3e 3c   disk files</b><
0f00: 2f 70 3e 0a 0a 3c 70 3e 4d 61 6e 79 20 70 72 6f  /p>..<p>Many pro
0f10: 67 72 61 6d 73 20 75 73 65 20 66 6f 70 65 6e 28  grams use fopen(
0f20: 29 2c 20 66 72 65 61 64 28 29 2c 20 61 6e 64 20  ), fread(), and 
0f30: 66 77 72 69 74 65 28 29 20 74 6f 20 63 72 65 61  fwrite() to crea
0f40: 74 65 20 61 6e 64 0a 6d 61 6e 61 67 65 20 66 69  te and.manage fi
0f50: 6c 65 73 20 6f 66 20 64 61 74 61 20 69 6e 20 68  les of data in h
0f60: 6f 6d 65 2d 67 72 6f 77 6e 20 66 6f 72 6d 61 74  ome-grown format
0f70: 73 2e 20 20 53 51 4c 69 74 65 20 77 6f 72 6b 73  s.  SQLite works
0f80: 20 0a 70 61 72 74 69 63 75 6c 61 72 6c 79 20 77   .particularly w
0f90: 65 6c 6c 20 61 73 20 61 0a 72 65 70 6c 61 63 65  ell as a.replace
0fa0: 6d 65 6e 74 20 66 6f 72 20 74 68 65 73 65 20 3c  ment for these <
0fb0: 69 3e 61 64 20 68 6f 63 3c 2f 69 3e 20 64 61 74  i>ad hoc</i> dat
0fc0: 61 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 3c 2f 6c  a files.</p>.</l
0fd0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 6e  i>..<li><p><b>In
0fe0: 74 65 72 6e 61 6c 20 6f 72 20 74 65 6d 70 6f 72  ternal or tempor
0ff0: 61 72 79 20 64 61 74 61 62 61 73 65 73 3c 2f 62  ary databases</b
1000: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 70  ></p>..<p>.For p
1010: 72 6f 67 72 61 6d 73 20 74 68 61 74 20 68 61 76  rograms that hav
1020: 65 20 61 20 6c 6f 74 20 6f 66 20 64 61 74 61 20  e a lot of data 
1030: 74 68 61 74 20 6d 75 73 74 20 62 65 20 73 69 66  that must be sif
1040: 74 65 64 20 61 6e 64 20 73 6f 72 74 65 64 0a 69  ted and sorted.i
1050: 6e 20 64 69 76 65 72 73 65 20 77 61 79 73 2c 20  n diverse ways, 
1060: 69 74 20 69 73 20 6f 66 74 65 6e 20 65 61 73 69  it is often easi
1070: 65 72 20 61 6e 64 20 71 75 69 63 6b 65 72 20 74  er and quicker t
1080: 6f 20 6c 6f 61 64 20 74 68 65 20 64 61 74 61 20  o load the data 
1090: 69 6e 74 6f 0a 61 6e 20 69 6e 2d 6d 65 6d 6f 72  into.an in-memor
10a0: 79 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  y SQLite databas
10b0: 65 20 61 6e 64 20 75 73 65 20 71 75 65 72 69 65  e and use querie
10c0: 73 20 77 69 74 68 20 6a 6f 69 6e 73 20 61 6e 64  s with joins and
10d0: 20 4f 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65   ORDER BY.clause
10e0: 73 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  s to extract the
10f0: 20 64 61 74 61 20 69 6e 20 74 68 65 20 66 6f 72   data in the for
1100: 6d 20 61 6e 64 20 6f 72 64 65 72 20 6e 65 65 64  m and order need
1110: 65 64 20 72 61 74 68 65 72 20 74 68 61 6e 0a 74  ed rather than.t
1120: 6f 20 74 72 79 20 74 6f 20 63 6f 64 65 20 74 68  o try to code th
1130: 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
1140: 73 20 6d 61 6e 75 61 6c 6c 79 2e 0a 55 73 69 6e  s manually..Usin
1150: 67 20 61 6e 20 53 51 4c 20 64 61 74 61 62 61 73  g an SQL databas
1160: 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 69 6e 20  e internally in 
1170: 74 68 69 73 20 77 61 79 20 61 6c 73 6f 20 67 69  this way also gi
1180: 76 65 73 20 74 68 65 20 70 72 6f 67 72 61 6d 0a  ves the program.
1190: 67 72 65 61 74 65 72 20 66 6c 65 78 69 62 69 6c  greater flexibil
11a0: 69 74 79 20 73 69 6e 63 65 20 6e 65 77 20 63 6f  ity since new co
11b0: 6c 75 6d 6e 73 20 61 6e 64 20 69 6e 64 69 63 65  lumns and indice
11c0: 73 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 77  s can be added w
11d0: 69 74 68 6f 75 74 0a 68 61 76 69 6e 67 20 74 6f  ithout.having to
11e0: 20 72 65 63 6f 64 65 20 65 76 65 72 79 20 71 75   recode every qu
11f0: 65 72 79 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  ery..</p>.</li>.
1200: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 43 6f 6d 6d 61  .<li><p><b>Comma
1210: 6e 64 2d 6c 69 6e 65 20 64 61 74 61 73 65 74 20  nd-line dataset 
1220: 61 6e 61 6c 79 73 69 73 20 74 6f 6f 6c 3c 2f 62  analysis tool</b
1230: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 78 70 65 72  ></p>..<p>.Exper
1240: 69 65 6e 63 65 64 20 53 51 4c 20 75 73 65 72 73  ienced SQL users
1250: 20 63 61 6e 20 65 6d 70 6c 6f 79 0a 74 68 65 20   can employ.the 
1260: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 3c 62 3e  command-line <b>
1270: 73 71 6c 69 74 65 3c 2f 62 3e 20 70 72 6f 67 72  sqlite</b> progr
1280: 61 6d 20 74 6f 20 61 6e 61 6c 79 7a 65 20 6d 69  am to analyze mi
1290: 73 63 65 6c 6c 61 6e 65 6f 75 73 0a 64 61 74 61  scellaneous.data
12a0: 73 65 74 73 2e 20 52 61 77 20 64 61 74 61 20 63  sets. Raw data c
12b0: 61 6e 20 62 65 20 69 6d 70 6f 72 74 65 64 20 66  an be imported f
12c0: 72 6f 6d 20 43 53 56 20 66 69 6c 65 73 2c 20 74  rom CSV files, t
12d0: 68 65 6e 20 74 68 61 74 0a 64 61 74 61 20 63 61  hen that.data ca
12e0: 6e 20 62 65 20 73 6c 69 63 65 64 20 61 6e 64 20  n be sliced and 
12f0: 64 69 63 65 64 20 74 6f 20 67 65 6e 65 72 61 74  diced to generat
1300: 65 20 61 20 6d 79 72 69 61 64 20 6f 66 20 73 75  e a myriad of su
1310: 6d 6d 61 72 79 0a 72 65 70 6f 72 74 73 2e 20 20  mmary.reports.  
1320: 50 6f 73 73 69 62 6c 65 20 75 73 65 73 20 69 6e  Possible uses in
1330: 63 6c 75 64 65 20 77 65 62 73 69 74 65 20 6c 6f  clude website lo
1340: 67 20 61 6e 61 6c 79 73 69 73 2c 20 73 70 6f 72  g analysis, spor
1350: 74 73 0a 73 74 61 74 69 73 74 69 63 73 20 61 6e  ts.statistics an
1360: 61 6c 79 73 69 73 2c 20 63 6f 6d 70 69 6c 61 74  alysis, compilat
1370: 69 6f 6e 20 6f 66 20 70 72 6f 67 72 61 6d 6d 69  ion of programmi
1380: 6e 67 20 6d 65 74 72 69 63 73 2c 20 61 6e 64 0a  ng metrics, and.
1390: 61 6e 61 6c 79 73 69 73 20 6f 66 20 65 78 70 65  analysis of expe
13a0: 72 69 6d 65 6e 74 61 6c 20 72 65 73 75 6c 74 73  rimental results
13b0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 59 6f 75 20  ..</p>..<p>.You 
13c0: 63 61 6e 20 61 6c 73 6f 20 64 6f 20 74 68 65 20  can also do the 
13d0: 73 61 6d 65 20 74 68 69 6e 67 20 77 69 74 68 20  same thing with 
13e0: 61 20 65 6e 74 65 72 70 72 69 73 65 20 63 6c 69  a enterprise cli
13f0: 65 6e 74 2f 73 65 72 76 65 72 0a 64 61 74 61 62  ent/server.datab
1400: 61 73 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e 20  ase, of course. 
1410: 20 54 68 65 20 61 64 76 61 6e 74 61 67 65 73 20   The advantages 
1420: 74 6f 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20  to using SQLite 
1430: 69 6e 20 74 68 69 73 20 73 69 74 75 61 74 69 6f  in this situatio
1440: 6e 0a 61 72 65 20 74 68 61 74 20 53 51 4c 69 74  n.are that SQLit
1450: 65 20 69 73 20 6d 75 63 68 20 65 61 73 69 65 72  e is much easier
1460: 20 74 6f 20 73 65 74 20 75 70 20 61 6e 64 20 74   to set up and t
1470: 68 65 20 72 65 73 75 6c 74 69 6e 67 20 64 61 74  he resulting dat
1480: 61 62 61 73 65 20 0a 69 73 20 61 20 73 69 6e 67  abase .is a sing
1490: 6c 65 20 66 69 6c 65 20 74 68 61 74 20 79 6f 75  le file that you
14a0: 20 63 61 6e 20 73 74 6f 72 65 20 6f 6e 20 61 20   can store on a 
14b0: 66 6c 6f 70 70 79 20 64 69 73 6b 20 6f 72 20 66  floppy disk or f
14c0: 6c 61 73 68 2d 6d 65 6d 6f 72 79 20 73 74 69 63  lash-memory stic
14d0: 6b 0a 6f 72 20 65 6d 61 69 6c 20 74 6f 20 61 20  k.or email to a 
14e0: 63 6f 6c 6c 65 61 67 75 65 2e 0a 3c 2f 70 3e 0a  colleague..</p>.
14f0: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  </li>..<li><p><b
1500: 3e 53 74 61 6e 64 2d 69 6e 20 66 6f 72 20 61 6e  >Stand-in for an
1510: 20 65 6e 74 65 72 70 72 69 73 65 20 64 61 74 61   enterprise data
1520: 62 61 73 65 20 64 75 72 69 6e 67 20 64 65 6d 6f  base during demo
1530: 73 20 6f 72 20 74 65 73 74 69 6e 67 3c 2f 62 3e  s or testing</b>
1540: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 79 6f 75  </p>..<p>.If you
1550: 20 61 72 65 20 77 72 69 74 69 6e 67 20 61 20 63   are writing a c
1560: 6c 69 65 6e 74 20 61 70 70 6c 69 63 61 74 69 6f  lient applicatio
1570: 6e 20 66 6f 72 20 61 6e 20 65 6e 74 65 72 70 72  n for an enterpr
1580: 69 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67  ise database eng
1590: 69 6e 65 2c 0a 69 74 20 6d 61 6b 65 73 20 73 65  ine,.it makes se
15a0: 6e 73 65 20 74 6f 20 75 73 65 20 61 20 67 65 6e  nse to use a gen
15b0: 65 72 69 63 20 64 61 74 61 62 61 73 65 20 62 61  eric database ba
15c0: 63 6b 65 6e 64 20 74 68 61 74 20 61 6c 6c 6f 77  ckend that allow
15d0: 73 20 79 6f 75 20 74 6f 20 63 6f 6e 6e 65 63 74  s you to connect
15e0: 0a 74 6f 20 6d 61 6e 79 20 64 69 66 66 65 72 65  .to many differe
15f0: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 53 51 4c 20  nt kinds of SQL 
1600: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
1610: 2e 20 20 49 74 20 6d 61 6b 65 73 20 65 76 65 6e  .  It makes even
1620: 20 62 65 74 74 65 72 0a 73 65 6e 73 65 20 74 6f   better.sense to
1630: 0a 67 6f 20 61 68 65 61 64 20 61 6e 64 20 69 6e  .go ahead and in
1640: 63 6c 75 64 65 20 53 51 4c 69 74 65 20 69 6e 20  clude SQLite in 
1650: 74 68 65 20 6d 69 78 20 6f 66 20 73 75 70 70 6f  the mix of suppo
1660: 72 74 65 64 20 64 61 74 61 62 61 73 65 20 61 6e  rted database an
1670: 64 20 74 6f 20 73 74 61 74 69 63 61 6c 6c 79 0a  d to statically.
1680: 6c 69 6e 6b 20 74 68 65 20 53 51 4c 69 74 65 20  link the SQLite 
1690: 65 6e 67 69 6e 65 20 69 6e 20 77 69 74 68 20 74  engine in with t
16a0: 68 65 20 63 6c 69 65 6e 74 2e 20 20 54 68 61 74  he client.  That
16b0: 20 77 61 79 20 74 68 65 20 63 6c 69 65 6e 74 20   way the client 
16c0: 70 72 6f 67 72 61 6d 0a 63 61 6e 20 62 65 20 75  program.can be u
16d0: 73 65 64 20 73 74 61 6e 64 61 6c 6f 6e 65 20 77  sed standalone w
16e0: 69 74 68 20 61 6e 20 53 51 4c 69 74 65 20 64 61  ith an SQLite da
16f0: 74 61 20 66 69 6c 65 20 66 6f 72 20 74 65 73 74  ta file for test
1700: 69 6e 67 20 6f 72 20 66 6f 72 0a 64 65 6d 6f 6e  ing or for.demon
1710: 73 74 72 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a  strations..</p>.
1720: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  </li>..<li><p><b
1730: 3e 44 61 74 61 62 61 73 65 20 50 65 64 61 67 6f  >Database Pedago
1740: 67 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  gy</b></p>..<p>.
1750: 42 65 63 61 75 73 65 20 69 74 20 69 73 20 73 69  Because it is si
1760: 6d 70 6c 65 20 74 6f 20 73 65 74 75 70 20 61 6e  mple to setup an
1770: 64 20 75 73 65 20 28 69 6e 73 74 61 6c 6c 61 74  d use (installat
1780: 69 6f 6e 20 69 73 20 74 72 69 76 69 61 6c 3a 20  ion is trivial: 
1790: 6a 75 73 74 0a 63 6f 70 79 20 74 68 65 20 3c 62  just.copy the <b
17a0: 3e 73 71 6c 69 74 65 3c 2f 62 3e 20 6f 72 20 3c  >sqlite</b> or <
17b0: 62 3e 73 71 6c 69 74 65 2e 65 78 65 3c 2f 62 3e  b>sqlite.exe</b>
17c0: 20 65 78 65 63 75 74 61 62 6c 65 20 74 6f 20 74   executable to t
17d0: 68 65 20 74 61 72 67 65 74 20 6d 61 63 68 69 6e  he target machin
17e0: 65 0a 61 6e 64 20 72 75 6e 20 69 74 29 20 53 51  e.and run it) SQ
17f0: 4c 69 74 65 20 6d 61 6b 65 73 20 61 20 67 6f 6f  Lite makes a goo
1800: 64 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  d database engin
1810: 65 20 66 6f 72 20 75 73 65 20 69 6e 20 74 65 61  e for use in tea
1820: 63 68 69 6e 67 20 53 51 4c 2e 0a 53 74 75 64 65  ching SQL..Stude
1830: 6e 74 73 20 63 61 6e 20 65 61 73 69 6c 79 20 63  nts can easily c
1840: 72 65 61 74 65 20 61 73 20 6d 61 6e 79 20 64 61  reate as many da
1850: 74 61 62 61 73 65 73 20 61 73 20 74 68 65 79 20  tabases as they 
1860: 6c 69 6b 65 20 61 6e 64 20 63 61 6e 0a 65 6d 61  like and can.ema
1870: 69 6c 20 64 61 74 61 62 61 73 65 73 20 74 6f 20  il databases to 
1880: 74 68 65 20 69 6e 73 74 72 75 63 74 6f 72 20 66  the instructor f
1890: 6f 72 20 63 6f 6d 6d 65 6e 74 73 20 6f 72 20 67  or comments or g
18a0: 72 61 64 69 6e 67 2e 20 20 46 6f 72 20 6d 6f 72  rading.  For mor
18b0: 65 0a 61 64 76 61 6e 63 65 64 20 73 74 75 64 65  e.advanced stude
18c0: 6e 74 73 20 77 68 6f 20 61 72 65 20 69 6e 74 65  nts who are inte
18d0: 72 65 73 74 65 64 20 69 6e 20 73 74 75 64 79 69  rested in studyi
18e0: 6e 67 20 68 6f 77 20 61 6e 20 52 44 42 4d 53 20  ng how an RDBMS 
18f0: 69 73 0a 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20  is.implemented, 
1900: 74 68 65 20 6d 6f 64 75 6c 61 72 20 61 6e 64 20  the modular and 
1910: 77 65 6c 6c 2d 63 6f 6d 6d 65 6e 74 65 64 20 61  well-commented a
1920: 6e 64 20 64 6f 63 75 6d 65 6e 74 65 64 20 53 51  nd documented SQ
1930: 4c 69 74 65 20 63 6f 64 65 0a 63 61 6e 20 73 65  Lite code.can se
1940: 72 76 65 20 61 73 20 61 20 67 6f 6f 64 20 62 61  rve as a good ba
1950: 73 69 73 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  sis.  This is no
1960: 74 20 74 6f 20 73 61 79 20 74 68 61 74 20 53 51  t to say that SQ
1970: 4c 69 74 65 20 69 73 20 61 6e 20 61 63 63 75 72  Lite is an accur
1980: 61 74 65 0a 6d 6f 64 65 6c 20 6f 66 20 68 6f 77  ate.model of how
1990: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20   other database 
19a0: 65 6e 67 69 6e 65 73 20 61 72 65 20 69 6d 70 6c  engines are impl
19b0: 65 6d 65 6e 74 65 64 2c 20 62 75 74 20 72 61 74  emented, but rat
19c0: 68 65 72 20 61 20 73 74 75 64 65 6e 74 20 77 68  her a student wh
19d0: 6f 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 68 6f  o.understands ho
19e0: 77 20 53 51 4c 69 74 65 20 77 6f 72 6b 73 20 63  w SQLite works c
19f0: 61 6e 20 6d 6f 72 65 20 71 75 69 63 6b 6c 79 20  an more quickly 
1a00: 63 6f 6d 70 72 65 68 65 6e 64 20 74 68 65 20 6f  comprehend the o
1a10: 70 65 72 61 74 69 6f 6e 61 6c 0a 70 72 69 6e 63  perational.princ
1a20: 69 70 6c 65 73 20 6f 66 20 6f 74 68 65 72 20 73  iples of other s
1a30: 79 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c  ystems..</p>.</l
1a40: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 78  i>..<li><p><b>Ex
1a50: 70 65 72 69 6d 65 6e 74 61 6c 20 53 51 4c 20 6c  perimental SQL l
1a60: 61 6e 67 75 61 67 65 20 65 78 74 65 6e 73 69 6f  anguage extensio
1a70: 6e 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ns</b></p>..<p>T
1a80: 68 65 20 73 69 6d 70 6c 65 2c 20 6d 6f 64 75 6c  he simple, modul
1a90: 61 72 20 64 65 73 69 67 6e 20 6f 66 20 53 51 4c  ar design of SQL
1aa0: 69 74 65 20 6d 61 6b 65 73 20 69 74 20 61 20 67  ite makes it a g
1ab0: 6f 6f 64 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72  ood platform for
1ac0: 0a 70 72 6f 74 6f 74 79 70 69 6e 67 20 6e 65 77  .prototyping new
1ad0: 2c 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 64  , experimental d
1ae0: 61 74 61 62 61 73 65 20 6c 61 6e 67 75 61 67 65  atabase language
1af0: 20 66 65 61 74 75 72 65 73 20 6f 72 20 69 64 65   features or ide
1b00: 61 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  as..</p>.</li>..
1b10: 0a 3c 2f 75 6c 3e 0a 0a 3c 68 32 3e 53 69 74 75  .</ul>..<h2>Situ
1b20: 61 74 69 6f 6e 73 20 57 68 65 72 65 20 41 6e 6f  ations Where Ano
1b30: 74 68 65 72 20 52 44 42 4d 53 20 4d 61 79 20 57  ther RDBMS May W
1b40: 6f 72 6b 20 42 65 74 74 65 72 3c 2f 68 32 3e 0a  ork Better</h2>.
1b50: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  .<ul>.<li><p><b>
1b60: 43 6c 69 65 6e 74 2f 53 65 72 76 65 72 20 41 70  Client/Server Ap
1b70: 70 6c 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 70  plications</b><p
1b80: 3e 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 68 61 76  >..<p>If you hav
1b90: 65 20 6d 61 6e 79 20 63 6c 69 65 6e 74 20 70 72  e many client pr
1ba0: 6f 67 72 61 6d 73 20 61 63 63 65 73 73 69 6e 67  ograms accessing
1bb0: 20 61 20 63 6f 6d 6d 6f 6e 20 64 61 74 61 62 61   a common databa
1bc0: 73 65 0a 6f 76 65 72 20 61 20 6e 65 74 77 6f 72  se.over a networ
1bd0: 6b 2c 20 79 6f 75 20 73 68 6f 75 6c 64 20 63 6f  k, you should co
1be0: 6e 73 69 64 65 72 20 75 73 69 6e 67 20 61 20 63  nsider using a c
1bf0: 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 64 61 74  lient/server dat
1c00: 61 62 61 73 65 0a 65 6e 67 69 6e 65 20 69 6e 73  abase.engine ins
1c10: 74 65 61 64 20 6f 66 20 53 51 4c 69 74 65 2e 20  tead of SQLite. 
1c20: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 77 6f 72   SQLite will wor
1c30: 6b 20 6f 76 65 72 20 61 20 6e 65 74 77 6f 72 6b  k over a network
1c40: 20 66 69 6c 65 73 79 73 74 65 6d 2c 0a 62 75 74   filesystem,.but
1c50: 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20   because of the 
1c60: 6c 61 74 65 6e 63 79 20 61 73 73 6f 63 69 61 74  latency associat
1c70: 65 64 20 77 69 74 68 20 6d 6f 73 74 20 6e 65 74  ed with most net
1c80: 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 73  work filesystems
1c90: 2c 0a 70 65 72 66 6f 72 6d 61 6e 63 65 20 77 69  ,.performance wi
1ca0: 6c 6c 20 6e 6f 74 20 62 65 20 67 72 65 61 74 2e  ll not be great.
1cb0: 20 20 41 6c 73 6f 2c 20 74 68 65 20 66 69 6c 65    Also, the file
1cc0: 20 6c 6f 63 6b 69 6e 67 20 6c 6f 67 69 63 20 6f   locking logic o
1cd0: 66 0a 6d 61 6e 79 20 6e 65 74 77 6f 72 6b 20 66  f.many network f
1ce0: 69 6c 65 73 79 73 74 65 6d 73 20 69 6d 70 6c 65  ilesystems imple
1cf0: 6d 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 74 61 69  mentation contai
1d00: 6e 73 20 62 75 67 73 20 28 6f 6e 20 62 6f 74 68  ns bugs (on both
1d10: 20 55 6e 69 78 0a 61 6e 64 20 77 69 6e 64 6f 77   Unix.and window
1d20: 73 29 2e 20 20 49 66 20 66 69 6c 65 20 6c 6f 63  s).  If file loc
1d30: 6b 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 77 6f  king does not wo
1d40: 72 6b 20 6c 69 6b 65 20 69 74 20 73 68 6f 75 6c  rk like it shoul
1d50: 64 2c 0a 69 74 20 6d 69 67 68 74 20 62 65 20 70  d,.it might be p
1d60: 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 77 6f 20  ossible for two 
1d70: 6f 72 20 6d 6f 72 65 20 63 6c 69 65 6e 74 20 70  or more client p
1d80: 72 6f 67 72 61 6d 73 20 74 6f 20 6d 6f 64 69 66  rograms to modif
1d90: 79 20 74 68 65 0a 73 61 6d 65 20 70 61 72 74 20  y the.same part 
1da0: 6f 66 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  of the same data
1db0: 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d 65  base at the same
1dc0: 20 74 69 6d 65 2c 20 72 65 73 75 6c 74 69 6e 67   time, resulting
1dd0: 20 69 6e 20 0a 64 61 74 61 62 61 73 65 20 63 6f   in .database co
1de0: 72 72 75 70 74 69 6f 6e 2e 20 20 42 65 63 61 75  rruption.  Becau
1df0: 73 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 20  se this problem 
1e00: 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 62 75 67  results from bug
1e10: 73 20 69 6e 0a 74 68 65 20 75 6e 64 65 72 6c 79  s in.the underly
1e20: 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 20 69  ing filesystem i
1e30: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
1e40: 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20  here is nothing 
1e50: 53 51 4c 69 74 65 0a 63 61 6e 20 64 6f 20 74 6f  SQLite.can do to
1e60: 20 70 72 65 76 65 6e 74 20 69 74 2e 3c 2f 70 3e   prevent it.</p>
1e70: 0a 0a 3c 70 3e 41 20 67 6f 6f 64 20 72 75 6c 65  ..<p>A good rule
1e80: 20 6f 66 20 74 68 75 6d 62 20 69 73 20 74 68 61   of thumb is tha
1e90: 74 20 79 6f 75 20 73 68 6f 75 6c 64 20 61 76 6f  t you should avo
1ea0: 69 64 20 75 73 69 6e 67 20 53 51 4c 69 74 65 0a  id using SQLite.
1eb0: 69 6e 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68  in situations wh
1ec0: 65 72 65 20 74 68 65 20 73 61 6d 65 20 64 61 74  ere the same dat
1ed0: 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 61 63  abase will be ac
1ee0: 63 65 73 73 65 64 20 73 69 6d 75 6c 74 61 6e 65  cessed simultane
1ef0: 6f 75 73 6c 79 0a 66 72 6f 6d 20 6d 61 6e 79 20  ously.from many 
1f00: 63 6f 6d 70 75 74 65 72 73 20 6f 76 65 72 20 61  computers over a
1f10: 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73   network filesys
1f20: 74 65 6d 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  tem.</p>.</li>..
1f30: 3c 6c 69 3e 3c 70 3e 3c 62 3e 48 69 67 68 2d 76  <li><p><b>High-v
1f40: 6f 6c 75 6d 65 20 57 65 62 73 69 74 65 73 3c 2f  olume Websites</
1f50: 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74  b></p>..<p>SQLit
1f60: 65 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20  e will normally 
1f70: 77 6f 72 6b 20 66 69 6e 65 20 61 73 20 74 68 65  work fine as the
1f80: 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 65 6e   database backen
1f90: 64 20 74 6f 20 61 20 77 65 62 73 69 74 65 2e 0a  d to a website..
1fa0: 42 75 74 20 69 66 20 79 6f 75 20 77 65 62 73 69  But if you websi
1fb0: 74 65 20 69 73 20 73 6f 20 62 75 73 79 20 74 68  te is so busy th
1fc0: 61 74 20 79 6f 75 72 20 61 72 65 20 74 68 69 6e  at your are thin
1fd0: 6b 69 6e 67 20 6f 66 20 73 70 6c 69 74 74 69 6e  king of splittin
1fe0: 67 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 63  g the.database c
1ff0: 6f 6d 70 6f 6e 65 6e 74 20 6f 66 66 20 6f 6e 74  omponent off ont
2000: 6f 20 61 20 73 65 70 61 72 61 74 65 20 6d 61 63  o a separate mac
2010: 68 69 6e 65 2c 20 74 68 65 6e 20 79 6f 75 20 73  hine, then you s
2020: 68 6f 75 6c 64 20 0a 64 65 66 69 6e 69 74 65 6c  hould .definitel
2030: 79 20 63 6f 6e 73 69 64 65 72 20 75 73 69 6e 67  y consider using
2040: 20 61 6e 20 65 6e 74 65 72 70 72 69 73 65 2d 63   an enterprise-c
2050: 6c 61 73 73 20 63 6c 69 65 6e 74 2f 73 65 72 76  lass client/serv
2060: 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69  er database.engi
2070: 6e 65 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51  ne instead of SQ
2080: 4c 69 74 65 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  Lite.</p>.</li>.
2090: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 56 65 72 79 20  .<li><p><b>Very 
20a0: 6c 61 72 67 65 20 64 61 74 61 73 65 74 73 3c 2f  large datasets</
20b0: 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20  b></p>..<p>When 
20c0: 79 6f 75 20 73 74 61 72 74 20 61 20 74 72 61 6e  you start a tran
20d0: 73 61 63 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74  saction in SQLit
20e0: 65 20 28 77 68 69 63 68 20 68 61 70 70 65 6e 73  e (which happens
20f0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62   automatically.b
2100: 65 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20  efore any write 
2110: 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20 69  operation that i
2120: 73 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 6e 20  s not within an 
2130: 65 78 70 6c 69 63 69 74 20 42 45 47 49 4e 2e 2e  explicit BEGIN..
2140: 2e 43 4f 4d 4d 49 54 29 0a 74 68 65 20 65 6e 67  .COMMIT).the eng
2150: 69 6e 65 20 68 61 73 20 74 6f 20 61 6c 6c 6f 63  ine has to alloc
2160: 61 74 65 20 61 20 62 69 74 6d 61 70 20 6f 66 20  ate a bitmap of 
2170: 64 69 72 74 79 20 70 61 67 65 73 20 69 6e 20 74  dirty pages in t
2180: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 74 6f 0a  he disk file to.
2190: 68 65 6c 70 20 69 74 20 6d 61 6e 61 67 65 20 69  help it manage i
21a0: 74 73 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  ts rollback jour
21b0: 6e 61 6c 2e 20 20 53 51 4c 69 74 65 20 6e 65 65  nal.  SQLite nee
21c0: 64 73 20 32 35 36 20 62 79 74 65 73 20 6f 66 20  ds 256 bytes of 
21d0: 52 41 4d 20 66 6f 72 0a 65 76 65 72 79 20 31 4d  RAM for.every 1M
21e0: 42 20 6f 66 20 64 61 74 61 62 61 73 65 2e 20 20  B of database.  
21f0: 46 6f 72 20 73 6d 61 6c 6c 65 72 20 64 61 74 61  For smaller data
2200: 62 61 73 65 73 2c 20 74 68 65 20 61 6d 6f 75 6e  bases, the amoun
2210: 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 72 65 71 75  t of memory.requ
2220: 69 72 65 64 20 69 73 20 6e 6f 74 20 61 20 70 72  ired is not a pr
2230: 6f 62 6c 65 6d 2c 20 62 75 74 20 77 68 65 6e 20  oblem, but when 
2240: 64 61 74 61 62 61 73 65 20 62 65 67 69 6e 20 74  database begin t
2250: 6f 20 67 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a  o grow into the.
2260: 6d 75 6c 74 69 2d 67 69 67 61 62 79 74 65 20 72  multi-gigabyte r
2270: 61 6e 67 65 2c 20 74 68 65 20 73 69 7a 65 20 6f  ange, the size o
2280: 66 20 74 68 65 20 62 69 74 6d 61 70 20 63 61 6e  f the bitmap can
2290: 20 67 65 74 20 71 75 69 74 65 20 6c 61 72 67 65   get quite large
22a0: 2e 20 20 49 66 0a 79 6f 75 20 6e 65 65 64 20 74  .  If.you need t
22b0: 6f 20 73 74 6f 72 65 20 61 6e 64 20 6d 6f 64 69  o store and modi
22c0: 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 61 20 66  fy more than a f
22d0: 65 77 20 64 6f 7a 65 6e 20 47 42 20 6f 66 20 64  ew dozen GB of d
22e0: 61 74 61 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a  ata, you should.
22f0: 63 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20 61  consider using a
2300: 20 64 69 66 66 65 72 65 6e 74 20 64 61 74 61 62   different datab
2310: 61 73 65 20 65 6e 67 69 6e 65 2e 0a 3c 2f 70 3e  ase engine..</p>
2320: 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  .</li>..<li><p><
2330: 62 3e 48 69 67 68 20 43 6f 6e 63 75 72 72 65 6e  b>High Concurren
2340: 63 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  cy</b></p>..<p>.
2350: 53 51 4c 69 74 65 20 75 73 65 73 20 72 65 61 64  SQLite uses read
2360: 65 72 2f 77 72 69 74 65 72 20 6c 6f 63 6b 73 20  er/writer locks 
2370: 6f 6e 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  on the entire da
2380: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
2390: 61 74 20 6d 65 61 6e 73 0a 69 66 20 61 6e 79 20  at means.if any 
23a0: 70 72 6f 63 65 73 73 20 69 73 20 72 65 61 64 69  process is readi
23b0: 6e 67 20 66 72 6f 6d 20 61 6e 79 20 70 61 72 74  ng from any part
23c0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
23d0: 2c 20 61 6c 6c 20 6f 74 68 65 72 0a 70 72 6f 63  , all other.proc
23e0: 65 73 73 65 73 20 61 72 65 20 70 72 65 76 65 6e  esses are preven
23f0: 74 65 64 20 66 72 6f 6d 20 77 72 69 74 69 6e 67  ted from writing
2400: 20 61 6e 79 20 6f 74 68 65 72 20 70 61 72 74 20   any other part 
2410: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
2420: 0a 53 69 6d 69 6c 61 72 6c 79 2c 20 69 66 20 61  .Similarly, if a
2430: 6e 79 20 6f 6e 65 20 70 72 6f 63 65 73 73 20 69  ny one process i
2440: 73 20 77 72 69 74 69 6e 67 20 74 6f 20 74 68 65  s writing to the
2450: 20 64 61 74 61 62 61 73 65 2c 0a 61 6c 6c 20 6f   database,.all o
2460: 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 61  ther processes a
2470: 72 65 20 70 72 65 76 65 6e 74 65 64 20 66 72 6f  re prevented fro
2480: 6d 20 72 65 61 64 69 6e 67 20 61 6e 79 20 6f 74  m reading any ot
2490: 68 65 72 20 70 61 72 74 20 6f 66 20 74 68 65 0a  her part of the.
24a0: 64 61 74 61 62 61 73 65 2e 0a 46 6f 72 20 6d 61  database..For ma
24b0: 6e 79 20 73 69 74 75 61 74 69 6f 6e 73 2c 20 74  ny situations, t
24c0: 68 69 73 20 69 73 20 6e 6f 74 20 61 20 70 72 6f  his is not a pro
24d0: 62 6c 65 6d 2e 20 20 45 61 63 68 20 61 70 70 6c  blem.  Each appl
24e0: 69 63 61 74 69 6f 6e 0a 64 6f 65 73 20 69 74 73  ication.does its
24f0: 20 64 61 74 61 62 61 73 65 20 77 6f 72 6b 20 71   database work q
2500: 75 69 63 6b 6c 79 20 61 6e 64 20 6d 6f 76 65 73  uickly and moves
2510: 20 6f 6e 2c 20 61 6e 64 20 6e 6f 20 6c 6f 63 6b   on, and no lock
2520: 20 6c 61 73 74 73 20 66 6f 72 20 6d 6f 72 65 0a   lasts for more.
2530: 74 68 61 6e 20 61 20 66 65 77 20 64 6f 7a 65 6e  than a few dozen
2540: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2e 20 20   milliseconds.  
2550: 42 75 74 20 74 68 65 72 65 20 61 72 65 20 73 6f  But there are so
2560: 6d 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  me applications 
2570: 74 68 61 74 20 72 65 71 75 69 72 65 0a 6d 6f 72  that require.mor
2580: 65 20 63 6f 6e 63 75 72 72 65 6e 63 79 2c 20 61  e concurrency, a
2590: 6e 64 20 74 68 6f 73 65 20 61 70 70 6c 69 63 61  nd those applica
25a0: 74 69 6f 6e 73 20 6d 61 79 20 6e 65 65 64 20 74  tions may need t
25b0: 6f 20 73 65 65 6b 20 61 20 64 69 66 66 65 72 65  o seek a differe
25c0: 6e 74 0a 73 6f 6c 75 74 69 6f 6e 2e 0a 3c 2f 70  nt.solution..</p
25d0: 3e 0a 3c 2f 6c 69 3e 0a 0a 3c 2f 75 6c 3e 0a 0a  >.</li>..</ul>..
25e0: 7d 0a 66 6f 6f 74 65 72 20 24 72 63 73 69 64 0a  }.footer $rcsid.