1

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

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

4

2 回答 2

4

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

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

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

于 2013-07-22T22:01:39.723 回答
1

请阅读这个 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

于 2013-07-22T21:46:38.183 回答