所谓DTL就是我们常说的数据的事务处理,数据库中的"事务"简单理解就是将多条语句作为一条语句来执行。
为什么需要事务?
实际需求如下(银行存款):
表名:cunkuan
id | 账户名 | 存款 |
---|---|---|
1 | 张三 | $1000 |
2 | 李四 | $1000 |
3 | 王五 | $1000 |
当李四突然需要向张三借钱500元
银行转账过程中数据库操作:
- update cunkuan set 存款=存款-500 where id=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;
}