当前位置: 首页 » 综合知识 » it知识 » 正文

mysql数据库事物隔离四种级别是什么

发布时间:2023-07-21 以下文章来源于网友投稿,内容仅供参考!

数据库事物隔离级别有四种,按照隔离性,由低到高依次是:

  1. Read Umitted

  2. Readmitted

  3. Repeatable Read

  4. Serializable

按照并发性则顺序相反。

√: 可能出现 ×: 不会出现


脏读不可重复读幻读
Read umitted(未提交读)
Readmitted(已提交读)×
Repeatable read(可重复读)××
Serializable(可串行化)×××

1.Read umitted

读未提交,即在SQL查询中,读取了未提交的数据。在mysql中,默认的事物级别是Repeatable read;默认自动提交模式是打开的,现做如下修改如下所示,

(1)关闭自动提交
mysql> show variables like 'autmit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autmit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set autmit = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'autmit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autmit    | OFF   |
+---------------+-------+
1 row in set (0.01 sec)
(2)修改事物级别为Read umitted
mysql> show variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
 mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UMITTED;
 Query OK, 0 rows affected (0.00 sec)

 mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ UMITTED;
 Query OK, 0 rows affected (0.00 sec)

当前打开了两个session,在第一个,往表test中插入了一行数据,但是还没有提交,此时通过第二个session可以查询到该条数据。

且当第一个session中的事物rollback之后,第二个session又查询不到新插入的数据‘3’

2.Readmitted

读提交,修改事物几倍为Readmitted

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READMITTED;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READMITTED;
Query OK, 0 rows affected (0.00 sec)

此时,在session0中插入了一条数据且mit,在session1中无法查询到

等session0mit之后,session1可以正常的查询到数据

3.Repeatable read

可重复读,此时修改事物级别为可重复读

mysql> SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)

mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Query OK, 0 rows affected (0.00 sec)

此时,test表中存在两笔数据:2和4,如下所示

mysql> select * from test where col1 <'5';
+------+
| col1 |
+------+
| 2    |
| 4    |
+------+
2 rows in set (0.00 sec)

此时步骤如下:1.在session0中begin一个事物;2.在session1中插入一条数据(5),mit; 3.在session0中查询,发现查询不到在session1中插入的数据

接下来,再做如下操作:1.在session0mit; 2.在session0中再做查询操作,发现之前在session1中insert的5又可以查询到

4.Serializable

可串行话,是最高的隔离级别,即在读取的每一行数据上会加锁,事物顺序执行。所以会出现锁超时等问题,在实际业务中很少使用。

  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师