事务和锁两种机制的异同点

2020-04-05  本文已影响0人  溪水散人

事务和锁两种机制的异同点

事物和锁,在面试的时候可以说是必问的两个知识点。当然,并不以面试的出发点来思考这个问题。

事物和锁都是用来处理应用程序数据一致性的问题。

事物

事物的特性ACID:原子性、一致性、隔离性、持久性

原子性:事物视为不可分割的最小单元,事物的所有操作要么全部成功,要么全部失败回滚

一致性:所有事物对同一个数据读取的结果都是一致的

隔离性:任一个事物,在对数据修改作出提交之前,对其他事物都是不可见的,互不影响

持久性:一旦事物提交,其结果就会永久保存到数据库中。

以数据库为例,事物的隔离级别有:

隔离级别 脏读 不可重复度 幻读
读未提交
读已提交 ×
可重复读 × ×
可串行化 × × ×

脏读、不可重复读、幻读都是并发一致性带来的问题

脏读:假设有a,b两个事物,b读取到a未提交的数据

不可重复读:假设一条数据,a事物第一次读是1,但第二次去读的时候是2

幻读:假设a事物读取多条数据,第一次读是3条,第二次读的时候数据的条数多了或者少了

事物的使用模式类似如下

begin

// do something

end

锁,在数据库中较为简单的是行级锁和表级锁。

锁是用来干什么的呢?锁是用来解决隔离性的一种机制。

锁的使用模式如下:

lock

// do something

unlock

锁一般分为悲观锁和乐观锁。顾名思义,

悲观锁的出发点是,我总认为这条数据会被人修改,所以我一上来就给它加锁,这样,如果确实是没有人修改这条数据的话,加上悲观锁是比较消耗资源的。

SELECT * FROM table_name WHERE ... FOR UPDATE;

乐观锁,就是我认为别人不会修改数据,通常是通过版本号的方式

update user_info set password='somelog' where username='somelog' and data_version='2020-04-05';

概括

总的来说,事物的范围广泛,锁是解决事物特性中的隔离性的一中工具。即事务的隔离级别通过锁的机制来实现。 对数据库来说,一般开启了锁,也就添加了某种锁。

上一篇下一篇

猜你喜欢

热点阅读