事务命令

事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。

数据库开启事务命令

--start transaction 开启事务--Rollback 回滚事务,即撤销指定的sql语句(只能回退insert delete update语句),回滚到上一次commit的位置--Commit 提交事务,提交未存储的事务-- --savepoint 保留点 ,事务处理中设置的临时占位符 你可以对它发布回退(与整个事务回退不同)

转账实例:

create table test2(id int PRIMARY KEY auto_increment,name VARCHAR(20)) engine=innodb;

INSERT INTOtest2(name) VALUE ("alvin"),

("yuan"),

("xialv");

start transaction;

insert into test2 (name)values('silv');

select * fromtest2;

commit;

--保留点

start transaction;

insert into test2 (name)values('wu');

savepoint insert_wu;

select * fromtest2;

delete from test2 where id=4;

savepoint delete1;

select * fromtest2;

delete from test2 where id=1;

savepoint delete2;

select * fromtest2;

rollback todelete1;

select * from test2;

python中调用数据库启动事务的方式

import pymysql

#添加数据

conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='yyy')

cursor = conn.cursor()

try:

insertSQL0="INSERT INTO ACCOUNT2 (name,balance) VALUES ('oldboy',4000)"

insertSQL1="UPDATE account2 set balance=balance-30 WHERE name='yuan'"

insertSQL2="UPDATE account2 set balance=balance+30 WHERE name='xialv'"

cursor = conn.cursor()

cursor.execute(insertSQL0)

conn.commit()

cursor.execute(insertSQL1)

raise Exception

cursor.execute(insertSQL2)

cursor.close()

conn.commit()

except Exception ase:

conn.rollback()

conn.commit()

cursor.close()

conn.close()

事务特性

<1> 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

<2> 一致性(Consistency):事务前后数据的完整性必须保持一致。在事务执行之前数据库是符合数据完整性约束的,无论事务是否执行成功,事务结束后的数据库中的数据也应该是符合完整性约束的。在某一时间点,如果数据库中的所有记录都能保证满足当前数据库中的所有约束,则可以说当前的数据库是符合数据完整性约束的。 比如删部门表前应该删掉关联员工(已经建立外键),如果数据库服务器发生错误,有一个员工没删掉,那么此时员工的部门表已经删除,那么就不符合完整性约束了,所以这样的数据库也就性能太差啦!

<3>隔离性(Isolation):事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

<4>持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

三、隔离性:将数据库设计为串行化程的数据库,让一张表在同一时间内只能有一个线程来操作。如果将数据库设计为这样,那数据库的效率太低了。所以数据库的设计这没有直接将数据库设计为串行化,而是为数据库提供多个隔离级别选项,使数据库的使用者可以根据使用情况自己定义到底需要什么样的隔离级别。

不考虑隔离性可能出现的问题:

脏读

--一个事务读取到了另一个事务未提交的数据,这是特别危险的,要尽力防止。

a 1000b 1000a:

start transaction;

update set money=money+100 where name=b;

b:

start transaction;

select * from account where name=b;--1100

commit;

a:

rollback;

b: start transaction;

select * from account where name=b;--1000

不可重复读

--在一个事务内读取表中的某一行数据,多次读取结果不同。(一个事务读取到了另一个事务已经提交--的数据--增加记录、删除记录、修改记录),在某写情况下并不是问题,在另一些情况下就是问题。

a:

start transaction;

select 活期账户 from account where name=b;--1000 活期账户:1000

select 定期账户 from account where name=b;--1000 定期账户:1000

select 固定资产 from account where name=b;--1000 固定资产:1000------------------------------

b:

start transaction;

update set money=0 where name=b;

commit;

------------------------------

select 活期+定期+固定 from account where name=b; --2000 总资产: 2000

虚读

是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。(一个事务读取到了另一个事务已经提交的数据---增加记录、删除记录),在某写情况下并不是问题,在另一些情况下就是问题。

b 1000c 2000d 3000a:

start transaction

select sum(money) from account;---3000 3000-------------------

d:start transaction;

insert into account values(d,3000);

commit;

-------------------

select count(*)from account;---3 3

3000/3 = 1000 1000

四个隔离级别:Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)不可以避免虚读Read committed:可避免脏读情况发生(读已提交)Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

安全性考虑:Serializable>Repeatable read>Read committed>Read uncommitted数据库效率:Read uncommitted>Read committed>Repeatable read>Serializable

一般情况下,我们会使用Repeatable read、Read committed mysql数据库默认的数据库隔离级别Repeatable read

mysql中设置数据库的隔离级别语句:

