百木园-与人分享,
就是让自己快乐。

事务隔离性和隔离级别

隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离

事务的隔离级别有哪些?

一、概念

  • Read uncommitted(读未提交)
  • Read Committed(读已提交)
  • Repeatable Reads(可重复读)
  • Serializable(串行化)

Read uncommitted

读未提交:隔离级别最低的一种事务级别。在这种隔离级别下,会引发脏读、不可重复读和幻读。

Read Committed

读已提交读到的都是别人提交后的值。这种隔离级别下,会引发不可重复读和幻读,但避免了脏读。

Repeatable Reads

可重复读这种隔离级别下,会引发幻读,但避免了脏读、不可重复读。

Serializable

串行化是最严格的隔离级别。在Serializable隔离级别下,所有事务按照次序依次执行。脏读、不可重复读、幻读都不会出现。

 

 

 

二、操作

查看事务隔离级别

SHOW VARIABLES LIKE \'tx_isolation\';

查看全局的事务隔离级别

SHOW GLOBAL VARIABLES LIKE \'tx_isolation\';

使用系统变量查询

SELECT @@global.tx_isolation;SELECT @@session.tx_isolation;SELECT @@tx_isolation;

补充

MySql常用命令

    • 查询隔离级别select @@tx_isolation;

    • 设置手动提交set autocommit=0 ;

    • 查看当前事务自动提交模式select @@autocommit;

    • 设置隔离级别set tx_isolation = \'READ-COMMITTED\';

    • 查询表的状态show table status like \'test1\';

    • 修改表的存储引擎alter table test1 engine = INNODB

    • 查看是否开启日志show variables like \'log_bin\';

    • 查看日志状态show master status;

3.2 设置MysQL的事务隔离级别

语法

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL

{

  REPEATABLE READ

  | READ COMMITTED

  | READ UNCOMMITTED

  | SERIALIZABLE

}

GLOBAL:设置全局的事务隔离级别SESSION:设置当前session的事务隔离级别,如果语句没有指定GLOBAL或SESSION,默认值为SESSION

使用系统变量设置事务隔离级别

SET GLOBAL tx_isolation=\'REPEATABLE-READ\';SET SESSION tx_isolation=\'SERIALIZABLE\';

 

如果并发事务没有进行隔离,会出现什么问题?

在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有以下问题:

问题一:脏读

脏读指一个事务读取了另外一个事务未提交的数据。

具体看后文案例介绍

问题二:不可重复读

不可重复读指在一个事务内读取表中的某一行数据,多次读取结果不同。不可重复读和脏读的区别是,脏读是读取前一事务未提交的脏数据,不可重复读是重新读取了前一事务已提交的数据。

具体看后文案例介绍

问题三:幻读(虚读)

幻读(虚读)指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

以下都是采用mysql数据库

三、案例

下面实际操作中使用到的一些并发控制语句,可看上面的操作介绍

作为演示:product表(产品表)

  产品ID        产品名称        产品价格        产品数量   .

productIdproductNameproductPriceproductCount
1 xiaomi 1999 100

 

来源:https://www.cnblogs.com/diaoyulin/p/15114279.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 事务隔离性和隔离级别

相关推荐

  • 暂无文章