MySQL事务小结

事务基本特性(ACID)

  1. 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的不可分割单位。
  2. 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。
  3. 隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。
  4. 持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

事务语句

MySQL使用如下的语句来标识事务的开始:

start transaction

或者

begin

事务成功后,使用如下的语句来标识事务的成功:

commit

当事务逻辑出现异常时,可以使用如下的语句来标识事务的取消:

rollback

事务操作

事务处理用来管理 INSERT 、UPDATE 和 DELETE 语句,无法管理不会改变数据的 SELECT 查询语句,也无法管理 CREATE 或 DROP 操作。事务操作隔离了其中被操作数据状态改变的可见性,同时使事务内的多次数据更新操作具有了原子性,即要么同时成功,要么全部失败。

创建测试表 test:

create table test(a int, b char(5));

执行事务操作:

start transaction;

insert into test values('1', 'right');
insert into test values('2', 'wrong');
update test set b = 'right' where a = 2;
select * from test;

commit;

上述操作中,一个事务内包含两次独立的插入操作和一次更新操作,以及一次查询全部数据的操作。由于事务的隔离性,当事务结束前,其他连接的查询语句将无法查询到插入的这两条数据,也无法对其进行更新操作,只有处于同一事务的查询语句和更新语句可以针对该新插入的数据进行查询或更新。当执行了 commit 语句后,该事务内的操作将全部生效,使其他连接也可以对此事务更新后的数据进行操作。

当上述事务中的语句如果出现执行失败,或在事务提交前执行了 rollback 语句,那么不管语句已经执行成功了多少条,其数据库状态都将恢复到全部语句执行之前的状态。

猜你喜欢

转载自my.oschina.net/u/1156626/blog/1649430