1、什么是事务隔离级别
在MySQL中,每次事务执行时,都会有多个并发的事务同时执行操纵共享资源的操作,如果这些事务操作不做好协调,就容易导致数据不一致的问题。MySQL提供了四种事务隔离级别,分别是READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE,可以通过设置不同的隔离级别来控制并发操作的一致性和隔离性。各种隔离级别之间有着不同的使用场景和影响。
2、如何修改事务隔离级别
2.1、修改全局默认隔离级别
MySQL全局默认的隔离级别是REPEATABLE READ,可以通过修改my.cnf配置文件来修改全局默认隔离级别。可以按以下步骤操作:
步骤1:查找my.cnf配置文件的位置。
mysql --help | grep my.cnf
步骤2:使用vim或者其他编辑器打开my.cnf文件,添加一行代码。
transaction-isolation = READ-COMMITTED
说明:这里将全局默认隔离级别修改成了READ-COMMITTED隔离级别,可以根据需求自行选择修改为其他隔离级别。
修改完成后,需要重启MySQL服务才能生效。
2.2、修改单个会话隔离级别
可以通过执行SET TRANSACTION语句修改当前会话的事务隔离级别。可以按照以下步骤操作:
步骤1:登录MySQL。
mysql -u root -p
步骤2:执行以下语句修改当前会话的事务隔离级别。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
说明:这里将当前会话的事务隔离级别修改为READ UNCOMMITTED隔离级别,可以根据需求自行选择修改为其他隔离级别。
修改完成后,当前会话下的事务就使用了新的隔离级别。
2.3、修改数据库默认隔离级别
可以通过修改数据库引擎来设置默认隔离级别。可以按照以下步骤操作:
步骤1:登录MySQL。
mysql -u root -p
步骤2:执行以下语句修改数据库引擎和默认隔离级别。
USE database_name;
ALTER DATABASE database_name ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
说明:这里将数据库引擎设置为InnoDB,并将默认隔离级别设置为READ COMMITTED隔离级别,可以根据需求自行选择修改为其他隔离级别。
修改完成后,新开的会话都会使用新设置的隔离级别。