mysql自增長AUTO_INCREMENT案例用法
發(fā)表時(shí)間:2023-09-07 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]為什么使用自增長AUTO_INCREMENT?讓我們再次考察 customers 和 orders 表。 customers 表中的顧客由列cust_id 唯一標(biāo)識(shí),每個(gè)顧客有一個(gè)唯一編號(hào)。類似, orders 表中的每個(gè)訂單有一個(gè)唯一的訂單號(hào),這個(gè)訂單號(hào)存儲(chǔ)在列 order_num 中。這些編號(hào)...
為什么使用自增長AUTO_INCREMENT?讓我們再次考察 customers 和 orders 表。 customers 表中的顧客由列cust_id 唯一標(biāo)識(shí),每個(gè)顧客有一個(gè)唯一編號(hào)。類似, orders 表中的每個(gè)訂單有一個(gè)唯一的訂單號(hào),這個(gè)訂單號(hào)存儲(chǔ)在列 order_num 中。這些編號(hào)除它們是唯一的以外沒有別的特殊意義。在增加一個(gè)新顧客或新訂單時(shí),需要一個(gè)新的顧客ID或訂單號(hào)。這些編號(hào)可以任意,只要它們是唯一的即可。
顯然,使用的最簡單的編號(hào)是下一個(gè)編號(hào),所謂下一個(gè)編號(hào)是大于當(dāng)前最大編號(hào)的編號(hào)。例如,如果 cust_id 的最大編號(hào)為 10005 ,則插入表中的下一個(gè)顧客可以具有等于 10006 的 cust_id 。
簡單嗎?不見得。你怎樣確定下一個(gè)要使用的值?當(dāng)然,你可以使用 SELECT 語句得出最大的數(shù)(使用Max() 函數(shù)),然后對它加1。但這樣做并不可靠(你需要找出一種辦法來保證,在你執(zhí)行 SELECT和 INSERT 兩條語句之間沒有其他人插入行,對于多用戶應(yīng)用,這種情況是很有可能出現(xiàn)的),而且效率也不高(執(zhí)行額外的MySQL操作肯定不是理想的辦法)。
這就是 AUTO_INCREMENT 發(fā)揮作用的時(shí)候了。請看以下代碼行(用來創(chuàng)建 customers 表的 CREATE TABLE 語句的組成部分):
cust_id int NOT NULL AUTO_INCREMENT,
AUTO_INCREMENT使用方法
AUTO_INCREMENT 告訴MySQL,本列每當(dāng)增加一行時(shí)自動(dòng)增量。每次執(zhí)行一個(gè) INSERT 操作時(shí),MySQL自動(dòng)對該列增量(從而才有這個(gè)關(guān)鍵字AUTO_INCREMENT ),給該列賦予下一個(gè)可用的值。這樣給每個(gè)行分配一個(gè)唯一的 cust_id ,從而可以用作主鍵值。
注意:
每個(gè)表只允許一個(gè) AUTO_INCREMENT 列,而且它必須被索引(如,通過使它成為主鍵)。覆蓋 AUTO_INCREMENT 如果一個(gè)列被指定為 AUTO_INCRE-MENT ,則它需要使用特殊的值嗎?你可以簡單地在 INSERT 語句中指定一個(gè)值,只要它是唯一的(至今尚未使用過)即可,該值將被用來替代自動(dòng)生成的值。后續(xù)的增量將開始使用該手工插入的值。
缺點(diǎn):
確定 AUTO_INCREMENT 值 讓MySQL生成(通過自動(dòng)增量)主鍵的一個(gè)缺點(diǎn)是你不知道這些值都是誰。
select last_insert_id()函數(shù)
考慮這個(gè)場景:你正在增加一個(gè)新訂單。這要求在 orders 表中創(chuàng)建一行,然后在 orderitms 表中對訂購的每項(xiàng)物品創(chuàng)建一行。 order_num 在 orderitems 表中與訂單細(xì)節(jié)一起存儲(chǔ)。這就是為什么 orders 表和 orderitems 表為相互關(guān)聯(lián)的表的原因。這顯然要求你在插入 orders 行之后,插入 orderitems 行之前知道生成的 order_num 。
那么,如何在使用 AUTO_INCREMENT 列時(shí)獲得這個(gè)值呢?可使用 last_insert_id() 函數(shù)獲得這個(gè)值,如下所示:
select last_insert_id()
此語句返回最后一個(gè) AUTO_INCREMENT 值,然后可以將它用于后續(xù)的MySQL語句。
【相關(guān)推薦】
php中文網(wǎng)特別推薦:php程序員工具箱下載(一鍵搭建php環(huán)境)
詳解mysql數(shù)據(jù)庫中的主鍵
以上就是mysql自增長AUTO_INCREMENT實(shí)例用法的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。