MySQL 自增ID值 獲取的方法
如何獲取 MYSQL中某個表的自增ID欄位的下一個值 ?
方法一:
例如:在zx_ofc.task_order表中task_id是自增欄位。
它的下一個自增欄位可以通過下面的語句獲得
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'zx_ofc' AND TABLE_NAME = 'task_order';
該數值其實就是下面SQL語句執行後輸出的數值 + 1.
select max(zx_ofc.task_order.task_id) from zx_ofc.task_order;
方法二:
SHOW TABLE STATUS;
得出的結果裡邊對應表名記錄中有個Auto_increment欄位,裡邊有下一個自增ID的數值就是當前該表的最大自增ID。
如何返回插入資料後的那個自增ID欄位的值?
方法:使用 last_insert_id() 函式。
SQL例子如下:
下面的這個表初始空的,執行下面的語句系列。
insert into thb_test(keyword1) VALUES("thb");
select last_insert_id();
//輸出值為1
1
//意味最後一條SQL插入語句的自增ID是1
我們再來執行多條insert語句,看看結果如何。
insert into thb_test(keyword1) VALUES("bill");
insert into thb_test(keyword1) VALUES("bigtree");
select last_insert_id();
//輸出數值為3,意味最後一條SQL插入語句的自增ID是3
3
上面例子說明 執行兩個insert語句,last_insert_id()返回最後一個插入語句的結果。
mysql> select @@version;
+------------+
| @@version |
+------------+
| 5.5.24-log |
+------------+
1 row in set (0.17 sec)
我在 Mysql 5.5.24上驗證過了:last_insert_id()返回最後一個插入語句的自增結果。
網路上的說法:
”如果一句INSERT插入多條,返回的是第一個ID” 需要解釋下。
即如果用一條insert語句插入了多條語句,則該函式會返回第一個ID。
在下面的 MySQL 官方文件中,有下面的解釋,注意下綠色背景的SQL語句
https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id
mysql>USE test;
Database changed mysql>CREATE TABLE t (
->id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
->name VARCHAR(10) NOT NULL
->);
Query OK, 0 rows affected (0.09 sec) mysql>INSERT INTO t VALUES (NULL, 'Bob');
Query OK, 1 row affected (0.01 sec) mysql>SELECT * FROM t;
+----+------+ | id | name | +----+------+ | 1 | Bob | +----+------+ 1 row in set (0.01 sec) mysql>SELECT LAST_INSERT_ID();
+------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) mysql>INSERT INTO t VALUES
->(NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa');
Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM t; +----+------+ | id | name | +----+------+ | 1 | Bob | | 2 | Mary | | 3 | Jane | | 4 | Lisa | +----+------+ 4 rows in set (0.01 sec) mysql>SELECT LAST_INSERT_ID();
+------------------+ | LAST_INSERT_ID() | +------------------+ | 2 | +------------------+ 1 row in set (0.00 sec)