事务

事物与存储过程

把准备工作都做好~~~

注意!!!在表后面搞一个引擎ENGINE=InnoDB,这对后面有帮助

1、事务的概念

  事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,事务中的语句要么都执行,要么都不执行。

事务有很严格的定义,它必须同时满足四个特性

1)原子性

   原子性是指一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功,事务中如果有任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库的状态退回到执行事务前的状态。

2)一致性

一致性是指事务将数据库从一种状态转变为下一种一致的状态。(例如,在表中有一个字段为姓名,具有唯一约束,即姓名不能重复,如果一个事务对姓名进行了修改,使姓名变得不唯一了,这就破坏了事务的一致性要求,如果事务中的某个动作失败了,系统可以自动撤销事务,返回初始化的状态。)

3)隔离性

隔离性还可以称为并发控制、可串行化、锁等,当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

(4)持久性

事务一旦提交,其所做的修改就会永久保存到数据库中,即使数据库发生故障也不应该对其有任何影响。需要注意的是,事务的持久性不能做到100%的持久,只能从事务本身的角度来保证永久性,而一些外部原因导致数据库发生故障,如硬盘损坏,那么所有提交的数据可能都会丢失。

 

①开启事务

  格式:START TRANSACTION;

②提交事务

当用户确认提交后,事务中的操作才会执行成功,这个过程就是手动提交的过程

格式:COMMIT

a、执行转账语句,提交事务

 

翻译:通过UPDATE语句将a账户的100元钱转给b账户,最后提交事务

 

使用SELECT语句来查询account表中的余额

 

b、执行转账语句,不提交事务

 

如图,在事务中实现了转账功能。此时最好把三个语句(如图2)写在一起,不要分开(如图1),方便后面演示

此时,退出数据库然后重新登录,并查询数据库中各账户的余额信息,查询结果如下:

 

结论:在事务中转账成功后没有提交事务就退出了数据库,由于事务中的语句不能自动提交,因此当前的操作会被自动取消。

 

c、执行转账语句,提交事务

 

在添加了COMMIT后,退出数据库然后再重新登录,使用SELECT语句查询数据库中各账户的余额信息,查询结果如下:

 

如图,已经实现了转账功能

结论:事务中的操作都是手动提交的,因此在操作完事务时,一定要使用COMMIT语句提交事务,否则事务操作会失败。

③事务的回滚

格式:ROLLBACK;

上述b可以看出,a账户成功给b账户转账100元钱,如果此时a账户不想给b账户转账了,由于事务还没有提交,就可以将事务回滚

 

如图,回滚操作成功,当前事务中的操作取消了

posted @ 2019-12-20 13:45  CcCYR  阅读(272)  评论(0编辑  收藏  举报