gpt4 book ai didi

php - MySQL 以什么顺序处理来自 2 个不同连接的查询?

转载 作者:行者123 更新时间:2023-11-29 04:01:55 39 4
gpt4 key购买 nike

假设我有两个文件 file1.phpfile2.php

file1.php 有以下查询:

-query 1
-query 2
-query 3

file2.php 有以下查询:

-query 4
-query 5
-query 6

假设一位访问者运行第一个脚本,另一位访问者同时运行第二个脚本。

我的问题是:在执行第一个脚本的所有查询时,MySQL 是否接收一个连接并将第二个连接保持在队列中,然后转到第二个连接?

MySQL 处理查询的顺序是 1、2、3、4、5、6(或 4、5、6、1、2、3)还是任意顺序?

我该怎么做才能确保 MySQL 在移动到另一个连接之前执行一个连接的所有查询?

我很关心数据的完整性。例如,共享同一帐户的两个用户的帐户余额。他们可能会看到相同的值,但如果他们同时发送查询,这可能会导致一些意想不到的结果

最佳答案

数据库可以接受来自多个并行连接的查询。它可以以任意顺序执行查询,甚至可以同时执行。隔离级别定义了并行执行对结果的影响程度:

如果不使用事务,查询可以并行执行,最强的隔离级别仍然保证查询将返回相同的结果就好像 它们不是并行执行的,但仍然可以任何顺序运行(只要它们在每个连接中排序)

如果使用事务,数据库可以保证更多:

最强的隔离级别是可序列化,这意味着结果将好像没有两个事务并行运行,但性能会受到影响。

最弱的隔离级别相当于根本不使用事务;任何事情都可能发生。

如果要保证数据的一致性,使用事务:

START TRANSACTION;
...
COMMIT;

默认隔离级别是read-commited,这大致等同于serializable,普通的SELECT发生在事务外。如果您对事务中的每个 SELECT 使用 SELECT FOR UPDATE,您将获得 serializable

参见:http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read

关于php - MySQL 以什么顺序处理来自 2 个不同连接的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325894/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com