的文章首先简单介绍了MySQL中事务的概念,指的是:用于实现某种行为的SQL语句的组合,可以是单条SQL语句,也可以是多条SQL语句。就像线程一样,MySQL服务器允许并发执行多个事务来更新某些数据。为了保证安全,MySQL提供了四种隔离级别来限制不同事务之间的干扰。四种隔离级别如下(从低到高):未提交读(readuncommitted)已提交读(readcommitted)可重复读(repeatableread)可序列化(serializable)下面将按顺序进行演示。**准备工作**由于我本地服务器只有一个root用户,为了后续的演示操作,需要新建一个用户testB,并赋予相应的权限。为了方便起见,下面将root和testB发起的事务分别称为A和B。1.Readuncommitted(读未提交)分别以root用户和testB登录,使用表t_ss作为实验表。通过查询可以看到表t_ss是空的。设置root和testB的隔离级别为readuncommitted(未提交读)。然后分别在root和testB中启动事务A和B,然后往B中的表t_ss中插入一条数据,此时B中的事务还没有提交(commit),我们查A中的表,并且我们可以看到,即使B的事务还没有提交,在A中也可以查询到事务B插入的数据。至此,大家应该能理解readuncommitted(读未提交)的含义了。一般来说,即使事务B没有提交,其他事务也可以读到事务B更新的数据,也就是可以读到事务还没有提交的数据。数据。这是最低级别的事务隔离级别。二、读提交(readcommitted)设置root和testB的事务隔离级别为读提交(readcommitted)。同样开启两个事务,在B中插入另一条数据,此时事务B还没有提交。在A查询时,发现查询不到B新插入的数据。事务B提交后,A成功读取B插入的数据,总结一下,在读提交(readcommitted)级别,其他事务只能读取事务B提交的数据,没有提交则无法读取。这是大多数数据库的默认隔离级别。3.可重复读(repeatableread)设置事务隔离级别为可重复读(repeatableread),单独启动事务。A先查表,有两条数据,然后B插入一条数据commit,A再查表,结果还是两条数据,但是在B里查表的结果是三条数据块。(箭头表示命令执行顺序)也就是说,当数据库处于可重复读(repeatableread)时,无论事务B是否有插入数据,同一个事务前后两次读取的数据必须是一致的。它是MySQL的默认隔离级别。4.Serializable(序列化)设置root的隔离级别为Serializable(序列化),并启动事务。当在事务A中查询到表t_ss还没有提交时,事务B一直在等待,过了指定时间就会报错,提示超时。事务A提交后,事务B可以成功插入数据。Serializable(序列化)是最高级别,需要最严格的事务隔离级别。在这种情况下,其他事务必须等待当前事务提交后才能执行。以上就是四种事务隔离级别,希望能给大家带来一点帮助。
