《Mysql應用MySql數據庫自動遞增值問題》要點:
本文介紹了Mysql應用MySql數據庫自動遞增值問題,希望對您有用。如果有疑問,可以聯系我們。
MYSQL必讀
Create TABLE test
(
id INT UNSIGNED NOT NULL PrimaRY KEY AUTO_INCREMENT,
username VARCHAR(15) NOT NULL
)
AUTO_INCREMENT = 100;
MYSQL必讀在數據庫應用,我們經常要用到唯一編號,以標識記錄.在MySQL中可通過數據列的AUTO_INCREMENT屬性來自動生成.MySQL支持多種數據表,每種數據表的自增屬性都有差異,這里將介紹各種數據表里的數據列自增屬性.
MYSQL必讀ISAM表
MYSQL必讀如果把一個NULL插入到一個AUTO_INCREMENT數據列里去,MySQL將自動生成下一個序列編號.編號從1開始,并1為基數遞增.
MYSQL必讀把0插入AUTO_INCREMENT數據列的效果與插入NULL值一樣.但不建議這樣做,還是以插入NULL值為好.
MYSQL必讀當插入記錄時,沒有為AUTO_INCREMENT明確指定值,則等同插入NULL值.
MYSQL必讀當插入記錄時,如果為AUTO_INCREMENT數據列明確指定了一個數值,則會出現兩種情況,情況一,如果插入的值與已有的編號重復,則會出現出錯信息,因為AUTO_INCREMENT數據列的值必需是唯一的;情況二,如果插入的值大于已編號的值,則會把該插入到數據列中,并使在下一個編號將從這個新值開始遞增.也就是說,可以跳過一些編號.
MYSQL必讀如果自增序列的最大值被刪除了,則在插入新記錄時,該值被重用.
MYSQL必讀如果用Update命令更新自增列,如果列值與已有的值重復,則會出錯.如果大于已有值,則下一個編號從該值開始遞增.
MYSQL必讀如果用replace命令基于AUTO_INCREMENT數據列里的值來修改數據表里的現有記錄,即AUTO_INCREMENT數據列出現在了 replace命令的where子句里,相應的AUTO_INCREMENT值將不會發生變化.但如果replace命令是通過其它的PrimaRY KEY or UNIQUE索引來修改現有記錄的(即AUTO_INCREMENT數據列沒有出現在replace命令的where子句中),相應的 AUTO_INCREMENT值--如果設置其為NULL(如沒有對它賦值)的話--就會發生變化.
MYSQL必讀last_insert_id()函數可獲得自增列自動生成的最后一個編號.但該函數只與服務器的本次會話過程中生成的值有關.如果在與服務器的本次會話中尚未生成AUTO_INCREMENT值,則該函數返回0.
MYSQL必讀其它數據表的自動編號機制都以ISAM表中的機制為基礎.
MYSQL必讀MyISAM數據表
MYSQL必讀刪除最大編號的記錄后,該編號不可重用.
MYSQL必讀可在建表時可用“AUTO_INCREMENT=n”選項來指定一個自增的初始值.
MYSQL必讀可用alter table table_name AUTO_INCREMENT=n命令來重設自增的起始值.
MYSQL必讀可使用復合索引在同一個數據表里創建多個相互獨立的自增序列,具體做法是這樣的:為數據表創建一個由多個數據列組成的PrimaRY KEY or UNIQUE索引,并把AUTO_INCREMENT數據列包含在這個索引里作為它的最后一個數據列.這樣,這個復合索引里,前面的那些數據列每構成一種獨一無二的組合,最末尾的AUTO_INCREMENT數據列就會生成一個與該組合相對應的序列編號.
MYSQL必讀HEAP數據表
MYSQL必讀HEAP數據表從MySQL4.1開始才允許使用自增列.
MYSQL必讀自增值可通過Create TABLE語句的 AUTO_INCREMENT=n選項來設置.
MYSQL必讀可通過Alter TABLE語句的AUTO_INCREMENT=n選項來修改自增始初值.
MYSQL必讀編號不可重用.
MYSQL必讀HEAP數據表不支持在一個數據表中使用復合索引來生成多個互不干擾的序列編號.
MYSQL必讀BDB數據表
MYSQL必讀不可通過Create TABLE or Alter TABLE的AUTO_INCREMENT=n選項來改變自增初始值.
MYSQL必讀可重用編號.
MYSQL必讀支持在一個數據表里使用復合索引來生成多個互不干擾的序列編號.
MYSQL必讀InnDB數據表
MYSQL必讀不可通過Create TABLE or Alter TABLE的AUTO_INCREMENT=n選項來改變自增初始值.
MYSQL必讀不可重用編號.
MYSQL必讀不支持在一個數據表里使用復合索引來生成多個互不干擾的序列編號.
MYSQL必讀在使用AUTO_INCREMENT時,應注意以下幾點:
MYSQL必讀AUTO_INCREMENT是數據列的一種屬性,只適用于整數類型數據列.
MYSQL必讀設置AUTO_INCREMENT屬性的數據列應該是一個正數序列,所以應該把該數據列聲明為UNSIGNED,這樣序列的編號個可增加一倍.
MYSQL必讀AUTO_INCREMENT數據列必需有唯一索引,以避免序號重復.
MYSQL必讀AUTO_INCREMENT數據列必需具備NOT NULL屬性.
MYSQL必讀AUTO_INCREMENT數據列序號的最大值受該列的數據類型約束,如TINYINT數據列的最大編號是127,如加上UNSIGNED,則最大為255.一旦達到上限,AUTO_INCREMENT就會失效.
MYSQL必讀當進行全表刪除時,AUTO_INCREMENT會從1重新開始編號.全表刪除的意思是發出以下兩條語句時:
MYSQL必讀
delete from table_name;ortruncate table table_name
MYSQL必讀這是因為進行全表操作時,MySQL實際是做了這樣的優化操作:先把數據表里的所有數據和索引刪除,然后重建數據表.如果想刪除所有的數據行又想保存序列編號信息,可這樣用一個帶where的delete命令以抑制MySQL的優化:
MYSQL必讀
delete from table_name where 1;
MYSQL必讀這將迫使MySQL為每個刪除的數據行都做一次條件表達式的求值操作.
MYSQL必讀強制MySQL不復用已經使用過的序列值的辦法是:另外創建一個專門用來生成AUTO_INCREMENT序列的數據表,并做到永遠不去刪除該表的記錄.當需要在主數據表里插入一條記錄時,先在那個專門生成序號的表中插入一個NULL值以產生一個編號,然后,在往主數據表里插入數據時,利用 LAST_Insert_ID()函數取得這個編號,并把它賦值給主表的存放序列的數據列.如:
MYSQL必讀
insert into id set id = NULL;insert into main set main_id = LAST_Insert_ID();
MYSQL必讀可用alter命令給一個數據表增加一個具有AUTO_INCREMENT屬性的數據列.MySQL會自動生成所有的編號.
MYSQL必讀要重新排列現有的序列編號,最簡單的辦法是先刪除該列,再重建該,MySQL會重新生連續的編號序列.
MYSQL必讀在不用AUTO_INCREMENT的情況下生成序列,可利用帶參數的LAST_Insert_ID()函數.如果用一個帶參數的 LAST_Insert_ID(expr)去插入或修改一個數據列,緊接著又調用不帶參數的LAST_Insert_ID()函數,則第二次函數調用返回的就是expr的值.下面演示該辦法的具體操作:
MYSQL必讀先創建一個只有一個數據行的數據表:create table seq_table (id int unsigned not null);insert into seq_table values (0);接著用以下操作檢索出序列號:update seq_table set seq = LAST_Insert_ID( seq + 1 );select LAST_Insert_ID();通過修改seq+1中的常數值,可生成不同步長的序列,如seq+10可生成步長為10的序列.
MYSQL必讀該辦法可用于計數器,在數據表中插入多行以記錄不同的計數值.再配合LAST_Insert_ID()函數的返回值生成不同內容的計數值.這種辦法的優點是不用事務或LOCK,UNLOCK表就可生成唯一的序列編號.不會影響其它客戶程序的正常表操作.
MYSQL必讀下面給大家介紹MySQL數據庫修改自動遞增值
MYSQL必讀
alter table tablename auto_increment=num
MYSQL必讀其中tablename為表的名稱,num為要設置的新的自動遞增值,此時再Insert一條數據,自動遞增值即為num,不過num必需要大于等于現在已有的自動遞增值,否則SQL語句會執行成功,但是實際上不起作用.
維易PHP培訓學院每天發布《Mysql應用MySql數據庫自動遞增值問題》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。