我们来看一下住户退房这个业务需要做什么事情?
- 要更新该用户的离开时间、总金额
- 需要更新用户所住的房屋的状态为空闲
由此可见,以上需要两个SQL来实现。
发现问题:若某一个SQL语句执行出错的情况下,另外一个SQL结果却已经更新到数据库,造成了数据的不完整。
如何解决:事务
l 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
l 事务用来管理insert,update,delete语句
1.1.1. 事务的特性
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性:一组事务,要么成功;要么撤回。
2、稳定性 : 有非法数据(外键约束之类),事务撤回。
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
4、可靠性:软、硬件崩溃后,数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得,
1.1.2. MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交