mysql事务

mysql innodb引擎的事务

痴心易碎 提交于 2020-02-02 23:52:54
数据库事务是数据库执行过程中的一个逻辑单位,一个事务通常包含了对数据库的读/写操作。它的存在包含有以下两个目的:1.为数据库操作序列提供了一个回滚的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。2.当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。(就是提供了事务隔离级别设置来处理并发问题) 一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。** 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 ** 3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。** 4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。** 二、事务并发问题名词解释 1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据 2

MySQL--事务

二次信任 提交于 2020-02-02 09:55:24
事务的基本介绍: 概念 :如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 操作 : 1,开启事务:start transaction; 2,回滚:rollback; 3,提交:commit; 理解 :也就是在多行sql语句中,加上一行start transaction开头,那么这多行语句就相当于一个事务。在运行时,数据是暂时性的修改,除非在末尾加上commit。如果某一行语句出现了错误,导致数据的不正确,最后一行就加rollback。 例子: ------中间那一行并没有加上注释,如果正常运行的话,将执行Tom那一行,Sam那一行不会执行。(转钱例子) MySQL数据库事务默认自动提交 事务提交的两种方式 : 1,自动提交:mysql就是自动提交的。一条DML语句会自动提交事务。 2,手动提交:oracle数据库默认是手动提交事务。需要开启事务在提交。 修改事务的提交方式 : 1,查看事务的默认提交方式:select @@autocommit; -1代表自动提交,0表示手动提交。 2,修改默认提交方式:set @@autocommit=0 事务的四大特征 :(面试经常问到) 1,原子性:是不可分割的最小单位,要么同时成功,要么同时失败。 2,持久性:当事务提交或回滚之后,数据库会持久化的保存数据。 3,隔离性:多个事务之间,相互独立。 4

【Python】 MySQLdb的安装与使用

心已入冬 提交于 2020-02-02 05:28:08
MySQLdb   MySQLdb是一款较为底层的,python连接mysql用的模块。和更加高级的,提供ORM的模块不同,MySQLdb主要还是聚焦于如何和数据库进行连接和进行基本的操作,操作的体现形式主要还是进行SQL语句的执行。 ■  安装   在Linux下 pip install MySQL-python   如果安装之后仍不能正常运行,尝试用yum install MySQL-python,因为这个模块需要一些第三方程序来运行的。   如果是在windows环境下安装的话那么可以直接下载一个安装程序来安装已经编译好的模块。比如去【http://www.codegood.com/downloads】下载。 ■  基本使用   MySQLdb提供了connect方法来建立一个与数据库的连接,调用这个对象的close方法来关闭一个连接。通过这个连接可以创建出一个游标对象,通过游标对象来进行数据的增删查改。 import MySQLdb db = MySQLdb.connect(host='localhost',user='weiyz',passwd='123456',db='test_DB',charset='utf-8') cursor = db.cursor() #创建一个游标对象 cursor.excute("use test_table;show tables;")

spring @Transactional注解参数详解(13)

非 Y 不嫁゛ 提交于 2020-02-02 04:31:57
事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需要事物时: 1 @Transactional 2 public class TestServiceBean implements TestService { 3 private TestDao dao; 4 public void setDao(TestDao dao) { 5 this.dao = dao; 6 } 7 @Transactional(propagation =Propagation.NOT_SUPPORTED) 8 public List getAll() { 9 return null; 10 } 11 } 事物传播行为介绍:   @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)   @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务   @Transactional(propagation

python操作mysql数据库

只谈情不闲聊 提交于 2020-02-02 04:23:49
http://www.runoob.com/python/python-mysql.html Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问 Python数据库接口及API 查看详细的支持数据库列表。 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。 Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。 Python DB-API使用流程: 引入 API 模块。 获取与数据库的连接。 执行SQL语句和存储过程。 关闭数据库连接。 什么是MySQLdb? MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库

python操作mysql

百般思念 提交于 2020-02-02 04:23:18
数据库的事务机制: 事务机制可以确保数据一致性。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。 conn.commit()方法游标的所有更新操作,conn.rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。 python连接mysql需要用到MySQLdb这个模块,MySQLdb的常用方法有: cur.fetchone() # 该方法获取下一个查询结果集。结果集是一个对象 cur.fetchall() # 接收全部的返回结果行 例1: 1 # -*-

python操作mysql数据库

喜夏-厌秋 提交于 2020-02-02 04:22:27
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问 Python数据库接口及API 查看详细的支持数据库列表。 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。 Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。 Python DB-API使用流程: 引入 API 模块。 获取与数据库的连接。 执行SQL语句和存储过程。 关闭数据库连接。 什么是MySQLdb? MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。 如何安装MySQLdb?

Python3 MySQL 数据库连接

杀马特。学长 韩版系。学妹 提交于 2020-02-02 04:15:31
什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 PyMySQL 安装 在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。 PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。 如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL: $ pip install PyMySQL 如果你的系统不支持 pip 命令,可以使用以下方式安装: 1、使用 git 命令下载安装包安装(你也可以手动下载): $ git clone https://github.com/PyMySQL/PyMySQL $ cd PyMySQL/ $ python3 setup.py install 2、如果需要制定版本号,可以使用 curl 命令来安装: $ # X.X 为 PyMySQL 的版本号 $ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz $ cd PyMySQL* $ python3 setup.py

Mysql事务的隔离级别

只愿长相守 提交于 2020-02-01 09:17:43
注:转 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。 Read Committed(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。 Repeatable Read(可重读) 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion

Spring-----AOP-----事务

隐身守侯 提交于 2020-02-01 09:09:07
xml文件中: 手动处理事务: 设置数据源 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/transfer"></property> <property name="user" value="root"></property> <property name="password" value="123456"></property></bean> 创建事务管理器,因为使用的是jdbc操作数据库,所以使用DataSourceTransactionManager事务管理需要事务,事务来自Connection,即来自连接池,所以要 注入数据源。 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"><