1、事务四大特性

  1. 原子性:要么执行,要么不执行
  2. 隔离性:所有的操作全部执行完以前其他会话不能看到执行过程
  3. 一致性:执行前和执行后,数据库都处于一个一致性的状态,比如数据总额是一致的
  4. 持久性:一旦事务提交,对数据的改变是永久的

2、数据库隔离等级

数据库可能出现下面的问题:丢失修改、脏读(一个进程读取了另外一个进程未提交的数据)、不可重复读(两次读取同一行,前后数据不一样)、脏读(两次检索结果,对应的结果集合不同)。脏读和不可重复读的区别在于,脏读下结果集合有发生结构性的变化,比如多了一行,少了一行;而不可重复读下的结果集合并没有发生结构性变化。

数据库的隔离等级:读未提交、读已提交、可重复读、串行化

3、Mysql两种存储引擎的区别

myisam:不支持事务、表锁、不支持行锁、不支持外键

innodb:支持事务、支持行锁、支持外键

4、哈希索引和B+树索引

哈希索引在查询单值(一行)的时候效率是很高的,都是O(1),但是数据库中经常出现的操作时范围查找,排序查找,而这个时候哈希索引的时间复杂度就退化成O(n)了。而B+树索引的时间复杂度一直是O(log n),非常稳定。

5、聚簇索引和非聚簇索引

(1)聚簇索引:数据行的物理顺序和某一列的逻辑顺序是一致的。一个表上一般只有一个聚集索引。一般会在主键上创建聚集索引。如果你创建表没有指定索引的话,innodb会在主键上创建聚集索引。非聚集索引:数据行的物理顺序和某一列的逻辑顺序是不一致的。一个表上可以有多个非聚集索引。

(2)数据库中索引是用B+树的形式来表现的,聚集索引的叶子节点上存储的是数据行;而非聚集索引的叶子节点上存储的还是索引,只不过里面包含了一个指针,指向真正的数据行。所以,非聚集索引可能会面临二次查询的问题,就是你如果查了两个列的值,一个列并不是非聚集索引,那次是就需要查第二次,去真正的数据行。所以聚集索引的查询效率一般会高于非聚集索引。

6、索引的优缺点,什么时候使用索引,什么时候不能使用索引

  1. 加快查询速度,加快排序速度
  2. 索引也是要占空间的
  3. 索引会影响写的速度,会加快读的速度
  4. 频繁查询的列可以建索引,频繁更新的列不适合建立索引

7、索引的底层实现

  1. 线性表:查找效率是O(n)
  2. 二叉查找树:查找效率是O(log n),最坏情况下查找效率退化成O(n)
  3. 平衡二叉查找树AVL:查找下来是O(log n),平衡操作非常严格,需要耗费大量的时间在调整上
  4. 红黑树:不严格的平衡二叉查找树,查找效率是O(log n),平衡操作较AVL树有了效率上的提升
  5. B树:红黑树最大的缺点在于它是一个二叉树,如果用在数据库中的话,会导致树的高度非常高,从而影响查找性能。而B树是一个多路分叉查找树,所有的叶子节点都在同一高度。因为分的叉多了,所以B树的高度降低,查找性能就上来了,但也是O(log n)的时间复杂度。
  6. B+树和B树的区别:(1)首先都是多路查找树,其次叶子节点都在同一高度上; (2)B树的非叶子节点会存储索引+真实的数据;而B+树的非叶子节点不存储真实的数据,所有的真实数据都放在叶子节点上。这就导致了B树的查找性能是不稳定的,而B+树对于每一个数据值它的查找性能都是稳定的。另外因为B+树的非叶子结点只存储索引,所以读取一个节点(B+树的节点通常设计成是一个page的大小,操作系统局部性原理+磁盘预读操作,每次会读一个page大小的数据)的时候可以获得更多的索引值,也就是说B+树的IO效率是高于B树的。(3)B+树的叶子结点维护了一个双向的链表,这样就可以支持范围查找了,而且遍历这个数据可以直接遍历这个链表就可以了,不用再遍历整个树了。

8、Sql优化

  1. 有索引要走索引
  2. 对多个字段进行等值查询时,可以建立联合索引
  3. 子查询变成left join

9、数据库的主从复制

  1. 异步复制:master开启一个线程,来将binlog日志传递给slave;slave开启两个线程,一个线程接受binlog内容将其写到slave的中继日志中。另一个线程执行中继日志中的sql语句。
  2. 半同步:master把binlog的内容都写到slave的中继日志中,master才返回操作完成的反馈。
  3. 并行:slave多个线程去请求binlog日志。

10、数据库三大范式

  1. 列不可再分
  2. 主键唯一确定一行
  3. 只有主键才可以做外键

