事务

为什么要有事务

事务广泛的运用于订单系统、银行系统等多种场景

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务用来管理 insert,update,delete(增,改,删) 语句

例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性

事务四大特性(简称ACID)

  • 原子性(Atomicity)

  • 一致性(Consistency)

  • 隔离性(Isolation)

  • 持久性(Durability)

一个很好的事务处理系统,必须具备这些标准特性:

  • 原子性(atomicity)

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性

  • 一致性(consistency)

数据库总是从一个一致性的状态转换到另一个一致性的状态。

  • 隔离性(isolation)

通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(一个事物在对一行数据进行操作的时候会上行间锁,其他客户端在试听修改此行数据时会进入等待状态,知道上一个上锁的事物提交才会对该行解锁)

  • 持久性(durability)

一旦事务提交,则其所做的修改会永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)

开启事务,命令如下:

  • 开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
begin;  -- 常用
或者
start transaction;

提交事务,命令如下

  • 将缓存中的数据变更维护到物理表中
commit;

使用python进行MySQL操作的时候默认开启了事物,所有每次操作完成后都要调用commit,其实也可以在创建MySQL连接后使用autocommit(1)让他自动提交事物,1表示开启,0表示关闭

回滚事务,命令如下:

  • 放弃缓存中变更的数据
rollback;

注意

  1. 修改数据的命令会自动的触发事务,包括insert、update、delete
  2. 而在SQL语句中有手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起会滚到之前的数据
示例:
from pymysql import *def main():# 创建connect连接对象conn = connect(host="localhost", user="root",password="mysql",database="jing_dong_test")# 开启自动提交事务conn.autocommit(1)# 创建cursor游标对象cs = conn.cursor()sql = "insert into money values (0, 555)"cs.execute(sql)conn.rollback()  # 回滚事物# 手动开启事务前会把原来的事务给提交conn.begin()sql = "insert into money values (0, 666)"cs.execute(sql)# 回滚事务# conn.rollback()# conn.commit() 如果没有设置自动提交事物,此处要手动提交# 关闭游标对象cs.close()# 关闭连接对象conn.close()if __name__ == "__main__":main()

MySQL 重中之重 [ 事物 ]相关推荐

  1. 【译文】MySQL InnoDB 事物模型

    InnoDB事物模型 事物的隔离级别 自动提交,提交和回滚 一致的非锁定读 锁定读 在InnoDB事物模型中,目标是为了多版本数据库和传统的俩段锁协议的最佳实践(多版本并发控制).InnoDB在行级别 ...

  2. mysql的事物隔离级别

    我们对于InnoDB这个数据存储引擎,他最大的特点是支持了事务,还记得吗,事务除了具有ACID的四大特性以外,事务是不是还有个隔离级别,还记得是什么时候讲过,讲Spring的时候,Spring的事务控 ...

  3. MySQL中事物的详解

    1. 事物的定义及特性 事务是一组操作数据库的SQL语句组成的工作单元,该工作单元中所有操作要么同时成功,要么同时失败.事物有如下四个特性,ACID简称"酸性". 1)原子性:工作 ...

  4. mysql 保证事物完整性_数据库高并发请求,如何保证数据完整性?详解MySQL/InnoDB的加锁...

    本文是对MySQL/InnoDB中,乐观锁.悲观锁.共享锁.排它锁.行锁.表锁.死锁概念的理解,这些在面试中也经常遇到,如数据库高并发请求,如何保证数据完整性?今天我查阅资料进行了MySQL/Inno ...

  5. MySQL数据库事物隔离级别

    mysql数据库的事物隔离级别主要有四种: Serializable 串行化,一个事物一个事物的执行 Repeatable read 可重复读 , 无论其他事物是否修改并提交了数据,在这个事物中看到的 ...

  6. mysql的事物隔离机制?

    2019独角兽企业重金招聘Python工程师标准>>> 1.事物隔离级别 隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted 可能  可能 可能 已提交读( ...

  7. MySQL(六)事物(ADID,四种隔离级别)(七)索引(索引测试,原则)

    6-事物 文章目录 6-事物 1,执行事物 2,模拟事务 3,事务的四种隔离级别 7-索引 7.1, 索引的分类 7.2,测试索引 插入100万数据 测试查询耗时 7.3,索引原则 事务原则:ACID ...

  8. mysql 开启事物_redis系列之——事物及乐观锁

    学习mysql的时候,我们常说mysql是有事物的,事物有ACID四个特性,原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability) ...

  9. MySQL的事物级别以及MySQL的锁机制

    一.事物级别 1.read uncommitted(未提交读) 可以看到未提交的数据(脏读),举个例子:别人说的话你都已经做好了,但是可能只是说说,并不要求你实际去做. 2.reda committe ...

最新文章

  1. MariaDB/MySQL防止重复插入相同记录:INSERT IGNORE或者REPLACE
  2. int和Integer区别
  3. 【FPGA】单端口RAM的设计(异步读、异步写)
  4. 删除vs中最近的项目的方法
  5. Codeforces 982 C. Cut 'em all! 图的遍历
  6. linux检查nginx 状态,Nginx配置检测服务状态的实现方法,
  7. Hibernate 添加数据 二 (多对多)
  8. Linux设置封包报头的函数,GitHub - LinuxDigger/RTMP
  9. VR打造视觉盛宴,丰富精彩生活
  10. Tecplot 安装记录
  11. 在20多个程序猿的购物清单中,我们发现了这些秘密
  12. python模拟类蠕虫--蠕虫初探
  13. IMO 2017 T4解答
  14. [游戏程序] 经典游戏服务器端架构概述
  15. 计算机技术学硕国家线,关于工科国家线专硕学硕
  16. 工作用哪个邮箱好用?好用的办公邮箱让你放假无烦恼
  17. 【工大SCIR】AAAI20 基于反向翻译和元学习的低资源神经语义解析
  18. 资产管理可视化系统-RFID固定资产管理追踪方案-RFID资产管理解决方案-新导智能
  19. NUC972触摸屏驱动移植过程分析(三)
  20. 显示器U2518怎么连服务器,【戴尔 U2518D 显示器使用感受】尺寸|分辨率|边框|底座|颜色_摘要频道_什么值得买...

热门文章

  1. MHA使用非22端口的SSH配置
  2. 第 22 期:有序遍历语法
  3. Java异常类复习总结
  4. 关于docker部署javaweb应用的问题
  5. 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》
  6. YY语音招聘运维工程师(web方向),有兴趣的伙伴快来围观
  7. 调整自己--提升自己
  8. 面试官系统精讲Java源码及大厂真题 - 25 整体设计:队列设计思想、工作中使用场景
  9. 车牌识别的matlab程序(程序_讲解_模板),车牌识别的matlab程序(程序讲解模板)
  10. C# web项目中sql数据库转sqlite数据库