最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySql數(shù)據(jù)庫自動(dòng)遞增值問題

 更新時(shí)間:2016年07月14日 10:31:51   投稿:mrr  
這篇文章主要介紹了MySql數(shù)據(jù)庫自動(dòng)遞增值問題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
Create TABLE test
(
id INT UNSIGNED NOT NULL PrimaRY KEY AUTO_INCREMENT,
username VARCHAR(15) NOT NULL
)
AUTO_INCREMENT = 100;

在數(shù)據(jù)庫應(yīng)用,我們經(jīng)常要用到唯一編號(hào),以標(biāo)識(shí)記錄。在MySQL中可通過數(shù)據(jù)列的AUTO_INCREMENT屬性來自動(dòng)生成。MySQL支持多種數(shù)據(jù)表,每種數(shù)據(jù)表的自增屬性都有差異,這里將介紹各種數(shù)據(jù)表里的數(shù)據(jù)列自增屬性。

ISAM表

如果把一個(gè)NULL插入到一個(gè)AUTO_INCREMENT數(shù)據(jù)列里去,MySQL將自動(dòng)生成下一個(gè)序列編號(hào)。編號(hào)從1開始,并1為基數(shù)遞增。

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

當(dāng)插入記錄時(shí),沒有為AUTO_INCREMENT明確指定值,則等同插入NULL值。

當(dāng)插入記錄時(shí),如果為AUTO_INCREMENT數(shù)據(jù)列明確指定了一個(gè)數(shù)值,則會(huì)出現(xiàn)兩種情況,情況一,如果插入的值與已有的編號(hào)重復(fù),則會(huì)出現(xiàn)出錯(cuò)信息,因?yàn)锳UTO_INCREMENT數(shù)據(jù)列的值必須是唯一的;情況二,如果插入的值大于已編號(hào)的值,則會(huì)把該插入到數(shù)據(jù)列中,并使在下一個(gè)編號(hào)將從這個(gè)新值開始遞增。也就是說,可以跳過一些編號(hào)。

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

如果用Update命令更新自增列,如果列值與已有的值重復(fù),則會(huì)出錯(cuò)。如果大于已有值,則下一個(gè)編號(hào)從該值開始遞增。

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

last_insert_id()函數(shù)可獲得自增列自動(dòng)生成的最后一個(gè)編號(hào)。但該函數(shù)只與服務(wù)器的本次會(huì)話過程中生成的值有關(guān)。如果在與服務(wù)器的本次會(huì)話中尚未生成AUTO_INCREMENT值,則該函數(shù)返回0。

其它數(shù)據(jù)表的自動(dòng)編號(hào)機(jī)制都以ISAM表中的機(jī)制為基礎(chǔ)。

MyISAM數(shù)據(jù)表

刪除最大編號(hào)的記錄后,該編號(hào)不可重用。

可在建表時(shí)可用“AUTO_INCREMENT=n”選項(xiàng)來指定一個(gè)自增的初始值。

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

可使用復(fù)合索引在同一個(gè)數(shù)據(jù)表里創(chuàng)建多個(gè)相互獨(dú)立的自增序列,具體做法是這樣的:為數(shù)據(jù)表創(chuàng)建一個(gè)由多個(gè)數(shù)據(jù)列組成的PrimaRY KEY or UNIQUE索引,并把AUTO_INCREMENT數(shù)據(jù)列包括在這個(gè)索引里作為它的最后一個(gè)數(shù)據(jù)列。這樣,這個(gè)復(fù)合索引里,前面的那些數(shù)據(jù)列每構(gòu)成一種獨(dú)一無二的組合,最末尾的AUTO_INCREMENT數(shù)據(jù)列就會(huì)生成一個(gè)與該組合相對(duì)應(yīng)的序列編號(hào)。

HEAP數(shù)據(jù)表

HEAP數(shù)據(jù)表從MySQL4.1開始才允許使用自增列。

自增值可通過Create TABLE語句的 AUTO_INCREMENT=n選項(xiàng)來設(shè)置。

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

編號(hào)不可重用。

HEAP數(shù)據(jù)表不支持在一個(gè)數(shù)據(jù)表中使用復(fù)合索引來生成多個(gè)互不干擾的序列編號(hào)。

