Documentation Source Text

Hex Artifact Content
Login

Artifact 0a584aaea1f1568bb764953d991711e5744d3398:


0000: 3c 74 69 74 6c 65 3e 53 51 4c 69 74 65 20 41 75  <title>SQLite Au
0010: 74 6f 69 6e 63 72 65 6d 65 6e 74 3c 2f 74 69 74  toincrement</tit
0020: 6c 65 3e 0a 3c 68 31 3e 53 51 4c 69 74 65 20 41  le>.<h1>SQLite A
0030: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 3c 2f 68 31  utoincrement</h1
0040: 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
0050: 64 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ds AUTOINCREMENT
0060: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20  </tcl>..<p>.^In 
0070: 53 51 4c 69 74 65 2c 20 65 76 65 72 79 20 72 6f  SQLite, every ro
0080: 77 20 6f 66 20 65 76 65 72 79 20 74 61 62 6c 65  w of every table
0090: 20 68 61 73 20 61 6e 20 36 34 2d 62 69 74 20 73   has an 64-bit s
00a0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 5b 52  igned integer [R
00b0: 4f 57 49 44 5d 2e 0a 5e 54 68 65 20 52 4f 57 49  OWID]..^The ROWI
00c0: 44 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  D for each row i
00d0: 73 20 75 6e 69 71 75 65 20 61 6d 6f 6e 67 20 61  s unique among a
00e0: 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 73  ll rows in the s
00f0: 61 6d 65 20 74 61 62 6c 65 2e 0a 3c 2f 70 3e 0a  ame table..</p>.
0100: 0a 3c 70 3e 0a 5e 28 59 6f 75 20 63 61 6e 20 61  .<p>.^(You can a
0110: 63 63 65 73 73 20 74 68 65 20 52 4f 57 49 44 20  ccess the ROWID 
0120: 6f 66 20 61 6e 20 53 51 4c 69 74 65 20 74 61 62  of an SQLite tab
0130: 6c 65 20 75 73 69 6e 67 20 6f 6e 65 20 74 68 65  le using one the
0140: 20 73 70 65 63 69 61 6c 20 63 6f 6c 75 6d 6e 0a   special column.
0150: 6e 61 6d 65 73 20 52 4f 57 49 44 2c 20 5f 52 4f  names ROWID, _RO
0160: 57 49 44 5f 2c 20 6f 72 20 4f 49 44 2e 0a 45 78  WID_, or OID..Ex
0170: 63 65 70 74 20 69 66 20 79 6f 75 20 64 65 63 6c  cept if you decl
0180: 61 72 65 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  are an ordinary 
0190: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  table column to 
01a0: 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65  use one of those
01b0: 20 73 70 65 63 69 61 6c 0a 6e 61 6d 65 73 2c 20   special.names, 
01c0: 74 68 65 6e 20 74 68 65 20 75 73 65 20 6f 66 20  then the use of 
01d0: 74 68 61 74 20 6e 61 6d 65 20 77 69 6c 6c 20 72  that name will r
01e0: 65 66 65 72 20 74 6f 20 74 68 65 20 64 65 63 6c  efer to the decl
01f0: 61 72 65 64 20 63 6f 6c 75 6d 6e 20 6e 6f 74 0a  ared column not.
0200: 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
0210: 52 4f 57 49 44 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c  ROWID.)^.</p>..<
0220: 70 3e 0a 5e 49 66 20 61 20 74 61 62 6c 65 20 63  p>.^If a table c
0230: 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6c 75 6d 6e  ontains a column
0240: 20 6f 66 20 74 79 70 65 20 5b 49 4e 54 45 47 45   of type [INTEGE
0250: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2c 20  R PRIMARY KEY], 
0260: 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75 6d 6e  then that.column
0270: 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
0280: 73 20 66 6f 72 20 74 68 65 20 52 4f 57 49 44 2e  s for the ROWID.
0290: 20 20 5e 59 6f 75 20 63 61 6e 20 74 68 65 6e 20    ^You can then 
02a0: 61 63 63 65 73 73 20 74 68 65 20 52 4f 57 49 44  access the ROWID
02b0: 0a 75 73 69 6e 67 20 61 6e 79 20 6f 66 20 66 6f  .using any of fo
02c0: 75 72 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d  ur different nam
02d0: 65 73 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  es, the original
02e0: 20 74 68 72 65 65 20 6e 61 6d 65 73 20 64 65 73   three names des
02f0: 63 72 69 62 65 64 20 61 62 6f 76 65 0a 6f 72 20  cribed above.or 
0300: 74 68 65 20 6e 61 6d 65 20 67 69 76 65 6e 20 74  the name given t
0310: 6f 20 74 68 65 20 5b 49 4e 54 45 47 45 52 20 50  o the [INTEGER P
0320: 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75  RIMARY KEY] colu
0330: 6d 6e 2e 20 20 5e 41 6c 6c 20 74 68 65 73 65 20  mn.  ^All these 
0340: 6e 61 6d 65 73 20 61 72 65 0a 61 6c 69 61 73 65  names are.aliase
0350: 73 20 66 6f 72 20 6f 6e 65 20 61 6e 6f 74 68 65  s for one anothe
0360: 72 20 61 6e 64 20 77 6f 72 6b 20 65 71 75 61 6c  r and work equal
0370: 6c 79 20 77 65 6c 6c 20 69 6e 20 61 6e 79 20 63  ly well in any c
0380: 6f 6e 74 65 78 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70  ontext..</p>..<p
0390: 3e 0a 5e 57 68 65 6e 20 61 20 6e 65 77 20 72 6f  >.^When a new ro
03a0: 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
03b0: 74 6f 20 61 6e 20 53 51 4c 69 74 65 20 74 61 62  to an SQLite tab
03c0: 6c 65 2c 20 74 68 65 20 52 4f 57 49 44 20 63 61  le, the ROWID ca
03d0: 6e 20 65 69 74 68 65 72 0a 62 65 20 73 70 65 63  n either.be spec
03e0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
03f0: 20 74 68 65 20 49 4e 53 45 52 54 20 73 74 61 74   the INSERT stat
0400: 65 6d 65 6e 74 20 6f 72 20 69 74 20 63 61 6e 20  ement or it can 
0410: 62 65 20 61 73 73 69 67 6e 65 64 0a 61 75 74 6f  be assigned.auto
0420: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 74 68 65  matically by the
0430: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
0440: 2e 20 20 5e 28 54 6f 20 73 70 65 63 69 66 79 20  .  ^(To specify 
0450: 61 20 52 4f 57 49 44 20 6d 61 6e 75 61 6c 6c 79  a ROWID manually
0460: 2c 0a 6a 75 73 74 20 69 6e 63 6c 75 64 65 20 69  ,.just include i
0470: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  t in the list of
0480: 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
0490: 73 65 72 74 65 64 2e 20 20 46 6f 72 20 65 78 61  serted.  For exa
04a0: 6d 70 6c 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  mple:.</p>..<blo
04b0: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
04c0: 45 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 31  EATE TABLE test1
04d0: 28 61 20 49 4e 54 2c 20 62 20 54 45 58 54 29 3b  (a INT, b TEXT);
04e0: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73  .INSERT INTO tes
04f0: 74 31 28 72 6f 77 69 64 2c 20 61 2c 20 62 29 20  t1(rowid, a, b) 
0500: 56 41 4c 55 45 53 28 31 32 33 2c 20 35 2c 20 27  VALUES(123, 5, '
0510: 68 65 6c 6c 6f 27 29 3b 0a 3c 2f 70 72 65 3e 3c  hello');.</pre><
0520: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
0530: 3c 70 3e 0a 5e 49 66 20 6e 6f 20 52 4f 57 49 44  <p>.^If no ROWID
0540: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 6f 6e   is specified on
0550: 20 74 68 65 20 69 6e 73 65 72 74 2c 20 6f 72 20   the insert, or 
0560: 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  if the specified
0570: 20 52 4f 57 49 44 20 68 61 73 20 61 20 76 61 6c   ROWID has a val
0580: 75 65 0a 6f 66 20 4e 55 4c 4c 2c 20 74 68 65 6e  ue.of NULL, then
0590: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
05a0: 52 4f 57 49 44 20 69 73 20 63 72 65 61 74 65 64  ROWID is created
05b0: 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20  .automatically. 
05c0: 20 5e 54 68 65 20 75 73 75 61 6c 20 61 6c 67 6f   ^The usual algo
05d0: 72 69 74 68 6d 20 69 73 20 74 6f 20 67 69 76 65  rithm is to give
05e0: 20 74 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74   the newly creat
05f0: 65 64 20 72 6f 77 0a 61 20 52 4f 57 49 44 20 74  ed row.a ROWID t
0600: 68 61 74 20 69 73 20 6f 6e 65 20 6c 61 72 67 65  hat is one large
0610: 72 20 74 68 61 6e 20 74 68 65 20 6c 61 72 67 65  r than the large
0620: 73 74 20 52 4f 57 49 44 20 69 6e 20 74 68 65 20  st ROWID in the 
0630: 74 61 62 6c 65 20 70 72 69 6f 72 0a 74 6f 20 74  table prior.to t
0640: 68 65 20 69 6e 73 65 72 74 2e 20 20 5e 49 66 20  he insert.  ^If 
0650: 74 68 65 20 74 61 62 6c 65 20 69 73 20 69 6e 69  the table is ini
0660: 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 74 68  tially empty, th
0670: 65 6e 20 61 20 52 4f 57 49 44 20 6f 66 20 31 20  en a ROWID of 1 
0680: 69 73 0a 75 73 65 64 2e 20 20 5e 49 66 20 74 68  is.used.  ^If th
0690: 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
06a0: 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  is equal to the 
06b0: 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
06c0: 20 69 6e 74 65 67 65 72 0a 28 39 32 32 33 33 37   integer.(922337
06d0: 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
06e0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
06f0: 0a 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70  .engine starts p
0700: 69 63 6b 69 6e 67 20 63 61 6e 64 69 64 61 74 65  icking candidate
0710: 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
0720: 6d 20 75 6e 74 69 6c 20 69 74 20 66 69 6e 64 73  m until it finds
0730: 20 6f 6e 65 0a 74 68 61 74 20 69 73 20 6e 6f 74   one.that is not
0740: 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
0750: 2e 0a 5e 49 66 20 6e 6f 20 75 6e 75 73 65 64 20  ..^If no unused 
0760: 52 4f 57 49 44 20 63 61 6e 20 62 65 20 66 6f 75  ROWID can be fou
0770: 6e 64 20 61 66 74 65 72 20 61 20 72 65 61 73 6f  nd after a reaso
0780: 6e 61 62 6c 65 20 6e 75 6d 62 65 72 20 6f 66 20  nable number of 
0790: 61 74 74 65 6d 70 74 73 2c 0a 74 68 65 20 69 6e  attempts,.the in
07a0: 73 65 72 74 20 6f 70 65 72 61 74 69 6f 6e 20 66  sert operation f
07b0: 61 69 6c 73 20 77 69 74 68 20 61 6e 20 5b 53 51  ails with an [SQ
07c0: 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72 72 6f 72  LITE_FULL] error
07d0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65  ..</p>..<p>.^The
07e0: 20 6e 6f 72 6d 61 6c 20 52 4f 57 49 44 20 73 65   normal ROWID se
07f0: 6c 65 63 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  lection algorith
0800: 6d 20 64 65 73 63 72 69 62 65 64 20 61 62 6f 76  m described abov
0810: 65 0a 77 69 6c 6c 20 67 65 6e 65 72 61 74 65 20  e.will generate 
0820: 6d 6f 6e 6f 74 6f 6e 69 63 61 6c 6c 79 20 69 6e  monotonically in
0830: 63 72 65 61 73 69 6e 67 0a 75 6e 69 71 75 65 20  creasing.unique 
0840: 52 4f 57 49 44 73 20 61 73 20 6c 6f 6e 67 20 61  ROWIDs as long a
0850: 73 20 79 6f 75 20 6e 65 76 65 72 20 75 73 65 20  s you never use 
0860: 74 68 65 20 6d 61 78 69 6d 75 6d 20 52 4f 57 49  the maximum ROWI
0870: 44 20 76 61 6c 75 65 20 61 6e 64 20 79 6f 75 20  D value and you 
0880: 6e 65 76 65 72 0a 64 65 6c 65 74 65 20 74 68 65  never.delete the
0890: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61   entry in the ta
08a0: 62 6c 65 20 77 69 74 68 20 74 68 65 20 6c 61 72  ble with the lar
08b0: 67 65 73 74 20 52 4f 57 49 44 2e 20 0a 5e 49 66  gest ROWID. .^If
08c0: 20 79 6f 75 20 65 76 65 72 20 64 65 6c 65 74 65   you ever delete
08d0: 20 72 6f 77 73 20 6f 72 20 69 66 20 79 6f 75 20   rows or if you 
08e0: 65 76 65 72 20 63 72 65 61 74 65 20 61 20 72 6f  ever create a ro
08f0: 77 20 77 69 74 68 20 74 68 65 20 6d 61 78 69 6d  w with the maxim
0900: 75 6d 20 70 6f 73 73 69 62 6c 65 0a 52 4f 57 49  um possible.ROWI
0910: 44 2c 20 74 68 65 6e 20 52 4f 57 49 44 73 20 66  D, then ROWIDs f
0920: 72 6f 6d 20 70 72 65 76 69 6f 75 73 6c 79 20 64  rom previously d
0930: 65 6c 65 74 65 64 20 72 6f 77 73 20 6d 69 67 68  eleted rows migh
0940: 74 20 62 65 20 72 65 75 73 65 64 20 77 68 65 6e  t be reused when
0950: 20 63 72 65 61 74 69 6e 67 0a 6e 65 77 20 72 6f   creating.new ro
0960: 77 73 20 61 6e 64 20 6e 65 77 6c 79 20 63 72 65  ws and newly cre
0970: 61 74 65 64 20 52 4f 57 49 44 73 20 6d 69 67 68  ated ROWIDs migh
0980: 74 20 6e 6f 74 20 62 65 20 69 6e 20 73 74 72 69  t not be in stri
0990: 63 74 6c 79 20 61 63 63 65 6e 64 69 6e 67 20 6f  ctly accending o
09a0: 72 64 65 72 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 68 32  rder..</p>...<h2
09b0: 3e 54 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45  >The AUTOINCREME
09c0: 4e 54 20 4b 65 79 77 6f 72 64 3c 2f 68 32 3e 0a  NT Keyword</h2>.
09d0: 0a 3c 70 3e 0a 5e 49 66 20 61 20 63 6f 6c 75 6d  .<p>.^If a colum
09e0: 6e 20 68 61 73 20 74 68 65 20 74 79 70 65 20 49  n has the type I
09f0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
0a00: 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  EY AUTOINCREMENT
0a10: 20 74 68 65 6e 20 61 20 73 6c 69 67 68 74 6c 79   then a slightly
0a20: 0a 64 69 66 66 65 72 65 6e 74 20 52 4f 57 49 44  .different ROWID
0a30: 20 73 65 6c 65 63 74 69 6f 6e 20 61 6c 67 6f 72   selection algor
0a40: 69 74 68 6d 20 69 73 20 75 73 65 64 2e 20 20 0a  ithm is used.  .
0a50: 5e 54 68 65 20 52 4f 57 49 44 20 63 68 6f 73 65  ^The ROWID chose
0a60: 6e 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 6f  n for the new ro
0a70: 77 20 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e  w is at least on
0a80: 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  e larger than th
0a90: 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 0a  e largest ROWID.
0aa0: 74 68 61 74 20 68 61 73 20 65 76 65 72 20 62 65  that has ever be
0ab0: 66 6f 72 65 20 65 78 69 73 74 65 64 20 69 6e 20  fore existed in 
0ac0: 74 68 61 74 20 73 61 6d 65 20 74 61 62 6c 65 2e  that same table.
0ad0: 20 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 20    ^If the table 
0ae0: 68 61 73 20 6e 65 76 65 72 0a 62 65 66 6f 72 65  has never.before
0af0: 20 63 6f 6e 74 61 69 6e 65 64 20 61 6e 79 20 64   contained any d
0b00: 61 74 61 2c 20 74 68 65 6e 20 61 20 52 4f 57 49  ata, then a ROWI
0b10: 44 20 6f 66 20 31 20 69 73 20 75 73 65 64 2e 20  D of 1 is used. 
0b20: 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a 68   ^If the table.h
0b30: 61 73 20 70 72 65 76 69 6f 75 73 6c 79 20 68 65  as previously he
0b40: 6c 64 20 61 20 72 6f 77 20 77 69 74 68 20 74 68  ld a row with th
0b50: 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62  e largest possib
0b60: 6c 65 20 52 4f 57 49 44 2c 20 74 68 65 6e 20 6e  le ROWID, then n
0b70: 65 77 20 49 4e 53 45 52 54 73 0a 61 72 65 20 6e  ew INSERTs.are n
0b80: 6f 74 20 61 6c 6c 6f 77 65 64 20 61 6e 64 20 61  ot allowed and a
0b90: 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 69 6e  ny attempt to in
0ba0: 73 65 72 74 20 61 20 6e 65 77 20 72 6f 77 20 77  sert a new row w
0bb0: 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e  ill fail with an
0bc0: 0a 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72  .SQLITE_FULL err
0bd0: 6f 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 53  or..</p>..<p>.^S
0be0: 51 4c 69 74 65 20 6b 65 65 70 73 20 74 72 61 63  QLite keeps trac
0bf0: 6b 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  k of the largest
0c00: 20 52 4f 57 49 44 20 74 68 61 74 20 61 20 74 61   ROWID that a ta
0c10: 62 6c 65 20 68 61 73 20 65 76 65 72 20 68 65 6c  ble has ever hel
0c20: 64 20 75 73 69 6e 67 0a 74 68 65 20 73 70 65 63  d using.the spec
0c30: 69 61 6c 20 53 51 4c 49 54 45 5f 53 45 51 55 45  ial SQLITE_SEQUE
0c40: 4e 43 45 20 74 61 62 6c 65 2e 20 20 5e 54 68 65  NCE table.  ^The
0c50: 20 53 51 4c 49 54 45 5f 53 45 51 55 45 4e 43 45   SQLITE_SEQUENCE
0c60: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
0c70: 64 0a 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  d.and initialize
0c80: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
0c90: 77 68 65 6e 65 76 65 72 20 61 20 6e 6f 72 6d 61  whenever a norma
0ca0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  l table that con
0cb0: 74 61 69 6e 73 20 61 6e 0a 41 55 54 4f 49 4e 43  tains an.AUTOINC
0cc0: 52 45 4d 45 4e 54 20 63 6f 6c 75 6d 6e 20 69 73  REMENT column is
0cd0: 20 63 72 65 61 74 65 64 2e 20 20 5e 54 68 65 20   created.  ^The 
0ce0: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 53  content of the S
0cf0: 51 4c 49 54 45 5f 53 45 51 55 45 4e 43 45 20 74  QLITE_SEQUENCE t
0d00: 61 62 6c 65 0a 63 61 6e 20 62 65 20 6d 6f 64 69  able.can be modi
0d10: 66 69 65 64 20 75 73 69 6e 67 20 6f 72 64 69 6e  fied using ordin
0d20: 61 72 79 20 55 50 44 41 54 45 2c 20 49 4e 53 45  ary UPDATE, INSE
0d30: 52 54 2c 20 61 6e 64 20 44 45 4c 45 54 45 20 73  RT, and DELETE s
0d40: 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 42 75 74 20  tatements..^But 
0d50: 6d 61 6b 69 6e 67 20 6d 6f 64 69 66 69 63 61 74  making modificat
0d60: 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 74 61 62  ions to this tab
0d70: 6c 65 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 70  le will likely p
0d80: 65 72 74 75 72 62 20 74 68 65 20 41 55 54 4f 49  erturb the AUTOI
0d90: 4e 43 52 45 4d 45 4e 54 0a 6b 65 79 20 67 65 6e  NCREMENT.key gen
0da0: 65 72 61 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  eration algorith
0db0: 6d 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 79 6f  m.  Make sure yo
0dc0: 75 20 6b 6e 6f 77 20 77 68 61 74 20 79 6f 75 20  u know what you 
0dd0: 61 72 65 20 64 6f 69 6e 67 20 62 65 66 6f 72 65  are doing before
0de0: 0a 79 6f 75 20 75 6e 64 65 72 74 61 6b 65 20 73  .you undertake s
0df0: 75 63 68 20 63 68 61 6e 67 65 73 2e 0a 3c 2f 70  uch changes..</p
0e00: 3e 0a 0a 3c 70 3e 0a 54 68 65 20 62 65 68 61 76  >..<p>.The behav
0e10: 69 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ior implemented 
0e20: 62 79 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45  by the AUTOINCRE
0e30: 4d 45 4e 54 20 6b 65 79 77 6f 72 64 20 69 73 20  MENT keyword is 
0e40: 73 75 62 74 6c 79 20 64 69 66 66 65 72 65 6e 74  subtly different
0e50: 0a 66 72 6f 6d 20 74 68 65 20 64 65 66 61 75 6c  .from the defaul
0e60: 74 20 62 65 68 61 76 69 6f 72 2e 20 20 5e 57 69  t behavior.  ^Wi
0e70: 74 68 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  th AUTOINCREMENT
0e80: 2c 20 72 6f 77 73 20 77 69 74 68 20 61 75 74 6f  , rows with auto
0e90: 6d 61 74 69 63 61 6c 6c 79 0a 73 65 6c 65 63 74  matically.select
0ea0: 65 64 20 52 4f 57 49 44 73 20 61 72 65 20 67 75  ed ROWIDs are gu
0eb0: 61 72 61 6e 74 65 65 64 20 74 6f 20 68 61 76 65  aranteed to have
0ec0: 20 52 4f 57 49 44 73 20 74 68 61 74 20 68 61 76   ROWIDs that hav
0ed0: 65 20 6e 65 76 65 72 20 62 65 65 6e 20 75 73 65  e never been use
0ee0: 64 0a 62 65 66 6f 72 65 20 62 79 20 74 68 65 20  d.before by the 
0ef0: 73 61 6d 65 20 74 61 62 6c 65 20 69 6e 20 74 68  same table in th
0f00: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e  e same database.
0f10: 20 20 5e 41 6e 64 20 74 68 65 20 61 75 74 6f 6d    ^And the autom
0f20: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
0f30: 65 64 0a 52 4f 57 49 44 73 20 61 72 65 20 67 75  ed.ROWIDs are gu
0f40: 61 72 61 6e 74 65 65 64 20 74 6f 20 62 65 20 6d  aranteed to be m
0f50: 6f 6e 6f 74 6f 6e 69 63 61 6c 6c 79 20 69 6e 63  onotonically inc
0f60: 72 65 61 73 69 6e 67 2e 20 20 54 68 65 73 65 20  reasing.  These 
0f70: 61 72 65 20 69 6d 70 6f 72 74 61 6e 74 0a 70 72  are important.pr
0f80: 6f 70 65 72 74 69 65 73 20 69 6e 20 63 65 72 74  operties in cert
0f90: 61 69 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  ain applications
0fa0: 2e 20 20 42 75 74 20 69 66 20 79 6f 75 72 20 61  .  But if your a
0fb0: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 65 73 20  pplication does 
0fc0: 6e 6f 74 0a 6e 65 65 64 20 74 68 65 73 65 20 70  not.need these p
0fd0: 72 6f 70 65 72 74 69 65 73 2c 20 79 6f 75 20 73  roperties, you s
0fe0: 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 73  hould probably s
0ff0: 74 61 79 20 77 69 74 68 20 74 68 65 20 64 65 66  tay with the def
1000: 61 75 6c 74 20 62 65 68 61 76 69 6f 72 0a 73 69  ault behavior.si
1010: 6e 63 65 20 74 68 65 20 75 73 65 20 6f 66 20 41  nce the use of A
1020: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 72 65 71  UTOINCREMENT req
1030: 75 69 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  uires additional
1040: 20 77 6f 72 6b 20 74 6f 20 62 65 20 64 6f 6e 65   work to be done
1050: 0a 61 73 20 65 61 63 68 20 72 6f 77 20 69 73 20  .as each row is 
1060: 69 6e 73 65 72 74 65 64 20 61 6e 64 20 74 68 75  inserted and thu
1070: 73 20 63 61 75 73 65 73 20 49 4e 53 45 52 54 73  s causes INSERTs
1080: 20 74 6f 20 72 75 6e 20 61 20 6c 69 74 74 6c 65   to run a little
1090: 20 73 6c 6f 77 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c   slower..</p>..<
10a0: 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 22 6d 6f  p>^Note that "mo
10b0: 6e 6f 74 6f 6e 69 63 61 6c 6c 79 20 69 6e 63 72  notonically incr
10c0: 65 61 73 69 6e 67 22 20 64 6f 65 73 20 6e 6f 74  easing" does not
10d0: 20 69 6d 70 6c 79 20 74 68 61 74 20 74 68 65 20   imply that the 
10e0: 52 4f 57 49 44 20 61 6c 77 61 79 73 0a 69 6e 63  ROWID always.inc
10f0: 72 65 61 73 65 73 20 62 79 20 65 78 61 63 74 6c  reases by exactl
1100: 79 20 6f 6e 65 2e 20 20 5e 4f 6e 65 20 69 73 20  y one.  ^One is 
1110: 74 68 65 20 75 73 75 61 6c 20 69 6e 63 72 65 6d  the usual increm
1120: 65 6e 74 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ent.  ^However, 
1130: 69 66 20 61 6e 0a 69 6e 73 65 72 74 20 66 61 69  if an.insert fai
1140: 6c 73 20 64 75 65 20 74 6f 20 28 66 6f 72 20 65  ls due to (for e
1150: 78 61 6d 70 6c 65 29 20 61 20 75 6e 69 71 75 65  xample) a unique
1160: 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 2c  ness constraint,
1170: 20 74 68 65 20 52 4f 57 49 44 20 6f 66 0a 74 68   the ROWID of.th
1180: 65 20 66 61 69 6c 65 64 20 69 6e 73 65 72 74 69  e failed inserti
1190: 6f 6e 20 61 74 74 65 6d 70 74 20 6d 69 67 68 74  on attempt might
11a0: 20 6e 6f 74 20 62 65 20 72 65 75 73 65 64 20 6f   not be reused o
11b0: 6e 20 73 75 62 73 65 71 75 65 6e 74 20 69 6e 73  n subsequent ins
11c0: 65 72 74 73 2c 0a 72 65 73 75 6c 74 69 6e 67 20  erts,.resulting 
11d0: 69 6e 20 67 61 70 73 20 69 6e 20 74 68 65 20 52  in gaps in the R
11e0: 4f 57 49 44 20 73 65 71 75 65 6e 63 65 2e 20 20  OWID sequence.  
11f0: 5e 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 67  ^AUTOINCREMENT g
1200: 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 0a 61  uarantees that.a
1210: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 6f  utomatically cho
1220: 73 65 6e 20 52 4f 57 49 44 73 20 77 69 6c 6c 20  sen ROWIDs will 
1230: 62 65 20 69 6e 63 72 65 61 73 69 6e 67 20 62 75  be increasing bu
1240: 74 20 6e 6f 74 20 74 68 61 74 20 74 68 65 79 20  t not that they 
1250: 77 69 6c 6c 20 62 65 0a 73 65 71 75 65 6e 74 69  will be.sequenti
1260: 61 6c 2e 3c 2f 70 3e 0a                          al.</p>.