我正在开发一些需要与数据库交互的网站。我不会带来一个复杂的例子。我的问题实际上归结为:MySQL程序线程是否安全?如果我的站点上的一个客户端触发了一个过程,我可以认为它是原子的,还是会干扰另一个用户的另一个请求?
答案 0 :(得分:2)
取决于您是否使用SQL事务。在没有适当使用事务和实际序列化级别的情况下,过程可以在写入调用中公开某些数据,例如,在完成过程完成之前对其他查询/过程可见。
简而言之:如果您使用适当的事务级别
,给定的过程将只是原子的答案 1 :(得分:0)
数据库将为您处理并发。这通常通过事务完成 - 事务中的任何语句集都被视为原子并与其他进程隔离。在某些数据库中,存储过程将处于隐式事务中(因此您不需要声明一个) - 阅读RDBMS的文档。
有时这意味着记录被锁定而另一个进程试图使用它们。
您需要编写应用程序,以便检测此类事件并重试。
答案 2 :(得分:0)
这实际上取决于您的服务器如何配置为使用事务。根据您的数据使用方式以及您的应用程序是否可接受脏,不可重复或幻像读取,需要进行权衡。
答案 3 :(得分:0)
是
确保其工作线程之间的线程安全是DB的工作,确保应用程序线程之间的线程安全是您的工作。由于数据库服务器和应用程序之间存在分离,因此在这种情况下您无需担心线程安全。由于同时从您自己的应用程序中的多个线程进行访问,MySQL的数据锁定机制将阻止您破坏数据库中的数据。
线程安全更多的是修改内存中的数据,也可以在应用程序中的多个线程之间共享。由于数据库服务器是它自己独立的应用程序,它基本上可以保护您免受上面概述的情况的影响。