美文网首页
事务和锁两种机制的异同点

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

作者: 溪水散人 | 来源:发表于2020-04-05 20:09 被阅读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';
    

    概括

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

    相关文章

      网友评论

          本文标题:事务和锁两种机制的异同点

          本文链接:https://www.haomeiwen.com/subject/qsepphtx.html