mysql知识点总结

mysql事务

什么是事务

事务就是数据库操作的最小单元。一个事务里面包含诺干逻辑要么全部成功要么全部失败。事务是一组不可
再分割的操作集合。

事务的四大特性

1. 原子性: 事务包含的操作逻辑是不可再分的。要么全部成功。要么全部失败

2. 一致性: 是对数据的可见性的约束,就是所有数据要么是事务开始前的样子.要么全是结束的样子,不
存在中间过渡是的数据。

3. 隔离性: 事务与事务之间是不受影响的。

4. 持久性: 事务一旦提交,那么它对数据库的改变应该是永久的。接下来的操作或者故障不会对其有影响。

事务的隔离级别

1. 读未提交: 事务可以看见其他的事务还没提交的修改. 比如一个事务a在对一行数据进行修改,修改完后又删除.
这整个过程对于别的事务来说都是透明的.这个级别的事务就基本没有隔离性.

2. 读以提交: 事务只能够看到其他的事务已经提交后的修改,当前的事务运行的时候可能会有多个事务已经对某行
数据进行了修改,并且已经提交,所以多次查询同一行的数据可能会不一样.所以又被成为"不可重复读".

3. 可重复读: 事务在这个级别有数据版本控制,只会看到事务一开始的数据版本,所以数据不管读多少次都是一样的
是innodb的默认级别.

4. 串行化:   事务完全串行的执行.隔离级别最高,但是性能很差.

脏读,不可重复读,幻读分别是什么

* 脏读:事务a对数据库进行了修改还没提交, 这个数据被事务b看到了并且使用,事务a因为一些原因撤销了数据,事务
b就相当于发生了脏读.
* 不可重复读:事务a在运行的时候可能会因为有多个事务的提交而对同一行数据进行查询多次结果不一样. 
* 幻读:当事务a查找多行数据的时候,可能会因为事务b的插入或者删除而影响到.
隔离级别 脏读 不可重复读 幻读
读未提交
读以提交 不会
可重复读 不会 不会
串行化 不会 不会 不会

mysql不同级别的事务是怎么实现的

原子性:首先事务的原子性规定了事务要么全部成功要么全部失败. 这是通过mysql的undo log 来实现的.举个例子
当事务a对行数据加了5,undo log就会生成一个减5的log.当事务执行到一半失败了进行回滚 就会运行undo log
上的相关sql.

持久性:事务一旦提交数据就会生效,即使数据库崩溃数据也不会丢失,这是因为mysql在提交的那一刻就sql语句就已
经被记录在redo log里.

隔离性:级别越低的隔离性所能够承受的并发越高.不同的隔离性的实现其实就是(读写锁和mvcc的不同运用).首先最
低级别的读未提交允许同一时间读写并行,同一时间一行数据只能被一个事务修改.正因为读不加锁,所以会出现脏读的
情况.读已提交: 事务中每次查询都会生成一个数据版本,所以每次查询都会读到当前最新的数据,可重复读:事务一开
始的时候就会生成一个数据版本号,所以不管数据怎么查都是查到指定版本数据。串行化:所有事务按照顺序执行。

mysql索引

什么是索引

索引是对数据库表中的一列或多列的值进行排序的一种结构,使用索引可以提高数据库的查询速度。索引是一个单独的
存储在磁盘上的数据库结构,它们包含着对数据库表里所有记录的引用指针。

hash和b+ tree索引的优劣

* hash索引只能精确查找做等值查询,不能范围查找,查找速度比 b+tree速度快很多.hash索引占用磁盘空间较大因为
有很多没有命中的hash槽浪费了空间。

* b+tree 支持联合索引的最左匹配原则。支持模糊查找。范围查找。一般情况下比hash速度慢,但是性能稳定。

聚簇索引和覆盖索引和回表

