插入后选择MySQL

时间:2014-08-24 09:13:15

标签: mysql sql select

让我们看一下像这样的表:

  

ID = INT,AutoIncrement

     

VAR = VARCHAR,65

     

FOO = VARCHAR,65

我想插入新内容,并获取自动生成ID,以供进一步使用。

我目前的解决方案是:

1。INSERT into table (VAR,FOO) VALUES ('test','anothertest')

2。SELECT * FROM table ORDER BY ID LIMIT 1

要获得最后一次插入,但问题是,如果网站滞后会发生什么,并且查询之间存在时间差距?

示例:

  1. 12:00AM 0.000s -> "INSERT into table (VAR,FOO) VALUES ('test','anothertest')
  2. 12:00AM 0.500s -> "INSERT into table (VAR,FOO) VALUES ('xyz', '!!!!!)`
  3. 12:00AM 0.800s -> "SELECT * FROM table ORDER BY ID LIMIT 1
  4. 3中的查询不会从1返回ID,它将从2

    返回ID

    我的问题是,是否有绝对安全的方法从插入的查询中获取值?

    就像确认"测试一样,anothertest已成功插入表格,ID为20"

    ID应该在php中作为变量提供,仅供参考

3 个答案:

答案 0 :(得分:1)

由于你提到PHP,通常有一个特定的功能来实现它。如果您使用的是mysqli驱动程序,请参阅mysqli_insert_id

修改:根据上面链接的文档The value of the AUTO_INCREMENT field that was updated by the previous query. Returns zero if there was no previous query on the connection or if the query did not update an AUTO_INCREMENT value.由于它是在讨论连接上的查询,我会将其解释为对其他连接上的查询(即来自其他请求的查询)不会影响返回的值。只要你在插入之后直接调用它(在你做任何其他事情之前),那么它应该可以工作。

警告:我只是在这里解释文档。我自己还没有真正测试其他电话。虽然不会那么困难 - 只需要一个执行插入的脚本,然后睡眠然后获取ID,让您有时间在睡眠期间再次插入。

答案 1 :(得分:0)

在php中我使用mysql_insert_id();

在稍后的MySql插入/更新中,我使用LAST_INSERT_ID()

它完全一样。

答案 2 :(得分:-1)

尝试使用Scope_Identity()。这将返回上次自动生成的ID。

此链接包含更多信息:http://msdn.microsoft.com/en-us/library/ms190315.aspx