為什麼要使用自增長AUTO_INCREMENT?
讓我們再檢視 customers 和 orders 表。 customers 表中的顧客由列cust_id 唯一標識,每位顧客有一個唯一編號。類似, orders 表中的每個訂單都有一個獨特的訂單號,這個訂單號碼儲存在列 order_num 中。這些編號除它們是唯一的以外沒有別的特殊意義。在增加一個新顧客或新訂單時,需要一個新的顧客ID或訂單號碼。這些編號可以任意,只要它們是唯一的即可。
#顯然,使用的最簡單的編號是下一個編號,所謂下一個編號是大於目前最大編號的編號。例如,如果 cust_id 的最大編號為 10005 ,則插入表中的下一個顧客可以具有等於 10006 的 cust_id 。
簡單嗎?不見得。你怎樣確定下一個要使用的值?當然,你可以使用 SELECT 語句得到最大的數字(使用Max() 函數),然後對它加1。但這樣做並不可靠(你需要找出一種辦法來保證,在你執行SELECT和INSERT 兩個語句之間沒有其他人插入行,對於多用戶應用,這種情況是很有可能出現的),而且效率也不高(執行額外的MySQL操作絕對不是理想的辦法)。
這就是 AUTO_INCREMENT 發揮作用的時候了。請看以下程式碼行(用來建立customers 資料表的CREATE TABLE 語句的組成部分):
cust_id int NOT NULL AUTO_INCREMENT,
AUTO_INCREMENT使用方法
AUTO_INCREMENT 告訴MySQL,每個欄位每當增加一行時自動增量。每次執行一個 INSERT 操作時,MySQL會自動對該列增量(因此才有這個關鍵字AUTO_INCREMENT ),給予該列下一個可用的值。這樣給每個行分配一個唯一的 cust_id ,從而可以用作主鍵值。
注意:
每個表只允許一個 AUTO_INCREMENT 列,而且它必須被索引(如,透過使它成為主鍵)。 覆寫 AUTO_INCREMENT 如果一個欄位被指定為 AUTO_INCRE-MENT ,則它需要使用特殊的值嗎?你可以簡單地在 INSERT 語句中指定一個值,只要它是唯一的(至今尚未使用過)即可,該值將被用來取代自動產生的值。後續的增量將開始使用該手動插入的值。
缺點:
確定 AUTO_INCREMENT 值 讓MySQL產生(透過自動增量)主鍵的一個缺點是你不知道這些值是誰。
select last_insert_id()函數
#考慮這個場景:你正在增加一個新訂單。這要求在 orders 表中建立一行,然後在 orderitms 表中對訂購的每項物品建立一行。 order_num 在 orderitems 表中與訂單細節一起儲存。這就是為什麼 orders 表和 orderitems 表為相互關聯的表的原因。這顯然要求你在插入 orders 行之後,插入 orderitems 行之前知道生成的 order_num 。
那麼,如何在使用 AUTO_INCREMENT 欄位時得到這個值呢?可使用 last_insert_id() 函數取得這個值,如下所示:
select last_insert_id()
此語句傳回最後一個 AUTO_INCREMENT 值,然後可以將它用於後續的MySQL語句。
【相關推薦】
php中文網特別推薦:php程式設計師工具箱下載(一鍵搭建php環境)
#詳解mysql資料庫中的主鍵
以上是mysql自增長AUTO_INCREMENT實例用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!