This commit is contained in:
louzefeng
2024-07-11 05:50:32 +00:00
parent bf99793fd0
commit d3828a7aee
6071 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
<audio id="audio" title="开篇词 | 在实战中学习是解锁MySQL技能的最佳方法" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/bf/0b/bfa0368abe182886fe2476911033390b.mp3"></audio>
你好,我是朱晓峰。
工作二十多年来我一直在和MySQL打交道。我曾任摩根大通银行技术部副总裁带领团队为纽约、东京等分支银行提供数据存储和安全服务。目前正致力于开发基于MySQL的管理信息系统率领团队为包括国家开发银行、百度在线、北京西站等大型企业在内的客户提供了信息服务并获得了11项软件著作权比如商业数据管理系统、云POS系统等
因为具备丰富的MySQL开发经验从2015年起我受聘担任数据应用学院客座讲师开始制作职业技术培训课程。我和团队开发了一个为期2周、30个课时的MySQL入门集训课。我们打破了传统的教学模式不去讲零碎的知识点而是借助一个实际项目去讲必备技能帮助数百名初学者迅速掌握了MySQL的基本操作和核心技能。经过2周的集中培训有几十位学生顺利进入谷歌、苹果和亚马逊等公司。
多年的项目开发以及培训经历让我深刻地认识到熟练使用MySQL对技术人来说变得越来越重要是我们拿到心仪Offer的敲门砖。
要知道MySQL的入门门槛非常低还具有免费、开放源码等优势可以满足我们的多样化需求是目前被广泛使用的数据库之一。
看到这里你可能会问“我知道学习MySQL很重要也花了很多时间去学习可是学来学去还是连最简单的实际问题都无法解决该怎么办呢
别着急接下来我们就来聊聊高效的MySQL学习方法。
## 为什么学了很多知识你依然不会用MySQL解决实际问题?
很多人刚开始学习MySQL时都会面临一系列问题。
- 市面上的MySQL资料这么多该怎么挑选呢
- 我花了很多时间学习MysQL但是最后真的遇到问题时我发现我根本不知道怎么解决。
- 我会一些基本的操作,但还是很容易踩到坑里。比如,我曾经把字段设置成浮点数,但我不知道它是不精准的,幸亏领导发现了,不然很可能会给项目带来损失。
- 我储备了不少面试题,为什么一到面试就卡壳呢?
- ……
其实,这些问题,本质上都是一个原因导致的:传统的资料都是在讲授一个个零碎的知识点,最多给出一些基础的小练习,让你进行一些简单的训练。所以,很多人花了很多时间去学习,好像懂得了很多东西,但是一遇到真实的项目问题,就会一头雾水,不知道如何用所学的知识去解决实际问题,更没有能力给出完整的解决方案。
我做过项目主管,也长期带团队,**深知在工作中,最重要的绝对不是你的知识储备量,而是你解决实际问题的能力**。但不幸的是,我见过太多面试时表现优异的人,最终却连试用期都过不了。
说到这里,我特别想和你分享一下我曾面试过的一个应届生的故事。
他是一名计算机专业的研究生讲起MySQL数据库的相关知识他说得非常清楚也很有条理所以我对他的期望值特别高。但是等他真正上手做项目时我才发现他的知识都停留在理论层面。
举个小例子,一次,我们需要开发一个餐厅的点餐系统,我就请他做数据库设计。没想到他设计出来的订单表,居然没有包含客户编号,这就导致无法通过关联查询获取客户信息。这样的数据库根本不满足业务的需求,自然是不能用的。
这并不是个例,很多人在谈到某些知识时可以出口成章,但是一遇到真实的商业环境,就会毫无头绪,或者是犯这样那样的错误。
在我看来,**正确的学习方法,远比你投入的时间更重要**。而实战,就是最高效的方法。
为此,**我特意选择了一个连锁超市的实战项目手把手带你从0到1走完项目全流程不仅帮你掌握核心操作还能让你真正拥有实战能力能够迅速上手任何一个项目**。无论你是刚刚走入职场想要迅速解锁MySQL这项技能还是对它感兴趣想要转岗到MySQL开发都可以在这个课程中达到你理想的目标。
之所以选择采用连锁超市的项目,有两个原因。
1. 你对超市这个场景足够熟悉。我们都有去超市购物的经历,会看到货架上摆着玲琅满目的商品,各种各样的促销招牌,还有忙着扫码收银的店员……借助熟悉的场景来讲解,可以最大程度减轻你的理解成本。
1. 超市背后的业务环节非常复杂产生的数据也多种多样而MySQL是处理这类业务的利器。当我们完整地解决了超市项目中所遇见的复杂数据问题时你再去做其他任何业务就可以更游刃有余一些。
总之,我会从实际问题出发,带你学习技术点,让你能举一反三,快速应用在实战项目中。如果用一个公式去概括,就是:**项目的实际需求--&gt;解决问题所需的知识点--&gt;用好这些知识的实战经验**。
举个例子超市的商品非常多这些商品的名称、数量等必须要被准确地存储、及时地更新才能保证正常地售卖。这就是真实需求。要解决这个问题就要用到MySQL的数据存储功能我们就要掌握设计数据表、定义字段等知识确保数据的存储效率最高以及数据的唯一性同时减少错误。
不只是数据存储我会带着你解决连锁超市所面临的一系列实际问题从商品进货到库存查验再到店面售卖、会员营销等等。在这个过程中我会给你讲解MySQL是怎样存储数据的、如何才能高效查询、如何提供经营决策的依据、如何确保数据的可靠性和安全性……
即使你没有数据库的知识基础也完全不用担心只要你跟着我的思路就一定能真正地在短时间内入门MySQL拥有解决问题的能力。
## 这门课是怎么设计的?
说了这么多,课程的具体设计是怎样的呢?我来介绍一下。
课程总共有四个核心模块。
- **实践篇**:我会从项目最基本的数据存储和操作开始讲起,包括创建数据库、数据表、对表中的数据进行增删改查操作、使用函数、表与表之间的关联操作等,帮你快速掌握最基本的用法。
- **进阶篇**随着用户管理水平的不断提升对系统的要求也越来越多越来越复杂会用到MySQL的许多高级功能。我会手把手带你实现这些功能包括把程序存储在服务器上、利用突发事件来调用程序、在不改变存储结构的前提下创建虚拟表以方便查询等等。
- **优化篇**:项目投入运营以后,随着数据的积累,性能优化的问题逐步凸显。在这个模块呢,我会给你讲一讲数据库的设计规范,还会带你创建数据模型,帮助你来理清设计思路。同时,我还会讲到提升性能的具体方法。
- **案例篇**在课程的最后我会手把手带你从0到1设计一个连锁超市的信息系统数据库把前面讲到的知识点都融入到项目设计中不仅帮你巩固所学的知识更教会你如何灵活使用。
<img src="https://static001.geekbang.org/resource/image/73/30/737ae08d546d03a49d4f93a844a76f30.png" alt="">
除此之外,在课程正式开始之前,我会用图片+音频+视频的形式带着你安装MySQL及必备的图形化管理工具Workbench。同时我还特意设置了一个特别放送模块给你讲解MySQL 8.0的新特性、空间定位的方法,以及大厂的高频面试题,帮你轻松拿下面试。
最后我还想说MySQL是一个非常优秀的数据库里面包含了很多经典的设计思想。虽然现在你不需要掌握得这么深但是我还是建议你多多体会这些思想这会让你提前建立起大局观还可以帮助你从更高的层面去看待所遇见的实际问题。
在这门课程里,我会把我这么多年的经验毫无保留地分享给你,欢迎你来学习这门课,也欢迎你把咱们的课程分享给你的朋友或同事,邀请他们和你一起学习,共同成长。

