mysql知识点整理


Posted in MySQL onApril 05, 2021

事务

事务就是一组sql语句,为了保证一组数据库操作,要么全部成功,要么全部失败。

事务是在引擎层实现的,也就是说并不是所有引擎都可以使用事务,MyISAM 就不支持事务,这也是为什么会被 InnoDB 取代的原因。

事务的特性 acid

  1. 原子性

    事务要么全部执行成功,要么全部执行失败。在事务提交(commit)成功之后,所有的操作都生效,提交失败,所有的操作都会回滚。

  2. 隔离性
    A 事务对数据库做的变更,在事务未提交之间,数据库中也看不到,B 事务中也看不到。

  3. 一致性
    在事务执行的过程中,只要事务未提交,就不会改变数据库的状态。提交之后事务已完成,此时数据库状态发生变化。

  4. 持久性

    事务一旦提交,对数据库的变更就会持久化到磁盘,即使数据库发生异常重启,数据也不会丢失。

隔离级别

  1. 读未提交
  2. 读已提交
  3. 可重复读(MySQL默认)
  4. 串行化

索引

  1. 普通索引:纯为了加速查询,可为空,可以重复值

  2. 主键索引:不可为空,不可以重复值

  3. 唯一索引:索引列的值必须唯一,允许空值

  4. 全文索引:用来查找文本中的关键字,而不是与索引中的值相比较

日志

1. 错误日志
默认打开,无法关闭;记录mysql服务的启停,以及中间出现的错误信息

2. 普通查询日志

默认不开启;记录了mysql运行的所有操作,无论是否成功

3. 二进制日志

默认不开启;记录数据库变化的情况,可以使用二进制日志删除的数据进行还原
使用mysqlbinlog命令来查看MySQL二进制日志

4. 慢查询日志

记录没有使用索引的查询语句,只记录成功的案例

.

主从复制 读写分离 还原备份

  1. 主从复制原理

    首先需要两个及两个以上的MySQL服务器,分为主服务器和从服务器,
    从服务器开启一个io线程到主服务器来获取二进制日志,主服务器开启一个dump线程来接待从服务器,
    当从服务器将二进制文件取回去之后,开启一个sql线程来读取二进制日志,做到实时备份主服务器的数据
  2. 读写分离

    主数据库处理事务性查询,主数据库写入数据
    从数据库处理select查询,从数据库读出数据
  3. 还原备份

    冷备和热备
    	冷备:停止MySQL服务后,去备份数据
    	热备:在mysql服务运行的情况下去备份数据;mysqldump\SQLyog等工具
    
    备份的方法
    	完全备份
    	增量备份
    	差异备份
    	子主题 4
    	备份方案
    		1、每天全备(最省事,最消耗系统资源)
    		2、全备+增量
    		3、全备+差异
    
    备份:mysqldump(mysqldump是热备、全备机制)
    		案例:
    		备份库: mysqldump -uusername -p'password' --databases databasename>/mysql/backup/...sql
    		备份表:mysqldump -uusername -p'password'  databasename tablename>/mysql/backup/...sql
    
    还原:mysql
    		案例:
    		mysql -uusername -p'password'  </mysql/backup/...sql
    		mysqlbinlog 时间点 位置号

innodb存储引擎

  1. 支持事物

  2. 支持B+树

    2.1)为什么innodb索引是B+树数据结构?
      因为关系型数据库这种数据量大的索引能达到亿级别,为了减少内存的使用索引也会存储到磁盘上,B+树的所有的data域在叶子节点,
      内部节点相对B树更小,会将所有的叶子节点用指针串起来,这样遍历叶子节点就能通过遍历获取全部数据,一次性读入内存的需要查找的关键字也就越多,减少了磁盘IO的次数。
      但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况。
    	
     2.2)B+树叶子节点储存的是什么?
    			
     主键key
     具体数据
     比如说user_name是个索引,当执行该SQL:select * from user_info where `user_name` = 'xiaoming'; InnoDB 就会建立 user_name 索引 B+树,节点里存的是 user_name 这个 KEY,叶子节点存储的数据的是主键 KEY
     在执行 select * from user_info where id = 5 这个语句时,InnoDB 就会查询这颗主键 ID 索引 B+树,找到对应的 user_name='Bob'。
     (innodb为了节省资源,只有主键索引树的叶子节点存放了具体数据)
  3. 支持外键

  4. 5.6以上版本支持全文索引

MySQL 相关文章推荐
详解MySQL 用户权限管理
Apr 20 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
Mysql 用户权限管理实现
May 25 MySQL
一文读懂navicat for mysql基础知识
May 31 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 MySQL
MySQL基础(一)
Apr 05 #MySQL
MySQL基础(二)
MySQL学习总结-基础架构概述
MySQL锁机制
MySQL令人咋舌的隐式转换
Apr 05 #MySQL
浅析InnoDB索引结构
Apr 05 #MySQL
MySQL入门命令之函数-单行函数-流程控制函数
Apr 05 #MySQL
You might like
建立文件交换功能的脚本(三)
2006/10/09 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
HTML Dom与Css控制方法
2010/10/25 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
Python 中pandas.read_excel详细介绍
2017/06/23 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
表扬信格式模板
2015/05/05 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
Python函数中apply、map、applymap的区别
2021/11/27 Python