数据库的基本原理学习数据库,第一步先打好基础,数据库原理是计算机类的必修课,非-专业我是选择自学的,我也是通过看MySQL视频教程配合大学教材自学的《数据库系统概论》。书之类的东西肯定是比较理论化的。相比之下,看视频教程更容易理解。数据库是做什么用的?数据库的作用就是组织数据,组织大量的数据。这些数据通常存储在外存(磁盘)数据库提供的核心功能中,即数据的增删改查。我们在学习数据库的时候主要了解以下几个方面:1.什么是数据库模型:包括层次模型、网络模型和关系模型,我们使用的关系数据库是基于关系模型实现的。2、关系数据库和sql基础:了解关系数据库的基本概念,了解sql的基本用法,至少应该了解CRUD和一些常用用法。3.数据库的安全性和完整性。这两部分其实理论上比较枯燥。实际上,它们对应于实际场景。安全性是保护数据安全,包括权限控制和数据备份,而完整性是通过一些约定和规范来限制数据库的存储内容。比如我们可以通过主键、唯一键、非空等需求来限制字段的取值。4.关系数据理论。这部分内容很有趣也很复杂。它谈到了数据库的范式理论。从一种范式到四种范式,每一种都有自己的用法和要求。一家互联网公司“第四范式”就是以这个概念命名的。5.交易和锁。最后一部分是数据库的两个重要组成部分,事务和锁。事务可以保证一组数据库操作的ACID特性,非常适合需要数据一致性的场景,而数据库锁不仅是实现事务的基础,还可以灵活应用于不同的数据库应用场景。我们也可以通过SQL语句完成加锁和释放,这对于并发场景尤其有用。MySQL的实现原理学完了数据库的基础知识,就该正式学习MySQL了。毕竟很多时候我们的数据库应用都是MySQL。其实MySQL中的很多知识点都和我们上面说的数据库基础类似,但是回到MySQL的实现层,我们还要看MySQL的存储引擎。MySQL的存储引擎分为innodb和myisam。关于这两种引擎的区别,相信大家已经看过很多面试题了。例如innodb支持事务和行级锁,而myisam则不支持。由于现在innodb基本上是主流,所以我们讨论MySQL的时候基本上都是在讨论innodb。关于MySQL的实现原理,我觉得大概有一些东西是我们需要学习的。首先,让我们了解一下MySQL中有哪些数据类型以及一般如何使用它们。然后,尝试使用MySQL运行一些sql语句,建库建表,添加索引和主键。总之,这些做法可以帮助你更好地学习上面的内容。要想更好的理解MySQL的原理,就必须了解MySQL的整体架构。一般来说,MySQL可以从上到下分为几层。客户端就是我们经常使用的可视化工具,比如NavicatforMySQL服务端就是我们安装的MySQL程序。其实打开它就是一个MySQL服务器进程sql执行层。sql执行层主要负责sql的解析和执行,其中包含很多复杂的组件,比如解释器、分析器、优化器等。等等,执行层会生成一个sql执行计划。这个计划往往是我们分析sql性能的重要参考。存储引擎层存储引擎层是InnoDB。管理等等,怎么加锁,怎么实现事务,都是这一层要考虑的事情。文件系统层存储引擎的下一层是文件系统。数据库数据如何与文件系统进行交互,就是这一层要做的事情。索引不得不说,索引绝对是数据库中检查最频繁、测试最多的内容。比如给你一个sql,它能不能命中索引,它能命中哪些索引,如果要命中某个索引,应该怎么修改呢?面试的时候是不是经常看到这种问题,这么多题型变来变去?,其实面试官只是想测试你对指标的理解程度。另外,索引的数据结构也是非常热门的考点之一。索引实际上是基于B+树实现的。不知道B+树是什么。请回头看看数据结构。简单来说,它是一棵专用于在更短时间内完成数据检索的多路搜索树,因为它的高度比二叉树低,而且它的非叶子节点相对于普通b-tree只作为索引,并且叶子节点是依次串联的,所以很适合做搜索树。如果你明白了这一点,那么你在面对这样的面试题时就能更加从容。面试官其实只是想知道你对b+树了解多少。事务和锁除了索引,数据库中最复杂的内容可能就是事务和锁了。以事务的ACID特性为例,需要了解每个大写字母背后的实现原理,比如原子性是如何实现的,一致性是如何保证的,背后的原理是什么。我们平时使用的事务可能就是spring中的事务模板。在事务中执行的相同数据库数据库操作要么成功要么失败。这就是原子性。两个事务互不影响,这就是隔离。当然,这里涉及到事务隔离级别。事务隔离级别包括未提交读、提交读、可重复读和序列化。每个事务隔离级别都适用于一定的数据库读写场景。很多时候,我们需要了解隔离级别背后的原理,才能很好的改变应用它。MySQL默认使用可重复读隔离级别。这个级别基本可以保证我们的交易按预期执行。在MySQL中,这种事务隔离级别甚至可以解决幻读问题。MySQL事务的背后,其实隐藏着一个boss,就是数据库的锁。很多事务的隔离级别是通过锁来实现的。比如可重复读只需要加行锁就可以实现,而幻读则需要加gaplocknext-keylock来实现。行级锁和表级锁是MySQL中的两种锁。顾名思义,表级锁会直接锁住表,一次只有一个事务可以访问它们。但是,行级锁实际上并不锁定行。在MySQL中,这个锁是加在索引上的,而这个索引对应的数据往往不止一行,所以这个行级锁只是理论上的“行级锁”。说了这么多,要了解MySQL的事务和锁,还是需要多看相关的书籍和文章,了解它的内部实现原理,知其然,知其所以然。MySQLLearningTutorial这个视频是最适合初学者学习MySQL基础知识的视频。由PowerNode杜老师授课。杜老师的讲课风格雷厉风行。特点:适合零基础的书生观看;视频教学循序渐进,没有看不懂,没有学习;观看视频后,即可承担日常的开发工作;总的来说,视频都是以绝对零基础为主,主要内容包括:DQL、DML、DDL、DCL、TCL等SQL语句,尤其是DQL语句讲解详细,包括单表查询、多表联合查询、内连接、外连接等。此外,还讲授了数据库事务的处理、数据库索引的实现原理、视图的使用等。通过本次mysql视频学习,让新手从数据库中学习,在编程中能够熟练使用数据库。下面是学习资料,点击下方https://www.bilibili.com/video...