BDB數(shù)據(jù)表

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

可重用編號(hào)。

支持在一個(gè)數(shù)據(jù)表里使用復(fù)合索引來生成多個(gè)互不干擾的序列編號(hào)。

InnDB數(shù)據(jù)表

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

不可重用編號(hào)。

不支持在一個(gè)數(shù)據(jù)表里使用復(fù)合索引來生成多個(gè)互不干擾的序列編號(hào)。

在使用AUTO_INCREMENT時(shí),應(yīng)注意以下幾點(diǎn):

AUTO_INCREMENT是數(shù)據(jù)列的一種屬性,只適用于整數(shù)類型數(shù)據(jù)列。

設(shè)置AUTO_INCREMENT屬性的數(shù)據(jù)列應(yīng)該是一個(gè)正數(shù)序列,所以應(yīng)該把該數(shù)據(jù)列聲明為UNSIGNED,這樣序列的編號(hào)個(gè)可增加一倍。

AUTO_INCREMENT數(shù)據(jù)列必須有唯一索引,以避免序號(hào)重復(fù)。

AUTO_INCREMENT數(shù)據(jù)列必須具備NOT NULL屬性。

AUTO_INCREMENT數(shù)據(jù)列序號(hào)的最大值受該列的數(shù)據(jù)類型約束,如TINYINT數(shù)據(jù)列的最大編號(hào)是127,如加上UNSIGNED,則最大為255。一旦達(dá)到上限,AUTO_INCREMENT就會(huì)失效。

當(dāng)進(jìn)行全表刪除時(shí),AUTO_INCREMENT會(huì)從1重新開始編號(hào)。全表刪除的意思是發(fā)出以下兩條語句時(shí):

delete from table_name;ortruncate table table_name

這是因?yàn)檫M(jìn)行全表操作時(shí),MySQL實(shí)際是做了這樣的優(yōu)化操作:先把數(shù)據(jù)表里的所有數(shù)據(jù)和索引刪除,然后重建數(shù)據(jù)表。如果想刪除所有的數(shù)據(jù)行又想保留序列編號(hào)信息,可這樣用一個(gè)帶where的delete命令以抑制MySQL的優(yōu)化:

delete from table_name where 1;

這將迫使MySQL為每個(gè)刪除的數(shù)據(jù)行都做一次條件表達(dá)式的求值操作。

強(qiáng)制MySQL不復(fù)用已經(jīng)使用過的序列值的方法是:另外創(chuàng)建一個(gè)專門用來生成AUTO_INCREMENT序列的數(shù)據(jù)表,并做到永遠(yuǎn)不去刪除該表的記錄。當(dāng)需要在主數(shù)據(jù)表里插入一條記錄時(shí),先在那個(gè)專門生成序號(hào)的表中插入一個(gè)NULL值以產(chǎn)生一個(gè)編號(hào),然后,在往主數(shù)據(jù)表里插入數(shù)據(jù)時(shí),利用 LAST_Insert_ID()函數(shù)取得這個(gè)編號(hào),并把它賦值給主表的存放序列的數(shù)據(jù)列。如:

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

可用alter命令給一個(gè)數(shù)據(jù)表增加一個(gè)具有AUTO_INCREMENT屬性的數(shù)據(jù)列。MySQL會(huì)自動(dòng)生成所有的編號(hào)。

要重新排列現(xiàn)有的序列編號(hào),最簡單的方法是先刪除該列,再重建該,MySQL會(huì)重新生連續(xù)的編號(hào)序列。

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

先創(chuàng)建一個(gè)只有一個(gè)數(shù)據(jù)行的數(shù)據(jù)表:create table seq_table (id int unsigned not null);insert into seq_table values (0);接著用以下操作檢索出序列號(hào):update seq_table set seq = LAST_Insert_ID( seq + 1 );select LAST_Insert_ID();通過修改seq+1中的常數(shù)值,可生成不同步長的序列,如seq+10可生成步長為10的序列。

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

下面給大家介紹MySQL數(shù)據(jù)庫修改自動(dòng)遞增值

alter table tablename auto_increment=num 

