
正文
怎么理解mysql数据库,你是如何理解数据库的
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
mysql是什么
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
详情参考百度百科
相关问答
Q1: 什么是数据库?
1.什么是数据库呢?
每个人家里都会有冰箱,冰箱是用来干什么的?冰箱是用来存放食物的地方。
同样的,数据库是存放数据的地方。正是因为有了数据库后,我们可以直接查找数据。例如你每天使用余额宝查看自己的账户收益,就是从数据库读取数据后给你的。
你可能会问了:我的数据就存放在自己电脑的excel表里就可以了,为什么还要搞个数据库呢?
这是因为数据库比excel有更多的优势。数据库可以存放大量的数据,允许很多人同时使用里面的数据。
举个例子你就明白了,excel好比是一个移动硬盘,你使用了这个移动硬盘其他人就用不了了。
数据库好比是网盘,很多人可以同时访问里面里的数据。
而且网盘比移动硬盘能放更多的数据。
2.数据库是如何存放数据的?
数据库有很多种类,这里我们重点学习使用最广泛的关系数据库。
关系数据库是由多个表组成的。如果你用过Excel,就会知道Excel是一张一张的二维表。每个表都是由行和列组成的。
同样的,关系数据库里存放的也是一张一张的表,只不过各个表之间是有联系的。所以,简单来说:
关系数据库=多张表+各表之间的关系
应的,学会关系数据库我们只要掌握两点就可以:
1)多张表里面,每一张表的结构
2)各表之间的关系
我们接下来分别来看看这两个知识点。
1) 表的结构
表的结构是指要了解关系数据库中每张表长什么样。
每个表由一个名字标识。表包含带有列名的列,和记录数据的行。我们举个具体的例子就一目了然了。
下面图片里的表名是:学生表,记录了每个学生的信息。
表中每一列都有一个名字来标识出该列,这个表里有4列,列名分别是学号,姓名,出生日期,性别。从列名上你也可以知道这一列对应记录的是什么数据。
表的每一行里记录着数据。这里的一行表示该名学生的信息,比如第2行是学号0002学生的信息,他的姓名是猴子,出生日期是1990-12-21,性别是女。
2)各表之间的关系
关系数据库是由多张表组成的,图片里是存放在学校数据库里的4张表。
你能发现下面这4张表之间有什么关系吗?
什么是关系呢?
你是你爸爸的儿子,你是你的儿子的爸爸,这就是生活中的关系。其实,数据之间也是有关系的。关系数据库里各个表之间如何建立起关系呢?
我们来看图中“学生表”,“成绩表”这两个表之前的关系。
这两张表通过”学号”关联起来,为了更清楚的看到这两个表的关系,PPT里我用相同颜色代表同一个学生的信息。
例如我想知道学生表里学号“0001” 的成绩是多少?那么我就可以在成绩表里去查找“学号”值是0001的行,最后在成绩表里发现有3行数据的学号都是“0001” ,对应的就找到了该学生的三门课程的成绩。
通过这个例子你应该对表之间的关系有了大概的了解。关系就是数据能够对应的匹配,在关系数据库中正式名称叫联结,对应的英文名称叫做join。
联结是关系型数据库中的核心概念,务必记住这个概念,后面会在多表查询中具体学到。
3.什么是数据库管理系统?
前面讲的都是关系数据库原理方面的基本理论。理论有了,当然的就的有对应的软件实现才能用起来,不然再强大的理论都是一堆无用的东东。这就好比,建筑师如果只有设计草图是无法盖起楼房的,得有具体的建筑人员才能盖起楼房。
所以,上面讲的关系数据库原理就是“设计草图”,那么对应的“建筑人员”是谁呢?
实现数据库原理的“建筑人员”就是数据库管理系统,用来管理数据库的计算机软件。
关系数据库管理系统有很多种,比如MySQL、Oracle、SQL Server等都是实现上面理论的关系数据库。
4.什么是sql?
建筑施工人员通过使铲子,拉土机等工具来盖房子。
那么,我们通过什么工具来操作数据库里的数据呢?
这个工具就是SQL。
SQL是为操作数据库而开发的一种语言,它可以对数据库里的表进行操作,比如修改数据,查找数据。
之前我在社群里举过一个例子,我觉得可以很好的说明白数据库和sql是什么关系。
把数据库比如一碗米饭,里面放的米是数据。现在我们要吃碗里的米饭,怎么取出碗里的米饭呢?
这时候我们拿一双筷子,用筷子操作碗里的米饭。这里的筷子就是SQL,用来操作数据库里的数据。
5.总结
1)什么是数据库?
数据库用于存放数据,
关系数据库=多张表+各表之间的关系
2)关系数据库表长什么样?
关系数据库中每个表由一个名字标识。表包含带有列名的列,和记录数据的行。
主键是关系数据库中重要的概念,用来标识数据的唯一性。
3)关系数据库里各个表之间如何建立联系呢?
关系数据库中,如果一张表要关联其他表,通过对应的列产生了关系。这个关系叫做联结。
4)什么是关系数据库管理系统?
实现数据库原理的“施工团队”就是,用来管理数据库的计算机软件叫做数据库管理系统。
常用的关系数据库管理系统有mysql,orcale,sql server为了方便描述,我们后面说到数据库,都是指数据库管理系统。
5)什么是SQL?
数据库里面放着数据,SQL是用来操作数据库里数据的工具。
现在我们可以理解支付宝的背后的运行原理了,用户把钱存放到支付宝数据库里,当用户查看支付宝余额的时候,后台使用SQL这个工具操作支付宝的数据库,把里面的数据查找出来,然后返回给用户,这样用户就可以看到存放到支付宝里的钱和每天的收益了。
Q2: 能够看懂MySQL源码是一种怎么样的体验?
首先mysql是c++开发的。
github地址:
很多大型软件基本都是c/c++开发的。你会了c/c++基本就具备了领略程序世界的大门的钥匙。
mysql是一个完善的数据库软件。
最上层:处理连接,授权认证,安全等
第二层:核心服务功能:查询解析,分析,优化,缓存以及所有内置函数(日期,时间,数据,加密等),存储过程,触发器,视图等。
第三层:存储引擎,存储引擎负责mysql中数据的存储和提取。每个引擎各有优势。服务器通过API与存储引擎进行通信。接口屏蔽了不同引擎的差异,对上层的查询过程透明。
你如果去读它,你基本就可以深入到这些业务点中。然后获取的提升绝对不是一星半点。你会发现开发一个web应用,开发一个中间件如此简单。你获取的是大神级工程师的开发思想,技巧。
举个例子:MVCC ,innodb 隔离性实现的技术。
设计原理很简单,也很巧妙。对数据安全和高并发做了平衡处理。
这个是单纯学习计算机语言,算法数据结构给不了的体验。
当前,你得能看的下去,你有那个恒心。吹牛逼就不要在这里问了?
首先,能看懂 MySQL 源码的人物,我感觉肯定在技术上是一位大牛,能够将 C/C++ 语言的 MySQL 源码看懂,肯定也是一位非常有耐心的技术人,能够耐着性子去专研。 如果能够将Mysql源码研究的很透彻的话,我相信出去到大厂找数据库内核开发的岗位时,绝对是一个非常巨大的优势。
能看懂 Mysql 的源码,首先第一点需要对 C/C++ 语言的知识点非常的熟悉,因为 MySQL 底层几乎都是 C/C++ 语言写的,比如指针等。 对于 MySQL 源码能够看得的话,我相信在和别人谈论数据库相关的问题时,其实也会更加有专业性和深度,能够快速的理解对方所说的数据库问题。
同时,如果对 MySQL 源码有着很深入了解的话,其实对于数据库的相关配置优化等也会掌握的更好,因为你对底层原理了解的很透彻,对于自己做的每一件事情都是有理有据。每个数据库参数是什么含义,为什么要这样设置,背后都有你自己的理解和原因。这对于公司来说,也是非常需要这样的人才。
当初我校招的时候,其实准备想投数据库开发相关的岗位,当时其实自己也自学过 MySQL 底层的原理(不过我没有去研究过源码)。 MySQL 最主要的还是底层可插拔式的存储引擎,比如 InnoDB、MYISAM等,重点是 InnoDB存储引擎。学习看 MySQL 源码的话,我建议可以选择其中一个模块开始入手。
我刚开始看 《MySQL 技术内幕:InnoDB存储引擎》 这本书的时候,上面讲解的非常多的 MySQL InnoDB 的原理。先从原理知识入手,再去看源码会更加好一些,因为你掌握了整体的代码逻辑方向。说实话直接上手看 MySQL 源码,将会是很难的一件事情。我相信那些能够看懂 MySQL 源码的人,肯定在看源码之前,有一定的技术知识储备。
新同学在去研究某一门开源技术组件的源码时,不建议直接上手去看代码,你应该是先去整体了解一下该技术组件的整体原理和框架,源码层则是更加细节方面的实现,你应该带着某一个问题去看,有针对性和目的性的去看源码,这样你的提升才会更加的快速。
我会持续大数据、数据库方面的内容,如果你有任何问题,也欢迎关注私信我,我会认真解答每一个问题。期待您的关注
阅读代码,一般都是一件繁复的工作。程序员,只要工作需要、或有足够的时间,都能够胜任阅读代码的工作,特别是数据库这类功能具体的系统。如果软件的功能不确定,阅读起来确实有莫名的困难。年轻时,得到“一套”Z80汇编码,闲来无聊,尝试阅读,数周过去,不得要领。直到在一个忽略了的简单文档的阐述上下文中,意识到代码可能是实现“导弹”稳定飞行的侧滚控制系统时,阅读中的问题瞬间都消失了。
拜托啦,我不只能看懂你的SQL,我还可以看懂VB、C++、数据库我也看
Q3: 深入理解MySQL数据库各种锁(总结)
MyISAM和InnoDB存储引擎使用的锁:
封锁粒度小:
由于InnoDB存储引擎支持的是行级别的锁,因此意向锁(因为意向锁是表锁)其实不会阻塞除全表扫以外的任何请求。故表级意向锁与行级锁的兼容性如下所示
参考
参考
行锁的三种算法:
这条语句阻止其他事务插入10和20之间的数字,无论这个数字是否存在。 间隙可以跨越0个,单个或多个索引值。
共享锁:
排他锁:
乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改(天真), 操作数据时不会上锁 ,但是 更新时会判断在此期间有没有别的事务更新这个数据,若被更新过,则失败重试 ;适用于读多写少的场景。
乐观锁的实现方式 有:
关闭自动提交后,我们需要手动开启事务。
上述就实现了悲观锁,悲观锁就是悲观主义者,它会认为我们在事务A中操作数据1的时候,一定会有事务B来修改数据1,所以,在第2步我们将数据查询出来后直接加上排它锁(X)锁,防止别的事务来修改事务1,直到我们commit后,才释放了排它锁。







