首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法让MySQL返回INSERT命令生成的行?

问有没有办法让MySQL返回INSERT命令生成的行?
EN

Stack Overflow用户
提问于 2011-01-11 07:08:00
回答 3查看 135关注 0票数 2

我已经做了一段时间的基本MySQL,但除此之外什么也没做过。我想知道,当我向表中插入一个新行时,是否有一种方法可以让行回显给我,或者其他什么。基本上,我有一个带有自动编号字段的表,我希望能够尽可能快速、轻松地获取自动编号。如果我不能将行返回给我,除了为最高autonum运行第二次查询之外,还有什么我应该做的吗?这会不会允许表被其他进程或用户更新的可能性(很小,非常非常小),而这不再是正确的数字?目前,我只是搜索与我刚刚输入的内容完全相同的行,即使这样似乎也会给我带来问题。

我使用的是PHP5.1和MySQL 5.0.45。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-11 07:10:05

尝试此函数:mysql_insert_id

它返回在最后一次查询中生成的ID

票数 4
EN

Stack Overflow用户

发布于 2011-01-11 07:13:39

您可以使用在当前连接范围内工作的LAST_INSERT_ID()。

生成的ID以每个连接为基础在服务器中维护。这意味着函数返回给给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值。该值不会受到其他客户端的影响,即使它们生成自己的AUTO_INCREMENT值也是如此。此行为确保每个客户端都可以检索自己的ID,而不需要关心其他客户端的活动,也不需要锁或事务。

更多信息here。

票数 5
EN

Stack Overflow用户

发布于 2011-01-11 07:18:59

使用mysql_insert_id是可以的,但是如果你真的想要避免竞争条件,只需在插入之后用你刚刚插入的值执行一次select操作。如果这些值不是唯一的,还可以插入先前计算的时间戳。http://www.php.net/manual/en/function.mysql-insert-id.php#95584

代码语言:javascript
复制
<?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."'");
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4652555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档