mysql事务

MySQL索引与事务、存储引擎MyISAM和InnoDB (理论+实践篇)

半腔热情 提交于 2019-12-12 00:19:46
索引的概念 数据库中的索引与书籍中的目录类似 在一本书中,无须阅读整本书,利用目录就可以快速查找所需信息 书中的目录是一个词语列表,其中注明了包含各个词的页码 数据库索引 在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据 数据库中的索引|是某个表中一-列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单 索引的的作用 设置了合适的索引之后,数据库利用各种快速的定位技术,能够大大加快查询速率 特别是当表很大时,或者查询涉及到多个表时,使用索引可使查询加快成3 F倍 可以降低数据库的I0成本,并且索引还可以降低数据库的排序成本 通过创建唯一性索引保证数据表数据的唯- -性可以加快表与表之间的连接 在使用分组和排序时,可大大减少分组和排序时间 索引的分类 普通索引 这是最基本的索引类型,而且它没有唯一性之类的限制 唯一性索引 这种索引和前面的“普通索引”基本相同,但有一个区别:索引列表的所有值都只能出现一次,即必须唯一 主键 主键是一种唯一索引,但它必须指定为“PRIMARY KEY" 全文索引 MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT, 全文索引可以在VARCHAR或者TEXT类型的列上创建 单列索引与多列索引 索引可以是单列上创建的索引,也可以是在多列上创建的索引

MySQL事务,这篇文章就够了

强颜欢笑 提交于 2019-12-11 21:27:53
原文链接: https://blog.ouyangsihai.cn/ >> MySQL事务,这篇文章就够了 在看这篇文章之前,我们回顾一下前面的几篇关于MySQL的系列文章,应该对你读下面的文章有所帮助。 InnoDB与MyISAM等存储引擎对比 面试官问你B树和B+树,就把这篇文章丢给他 MySQL的B+树索引的概念、使用、优化及使用场景 MySQL全文索引最强教程 MySQL的又一神器-锁,MySQL面试必备 0 什么是事务 事务(Transaction) 是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都 执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每 个事务结束时,都能保持数据一致性。 同时,事务有着严格的地定义,必须满足四个特性,也就是我们一直说的ACID,但是,并不是说各种数据库就一定会满足四个特性,对于不同的数据库的实现来说,在不同程度上是不一定完全满足要求的,比如,Oracle数据库来说,默认的事务隔离级别是 READ COMMITTED ,是不满足隔离性的要求的。 下面我们趁热打铁,介绍一下事务的必知必会的四大特性,这几个特性也是在面试中,面试官面试MySQL的相关知识的时候,问的比较多的问题,所以,这几个特性务必需要理解并且透彻的记在心里,开个玩笑,被火车撞了,也不应该忘记这四个特性! 1 事务的四大特性

MySQL中的事务隔离级别

旧时模样 提交于 2019-12-11 16:53:30
目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。我们的数据库锁,也是为了构建这些隔离级别存在的。 分类 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读) 可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 锁 表锁: 对整张表加锁,分为读锁和写锁.因为会锁住整张表,所以一般只在执行DDL之前使用 行锁:事务就是通过行锁来实现的. 在RC级别,数据的读取都是不加锁的,但是数据的写入、修改和删除是需要加锁的。 RR级别(MySQL的默认级别)中,分为读和写两种场景: 读: 同一事务的多个实例在并发读取数据时,会看到同样的数据行(不管此时是否有其他事务修改了数据且提交).MySQL通过MVCC(创建版本号+删除版本号)来实现可重复读. 写:使用Next-Key锁(行锁 + GAP 间隙锁) Serializable : 读加共享锁,写加排他锁,读写互斥

Redis面试

烂漫一生 提交于 2019-12-11 13:50:16
1、redis简介 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案 2、为什么要用 redis/为什么要用缓存 主要从“高性能”和“高并发”这两点来看待这个问题。 高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可! 高并发: redis 和 memcached 的区别 redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持简单的数据类型,String。 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中。 集群模式:memcached没有原生的集群模式

Mysql-事务(二)

ぃ、小莉子 提交于 2019-12-11 07:49:13
1.事务的并发问题 脏读 :事务A读取了事务B更新的数据,然后B进行了回滚操作,这时A读到的数据就是脏数据,侧重于一个事务读取了另一个未提交事务修改的数据。 不可重复读 :事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交(和脏读不一样的地方),导致事务A多次读取同一数据时,结果不一致。 幻读 :系统管理员A将数据库中所有学生的成绩从具体分数改未ABCD,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条计数没有改过来,就好像发生了幻觉一样,这就叫幻读。 小结:脏读侧重于一个事务读取了另一个未提交事务操作的数据,不可重复读侧重于一个事务读取到了另一个已提交事务修改的数据,幻读侧重于一个事务读取到了另一个已提交事务新增或删除的数据。 2.事务隔离级别概述 mysql中,innodb所提供的事务符合ACID的要求,而事务通过事务日志中的redo log和undo log满足了原子性、一致性、持久性,事务还会通过锁机制满足隔离性,在innodb存储引擎中,有不同的隔离级别,它们有着不同的隔离性,一共有如下4中: READ-UNCOMMITED :读未提交 READ-COMMITED :读已提交,解决了脏读问题 REPEATABLE-READ :可重复读,默认,解决了脏读和不可重复读问题 SERIALIZABLE :串行化

