做Java开发mysql要学到什么程度?

如题,如果想做Java的话mysql要学到什么程度就行了?请大家给点建议,谢谢
关注者
146
被浏览
118,959
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

面试过程中,自己总结的关于mysql的知识点。

我将从上述思维导图大致说一下,mysql需要学习的内容。

  • MySQL
    • 事物
      • 概念
        用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
      • 特性-ACID
        • 原子性
        • 一致性
        • 隔离性
        • 持久性
      • 最终目的
        事物的最终目的是一致性。
    • 事务隔离级别
      • 读未提交(read uncommited)
      • 读已提交(read commited)
      • 可重复读(repeatable read)
      • 串行化(serilizable)
    • 并发事物带来的问题
      • 读-读:不存在问题,不需要并发控制。
      • 读-写:有线程安全问题,会有事物隔离性问题,造成脏读,不可重复读和幻读。
        • 脏读
          • 当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据
        • 不可重复读
          多次select同一条数据,发现结果不一样。针对一条数据。
        • 幻读
          读一个范围的数据,发现多了一个或者少了一个。针对一堆数据。
      • 写-写:有线程安全问题,会有更新丢失问题。
    • MVCC
      多版本并发控制,在rc和rr事物隔离级别下,实现普通的select操作时访问记录的版本链过程,使读-写操作并发执行,从而提升性能,不用加锁。
      • 实现原理
      • 解决问题
        • 并发读-写时,产生的脏读,不可重复读和幻读问题。
        • 用来实现Read commited 和repeateable read 两种隔离级别。
      • RC和RR的区别
        RC隔离级别,每次select都会生成read view视图。可以解决脏读。
        RR隔离级别,只在第一次select生成全局的read view视图。可以解决不可重复读和幻读。
      • 当前读
        insert update delete 等操作会使用当前读。
        会加锁,获取当前数据库中最新数据。
      • 快照读
        普通select操作。会在select读时,生成一个read view。
      • 快照读和当前读混合使用会有问题。
        可能类似幻读。
        zhihu.com/question/4700
      • 共享锁
      • 排他锁
      • 表锁
      • 行锁
        • 记录锁(Record Lock):使用主键索引和唯一索引才会使用记录锁。并且查询条件精确匹配。比如,age=10
          锁住一个行记录
        • 间隙锁(Gap Lock):非唯一索引下使用。
          锁一个范围,不包括边界。
          比如有 id 为:1、3、5、7 的 4 条数据,我们查找 1-7 范围的数据。那么 2、3、4、5、6都会被加上锁,但是不存在2、4、6这些数据记录, 就被称为间隙。如果想插入记录2、4、6的行就会被阻塞。
        • 临键锁(Next-Key Locks):非唯一索引下使用。只有非唯一索引有临键锁。
          记录锁和间隙锁的结合,锁住一个范围,是一个左开右闭的区间。
          • 作用:在innodb下,当前读默认使用这种锁来解决幻读。
    • 索引
      • 索引概念
        是一种用于加快查询的数据结构。
      • 索引优缺点
        • 优点
          提高检索数据的速度,减少io次数。
        • 缺点
          1.创建索引,需要浪费磁盘空间
          2.维护索引,需要耗费数据库资源
          3.增加删除修改,需要动态维护索引,速度会受到影响。
      • 按照逻辑结构划分
        • innodb存储引擎
          • 主键索引
            默认为主键添加主键索引,是聚簇索引。
          • 单列索性
            可以重复,可以为空。
          • 唯一索引
            不可重复,可以存在一个为空。
          • 复合索引
            多个索引组合,遵守最左匹配原则。
          • 最左匹配原则
            ①MySQL引擎会优化条件顺序,只要条件中包含了组合索引的全部字段,一定走索引。只包含其中一个或者两个,一定要有最左边的列,才会走索引。
            ②举例说明。
            有组合索引(a,b,c)
            1.where a =?
            2. where a=? and b=?
            3. where a =?and b=? andc=?
            以上都走索引,必须要有a这一列,且a不定要在最左边,MySQL会自动优化顺序。
        • myisam存储引擎(MySQL5.7以后innodb也有这个索引)
          • fulltext全文索引
      • 按物理结构划分
        • 聚簇索引
          索引和数据存储在一起
        • 非聚簇索引
          索引和数据分开存储
        • 回表
          从某个索引的叶子节点中找到id,根据id去聚簇索引中查找数据。
        • 覆盖索引
          从索引的叶子节点就可以查询到需要数据列的过程。
      • 数据结构划分
        • B+树索引
        • Hash索引
      • 索引失效
        • 使用or和in,is null ,is not null
        • 使用“%abc”开头的like查询
        • 索引列进行操作(运算,函数等)
        • 字符串不加双引号
        • 使用不等于≠
    • 存储引擎
    • 日志
      • redo log:重做日志
        • 记录事务对数据库做了哪些修改,确保事物的持久性。
      • undo log:回滚日志
        • 记录数据库的版本链,用于撤销未提交的事物,实现原子性。
      • bin log:二进制日志
        • 记录数据库所有增删改操作的SQL语句。
      • slow query log:慢查询日志
        • 用于记录超时执行的SQL语句。


产生原因

      • error log:错误日志
        • 记录出错信息
      • general log:一般查询日志
        • 记录所有对数据请求的信息,不论是否被正确执行。
      • relay log:中继日志
        • 用来给slave库恢复
    • explain分析
      • type字段:用来看是否走了索引,除了all其他类型都是走索引。
      • extra字段:可以看到解析查询的信息。
      • rows字段:估算需要扫描的行数。
    • 主从复制
      • 原理
        • 具体步骤
          • 1、MySQL master启动binlog机制,将数据变更写入二进制日志(binary log, 其中记录叫做二进制日志事件binary log events,可以通过show binlog events进行查看)
          • 2、MySQL slave(I/O thread)将master的binary log events拷贝到它的中继日志(relay log)
          • 3、MySQL slave(SQL thread)重放relay log中事件,将数据变更反映它自己的数据中


希望能对你有所帮助。