spring框架:数据库事务的管理

1、什么是数据库的事务?

一个数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行。举个例子来说,比如我们现在微信扫码支付的一个流程是扫码-输入金额-输入密码-支付成功(结果,不是流程),这就是一个完整的事务流程,我们很清楚在这个流程中只要我们有一个操作失败,最终都不会造成付款成功,事务的重要性通过这个例子可以说是很透彻了。作用呢就是保证了数据的完整性和一致性。

2、事务的概念描述(来自W3C school)

事务的概念可以描述为具有以下四个关键属性说成是 ACID

  • 原子性Atomicity,或称不可分割性)事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。

  • 一致性Consistency)这表示数据库的引用完整性的一致性,表中唯一的主键等。

  • 隔离性Isolation,又称独立性)可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。

  • 持久性Durability)一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。

3、事务控制语句:

  • BEGIN或START TRANSACTION;显式地开启一个事务;

  • COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改成为永久性的;

  • ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  • SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;

  • RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  • ROLLBACK TO identifier;把事务回滚到标记点;

  • SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

4、mysql事务的常用处理方式

、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

5、举例说明

#该表为以建好的表,中有两条数据
#1、开启事务
mysql> begin
    -> ;
Query OK, 0 rows affected (0.00 sec)

#插入一条数据
mysql> insert into test2(id,name)values(3,'lisi');
Query OK, 1 row affected (0.00 sec)
#查看数据表
mysql> select * from test2;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | hello |
|  3 | lisi  |
+----+-------+
3 rows in set (0.00 sec)
#事务回滚
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
#再次查看
mysql> select * from test2;
+----+-------+
| id | name  |
+----+-------+
|  1 | zhang |
|  2 | hello |
+----+-------+
2 rows in set (0.00 sec)
#结果:因为回滚,故没有插入进去
mysql>

6、spring声明式事务管理

spring对事务的管理分两种方式:编程式事务管理和声明式事务管理,编程式的灵活性大,但难以维护。声明式就是通过配置来管理,维护性较好,故这里只介绍声明式事务管理。

声明式事务管理方法允许你在配置的帮助下而不是源代码硬编程来管理事务。这意味着你可以将事务管理从事务代码中隔离出来。你可以只使用注释或基于配置的 XML 来管理事务。 bean 配置会指定事务型方法。

声明式事务的相关步骤:

  • 我们使用标签,它创建一个事务处理的建议,同时,我们定义一个匹配所有方法的切入点,我们希望这些方法是事务型的并且会引用事务型的建议。

  • 如果在事务型配置中包含了一个方法的名称,那么创建的建议在调用方法之前就会在事务中开始进行。

  • 目标方法会在 try / catch 块中执行。

  • 如果方法正常结束,AOP 建议会成功的提交事务,否则它执行回滚操作。

代码操作:

1、创建两张数据表

你可能感兴趣的:(框架)