Mysql函數可以實現許多我們需要的功能,下面介紹的Mysql函數Last_insert_id()就是其中之一,希望對您學習Mysql函數能有所幫助。
自動返回最後一個INSERT或 UPDATE 查詢中 AUTO_INCREMENT列設置的第一個表發生的值。
- mysql> SELECT LAST_INSERT_ID();
- -> 195
產生的ID 每次連接後保存在服務器中。這意味著函數向一個給定客戶端返回的值是該客戶端產生對影響AUTO_INCREMENT列的最新語句第一個AUTO_INCREMENT值的。這個值不能被其它客戶端影響,即它們產生它們自己的AUTO_INCREMENT值。這個行為保證了你能夠找回自己的 ID 而不用擔心受其它客戶端的影響力,而且不需要加鎖處理。
假如你使用一個非“magic”值來更新某一行的AUTO_INCREMENT 列,則LAST_INSERT_ID() 的值不會變化(換言之, 一個不是 NULL也不是 0的值)。
重點: 假如你使用一條INSERT語句插入多個行, LAST_INSERT_ID() 只返回插入的第一行數據時產生的值。其原因是這使依靠其它服務器復制同樣的 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)
雖然第二個問詢將3 個新行插入 t, 對這些行的第一行產生的 ID 為 2, 這也是 LAST_INSERT_ID() 返回的值
假如使用 INSERT IGNORE而記錄被忽略,則AUTO_INCREMENT 計數器不會增量,而 LAST_INSERT_ID() 返回0, 這反映出沒有插入任何記錄。
MySQL DATEDIFF()語法介紹
MySQL日期的相關函數介紹
帶您了解mysql CONCAT()函數
MySQL字符串分割並拼接語句介紹
修改mysql默認字符集的方法