【问题标题】:MySQL select after insertMySQL 插入后选择
【发布时间】:2014-10-17 16:12:31
【问题描述】:

让我们假设一个表格如下:

ID = INT,自动增量

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

3 中的查询不会返回来自 1 的 ID,它会返回来自 2 的 ID

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

like一个确认“测试,anothertest已成功插入表,ID为20”

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

【问题讨论】:

  • 使用事务来确保
  • 怎么样? @Undefined_variable

标签: mysql sql select


【解决方案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 的脚本,让您有时间在睡眠期间进行另一次插入。

【讨论】:

  • mysqli_insert_id 会在插入时设置,还是在调用时设置?,如果在调用时设置,我们会遇到和手动操作一样的问题
【解决方案2】:

在 php 中我使用 mysql_insert_id();

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

完全一样。

【讨论】:

    【解决方案3】:

    尝试使用 Scope_Identity()。这将返回最后一个自动生成的 id。

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

    【讨论】:

    • 问题被标记为 mysql,所以我怀疑 MS SQL Server 解决方案是否可行!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多