MySQL中的DTL(Data Transaction Language)

所谓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;
    如果没有事务,在停电时张三的钱已经被银行划走,而李四却没有收到钱,这样定会引起纠纷。如果有了事务就会避免这种情况发生,事务的具有一致性(数据准确),原子性(不可再分),持久性(永久存储),隔离性(锁)。

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


MySQL中的DTL(Data Transaction Language)_第1张图片
表的的功能参数列表

事务的模式

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 Language))