zoukankan      html  css  js  c++  java
  • 【赵强老师】数据库的事务

    一、什么是事务?

    数据库事务(Transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

    例如:从A账号给B账号转帐,对应于如下两条sql语句
    update from account set money=money+100 where name=‘b’;
    update from account set money=money-100 where name=‘a’;

    这两条update语句应该作为一个整体来运行,要保证同时成功,或者同时失败;不应该存在一个成功,一个失败的情况。

    二、数据库开启事务命令

    我们可以使用下面的语句来开启或者结束一个事务。

    • start transaction  开启事务
    • rollback  回滚事务
    • commit   提交事务

    例如,我们可以把上面的银行转账的update语句放到一个事务中执行。

    start transaction;
    update from account set money=money+100 where name=‘b’;
    update from account set money=money-100 where name=‘a’;
    commit;

    三、事务的特征:ACID

    • 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    • 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
    • 隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
    • 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

    四、事务的隔离级别

    多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。

    如果不考虑隔离性,可能会引发如下问题:

    • 脏读:指一个事务读取了另外一个事务未提交的数据。
    • 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。
    • 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

    数据库共定义了四种隔离级别:

    • Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
    • Repeatable read(MySQL的默认值):可避免脏读、不可重复读情况的发生。(可重复读)
    • Read committed:可避免脏读情况发生(读已提交)。
    • Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

    我们可以可以通过下面的语句来查看MySQL的事务隔离级别和设置隔离级别:

    • set (GLOBAL|SESSION) transaction isolation level 设置事务隔离级别
    • select @@tx_isolation 查询当前事务隔离级别

    下面的语句将查看MySQL数据库当前的事务隔离级别。

    下面的语句将MySQL的事务隔离级别设置成read committed,在这种隔离级别下,将会发生脏读的问题。

  • 相关阅读:
    解释机器学习模型的一些方法(一)——数据可视化
    机器学习模型解释工具-Lime
    Hive SQL 语法学习与实践
    LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)
    LeetCode 148. 排序链表(Sort List)
    LeetCode 18. 四数之和(4Sum)
    LeetCode 12. 整数转罗马数字(Integer to Roman)
    LeetCode 31. 下一个排列(Next Permutation)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    论FPGA建模,与面向对象编程的相似性
  • 原文地址:https://www.cnblogs.com/collen7788/p/12834796.html
Copyright © 2011-2022 走看看