MySQL 重中之重 [ 事物 ]
事务
为什么要有事务
事务广泛的运用于订单系统、银行系统等多种场景
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
- 在 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;
注意
- 修改数据的命令会自动的触发事务,包括insert、update、delete
- 而在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 重中之重 [ 事物 ]相关推荐
- 【译文】MySQL InnoDB 事物模型
InnoDB事物模型 事物的隔离级别 自动提交,提交和回滚 一致的非锁定读 锁定读 在InnoDB事物模型中,目标是为了多版本数据库和传统的俩段锁协议的最佳实践(多版本并发控制).InnoDB在行级别 ...
- mysql的事物隔离级别
我们对于InnoDB这个数据存储引擎,他最大的特点是支持了事务,还记得吗,事务除了具有ACID的四大特性以外,事务是不是还有个隔离级别,还记得是什么时候讲过,讲Spring的时候,Spring的事务控 ...
- MySQL中事物的详解
1. 事物的定义及特性 事务是一组操作数据库的SQL语句组成的工作单元,该工作单元中所有操作要么同时成功,要么同时失败.事物有如下四个特性,ACID简称"酸性". 1)原子性:工作 ...
- mysql 保证事物完整性_数据库高并发请求,如何保证数据完整性?详解MySQL/InnoDB的加锁...
本文是对MySQL/InnoDB中,乐观锁.悲观锁.共享锁.排它锁.行锁.表锁.死锁概念的理解,这些在面试中也经常遇到,如数据库高并发请求,如何保证数据完整性?今天我查阅资料进行了MySQL/Inno ...
- MySQL数据库事物隔离级别
mysql数据库的事物隔离级别主要有四种: Serializable 串行化,一个事物一个事物的执行 Repeatable read 可重复读 , 无论其他事物是否修改并提交了数据,在这个事物中看到的 ...
- mysql的事物隔离机制?
2019独角兽企业重金招聘Python工程师标准>>> 1.事物隔离级别 隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted 可能 可能 可能 已提交读( ...
- MySQL(六)事物(ADID,四种隔离级别)(七)索引(索引测试,原则)
6-事物 文章目录 6-事物 1,执行事物 2,模拟事务 3,事务的四种隔离级别 7-索引 7.1, 索引的分类 7.2,测试索引 插入100万数据 测试查询耗时 7.3,索引原则 事务原则:ACID ...
- mysql 开启事物_redis系列之——事物及乐观锁
学习mysql的时候,我们常说mysql是有事物的,事物有ACID四个特性,原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability) ...
- MySQL的事物级别以及MySQL的锁机制
一.事物级别 1.read uncommitted(未提交读) 可以看到未提交的数据(脏读),举个例子:别人说的话你都已经做好了,但是可能只是说说,并不要求你实际去做. 2.reda committe ...
最新文章
- MariaDB/MySQL防止重复插入相同记录:INSERT IGNORE或者REPLACE
- int和Integer区别
- 【FPGA】单端口RAM的设计(异步读、异步写)
- 删除vs中最近的项目的方法
- Codeforces 982 C. Cut 'em all! 图的遍历
- linux检查nginx 状态,Nginx配置检测服务状态的实现方法,
- Hibernate 添加数据 二 (多对多)
- Linux设置封包报头的函数,GitHub - LinuxDigger/RTMP
- VR打造视觉盛宴,丰富精彩生活
- Tecplot 安装记录
- 在20多个程序猿的购物清单中,我们发现了这些秘密
- python模拟类蠕虫--蠕虫初探
- IMO 2017 T4解答
- [游戏程序] 经典游戏服务器端架构概述
- 计算机技术学硕国家线,关于工科国家线专硕学硕
- 工作用哪个邮箱好用?好用的办公邮箱让你放假无烦恼
- 【工大SCIR】AAAI20 基于反向翻译和元学习的低资源神经语义解析
- 资产管理可视化系统-RFID固定资产管理追踪方案-RFID资产管理解决方案-新导智能
- NUC972触摸屏驱动移植过程分析(三)
- 显示器U2518怎么连服务器,【戴尔 U2518D 显示器使用感受】尺寸|分辨率|边框|底座|颜色_摘要频道_什么值得买...
热门文章
- MHA使用非22端口的SSH配置
- 第 22 期:有序遍历语法
- Java异常类复习总结
- 关于docker部署javaweb应用的问题
- 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》
- YY语音招聘运维工程师(web方向),有兴趣的伙伴快来围观
- 调整自己--提升自己
- 面试官系统精讲Java源码及大厂真题 - 25 整体设计:队列设计思想、工作中使用场景
- 车牌识别的matlab程序(程序_讲解_模板),车牌识别的matlab程序(程序讲解模板)
- C# web项目中sql数据库转sqlite数据库