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

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

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

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

    什么时候我们使用事物

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

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

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

  • 相关阅读:
    Python全栈day19(函数补充)
    Python全栈day18(三元运算,列表解析,生成器表达式)
    Python全栈day18(迭代器协议和for循环工作机制)
    KVM虚拟化
    Python使用函数实现把字符串转换成整数
    MySQL备份1356错误提示修复办法
    Python全栈day17(文件处理)
    CentOS添加PHP至环境变量
    CentOS7.2编译配置LNMP环境(MySQL5.7.20,PHP7.0.24)
    php查询mysql数据库 查询条件替中文字符串变量时无法查询
  • 原文地址:https://www.cnblogs.com/pengyusong/p/5824980.html
Copyright © 2011-2022 走看看