》了解事务

数据库的操作,比如银行转帐

一方扣款,一方收款

两个操作要么同时完成,要么同时不完成

这就是事务

》通过例子了解

创建一个数据库

mysql事务-与pymyql的事务_mysql

插入数据

新建了两个用户,让他们有资金

mysql事务-与pymyql的事务_数据_02

开始事务

》事务

操作时开两个mysql客户端,一个操作事务,一个实时查询

观注一下是否有变化

mysql事务-与pymyql的事务_插入数据_03

开始事务的操作

start transaction

mysql事务-与pymyql的事务_mysql_04

如果发生了错误,可以回滚

rollback

mysql事务-与pymyql的事务_sql语句_05

金额回到了从前

再完整的再操作一次

先从一个人扣钱

mysql事务-与pymyql的事务_数据_06

再从另一个人帐户上加钱

mysql事务-与pymyql的事务_mysql_07

提交事务

commit

mysql事务-与pymyql的事务_数据_08

》通过python来处理事务

代码分析

mysql事务-与pymyql的事务_数据库_09

本代码中模拟了几个sql语句的操作

明确这样几个点

游标对象.execute(sql语句)

只是准备执行,语句并未真正的生效

只有数据库的连接对象 commit()了以后

才真的生效了

代码中通过raise Exception模拟了一个错误

在错误发生后,进处异常处理代码块

通过回滚,让操作回到最近一次commit的地方

防止多余的操作

详情先分析代码再做小结

》小结

pymysql的操作都是基于事务的

sql语句执行后一定要commit才会真真景响到数据库

让数据库的连接对象commit

如果发生错误,可以通过连接对象的rollback()返回

》继续关于mysql的事务

mysql事务-与pymyql的事务_插入数据_03

先创建表和插入数据

mysql事务-与pymyql的事务_数据_11

然后rollback

问题? 这三条数据是否有插入成功到数据库中

答案:

mysql事务-与pymyql的事务_数据库_12

有插入。原因需要明确

开启事务

插入数据

mysql事务-与pymyql的事务_插入数据_13
提交,让数据真正的存进去

mysql事务-与pymyql的事务_sql语句_14

开始存档操作,savepoint保留点

  • 同时开启一个横向的时间图,把数据和存档点记录一下

mysql事务-与pymyql的事务_sql语句_15

mysql事务-与pymyql的事务_数据_16

mysql事务-与pymyql的事务_数据_17

》读取存档,回到存档点

mysql事务-与pymyql的事务_数据库_18

回到保留点,存档1的位置