让我们看一下像这样的表:
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
要获得最后一次插入,但问题是,如果网站滞后会发生什么,并且查询之间存在时间差距?
示例:
12:00AM 0.000s -> "INSERT into table (VAR,FOO) VALUES ('test','anothertest')
12:00AM 0.500s -> "INSERT into table (VAR,FOO) VALUES ('xyz', '!!!!!
)`12:00AM 0.800s -> "SELECT * FROM table ORDER BY ID LIMIT 1
3中的查询不会从1返回ID,它将从2
返回ID我的问题是,是否有绝对安全的方法从插入的查询中获取值?
就像确认"测试一样,anothertest已成功插入表格,ID为20"
ID应该在php中作为变量提供,仅供参考
答案 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