Mysql函數(shù)Last_insert_id()語法介紹
Mysql函數(shù)可以實(shí)現(xiàn)許多我們需要的功能,下面介紹的Mysql函數(shù)Last_insert_id()就是其中之一,希望對您學(xué)習(xí)Mysql函數(shù)能有所幫助。
自動(dòng)返回最后一個(gè)INSERT或 UPDATE 查詢中 AUTO_INCREMENT列設(shè)置的第一個(gè)表發(fā)生的值。
- mysql> SELECT LAST_INSERT_ID();
- -> 195
產(chǎn)生的ID 每次連接后保存在服務(wù)器中。這意味著函數(shù)向一個(gè)給定客戶端返回的值是該客戶端產(chǎn)生對影響AUTO_INCREMENT列的最新語句第一個(gè)AUTO_INCREMENT值的。這個(gè)值不能被其它客戶端影響,即它們產(chǎn)生它們自己的AUTO_INCREMENT值。這個(gè)行為保證了你能夠找回自己的 ID 而不用擔(dān)心受其它客戶端的影響力,而且不需要加鎖處理。
假如你使用一個(gè)非“magic”值來更新某一行的AUTO_INCREMENT 列,則LAST_INSERT_ID() 的值不會(huì)變化(換言之, 一個(gè)不是 NULL也不是 0的值)。
重點(diǎn): 假如你使用一條INSERT語句插入多個(gè)行, LAST_INSERT_ID() 只返回插入的第一行數(shù)據(jù)時(shí)產(chǎn)生的值。其原因是這使依靠其它服務(wù)器復(fù)制同樣的 INSERT語句變得簡單。
例如:
- 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)
雖然第二個(gè)問詢將3 個(gè)新行插入 t, 對這些行的第一行產(chǎn)生的 ID 為 2, 這也是 LAST_INSERT_ID() 返回的值
假如使用 INSERT IGNORE而記錄被忽略,則AUTO_INCREMENT 計(jì)數(shù)器不會(huì)增量,而 LAST_INSERT_ID() 返回0, 這反映出沒有插入任何記錄。
【編輯推薦】