mysql处理事务
1.一起提交或一起回滚,要么一起成功要么一起失败.
提交:commit 回滚:rollback
如果在银行汇款场景中,A向B款1000元,A的账户里要减去1000元
,同时B的账户里要加上1000元,这两个账户余额的统一操作定性为事物
,这两个 操作要么一起成功,要么一起失败,必须统一提交或回滚事物。
2.事务的四个特性:
- 原子性:
一组事务,要么成功,要么撤回
- 一致性
事务执行后,数据库状态与其他业务规则保持一致,如转账业务,无
论事务执行成功否,参与转账的两个账号余额之和应该是不变的。
- 隔离性
事务独立运行,一个事务处理后的结果,影响了其他事务,那么其他事务会撤回.事务的100%隔离,需要牺牲速度
- 持久性
软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里.长久的保存数据.
3.mysql中的事务
在默认情况下,Mysql每执行一条SQL语句,都是一个单独的事务,如果需要在一个事务中包含多条SQL语句,那么需要开启事务和结束事务
开启事务:start transaction
update 1.....
update 2.....
结束事务:commit或rollback
在执行sql语句之前,先执行start transaction,这就开启了一个事务(事务的起点),然后可以去执行多条SQL语句,最后要结束事务,commit表示提交,即事务中的多条sql语句所作出的影响会持久到数据库中,或者rollback,表示回滚到事务的起点,之前做的所有的操作都被撤销了.
4.mysql中的事务操作
-- 开启事物
START TRANSACTION;
UPDATE emp set SAL=SAL+9527 WHERE EMPNO=10001
;
UPDATE emp set SAL=SAL-9527 WHERE EMPNO=10002
;
-- 事物回滚
ROLLBACK
-- 开启事物
START TRANSACTION;
UPDATE emp set SAL=SAL+9527 WHERE EMPNO=10001
;
UPDATE emp set SAL=SAL-9527 WHERE EMPNO=10002
;
-- 事物回滚
COMMIT;
5.JDBC事务
1.con.setAutoCommit(false)开启事务
2.事务的提交和回滚一般与异常并用