* 聚簇索引:就是索引最终直接指向整行数据。一般就是主键索引。如果没有设置主键,innodb底层会选择一个唯一
的非空的索引代替。如果没有这样的索引,innodb就会隐式的定义一个主键来作为聚簇索引。当走这个索引查询数剧
就只需要查询完成就能够获得到目标数据。

* 回表:当sql走的不是聚簇索引的时候,该索引的叶子指向聚簇索引的id。mysql会通过当前索引找到主键id。然后
拿到主键id去查询主键索引。这个过程就称之为回表,回表的话相当于要走多个索引性能相对来说会慢点。

* 覆盖索引:举个例子 索引a 是字段a,b的联合索引,如果一个 sql语句通过 索引a 查找字段a,b 。那么当前的索
引已经能够查到所需要的数据,所以就不需要回表查询主键索引。

为什么选b+tree 作为索引的数据结构

* b+ tree 的节点会存多个子节点,比起b tree 。b+ tree的数据全部存在叶子节点,非叶子节点只会存键。这样
能够存更多的关系数据。能够更快的命中。树高越低,磁盘io次数越少。b+树的树高 < b树高 < 平衡二叉树

* 更加适合范围查找:在b树进行范围查找是,要先找到查找的下限,然后对b树进行中序遍历,直到找到查找的上限,
而b+树的范围查找,只需要对链接进行遍历即可。

* b tree 的查询复杂度在 1 到树高之间,而b+树的查询复杂度稳定为树高,因为所有数据节点都在叶子节点。

存储引擎 MYISAM 和 INNODB 的区别

1. myisam 只支持表锁,innodb支持行级锁
2. myisam 不支持事务, innodb支持
3. myisam 的表结构 数据 索引是单独存放的。innodb是索引和数据是放一起的
4. select count(*) from table 的时候myisam 不需要遍历整表因为它对总行数有保存,innodb 需要遍历。
5. myisam支持全文索引,innodb不支持。

Mysql死锁

原因

多个事务在不同的资源占用后,并且请求对方占用的资源。并且不释放。导致逻辑卡死。

死锁检测

innodb能检测到死锁的循环依赖,并立即返回错误,但是涉及到外部锁,或者表锁的情况下,innodb不能完全检测
到。需要设置锁等待超时时间 innodb_lock_wait_timeout来解决。

死锁恢复

死锁发生后只有部分或者完全回滚其中一个事务,才能打破死锁。innodb 现在就是将持有最少的行级排它锁的事务
进行回滚。

myisam会不会产生死锁

不会。因为myiasm在事务一开始的时候就会先获取自己所需要的所有锁。所以不会发生死锁的情况。

innodb死锁避免

1. 可以在事务一开始的时候先尝试获得所有需要的锁。获得了再进行操作。`SELECT ... FOR UPDATE`
2. 不同的事务尽量以相同的顺序访问表。这样加锁流程也会一样。也会降低死锁产生的机会
3. 改变事务隔离级别
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 索引 :帮助MySQL高效获取数据记录的数据结构 数据库的索引通常使用B+Tree实现 通常来说一般的二叉树每个节...
    聚在散里阅读 244评论 0 2
  • 逻辑架构图 第一层不是Mysql所独有的,大多数基于C/S服务都有类似的架构。比如链接处理等。第二层是Mysql服...
    Pimow阅读 518评论 0 0
  • 这篇文章主要涉及到MySQL的知识点: 索引(包括分类及优化方式,失效条件,底层结构) sql语法(join,un...
    一根薯条阅读 2,707评论 0 8
  • 2019年7月15日(己亥辛未癸丑癸亥)全天雨 今天我在家里管两个孩子(大的六岁半,小的两岁半,都是男孩)。从早上...
    木貞ma阅读 101评论 0 1
  • 对于生活中的一些常见的现象,如果我们能运用一些经济学的视角去思考,能让我们更好的做出更好的指导自己如果做出恰...
    小螃谢阅读 140评论 1 1