【mysql学习笔记】-事务处理

来源:互联网 发布:万网中文域名 编辑:程序博客网 时间:2024/06/03 23:41

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;


0 0
原创粉丝点击