简单聊一下Oracle,MySQL,postgresql三种锁表的机制,行锁和表锁

MySQL:  

MySQL使用行级锁定和表级锁定。行级锁定允许多个会话同时写入表,适用于多用户、高并发和OLTP应用。表级锁定只允许一个会话一次更新表,适用于只读、主要读取或单用户应用。

比如mysql开启一个窗口执行

begin;
update xc_county_all_copy1 set city_name='阿里巴巴' where city_name='北京';

如果不commit;或者rollback,想再开一个新窗口去修改这个表的其他行数据

begin;
update xc_county_all_copy1 set city_name='腾讯' where city_name='广州';

此时我想更新的并不是同一行数据,因为加了where条件限定了,然后就会出现

简单来说这个就是表锁定,就是第一个update已经控制表了,如果没有执行提交撤销操作,就会锁表。

Oracle:
Oracle数据库使用一种称为多版本读一致性的机制,即使一行正在被更新,其他的事务也可以读取到这一行的数据。
当你执行一个更新操作时,Oracle只会锁定被影响的行。

PostgreSQL:
PostgreSQL提供了各种锁定模式来控制对表中数据的并发访问。PostgreSQL在事务访问或修改数据库对象时,会自动获取锁。

简单来说mysql和Oracle一样,是支持在更新表的局部数据的,也就是行锁,如还是那个案例在postgresql中运行,

我在一个重新中更新一条,没有提交事务。

然后我在另外一个窗口更新这张表的另外一行。

就是可以同时在一张表上更新不同的行数据,这个就是行锁。我的理解错的话欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值