如果使用global则修改的是数据库的默认隔离级别,所有新开的窗口的隔离级别继承自这个默认隔离级别如果使用session修改,则修改的是当前客户端的隔离级别,和数据库默认隔离级别无关。当前的客户端是什么隔离级别,就能防止什么隔离级别问题,和其他客户端是什么隔离级别无关。mysql中设置数据库的隔离级别语句:

cp :https://www.cnblogs.com/yuanchenqi/articles/6437362.html

python如何画动态海浪_python 事务相关推荐

  1. python如何画动态海浪_python使用matplotlib画动态图

    matplotlib是python的核心绘图库,是python的一个开源项目,旨在为python提供一个绘图库. matplotlib matplotlib与numpy组合是一种可行的matlab替代 ...

  2. python怎样画动态文字_Python制作动态字符图的实例

    这次我们拿小龙猫来做演示 这里就不必多说了,也就导入几个用到的包: SOURCE_PATH:这个是GIF的路径OUTPUT_PATH:这个是每一帧的存放路径FRAMES_PATH:这个也是每一帧的存放 ...

  3. python怎样画动态文字_Python之pygame学习绘制文字制作滚动文字

    pygame绘制文字 ✕ 今天来学习绘制文本内容,毕竟游戏中还是需要文字对玩家提示一些有用的信息. 字体常用的不是很多,在pygame中大多用于提示文字,或者记录分数等事件. 字体绘制基本分为以下几个 ...

  4. python plt 画动态折线图

    python plt 画动态折线图 # coding=utf-8import matplotlib.pyplot as plt import numpy as npdef main():plt_lis ...

  5. python可以画动态图吗_matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解

    学习python的道路是漫长的,今天又遇到一个问题,所以想写下来自己的理解方便以后查看. 在使用matplotlib的过程中,常常会需要画很多图,但是好像并不能同时展示许多图.这是因为python可视 ...

  6. Python Turtle 画动态圣诞贺卡

    Python画动态圣诞贺卡 兔兔大人的第一个博客 圣诞节制作了一款动态贺卡,有圣诞树,点亮彩灯,飘雪以及文字效果.这是我的第一个博客作品,希望大家喜欢. 效果如下,有动态效果. 代码如下: # -*- ...

  7. python程序画漂亮图片_Python能画美观的专业插图吗 ?当然!

    原标题:Python能画美观的专业插图吗 ?当然! 文末领取[Python绘图代码] 冯昱尧| 方法一作者 阿昆 | 方法二作者 极市平台 | 编译 知乎 | 来源 1 方法一 强烈推荐 Python ...

  8. python爬取动态网页_python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  9. python turtle画滑稽表情_python使用turtle库绘制奥运五环

    python使用turtle库绘制奥运五环 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令 ...

最新文章

  1. devDependencies与dependencies (转载)
  2. SQL Server 2008 无法删除用户的解决方法
  3. Jzoj3931【NOIP2014day1官方数据】联合权值
  4. springiocxml方式注入对象原理分析
  5. MySql 扩展存储引擎
  6. 漫步微积分二十七——曲线下的面积 定积分 黎曼
  7. 智能物流给力零售业跨越式发展
  8. android md5使用方法,android 使用DigestUtilsmd5加密的方法
  9. Sample DataBase 资源
  10. AHP计算权重.mat
  11. 好站推荐-四个在线识别字体网站,从此不在为找字体烦恼
  12. 小知识:Windows XP优化全攻略(网吧型)
  13. Unity【Bounds Vector3 Cross】- 如何判断一个物体是否在一个凸边体三维区域内
  14. Java--反射机制
  15. Js基础——变量类型和计算
  16. 飞书开放平台-全新消息卡片搭建工具
  17. pause容器作用_kubernetes中的Pause容器如何理解?
  18. 淘宝网上免费注册页面的错误
  19. ecshop 邮件模板 html,ecshop邮件模板默认数据与恢复.doc
  20. 小兵围大炮||大兵小将【C++】

热门文章

  1. 借助区块链技术,打通各部门_借助新兴的机器人技术在家里进行创新
  2. 怎样实现服务器端渲染?
  3. 长夜漫漫,为何有尽头
  4. 2012_p3 摆花 (flower.cpp/c/pas)
  5. 代码重构与体系结构重构
  6. 爱丽丝钢琴-Native Instruments Alicia’s Keys 1.5 Kontakt
  7. 使用Java的继承关系来描述动物世界的特征和关系。
  8. excel和word卡死、未响应、打开慢、问题的解决方案
  9. Qt for android不能连接华为手机
  10. 【AMI BIOS入门】添加item-POWERLED_CONFIGURATION