亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySql數據庫自動遞增值問題

2024-07-24 13:10:03
字體:
來源:轉載
供稿:網友
Create TABLE test(id INT UNSIGNED NOT NULL PrimaRY KEY AUTO_INCREMENT,username VARCHAR(15) NOT NULL)AUTO_INCREMENT = 100;

在數據庫應用,我們經常要用到唯一編號,以標識記錄。在MySQL中可通過數據列的AUTO_INCREMENT屬性來自動生成。MySQL支持多種數據表,每種數據表的自增屬性都有差異,這里將介紹各種數據表里的數據列自增屬性。

ISAM表

如果把一個NULL插入到一個AUTO_INCREMENT數據列里去,MySQL將自動生成下一個序列編號。編號從1開始,并1為基數遞增。

把0插入AUTO_INCREMENT數據列的效果與插入NULL值一樣。但不建議這樣做,還是以插入NULL值為好。

當插入記錄時,沒有為AUTO_INCREMENT明確指定值,則等同插入NULL值。

當插入記錄時,如果為AUTO_INCREMENT數據列明確指定了一個數值,則會出現兩種情況,情況一,如果插入的值與已有的編號重復,則會出現出錯信息,因為AUTO_INCREMENT數據列的值必須是唯一的;情況二,如果插入的值大于已編號的值,則會把該插入到數據列中,并使在下一個編號將從這個新值開始遞增。也就是說,可以跳過一些編號。

如果自增序列的最大值被刪除了,則在插入新記錄時,該值被重用。

如果用Update命令更新自增列,如果列值與已有的值重復,則會出錯。如果大于已有值,則下一個編號從該值開始遞增。

如果用replace命令基于AUTO_INCREMENT數據列里的值來修改數據表里的現有記錄,即AUTO_INCREMENT數據列出現在了 replace命令的where子句里,相應的AUTO_INCREMENT值將不會發生變化。但如果replace命令是通過其它的PrimaRY KEY or UNIQUE索引來修改現有記錄的(即AUTO_INCREMENT數據列沒有出現在replace命令的where子句中),相應的 AUTO_INCREMENT值--如果設置其為NULL(如沒有對它賦值)的話--就會發生變化。

last_insert_id()函數可獲得自增列自動生成的最后一個編號。但該函數只與服務器的本次會話過程中生成的值有關。如果在與服務器的本次會話中尚未生成AUTO_INCREMENT值,則該函數返回0。

其它數據表的自動編號機制都以ISAM表中的機制為基礎。

MyISAM數據表

刪除最大編號的記錄后,該編號不可重用。

可在建表時可用“AUTO_INCREMENT=n”選項來指定一個自增的初始值。

可用alter table table_name AUTO_INCREMENT=n命令來重設自增的起始值。

可使用復合索引在同一個數據表里創建多個相互獨立的自增序列,具體做法是這樣的:為數據表創建一個由多個數據列組成的PrimaRY KEY or UNIQUE索引,并把AUTO_INCREMENT數據列包括在這個索引里作為它的最后一個數據列。這樣,這個復合索引里,前面的那些數據列每構成一種獨一無二的組合,最末尾的AUTO_INCREMENT數據列就會生成一個與該組合相對應的序列編號。

HEAP數據表

HEAP數據表從MySQL4.1開始才允許使用自增列。

自增值可通過Create TABLE語句的 AUTO_INCREMENT=n選項來設置。

可通過Alter TABLE語句的AUTO_INCREMENT=n選項來修改自增始初值。

編號不可重用。

HEAP數據表不支持在一個數據表中使用復合索引來生成多個互不干擾的序列編號。

BDB數據表

不可通過Create TABLE or Alter TABLE的AUTO_INCREMENT=n選項來改變自增初始值。

可重用編號。

支持在一個數據表里使用復合索引來生成多個互不干擾的序列編號。

InnDB數據表

不可通過Create TABLE or Alter TABLE的AUTO_INCREMENT=n選項來改變自增初始值。

不可重用編號。

不支持在一個數據表里使用復合索引來生成多個互不干擾的序列編號。

在使用AUTO_INCREMENT時,應注意以下幾點:

AUTO_INCREMENT是數據列的一種屬性,只適用于整數類型數據列。

