mysql事务

1.1、Mysql 学习——从数据库事务规范 到 Mysql 的 InnoDB 对事务特性的具体实现

不问归期 提交于 2019-11-28 07:23:31
文章目录 前言 数据库事务 ACID的概念 ANSI SQL 隔离级别 Mysql 的服务器逻辑架构 Mysql 服务器层不负责事务 Mysql 服务器层和存储引擎 更细化的一个图片 存储引擎和事务 支持事务的存储引擎 MyISAM 不支持事物 存储引擎的混用 Mysql 支持表锁和行锁 Mysql 和表锁 Mysql和行锁 InnoDB 中的事务和锁 Mysql 默认的事务级别是 可重复读 MVCC的概念 InnoDB 对MVCC的实现 MVCC 在什么时候生效? InnoDB 的行锁 InnoDB 独有的间隙锁 间隙所生效的隔离级别 可重复读状态下的间隙锁可以起到 避免幻读的作用 参考资料 前言 体能状态先于精神状态,习惯先于决心,聚焦先于喜好。 数据库事务 ACID的概念 暂略 ANSI SQL 隔离级别 暂略 Mysql 的服务器逻辑架构 Mysql 的服务器逻辑架构分为 服务器层和存储引擎层,服务器层调用存储引擎层。 每一个表可以指定存储引擎的类型。 图片来自互联网 Mysql 服务器层不负责事务 Mysql 的服务层不负责事务的实现,具体事务的实现由存储引擎负责。 需要强调的是不是所有的存储引擎都支持事务。比如 InnoDB 支持,MyISAM 不支持。 Mysql 服务器层和存储引擎 更细化的一个图片 图片来自互联网 存储引擎和事务 支持事务的存储引擎 Mysql

MySQL--高性能MySQL笔记一

喜夏-厌秋 提交于 2019-11-28 07:22:42
链接管理与安全性: 每个客户端连接都在服务器进程中拥有一个线程。 MySQL5.5以及更新的版本提供了一个API,支持线程池插件,可以使用池中少量的线程服务大量的链接。 认证基于用户名、密码和原始主机信息。 并发控制: 在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题,这两种类型的锁通常被称为共享锁(shared lock)、排他锁(exclusive lock)。也叫读锁或者写锁。 锁策略: 在锁的开销和数据的安全性之间寻求平衡,一般都是在表中施加行级锁(row-level-lock)。 表锁和行级锁 事务:一组原子性的sql查询,一个独立的工作单元。如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组查询。 ACID:原子性atomicity 一致性consistency 隔离性isolation 持久性 durability 四种隔离级别: READ UNCOMMITTED 未提交读 : 事务中的修改,即使没有提交,对于其他事务也都是可见的。事务可以读取未提交的数据,脏读。 READ COMMITTED 提交读: 大多数数据库的默认隔离级别, read committed ,但是MySQL不是。一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的。 REPEATABLE READ 可重复读 : 解决了脏读的问题

WEB 10.MySQL

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-28 06:20:48
MySQL 1. Mysql数据库的安装与介绍 数据库: 事务: 事务的特性: 事务的回滚: 在不考虑事务的隔离性的情况下,会导致以下情况: 事务的四种隔离级别: 数据库的分类: Mysql引擎: 1. Mysql数据库的安装与介绍 (1) 概念介绍 数据库: 存储数据的仓库,按照数据结构,来组织,管理和存储数据,并提供了增、删、改、查的功能。 学查询 架构 优化 数据库的建模:是用来描述业务实体之间的关系 事务: 转账:A给B转账 第一步a的账户先把钱扣除 第二部 将b账户的钱更新 将一组增删改的操作看成一个独立的执行单元,要么都成功,如果有一个操作失败,那么数据库会执行回滚,一组操作都会不生效(事务定义) 事务的特性: 原子性 :事务被当做一个不可分割的执行单元,要么全部成功,要么全部失败,成功则将数据应用到数据库,失败不会对数据产生影响 一致性 :开始事务前的状态必须和事务执行之后的状态保持一致 隔离性 :当用户并发访问数据库时,数据库会给每个用户线程开启一个事务,事务和事务之间相互隔离,互不影响 持久性 :一旦事物提交,那么数据就会永久行的应用于数据库,就算机器出现故障,也不会将数据修改 事务的回滚: 事务作为一个独立不可分割的执行单元,要么都成功,只要这一组操作中有一个失败,事务会执行回滚,恢复到事务执行之前的状态 在不考虑事务的隔离性的情况下,会导致以下情况: 脏读 :

JDBC

