我已经做了一段时间的基本MySQL,但除此之外什么也没做过。我想知道,当我向表中插入一个新行时,是否有一种方法可以让行回显给我,或者其他什么。基本上,我有一个带有自动编号字段的表,我希望能够尽可能快速、轻松地获取自动编号。如果我不能将行返回给我,除了为最高autonum运行第二次查询之外,还有什么我应该做的吗?这会不会允许表被其他进程或用户更新的可能性(很小,非常非常小),而这不再是正确的数字?目前,我只是搜索与我刚刚输入的内容完全相同的行,即使这样似乎也会给我带来问题。
我使用的是PHP5.1和MySQL 5.0.45。
谢谢你的帮助。
发布于 2011-01-11 07:10:05
尝试此函数:mysql_insert_id
它返回在最后一次查询中生成的ID
发布于 2011-01-11 07:13:39
您可以使用在当前连接范围内工作的LAST_INSERT_ID()。
生成的ID以每个连接为基础在服务器中维护。这意味着函数返回给给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。该值不会受到其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值也是如此。此行为确保每个客户端都可以检索自己的ID,而不需要关心其他客户端的活动,也不需要锁或事务。
更多信息here。
发布于 2011-01-11 07:18:59
使用mysql_insert_id是可以的,但是如果你真的想要避免竞争条件,只需在插入之后用你刚刚插入的值执行一次select操作。如果这些值不是唯一的,还可以插入先前计算的时间戳。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."'");
?>https://stackoverflow.com/questions/4652555
复制相似问题