我们先看一个例子:
例如:转账是生活中常见的操作,比如从A账户转账100元到B账号。站在用户角度而言,这是一个逻辑上的单一操作,然而在数据库系统中,至少会分成两个步骤来完成:
- 将A账户的金额减少100元
- 将B账户的金额增加100元。
在这个过程中可能会出现以下问题:
- 转账操作的第一步执行成功,A账户上的钱减少了100元,但是第二步执行失败或者未执行便发生系统崩溃,导致B账户并没有相应增加100元。
- 转账操作刚完成就发生系统崩溃,系统重启恢复时丢失了崩溃前的转账记录。
- 同时又另一个用户转账给B账户,由于同时对B账户进行操作,导致B账户金额出现异常。
数据库为了解决这类为题引入“事务”。
定义:
数据库事务是构成单一逻辑工作单元的操作集合。(就是保证一系列连贯的操作,必须同时成功,有一个失败判定失败)
事务4大特点
原子性:事务里边的操作就和原子一样是不可分割的
一致性:事务执行前后是从一个一致性状态到另一个一致性状态(如转账,完成前后总量不变)
隔离性:并发执行的事务不会相互影响
持久性:事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。
【注】 隔离性有隔离等级,等级不同,隔离效果不同
MYSQL 事务处理主要有两种方法:
- 用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认- 直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
这里引用大神的总结,我这就不献丑。值得学习->事务详解
网友评论