当前位置:首页 > 技术分析 > 正文内容

MySQL2(mysql2003错误)


多版本并发控制MVCC的理解

保存数据的历史版本,根据比较版本号来处理数据,记录中的3个隐含字段、undo log日志、Read View实现的

是一种非堵塞、读不加锁,读写不冲,同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题。

缺点是每行记录都需要额外的存储空间,需要做更多的行维护和检查工作。 数据库可重复读会出现幻读

数据库事务ACID

事务有四个特点:原子性、一致性、隔离性和持久性。

事务的原子性, 全部执行成功,要么全部执行失败。

事务的隔离性,表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。

事务的持久性,表示事务完成之后,对系统的影响是永久性的。如果已提交的数据在事务执行失败时,数据的状态都应该正确。

事务的一致性,表示当事务执行失败时,所有被该事务影响的数据都应恢复到事务执行前的状态,这称为事务回滚。执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,

转账者和收款人的总额应该是不变的


数据库三大范式

o 第一范式:1NF 原子性,列或者字段不能再分

o 第二范式:2NF 唯一性,一张表只说一件事 ,要求记 录有惟 一标识;

o 第三范式:3NF 直接性, 每个属性都跟主键有直接关系, 而不是间接关系。

MySQL 存储引擎对比

Innodb 支持事务 行锁和无锁读 外键 ,在线热备份,具备提交、回滚以及崩溃恢复的功能以保护用户数据。 行锁和无锁读提升了它的多用户并发数以及性能

MyISAM:MyISAM 既不支持事务、也不支持外键、其优势是访问速度快,但是表级

别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的

数据场景。

SQL 标准定义了四个隔离级别

READ-UNCOMMITTED(读取未提交):*最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。

oREAD-COMMITTED(读取已提交):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。

oREPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。

oSERIALIZABLE(可串行化):最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

事务隔离级别越严格,数据库效率越低。

MySQL 默认的事务隔离级别是:REPEATABLE-READ 级别

行锁和表锁

InnoDB 支持表锁和行锁,默认为行锁。

MyISAM 只支持表锁

行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

当增删改查匹配到索引时,Innodb 会使用行级锁

如果没有匹配不到索引,那么就会直接使用表级锁

表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。

当执行 DDL 语句去修改表结构时,会使用表级锁。

索引的类型

数据结构-物理存储-逻辑角度

o 从数据结构角度 1. 树索引 (O(log(n))) 2. Hash 索引

从物理存储角度 1. 聚集索引(clustered index) 2. 非聚集索引(non-clustered index)

o从逻辑角度 1. 普通索引 2. 唯一索引 3. 主键索引 4. 联合索引

为什么使用数据库连接池?

1它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;

2避免因为没有释放数据库连接而引起的数据库连接遗漏。

3能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值

hikariCP>druid>tomcat-jdbc>dbcp>c3p0

druid 功能最为全面,sql 拦截等功能,统计数据较为全面,具有良好的扩展性

Springboot2.0 以后默认数据库连接池选择了 Hikari(性能高)

为什么要有缓存池?

Mysql 的 innodb 存储引擎是基于磁盘存储的,并且是按照页的方式进行管理的。

可以看到,无论是读操作还是写操纵,都是对缓存池进行操作,而不是直接对磁盘进行操纵。

缓存池的大小最多应设置为物理内存的 80%

缓存池个数设置为 CPU 的个数

聚集索引与非聚集索引

InnoDB 必须要有且只有一个聚集索引,聚集索引的叶子节点存储行记录

聚集索引主键查询非常快,直接定位行记录。

  • 数量不同。 一个表中只能有一个聚集索引,而非聚集索引可以有多个。
  • 磁盘 IO 次数不同。 聚集索引通过一次索引查询可以直接找到数据,而非聚集索引需要一次索引查询到数据地址,外加一次数据磁盘 IO。
  • 数据组织方式不同。 聚集索引的数据行在物理存储上是有序的,对于范围查询和排序操作,有序的物理存储结构也有助于减少磁盘 I/O 操作,提高查询性能。非聚集索引和数据行是分开两个文件存放,数据行在物理存储上是乱序的。
  • 读写性能不同。 聚集索引查询效率高,但插入效率低,因为需要移动数据的物理位置保证物理存储上有序。非聚集索引则反过来,插入效率高,查询效率低。

