zoukankan      html  css  js  c++  java
  • 关于事务

    何为事务?

    1.事务是指事务开始到事务结束之间的一组sql语句的操作单元,并且是组内所有sql语句共同完成的业务逻辑。

    2.要想使用事务,首先关闭系统自动提交功能(因为系统默认的为自动提交),等待所有在sql语句组中的语句都执行完毕后,再进行手动提交。

    关闭系统内自动提交的方式:set autocommit=0;

    打开系统自动提交的方式:set autocommit=1;

    3..要想事务成功提交,必须是该sql语句组中所有的sql语句都实现,否则该事务提交失败,需手动回滚rollback使数据库回到初识状态。

    写到这里,我昨天在项目中遇到一个误区,在这儿我用实例来解释一下:

    设计一个事务,同时在student表和teacher表中各添加一条记录?

    student表结构:

    teacher表结构:

    Start transaction;      --开始一个事务

    Insert into student values

    (‘1315925010’,’刘德华’,’男’,’2016-01-01’,’汉’,’中国’,’M02’,’2016-01-01’);     --该语句插入记录成功

    Insert into teacher values

    (‘T100’,’林志玲’,’2016-01-01’,’美女讲师’);                  --该语句插入记录失败(插入的字段值列表不够)

    Commit;    --手动提交

    总结:上面事务虽然执行了,也成功提交了,但是事务成功的前提是要么所有的sql语句都执行,要么都不执行;反过来在观察上面的事务,查看student表的数据时,发现数据插入成功,而查看teacher表数据时却未插入成功,这就破环了事务的原子性,所以该事务是不成立的。

    解决方案:只要sql组中任何一条语句未执行成功,我们就不应该提交该事务,而是将数据库回滚或将开始一个新的事务。

    Start transaction;      --开始一个事务

    Insert into student values

    (‘1315925010’,’刘德华’,’男’,’2016-01-01’,’汉’,’中国’,’M02’,’2016-01-01’);     --该语句插入记录成功

    Insert into teacher values

    (‘T100’,’林志玲’,’2016-01-01’,’美女讲师’);                  --该语句插入记录失败(插入的字段值列表不够)

    rollback;           --记住:只要事务中的任意一条sql语句未执行成功,则需手动回滚,不该提交;否则破环事务的原子性。

    事务的四大特性:(ACID)

    1.原子性:事务sql组中语句要么都执行成功,要么都不执行

    2.隔离性:事务之间互不影响

    3.一致性:事务执行前后,数据是一致的

    4.持久性:事务一旦提交,则永久对数据库产生影响

    事务关键字:

    打开事务:start transaction;

    回滚事务:rollback;

    提交事务:commit;

    设置数据库提交方式为非自动的:set autocommit=0;设置数据库提交方式为自动的:set autocommit=1;

  • 相关阅读:
    (二)unittest之跳过测试和预期失败的用例
    (一)基本使用
    python从入门到入魔
    (十)中断测试
    (九)进程测试
    (八)安装、卸载与升级更新测试
    (七)功能测试
    (六)内存分析,待补充
    (五)跑Monkey过程中出现的ANR问题分析
    (四)一种精准monkey测试的方法
  • 原文地址:https://www.cnblogs.com/wangchaoyuana/p/7545188.html
Copyright © 2011-2022 走看看