1. 程式人生 > >MySQL 自增ID值 獲取的方法

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)