聚集索引-,更适合 between and 和 order by 操作。

非聚集索引 多个索引会影响 insert 和 update 的速度。

那么InnoDB有了聚簇索引,为什么还要有二级索引呢?

聚簇索引的叶子节点存储了一行完整的数据,而二级索引只存储了主键值,相比于聚簇索引,占用的空间要少

当我们需要为表建立多个索引时, 聚簇索引占用大量空间,

所以InnoDB中主键所建立的是聚簇索引,而唯一索引、普通索引、前缀索引等都是二级索引。

二级索引的叶子节点中存储主键值,每次查找数据时,根据索引找到叶子节点中的主键值,根据主键值再到聚簇索引中得到完整的一行记录。

MySQL 都有哪些函数?

日期函数 系统当前时间:NOW() 替换 replace 截取字符串:substrs

拼接字符串:CONCAT 日期转字符串:DATE_FORMAT(date,format)

聚合函数:avg、sum、count、min、min

绝对值:ABS(x) 取余:MOD(x,y)

sQL Select 语句完整的执行顺序

FROM 表1 ON 表2 WHERE 条件 GROUP BY 分组字段 HAVING 条件 SELECT 字段 ORDER BY 条件 LIMIT 条件;

将10亿数据文本转储数据库的最高效的方案是什么?

批量插入 多线程

百万数据怎么快速查询出一条数据?

按数据库 id 分表多个小表,每个小表设置索引。查询接口根据 id 指向相应的小表。

基于索引再排序 limit 分页,where 放第一位,limit 用到的主键放第 2 位,而且只能 select 主键解决limit页数变大效率低的情况

主键索引和唯一索引的区别

区别

1 主键是一种约束创建后一定包含一个唯一性索引列不允许为空值,唯一索引是一种索引不一定就是主键 列允许空值。

2 主键可以被其他表引用为外键,而唯一索引不能。

3一个表最多只能创建一个主键,但是可以创建多个唯一索引。

4主键更适合那些不容易改变的唯一标识,如自动递增列,身份证号等。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3949.html

分享给朋友:

“MySQL2(mysql2003错误)” 的相关文章

祸害阿里云宕机3小时的IO HANG究竟是什么?

本文来自微信公号“CSDN”(ID:CSDNnews),作者 | 王知无, 责编| 郭 芮。2019年3月3日凌晨,微博炸锅,有网友反映说阿里云疑似出现宕机,华北很多互联网公司受到暴击伤害,APP、网站全部瘫痪,我自己的朋友圈和微信群里也有好友反馈,刚刚从被窝被叫起来去修Bug,结果发现服务器登不上...

el-table内容\n换行解决办法

问题请求到的数据带有换行符 '\n'但页面展示时不换行statusRemark: "\"1、按期完成计划且准确率100%,得100分;\n2、各项目每延误1天,扣1分;每失误1次或者员工投诉1次,扣3分,失误层面达到公司级影响较大的,该项绩效分数为0\"\n&...

有效地简化导航-Part 1:信息架构

「四步走」——理想的导航系统要做一个可用的导航系统,网页设计师必须按顺序回答以下4个问题:1. 如何组织内容?2. 如何解释导航的选项?3. 哪种导航菜单最适合容纳这些选项?4. 如何设计导航菜单?前两个问题关注构建和便签内容,通常称为信息架构。信息架构师通常用网站地图(site map diagr...

Excel中的FILTER函数详细介绍及使用示例

在Excel中处理大量数据时,经常需要根据特定条件筛选出符合条件的数据行或列。这正是Excel的FILTER函数发挥作用的地方。FILTER函数是Excel中一个非常强大的工具,它可以基于一个或多个条件动态地过滤数据,使数据分析和报告制作变得更加高效和准确。本文将详细介绍FILTER函数的用法,并提...

Vue中路由router的基本使用

??本文开始我们来给大家介绍在Vue中非常重要的一个内容,就是路由Router什么是路由后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特...

基于Spring Cloud+VUE的多租户小程序商城源码「快速二开可商用」

一、系统介绍JooLun平台是一个专注微信快速二开系统研发的平台,采用Java语言开发,使用的是最新微服务前后端分离技术,目前有公众号和小程序商城两个版本,有公众号后台管理、小程序商城。基于Spring Cloud微服务+VUE实现的核心框架多租户小程序商城源码,核心框架采用SpringBoot2+...