美文网首页sql
事务并发的问题和死锁

事务并发的问题和死锁

作者: 剑道_7ffc | 来源:发表于2019-04-16 07:11 被阅读9次

    事务并发带来的问题和如何解决?

    脏读

    针对未提交的数据

    若没加锁之前,事务A在id=1读出的数据是18,但因为事务B回滚掉,导致是脏数据,解决办法:加排他锁

    不可重复读

    针对其他提交前后,总记录数不变,重点是修改

    幻读

    针对其他提交前后,总记录数发生改变,重点是新增或插入

    隔离级别

    分类

    innodb对隔离级别的支持

    死锁

    死锁是什么

    事务之间相互等待对方锁的释放

    例子:

    BEGIN;

    update users set lastUpdate = NOW() where id = 1;

    update t2 set `name`='test' where id =1;

    rollback;

    --其他会话

    BEGIN;

    update t2 set `name`='test' where id =1;

    update users set lastUpdate = NOW() where id =1;

    rollback;

    死锁的避免

    1类似的业务已固定的顺序访问表或行,目的避免形成循环

    2如果条件允许,大事务拆小。原因:大事务出现死锁的概率较大

    3在同一事务中,尽可能一次锁住所需要的所有的资源

    4降低隔离级别

    5为表增加合适的索引,因为若不走索引锁的是表锁

    相关文章

      网友评论

        本文标题:事务并发的问题和死锁

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