[Day16] MySQL 简介

之前我们在写 API 程序的时候,一开始使用写死在程序里的资料集合(List),这个方法虽然快速让我们可以 demo 程序,但是却非常的糟糕,因为只要重启程序,所有的变更都会消失。後来笔者自干了一个读写档案来做 CRUD 的 UserServiceWithFile,虽然可以稳定的保存资料了,但是他却有另外的缺点:只要有不同的 request 同时要操作这个档案程序就会挂掉。

这时候要继续自干就不容易了,要自己处理 critical section 还有 race condition 非常的麻烦,笔者在大学读完这些章节、考试过後就忘得差不多了。幸好,我们现在很幸褔,有好多现成的资料库可以用,直接帮我们处理这些麻烦却又关键的事,今天,我们就来介绍一下资料库吧。

什麽是资料库

资料库简单来说就是简单来说就是提供一个让我们管理资料的资料中心。以下节录维基百科的解释:

资料库,又称为资料管理系统,简而言之可视为电子化的档案柜——储存电子档案的处所,使用者可以对档案中的资料执行新增、撷取、更新、删除等操作

一个资料集合只要可以透过电脑系统电子化存取、管理,他就是广义上的资料库,像我们之前使用 API 程序存取/读写 CSV 档案来管理资料,它也可以视为一个广义的资料库。

但是现在我们提到资料库,通常就是指以下两种资料库系统:

  • RDBMS – 关联式资料库。以资料之间的关联性为基础架构的资料库系统,通常把资料分类为资料表(table),然後再透过资料表之间的关联性做查询。因为使用结构化查询语言(Structural Query Language, SQL),所以现在 SQL 与 RDBMS 这两个词在台湾有某种程度的混用。
  • NoSQL – 非关联式资料库。因应新型态应用程序需求而生的资料库种类,没有固定的资料表格式,通常把所有需要的资料都放在一起,减少因为JOIN(关联两个以上资料表的操作)所花费的时间。

两种不同的资料库系统各有不同的特性与优缺点,适合不同的使用情境,关於更多资料库系统的知识,可以参考这篇文章。本系列文会使用 RDBMS 中的 MySQL 当作范例。这篇 2019 铁人赛的文章介绍了目前三个主流的 RDBMS 与他们的比较,有兴趣的邦友可以参考看看。

MySQL 简介

MySQL 是目前主流的关联式资料库其中之一,最早在 1994 年由瑞典一家公司的团队 MySQL AB 开发,後来在 2008 年被昇阳(Sun)公司收购,接着在2010 年随着昇阳被甲骨文(Oracle)收购,MySQL 现在也是甲骨文旗下的产品。

MySQL 一直以来以它的开放、低成本而着名,非常多的个人专案、小公司都会选择用 MySQL 当作资料库。虽然 MySQL 最有名的是它的低成本,但并不代表他没有办法扛住高流量的商业应用,依然有非常多的大公司选用 MySQL 当作他们的资料库。

笔者自己写过 MySQL 与微软的 SQL Server,个人使用的感觉是,MySQL 语法简单入门容易,但是有一些比较进阶的操作,SQL Server 有内建简单的语法帮助我们完成,可是 MySQL就必须自干。例如下面的例子,要用 CountryCode 栏位做分群,然後比 Quantity 排名,SQL Server 可以使用 RANK OVER + PARTITION BY 的语法完成,但是 MySQL 一直到 2018 年才有类似的语法,以前要在 SELECT 语法里面插入变数运算才有办法达到相同的效果。

ProductID   CountryCode   Quantity Rank  
----------- ------------ -------- ----  
1           TPE            59       1  
2           TPE            59       1  
3           TPE            34       3  
4           TPE            21       4  
5           TPE            11       5  
2           USA            37       1  
4           USA            35       2  
3           USA            32       3  
5           USA            20       4  
1           USA            16       5

不过,MySQL 一直在进步成长,功能越来越完善、方便,现在如果只要做普通需求的服务,用起来已经感觉不到与其他两家要收费的资料库有什麽差别了,所以本系列文就以成本还有学习门槛当考量,选用 MySQL 啦。

最後聊聊 MySQL 与 MariaDB。MariaDB 是另外一个 MySQL 的复刻(folk),2010 年昇阳被甲骨文收购之後,部分 MySQL 的开发者担心 MySQL 的 GPL 授权可能会因为甲骨文公司政策而受影响,於是以 MySQL 的原始码建立了另外一个 folk,取名为 MariaDB,并确保这个 folk 会一直在 GPL 授权之下。

有趣的是,MySQL 与 MariaDB真的是姊妹,他们的命名都是由开发团队中的 Michael Widenius 的女儿名字命名。My 是 Michael Widenius 的大女儿,Maria 则是 My 的妹妹。

明天,我们就要来介绍如何在本机安装 MySQL 与操作它的 GUI 软件。


<<:  第16天 - PHP 简易登入(3)_判断身分

>>:  我想用 AJAX,但是...

D-13-授权 jwt ? authentication ? authorization

无状态的HttpRequest怎麽做身分验证 直到昨天将网页的基础知识介绍完了,所以今天开始会介绍一...

鼠年全马铁人挑战 WEEK 35: 负载性能测试 - Gatling (下)

           Photo on gatling.io 前言 上周小弟简单的介绍了一下 Ga...

30-22 之 Remote Facade

接下来这篇文章我们将要谈谈《 Patterns of Enterprise Application ...

DAY14 - 第三个小范例 : 虚拟货币爬虫

前言 今天是铁人赛的第十四天,这次要来写一下虚拟货币的爬虫 对象是meme虚拟货币界的霸主:狗狗币 ...

[day6]API串接-Message内文加密

在串接API时,遇到最大的坎就是Message内文加密了, 就让我们来试看看罗~ Message内文...