zoukankan      html  css  js  c++  java
  • MySQL之事务控制总结

    MySQL支持TCL(Transaction Control Language)。事务是指一条或者多条组成的SQL语句,要么全部执行要么全部不执行。

    • 事务的四大特性(ACDI):
    (1)原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,要么都执行要么都不执行。
    
    (2)一致性(consistency):一个事务执行会使数据从一个一致状态切换到另外一个一致状态。也就是说数据
     
        库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束例如:小明和小华账户余额均为5,
    
        无论他们之间怎么转账,他们余额之和始终为10块。
    
    (3)永久性(durability)事务一旦提交,对数据的改变是永久性的。
    
    (4)隔离性(isolation):事务与事务之间互不干扰。
    
    • MySQL执行事务过程
    (1)开启事务:set autocommit=0;  start transaction(可选);
    
    (2)编写事务中的sql语句(只对select insert update delete语句有效):语句1...;语句2...;...
    
    (3)结束事务:
    
                  提交事务--commit;
    
                  回滚事务--rollback;
    
                  回滚至节点--savepoint 节点名;下面代码表示节点1之后的代码不会生效
                     SET autocommit=0;
                     START TRANSACTION;
                     DELETE FROM 表1 WHERE 条件;
                     SAVEPOINT 节点1;#设置保存点
                     DELETE FROM 表1 WHERE 条件;
                     ROLLBACK TO 节点1;#回滚到保存点   
    • 数据并发问题:一个数据库可能拥有多个访问客户端,这些客户端可能用并发的方式访问数据库,如果没有必要的隔离措施就会导致各种并发问题,破坏数据完整性。通常有以下场景:
    (1)脏读(Dirty Read):A事务读取到了B事务没有提交的数据,并在此基础进行操作。
    
    (2)幻读(Phantom):A事务读取B事务新增数据,A事务发生幻象读。
    
    (3)不可重复读(Nonrepeatable Read):A读取了B事务已经提交的更改数据,A事务两次读取同一数据,得到 
        内容不同。
    
    (4)第一类丢失更新: A事务撤销时,把已提交的B事务的更新数据覆盖了。
    
    (5)第二类丢失更新:A事务覆盖B事务已经提交的数据。
    • MySQL数据库提供的隔离级别:Read uncommitted (读未提交数据)、Read committed(读已提交数据) 、Repeatable read(可以重复读) 、Serializable(串行化,很安全,性能十分低下) 。

    查看隔离级别:select @@tx_isolation;

    设置隔离级别:set session|global transaction isolation level 隔离级别;

    事务隔离级别对并发解决情况
    隔离级别脏读幻读不可重复读第一类丢失更新第二类丢失更新
    Read uncommitted×
    Read committed××
    Repeatable read××××
    Serializable×××××
    • Delete支持事务回滚,Truncate不支持事务回滚
    只有把命运掌握在自己手中,从今天起开始努力,即使暂时看不到希望,也要相信自己。因为比你牛几倍的人,依然在努力。
  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/freesky168/p/14358247.html
Copyright © 2011-2022 走看看