|
LAST_INSERT_ID() LAST_INSERT_ID(expr) 自動返回最后一個INSERT或 UPDATE 問詢?yōu)?AUTO_INCREMENT列設置的第一個 發(fā)生的值。 mysql> SELECT LAST_INSERT_ID(); -> 195 產(chǎn)生的ID 每次連接后保存在服務器中。這意味著函數(shù)向一個給定客戶端返回的值是該客戶 端產(chǎn)生對影響AUTO_INCREMENT列的最新語句第一個 AUTO_INCREMENT值的。這個值不能被其 它客戶端影響,即使它們產(chǎn)生它們自己的 AUTO_INCREMENT值。這個行為保證了你能夠找回 自己的 ID 而不用擔心其它客戶端的活動,而且不需要加鎖或處理。(因為last_insert_id是針對connection的) 假如你使用一個非“magic”值來更新某一行的AUTO_INCREMENT 列,則LAST_INSERT_ID() 的 值不會變化(換言之, 一個不是 NULL也不是 0的值)。 重點: 假如你使用單INSERT語句插入多個行, LAST_INSERT_ID() 只返回插入的第一行產(chǎn) 生的值。其原因是這使依靠其它服務器復制同樣的 INSERT語句變得簡單。 例如: mysql> USE test; Database changed mysql> CREATE TABLE t ( -> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -> name VARCHAR(10) NOT NULL -> ); mysql> INSERT INTO t VALUES (NULL, 'Bob'); mysql> SELECT * FROM t;+----+------+| id | name |+----+------+| 1 | Bob | mysql> SELECT LAST_INSERT_ID(); -> 1; mysql> INSERT INTO t VALUES (NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa'); mysql> SELECT * FROM t;+----+------+| id | name || 1 | Bob || 2 | Mary || 3 | Jane || 4 | Lisa |+----+------+ mysql> SELECT LAST_INSERT_ID(); ->2; 雖然第二個問詢將3 個新行插入 t, 對這些行的第一行產(chǎn)生的 ID 為 2, 這也是 LAST_INSERT_ID()返回的值。 假如你使用 INSERT IGNORE而記錄被忽略,則AUTO_INCREMENT 計數(shù)器不會增量,而LAST_INSERT_ID() 返回0, 這反映出沒有插入任何記錄。 常用用法 若給出作為到LAST_INSERT_ID()的參數(shù)expr ,則參數(shù)的值被函數(shù)返回,并作為被 LAST_INSERT_ID()返回的下一個值而被記憶。這可用于模擬序列: 創(chuàng)建一個表,用來控制順序計數(shù)器并使其初始化:mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0); 使用該表產(chǎn)生這樣的序列數(shù) : mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); mysql> SELECT LAST_INSERT_ID(); ->1; UPDATE 語句會增加順序計數(shù)器并引發(fā)向LAST_INSERT_ID() 的下一次調用,用來返回升級后的值。 SELECT 語句會檢索這個值。 mysql_insert_id() C API函數(shù)也可用于獲取這個值。 你可以不用調用LAST_INSERT_ID()而產(chǎn)生序列,但這樣使用這個函數(shù)的效用在于 ID值被保存在服務器中,作為自動產(chǎn)生的值。它適用于多個用戶,原因是多個用戶均可使用 UPDATE語句并用SELECT語句(或mysql_insert_id()),得到他們自己的序列值,而不會影響其它產(chǎn)生他們自己的序列值的客戶端或被其它產(chǎn)生他們自己的序列值的客戶端所影響。 注意, mysql_insert_id() 僅會在INSERT 和UPDATE語句后面被升級, 因此你不能在執(zhí)行了其它諸如SELECT或 SET 這樣的SQL語句后使用 C API 函數(shù)來找回 LAST_INSERT_ID(expr) 對應的值。
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|