Documentation Source Text

Hex Artifact Content
Login

Artifact df6e45bfcf83158001a3d758031515a5b03be728:


0000: 3c 74 69 74 6c 65 3e 41 70 70 72 6f 70 72 69 61  <title>Appropria
0010: 74 65 20 55 73 65 73 20 46 6f 72 20 53 51 4c 69  te Uses For SQLi
0020: 74 65 3c 2f 74 69 74 6c 65 3e 0a 0a 3c 68 32 3e  te</title>..<h2>
0030: 41 70 70 72 6f 70 72 69 61 74 65 20 55 73 65 73  Appropriate Uses
0040: 20 46 6f 72 20 53 51 4c 69 74 65 3c 2f 68 32 3e   For SQLite</h2>
0050: 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 69 73 20  ..<p>.SQLite is 
0060: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 6d  different from m
0070: 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64 61  ost other SQL da
0080: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69  tabase engines i
0090: 6e 20 74 68 61 74 20 69 74 73 0a 70 72 69 6d 61  n that its.prima
00a0: 72 79 20 64 65 73 69 67 6e 20 67 6f 61 6c 20 69  ry design goal i
00b0: 73 20 74 6f 20 62 65 20 73 69 6d 70 6c 65 3a 0a  s to be simple:.
00c0: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 53  </p>..<ul>.<li>S
00d0: 69 6d 70 6c 65 20 74 6f 20 61 64 6d 69 6e 69 73  imple to adminis
00e0: 74 65 72 3c 2f 6c 69 3e 0a 3c 6c 69 3e 53 69 6d  ter</li>.<li>Sim
00f0: 70 6c 65 20 74 6f 20 6f 70 65 72 61 74 65 3c 2f  ple to operate</
0100: 6c 69 3e 0a 3c 6c 69 3e 53 69 6d 70 6c 65 20 74  li>.<li>Simple t
0110: 6f 20 65 6d 62 65 64 20 69 6e 20 61 20 6c 61 72  o embed in a lar
0120: 67 65 72 20 70 72 6f 67 72 61 6d 3c 2f 6c 69 3e  ger program</li>
0130: 0a 3c 6c 69 3e 53 69 6d 70 6c 65 20 74 6f 20 6d  .<li>Simple to m
0140: 61 69 6e 74 61 69 6e 20 61 6e 64 20 63 75 73 74  aintain and cust
0150: 6f 6d 69 7a 65 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e  omize</li>.</ul>
0160: 0a 0a 3c 70 3e 0a 4d 61 6e 79 20 70 65 6f 70 6c  ..<p>.Many peopl
0170: 65 20 6c 69 6b 65 20 53 51 4c 69 74 65 20 62 65  e like SQLite be
0180: 63 61 75 73 65 20 69 74 20 69 73 20 73 6d 61 6c  cause it is smal
0190: 6c 20 61 6e 64 20 66 61 73 74 2e 20 20 42 75 74  l and fast.  But
01a0: 20 74 68 6f 73 65 0a 71 75 61 6c 69 74 69 65 73   those.qualities
01b0: 20 61 72 65 20 6a 75 73 74 20 68 61 70 70 79 20   are just happy 
01c0: 61 63 63 69 64 65 6e 74 73 2e 0a 55 73 65 72 73  accidents..Users
01d0: 20 61 6c 73 6f 20 66 69 6e 64 20 74 68 61 74 20   also find that 
01e0: 53 51 4c 69 74 65 20 69 73 20 76 65 72 79 20 72  SQLite is very r
01f0: 65 6c 69 61 62 6c 65 2e 20 20 52 65 6c 69 61 62  eliable.  Reliab
0200: 69 6c 69 74 79 20 69 73 0a 61 20 63 6f 6e 73 65  ility is.a conse
0210: 71 75 65 6e 63 65 20 6f 66 20 73 69 6d 70 6c 69  quence of simpli
0220: 63 69 74 79 2e 20 20 57 69 74 68 20 6c 65 73 73  city.  With less
0230: 20 63 6f 6d 70 6c 69 63 61 74 69 6f 6e 2c 20 74   complication, t
0240: 68 65 72 65 20 69 73 0a 6c 65 73 73 20 74 6f 20  here is.less to 
0250: 67 6f 20 77 72 6f 6e 67 2e 20 20 53 6f 2c 20 79  go wrong.  So, y
0260: 65 73 2c 20 53 51 4c 69 74 65 20 69 73 20 73 6d  es, SQLite is sm
0270: 61 6c 6c 2c 20 66 61 73 74 2c 20 61 6e 64 20 72  all, fast, and r
0280: 65 6c 69 61 62 6c 65 2c 0a 62 75 74 20 66 69 72  eliable,.but fir
0290: 73 74 20 61 6e 64 20 66 6f 72 65 6d 6f 73 74 2c  st and foremost,
02a0: 20 53 51 4c 69 74 65 20 73 74 72 69 76 65 73 20   SQLite strives 
02b0: 74 6f 20 62 65 20 73 69 6d 70 6c 65 2e 0a 3c 2f  to be simple..</
02c0: 70 3e 0a 0a 3c 70 3e 0a 53 69 6d 70 6c 69 63 69  p>..<p>.Simplici
02d0: 74 79 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  ty in a database
02e0: 20 65 6e 67 69 6e 65 20 63 61 6e 20 62 65 20 65   engine can be e
02f0: 69 74 68 65 72 20 61 20 73 74 72 65 6e 67 74 68  ither a strength
0300: 20 6f 72 20 61 0a 77 65 61 6b 6e 65 73 73 2c 20   or a.weakness, 
0310: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61  depending on wha
0320: 74 20 79 6f 75 20 61 72 65 20 74 72 79 69 6e 67  t you are trying
0330: 20 74 6f 20 64 6f 2e 20 20 49 6e 20 6f 72 64 65   to do.  In orde
0340: 72 20 74 6f 0a 61 63 68 69 65 76 65 20 73 69 6d  r to.achieve sim
0350: 70 6c 69 63 69 74 79 2c 20 53 51 4c 69 74 65 20  plicity, SQLite 
0360: 68 61 73 20 68 61 64 20 74 6f 20 73 61 63 72 69  has had to sacri
0370: 66 69 63 65 20 6f 74 68 65 72 20 63 68 61 72 61  fice other chara
0380: 63 74 65 72 69 73 74 69 63 73 0a 74 68 61 74 20  cteristics.that 
0390: 73 6f 6d 65 20 70 65 6f 70 6c 65 20 66 69 6e 64  some people find
03a0: 20 75 73 65 66 75 6c 2c 20 73 75 63 68 20 61 73   useful, such as
03b0: 20 68 69 67 68 20 63 6f 6e 63 75 72 72 65 6e 63   high concurrenc
03c0: 79 2c 20 66 69 6e 65 2d 67 72 61 69 6e 65 64 0a  y, fine-grained.
03d0: 61 63 63 65 73 73 20 63 6f 6e 74 72 6f 6c 2c 20  access control, 
03e0: 61 20 72 69 63 68 20 73 65 74 20 6f 66 20 62 75  a rich set of bu
03f0: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73  ilt-in functions
0400: 2c 20 73 74 6f 72 65 64 20 70 72 6f 63 65 64 75  , stored procedu
0410: 72 65 73 2c 0a 65 73 6f 74 65 72 69 63 20 53 51  res,.esoteric SQ
0420: 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
0430: 72 65 73 2c 20 58 4d 4c 20 61 6e 64 2f 6f 72 20  res, XML and/or 
0440: 4a 61 76 61 20 65 78 74 65 6e 73 69 6f 6e 73 2c  Java extensions,
0450: 0a 74 65 72 61 2d 20 6f 72 20 70 65 74 61 2d 62  .tera- or peta-b
0460: 79 74 65 20 73 63 61 6c 61 62 69 6c 69 74 79 2c  yte scalability,
0470: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
0480: 49 66 20 79 6f 75 20 6e 65 65 64 20 73 6f 6d 65  If you need some
0490: 20 6f 66 20 74 68 65 73 65 0a 66 65 61 74 75 72   of these.featur
04a0: 65 73 20 61 6e 64 20 64 6f 20 6e 6f 74 20 6d 69  es and do not mi
04b0: 6e 64 20 74 68 65 20 61 64 64 65 64 20 63 6f 6d  nd the added com
04c0: 70 6c 65 78 69 74 79 20 74 68 61 74 20 74 68 65  plexity that the
04d0: 79 0a 62 72 69 6e 67 2c 20 74 68 65 6e 20 53 51  y.bring, then SQ
04e0: 4c 69 74 65 20 69 73 20 70 72 6f 62 61 62 6c 79  Lite is probably
04f0: 20 6e 6f 74 20 74 68 65 20 64 61 74 61 62 61 73   not the databas
0500: 65 20 66 6f 72 20 79 6f 75 2e 0a 53 51 4c 69 74  e for you..SQLit
0510: 65 20 69 73 20 6e 6f 74 20 69 6e 74 65 6e 64 65  e is not intende
0520: 64 20 74 6f 20 62 65 20 61 6e 20 65 6e 74 65 72  d to be an enter
0530: 70 72 69 73 65 20 64 61 74 61 62 61 73 65 20 65  prise database e
0540: 6e 67 69 6e 65 2e 20 20 49 74 0a 6e 6f 74 20 64  ngine.  It.not d
0550: 65 73 69 67 6e 65 64 20 74 6f 20 63 6f 6d 70 65  esigned to compe
0560: 74 65 20 77 69 74 68 20 4f 72 61 63 6c 65 20 6f  te with Oracle o
0570: 72 20 50 6f 73 74 67 72 65 53 51 4c 2e 0a 3c 2f  r PostgreSQL..</
0580: 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 62 61 73 69  p>..<p>.The basi
0590: 63 20 72 75 6c 65 20 6f 66 20 74 68 75 6d 62 20  c rule of thumb 
05a0: 66 6f 72 20 77 68 65 6e 20 69 74 20 69 73 20 61  for when it is a
05b0: 70 70 72 6f 70 72 69 61 74 65 20 74 6f 20 75 73  ppropriate to us
05c0: 65 20 53 51 4c 69 74 65 20 69 73 0a 74 68 69 73  e SQLite is.this
05d0: 3a 20 20 55 73 65 20 53 51 4c 69 74 65 20 69 6e  :  Use SQLite in
05e0: 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68 65 72   situations wher
05f0: 65 20 73 69 6d 70 6c 69 63 69 74 79 20 6f 66 20  e simplicity of 
0600: 61 64 6d 69 6e 69 73 74 72 61 74 69 6f 6e 2c 0a  administration,.
0610: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
0620: 61 6e 64 20 6d 61 69 6e 74 65 6e 61 6e 63 65 20  and maintenance 
0630: 61 72 65 20 6d 6f 72 65 20 69 6d 70 6f 72 74 61  are more importa
0640: 6e 74 20 74 68 61 6e 20 74 68 65 20 63 6f 75 6e  nt than the coun
0650: 74 6c 65 73 73 0a 63 6f 6d 70 6c 65 78 20 66 65  tless.complex fe
0660: 61 74 75 72 65 73 20 74 68 61 74 20 65 6e 74 65  atures that ente
0670: 72 70 72 69 73 65 20 64 61 74 61 62 61 73 65 20  rprise database 
0680: 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 2e  engines provide.
0690: 0a 41 73 20 69 74 20 74 75 72 6e 73 20 6f 75 74  .As it turns out
06a0: 2c 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68 65  , situations whe
06b0: 72 65 20 73 69 6d 70 6c 69 63 69 74 79 20 69 73  re simplicity is
06c0: 20 74 68 65 20 62 65 74 74 65 72 20 63 68 6f 69   the better choi
06d0: 63 65 0a 61 72 65 20 6d 6f 72 65 20 63 6f 6d 6d  ce.are more comm
06e0: 6f 6e 20 74 68 61 6e 20 6d 61 6e 79 20 70 65 6f  on than many peo
06f0: 70 6c 65 20 72 65 61 6c 69 7a 65 2e 0a 3c 2f 70  ple realize..</p
0700: 3e 0a 0a 3c 68 32 3e 53 69 74 75 61 74 69 6f 6e  >..<h2>Situation
0710: 73 20 57 68 65 72 65 20 53 51 4c 69 74 65 20 57  s Where SQLite W
0720: 6f 72 6b 73 20 57 65 6c 6c 3c 2f 68 32 3e 0a 0a  orks Well</h2>..
0730: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 57  <ul>.<li><p><b>W
0740: 65 62 73 69 74 65 73 3c 2f 62 3e 3c 2f 70 3e 0a  ebsites</b></p>.
0750: 0a 3c 70 3e 53 51 4c 69 74 65 20 75 73 75 61 6c  .<p>SQLite usual
0760: 6c 79 20 77 69 6c 6c 20 77 6f 72 6b 20 67 72 65  ly will work gre
0770: 61 74 20 61 73 20 74 68 65 20 64 61 74 61 62 61  at as the databa
0780: 73 65 20 65 6e 67 69 6e 65 20 66 6f 72 20 6c 6f  se engine for lo
0790: 77 20 74 6f 0a 6d 65 64 69 75 6d 20 74 72 61 66  w to.medium traf
07a0: 66 69 63 20 77 65 62 73 69 74 65 73 20 28 77 68  fic websites (wh
07b0: 69 63 68 20 69 73 20 74 6f 20 73 61 79 2c 20 39  ich is to say, 9
07c0: 39 2e 39 25 20 6f 66 20 61 6c 6c 20 77 65 62 73  9.9% of all webs
07d0: 69 74 65 73 29 2e 0a 54 68 65 20 61 6d 6f 75 6e  ites)..The amoun
07e0: 74 20 6f 66 20 77 65 62 20 74 72 61 66 66 69 63  t of web traffic
07f0: 20 74 68 61 74 20 53 51 4c 69 74 65 20 63 61 6e   that SQLite can
0800: 20 68 61 6e 64 6c 65 20 64 65 70 65 6e 64 73 2c   handle depends,
0810: 20 6f 66 20 63 6f 75 72 73 65 2c 0a 6f 6e 20 68   of course,.on h
0820: 6f 77 20 68 65 61 76 69 6c 79 20 74 68 65 20 77  ow heavily the w
0830: 65 62 73 69 74 65 20 75 73 65 73 20 69 74 73 20  ebsite uses its 
0840: 64 61 74 61 62 61 73 65 2e 20 20 47 65 6e 65 72  database.  Gener
0850: 61 6c 6c 79 0a 73 70 65 61 6b 69 6e 67 2c 20 61  ally.speaking, a
0860: 6e 79 20 73 69 74 65 20 74 68 61 74 20 67 65 74  ny site that get
0870: 73 20 66 65 77 65 72 20 74 68 61 6e 20 61 20 31  s fewer than a 1
0880: 30 30 30 30 30 20 68 69 74 73 2f 64 61 79 20 73  00000 hits/day s
0890: 68 6f 75 6c 64 20 77 6f 72 6b 0a 66 69 6e 65 20  hould work.fine 
08a0: 77 69 74 68 20 53 51 4c 69 74 65 2e 0a 54 68 65  with SQLite..The
08b0: 20 31 30 30 30 30 30 20 68 69 74 73 2f 64 61 79   100000 hits/day
08c0: 20 66 69 67 75 72 65 20 69 73 20 61 20 63 6f 6e   figure is a con
08d0: 73 65 72 76 61 74 69 76 65 20 65 73 74 69 6d 61  servative estima
08e0: 74 65 2c 20 6e 6f 74 20 61 0a 68 61 72 64 20 75  te, not a.hard u
08f0: 70 70 65 72 20 62 6f 75 6e 64 2e 0a 53 51 4c 69  pper bound..SQLi
0900: 74 65 20 68 61 73 20 62 65 65 6e 20 64 65 6d 6f  te has been demo
0910: 6e 73 74 72 61 74 65 64 20 74 6f 20 77 6f 72 6b  nstrated to work
0920: 20 77 69 74 68 20 31 30 20 74 69 6d 65 73 20 74   with 10 times t
0930: 68 61 74 20 61 6d 6f 75 6e 74 0a 6f 66 20 74 72  hat amount.of tr
0940: 61 66 66 69 63 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e  affic.</p>.</li>
0950: 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 6d 62 65  ..<li><p><b>Embe
0960: 64 64 65 64 20 64 65 76 69 63 65 73 20 61 6e 64  dded devices and
0970: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 3c 2f 62   applications</b
0980: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 42 65 63 61 75 73  ></p>..<p>Becaus
0990: 65 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61  e an SQLite data
09a0: 62 61 73 65 20 72 65 71 75 69 72 65 73 20 6c 69  base requires li
09b0: 74 74 6c 65 20 6f 72 20 6e 6f 20 61 64 6d 69 6e  ttle or no admin
09c0: 69 73 74 72 61 74 69 6f 6e 2c 0a 53 51 4c 69 74  istration,.SQLit
09d0: 65 20 69 73 20 61 20 67 6f 6f 64 20 63 68 6f 69  e is a good choi
09e0: 63 65 20 66 6f 72 20 64 65 76 69 63 65 73 20 6f  ce for devices o
09f0: 72 20 73 65 72 76 69 63 65 73 20 74 68 61 74 20  r services that 
0a00: 6d 75 73 74 20 77 6f 72 6b 0a 75 6e 61 74 74 65  must work.unatte
0a10: 6e 64 65 64 20 61 6e 64 20 77 69 74 68 6f 75 74  nded and without
0a20: 20 68 75 6d 61 6e 20 73 75 70 70 6f 72 74 2e 20   human support. 
0a30: 20 53 51 4c 69 74 65 20 69 73 20 61 20 67 6f 6f   SQLite is a goo
0a40: 64 20 66 69 74 20 66 6f 72 0a 75 73 65 20 69 6e  d fit for.use in
0a50: 20 63 65 6c 6c 70 68 6f 6e 65 73 2c 20 50 44 41   cellphones, PDA
0a60: 73 2c 20 73 65 74 2d 74 6f 70 20 62 6f 78 65 73  s, set-top boxes
0a70: 2c 20 61 6e 64 2f 6f 72 20 61 70 70 6c 69 61 6e  , and/or applian
0a80: 63 65 73 2e 20 20 49 74 20 61 6c 73 6f 0a 77 6f  ces.  It also.wo
0a90: 72 6b 73 20 77 65 6c 6c 20 61 73 20 61 6e 20 65  rks well as an e
0aa0: 6d 62 65 64 64 65 64 20 64 61 74 61 62 61 73 65  mbedded database
0ab0: 20 69 6e 20 64 6f 77 6e 6c 6f 61 64 61 62 6c 65   in downloadable
0ac0: 20 63 6f 6e 73 75 6d 65 72 20 61 70 70 6c 69 63   consumer applic
0ad0: 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c  ations..</p>.</l
0ae0: 69 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22 61 70 70  i>..<a name="app
0af0: 66 69 6c 65 66 6f 72 6d 61 74 22 3e 3c 2f 61 3e  fileformat"></a>
0b00: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 41 70 70 6c 69  .<li><p><b>Appli
0b10: 63 61 74 69 6f 6e 20 46 69 6c 65 20 46 6f 72 6d  cation File Form
0b20: 61 74 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a  at</b></p>..<p>.
0b30: 53 51 4c 69 74 65 20 68 61 73 20 62 65 65 6e 20  SQLite has been 
0b40: 75 73 65 64 20 77 69 74 68 20 67 72 65 61 74 20  used with great 
0b50: 73 75 63 63 65 73 73 20 61 73 20 74 68 65 20 6f  success as the o
0b60: 6e 2d 64 69 73 6b 20 66 69 6c 65 20 66 6f 72 6d  n-disk file form
0b70: 61 74 0a 66 6f 72 20 64 65 73 6b 74 6f 70 20 61  at.for desktop a
0b80: 70 70 6c 69 63 61 74 69 6f 6e 73 20 73 75 63 68  pplications such
0b90: 20 61 73 20 66 69 6e 61 6e 63 69 61 6c 20 61 6e   as financial an
0ba0: 61 6c 79 73 69 73 20 74 6f 6f 6c 73 2c 20 43 41  alysis tools, CA
0bb0: 44 0a 70 61 63 6b 61 67 65 73 2c 20 72 65 63 6f  D.packages, reco
0bc0: 72 64 20 6b 65 65 70 69 6e 67 20 70 72 6f 67 72  rd keeping progr
0bd0: 61 6d 73 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ams, and so fort
0be0: 68 2e 20 20 54 68 65 20 74 72 61 64 69 74 69 6f  h.  The traditio
0bf0: 6e 61 6c 0a 46 69 6c 65 2f 4f 70 65 6e 20 6f 70  nal.File/Open op
0c00: 65 72 61 74 69 6f 6e 20 64 6f 65 73 20 61 6e 20  eration does an 
0c10: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61  sqlite3_open() a
0c20: 6e 64 20 65 78 65 63 75 74 65 73 20 61 0a 42 45  nd executes a.BE
0c30: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 20  GIN TRANSACTION 
0c40: 74 6f 20 67 65 74 20 65 78 63 6c 75 73 69 76 65  to get exclusive
0c50: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 63   access to the c
0c60: 6f 6e 74 65 6e 74 2e 20 20 46 69 6c 65 2f 53 61  ontent.  File/Sa
0c70: 76 65 0a 64 6f 65 73 20 61 20 43 4f 4d 4d 49 54  ve.does a COMMIT
0c80: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 6f   followed by ano
0c90: 74 68 65 72 20 42 45 47 49 4e 20 54 52 41 4e 53  ther BEGIN TRANS
0ca0: 41 43 54 49 4f 4e 2e 20 20 54 68 65 20 75 73 65  ACTION.  The use
0cb0: 0a 6f 66 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  .of transactions
0cc0: 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74   guarantees that
0cd0: 20 75 70 64 61 74 65 73 20 74 6f 20 74 68 65 20   updates to the 
0ce0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65  application file
0cf0: 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 64 75 72   are atomic,.dur
0d00: 61 62 6c 65 2c 20 69 73 6f 6c 61 74 65 64 2c 20  able, isolated, 
0d10: 61 6e 64 20 63 6f 6e 73 69 73 74 65 6e 74 2e 0a  and consistent..
0d20: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 65 6d 70 6f 72  </p>..<p>.Tempor
0d30: 61 72 79 20 74 72 69 67 67 65 72 73 20 63 61 6e  ary triggers can
0d40: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
0d50: 20 64 61 74 61 62 61 73 65 20 74 6f 20 72 65 63   database to rec
0d60: 6f 72 64 20 61 6c 6c 0a 63 68 61 6e 67 65 73 20  ord all.changes 
0d70: 69 6e 74 6f 20 61 20 28 74 65 6d 70 6f 72 61 72  into a (temporar
0d80: 79 29 20 75 6e 64 6f 2f 72 65 64 6f 20 6c 6f 67  y) undo/redo log
0d90: 20 74 61 62 6c 65 2e 20 20 54 68 65 73 65 20 63   table.  These c
0da0: 68 61 6e 67 65 73 20 63 61 6e 20 74 68 65 6e 0a  hanges can then.
0db0: 62 65 20 70 6c 61 79 65 64 20 62 61 63 6b 20 77  be played back w
0dc0: 68 65 6e 20 74 68 65 20 75 73 65 72 20 70 72 65  hen the user pre
0dd0: 73 73 65 73 20 74 68 65 20 55 6e 64 6f 20 61 6e  sses the Undo an
0de0: 64 20 52 65 64 6f 20 62 75 74 74 6f 6e 73 2e 20  d Redo buttons. 
0df0: 20 55 73 69 6e 67 0a 74 68 69 73 20 74 65 63 68   Using.this tech
0e00: 6e 69 71 75 65 2c 20 61 20 75 6e 6c 69 6d 69 74  nique, a unlimit
0e10: 65 64 20 64 65 70 74 68 20 75 6e 64 6f 2f 72 65  ed depth undo/re
0e20: 64 6f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  do implementatio
0e30: 6e 20 63 61 6e 20 62 65 20 77 72 69 74 74 65 6e  n can be written
0e40: 0a 69 6e 20 73 75 72 70 72 69 73 69 6e 67 20 6c  .in surprising l
0e50: 69 74 74 6c 65 20 63 6f 64 65 2e 0a 3c 2f 70 3e  ittle code..</p>
0e60: 0a 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  .</li>..<li><p><
0e70: 62 3e 52 65 70 6c 61 63 65 6d 65 6e 74 20 66 6f  b>Replacement fo
0e80: 72 20 3c 69 3e 61 64 20 68 6f 63 3c 2f 69 3e 20  r <i>ad hoc</i> 
0e90: 64 69 73 6b 20 66 69 6c 65 73 3c 2f 62 3e 3c 2f  disk files</b></
0ea0: 70 3e 0a 0a 3c 70 3e 4d 61 6e 79 20 70 72 6f 67  p>..<p>Many prog
0eb0: 72 61 6d 73 20 75 73 65 20 66 6f 70 65 6e 28 29  rams use fopen()
0ec0: 2c 20 66 72 65 61 64 28 29 2c 20 61 6e 64 20 66  , fread(), and f
0ed0: 77 72 69 74 65 28 29 20 74 6f 20 63 72 65 61 74  write() to creat
0ee0: 65 20 61 6e 64 0a 6d 61 6e 61 67 65 20 66 69 6c  e and.manage fil
0ef0: 65 73 20 6f 66 20 64 61 74 61 20 69 6e 20 68 6f  es of data in ho
0f00: 6d 65 2d 67 72 6f 77 6e 20 66 6f 72 6d 61 74 73  me-grown formats
0f10: 2e 20 20 53 51 4c 69 74 65 20 77 6f 72 6b 73 20  .  SQLite works 
0f20: 0a 70 61 72 74 69 63 75 6c 61 72 6c 79 20 77 65  .particularly we
0f30: 6c 6c 20 61 73 20 61 0a 72 65 70 6c 61 63 65 6d  ll as a.replacem
0f40: 65 6e 74 20 66 6f 72 20 74 68 65 73 65 20 3c 69  ent for these <i
0f50: 3e 61 64 20 68 6f 63 3c 2f 69 3e 20 64 61 74 61  >ad hoc</i> data
0f60: 20 66 69 6c 65 73 2e 3c 2f 70 3e 0a 3c 2f 6c 69   files.</p>.</li
0f70: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 6e 74  >..<li><p><b>Int
0f80: 65 72 6e 61 6c 20 6f 72 20 74 65 6d 70 6f 72 61  ernal or tempora
0f90: 72 79 20 64 61 74 61 62 61 73 65 73 3c 2f 62 3e  ry databases</b>
0fa0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 70 72  </p>..<p>.For pr
0fb0: 6f 67 72 61 6d 73 20 74 68 61 74 20 68 61 76 65  ograms that have
0fc0: 20 61 20 6c 6f 74 20 6f 66 20 64 61 74 61 20 74   a lot of data t
0fd0: 68 61 74 20 6d 75 73 74 20 62 65 20 73 69 66 74  hat must be sift
0fe0: 65 64 20 61 6e 64 20 73 6f 72 74 65 64 0a 69 6e  ed and sorted.in
0ff0: 20 64 69 76 65 72 73 65 20 77 61 79 73 2c 20 69   diverse ways, i
1000: 74 20 69 73 20 6f 66 74 65 6e 20 65 61 73 69 65  t is often easie
1010: 72 20 61 6e 64 20 71 75 69 63 6b 65 72 20 74 6f  r and quicker to
1020: 20 6c 6f 61 64 20 74 68 65 20 64 61 74 61 20 69   load the data i
1030: 6e 74 6f 0a 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  nto.an in-memory
1040: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
1050: 20 61 6e 64 20 75 73 65 20 71 75 65 72 69 65 73   and use queries
1060: 20 77 69 74 68 20 6a 6f 69 6e 73 20 61 6e 64 20   with joins and 
1070: 4f 52 44 45 52 20 42 59 0a 63 6c 61 75 73 65 73  ORDER BY.clauses
1080: 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 20   to extract the 
1090: 64 61 74 61 20 69 6e 20 74 68 65 20 66 6f 72 6d  data in the form
10a0: 20 61 6e 64 20 6f 72 64 65 72 20 6e 65 65 64 65   and order neede
10b0: 64 20 72 61 74 68 65 72 20 74 68 61 6e 0a 74 6f  d rather than.to
10c0: 20 74 72 79 20 74 6f 20 63 6f 64 65 20 74 68 65   try to code the
10d0: 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 73   same operations
10e0: 20 6d 61 6e 75 61 6c 6c 79 2e 0a 55 73 69 6e 67   manually..Using
10f0: 20 61 6e 20 53 51 4c 20 64 61 74 61 62 61 73 65   an SQL database
1100: 20 69 6e 74 65 72 6e 61 6c 6c 79 20 69 6e 20 74   internally in t
1110: 68 69 73 20 77 61 79 20 61 6c 73 6f 20 67 69 76  his way also giv
1120: 65 73 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 67  es the program.g
1130: 72 65 61 74 65 72 20 66 6c 65 78 69 62 69 6c 69  reater flexibili
1140: 74 79 20 73 69 6e 63 65 20 6e 65 77 20 63 6f 6c  ty since new col
1150: 75 6d 6e 73 20 61 6e 64 20 69 6e 64 69 63 65 73  umns and indices
1160: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 77 69   can be added wi
1170: 74 68 6f 75 74 0a 68 61 76 69 6e 67 20 74 6f 20  thout.having to 
1180: 72 65 63 6f 64 65 20 65 76 65 72 79 20 71 75 65  recode every que
1190: 72 79 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  ry..</p>.</li>..
11a0: 3c 6c 69 3e 3c 70 3e 3c 62 3e 43 6f 6d 6d 61 6e  <li><p><b>Comman
11b0: 64 2d 6c 69 6e 65 20 64 61 74 61 73 65 74 20 61  d-line dataset a
11c0: 6e 61 6c 79 73 69 73 20 74 6f 6f 6c 3c 2f 62 3e  nalysis tool</b>
11d0: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 78 70 65 72 69  </p>..<p>.Experi
11e0: 65 6e 63 65 64 20 53 51 4c 20 75 73 65 72 73 20  enced SQL users 
11f0: 63 61 6e 20 65 6d 70 6c 6f 79 0a 74 68 65 20 63  can employ.the c
1200: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 3c 62 3e 73  ommand-line <b>s
1210: 71 6c 69 74 65 3c 2f 62 3e 20 70 72 6f 67 72 61  qlite</b> progra
1220: 6d 20 74 6f 20 61 6e 61 6c 79 7a 65 20 6d 69 73  m to analyze mis
1230: 63 65 6c 6c 61 6e 65 6f 75 73 0a 64 61 74 61 73  cellaneous.datas
1240: 65 74 73 2e 20 52 61 77 20 64 61 74 61 20 63 61  ets. Raw data ca
1250: 6e 20 62 65 20 69 6d 70 6f 72 74 65 64 20 66 72  n be imported fr
1260: 6f 6d 20 43 53 56 20 66 69 6c 65 73 2c 20 74 68  om CSV files, th
1270: 65 6e 20 74 68 61 74 0a 64 61 74 61 20 63 61 6e  en that.data can
1280: 20 62 65 20 73 6c 69 63 65 64 20 61 6e 64 20 64   be sliced and d
1290: 69 63 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  iced to generate
12a0: 20 61 20 6d 79 72 69 61 64 20 6f 66 20 73 75 6d   a myriad of sum
12b0: 6d 61 72 79 0a 72 65 70 6f 72 74 73 2e 20 20 50  mary.reports.  P
12c0: 6f 73 73 69 62 6c 65 20 75 73 65 73 20 69 6e 63  ossible uses inc
12d0: 6c 75 64 65 20 77 65 62 73 69 74 65 20 6c 6f 67  lude website log
12e0: 20 61 6e 61 6c 79 73 69 73 2c 20 73 70 6f 72 74   analysis, sport
12f0: 73 0a 73 74 61 74 69 73 74 69 63 73 20 61 6e 61  s.statistics ana
1300: 6c 79 73 69 73 2c 20 63 6f 6d 70 69 6c 61 74 69  lysis, compilati
1310: 6f 6e 20 6f 66 20 70 72 6f 67 72 61 6d 6d 69 6e  on of programmin
1320: 67 20 6d 65 74 72 69 63 73 2c 20 61 6e 64 0a 61  g metrics, and.a
1330: 6e 61 6c 79 73 69 73 20 6f 66 20 65 78 70 65 72  nalysis of exper
1340: 69 6d 65 6e 74 61 6c 20 72 65 73 75 6c 74 73 2e  imental results.
1350: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 59 6f 75 20 63  .</p>..<p>.You c
1360: 61 6e 20 61 6c 73 6f 20 64 6f 20 74 68 65 20 73  an also do the s
1370: 61 6d 65 20 74 68 69 6e 67 20 77 69 74 68 20 61  ame thing with a
1380: 20 65 6e 74 65 72 70 72 69 73 65 20 63 6c 69 65   enterprise clie
1390: 6e 74 2f 73 65 72 76 65 72 0a 64 61 74 61 62 61  nt/server.databa
13a0: 73 65 2c 20 6f 66 20 63 6f 75 72 73 65 2e 20 20  se, of course.  
13b0: 54 68 65 20 61 64 76 61 6e 74 61 67 65 73 20 74  The advantages t
13c0: 6f 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69  o using SQLite i
13d0: 6e 20 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e  n this situation
13e0: 0a 61 72 65 20 74 68 61 74 20 53 51 4c 69 74 65  .are that SQLite
13f0: 20 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20   is much easier 
1400: 74 6f 20 73 65 74 20 75 70 20 61 6e 64 20 74 68  to set up and th
1410: 65 20 72 65 73 75 6c 74 69 6e 67 20 64 61 74 61  e resulting data
1420: 62 61 73 65 20 0a 69 73 20 61 20 73 69 6e 67 6c  base .is a singl
1430: 65 20 66 69 6c 65 20 74 68 61 74 20 79 6f 75 20  e file that you 
1440: 63 61 6e 20 73 74 6f 72 65 20 6f 6e 20 61 20 66  can store on a f
1450: 6c 6f 70 70 79 20 64 69 73 6b 20 6f 72 20 66 6c  loppy disk or fl
1460: 61 73 68 2d 6d 65 6d 6f 72 79 20 73 74 69 63 6b  ash-memory stick
1470: 0a 6f 72 20 65 6d 61 69 6c 20 74 6f 20 61 20 63  .or email to a c
1480: 6f 6c 6c 65 61 67 75 65 2e 0a 3c 2f 70 3e 0a 3c  olleague..</p>.<
1490: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
14a0: 53 74 61 6e 64 2d 69 6e 20 66 6f 72 20 61 6e 20  Stand-in for an 
14b0: 65 6e 74 65 72 70 72 69 73 65 20 64 61 74 61 62  enterprise datab
14c0: 61 73 65 20 64 75 72 69 6e 67 20 64 65 6d 6f 73  ase during demos
14d0: 20 6f 72 20 74 65 73 74 69 6e 67 3c 2f 62 3e 3c   or testing</b><
14e0: 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 79 6f 75 20  /p>..<p>.If you 
14f0: 61 72 65 20 77 72 69 74 69 6e 67 20 61 20 63 6c  are writing a cl
1500: 69 65 6e 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  ient application
1510: 20 66 6f 72 20 61 6e 20 65 6e 74 65 72 70 72 69   for an enterpri
1520: 73 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  se database engi
1530: 6e 65 2c 0a 69 74 20 6d 61 6b 65 73 20 73 65 6e  ne,.it makes sen
1540: 73 65 20 74 6f 20 75 73 65 20 61 20 67 65 6e 65  se to use a gene
1550: 72 69 63 20 64 61 74 61 62 61 73 65 20 62 61 63  ric database bac
1560: 6b 65 6e 64 20 74 68 61 74 20 61 6c 6c 6f 77 73  kend that allows
1570: 20 79 6f 75 20 74 6f 20 63 6f 6e 6e 65 63 74 0a   you to connect.
1580: 74 6f 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  to many differen
1590: 74 20 6b 69 6e 64 73 20 6f 66 20 53 51 4c 20 64  t kinds of SQL d
15a0: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e  atabase engines.
15b0: 20 20 49 74 20 6d 61 6b 65 73 20 65 76 65 6e 20    It makes even 
15c0: 62 65 74 74 65 72 0a 73 65 6e 73 65 20 74 6f 0a  better.sense to.
15d0: 67 6f 20 61 68 65 61 64 20 61 6e 64 20 69 6e 63  go ahead and inc
15e0: 6c 75 64 65 20 53 51 4c 69 74 65 20 69 6e 20 74  lude SQLite in t
15f0: 68 65 20 6d 69 78 20 6f 66 20 73 75 70 70 6f 72  he mix of suppor
1600: 74 65 64 20 64 61 74 61 62 61 73 65 20 61 6e 64  ted database and
1610: 20 74 6f 20 73 74 61 74 69 63 61 6c 6c 79 0a 6c   to statically.l
1620: 69 6e 6b 20 74 68 65 20 53 51 4c 69 74 65 20 65  ink the SQLite e
1630: 6e 67 69 6e 65 20 69 6e 20 77 69 74 68 20 74 68  ngine in with th
1640: 65 20 63 6c 69 65 6e 74 2e 20 20 54 68 61 74 20  e client.  That 
1650: 77 61 79 20 74 68 65 20 63 6c 69 65 6e 74 20 70  way the client p
1660: 72 6f 67 72 61 6d 0a 63 61 6e 20 62 65 20 75 73  rogram.can be us
1670: 65 64 20 73 74 61 6e 64 61 6c 6f 6e 65 20 77 69  ed standalone wi
1680: 74 68 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74  th an SQLite dat
1690: 61 20 66 69 6c 65 20 66 6f 72 20 74 65 73 74 69  a file for testi
16a0: 6e 67 20 6f 72 20 66 6f 72 0a 64 65 6d 6f 6e 73  ng or for.demons
16b0: 74 72 61 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 3c  trations..</p>.<
16c0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  /li>..<li><p><b>
16d0: 44 61 74 61 62 61 73 65 20 50 65 64 61 67 6f 67  Database Pedagog
16e0: 79 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 42  y</b></p>..<p>.B
16f0: 65 63 61 75 73 65 20 69 74 20 69 73 20 73 69 6d  ecause it is sim
1700: 70 6c 65 20 74 6f 20 73 65 74 75 70 20 61 6e 64  ple to setup and
1710: 20 75 73 65 20 28 69 6e 73 74 61 6c 6c 61 74 69   use (installati
1720: 6f 6e 20 69 73 20 74 72 69 76 69 61 6c 3a 20 6a  on is trivial: j
1730: 75 73 74 0a 63 6f 70 79 20 74 68 65 20 3c 62 3e  ust.copy the <b>
1740: 73 71 6c 69 74 65 3c 2f 62 3e 20 6f 72 20 3c 62  sqlite</b> or <b
1750: 3e 73 71 6c 69 74 65 2e 65 78 65 3c 2f 62 3e 20  >sqlite.exe</b> 
1760: 65 78 65 63 75 74 61 62 6c 65 20 74 6f 20 74 68  executable to th
1770: 65 20 74 61 72 67 65 74 20 6d 61 63 68 69 6e 65  e target machine
1780: 0a 61 6e 64 20 72 75 6e 20 69 74 29 20 53 51 4c  .and run it) SQL
1790: 69 74 65 20 6d 61 6b 65 73 20 61 20 67 6f 6f 64  ite makes a good
17a0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
17b0: 20 66 6f 72 20 75 73 65 20 69 6e 20 74 65 61 63   for use in teac
17c0: 68 69 6e 67 20 53 51 4c 2e 0a 53 74 75 64 65 6e  hing SQL..Studen
17d0: 74 73 20 63 61 6e 20 65 61 73 69 6c 79 20 63 72  ts can easily cr
17e0: 65 61 74 65 20 61 73 20 6d 61 6e 79 20 64 61 74  eate as many dat
17f0: 61 62 61 73 65 73 20 61 73 20 74 68 65 79 20 6c  abases as they l
1800: 69 6b 65 20 61 6e 64 20 63 61 6e 0a 65 6d 61 69  ike and can.emai
1810: 6c 20 64 61 74 61 62 61 73 65 73 20 74 6f 20 74  l databases to t
1820: 68 65 20 69 6e 73 74 72 75 63 74 6f 72 20 66 6f  he instructor fo
1830: 72 20 63 6f 6d 6d 65 6e 74 73 20 6f 72 20 67 72  r comments or gr
1840: 61 64 69 6e 67 2e 20 20 46 6f 72 20 6d 6f 72 65  ading.  For more
1850: 0a 61 64 76 61 6e 63 65 64 20 73 74 75 64 65 6e  .advanced studen
1860: 74 73 20 77 68 6f 20 61 72 65 20 69 6e 74 65 72  ts who are inter
1870: 65 73 74 65 64 20 69 6e 20 73 74 75 64 79 69 6e  ested in studyin
1880: 67 20 68 6f 77 20 61 6e 20 52 44 42 4d 53 20 69  g how an RDBMS i
1890: 73 0a 69 6d 70 6c 65 6d 65 6e 74 65 64 2c 20 74  s.implemented, t
18a0: 68 65 20 6d 6f 64 75 6c 61 72 20 61 6e 64 20 77  he modular and w
18b0: 65 6c 6c 2d 63 6f 6d 6d 65 6e 74 65 64 20 61 6e  ell-commented an
18c0: 64 20 64 6f 63 75 6d 65 6e 74 65 64 20 53 51 4c  d documented SQL
18d0: 69 74 65 20 63 6f 64 65 0a 63 61 6e 20 73 65 72  ite code.can ser
18e0: 76 65 20 61 73 20 61 20 67 6f 6f 64 20 62 61 73  ve as a good bas
18f0: 69 73 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74  is.  This is not
1900: 20 74 6f 20 73 61 79 20 74 68 61 74 20 53 51 4c   to say that SQL
1910: 69 74 65 20 69 73 20 61 6e 20 61 63 63 75 72 61  ite is an accura
1920: 74 65 0a 6d 6f 64 65 6c 20 6f 66 20 68 6f 77 20  te.model of how 
1930: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20 65  other database e
1940: 6e 67 69 6e 65 73 20 61 72 65 20 69 6d 70 6c 65  ngines are imple
1950: 6d 65 6e 74 65 64 2c 20 62 75 74 20 72 61 74 68  mented, but rath
1960: 65 72 20 61 20 73 74 75 64 65 6e 74 20 77 68 6f  er a student who
1970: 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 68 6f 77  .understands how
1980: 20 53 51 4c 69 74 65 20 77 6f 72 6b 73 20 63 61   SQLite works ca
1990: 6e 20 6d 6f 72 65 20 71 75 69 63 6b 6c 79 20 63  n more quickly c
19a0: 6f 6d 70 72 65 68 65 6e 64 20 74 68 65 20 6f 70  omprehend the op
19b0: 65 72 61 74 69 6f 6e 61 6c 0a 70 72 69 6e 63 69  erational.princi
19c0: 70 6c 65 73 20 6f 66 20 6f 74 68 65 72 20 73 79  ples of other sy
19d0: 73 74 65 6d 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69  stems..</p>.</li
19e0: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 45 78 70  >..<li><p><b>Exp
19f0: 65 72 69 6d 65 6e 74 61 6c 20 53 51 4c 20 6c 61  erimental SQL la
1a00: 6e 67 75 61 67 65 20 65 78 74 65 6e 73 69 6f 6e  nguage extension
1a10: 73 3c 2f 62 3e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  s</b></p>..<p>Th
1a20: 65 20 73 69 6d 70 6c 65 2c 20 6d 6f 64 75 6c 61  e simple, modula
1a30: 72 20 64 65 73 69 67 6e 20 6f 66 20 53 51 4c 69  r design of SQLi
1a40: 74 65 20 6d 61 6b 65 73 20 69 74 20 61 20 67 6f  te makes it a go
1a50: 6f 64 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 0a  od platform for.
1a60: 70 72 6f 74 6f 74 79 70 69 6e 67 20 6e 65 77 2c  prototyping new,
1a70: 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 64 61   experimental da
1a80: 74 61 62 61 73 65 20 6c 61 6e 67 75 61 67 65 20  tabase language 
1a90: 66 65 61 74 75 72 65 73 20 6f 72 20 69 64 65 61  features or idea
1aa0: 73 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 0a  s..</p>.</li>...
1ab0: 3c 2f 75 6c 3e 0a 0a 3c 68 32 3e 53 69 74 75 61  </ul>..<h2>Situa
1ac0: 74 69 6f 6e 73 20 57 68 65 72 65 20 41 6e 6f 74  tions Where Anot
1ad0: 68 65 72 20 52 44 42 4d 53 20 4d 61 79 20 57 6f  her RDBMS May Wo
1ae0: 72 6b 20 42 65 74 74 65 72 3c 2f 68 32 3e 0a 0a  rk Better</h2>..
1af0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 43  <ul>.<li><p><b>C
1b00: 6c 69 65 6e 74 2f 53 65 72 76 65 72 20 41 70 70  lient/Server App
1b10: 6c 69 63 61 74 69 6f 6e 73 3c 2f 62 3e 3c 70 3e  lications</b><p>
1b20: 0a 0a 3c 70 3e 49 66 20 79 6f 75 20 68 61 76 65  ..<p>If you have
1b30: 20 6d 61 6e 79 20 63 6c 69 65 6e 74 20 70 72 6f   many client pro
1b40: 67 72 61 6d 73 20 61 63 63 65 73 73 69 6e 67 20  grams accessing 
1b50: 61 20 63 6f 6d 6d 6f 6e 20 64 61 74 61 62 61 73  a common databas
1b60: 65 0a 6f 76 65 72 20 61 20 6e 65 74 77 6f 72 6b  e.over a network
1b70: 2c 20 79 6f 75 20 73 68 6f 75 6c 64 20 63 6f 6e  , you should con
1b80: 73 69 64 65 72 20 75 73 69 6e 67 20 61 20 63 6c  sider using a cl
1b90: 69 65 6e 74 2f 73 65 72 76 65 72 20 64 61 74 61  ient/server data
1ba0: 62 61 73 65 0a 65 6e 67 69 6e 65 20 69 6e 73 74  base.engine inst
1bb0: 65 61 64 20 6f 66 20 53 51 4c 69 74 65 2e 20 20  ead of SQLite.  
1bc0: 53 51 4c 69 74 65 20 77 69 6c 6c 20 77 6f 72 6b  SQLite will work
1bd0: 20 6f 76 65 72 20 61 20 6e 65 74 77 6f 72 6b 20   over a network 
1be0: 66 69 6c 65 73 79 73 74 65 6d 2c 0a 62 75 74 20  filesystem,.but 
1bf0: 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 6c  because of the l
1c00: 61 74 65 6e 63 79 20 61 73 73 6f 63 69 61 74 65  atency associate
1c10: 64 20 77 69 74 68 20 6d 6f 73 74 20 6e 65 74 77  d with most netw
1c20: 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 73 2c  ork filesystems,
1c30: 0a 70 65 72 66 6f 72 6d 61 6e 63 65 20 77 69 6c  .performance wil
1c40: 6c 20 6e 6f 74 20 62 65 20 67 72 65 61 74 2e 20  l not be great. 
1c50: 20 41 6c 73 6f 2c 20 74 68 65 20 66 69 6c 65 20   Also, the file 
1c60: 6c 6f 63 6b 69 6e 67 20 6c 6f 67 69 63 20 6f 66  locking logic of
1c70: 0a 6d 61 6e 79 20 6e 65 74 77 6f 72 6b 20 66 69  .many network fi
1c80: 6c 65 73 79 73 74 65 6d 73 20 69 6d 70 6c 65 6d  lesystems implem
1c90: 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 74 61 69 6e  entation contain
1ca0: 73 20 62 75 67 73 20 28 6f 6e 20 62 6f 74 68 20  s bugs (on both 
1cb0: 55 6e 69 78 0a 61 6e 64 20 77 69 6e 64 6f 77 73  Unix.and windows
1cc0: 29 2e 20 20 49 66 20 66 69 6c 65 20 6c 6f 63 6b  ).  If file lock
1cd0: 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72  ing does not wor
1ce0: 6b 20 6c 69 6b 65 20 69 74 20 73 68 6f 75 6c 64  k like it should
1cf0: 2c 0a 69 74 20 6d 69 67 68 74 20 62 65 20 70 6f  ,.it might be po
1d00: 73 73 69 62 6c 65 20 66 6f 72 20 74 77 6f 20 6f  ssible for two o
1d10: 72 20 6d 6f 72 65 20 63 6c 69 65 6e 74 20 70 72  r more client pr
1d20: 6f 67 72 61 6d 73 20 74 6f 20 6d 6f 64 69 66 79  ograms to modify
1d30: 20 74 68 65 0a 73 61 6d 65 20 70 61 72 74 20 6f   the.same part o
1d40: 66 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  f the same datab
1d50: 61 73 65 20 61 74 20 74 68 65 20 73 61 6d 65 20  ase at the same 
1d60: 74 69 6d 65 2c 20 72 65 73 75 6c 74 69 6e 67 20  time, resulting 
1d70: 69 6e 20 0a 64 61 74 61 62 61 73 65 20 63 6f 72  in .database cor
1d80: 72 75 70 74 69 6f 6e 2e 20 20 42 65 63 61 75 73  ruption.  Becaus
1d90: 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 20 72  e this problem r
1da0: 65 73 75 6c 74 73 20 66 72 6f 6d 20 62 75 67 73  esults from bugs
1db0: 20 69 6e 0a 74 68 65 20 75 6e 64 65 72 6c 79 69   in.the underlyi
1dc0: 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 20 69 6d  ng filesystem im
1dd0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
1de0: 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 53  ere is nothing S
1df0: 51 4c 69 74 65 0a 63 61 6e 20 64 6f 20 74 6f 20  QLite.can do to 
1e00: 70 72 65 76 65 6e 74 20 69 74 2e 3c 2f 70 3e 0a  prevent it.</p>.
1e10: 0a 3c 70 3e 41 20 67 6f 6f 64 20 72 75 6c 65 20  .<p>A good rule 
1e20: 6f 66 20 74 68 75 6d 62 20 69 73 20 74 68 61 74  of thumb is that
1e30: 20 79 6f 75 20 73 68 6f 75 6c 64 20 61 76 6f 69   you should avoi
1e40: 64 20 75 73 69 6e 67 20 53 51 4c 69 74 65 0a 69  d using SQLite.i
1e50: 6e 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68 65  n situations whe
1e60: 72 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  re the same data
1e70: 62 61 73 65 20 77 69 6c 6c 20 62 65 20 61 63 63  base will be acc
1e80: 65 73 73 65 64 20 73 69 6d 75 6c 74 61 6e 65 6f  essed simultaneo
1e90: 75 73 6c 79 0a 66 72 6f 6d 20 6d 61 6e 79 20 63  usly.from many c
1ea0: 6f 6d 70 75 74 65 72 73 20 6f 76 65 72 20 61 20  omputers over a 
1eb0: 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74  network filesyst
1ec0: 65 6d 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a 3c  em.</p>.</li>..<
1ed0: 6c 69 3e 3c 70 3e 3c 62 3e 48 69 67 68 2d 76 6f  li><p><b>High-vo
1ee0: 6c 75 6d 65 20 57 65 62 73 69 74 65 73 3c 2f 62  lume Websites</b
1ef0: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  ></p>..<p>SQLite
1f00: 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77   will normally w
1f10: 6f 72 6b 20 66 69 6e 65 20 61 73 20 74 68 65 20  ork fine as the 
1f20: 64 61 74 61 62 61 73 65 20 62 61 63 6b 65 6e 64  database backend
1f30: 20 74 6f 20 61 20 77 65 62 73 69 74 65 2e 0a 42   to a website..B
1f40: 75 74 20 69 66 20 79 6f 75 20 77 65 62 73 69 74  ut if you websit
1f50: 65 20 69 73 20 73 6f 20 62 75 73 79 20 74 68 61  e is so busy tha
1f60: 74 20 79 6f 75 72 20 61 72 65 20 74 68 69 6e 6b  t your are think
1f70: 69 6e 67 20 6f 66 20 73 70 6c 69 74 74 69 6e 67  ing of splitting
1f80: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 63 6f   the.database co
1f90: 6d 70 6f 6e 65 6e 74 20 6f 66 66 20 6f 6e 74 6f  mponent off onto
1fa0: 20 61 20 73 65 70 61 72 61 74 65 20 6d 61 63 68   a separate mach
1fb0: 69 6e 65 2c 20 74 68 65 6e 20 79 6f 75 20 73 68  ine, then you sh
1fc0: 6f 75 6c 64 20 0a 64 65 66 69 6e 69 74 65 6c 79  ould .definitely
1fd0: 20 63 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20   consider using 
1fe0: 61 6e 20 65 6e 74 65 72 70 72 69 73 65 2d 63 6c  an enterprise-cl
1ff0: 61 73 73 20 63 6c 69 65 6e 74 2f 73 65 72 76 65  ass client/serve
2000: 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e  r database.engin
2010: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  e instead of SQL
2020: 69 74 65 2e 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a 0a  ite.</p>.</li>..
2030: 3c 6c 69 3e 3c 70 3e 3c 62 3e 56 65 72 79 20 6c  <li><p><b>Very l
2040: 61 72 67 65 20 64 61 74 61 73 65 74 73 3c 2f 62  arge datasets</b
2050: 3e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 79  ></p>..<p>When y
2060: 6f 75 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ou start a trans
2070: 61 63 74 69 6f 6e 20 69 6e 20 53 51 4c 69 74 65  action in SQLite
2080: 20 28 77 68 69 63 68 20 68 61 70 70 65 6e 73 20   (which happens 
2090: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 65  automatically.be
20a0: 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20 6f  fore any write o
20b0: 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20 69 73  peration that is
20c0: 20 6e 6f 74 20 77 69 74 68 69 6e 20 61 6e 20 65   not within an e
20d0: 78 70 6c 69 63 69 74 20 42 45 47 49 4e 2e 2e 2e  xplicit BEGIN...
20e0: 43 4f 4d 4d 49 54 29 0a 74 68 65 20 65 6e 67 69  COMMIT).the engi
20f0: 6e 65 20 68 61 73 20 74 6f 20 61 6c 6c 6f 63 61  ne has to alloca
2100: 74 65 20 61 20 62 69 74 6d 61 70 20 6f 66 20 64  te a bitmap of d
2110: 69 72 74 79 20 70 61 67 65 73 20 69 6e 20 74 68  irty pages in th
2120: 65 20 64 69 73 6b 20 66 69 6c 65 20 74 6f 0a 68  e disk file to.h
2130: 65 6c 70 20 69 74 20 6d 61 6e 61 67 65 20 69 74  elp it manage it
2140: 73 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  s rollback journ
2150: 61 6c 2e 20 20 53 51 4c 69 74 65 20 6e 65 65 64  al.  SQLite need
2160: 73 20 32 35 36 20 62 79 74 65 73 20 6f 66 20 52  s 256 bytes of R
2170: 41 4d 20 66 6f 72 0a 65 76 65 72 79 20 31 4d 69  AM for.every 1Mi
2180: 42 20 6f 66 20 64 61 74 61 62 61 73 65 20 28 61  B of database (a
2190: 73 73 75 6d 69 6e 67 20 61 20 31 30 32 34 2d 62  ssuming a 1024-b
21a0: 79 74 65 20 70 61 67 65 20 73 69 7a 65 3a 20 6c  yte page size: l
21b0: 65 73 73 20 6d 65 6d 6f 72 79 20 69 73 0a 75 73  ess memory is.us
21c0: 65 64 20 77 69 74 68 20 6c 61 72 67 65 72 20 70  ed with larger p
21d0: 61 67 65 20 73 69 7a 65 73 2c 20 6f 66 20 63 6f  age sizes, of co
21e0: 75 72 73 65 29 2e 20 20 0a 46 6f 72 20 73 6d 61  urse).  .For sma
21f0: 6c 6c 65 72 20 64 61 74 61 62 61 73 65 73 2c 20  ller databases, 
2200: 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  the amount of me
2210: 6d 6f 72 79 0a 72 65 71 75 69 72 65 64 20 69 73  mory.required is
2220: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2c 20   not a problem, 
2230: 62 75 74 20 77 68 65 6e 20 64 61 74 61 62 61 73  but when databas
2240: 65 20 62 65 67 69 6e 20 74 6f 20 67 72 6f 77 20  e begin to grow 
2250: 69 6e 74 6f 20 74 68 65 0a 6d 75 6c 74 69 2d 67  into the.multi-g
2260: 69 67 61 62 79 74 65 20 72 61 6e 67 65 2c 20 74  igabyte range, t
2270: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 62  he size of the b
2280: 69 74 6d 61 70 20 63 61 6e 20 67 65 74 20 71 75  itmap can get qu
2290: 69 74 65 20 6c 61 72 67 65 2e 20 20 49 66 0a 79  ite large.  If.y
22a0: 6f 75 20 6e 65 65 64 20 74 6f 20 73 74 6f 72 65  ou need to store
22b0: 20 61 6e 64 20 6d 6f 64 69 66 79 20 6d 6f 72 65   and modify more
22c0: 20 74 68 61 6e 20 61 20 66 65 77 20 64 6f 7a 65   than a few doze
22d0: 6e 20 47 42 20 6f 66 20 64 61 74 61 2c 20 79 6f  n GB of data, yo
22e0: 75 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65  u should.conside
22f0: 72 20 75 73 69 6e 67 20 61 20 64 69 66 66 65 72  r using a differ
2300: 65 6e 74 20 64 61 74 61 62 61 73 65 20 65 6e 67  ent database eng
2310: 69 6e 65 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e 0a  ine..</p>.</li>.
2320: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 48 69 67 68 20  .<li><p><b>High 
2330: 43 6f 6e 63 75 72 72 65 6e 63 79 3c 2f 62 3e 3c  Concurrency</b><
2340: 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  /p>..<p>.SQLite 
2350: 75 73 65 73 20 72 65 61 64 65 72 2f 77 72 69 74  uses reader/writ
2360: 65 72 20 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 20  er locks on the 
2370: 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2380: 66 69 6c 65 2e 20 20 54 68 61 74 20 6d 65 61 6e  file.  That mean
2390: 73 0a 69 66 20 61 6e 79 20 70 72 6f 63 65 73 73  s.if any process
23a0: 20 69 73 20 72 65 61 64 69 6e 67 20 66 72 6f 6d   is reading from
23b0: 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65   any part of the
23c0: 20 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20 6f   database, all o
23d0: 74 68 65 72 0a 70 72 6f 63 65 73 73 65 73 20 61  ther.processes a
23e0: 72 65 20 70 72 65 76 65 6e 74 65 64 20 66 72 6f  re prevented fro
23f0: 6d 20 77 72 69 74 69 6e 67 20 61 6e 79 20 6f 74  m writing any ot
2400: 68 65 72 20 70 61 72 74 20 6f 66 20 74 68 65 20  her part of the 
2410: 64 61 74 61 62 61 73 65 2e 0a 53 69 6d 69 6c 61  database..Simila
2420: 72 6c 79 2c 20 69 66 20 61 6e 79 20 6f 6e 65 20  rly, if any one 
2430: 70 72 6f 63 65 73 73 20 69 73 20 77 72 69 74 69  process is writi
2440: 6e 67 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ng to the databa
2450: 73 65 2c 0a 61 6c 6c 20 6f 74 68 65 72 20 70 72  se,.all other pr
2460: 6f 63 65 73 73 65 73 20 61 72 65 20 70 72 65 76  ocesses are prev
2470: 65 6e 74 65 64 20 66 72 6f 6d 20 72 65 61 64 69  ented from readi
2480: 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 70 61 72  ng any other par
2490: 74 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73  t of the.databas
24a0: 65 2e 0a 46 6f 72 20 6d 61 6e 79 20 73 69 74 75  e..For many situ
24b0: 61 74 69 6f 6e 73 2c 20 74 68 69 73 20 69 73 20  ations, this is 
24c0: 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 20 20  not a problem.  
24d0: 45 61 63 68 20 61 70 70 6c 69 63 61 74 69 6f 6e  Each application
24e0: 0a 64 6f 65 73 20 69 74 73 20 64 61 74 61 62 61  .does its databa
24f0: 73 65 20 77 6f 72 6b 20 71 75 69 63 6b 6c 79 20  se work quickly 
2500: 61 6e 64 20 6d 6f 76 65 73 20 6f 6e 2c 20 61 6e  and moves on, an
2510: 64 20 6e 6f 20 6c 6f 63 6b 20 6c 61 73 74 73 20  d no lock lasts 
2520: 66 6f 72 20 6d 6f 72 65 0a 74 68 61 6e 20 61 20  for more.than a 
2530: 66 65 77 20 64 6f 7a 65 6e 20 6d 69 6c 6c 69 73  few dozen millis
2540: 65 63 6f 6e 64 73 2e 20 20 42 75 74 20 74 68 65  econds.  But the
2550: 72 65 20 61 72 65 20 73 6f 6d 65 20 61 70 70 6c  re are some appl
2560: 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 72 65  ications that re
2570: 71 75 69 72 65 0a 6d 6f 72 65 20 63 6f 6e 63 75  quire.more concu
2580: 72 72 65 6e 63 79 2c 20 61 6e 64 20 74 68 6f 73  rrency, and thos
2590: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d  e applications m
25a0: 61 79 20 6e 65 65 64 20 74 6f 20 73 65 65 6b 20  ay need to seek 
25b0: 61 20 64 69 66 66 65 72 65 6e 74 0a 73 6f 6c 75  a different.solu
25c0: 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 3c 2f 6c 69 3e  tion..</p>.</li>
25d0: 0a 0a 3c 2f 75 6c 3e 0a                          ..</ul>.