一、通过命令设置隔离级别
# 设置全局隔离级别
set global transaction isolation level REPEATABLE READ;
set global transaction isolation level READ COMMITTED;
set global transaction isolation level READ UNCOMMITTED;
set global transaction isolation level SERIALIZABLE;
#设置会话隔离级别
set session transaction isolation level REPEATABLE READ;
set session transaction isolation level READ COMMITTED;
set session transaction isolation level READ UNCOMMITTED;
set session transaction isolation level SERIALIZABLE;
数据库的几种隔离级别:
READ UNCOMMITTED(读未提交数据):
允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和幻读问题。
READ COMMITTED(读已提交数据):
只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会出现不可重复读和幻读问题。
REPEATABLE READ(可重复读):
确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题。
SERIALIZABLE(序列化):
确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,可避免所有并发问题,但性能非常低。
二、通过配置文件设置隔离级别
[mysqld]
transaction-isolation = REPEATABLE-READ
transaction-isolation = READ-COMMITTED
transaction-isolation = READ-UNCOMMITTED
transaction-isolation = SERIALIZABLE
三、查看隔离级别
SELECT @@GLOBAL.transaction_isolation
SELECT @@SESSION.transaction_isolation
show variables like '%iso%';
四、mysql8.0 通过配置文件修改隔离级别
在CentOS 7.9上安装的MySQL 8.0,要通过配置文件修改事务隔离级别,你需要编辑MySQL的配置文件my.cnf(在非Windows系统上通常位于/etc/my.cnf或/etc/mysql/my.cnf)。
以下是修改隔离级别的步骤:
打开my.cnf文件。
在[mysqld]部分添加或修改transaction-isolation选项。例如,要设置隔离级别为READ-COMMITTED,你可以添加以下行:
[mysqld]
transaction-isolation = READ-COMMITTED
保存并关闭文件。
重启MySQL服务以使更改生效:
sudo systemctl restart mysqld
验证更改是否生效。登录到MySQL,并执行以下命令:
mysql -u root -p
然后,在MySQL提示符下执行:
SHOW VARIABLES LIKE 'transaction_isolation';