View File

@@ -0,0 +1,192 @@
<audio id="audio" title="环境准备 | 带你安装MySQL和图形化管理工具Workbench" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/8c/09/8c3e876ba8a2ae87e5fab3e6d85dcb09.mp3"></audio>
你好我是朱晓峰。这节课我来手把手带你安装和配置MySQL。
俗话说“巧妇难为无米之炊”我们不能凭空学习理论知识必须要在实际的MySQL环境中进行操作这是一切操作的基础。同时我还会带你安装MySQL自带的图形化管理工具Workbench我们之后要学习的表的关联、聚合、事务以及存储过程等都会用到它。
我会借助图文和音频给你介绍知识重点和操作要领,同时,我还录制了相应的视频,来展示具体的操作细节。你可以根据自己的习惯和需求,选择喜欢的形式来学习。
<video poster="https://media001.geekbang.org/599736e1aad64df7aa8ffa746ebaa675/snapshots/ab93681c22c74e0399a77a31f98af18b-00005.jpg" preload="none" controls=""><source src="https://media001.geekbang.org/customerTrans/7e27d07d27d407ebcc195a0e78395f55/488aa8b2-17810dc979a-0000-0000-01d-dbacd.mp4" type="video/mp4"><source src=" https://media001.geekbang.org/0bb39f75acf9400390ba54e0b99ebed2/5246c421f99f45329b88030a012a440a-3c473d8f9e4e8965bf525b201e121eba-sd.m3u8" type="application/x-mpegURL"></video>
好了话不多说我们先来安装MySQL。
## 安装与配置
首先我们要下载MySQL的安装包具体做法是打开浏览器输入网址[https://dev.mysql.com](https://dev.mysql.com/)进入MySQL的开发者专区进行下载。
在下载界面你会看到需要选择操作系统。这是因为MySQL可以在多种操作系统平台上运行包括Windows、Linux、macOS等因此MySQL准备了针对不同操作系统平台的安装程序。这里我们主要介绍MySQL在Windows操作系统上的安装。因为Windows平台应用得最广泛而且图形化操作也比较简单。
当然如果你想了解Linux平台和macOS平台上的安装和配置也可以通过官网[https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html](https://dev.mysql.com/doc/refman/8.0/en/linux-installation.html) 和[https://dev.mysql.com/doc/refman/8.0/en/osx-installation.html](https://dev.mysql.com/doc/refman/8.0/en/osx-installation.html) 来进行查看。不同平台上的MySQL会略有不同比如同样的机器配置Linux上的MySQL运行速度就比Windows快一些不过它们支持的功能和SQL语法都是一样的即使你使用的是其他系统也不会影响到我们的学习。
好了,下载完成之后,我们就可以开始安装了。接下来我给你介绍下安装步骤。
**第一步点击运行下载的安装程序安装MySQL数据库服务器及相关组件**
<img src="https://static001.geekbang.org/resource/image/4c/3b/4cd932563b3c91fac740154bd68e093b.png" alt="">
我给你介绍下这些关键组件的作用。
1. MySQL Server是MySQL数据库服务器这是MySQL的核心组件。
1. MySQL Workbench是一个管理MySQL的图形工具一会儿我还会带你安装它。
1. MySQL Shell是一个命令行工具。除了支持SQL语句它还支持JavaScript和Python脚本并且支持调用MySQL API接口。
1. MySQL Router是一个轻量级的插件可以在应用和数据库服务器之间起到路由和负载均衡的作用。听起来有点复杂我们来想象一个场景假设你有多个MySQL数据库服务器而前端的应用同时产生了很多数据库访问请求这时MySQL Router就可以对这些请求进行调度把访问均衡地分配给每个数据库服务器而不是集中在一个或几个数据库服务器上。
1. Connector/ODBC是MySQL数据库的ODBC驱动程序。ODBC是微软的一套数据库连接标准微软的产品比如Excel就可以通过ODBC驱动与MySQL数据库连接。
其他的组件主要用来支持各种开发环境与MySQL的连接还有MySQL帮助文档和示例。你一看就明白了我就不多说了。
好了知道这些作用下面我们来点击“Execute”运行安装程序把这些组件安装到电脑上。
**第二步:配置服务器**
等所有组件安装完成之后安装程序会提示配置服务器的类型Config Type、连接Connectivity以及高级选项Advanced Configuration如下图所示。这里我重点讲一下配置方法。
<img src="https://static001.geekbang.org/resource/image/f3/07/f3a872586836d57355a022bc3852a107.png" alt="">
我们主要有2个部分需要配置分别是**服务器类别**和**服务器连接**。
先说服务器类别配置。我们有3个选项分别是开发计算机Development Computer、服务器计算机Sever Computer和专属计算机Dedicated Computer。它们的区别在于**MySQL数据库服务器会占用多大的内存**。
- 如果选择开发计算机MySQL数据库服务会占用所需最小的内存以便其他应用可以正常运行。
- 服务器计算机是假设在这台计算机上有多个MySQL数据库服务器实例在运行因此会占用中等程度的内存。
- 专属计算机则会占用计算机的全部内存资源。
这里我们选择配置成“开发计算机”因为我们安装MySQL是为了学习它因此只需要MySQL占有运行所必需的最小资源就可以了。如果你要把它作为项目中的数据库服务器使用就应该配置成服务器计算机或者专属计算机。
**再来说说MySQL数据库的连接方式配置**。我们也有3个选项**网络通讯协议TCP/IP、命名管道Named Pipe和共享内存Shared Memory**。命名管道和共享内存的优势是速度很快但是它们都有一个局限那就是只能从本机访问MySQL数据库服务器。所以**这里我们选择默认的网络通讯协议方式这样的话MySQL数据库服务就可以通过网络进行访问了**。
MySQL默认的TCP/IP协议访问端口是3306后面的X协议端口默认是33060这里我们都不做修改。MySQL的X插件会用到X协议主要是用来实现类似MongoDB 的文件存储服务。这方面的知识,我会在课程后面具体讲解,这里就不多说了。
高级配置Show Advanced和日志配置Logging Options在咱们的课程中用不到这里不用勾选系统会按照默认值进行配置。
**第三步:身份验证配置**
关于MySQL的身份验证的方式我们选择系统推荐的基于SHA256的新加密算法caching_sha2_password。因为跟老版本的加密算法相比新的加密算法具有相同的密码也不会生成相同的加密结果的特点因此更加安全。
**第四步:设置密码和用户权限**
接着我们要设置Root用户的密码。Root是MySQL的超级用户拥有MySQL数据库访问的最高权限。这个密码很重要我们之后会经常用到你一定要牢记。
**第五步配置Windows服务**
最后我们要把MySQL服务器配置成Windows服务。Windows服务的好处在于可以让MySQL数据库服务器一直在Windows环境中运行。而且我们可以让MySQL数据库服务器随着Windows系统的启动而自动启动。
## 图形化管理工具Workbench
安装完成之后我再给你介绍一下MySQL自带的图形化管理工具Workbench。同时我还会用Workbench的数据导入功能带你导入一个Excel数据文件创建出我们的第一个数据库和数据表。
首先我们点击Windows左下角的“开始”按钮如果你是Win10系统可以直接看到所有程序如果你是Win7系统需要找到“所有程序”按钮点击它就可以看到所有程序了。
接着找到“MySQL”点开找到“MySQL Workbench 8.0 CE”。点击打开Workbench如下图所示
<img src="https://static001.geekbang.org/resource/image/ed/c2/ed6288dec0a1899bcb1b6c367aaf53c2.png" alt="">
左下角有个本地连接点击录入Root的密码登录本地MySQL数据库服务器如下图所示
<img src="https://static001.geekbang.org/resource/image/d4/66/d4fb370ed80689384ccfa93267996766.png" alt="">
这是一个图形化的界面,我来给你介绍下这个界面。
- 上方是菜单。左上方是**导航栏**这里我们可以看到MySQL数据库服务器里面的数据库包括数据表、视图、存储过程和函数左下方是**信息栏**,可以显示上方选中的数据库、数据表等对象的信息。
- 中间上方是工作区你可以在这里写SQL语句点击上方菜单栏左边的第三个运行按钮就可以执行工作区的SQL语句了。
- 中间下方是输出区用来显示SQL语句的运行情况包括什么时间开始运行的、运行的内容、运行的输出以及所花费的时长等信息。
好了下面我们就用Workbench实际创建一个数据库并且导入一个Excel数据文件来生成一个数据表。**数据表是存储数据的载体,有了数据表以后,我们就能对数据进行操作了**。
### 创建数据表
**第一步录入Excel数据**
我们打开Excel在工作簿里面录入数据。
我们这个工作表包括3列分别是barcode、goodsname、price代表商品条码、商品名称和售价。然后我们再录入2条数据。
- 0001book3表示条码为“0001”商品名称是“book”价格是3元。
- 0002pen2表示条码是“0002”商品名称是“pen”价格是2元。
注意我在录入商品条码的时候打头用了一个单引号这是为了告诉Excel后面是文本这样系统就不会把0001识别为数字了。
录入完成之后我们把这个文件存起来名称是test格式采用“CSVUTF-8逗号分隔”。这样我们就有了一个CSV文件test.csv。
**第二步:编码转换**
用记事本打开文件再用UTF-8格式保存一次这是为了让Workbench能够识别文件的编码。
**第三步:数据导入**
准备好数据文件以后我们回到Workbench在工作区录入命令`create database demo;`,在工作区的上方,有一排按钮,找到闪电标识的运行按钮,点击运行。
这时下方的输出区域的运行结果会提示“OK”表示运行成功。此时把光标放到左边的导航区点击鼠标右键刷新全部新创建的数据库“demo”就出现了。
点击数据库demo左边的向右箭头就可以看到数据库下面的数据表、视图、存储过程和函数。当然现在都是空的。光标选中数据表鼠标右键选择“Table Data Import Wizard”这时会弹出数据文件选择界面。选中刚才准备的test.csv文件点击下一步Workbench会提示导入目标数据表我们现在什么表也没有所以要选择创建新表“test”。点击下一步Workbench会提示配置表的字段其实它已经按照数据的类别帮我们配置好了。
这时候再次点击下一步点击运行完成数据表导入。光标放到左边的导航区选中我们刚刚创建的数据库“demo”中的数据表鼠标右键点击刷新全部刚刚导入的数据表“test”就显示出来了。
### 进行查询
现在我们已经有了数据库,也有了数据表,下面让我们尝试一个简单的查询。
在工作区,录入`SELECT * FROM demo.test;`这里的demo是数据库名称test是数据表名称*表示全部字段)。
用鼠标选中这行查询命令点击运行。工作区的下半部分会显示查询的结果。我们录入的2条数据都可以看到了。
再尝试插入一条语句:
```
INSERT INTO demo.test
VALUES ('0003','橡皮',5);
```
鼠标选中这条语句点击运行。看到了吗输出区提示“OK”运行成功了。现在回过头来选中上面那条查询语句“SELECT * FROM demo.test;”,点击运行,刚才我们插入的那条记录也查询出来了。
<img src="https://static001.geekbang.org/resource/image/75/79/755b0dfc9f16a598f6270eb2fdb26079.png" alt="">
到这里,我们就完成了数据库创建、数据表导入和简单的查询。是不是觉得很简单呢?
最后,我还想再讲一下源码获取方法。咱们的课程不要求你阅读源码,但是你可以先学会获取源码的方法,毕竟,这是帮助你提升的重要工具。
## MySQL源代码获取
首先你要进入MySQL[下载界面](https://dev.mysql.com/downloads/mysql/8.0.html)。 这里你不要选择用默认的“Microsoft Windows”而是要通过下拉栏找到“Source Code”在下面的操作系统版本里面选择WindowsArchitecture Independent然后点击下载。
接下来把下载下来的压缩文件解压我们就得到了MySQL的源代码。
MySQL是用C++开发而成的,我简单介绍一下源代码的组成。
mysql-8.0.22目录下的各个子目录包含了MySQL各部分组件的源代码
<img src="https://static001.geekbang.org/resource/image/e7/7d/e780e83b296aafd348b3a71948dd4a7d.png" alt="">
- sql子目录是MySQL核心代码
- libmysql子目录是客户端程序API
- mysql-test子目录是测试工具
- mysys子目录是操作系统相关函数和辅助函数
- ……
源代码可以用记事本打开查看如果你有C++的开发环境,也可以在开发环境中打开查看。
<img src="https://static001.geekbang.org/resource/image/72/0b/72180866ddd34c512be6acea95822d0b.png" alt="">
如上图所示源代码并不神秘就是普通的C++代码跟你熟悉的一样而且有很多注释可以帮助你理解。阅读源代码就像在跟MySQL的开发人员对话一样十分有趣。
## 小结
好了,我们来小结下今天的内容。
这节课我带你完成了MySQL的安装和配置同时我还介绍了图形化管理工具Workbench的使用并且创建了第一个数据库、数据表也尝试了初步的SQL语句查询。
我建议你用自己的电脑按照这节课的内容实际操作一下MySQL的安装、配置并尝试不同的配置看看有什么不同体会课程的内容加深理解。
最后,还有几点我要着重提醒你一下。
1. 我们的MySQL是按照开发计算机进行的最小配置实际做项目的时候如果MySQL是核心数据库你要给MySQL配置更多的资源就要选择服务器计算机甚至是专属计算机。
1. Root超级用户的密码你不要忘了否则只好卸载重新安装。
1. 你还可以在Workbench中尝试一下不同的SQL语句同时看看不同的工作区、菜单栏的各种按钮看看它们都是做什么用的。熟悉Workbench对理解我们后面的知识点会很有帮助。
课程的最后我还要给你推荐一下MySQL的[官方论坛](https://forums.mysql.com)。这里面有很多主题比如新产品的发布、各种工具的使用、MySQL各部分组件的介绍等等。如果你有不清楚的内容也可以在里面提问和大家交流建议你好好利用起来。
## 思考题
在导入数据的时候如果不采用MySQL默认的表名而是把导入之后的表改个名字比如说叫demo.sample该如何操作呢
欢迎在留言区写下你的思考和答案,我们一起交流讨论。如果你觉得今天的内容对你有所帮助,也欢迎你把它分享给你的朋友或同事,我们下节课见。