設置AUTO_INCREMENT屬性的數據列應該是一個正數序列,所以應該把該數據列聲明為UNSIGNED,這樣序列的編號個可增加一倍。

AUTO_INCREMENT數據列必須有唯一索引,以避免序號重復。

AUTO_INCREMENT數據列必須具備NOT NULL屬性。

AUTO_INCREMENT數據列序號的最大值受該列的數據類型約束,如TINYINT數據列的最大編號是127,如加上UNSIGNED,則最大為255。一旦達到上限,AUTO_INCREMENT就會失效。

當進行全表刪除時,AUTO_INCREMENT會從1重新開始編號。全表刪除的意思是發出以下兩條語句時:

delete from table_name;ortruncate table table_name

這是因為進行全表操作時,MySQL實際是做了這樣的優化操作:先把數據表里的所有數據和索引刪除,然后重建數據表。如果想刪除所有的數據行又想保留序列編號信息,可這樣用一個帶where的delete命令以抑制MySQL的優化:

delete from table_name where 1;

這將迫使MySQL為每個刪除的數據行都做一次條件表達式的求值操作。

強制MySQL不復用已經使用過的序列值的方法是:另外創建一個專門用來生成AUTO_INCREMENT序列的數據表,并做到永遠不去刪除該表的記錄。當需要在主數據表里插入一條記錄時,先在那個專門生成序號的表中插入一個NULL值以產生一個編號,然后,在往主數據表里插入數據時,利用 LAST_Insert_ID()函數取得這個編號,并把它賦值給主表的存放序列的數據列。如:

insert into id set id = NULL;insert into main set main_id = LAST_Insert_ID();

可用alter命令給一個數據表增加一個具有AUTO_INCREMENT屬性的數據列。MySQL會自動生成所有的編號。

要重新排列現有的序列編號,最簡單的方法是先刪除該列,再重建該,MySQL會重新生連續的編號序列。

在不用AUTO_INCREMENT的情況下生成序列,可利用帶參數的LAST_Insert_ID()函數。如果用一個帶參數的 LAST_Insert_ID(expr)去插入或修改一個數據列,緊接著又調用不帶參數的LAST_Insert_ID()函數,則第二次函數調用返回的就是expr的值。下面演示該方法的具體操作:

先創建一個只有一個數據行的數據表: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的序列。

該方法可用于計數器,在數據表中插入多行以記錄不同的計數值。再配合LAST_Insert_ID()函數的返回值生成不同內容的計數值。這種方法的優點是不用事務或LOCK,UNLOCK表就可生成唯一的序列編號。不會影響其它客戶程序的正常表操作。

下面給大家介紹MySQL數據庫修改自動遞增值

alter table tablename auto_increment=num 

其中tablename為表的名稱,num為要設置的新的自動遞增值,此時再Insert一條數據,自動遞增值即為num,不過num必須要大于等于現在已有的自動遞增值,否則SQL語句會執行成功,但是實際上不起作用。

 

