mysql默认事务隔离级别

mysql默认事务隔离级别,第1张

SQL标准中支持4种事务隔离级别,READ_UNCOMMITTED(读未提交),READ_COMMITTED(读已提交),REPEATABLE_READ(可重复读),SERIALIZABLE(串行读),MySQL innodb引擎支持全部这4种事务隔离级别。

工具/原料:

联想Y7000P

Windows10

MySQL6.0

1、启动命令行窗口,连接MySQL数据

图示,通过MySQL提供的客户端命令mysql连接MySQL数据库。

2、通过系统变量查询数据库当前事务隔离级别

图示,通过查询数据库提供的系统变量 tx_isolation 或 transaction_isolation 的值即可获取当前的事务隔离级别。MySQL数据库默认的事务隔离级别是REPEATABLE_READ (可重复读)。

3、设置本次会话的事务隔离级别

图示,通过命令set session transaction isolation level可以设置本次会话的事务隔离级别,该设置不会影响其他会话,并且设置会随着当前会话的结束而结束。

4、设置全局会话的事务隔离级别

图示,通过命令set global transaction isolation level可以设置全局会话的事务隔离级别,该设置不会影响当前已经连接的会话,设置完毕后,新打开的会话,将使用新设置的事务隔离级别。

5、设置一次 *** 作的事务隔离级别

图示,通过命令set transaction isolation level可设置下一次事务 *** 作的隔离级别,该设置会随着下一次事务的提交而失效。

select @@tx_isolation

该语句可以查看数据库的隔离级别。

SQL中定义有四个隔离级别:

READ UNCOMMITTED 读未提交 ,该隔离级下可以看见其他用户正在修改但是还没有提交的数据,会给用户造成修改丢失,并且会脏读数据。

READ COMMITTED 读已提交,该隔离级别下数据不可重复读,并且会幻读。

REPEATABLE READ 可重复读,该隔离级别为MySQL默认的隔离级别。该隔离级别会存在幻读。

SERIALIZABLE 可读不可写。可读取数据,要写入数据必须要等待另一个事务结束。不存在脏读,不可重复读,幻读的问题。

事务隔离级别主要解决一下问题:

脏读:A、B两个事务,事务A修改某一个数据并将其写回磁盘,事务B读取同一数据后,A由于某种原因被撤销,事务回滚,这时A修改过的数据恢复原值。B读取到的数据和数据库中的数据不一致,所以B读到的数据就是脏数据。

不可重复读:A读取数据后,B事务执行更新 *** 作,使A无法再现前一次的读取结果。不可重复读主要包括三种情况:

(1)事务A读取某一数据后,事务B对其进行修改,当A再次读该数据时,得到与前一次不同的值。

(2)事务A按一定条件从数据库中读取了某些数据,事务B 删除了其中部分数据,当A 再按照相同的条件读取数据时,数据变少了。

(3)事务A按一定条件读取数据后,事务B插入了一些数据,A再次读取时数据会变多。

第二种情况和第三种情况也称为幻读。

修改丢失:两个事务A、B读入同一数据并修改,A提交的修改结果被B提交的修改覆盖,导致A修改的数据丢失。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8624870.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存