原子操作:全部执行完,如果执行不完就回滚到执行前的状态.

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的事务操作相关推荐

  1. python 多人连接mysql 进行事务操作 对mysql加锁与释放锁

    python 多人连接mysql 对mysql进行事务操作 对mysql加锁与释放锁 下面这个是user1代码块 # -*- coding: utf-8 -*- # user1 import pymy ...

  2. ThinkPHP6项目基操(19.实战部分 Mysql模型事务操作)

    模型事务操作 前言 1. Mysql数据库注意 2. thinkPHP模型使用事务 前言 事务操作在复杂的数据库操作的时候尤为重要,特别是在操作多张表的时候,如果某一步骤出错了,就会导致有脏数据,会很 ...

  3. MySql的事务操作与演示样例

    事务就是一个逻辑工作单元的一系列步骤. 事务是用来保证数据操作的安全性 事务的特征: Atomicity(原子性) Consistency(稳定性,一致性) Isolation(隔离性) Durabi ...

  4. 事务操作 mysql的事务操作

    事务操作 举例: create table my_account( id int unsigned not null primary key auto_increment, account varch ...

  5. mysql 一对一关联查询_学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联...

    之所以从20天才开始写随笔记是因为之前没搞自己的博客 从20天开始记录我在ThinkPHP中的点点滴滴 1.MySQL事务操作 /**事务操作*/ //startTrans启动事务.rollback回 ...

  6. mysql事务操作——transaction

    [实施工程师]必备技能--事务操作 目录 [实施工程师]必备技能--事务操作 mysql开启事务: mysql提交事务: mysql事务回滚: 实例: 1.开启事务并执行[增删改]语句测试 2.回滚测 ...

  7. mysql 事务操作详细实例介绍

    1.打开mysql 本人由于重装了系统之后,不能快速正确找到mysql客户端,所以需要使用cmd窗口来运行命令行程序. 如果在打开cmd窗口时就使用mysql命令,会出现如下错误: 这是由于没有目前还 ...

  8. mysql数据库事务的回滚操作

    事务的基本概念:如果一个包含多个步骤业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败. mysql数据库中事务默认自动提交 事务提交两种方式: 自动提交:一条DML(增删改)语句会自动提交 ...

  9. mysql 事务操作与锁机制

    mysql 事务操作与锁机制

最新文章

  1. 某云数据中心网络解决方案(分享二十一)
  2. 批量插入以及数据存在重复就进行更新操作
  3. hpm128无法共享打印_打印机共享后不能打印的解决方法,文末有难题有高手能解决的?...
  4. 云原生 | 阿里巴巴的Dapr实践与探索
  5. RHEL6 Tiny Linux 的制作
  6. 【转】常用 blas 函数
  7. Security+Oauth2权限认证(案例 源码)
  8. 开关电源三种拓扑的产生
  9. UML2.0详细教程(附示例)
  10. Arcgis 区位图绘制
  11. 评弱水三千,该取几瓢饮?———贪恋还是专情
  12. 【CV细粒度识别论文总结】The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification
  13. 2018时间的朋友罗振宇跨年演讲主题是什么?
  14. (已解决)579B但答案仍旧错误terminate called after throwing an instance of ‘ std::bad_array_length‘,
  15. Linux之安装Nginx(安装包方式)
  16. 如何改域的NETBIOS名?
  17. 小白学习HCIA2022
  18. linux 中的DNS服务
  19. Nature Microbiology:植物根系分泌物影响菌群结构
  20. 解决网站因调用谷歌字体库打开慢(适用wordpress和调用谷歌内容的网站)

热门文章

  1. RAC的搭建(一)--安装环境准备
  2. Android Studio解决未识别Java文件(出现红J)问题
  3. mysql 优化20点
  4. 配置 Hdp 4 Window 中的一些问题
  5. JavaScript 表单验证
  6. Cheatsheet: 2011 12.01 ~ 12.12
  7. 先锋展示了可爱鸟形车载机器
  8. Knowledge Graph Alignment Network with Gated Multi-Hop Neighborhood Aggregation-学习笔记
  9. ZooKeeper入门(一)
  10. Android 本地tomcat服务器接收处理手机上传的数据之案例演示