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中运行,
我在一个重新中更新一条,没有提交事务。
然后我在另外一个窗口更新这张表的另外一行。
就是可以同时在一张表上更新不同的行数据,这个就是行锁。我的理解错的话欢迎指正。