注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美国产一本综合首页| 日韩中文字幕免费看| 亚洲午夜性刺激影院| 3344国产精品免费看| 亚洲一区亚洲二区亚洲三区| 中文字幕国产精品| 亚洲伊人一本大道中文字幕| 色婷婷av一区二区三区久久| 国产精品久久久久久久久久东京| www.久久撸.com| 久久久久久一区二区三区| 亚洲免费福利视频| 91精品国产乱码久久久久久久久| 日韩中文在线中文网在线观看| 日韩av不卡在线| 国产视频亚洲精品| 欧美电影在线观看网站| 亚洲成人久久电影| 成人日韩av在线| 国产亚洲欧美日韩美女| 国产专区欧美专区| 亚洲精品动漫100p| 国产精品www色诱视频| 日韩免费高清在线观看| 97视频在线看| 日本电影亚洲天堂| 日韩经典中文字幕在线观看| 国产精品人成电影在线观看| 国产精品久久久久久久天堂| 欧美日韩国产999| 中文字幕亚洲图片| 日韩av在线免费观看一区| 亚洲国产精品人久久电影| 欧美激情伊人电影| 色噜噜亚洲精品中文字幕| 一区二区在线免费视频| 日韩电影大片中文字幕| 在线观看亚洲区| 欧美电影免费观看电视剧大全| 欧美黑人狂野猛交老妇| 亚洲精品欧美日韩| 欧美另类在线播放| 国产精品网站入口| 欧美成人精品在线观看| 亚洲乱码国产乱码精品精天堂| 国产精品视频最多的网站| 日韩欧美aⅴ综合网站发布| 日韩美女写真福利在线观看| 色狠狠av一区二区三区香蕉蜜桃| 日本成人黄色片| 最近2019年手机中文字幕| 久久好看免费视频| 在线看欧美日韩| 色综合男人天堂| 91精品国产亚洲| 欧美精品国产精品日韩精品| 欧美精品在线免费播放| 夜夜嗨av色综合久久久综合网| 亚洲视频777| 日韩欧美精品免费在线| 国产综合在线看| 国产精品久久91| 久久在线免费视频| 亚洲精品第一国产综合精品| 久久久久久国产三级电影| 国产成人精品免费久久久久| 亚洲精品有码在线| 91精品国产乱码久久久久久蜜臀| 国产精品视频免费观看www| 久久免费视频网| 欧美精品www在线观看| 日韩精品视频免费在线观看| 亚洲黄色免费三级| 欧美人与性动交a欧美精品| 国产999精品久久久| 精品久久中文字幕| 国产亚洲视频在线观看| 国产精品免费视频xxxx| 国产精品最新在线观看| 亚洲视频自拍偷拍| 97精品国产97久久久久久免费| 精品伊人久久97| 国产91精品久久久久久久| 日韩av在线不卡| 亚洲第一福利视频| 欧美成年人视频网站| 亚洲一区二区黄| 国产成人精品av在线| 亚洲人成网站999久久久综合| 国产成人亚洲综合| 国产亚洲aⅴaaaaaa毛片| 日韩在线视频中文字幕| 91精品在线观| 国产精品影片在线观看| 久久久久久69| www.亚洲一二| 久久色精品视频| 91大神福利视频在线| 亚洲精品福利在线观看| 亚洲精品一区中文字幕乱码| 国产视频在线一区二区| 精品国产老师黑色丝袜高跟鞋| 亚洲一区av在线播放| 国产日产欧美精品| 国产成人精品一区二区在线| 欧美韩日一区二区| 在线视频国产日韩| 精品国产一区二区在线| 精品久久久精品| 性色av一区二区三区免费| www.欧美精品一二三区| 亚洲欧美日韩精品久久| 欧美午夜精品久久久久久久| 亚洲女同精品视频| 亚洲香蕉成人av网站在线观看| 深夜福利一区二区| 国产精品99久久久久久久久久久久| 亚洲区免费影片| 成人福利免费观看| 成人精品视频99在线观看免费| 欧美特级www| 中文字幕日韩综合av| 国产精品一区二区女厕厕| 色婷婷av一区二区三区在线观看| 久久精品美女视频网站| 欧美国产日韩一区二区三区| 亚洲伊人一本大道中文字幕| 欧美巨乳美女视频| 亚洲综合中文字幕68页| 中日韩美女免费视频网址在线观看| 日本精品中文字幕| 国产精品一区电影| 久久天堂电影网| 亚洲精品久久久久| 超薄丝袜一区二区| 日韩视频亚洲视频| 欧洲日韩成人av| 国产精品久久久久久一区二区| 亚洲最大福利视频网站| 亚洲男人第一网站| 久久久久久九九九| 日本精品在线视频| 亚洲免费视频网站| 91久久久国产精品| 日韩精品极品在线观看播放免费视频| 91精品视频免费看| 亚洲毛片在线免费观看| 国产婷婷97碰碰久久人人蜜臀| 欧美又大又硬又粗bbbbb| 亚洲自拍欧美另类| 亚洲国产中文字幕久久网| 国产91|九色| 国产精品久久久久久久久久99| 国产一区二区三区久久精品| 日韩欧美在线国产| 欧美日韩在线视频首页| 亚洲老板91色精品久久| 岛国av一区二区三区| 国产不卡av在线免费观看| 最新国产成人av网站网址麻豆| 日韩精品免费综合视频在线播放| 国产极品jizzhd欧美| 国产aⅴ夜夜欢一区二区三区| 欧美国产一区二区三区|