mysql事务

【MySQL】数据库事务深入分析

一世执手 提交于 2019-11-28 00:32:17
一、前言 只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件 二、常见的并发问题 1、脏读 一个事务读取了另一个事务未提交的数据 2、不可重复读 一个事务对同一数据的读取结果前后不一致。两次读取中间被其他事务修改了 3、幻读 幻读是指事务读取某个范围的数据时,因为其他事务的操作导致前后两次读取的结果不一致。幻读和不可重复读的区别在于,不可重复读是针对确定的某一行数据而言,而幻读是针对不确定的多行数据。因而幻读通常出现在带有查询条件的范围查询中 三、事务隔离级别 1、读未提交(READ UNCOMMITTED) 可能产生脏读、不可重复读、幻读 2、读已提交(READ COMMITTED) 避免了脏读,可能产生不可重复读、幻读 3、可重复读(REPEATABLE READ)(mysql默认隔离级别) 避免了脏读,不可重复读。通过区间锁技术避免了幻读 4、串行化(SERIALIZABLE) 串行化可以避免所有可能出现的并发异常,但是会极大的降低系统的并发处理能力 四、数据库日志有哪些? 1、undo日志 undo日志用于存放数据修改被修改前的值 UNDO LOG中分为两种类型,一种是 INSERT_UNDO(INSERT操作),记录插入的唯一键值; 一种是 UPDATE_UNDO(包含UPDATE及DELETE操作),记录修改的唯一键值以及old column记录。

Python连接MySQL数据库之pymysql模块使用

旧城冷巷雨未停 提交于 2019-11-28 00:07:16
Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。 PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 PyMySQL安装 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意: 你有一个MySQL数据库,并且已经启动。 你有可以连接该数据库的用户名和密码 你有一个有权限操作的database 基本使用 # 导入pymysql模块 import pymysql # 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 定义要执行的SQL语句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL

mybatis

南笙酒味 提交于 2019-11-27 23:39:46
一.基本认识 二.hello,mybatis 2.1 导包 2.2 基本准备(表,domain) 2.3 创建配置文件 jdbc.properties:数据库的参数 mybatis-config.xml:mybatis的核心配置 ProductMapper.xml:sql语句 2.4 测试 三.工具类与CRUD 3.1 准备MyBatisUtil 3.1 完成CRUD 3.1.1 productMapper.xml 3.1.1 productDao中完成功能 四.细节处理 4.1 添加的对象返回id 4.2 别名的配置 4.3 日志的处理 4.4 #与$的区别(面试题) 五.批量操作与动态SQL 5.1 批量添加 5.2 批量删除 5.3 动态修改 今日扩展 连接池 mysql的数据库引擎 一.基本认识 mybatis是一个ORM框架 ORM:对象关系映射 mybatis对jdbc的重复代码进行了封装,依然需要自己写sql(比jdbc开发快,比jpa性能好) 二.hello,mybatis 2.1 导包 mybatis核心包 mybatis/mybatis-3.2.1.jar mybatis的依赖包 mybatis/lib/*.jar jdbc驱动包 mysql-connector-java-5.1.26-bin.jar 2.2 基本准备(表,domain) 库(mybatis)

脏读、幻读和不可重复读?为啥?

谁说我不能喝 提交于 2019-11-27 22:11:12
前言: 一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。 例子: 对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中A和B的存款总额为x元不变。 Isolation 隔离性: 数据库允许多个并发事务同事对数据进行操作,隔离性保证各个事务相互独立,事务处理时的中间状态对其它事务是不可见的,以此防止出现数据不一致状态。 例子: 在Windows中,如果多个进程对同一个文件进行修改是不允许的,Windows通过这种方式来保证不同进程的隔离性。 Durable 持久性: 一个事务处理结束后,其对数据库的修改就是永久性的,即使系统故障也不会丢失。 脏读、幻读和不可重复读的概念 脏读: 所谓脏读是指一个事务中访问到了另外一个事务未提交的数据,如下图: 如果会话 2 更新 age 为 10,但是在 commit 之前,会话 1 希望得到 age,那么会获得的值就是更新前的值。或者如果会话 2 更新了值但是执行了 rollback,而会话 1 拿到的仍是 10。这就是脏读。 不可重复读: 一个事务查询同一条记录2次,得到的结果不一致: 由于在读取中间变更了数据,所以会话 1 事务查询期间的得到的结果就不一样了。 幻读: 一个事务查询2次,得到的记录条数不一致:

laravel事务回滚失败

怎甘沉沦 提交于 2019-11-27 22:03:57
1.  DB::beginTransaction();//开启事务    DB::rollback();//回滚    DB::commit();//提交 2 查看MySQL数据表是否为InnoDB表 3 查看开启事务的是否为对应数据库 DB::connection('对应的数据库名')->beginTransaction(); DB::connection('对应的数据库名')->rollback(); DB::connection('对应的数据库名')->commit(); 来源: https://www.cnblogs.com/marco123/p/11379705.html

19-08-19

