我已经做了一段时间的基本MySQL,但除此之外什么都没有。我想知道当我在表中插入一个新行时,是否有办法让行回显给我,或某事。基本上我有一个带有自动编号字段的表,我希望能够尽可能快速,轻松地获得该自动编号。如果我不能将行返回给我,还有什么我应该做的只是运行第二个查询以获得最高的autonum吗?这是不是允许某些其他进程或用户更新该表的(轻微的,非常非常轻微的),并且这不再是正确的数字?目前我只是搜索一行,其中包含我刚刚输入的内容,甚至这似乎都会给我带来问题。
我正在使用PHP 5.1和MySQL 5.0.45。
感谢您的帮助。
答案 0 :(得分:5)
您可以使用在当前连接范围内有效的LAST_INSERT_ID()
。
生成的ID基于每个连接在服务器中维护。这意味着函数返回给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。此值不受其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值。此行为可确保每个客户端都可以检索自己的ID,而无需关心其他客户端的活动,也无需锁定或事务。
更多信息here。
答案 1 :(得分:4)
尝试此功能:mysql_insert_id
返回上次查询中生成的ID
答案 2 :(得分: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."'");
?>