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;

  • 相关阅读:
    Python元组、列表、字典
    测试通过Word直接发布博文
    Python环境搭建(windows)
    hdu 4003 Find Metal Mineral 树形DP
    poj 1986 Distance Queries LCA
    poj 1470 Closest Common Ancestors LCA
    poj 1330 Nearest Common Ancestors LCA
    hdu 3046 Pleasant sheep and big big wolf 最小割
    poj 3281 Dining 最大流
    zoj 2760 How Many Shortest Path 最大流
  • 原文地址:https://www.cnblogs.com/wangchaoyuana/p/7545188.html
Copyright © 2011-2022 走看看