mysql的事务操作
原子操作:全部执行完,如果执行不完就回滚到执行前的状态.
mysql的事物操作具有原子性
| 数据库 | 支持的引擎 | 适用场景 |
| Mysql | INNODB存储引擎 | 多表关联时的数据增删改查 |
| 单表的多次操作 |
mysql支持的最基本的原子操作[5]
CURD
C:create(insert)插入操作
U:update,更新操作
R:read(select)查询操作
D:delete删除操作
[3]mongodb 4.0+ 已经开始支持事务了。
概念上:
原子操作≠事物操作
事物操作叫原子性操作,而不是原子操作
下面是两个示意图:
注意:
谈到事物操作,可以有两种意思:
一种意思是web的事物操作,例如Django的装饰器@transaction.atomic
一种意思是mysql数据库本身支持的事物操作,
阅读资料时需要联系上下文搞清楚到底是指哪一种意思.
开源包对回滚的支持如何?
| 开源包 | 显式支持/隐式 |
| MySQLdb | 显式[7] Python>3.4不支持 |
| Pymysql | 隐式 |
----------------------------------------------------------------------------测试回滚效果-----------------------------------------------------------------------------
pymysql_test.py
#!/usr/bin/env python #coding:utf-8import tornado.ioloop import tornado.web #导入tornado模块下的web文件 import pymysql #导入数据库模块class khdHandler(tornado.web.RequestHandler):def get(self):#连接数据库conn = pymysql.connect(host='127.0.0.1', port=3306, user='appleyuchi', passwd='appleyuchi', db='employees',charset='utf8')# 创建游标cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#获取存储过程(函数)的返回值effect_row = cursor.execute("UPDATE employees SET first_name='Georgi2' WHERE emp_no = '10001'")effect_row = cursor.execute("UPDATE employees2 SET first_name='Georgi2' WHERE emp_no = '9999'")fhuizhi = cursor.fetchone()print(fhuizhi)# 提交,不然无法保存新建或者修改的数据conn.commit()# 关闭游标cursor.close()# 关闭连接conn.close()self.write("欢迎访问")settings = { #html文件归类配置,设置一个字典"template_path":"views", #键为template_path固定的,值为要存放HTML的文件夹名称"static_path":"statics", #键为static_path固定的,值为要存放js和css的文件夹名称 }#路由映射 application = tornado.web.Application([ #创建一个变量等于tornado.web下的Application方法(r"/khd", khdHandler), ],**settings) #将html文件归类配置字典,写在路由映射的第二个参数里if __name__ == "__main__":#内部socket运行起来application.listen(8000) #设置端口tornado.ioloop.IOLoop.instance().start()pymysql的事物操作原子性测试:
数据集来自[9]
python pymysql_test.py
浏览器打开:
http://127.0.0.1:8000/khd
查看数据库employees中的employees表格,
会发现emp_no数据的first_name没有改变,具备回滚能力.
---------------------------------------------------------------------------------------------------------------------------------------------------------
总结:
用python交互mysql,你不需要关心原子性事物操作,pymysql的作者都帮你考虑好了.
这玩意儿就是面试有用,上班时基本没用.
#--------------------------------------------------------------------------------------------------------------------------------------
Reference:
[1]事务 --- 一般用在哪里
[2]python-django中使用事务以及小坑
[3]关于mongodb事务的问题
[4]数据库的基本原子操作
[5]数据库的基本原子操作
[6]事务和原子操作
[7]MySQL Python tutorial
[8]mysql(九)事务操作(回滚)
[9]mysql练习用的数据集下载
创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖总结
以上是生活随笔为你收集整理的mysql的事务操作的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: SQL Server根据子查询更新语句u
- 下一篇: pyspark报错java.lang.C