我正在尝试让一些 SQL Server 代码也在 MySQL 上运行,但我刚遇到了这个陷阱。Google 说通常的做法是先执行插入语句,然后使用 last_insert_ID() 函数查询刚刚写入的记录。
然而,在多用户环境下,这种方法似乎不太安全。因为在那个很短的时间窗口内,其他用户可能会插入一些数据并导致返回值错误。那么,如何安全地插入数据并获取插入记录的关键字呢?
我正在尝试让一些 SQL Server 代码也在 MySQL 上运行,但我刚遇到了这个陷阱。Google 说通常的做法是先执行插入语句,然后使用 last_insert_ID() 函数查询刚刚写入的记录。
然而,在多用户环境下,这种方法似乎不太安全。因为在那个很短的时间窗口内,其他用户可能会插入一些数据并导致返回值错误。那么,如何安全地插入数据并获取插入记录的关键字呢?
来自 LAST_INSERT_ID(), LAST_INSERT_ID(expr)
生成的ID是在服务器上以每个连接为基础进行维护的。这意味着函数返回给指定客户端的值是该客户端最近一次影响AUTO_INCREMENT列并且是由该客户端执行的语句生成的第一个AUTO_INCREMENT值。即使其他客户端生成了自己的AUTO_INCREMENT值,也不能影响此值。这种行为确保每个客户端都可以检索到自己的ID,并且无需考虑其他客户端的活动,也无需锁定或事务。
因此,除非多个用户的插入恰好通过同一个数据库连接进行,否则您不用担心。
echo
插入吗?在Bash中,我需要两个echo。一个用于插入,另一个用于Last_Inserted_Id。 - TheAlphaGhost