【JAVA】mysql数据库常见知识点
1、事务四大特性
- 原子性:要么执行,要么不执行
- 隔离性:所有的操作全部执行完以前其他会话不能看到执行过程
- 一致性:执行前和执行后,数据库都处于一个一致性的状态,比如数据总额是一致的
- 持久性:一旦事务提交,对数据的改变是永久的
2、数据库隔离等级
数据库可能出现下面的问题:丢失修改、脏读(一个进程读取了另外一个进程未提交的数据)、不可重复读(两次读取同一行,前后数据不一样)、脏读(两次检索结果,对应的结果集合不同)。脏读和不可重复读的区别在于,脏读下结果集合有发生结构性的变化,比如多了一行,少了一行;而不可重复读下的结果集合并没有发生结构性变化。
数据库的隔离等级:读未提交、读已提交、可重复读、串行化
3、Mysql两种存储引擎的区别
myisam:不支持事务、表锁、不支持行锁、不支持外键
innodb:支持事务、支持行锁、支持外键
4、哈希索引和B+树索引
哈希索引在查询单值(一行)的时候效率是很高的,都是O(1),但是数据库中经常出现的操作时范围查找,排序查找,而这个时候哈希索引的时间复杂度就退化成O(n)了。而B+树索引的时间复杂度一直是O(log n),非常稳定。
5、聚簇索引和非聚簇索引
(1)聚簇索引:数据行的物理顺序和某一列的逻辑顺序是一致的。一个表上一般只有一个聚集索引。一般会在主键上创建聚集索引。如果你创建表没有指定索引的话,innodb会在主键上创建聚集索引。非聚集索引:数据行的物理顺序和某一列的逻辑顺序是不一致的。一个表上可以有多个非聚集索引。
(2)数据库中索引是用B+树的形式来表现的,聚集索引的叶子节点上存储的是数据行;而非聚集索引的叶子节点上存储的还是索引,只不过里面包含了一个指针,指向真正的数据行。所以,非聚集索引可能会面临二次查询的问题,就是你如果查了两个列的值,一个列并不是非聚集索引,那次是就需要查第二次,去真正的数据行。所以聚集索引的查询效率一般会高于非聚集索引。
6、索引的优缺点,什么时候使用索引,什么时候不能使用索引
- 加快查询速度,加快排序速度
- 索引也是要占空间的
- 索引会影响写的速度,会加快读的速度
- 频繁查询的列可以建索引,频繁更新的列不适合建立索引
7、索引的底层实现
- 线性表:查找效率是O(n)
- 二叉查找树:查找效率是O(log n),最坏情况下查找效率退化成O(n)
- 平衡二叉查找树AVL:查找下来是O(log n),平衡操作非常严格,需要耗费大量的时间在调整上
- 红黑树:不严格的平衡二叉查找树,查找效率是O(log n),平衡操作较AVL树有了效率上的提升
- B树:红黑树最大的缺点在于它是一个二叉树,如果用在数据库中的话,会导致树的高度非常高,从而影响查找性能。而B树是一个多路分叉查找树,所有的叶子节点都在同一高度。因为分的叉多了,所以B树的高度降低,查找性能就上来了,但也是O(log n)的时间复杂度。
- B+树和B树的区别:(1)首先都是多路查找树,其次叶子节点都在同一高度上; (2)B树的非叶子节点会存储索引+真实的数据;而B+树的非叶子节点不存储真实的数据,所有的真实数据都放在叶子节点上。这就导致了B树的查找性能是不稳定的,而B+树对于每一个数据值它的查找性能都是稳定的。另外因为B+树的非叶子结点只存储索引,所以读取一个节点(B+树的节点通常设计成是一个page的大小,操作系统局部性原理+磁盘预读操作,每次会读一个page大小的数据)的时候可以获得更多的索引值,也就是说B+树的IO效率是高于B树的。(3)B+树的叶子结点维护了一个双向的链表,这样就可以支持范围查找了,而且遍历这个数据可以直接遍历这个链表就可以了,不用再遍历整个树了。
8、Sql优化
- 有索引要走索引
- 对多个字段进行等值查询时,可以建立联合索引
- 子查询变成left join
9、数据库的主从复制
- 异步复制:master开启一个线程,来将binlog日志传递给slave;slave开启两个线程,一个线程接受binlog内容将其写到slave的中继日志中。另一个线程执行中继日志中的sql语句。
- 半同步:master把binlog的内容都写到slave的中继日志中,master才返回操作完成的反馈。
- 并行:slave多个线程去请求binlog日志。
10、数据库三大范式
- 列不可再分
- 主键唯一确定一行
- 只有主键才可以做外键
11、 MySQL的整体架构图
12、mysql中sql语句的执行顺序
- 建立连接
- 发送sql语句
- 查询缓存
- sql解析器解析sql语句,生成解析树,验证是否符合语法规则
- sql优化器将解析树转成执行过程,一个解析树可能对应多个执行过程,sql优化器会选择一个它认为最优的(但有时候sql优化器认为的最优并不是DBA人为的最优,所以这块还有可以人为优化的空间)。
【JAVA】mysql数据库常见知识点的更多相关文章
- MySQL 锁常见知识点&面试题总结
节选自 <MySQL 常见知识点&面试题总结> 表级锁和行级锁了解吗?有什么区别? MyISAM 仅仅支持表级锁(table-level locking),一锁就锁整张表,这在并发 ...
- Mysql数据库重要知识点(知了堂学习心得)
Mysql数据库知识点 1.管理数据库语句: 使用数据库: use test; 添加数据库: create database 数据库名; create database test; 修改数据库: al ...
- MySQL数据库----------小知识点
**********************补2016年5月23日的博客************************* MySQL数据库 常用数据类型: int 整数 ...
- 分享知识-快乐自己:mysql数据库常见两种引擎
mysql的常用引擎 在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM. 首先: 1.简单介绍这两种引擎,以及该如何去选择. 2.这两种引擎所使用的数据结构是什么. Innod ...
- mysql 数据库常见的一些基本操作 !详不详细你说了算!
在日常应用中可能一时想不起来,所以有必要整理一份 指令相关的笔记,以是个人比较满意,也比较全面的一份笔记,希望能帮到你,适用初级小白,大神可略过! MYSQL常用命令: 数据备份与还原·注意:不要打分 ...
- java mysql 数据库
1. jdbc 驱动名还是数据库 String driver = "com.mysql.jdbc.Driver"; //URL指向要访问的数据库名mydataString url ...
- linux系统下操作mysql数据库常见命令
一. 备份数据库(如: test): ①可直接进入后台即可.(MySQL的默认目录:/var/lib/mysql ) ②输入命令: [root@obj mysql]# mysqldump -u roo ...
- 粗结MySql数据库基础知识点之一
首先弄什么是数据库? 数据库就是用来存储和管理数据的仓库. 数据库存储数据的优点: 1.可存储大量的数据 2.方便检索 3.保持数据的一致性,完整性 4.安全 可共享 5.通过组合分析,可以产 ...
- [Java] - MySQL数据库的时间设置问题.
之前有朋友做的项目时间格式设置为String,我感觉很不好,随后自己试了试. 首先在设置数据库类型时,选择的是timestamp, 而Java的实体中设置时间的属性类型为Date, (java.uti ...
随机推荐
- JavaScript学习系列博客_33_JavaScript String对象
String对象 在底层,字符串是以数组的形式保存的.比如说一个字符串"String"以["H","t","r",&qu ...
- Mybatis进阶使用-一级缓存与二级缓存
简介 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口. 一级缓存 ...
- 认证授权:学习OAuth协议
1.什么是OAuth协议? OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务,因而OA ...
- Python开发的入门教程(四)-dict
介绍 本文主要介绍Python中dict的基本知识和使用. Python之什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Li ...
- OMG,12 个精致的 Java 字符串操作小技巧,学它
字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...
- windows server 2008 r2 环境下,实现域名和IP同时都能访问一个网站
有时候,用域名访问能得到一个页面,用IP地址访问也可以得到一个页面,比如 www.baidu.com 和 61.135.169.125 都可以打开百度页面.一开始要实现这种功能,还真有点不知所措,想了 ...
- MYSQL经典练习题,熟悉DQL
MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...
- Java中解析wav音频文件信息:音频声道数,采样频率,采样位数、声音尺寸
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 音频解析方法: public static int toInt(byte[] b) { return ((b[3] << 2 ...
- Qt 如何使窗体初始最大化
Qt 如何使窗体初始最大化 使用以下函数即可解决: void QWidget::setWindowState ( Qt::WindowStateswindowState ) 这样的函数,通过它可以设置 ...
- 深度优先搜索(DFS)解题总结
定义 深度优先搜索算法(Depth-First-Search),是搜索算法的一种.它沿着树的深度遍历树的节点,尽可能深的搜索树的分支. 例如下图,其深度优先遍历顺序为 1->2->4-&g ...