成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL AUTO_INCREMENT的正確用法

數據庫 MySQL
我們今天主要向大家講述的是MySQL AUTO_INCREMENT的實際應用以及對其實際應用代碼的詳細描述,望大家能有所收獲。

此文章主要向大家講述的是MySQL AUTO_INCREMENT的實際應用,以及對其實際應用中的代碼的詳細描述,以下就是文章的詳細內容介紹,希望你在瀏覽之后會給你帶來一些幫助在此方面。

用法:

 

  1. CREATE TABLE test  
  2. (  
  3. id INT UNSIGNED NOT NULL Prima(最完善的虛擬主機管理系統)RY KEY AUTO_INCREMENT,  
  4. username VARCHAR(15) NOT NULL  
  5. )  
  6. AUTO_INCREMENT = 100

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

ISAM表

如果把一個NULL插入到一個AUTO_INCREMENT數據列里去,MySQL(和PHP搭配之***組合)將自動生成下一個序列編號。編號從1開始,并1為基數遞增。

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

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

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

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

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

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

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

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

MyISAM數據表

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

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

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

可使用復合索引在同一個數據表里創建多個相互獨立的自增序列,具體做法是這樣的:為數據表創建一個由多個數據列組成的Prima(最完善的虛擬主機管理系統)RY KEY OR UNIQUE索引,并把AUTO_INCREMENT數據列包括在這個索引里作為它的***一個數據列。這樣,這個復合索引里,前面的那些數據列每構成一種***的組合,最末尾的AUTO_INCREMENT數據列就會生成一個與該組合相對應的序列編號。

HEAP數據表

HEAP數據表從MySQL(和PHP搭配之***組合)4.1開始才允許使用自增列。

自增值可通過CREATE TABLE語句的 MySQL 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是數據列的一種屬性,只適用于整數類型數據列。

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

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

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

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

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

  1. delete from table_name;ortruncate table table_name 

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

  1. delete from table_name where 1; 

這將迫使MySQL(和PHP搭配之***組合)為每個刪除的數據行都做一次條件表達式的求值操作。

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

  1. insert into id set id = NULL;insert into main set main_id = LAST_INSERT_ID(); 

可用alter命令給一個數據表增加一個具有AUTO_INCREMENT屬性的數據列。MySQL(和PHP搭配之***組合)會自動生成所有的編號。

要重新排列現有的序列編號,最簡單的方法是先刪除該列,再重建該,MySQL(和PHP搭配之***組合)會重新生連續的編號序列。

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

先創建一個只有一個數據行的數據表:

  1. create table seq_table (id int unsigned not null);  
  2. insert into seq_table values (0);  

接著用以下操作檢索出序列號:

  1. 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 AUTO_INCREMENT的介紹,望你能有所收獲。

【編輯推薦】

  1. MySQL數據庫服務器的正確登錄描述
  2. Linux上實現MySQL 5的手動安裝
  3. 開發中的MySQL參照完整性簡介
  4. MySQL root 密碼忘記的破解
  5. MySQL數據庫中如何正確增加新用戶權限?
責任編輯:佚名 來源: 博客園
相關推薦

2010-05-13 16:32:18

2024-04-07 09:00:00

MySQL

2010-05-18 19:03:21

linux MySQL

2010-05-31 11:13:00

MySQL Date函

2010-05-27 14:47:14

MySQL INSER

2010-05-25 15:24:38

MySQL updat

2010-05-11 10:12:50

mysql數據庫sql

2010-06-10 13:11:23

2010-04-30 17:58:55

Oracle trun

2010-04-26 15:30:45

Oracle join

2010-04-30 10:47:26

Oracle Nvl函

2010-04-30 11:58:45

Oracle sequ

2025-07-02 07:05:00

多線程Java開發

2010-06-04 11:15:23

MySQL自增主鍵

2010-07-13 16:48:14

SQL Server

2010-05-07 14:26:55

Oracle臨時表

2009-12-14 17:48:46

Ruby String

2010-07-20 15:24:27

MS SQL Serv

2010-05-26 09:21:13

MySQL命令

2010-05-28 15:16:40

MySQL 資源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩一区二区在线观看 | 国产精品视频一区二区三区四区国 | 亚洲一区二区三区视频 | www国产亚洲精品久久网站 | 五月天婷婷久久 | 成人黄色在线 | 欧美一区二区三区视频 | 久久久久久91 | 成人久久18免费 | 国产精品一区二区在线 | 亚洲国产一区二区在线 | 免费麻豆视频 | 6080yy精品一区二区三区 | 一区二区三区视频在线观看 | 欧美一区二区三区四区在线 | 波多野结衣中文视频 | 天堂av中文 | 午夜精品一区二区三区在线视频 | 一区二区三区中文字幕 | 国产精品久久久久久久久久久免费看 | 在线国产视频观看 | 国产片侵犯亲女视频播放 | 日本成人福利视频 | 国产精品高 | 国产在线观看一区二区三区 | 精国产品一区二区三区 | 黑人久久久 | 日韩中文字幕 | 成人国产精品一级毛片视频毛片 | 色免费在线视频 | 亚洲三区在线 | 奇米久久久 | 欧美精品一级 | 嫩草视频网 | 国产精品乱码一区二区三区 | 97超碰站| 国产午夜精品理论片a大结局 | 天天摸天天干 | 天天干视频 | 999久久久久久久久 国产欧美在线观看 | 欧美日韩中文国产一区发布 |