2011-09-19 15 views
2

我正在开发一些需要与数据库交互的网站。我不会带来一个复杂的例子。我的问题实际上归结为:MySQL过程线程是否安全?如果我的网站上的一个客户端触发了一个过程,我能否认为它是原子的,还是会干扰来自另一个用户的另一个请求?是一个MySQL程序线程安全吗?

回答

2

取决于您是否使用SQL事务。在没有适当使用事务和实际的序列化级别的情况下,它可能会在一次写入调用中公开一些数据,例如,在完成完成过程之前,其他查询/过程可以看到这些数据。

总之

:如果您使用适当的交易水平给定的程序将仅是原子

+1

哪个事务级别有助于原子程序? – znlyj

0

数据库将为您处理并发。这通常是通过事务完成的 - 事务中的任何一组语句都被视为原子并与其他进程隔离。在某些数据库中,存储过程将处于隐式事务中(因此您无需声明它) - 请阅读RDBMS的文档。

有时这意味着记录被锁定,而另一个进程尝试使用它们。

您将需要编写应用程序,以便它可以检测到这种情况并重试。

0

这真的取决于你的服务器是如何配置使用的交易。根据您的数据使用方式以及您的应用程序是否可以接受肮脏,不可重复或幻读是可以接受的,需要权衡考虑。

0

是的。

确保其工作线程中的线程安全是数据库的工作,并且确保您的应用程序线程之间的线程安全是您的工作。由于数据库服务器和应用程序之间存在分离,所以在这种情况下,您不必担心线程安全。 MySQL的数据锁定机制可以防止由于您自己的应用程序中多个线程的同时访问而破坏数据库中的数据。

线程安全性更多的是修改内存中的数据,这也是在您的应用程序中的多个线程之间共享的。由于数据库服务器是它自己的独立应用程序,它基本上可以保护您免受上述情况的影响。

+0

是一个mysql存储过程中的局部变量线程安全吗?如何使用MySQL的连接池? – znlyj