事务处理

阅读:452

事务处理(transaction processing),可以保证SQL要么完全执行,要么完全不执行,保证数据的完整性。

1. 事务处理

理解事务处理,那么需要知道几个术语:

  • 事务(transaction),指一组SQL语句;
  • 回退(rollback),或者叫做回滚,指撤销SQL语句的过程;
  • 提交(commit),将未存储的SQL写入到数据库,也就是事务完成;
  • 保留点(savepoint),在事务中设置一个占位符,可以在此位置回退,这里是部分回退,不是全部事务回滚。

一般需要回退的SQL包括INERT、UPDATE和DELETE语句。SELECT语句不能回退,当然也没必要。还有DDL语句,比如CAEATE或者DROP,也是不能回退。

 

2. 控制事务处理

明白了什么是事务处理,接下来看看如何控制事务处理。这里要注意,不同的数据库软件事务处理语句有可能不同,使用时可以查阅文档。

我们以MySQL为例,事务语句如下:

START TRANSACTION
...

现在我们开始测试一下,往课程表t_course插入一条id未40的课程《Java面试宝典》,插入前我们开启事务,SQL如下:

START TRANSACTION;

INSERT INTO `d_mall`.`t_course`(`id`, `title`, `intro`, `sell_price`, `hot`, `category_id`, `create_time`, `update_time`, `vend_phone`)
VALUES (40, 'Java面试宝典', 'Java面试宝典', 100.00, 76012,
                                            1,
                                            '2020-12-08 11:28:04',
                                            '2020-12-21 11:28:42',
                                            NULL);

执行上面的SQL后,查询id为40的课程:

mysql> SELECT title, intro FROM t_course WHERE id = 40;
+------------------+------------------+
| title            | intro            |
+------------------+------------------+
| Java面试宝典     | Java面试宝典     |
+------------------+------------------+
1 row in set (0.00 sec)

可以查询到,现在我们把开启的事务回滚,然后再此查询:

rollback;
SELECT title, intro FROM t_course WHERE id = 40;

这是查询结果为空,因为此次事务回滚了,就像没有执行插入操作一样,恢复到之前的位置。

当然,如果使用commit语句就可以提交此事务。提交的事务,不能再回滚。

还有一点请注意,MySQL默认是使用autocommit,自动提交事务的。

2.1 使用保存点

如果我们设置了保存点,该保存点后的SQL都可以回滚,这样我们就可以把数据库恢复到保存点位置的状态了。

现在我们做个测试,开启事务,向课程表t_course插入id为41的课程《TCP协议详解》,然后设置保存点test,再次向课程表t_course插入id为42的课程《分布式事务教程》,SQL如下:

START TRANSACTION;

INSERT INTO `d_mall`.`t_course`(`id`, `title`, `intro`)
VALUES (41,
        'TCP协议详解',
        'TCP协议详解');

SAVEPOINT test;


INSERT INTO `d_mall`.`t_course`(`id`, `title`, `intro`)
VALUES (42,
        '分布式事务教程',
        '分布式事务教程');

现在查询数据,可以看到增加了这两门课程。现在我们回滚保存点test,SQL如下:

ROLLBACK TO SAVEPOINT test;

再次查询,可以看到只有《TCP协议详解》这门课,《分布式事务教程》数据不存在了。

 

总结:数据库事务是很重要的功能,在工作中还需要查阅相关的资料,进一步学习。


赞赏支持


精彩留言

发表评论