MySQL 主鍵自增 Auto Increment用法

西召發表於2019-03-26

AUTO_INCREMENT簡介

MySQL的AUTO_INCREMENT屬性可以用於在插入新的記錄的時候,進行主鍵自增。

例如執行下面的SQL:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;
複製程式碼

執行結果如下:

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+
複製程式碼

AUTO_INCREMENT總結

  1. id列設定為AUTO_INCREMENT以後,在inserte語句中, 如果id列為空, 或者id列值為0 (SQL Mode不是NO_AUTO_VALUE_ON_ZERO), 或者id列值NULL (id列為NOT NULL), 那麼id將自動增長。

  2. 通過insert語句在AUTO_INCREMENT列插入更大的值,則序列會被重置為最大值依次增加。

  3. 在使用MySQL時,若表中含自增欄位(auto_increment型別),則向表中insert一條記錄後,可以呼叫last_insert_id()來獲得最近insert的那行記錄的自增欄位值。

  4. 一道面試題

問:一張表,裡面有ID自增主鍵,當insert了17條記錄之後,刪除了第15,16,17條記錄,再把Mysql重啟,再insert一條記錄,這條記錄的ID是18還是15 ?

答:如果表的儲存引擎是MyISAM,id是18,因為MyISAM會將最大id記錄在檔案裡;如果表的儲存引擎是InnoDB,id是15,因為InnoDB會將最大id記錄在記憶體裡,重啟後會丟失。

Links

相關文章