【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 ...
随机推荐
- ansible实现批量建立互信
Ansible:自动化运维工具 为什么要建立互信:ansible批量配置管理的前提是管理机和被管理机ssh互信,即通过将管理主机的公钥(id_rsa.pub)添加到目标主机上,实现管理机不通过交互式输 ...
- 分块练习C. interval
分块练习C. interval 题目描述 \(N\)个数\(a_i\),\(m\)个操作 \(1\). 从第一个数开始,每隔\(k_i\)个的位置上的数增加\(x_i\) \(2\). 查询\(l\) ...
- HM16.0之帧内模式——xCheckRDCostIntra()函数
参考:https://blog.csdn.net/nb_vol_1/article/category/6179825/1? 1.源代码: Void TEncCu::xCheckRDCostIntra( ...
- python 向excel 插入图片
这是工作中一个真实的需求. 要做gt excel 表,表中要插入图片. 1.要把图片resize 基本相同的大小. 2.通过一下脚本插入图片到excel #!/usr/bin/env python3 ...
- 远程调试在Linux车机中的应用
导读 在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差别,嵌入式系统的可视化调试能力比桌面操作系统要弱一点.对于导航这种业务场景比较复杂的程序开发,可视化调 ...
- WPF新手快速入门系列 1.布局
[概要] 该系列文章主要描述,新手如何快速上手做wpf开发.看过网上部分的教程,主要讲述的是介绍控件.这并没有问题,但是没有把自己的使用经验也完整的描述出来. 所以特此编写此系列文章希望能帮助到,因为 ...
- [ASP.NET Core开发实战]基础篇06 配置
配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...
- Vue企业级优雅实战02-准备工作03-提交 GIT 平台
代码管理.版本管理是件老大难的事情,尤其多人开发中的代码冲突.突击功能时面临的 hotfix 等.本文只是简单说说如何将一套代码提交到两个 Git 平台(GitHub.GitEE)上.其他的 Git ...
- 简单对比了一下MonoXml与SystemXml在Unity下的表现
测试代码 public class NewBehaviourScript : MonoBehaviour { // Use this for initialization void Start () ...
- 令人蛋疼的错误提示 0xcdcdcdcd ,0xdddddddd ,0xfeeefeee ,0xcccccccc ,0xabababab
原文地址:http://www.cnblogs.com/pcchinadreamfly/archive/2012/04/26/2471317.html参考地址:http://blog.csdn.net ...