我想做些sql 服务器代码也在mysql上运行,我刚刚发现了这个地雷。google说,通常的方法是简单地插入,然后选择last\u insert\u id()来找出所写的内容。不过,在多用户环境中,这对我来说并不安全。那里有一个狭窄的窗口,其他用户可以在其中插入一些内容并导致错误的返回值。如何安全地插入和获取插入记录的密钥?
taor4pac1#
从last \u insert \u id(),last \u insert \u id(expr)生成的id在服务器中按每个连接进行维护。这意味着函数返回给给定客户机的值是为影响该客户机的自动增量列的最新语句生成的第一个自动增量值。此值不受其他客户端的影响,即使它们生成自己的自动增量值。这种行为确保每个客户机都可以检索自己的id,而不必关心其他客户机的活动,也不需要锁或事务。因此,除非您为多个用户插入的内容恰好是通过同一个数据库连接进行的,否则您无需担心。
1条答案
按热度按时间taor4pac1#
从last \u insert \u id(),last \u insert \u id(expr)
生成的id在服务器中按每个连接进行维护。这意味着函数返回给给定客户机的值是为影响该客户机的自动增量列的最新语句生成的第一个自动增量值。此值不受其他客户端的影响,即使它们生成自己的自动增量值。这种行为确保每个客户机都可以检索自己的id,而不必关心其他客户机的活动,也不需要锁或事务。
因此,除非您为多个用户插入的内容恰好是通过同一个数据库连接进行的,否则您无需担心。