其中tablename為表的名稱,num為要設(shè)置的新的自動(dòng)遞增值,此時(shí)再Insert一條數(shù)據(jù),自動(dòng)遞增值即為num,不過num必須要大于等于現(xiàn)在已有的自動(dòng)遞增值,否則SQL語句會(huì)執(zhí)行成功,但是實(shí)際上不起作用。

相關(guān)文章

  • mysql通過ssl的方式生成秘鑰具體生成步驟

    mysql通過ssl的方式生成秘鑰具體生成步驟

    在my.cnf末尾端設(shè)置ssl 參數(shù), 然后重新啟動(dòng)mysql服務(wù)即可,通過openssl生成證書的配置, 在mysql db server上生成秘鑰,具體步驟如下,感興趣的朋友可以參考下哈
    2013-06-06
  • 3步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL的方法詳解

    3步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL的方法詳解

    免編程,3步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL詳解,好多做ip地址查詢的朋友用的到。
    2009-10-10
  • MySQL中MIN()函數(shù)的使用教程

    MySQL中MIN()函數(shù)的使用教程

    這篇文章主要介紹了MySQL中MIN()函數(shù)的使用教程,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • mysql如何顯示longblob解決方案

    mysql如何顯示longblob解決方案

    這篇文章主要為大家介紹了mysql如何顯示longblob解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • mysql 5.7.18 MSI安裝圖文教程

    mysql 5.7.18 MSI安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.18 MSI安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Mysql如何同時(shí)交換兩個(gè)表的表名詳解

    Mysql如何同時(shí)交換兩個(gè)表的表名詳解

    這篇文章主要給大家介紹了關(guān)于Mysql如何同時(shí)交換兩個(gè)表的表名,以及MySQL命令rename修改表名的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • MySQL生成千萬測(cè)試數(shù)據(jù)以及遇到的問題

    MySQL生成千萬測(cè)試數(shù)據(jù)以及遇到的問題

    前兩天發(fā)現(xiàn)同事要做一個(gè)對(duì)大表進(jìn)行范圍查詢的功能,所以需要生成千萬數(shù)據(jù)進(jìn)行性能測(cè)試,下面這篇文章主要給大家介紹了關(guān)于MySQL生成千萬測(cè)試數(shù)據(jù)以及遇到的問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • mysql distinct去重,IFNULL空值處理方式

    mysql distinct去重,IFNULL空值處理方式

    文章介紹了如何在MySQL中使用`DISTINCT`命令去重和使用`IFNULL`函數(shù)處理空值,首先,通過Navicat新建數(shù)據(jù)庫并準(zhǔn)備數(shù)據(jù),然后展示了如何使用`DISTINCT`命令去除重復(fù)數(shù)據(jù)和使用`IFNULL`函數(shù)將空值替換為“暫無”
    2025-01-01
  • mysql 多個(gè)字段實(shí)現(xiàn)逗號(hào)拼接

    mysql 多個(gè)字段實(shí)現(xiàn)逗號(hào)拼接

    在MySQL數(shù)據(jù)庫中,有時(shí)候我們需要將多個(gè)字段的值連接在一起,本文主要介紹了mysql 多個(gè)字段實(shí)現(xiàn)逗號(hào)拼接,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • mysqldump命令導(dǎo)入導(dǎo)出數(shù)據(jù)庫方法與實(shí)例匯總

    mysqldump命令導(dǎo)入導(dǎo)出數(shù)據(jù)庫方法與實(shí)例匯總

    這篇文章主要介紹了mysqldump命令導(dǎo)入導(dǎo)出數(shù)據(jù)庫方法與實(shí)例匯總的相關(guān)資料,需要的朋友可以參考下
    2015-10-10

最新評(píng)論

平陆县| 竹山县| 库伦旗| 唐河县| 雅江县| 镇远县| 天津市| 育儿| 朝阳区| 塘沽区| 出国| 雅江县| 惠州市| 永兴县| 西峡县| 锡林浩特市| 彝良县| 彭阳县| 达州市| 嵊泗县| 齐河县| 二连浩特市| 五常市| 东辽县| 德钦县| 抚州市| 梅河口市| 罗山县| 乌海市| 乐业县| 曲沃县| 巴南区| 玉环县| 惠东县| 维西| 武宁县| 武威市| 三门县| 涟源市| 康马县| 阿坝|