深入理解mysql

MySQL是一个开源的、跨平台的关系型数据库管理系统(RDBMS),它支持Windows、Linux和Mac OS等多种操作系统,并且被广泛应用于Web应用程序、企业应用系统和数据仓库等领域。MySQL具有高性能、可扩展性和安全性等优点,成为目前使用最为广泛的数据库之一。

MySQL数据库的结构

MySQL数据库由多个表组成,每个表包含多个行和列。每一列代表一个字段,而每一行则代表一个记录。表可以通过主键和外键进行关联,从而实现数据之间的链接。MySQL支持多种数据类型,包括整型、浮点型、字符串型、日期/时间型、二进制型等。

MySQL的特点

  1. 高性能:MySQL具有很快的读写速度,并能够处理大量的并发请求。这得益于MySQL采用了多线程技术和缓存机制来优化数据库的性能。此外,MySQL还支持分布式事务和分片技术,使其可以适应不同规模的应用场景。

  2. 可扩展性:MySQL允许在集群中添加新的节点以增加数据库的容量和性能。此外,MySQL也支持分布式事务和分片技术,使其可以适应不同规模的应用场景。

  3. 安全性:MySQL提供了多种安全性措施,如加密传输、访问控制和事件监视器等。这些措施可保证数据的安全性和完整性。此外,MySQL还支持备份和恢复功能,以便在数据丢失或损坏时进行恢复。

  4. 易用性:MySQL具有简单易用的用户界面和命令行工具,使得开发人员和管理员能够轻松地管理数据库。此外,MySQL还提供了多种API和驱动程序,方便开发人员进行编程和集成。

那么 简单的介绍完mysql之后,我们就来详细深入的了解一下它。

首先我们知道mysql的主要引擎:innodb, myisam, memory,archive, federated

 1.innodb:  innodb引擎是mysql数据库的默认引擎,它支持事务与外键,不支持全文索引,适合读写操作。

 2.myisam: myisam引擎的速度相对较快,但是不支持事务与外键,支持全文索引。适合读操作

 3.memory: 不支持事务,基于内存读写,速度快支持全文索引,适合经常修改不需要持久化数据的场景。

以上三个数据库引擎中,最常用的两个引擎就是innodb和myisam两个引擎,他们两个的区别基本都是相对的,最主要的一个区别就是它们的索引结构不相同:

    innodb的索引结构,它的b+tree 叶子节点存放的是数据,非叶子节点存放的键值.innodb的辅助索引存放的是主键索引的键值,所以查到非 主键索引的时候需要回表再次查询主索引,如果说我们查询的字段刚好在辅助索引的键值中,它就不会回表,所以这也是为什么我们在写查询sql的时候只查询需要的字段,不查询所有。

    myisam的索引结构:myisam的叶子节点不存数据,存的都是指针指向磁盘存储数据的地址,而且myisam的主索引和辅助索引存储的都是指向磁盘中的地址。所以它的效率在相对场景下是要快去innodb引擎的。

那么提到了两个引擎的索引结构,我们还需要了解到索引的类型和索引方式。

索引的类型:普通索引,唯一索引,主键索引和全文索引四种。innodb不支持全文索引,myisam支持全文索引,所以一般进行全文搜索的话我们使用es进行代替,后面会专门出一篇讲解es的博客。

索引的方式: hash  和 btree,其中hash只有memory引擎支持,innodb和myisam引擎是不支持的。

 其他区别:innodb支持行锁,myisam只支持表锁,所以如果使用myisam引擎,如果一个用户在更新表的时候,整张表都会被锁起来,所以myisam不适合进行高并发写操作。

上面我们说到了innodb索引支持事务,那么事务究竟是什么呢?

        首先什么是事务:事务就是一组操作要么全部成功要么全部失败。它有四大特性:原子性,一致性,隔离性和持久性。

        1.原子性: 表示最小的无法再分割的单元

        2.持久性: 数据持久化

        3.隔离性:    两个数据修改同一个数据,必须按顺序执行,如果前一个事务未执行完成,那么这个状态对于另外一个事务是不可见的

        4.一致性: 满足我们预先规定好的原则,需要保持结果的一致性。

        第二点,我们介绍一下事务的隔离等级:

        1.读未提交:数据库在读的时候不会阻塞读和写的操作,在写的时候不会阻塞读的操作但会阻塞写的操作,可解决一类丢失更新问题。

        2.读已提交:数据库在读的时候不会阻塞读和写的操作,在写的时候会阻塞事务读的操作和事务写的操作,可以解决一类丢失更新问题和脏读的问题。

        3.可重复度:数据库在读的时候不会阻塞读的操作,但会阻塞写的操作,在写的时候会阻塞读和写的操作,可以解决一类丢失更新,脏读,和二类丢失更新问题,是数据库默认隔离级别。

        4.串行化:使用表级锁,让事务一个一个按顺序执行,类似于队列,可以解决一切并发安全问题。

        第三点,我们介绍Spring事务的传播机制:

        1.如果当前没有事务,那么新建一个事务执行。

        2.如果当前没有事务,抛出异常。

        3.如果当前存在事务,将当前事务挂起,新建一个事务执行

        4.如果当前存在事务,加入该事务。

        5.以非事务方式执行,如果当前存在事务,抛出异常

        6.以非事务方式执行,如果当前存在事务,就当前事务挂起

        那么说了这么多,mysql是怎么实现事务的呢,因为只有innodb支持事务,那么我们说的也就是innodb实现事务的原理:它的原子性是根据 undo log日志来实现的,持久性是根据 redo log日志实现。 当数据开始的时候,会先保存undo log日志,再执行修改,最后提交事务 。如果数据需要回滚,那么就根据undo log日志进行回滚,如果系统数据崩溃失败,那么就根据redo log日志进行恢复,redo log日志也是对数据进行一个备份。

好啦, 这篇文章就先到这里,下次再继续深入理解mysql,想要知道sql优化的方式,点此链接哦sql优化简介

猜你喜欢

转载自blog.csdn.net/m0_53464000/article/details/130118063