当前位置: 首页 > 面试题库 >

MySql的Select Last_Insert_ID的线程安全

东郭自珍
2023-03-14
问题内容

我试图使一些MSSQL代码也可以在MYSQL上运行,而我只是碰到了这个地雷。谷歌表示,通常的方法是简单地进行插入,然后选择last_insert_ID()来查找所写的内容。

但是,这在多用户环境中并不令我感到安全。那里有一个狭窄的窗口,另一个用户可以在其中插入一些东西并导致错误的返回值。如何 安全
插入并获取插入记录的密钥?


问题答案:

https://dev.mysql.com/doc/refman/5.5/zh-CN/information-
functions.html#function_last-insert-
id

生成的ID在 每个连接 的服务器中维护。这意味着函数返回给定客户端的值 是为该客户端 影响AUTO_INCREMENT列
最新语句生成的第一个AUTO_INCREMENT值。即使其他客户端生成自己的AUTO_INCREMENT值,该值也不会受到其他客户端的影响。此行为可确保每个客户端都可以检索自己的ID,而不必担心其他客户端的活动,也不需要锁或事务。

因此,除非您为多个用户执行的插入操作恰巧是在同一数据库连接上完成的,否则您不必担心。



 类似资料:
  • 我正在尝试制作一些SQL 不过,我觉得这在多用户环境中并不安全。那里有一个狭窄的窗口,另一个用户可以在那里插入一些东西,并导致一个错误的返回值。如何安全地插入并获取插入记录的密钥?

  • 问题内容: 我正在开发一些需要与数据库交互的网站。我不会在这里举一个复杂的例子。我的问题实际上归结为:MySQL过程线程安全吗?如果我站点上的一个客户端触发了一个过程,我可以认为它是原子的,还是会干扰其他用户的另一个请求? 问题答案: 取决于您是否正在使用SQL事务。在没有适当使用事务和实际序列化级别的情况下,过程可能会在写调用中公开某些数据,例如,在完整过程完成之前,其他查询/过程可以看到这些数

  • 问题内容: 标准的MySQL JDBC驱动程序是线程安全的吗?具体来说,我想在所有线程中使用单个连接,但是每个语句将仅在单个线程中使用。是否存在某些安全场景,而有些则不安全?您在这里有什么经验? 问题答案: 每个连接开始/提交事务。除非您正在做一些非常具体的事情(我真的想不出一个可以说实话的例子),否则最好使用连接池和每个线程的连接。

  • 本文向大家介绍CentOS7离线安装MySQL的教程详解,包括了CentOS7离线安装MySQL的教程详解的使用技巧和注意事项,需要的朋友参考一下 1.删除原有的mariadb,不然mysql装不进去 1.在https://dev.mysql.com/downloads/mysql/选择为Red Hat Enterprise Linux 7 / Oracle Linux 7 ,把os的版本选择为a

  • 我找到了关于线程安全的代码,但它没有来自给出示例的人的任何解释。我想知道为什么如果我不在“count”之前设置“synchronized”变量,那么count值将是非原子的(总是=200是期望的结果)。谢谢

  • 问题内容: 我知道Java中的双重锁定已损坏,因此使Java中的Singletons线程安全的最佳方法是什么?我想到的第一件事是: 这样行吗?如果是这样,那是否是最好的方法(我想这取决于具体情况,因此说明何时使用特定技术是最好的方法) 问题答案: Josh Bloch建议使用单元素类型实现单例(请参阅 有效的Java 2nd Edition,第3项:使用私有构造函数或枚举类型强制单例属性 )。 有