zoukankan      html  css  js  c++  java
  • mysql事务

    事务:

             事务是由存储引擎提供的

             MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

     

    我们执行一个事务时(4条sql语句),比如已经执行完3条了 ,但是在这是后服务器突然崩溃了,怎么办

    一般情况下,我们将前边的3条撤销。

    存储引擎是靠日志来完成类似的功能的。我们成为:

    事务日志:

                       1、重做日志:我们的每一个操作,在写到数据库之前,先写到日志里边,就算后续                                            的操作崩溃了,我们还可以通过这个日志再执行一遍

                       2、撤销日志:

                                 我们在每一次的操作之前,将原有的状态保存下来,如果我们想撤销                                                我们的操作的时候。可以恢复到某个状态

     

    事务日志文件越小越好。如果我们的服务器崩溃了,因为服务器太大的话我们在启动的时候,会执行事务里边的内容。执行速度回很慢。启动会用比较长的时间。如果我们这时候ctrl+c

    取消的话,数据会崩溃。

     

    事务的处理

    begin  :开始一个事务

    commit :提交一个事务

    rollback :回滚一个事务

     

    例子:

    mysql> create table abc (name char(20),nianling int(3));

    mysql> insert into abc values ('a',20);

    然后我们开始一个事务

    mysql> begin;

    mysql> insert into abc values ('b',18);

    mysql> insert into abc values ('c',22);

    mysql> select * from abc;

    +------+----------+

    | name | nianling |

    +------+----------+

    | a    |       20 |

    | b    |       18 |

    | c    |       22 |

    +------+----------+

     

     

     

    我们开始回滚事务

    mysql> rellback;

    mysql> select * from abc;

    +------+----------+

    | name | nianling |

    +------+----------+

    | a    |       20 |

     

    注意的是:要想回滚事务,不能提交事务,提交事务就不能回滚了。mysql默认是自动提交的。

    我们提交事务

    mysql> commit;

     

    mysql为了提高mysql 的性能,一般mysqlI/O操作越少越好。事务每一次提交都会让硬盘做一次I/O操作。这样会造成大量的I/O操作。所以一般我们关闭自动提交

     

    关闭自动提交

    mysql> set autocommit=0;

    mysql> select @@autocommit;

    +--------------+

    | @@autocommit |

    +--------------+

    |            0    |

    +--------------+

    然后我们在修改数据,不用输入begin就可以回滚了。

     

    事务还支持  "保存点"

    例子:我们有100sql语句。执行到60条的时候,发现45条错了。我想回到45条。服务器默认一撤销会60条全撤销,这时候我们就用到了保存点。

     

    例子:我们依然采用上边的表

    用法:

        savepoint 保存点名字    #注意点的名字不能以数字开头。

    恢复:

        rollback to 保存点的

     

    mysql> create table abc (name char(20),nianling int(3));

    mysql> begin;

    mysql> savepoint s1;  #第一个保存点

    mysql> insert into abc values ('a',20);

    mysql> savepoint s2;  #第二个保存点

    mysql> insert into abc values ('b',18);

    mysql> savepoint s3;

    mysql> insert into abc values ('c',22);

    mysql> savepoint s4;

    mysql> insert into abc values ('d',22);

    mysql> savepoint s5;

     

    按保存点还原

    rollback to s4;

    我们可以依次还原

    如果从s5直接还原到s2 。那么在还原s3,s4都不可以。只能还原到s1了。因为s3,s4已经不存在了

  • 相关阅读:
    U-Learning服务端
    C# 向txt文件中写入
    二维码生成 Gma.QrCodeNet (目前测试支持.net4.0及以上,但vs版本2010不可以 NuGet中搜索不到程序包)
    数据显示按规格向datatable中增加空白记录
    sql server 查询出整数 (可灵活运用)
    sql server 列字段拼接 —— STUFF
    layui confirm 嵌套使用 (随笔记)
    sql server 随记 -- 月份/日期 查询
    SQL Server 数据库备份语句
    关于ScriptManager.RegisterStartupScript 摘录
  • 原文地址:https://www.cnblogs.com/pangbing/p/6535031.html
Copyright © 2011-2022 走看看