怎甘沉沦 提交于 2019-11-27 21:48:26
※1※ 数据库的存储过程 (Stored Procedure): 参考链接:https://www.imooc.com/article/19811    ※什么是数据库的存储过程: 是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 ※ 为什么要使用存储过程??(存储过程的好处/优点) (1)实现了模块化编程。 (2)调用一次以后,相关信息就保存在内存中,下次调用时可以直接执行。 (3)存储过程可以接受输入参数并可以返回输出值。 (4)存储过程具有对数据库立即访问的功能。 (5)使用存储过程可以加快程序的运行速度。 (6)使用存储过程可以减少网络流量。 (7)使用存储过程可以提高数据库的安全性。 ※存储过程的分类: (1)数据库系统存储过程:数据库自带 (2)用户自定义数据库存储过程:由用户根据需要自定义 ※2※谈谈你理解的事务: 参考链接:https://blog.csdn.net/JIESA/article/details/51317164 ※事务的特性(ACID):对于一个事务必须遵守ISO/IEC所定制的ACID原则 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性) ※事务产生的原因: 由事务的隔离特性

数据库的简单知识梗概

こ雲淡風輕ζ 提交于 2019-11-27 21:40:40
一、数据库优化 方法:    MySQL可以建分表,读写分离,建索引,一般经常更新的字段不适合建索引,建索引会降低数据非查询操作的效率。主键是一种特殊的索引。   导致索引失效的情况:1.如果条件中有or,即使其中有条件带索引也不会使用到。2.对于多列索引,不是使用的第一部分,则不会使用索引。3.like查询是以%开头,而不是以%结尾。4.如果索引列类型是字符串,一定要在条件中将数据使用引号引用起来,否则不使用索引。5.如果MySQL估计使用全表扫描要比使用索引快,则不使用索引。 二、MySQL引擎的种类和区别 ①种类:MyISAM、InnoDB、MEMORY、MERGE、Archive、Blackhole、CSV、Federate、Merge、NDB集群引擎、第三方引擎:OLTP类引擎、面向列的存储引擎、社区存储引擎。 ②区别: A、MyISAM是MySQL5.1及之前的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。MyISAM表还支持3中不同的存储格式:静态表、动态表、压缩表。 B、InnoDB存储引擎提供了具有提交、回滚、和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。InnoDB的存储方式为:使用共享表空间存储;使用多表空间。 C

【MySQL】存储引擎

浪子不回头ぞ 提交于 2019-11-27 21:29:22
原文: http://blog.gqylpy.com/gqy/245 " 目录 #. MySQL支持的存储引擎 1. InnoDB 2. MyISAM 3. NDB 4. Memory 5. Infobright 6. NTSE 7. BLACKHOLE MySQL中的库即文件夹,表即文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制.(如:处理文本用txt类型,处理表格用excel, 处理图片 用png等) 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. PS:存储引擎说白了就是如何存储数据,如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库 中数据 的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) 在Oracle和SQL Server等数据库中只有一种存储引擎,所有数据库存储管理机制都是一样的,而MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。 ![在这里插入图片描述](http://blog.gqylpy.com/media/ai/2019-03/f065e887-be54-4608-a236-c400c1478427.png) SQL解释器

MySQL

烂漫一生 提交于 2019-11-27 21:03:59
1.1 mysql 架构   mysql 分为 server 层和存储引擎 1.1.1 server层 连接器:管理连接权限验证 查询缓存:命中缓存直接换回查询结果 分析器:分析语法 优化器:生成执行计划,选择索引 执行器:操作索引返回结果 1.1.2 存储引擎 存储引擎负责数据的存储和提取;其架构是插件式的。innodb 在 mysql5.5.5 版本开始成为 mysql 默认存储引擎。 各存储引擎比对: InnoDB:支持事务,支持外键,InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据,不支持全文索引。 MyISAM:不支持事物,不支持外键,MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的,查询效率上 MyISAM 要高于 InnnDB ,因此做读写分离的时候一般选择用 InnoDB 做主机,MyISAM 做从机 Memory:有比较大的缺陷使用场景很少;文件数据都存储在内存中,如果 mysqld 进程发生异常,重启或关闭机器这些数据都会消失。 1.1.3 sql 的执行过程   第一步客户端连接上 mysql 数据库的连接器,连接器获取权限,维持管理连接;连接完成后如果你没有后续的指令这个连接就会处于空闲状态

MySQL的四种隔离级别

ぃ、小莉子 提交于 2019-11-27 20:38:25
通过本次的学习,终于搞明白了事务的隔离级别以及脏读幻读等出现的原因,感谢原文作者: 明天的地平线 。再次博主也记录下学习的过程,以便以后参考 首先要明白什么是事务? 事务是程序中一系列严密的操作,所有的操作必须完成,否则在所有的操作中所做的所有的更改都会被撤销。也就是事务的原子性,一个事务中的一系列的操作要么全部成功,要么全部不做 事务的结束有两种,当事务中所有的步骤全部成功执行的时候,事务提交。如果其中一个步骤失败,将会发生回滚操作,撤销到事务开始之前的所有的操作。 事务的ACID 事务具有四个特征 原子性 事务是数据库的逻辑工作单位,事务中包含多个操作,要么都走,要么都不做 隔离性 事务彼此之间是不能互相干扰的,即一个事务的操作对该数据库的其他事务操作是隔离的,并发执行的各个事务时间互补干扰 持续性 事务一旦提交,其变更是永久性的, 一致性 事务执行的结果必须满足从一个状态变到另一个状态,因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性的状态。如果数据库系统在运行时发生系统故障,有些未完成的事务被迫中止,而有一部分修改已经写入数据库,这个时候数据库就处于一种不正确的状态。其实以上三个条件最终都是为了保持数据库数据的一致性服务的 MySQL的四种隔离级别 SQL标准定义了四种隔离级别,用来限定事务内外的哪些改变是可见的,哪些是不可见的 读取未提交的数据【Read