【问题标题】:Mysql fetch the row just insertedMysql 获取刚刚插入的行
【发布时间】:2013-07-22 21:43:14
【问题描述】:

所以我正在设计一个向 MySQL 数据库中插入一行的函数。该表有一个启用了自动增量的主键。所以我不插入该列的值。但是 PK 是整个表中唯一的唯一列。如何获取我刚刚插入的行?

如果函数在小流量中我看不到问题,但是当它的负载越来越重时,我可以看到一个潜在的错误:假设我插入了一行并且 DB 的 AI 值为 1,那么在fetch 函数开始请求“最新插入的行”,插入另一行,AI 值为 2。现在如果 Insert 1 的 fetch 函数运行,将获取第 2 行。我知道时间间隔需要非常小才能让这个错误真正存在,但是有没有更好的方法来获取正确的行,同时维护只有 PK 作为唯一列的表? (我不想实现额外的校验和列,尽管我认为这是一个潜在的解决方案。)

【问题讨论】:

  • SELECT LAST_INSERT_ID();here

标签: mysql insert row primary-key fetch


【解决方案1】:

这不是很合乎逻辑,但你可以:

insert into `table1` (`column1`,`column2`,`column3`) VALUES ("value1","value2","value3");
select * from `table1` where `PK`=LAST_INSERT_ID();

相反,您应该只按照 jurgen d 的建议 SELECT LAST_INSERT_ID(); 并重用其他数据

【讨论】:

  • 谢谢!正是我想要的!现在我又过上了幸福的生活。
【解决方案2】:

请阅读这个php函数mysqli_insert_id()

对不起,我愚蠢地假设您使用的是 php。 MySQL 还有一个原生的 LAST_INSERT_ID() 函数。

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

参考; http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id

【讨论】:

  • 仅链接的答案在这里被认为是低质量的。请扩大您的答案或发表评论。顺便说一句,你甚至不知道这里是否使用了 PHP。
  • 感谢@amaster507,但我们可以将答案限制在 MySQL 级别吗?
  • @juergend 抱歉,我已经扩展了 MySQL 函数,并提供了参考文献中的引用,它比我自己解释得更好。
  • @TheJinStudio 请直接从他们的文档中查看 MySQL 解决方案的修订答案和解释。
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2011-05-20
  • 2011-07-31
  • 2011-07-11
  • 2014-04-19
相关资源
最近更新 更多