2011-01-10 109 views
2

我已經做了一段時間的基本MySQL,但除此之外沒有什麼。我想知道是否有辦法讓行回顯給我,或者當我向表格中插入新行時。基本上我有一個帶有自動編號字段的表格,我希望能夠儘快且無痛地獲得該自動編號。如果我不能將行返回給我,是否還有其他事情我應該做,而不是僅僅爲最高的autonum運行第二個查詢?這不會允許表格被其他進程或用戶更新的(輕微的,非常非常輕微的)機會,並且這不是正確的數字嗎?目前,我只是搜索一行內容,而我剛剛輸入的內容,甚至似乎導致我的問題。有沒有辦法讓MySQL返回INSERT命令產生的行?

我使用PHP 5.1和MySQL 5.0.45它看起來像。

感謝您的幫助。

+0

您正在尋找LAST_INSERT_ID()http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id – 2011-01-10 23:09:39

+4

注意:如果您」重新談論如何在PHP中獲取這些信息,請使用PHP的mysql_insert_id函數 - **不要嘗試從PHP **中發出「LAST_INSERT_ID()」SQL查詢。 – 2011-01-10 23:12:15

+1

@middaparka:關心積分的人不會回答他的問題。欣賞好問題和對知識感興趣的人不關心點。 – 2011-01-10 23:17:22

回答

5

你可以使用LAST_INSERT_ID()這是當前連接的範圍內工作的ID。

生成的ID在每個連接的基礎上保存在服務器中。這意味着該函數返回給定客戶端的值是爲該客戶端影響AUTO_INCREMENT列的最新語句生成的第一個AUTO_INCREMENT值。即使它們生成自己的AUTO_INCREMENT值,該值也不會受到其他客戶端的影響。此行爲可確保每個客戶端都可以檢索自己的ID,而不必關心其他客戶端的活動,而無需鎖定或事務。

更多信息here

0

要使用mysql_insert_id是可以的,但是您確實想要避免競爭條件,只需在插入後使用剛剛插入的值進行選擇即可。如果這些值不可能是唯一的,則還要插入先前計算的時間戳。 http://www.php.net/manual/en/function.mysql-insert-id.php#95584

<?php 
$date = date('U'); 
$db->query("INSERT INTO TABLE table VALUES('', 'a', 'b', 'c', 'd', '". $date ."'"); 
$res = $db->query("SELECT id FROM table WHERE a_col = 'a' AND b_col = 'b' AND c_col = 'c' AND d_col = 'd' AND temp_id = '".$date."'"); 
?> 
相關問題