11、 MySQL的整体架构图

12、mysql中sql语句的执行顺序

  1. 建立连接
  2. 发送sql语句
  3. 查询缓存
  4. sql解析器解析sql语句,生成解析树,验证是否符合语法规则
  5. sql优化器将解析树转成执行过程,一个解析树可能对应多个执行过程,sql优化器会选择一个它认为最优的(但有时候sql优化器认为的最优并不是DBA人为的最优,所以这块还有可以人为优化的空间)。

【JAVA】mysql数据库常见知识点的更多相关文章

  1. MySQL 锁常见知识点&面试题总结

    节选自 <MySQL 常见知识点&面试题总结> 表级锁和行级锁了解吗?有什么区别? MyISAM 仅仅支持表级锁(table-level locking),一锁就锁整张表,这在并发 ...

  2. Mysql数据库重要知识点(知了堂学习心得)

    Mysql数据库知识点 1.管理数据库语句: 使用数据库: use test; 添加数据库: create database 数据库名; create database test; 修改数据库: al ...

  3. MySQL数据库----------小知识点

    **********************补2016年5月23日的博客************************* MySQL数据库 常用数据类型: int                整数 ...

  4. 分享知识-快乐自己:mysql数据库常见两种引擎

    mysql的常用引擎 在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM. 首先: 1.简单介绍这两种引擎,以及该如何去选择. 2.这两种引擎所使用的数据结构是什么. Innod ...

  5. mysql 数据库常见的一些基本操作 !详不详细你说了算!

    在日常应用中可能一时想不起来,所以有必要整理一份 指令相关的笔记,以是个人比较满意,也比较全面的一份笔记,希望能帮到你,适用初级小白,大神可略过! MYSQL常用命令: 数据备份与还原·注意:不要打分 ...

  6. java mysql 数据库

    1. jdbc 驱动名还是数据库 String driver = "com.mysql.jdbc.Driver"; //URL指向要访问的数据库名mydataString url ...

  7. linux系统下操作mysql数据库常见命令

    一. 备份数据库(如: test): ①可直接进入后台即可.(MySQL的默认目录:/var/lib/mysql ) ②输入命令: [root@obj mysql]# mysqldump -u roo ...

  8. 粗结MySql数据库基础知识点之一

    首先弄什么是数据库? 数据库就是用来存储和管理数据的仓库. 数据库存储数据的优点: 1.可存储大量的数据  2.方便检索  3.保持数据的一致性,完整性  4.安全 可共享  5.通过组合分析,可以产 ...

  9. [Java] - MySQL数据库的时间设置问题.

    之前有朋友做的项目时间格式设置为String,我感觉很不好,随后自己试了试. 首先在设置数据库类型时,选择的是timestamp, 而Java的实体中设置时间的属性类型为Date, (java.uti ...

随机推荐

  1. JavaScript学习系列博客_33_JavaScript String对象

    String对象 在底层,字符串是以数组的形式保存的.比如说一个字符串"String"以["H","t","r",&qu ...

  2. Mybatis进阶使用-一级缓存与二级缓存

    简介 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口. 一级缓存 ...

  3. 认证授权:学习OAuth协议

    1.什么是OAuth协议? OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务,因而OA ...

  4. Python开发的入门教程(四)-dict

    介绍 本文主要介绍Python中dict的基本知识和使用. Python之什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Li ...

  5. OMG,12 个精致的 Java 字符串操作小技巧,学它

    字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...

  6. windows server 2008 r2 环境下,实现域名和IP同时都能访问一个网站

    有时候,用域名访问能得到一个页面,用IP地址访问也可以得到一个页面,比如 www.baidu.com 和 61.135.169.125 都可以打开百度页面.一开始要实现这种功能,还真有点不知所措,想了 ...

  7. MYSQL经典练习题,熟悉DQL

    MYSQL经典练习题 (本练习题可让你熟悉DQL,快速的上手DQL) 首先,先在数据库中建立基本数据库以及表项: DROP DATABASE IF EXISTS `test`; CREATE DATA ...

  8. Java中解析wav音频文件信息:音频声道数,采样频率,采样位数、声音尺寸

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 音频解析方法: public static int toInt(byte[] b) { return ((b[3] << 2 ...

  9. Qt 如何使窗体初始最大化

    Qt 如何使窗体初始最大化 使用以下函数即可解决: void QWidget::setWindowState ( Qt::WindowStateswindowState ) 这样的函数,通过它可以设置 ...

  10. 深度优先搜索(DFS)解题总结

    定义 深度优先搜索算法(Depth-First-Search),是搜索算法的一种.它沿着树的深度遍历树的节点,尽可能深的搜索树的分支. 例如下图,其深度优先遍历顺序为 1->2->4-&g ...