学习
实践
活动
工具
TVP
写文章
专栏首页MyJava总结(五) MySQL

总结(五) MySQL

模块一:基础

1,数据库三大范式

第一范式:属性的原子性

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。消除主键和其他键的部分依赖。

第三范式:在第二范式的基础上,非主键只依赖主键,不依赖其他的。消除传递函数依赖。

还有一个最牛范式:BC范式

2,mysql有关权限的表有哪些?

  • user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
  • db权限表:记录各个帐号在各个数据库上的操作权限。
  • table_priv权限表:记录数据表级的操作权限。
  • columns_priv权限表:记录数据列级的操作权限。
  • host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。

3,Mysql的数据类型

还有很多。

模块二:引擎

常用的就是InnoDB和MyIsam。

InnoDB是mysql的默认引擎。

  • InnoDB和MyIsam有什么区别?

InnoDB:支持事务,支持外键,自动热备份,支持行级锁,支持哈西索引。

MyIsam:支持表级锁,支持全文搜索。

  • InnoDB和MyIsam索引的区别

InnoDB是聚簇索引,MyIsam是非聚簇索引。

(简要说说两种索引区别,聚簇索引存储索引和数据,非聚簇的叶子节点不是数据是指向数据的地址,然后数据还在磁盘里,所以速度慢)

InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。(其实就是索引)

  • InnoDB引擎的四大特性

插入缓冲(insert buffer)

二次写(double write)

自适应哈希索引(ahi)

预读(read ahead)

模块三:索引

索引是一种数据结构,通常使用B树和B+树。

用于快速遍历查找数据。

  • 索引分类

1,主键索引:为了保持数据库表与表之间的关系,不允许空

2,唯一索引:每个值不同,允许有一个空

3,联合索引:多个键一起索引,要符合最左前缀原则。

4,聚集索引

5,非聚集索引

6,全文索引

InnoDB索引

重点看这个。

  • 聚簇索引/主键索引/聚集索引

InnoDB每张表都有一个聚簇索引,用B+树实现。叶子节点存储整行数据。

  • 辅助索引

辅助索引的叶子节点存储主键值,再通过这个主键值查询聚簇索引里的数据。

  • 联合索引

最左前缀匹配原则,遇到范围查找,后面的条件就不过去了。

  • 回表

我们通过辅助索引查到主键,再通过聚簇索引查值,就很浪费性能。

  • 如何优化回表呢?

使用覆盖索引,通过查找非主键索引获取的数据已经满足,不需要回表去主键查找。

实现的话,就是非主键列的数据联合索引,就可以了。

  • B树,B+树,红黑树

B树和B+树是多路搜索树,B树节点里有存数据,B+树只在叶子节点存数据。

红黑树是二叉搜索树,不合理。

  • 哈希索引

蛮不错的,但是不支持范围查找。

模块四:事务

  • 什么是事务

不可分割的数据库操作序列,要么都执行,要么都不执行。

  • 事务的四大特性:

原子性:事务是最小的执行单元,不可以分割,要么全部执行,要么不执行。

一致性:执行前后,数据保持一致。如你转我200,你少200的同时,我必须多200。

隔离性:并发访问数据库的时候,一个事务不能被其他事务干扰。

持久性:事务提交之后,对数据库的改变是持久的。

  • InnoDB通过什么来保证四个特性?

原子性和持久性通过redo log(重做日志)日志和undo log(回滚日志)来保证。

隔离性通过MVCC和锁机制来保证。

一致性通过三个性质来保证。

  • 事务并发会出现什么问题

脏读:一个事务读取到了另外一个事务未提交的数据。

不可重复读:在一个事务内,重复读取某个数据的值,得到结果不一样。

幻读:一个事务内,重复查询某符合条件的记录数量,数量不同。

  • 事务的隔离级别

读未提交:不管有没有事务提交,修改就能别其他事务看见。

读已提交:事务提交后,其他事务才能看到新的数据。

重复读:一个事务重复读取,结果不变。

串行化:给记录加上了读写锁,如果出现读写冲突,会等到当前事务结束后,才继续流程。

  • 隔离级别出现的问题

读未提交:脏读,幻读,不可重复读

  • 如何实现隔离级别

读未提交:啥也别加就是。

读已提交:使用快照

模块五:日志

InnoDB的事务日志undo log和redo log,自带的开发日志bin log。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.syjhxy.ltd/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Mysql字符集总结(4)--mysql从入门到精通(五)

    上篇文章介绍了mysql字符集查询sql从字符串到字节串编码解码的转换,及其如何返回给客户端:

    用户9919783
  • Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)

    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的MyBatis...

    张果
  • MySQL(五)

    基本概念: 可合并多个相似的选择查询结果的结果集,等同于将一个表追加到另一个表,从而实现将两个表的查询结果组合到一起,使用 Union 或 Union all。...

    1ess
  • Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)二

    接着上一篇博客《Spring整合MyBatis(Maven+MySQL)一》继续。

    张果
  • iOS 问题总结(五)

    然后在创建 tableView 的时候,设置了 tableHeaderView,然后把 searchController 添加到了 headerView 上,如...

    hrscy
  • MySQL练习五

    这个表没有主键,它可以有重复的行. product_id 是 Product 表的外键. 编写一个 SQL 查询,查询购买了 S8 手机却没有购买 iPhone...

    A梦多啦A
  • JavaScript学习总结(五)

    之前的几讲中我们曾经说过,JavaScript中是没有类的概念的。但是我们讲过对象,那么这个对象是怎么来的呢? 只要有函数即可创建对象

    roobtyan
  • Mysql总结

    taoli
  • MySQL总结

    2.alter table t1 modify name char(3); 修改类型

    changxin7
  • MySQL 总结

    与其他 DBMS 一样,MySQL 有一个具体管理和处理数据的内部引擎。在你使用CREATE TABLE 语句时,该引擎具体创建表,而在你使用 SELECT 语...

    acc8226
  • Java第五周总结

    lambda表达式的核心即在于说重点 以线程代码为例,他需要的是什么?最核心的东西是什么? 就是run方法!!! runnable接口中重写实现的就一个r...

    用户7073689
  • MySQL命令总结

    “` sql – 常用权限 create,alter,drop,insert,update,delete,select… – 分配所有权限 all pr...

    zhengzongwei
  • mysql使用总结

    create database sina default character set utf8mb4 collate utf8mb4_unicode_ci; ...

    pydata
  • Mysql 复习总结

     /********** 基本数据类型*******************/

    明明如月学长
  • MySQL优化总结

    存储引擎:MySQL中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

    KEN DO EVERTHING
  • Mysql全面总结

    常见的存储引擎有MyISAM,InnoDB,MEMORY,MERGE.今天我们就分别介绍一下,

    小土豆Yuki
  • mysql总结(一)

    一、数据库管理 1.1查询所有数据库 mysql> show databases; +--------------------+ Database +-----...

    企鹅号小编
  • Mysql锁总结

    数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来 实现这些访问规则的重要数据结构

    会呼吸的Coder

扫码关注腾讯云开发者

领取腾讯云代金券