我们两清 提交于 2019-11-28 06:12:37
JDBC .JDBC是java访问数据库的标准规范,真正操作数据库还需要具体的实现类,也就是数据库驱动。怎么把数据库驱动jar包导入编译工具在网上都能搜到具体的操作步骤,这里不再赘述。 1连接数据库 1.1加载和注册数据库驱动,JDBC3之后可以跳过此步骤; public class Demo1 { public static void main(String[] args) throws ClassNotFoundException { // 抛出类找不到的异常,注册数据库驱动 Class.forName("com.mysql.jdbc.Driver");// Driver接口,所有数据库厂商必须实现的接口,表示这是一个驱动类 } } 1.2DriverManager 作用: 1) 管理和注册驱动 2) 创建数据库的连接 类中的方法: DriverManager 类中的静态方法 描述 Connection getConnection (String url, String user, String password) 通过连接字符串,用户名,密码来得到数据库的连接对象 Connection getConnection (String url, Properties info) 通过连接字符串,属性对象来得到连接对象 public class Demo2 { public

Spring JdbcTemplate&声明式事务

时间秒杀一切 提交于 2019-11-28 05:52:36
1、JdbcTemplate基本使用 1)、JdbcTemplate基本使用-概述(了解) JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。 2)、JdbcTemplate基本使用-开发步骤(理解) ①导入spring-jdbc和spring-tx(事务)坐标 ②创建数据库表和实体 ③创建JdbcTemplate对象 设置连接池 ④执行数据库操作 3)、JdbcTemplate基本使用-快速入门代码实现(应用) ①导入Spring-jdbc和Spring-tx坐标(依赖) <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId

MySQL隔离性及Spring事务

℡╲_俬逩灬. 提交于 2019-11-28 05:45:28
一、数据库事务ACID特性   必须要掌握事务的4个特性,其中事务的隔离性之于MySQL,对应4级隔离级别。 原子性(Atomicity):     事务中的所有原子操作,要么都能成功完成,要么都不完成,不能停滞在中间环节。发生错误要回滚至事务开始前状态,仿佛事务没有发生过。 一致性(Consistency):     事务必须始终保持数据库系统处于一致的状态,无论并发多少事务。 隔离性(Isolation):     事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要存在相互隔离。 [MySQL隔离级别] 持久性(Durability): 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。 二、MySQL隔离级别 1 select @@tx_isolation ; --查询MySQL隔离级别 2 set <level> tx_isolaction = 'READ-COMMITTED'; --设置事务隔离级别level分为session默认,global全局 3 start transaction ; -- 启动事务 4 set savepoint <point_name> ; --设置回滚点,mysql支持回滚点 5 rollback ; -

MySQL事务与数据库的备份恢复

佐手、 提交于 2019-11-28 05:23:10
-- 数据库备份 SELECT * FROM test_db.tb_students_info INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/file.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '?'; -- 复制表数据 CREATE TABLE tb_students_copy LIKE tb_students_info; -- 数据库恢复 LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/file.txt' INTO TABLE test_db.tb_students_copy FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '?';    来源: https://www.cnblogs.com/277223178dudu/p/11393810.html

orm的锁和事务

。_饼干妹妹 提交于 2019-11-28 04:48:57
一.锁 mysql中的加锁,不会防止其他用户的查询,会防止其他用户的增删改操作。 entries = Entry.objects.select_for_update().filter(author=request.user) #所有匹配的行将被锁定,直到事务结束 select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面 目前,postgresql,oracle和mysql数据库后端支持select_for_update()。 但是,MySQL不支持nowait和skip_locked参数。 二.事务 1.全局开启 当有请求过来时,Django会在调用视图方法前开启一个事务。如果请求正确处理并正确返回了结果,Django就会提交该事务。否则,Django会回滚该事务。 这个功能使用起来非常简单,你只需要将它的配置项 ATOMIC_REQUESTS 设置为True。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mxshop', 'HOST': '127.0.0.1', 'PORT': '3306', 'USER': 'root', 'PASSWORD': '123', 'OPTIONS': { "init

程序员面试备战篇:18个经典MySQL面试专题解析,干货分享

蓝咒 提交于 2019-11-28 04:21:22
1.数据库三范式是什么? 第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。>所以第三范式具有如下特征:>>1. 每一列只有一个值 >>2. 每一行都能区分。>>3. 每一个表都不包含其他表已经包含的非主关键字信息。 2.有哪些数据库优化方面的经验? 用 PreparedStatement, 一般来说比 Statement 性能高:一个 sql发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等4. UNION ALL 要比UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用 UNIONALL。>>UNION 和

MySQL引擎类型(三)

十年热恋 提交于 2019-11-28 03:40:47
https://www.cnblogs.com/sunsky303/articles/8274586.html mysql 各个引擎 InnoDB: 1)经常更新的表,适合处理多重并发的更新请求。 2)支持事务。 3)可以从灾难中恢复(通过bin-log日志等)。 4)外键约束。只有他支持外键。 5)支持自动增加列属性auto_increment。 MyISAM: 1)不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。 2)不支持外键的表设计。 3)查询速度很快,如果数据库insert和update的操作比较多的话比较适用。 4)整天 对表进行加锁的场景。 5)MyISAM极度强调快速读取操作。 6)MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。 来源: https://www.cnblogs.com/fanBlog/p/9754829.html