JDBC高级开发事务

爱⌒轻易说出口 提交于 2019-12-11 04:32:30
一、事务管理 1.事务概述 事务指的是逻辑上的 一组 操作,组成这组操作的各个单元要么全都成功,要么全都失败。 事务作用:保证在一个事务中多次操作,要么全都成功,要么全部失败。 一组 :无论多少SQL语句,必须使用同一个连接对象操作,包括insert,update,delete,不包括select,因为select不改变原有数据 2.mysql事务操作 sql语句 描述 start transaction; 开启事务 commit; 提交事务 rollback; 回滚事务 准备数据 # 创建一个表:账户表 . create database webdb ; # 使用数据库 use webdb ; # 创建账号表 create table account ( id int primary key auto_increment , name varchar ( 20 ) , money double ) ; # 初始化数据 insert into account values ( null , 'jack' , 10000 ) ; insert into account values ( null , 'rose' , 10000 ) ; insert into account values ( null , 'tom' , 10000 ) ; 操作:

mysql中的锁

一个人想着一个人 提交于 2019-12-11 01:17:58
在mysql里,锁可以大致分为全局锁、表锁和行锁三大类。 全局锁 全局锁是对整个数据实例加锁,通过Flush tables with read lock命令,可以让整个数据库处于只读的状态,以下语句会被阻塞: 数据的增删改、建表、修改表结构及更新类事务 缺点:在备份时用该命令,主库会处于只读,需要停业务,在备库上使用该命令,备份期间不能执行binlog,会主从延迟 官方自带的逻辑备份工具是mysqldump,当mysqldump使用参数-single-transaction的时候,就会启动一个事务,来保证拿到一致性视图,而且加上MVCC的支持,这个过程中数据是可以正常更新的。 -single-transaction只适用于所有表都使用支持事务引擎的数据库。不然的话备份只能通过FTWRL方法。 表级锁 表级别锁分为两种:表锁、元数据锁(MDL锁) 表锁:lock tables xxx read/write unlock tables 例:lock tables t1 read,t2 write 其他线程只能读t1,不能写t1,无法读写t2,同时自己本身这个线程也只能读t1,读写t2。 MDL锁(metadata lock):MDL锁不需要显式使用,在访问一个表的时候会被自动加上。 当对一个表做增删改查操作时,加MDL读锁,当要对表做结构变更操作时,加MDL写锁。 读锁之间不互斥

MySQL的事务隔离

a 夏天 提交于 2019-12-11 01:04:34
提到事务,你肯定会想到ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中I,也就是“隔离性”。 数据库上有多种事务同时执行的话,可能出现脏读,不可重复读,幻读. 幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样. 一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读。 SQL标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”

常见数据库引擎比较

岁酱吖の 提交于 2019-12-10 23:33:48
面试官经常问到有关数据库的问题,多数可能就是基于MySQL数据库的这几种引擎。 简介概括主要: 1. 总结: 一般来说不使用事务的话,请使用MyISAM引擎,使用事务的话,一般使用InnoDB。 2. 比较常用的数据库引擎3种: MYISAM:支持3中存储方式:静态型,动态型,压缩型 优点:占用的 空间小 ,存储的 速度快 缺点:不支持 事务 和 并发 使用场景:数据表主要做 修改 和 查询 操作 innoDB: 优点:提供事务的支持,回滚,崩溃修复佛如能力,多版本事务并发控制 缺点:读写效率较差,占用的数据库空间较大 使用场景:MySQL主要引擎 Memory:内存中对数据创建表,数据全部存储在内存 缺点:生命周期短 优点:读写速度非常快,对数据的安全性要求比较低的时候可以选择memory 使用场景:MySQL中使用该引擎作为临时表 3.以下是长篇大论,有兴趣的可以看一下。 InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。 MYISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录

【分布式事务】ACID/BASE/CAP + TCC/2PC/Soga/....

旧巷老猫 提交于 2019-12-10 23:32:17
事务的具体定义 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。 数据库本地事务 ACID 数据库事务中的四大特性,ACID: A:原子性(Atomicity) 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 就像你买东西要么交钱收货一起都执行,要么要是发不出货,就退钱。 C:一致性(Consistency) 事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。 I:隔离性(Isolation) 指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态