几种数据库串行化隔离级别对比

本文深入探讨了MySQL、Oracle和PostgreSQL中串行化隔离级别的概念和实现方式,包括如何设置事务隔离级别、隔离级别的具体表现以及它们对查询和并发操作的影响。重点介绍了串行化隔离级别下的查询行为、事务处理和与其他事务的交互特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


mysql串行化隔离级别:

   建表如下:

        createtable a (a int, b int, c int);

      create index idx on a(a,b,c);

       setsession transaction isolation level serializable //设置本session的事务隔离级别

        begin;

        select * froma where a>3 and a<8;

        commit;

 

       在串行化隔离级别中的查询语句将锁住整个表,其他事务对于表的操作将被阻塞。(有无索引都将阻塞)

 

oracle串行化隔离级别:

        建表如下:

        createtable a (a int, b int, c int);

      create index idx on a(a,b,c);

        //!因为oracle默认是非自动提交的,不需要手动开始事务

        settransaction isolation level serializable; //!设置本事务未串行化隔离级别

        select* from a where a>3 and a<8;

        commit

          read committed不同的是在串行化隔离级别事务中的查询看不到其他事务提交的更改。

          read committed可以看到其他事务提交的更改。

          同时串行化隔离级别中的查询不阻塞其他事务对于同一个表的更改。

          猜测是read commited级别中的查询每次开启查询时都是获取当前的snapshot,而serialzable中的查询则是每次查询都是事务开始时的snapshot

 

postgresql串行化隔离级别:

           pg的实现与oracle类似

           create table a (a int, b int, c int);

           create index idx on a(a, b ,c);

           begin isolation level serializable;

           select * from a where a>3 and a<8;

           commit;

            

          串行化隔离级别下不造成任何阻塞,只是看到的结果会与read committed中的有所不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值