美文网首页程序员
MySQL中的DTL(Data Transaction Lang

MySQL中的DTL(Data Transaction Lang

作者: kangyiii | 来源:发表于2017-03-04 11:38 被阅读0次

    所谓DTL就是我们常说的数据的事务处理,数据库中的"事务"简单理解就是将多条语句作为一条语句来执行。

    为什么需要事务?

    实际需求如下(银行存款):
    表名:cunkuan

    id 账户名 存款
    1 张三 $1000
    2 李四 $1000
    3 王五 $1000

    当李四突然需要向张三借钱500元

    银行转账过程中数据库操作:

    1. update cunkuan set 存款=存款-500 where id=1;
      此时突然停电
    1. update cunkuan set 存款=存款+500 where id=2;
      如果没有事务,在停电时张三的钱已经被银行划走,而李四却没有收到钱,这样定会引起纠纷。如果有了事务就会避免这种情况发生,事务的具有一致性(数据准确),原子性(不可再分),持久性(永久存储),隔离性(锁)。

    事务可以看做是一个"容器",将多条语句放入该容器,最后只要一条命令行就能执行容器中的所有语句,下图显示了哪些表类型支持事务处理。


    表的的功能参数列表

    事务的模式

    set autocommit = 0;关闭autocommit模式,此时执行任何语句都不会生效,只有使用commit后之前输入的语句才会生效。这样可以保证语句一起执行

    事务的基本实现流程

    //1. 声明事务开始
    start transaction;
    //2. 设定多条要执行的具体语句,但此时还没有生效
    //还是银行存款的案例
    update cunkuan set 存款=存款-500 where id=1;
    update cunkuan set 存款=存款+500 where id=2;
    //3. 判断是否需要执行这个事务,出错不执行,否则执行:
    //3.1如果在终端上,直接观察是否出错
    //3.2如果在php程序中,那就需要使用mysql_error()函数来判断是否出错
    if(mysql_error()){
    //执行  
      commit;
    }else{
    //取消执行
      rollback;
    }
    

    相关文章

      网友评论

        本文标题:MySQL中的DTL(Data Transaction Lang

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