1. 事务概念引入:
现实生活中,我们往往经常会进行转账操作,转账操作可以分为两部分来完成,转入和转出。只有这两部分都完成了才可以认为是转账成功。在数据库中,这个过程是使用两条语句来完成的,如果其中任意一条语句出现了异常没有执行,则会导致两个账号的金额不同步,造成错误。
为了防止上面可能出现的情况,MySQL引入了事务,所谓事务就是针对数据库的一组操作,它可以由一条或者多条SQL语句组成,同一个事务的操作具备同步的特点,如果其中有一条语句不能执行的话,那么所有的语句都不会执行,也就是说,事务中的语句要么都执行,要么都不执行。
在使用数据库时候需要使用事务,必须先开启事务,开启事务的语句具体如下:
start transaction;
即:
上面语句是用来开启事务,事务开启之后就可以执行SQL语句,SQL语句执行成功之后,需要使用相应语句提交事务,提交事务的语句如下:
commit;
需要注意的是,在MySQL中直接书写的SQL语句都是自动提交的,而事务中的操作语句需要使用commit语句手动提交,只有事务提交后其中的操作才会生效。
如果不想提交事务,我们还可以使用相关语句取消事务(也称回滚),具体语句如下:
rollback;
需要注意的是,rollback语句只能针对未提交的事务执行的回滚操作,已经提交的事务是不能回滚的。
2. 事务操作具有严格的定义,它必须满足ACID:
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
(1)原子性: 原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
(2)一致性:一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
(3)隔离性:隔离性是指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被企图进行修改的事务看到 。
(4)持久性:持久性是指在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。 即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。
3. 相信通过上面的讲解,我们对事务有了一个简单的了解,接下来我们通过一个转账的案例演示如何使用事务。
(1)演示之前准备工作:
具体SQL语句如下:
create database chapter06; use chapter06; create table account( id int primary key auto_increment, name varchar(40), money float ); insert into account(name,money) values('a',1000); insert into account(name,money) values('b',1000);
执行效果如下:
(2)接下来我们使用事务来演示如何实现转账功能:
首先开启一个事务,然后通过update语句将 a账户的100元 转给 b 账户,然后最后提交事务,具体语句如下:
start transaction; update account set money=money-100 where name='a'; update account set money=money+100 where name='b'; commit;
执行效果如下: