Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL过程是线程安全的吗?_Mysql_Sql_Multithreading - Fatal编程技术网

MySQL过程是线程安全的吗?

MySQL过程是线程安全的吗?,mysql,sql,multithreading,Mysql,Sql,Multithreading,我正在开发一些需要与数据库交互的网站。我不会在这里举一个复杂的例子。我的问题实际上归结为:MySQL过程是线程安全的吗?如果我站点上的一个客户端触发了一个过程,我可以假定它是原子的,还是会干扰另一个用户的另一个请求?数据库将为您处理并发性。这通常是通过事务完成的——事务中的任何语句集都被认为是原子的,并与其他进程隔离。在某些数据库中,存储过程将位于隐式事务中(因此不需要声明一个事务)——请阅读RDBMS的文档 有时,这意味着当另一个进程尝试使用记录时,记录被锁定 您需要编写应用程序,以便它能够检

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

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

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


您需要编写应用程序,以便它能够检测此类事件并重试

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


简而言之:只有在使用适当的事务级别时,给定的过程才会是原子的,这实际上取决于服务器如何配置为使用事务。根据您的数据如何使用以及是否脏、不可重复或幻像读取对应用程序都可以接受,可以考虑权衡。

<是。

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


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

mysql存储过程中的局部变量是线程安全的吗?我在mysql中使用连接池怎么样?哪个事务级别对原子过程有帮助?