zoukankan      html  css  js  c++  java
  • 【笔记】数据库事物以及多线程/进程同步的含义

        以前数据库事物和多线程同步的概念柔和在一起,以为相互关联,实则没有必然联系。

        数据库事物解决的数据一致性:假设数据从一个状态迁移到一个状态,涉及到俩个对象,如果没有数据库事物,当某一对象操作完成之后数据库出错(或者操作过程中有人查看了备操作的对象),数据库将出现不一致的状态。数据库事物的执行具有原子性,即要么都执行,要么都不执行。数据库的一致性往往依赖原子性操作。

        多线程同步解决的是多个线程共享数据时的引起的资源安全问题:俩个线程同时操作一个数据,都是先读取后修改,当俩个都读取之后,然后在修改数据的时候,就会造成资源安全问题,此时需要同步来串行化访问。

    什么时候我们使用事物

    当你执行一个影响一个数据库的多行数据时,你总是需要一个事物,但这依赖于你的业务数据是否真的需要事物来保证(因为事物会有额外的性能消耗),例如银行转账这种肯定需要事物(跟钱有关的事儿都是大事),如果你的业务操作多行,其中出错也没关系,那就不需要事物。

    数据库事物保证了数据库层面的串行执行(原子性和一致性),但是在程序层面上有另外一层需要保持串行操作,即多线程并发,操作共享资源时需要协作(同步和互斥),即锁。例如,当并发执行多个类似的事物时,操作数据库同一行(程序先读后改)等等。

    并发执行数据库事物可能会导致死锁:因为当你操作相同的数据行时候,它会锁住该行来保持数据一致性,如果俩个并发线程试图以不同的顺序锁住相同的行,你会得到一个死锁错误

  • 相关阅读:
    调接口
    500 Internal Server Error
    htaccess跨域
    Header add Access-Control-Allow-Origin: *
    如何写jquery插件
    笔记
    互联网思维,谁的思维?
    超强js博客值得学习!!!
    学好js的步骤
    NOIP2000 进制转换
  • 原文地址:https://www.cnblogs.com/pengyusong/p/5824980.html
Copyright © 2011-2022 走看看