美文网首页
事务处理 commit rolllback

事务处理 commit rolllback

作者: M_3ece | 来源:发表于2019-08-16 13:38 被阅读0次

    mysql 5.5 版本后存储引擎 InnoDB支持事务

    事务(transaction)

    事物的特征: ACID

    原子性Atomicity: 不可分割, 组成物质的基本单位, 进行数据处理操作的基本单位. 

    一致性Consistrncy: 数据库在进行事务操作后, 会由原来的一致状态, 变成另一种一致的状态. 也就是说当事务提交后, 或者当事务发生回滚后, 数据库的完整性约束不能被破坏.

    隔离性Isolation: 每个事务都是彼此独立的, 不会受到其他事务的执行影响. 也就是说一个事务在提交之前, 对其他事务都是不可见的. 

    持久性Durability: 事务提交之后对数据的修改是持久性的, 即使在系统出故障的情况下, 比如系统崩溃或者存储介质发生故障, 数据的修改依然是有效的. 因为当事务完成, 数据库的日志就会给被更新, 这是可以通过日志, 让系统恢复到最后一次成功的更新状态. 

    原子性是基础, 隔离性是手段, 一致性是约束条件, 持久性是目的. 


    常用控制语句

    START TRANSACTION 或者 BEGIN, 显式开启一个事务

    COMMIT: 提交事务. 当提交事务后, 对数据库的修改事务是永久性的.

    ROLLBACK 或者 ROLLBACK TO [SAVEPOINT], 回滚事务. 撤销正在进行的所有没有提交的修改, 或者将事务回滚到某个保存点.

    SAVEPOINT: 在事务中创建保存点, 方便后续针对保存点进行回滚. 一个事务中可以存在多个保存点.

    RELEASE SAVEPOINT: 删除某个保存点

    SET TRANSACTION: 设置事务的隔离级别


    mysql> set autocommit =0 //关闭自动提交

    mysql> set autocommit = 1//开启自动提交


    CREATE TABLE test(name varchar(255), PRIMARY KEY(name)) ENGINE =  InnoDB;

    BEGIN;

    INSERT INTO test SELECT '关羽';

    COMMIT;

    BEGIN;

    INSERT INTO test SELECT '张飞';

    INSERT INTO test SELECT '张飞';

    ROLLBACK;

    SELECT * FROM test;


    CREATE TABLE test(name varchar(255), PRIMARY KEY(name)) ENGINE =  InnoDB;

    BEGIN;

    INSERT INTO test SELECT '关羽';

    COMMIT;

    INSERT INTO test SELECT '张飞';

    INSERT INTO test SELECT '张飞';

    ROLLBACK;

    SELECT * FROM test;


    CREATE TABLE test1(name varchar(255), PRIMARY KEY(name)) ENGINE =  InnoDB;

    SET @@completion_type = 1;  

    BEGIN;

    INSERT INTO test1 SELECT '关羽';

    COMMIT;

    INSERT INTO test1 SELECT '张飞';

    INSERT INTO test1 SELECT '张飞';

    ROLLBACK;

    SELECT * FROM test1;


    事务隔离

    通过设置不同的隔离等级, 以便在正确性和效率之间进行平衡. 

    事务并发处理可能存在的三种异常?脏读, 不可重复读和幻读?

    脏读: 还没有提交事务, 就可读到加入的事务信息. 读取了其他事务还没有提交的数据.

    不可重复读: 同一条记录, 两次读取的结果不同. 这是因为有其他事务对这个数据同时进行了修改或删除. 

    幻读: 事务A根据条件查询得到了N条数据, 但此时事务B更改或者增加了M条符合事务A查询条件的数据, 这样当事务A再次进行查询的时候会发现有N+M条数据.

    针对可能存在的异常情况, 四种事务隔离的级别分别是什么?

    隔离级别:

    读未提交 允许脏读 允许不可重复读 允许幻读

    读已提交    禁止            允许                允许

    可重复读    禁止            禁止                允许

    可串行化    禁止            禁止                禁止

    相关文章

      网友评论

          本文标题:事务处理 commit rolllback

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