1.基本概念
1)事务:指一组SQL语句,是在一次逻辑中对数据库执行的一系列操作
2)回退:指撤销指定SQL语句的过程
3)提交:指将未存储的SQL语句结果写入数据库表
4)保留点:指事务处理中设置的临时占位符,可以对它发布回退
5)事务处理:事务处理可以用来维护数据库的完整性,它保证成批的mysql操作要么完全执行,要么完全不执行
2.事务的性质
1)原子性:事务中定义的一系列操作,要么完全执行,要么完全不执行
2)一致性:必须使所有的数据都保持一致的状态。比如:A账户和B账户各有1000块钱,不论它们之间怎么相互转账,都应该保持账户总额为2000元。
3)持久性:事务成功提交的数据应该永远保存在数据库。
4)隔离性:如果有多个事务操作同一条数据,应该保证事务之间不会相互影响。
3.数据库事务执行会出现的问题
事务出现的问题就是多线程操作,即多个线程操作同一条数据。主要会出现的问题如下:
1)第一类更新问题:事务之间会覆盖掉其他已提交事务
例子如下:
最后账户的余额应该是1000元,中间的问题很明显,事务A覆盖了事务B的部分操作,结果就导致银行客户损失了100元。
2)脏读问题:读了还未提交的数据。
例子如下:
事务过程如上,问题很明显,读了不该读的数据,结果导致银行损失了1000元。
3)幻读:前后读取结果的记录数不一样。
例子如下:
4)不可重复读:前后读取的结果的值不一样
例子如下:
4.MySql数据事务处理语句
1)标示事务处理开始:start transaction
2)回退:rollback。注意:rollback只能在一个事务处理内使用,在执行一条start transaction命令之后;事务处理用来管理insert、update和delete语句,不能回退select语句。例子如下:
select * from ordertotals;
start transaction;
delete from ordertotals;
select * from ordertotals;
rollback;
select * from ordertotals;
3)提交:commit。一般的mysql语句都是隐含提交,即提交操作是自动进行的。但是,在事务处理块中,提交不会隐含地进行,要使用commit语句。
4)使用保留点:为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。这样,如果要回退,就可以回退到某个占位符,这些占位符就称为保留点。如:
savepoint delete1;
rollback to delete1;