MySQL 是咱们作为后盾开发中十分重要的软件。前段时间作为面试官,面试了几位后盾开发的候选人——MySQL 的常识由浅入深一路问上来,并没有人可能残缺地答复进去。
于是我突发灵感,决定整顿一下 MySQL 的利用中须要理解的常识,做一个概要性的介绍,供后盾开发的读者参阅。
首先是第一篇:MySQL 简介和操作
本篇内容十分根底,可能很多读者都曾经理解了,因而能够间接跳过
SQL 和 MySQL 是什么?
SQL
SQL 的全称是 “Structured Query Language”,即“结构化查询语言”,简称的读音在中文程序员圈子中常常被读作 “[sə: kwəl]
“,不过实际上,应该读作 “[si: kwəl]
“。
SQL 定义了一系列数据查问的语法、函数定义等,形成了一套残缺的数据库操作交互语法。SQL 在 1986 年成为 ANSI 的一项规范,并于次年成为 ISO 的规范。在这之后,开始呈现大量基于 SQL 语法实现的数据库。
目前支流的几大 SQL 数据库有:
- MySQL、MariadDB、Percona Server: 最经典、应用最宽泛的开源分布式数据库
- PostgreSQL(读作 “
post-gress-Q-L
“,中文开发者喜爱简称PG
): 集体认为是第二驰名的开源数据库,已经在地理信息系统数据存储中独领风骚 - Oracle Database: 甲骨文公司推出的关系型数据库,在晚期政府我的项目中简直是惟一指定洽购的数据库软件。集体倡议:互联网从业者就不必学了,当初至多国内都在去 IOE 化,而这其中的 O 指的就是 Oracle。
- Windows SQL Server: 一看到 Windows 打头的,后盾开发同学也能够不必学了。
Wikipedia 说得很夸大:尽管有这一规范的存在,但大部分的 SQL 代码在不同的数据库系统中并不具备齐全的跨平台性。应该说规范的 SQL 标准和各家 SQL 数据库的实现均不完全一致,因而如果应用到了某一数据库略微进阶一点的 SQL,就无奈迁徙到另一个数据库上了。这一点须要注意。
MySQL
MySQL 最早是在 1995 年由瑞典 MySQL AB 公司开发的开源的关系型数据库系统。当初 MySQL 及其分支者 MariaDB 曾经是互联网中应用最为宽泛的分布式关系型数据库系统,没有之一。
说到 MySQL 就不得不讲 MariaDB: 2008 年 Sun 收买了 MySQL AB;2009 年 Sun 又被 Oracle 收买。是的,就是前文我说“不必学了”的 Oracle。目前 Oracle 公司仍然保护着 MySQL 社区版。然而 Oracle 毕竟是一家逐利的公司,出于对 MySQL 将来的担心,MySQL 的创始人将 MySQL fork 了进去,这就是 MariaDB。
须要留神的是,MariaDB 和 MySQL 分家的版本点是 MySQL 5.6,在这个版本之前,两者基本上是兼容的。然而从 MySQL 5.7 开始,MariaDB 就不再齐全追随 MySQL 的脚步了。因而 MySQL 5.7 和 MariaDB 的性能开始有了一致。比方 MySQL 5.7 开始反对 JSON,而 MariaDB 并没有反对。
MySQL 简要概念
database 和 table
概念 | 阐明 |
---|---|
database | 在 MySQL 中,数据存储的最高单位是 database ,一个 database 上面由若干个 table 组成。database 也是对数据库账户进行权限管制的罕用维度。 |
table | 一个 table 是一组雷同类型的数据的汇合。在一个 table 中须要定义数据的命名、格局,以及数据的索引等信息。本文临时不解释索引,后续文章再阐明。 |
line | “行”代表的是一个 table 中的一条条目 |
column | “列”个别指的是一个 table 中的一个数据字段 |
咱们以一个 struct 来类比:
typedef struct _person {char name[64];
int8_t sex;
} person;
那么 table 就是 char *person[]
,line 就是 *person
。
数据类型
所有的 MySQL 都反对以下数据类型:
名称 | 类型定义 | 备注 |
---|---|---|
TINYINT(n) |
单字节整型 | n 示意具体展现进去的数字精度。括号中的数字不理论影响数据的存储,只影响展现。对于所有数字类型都是这样的 |
SMALLINT(n) |
双字节整型 | 即“字” |
INT(n) |
四字节整型 | |
BIGINT(n) |
八字节整型 | |
BOOL(n) |
布尔型 | 在 MySQL 中实际上是应用 SMALLINT 来实现的 |
CHAR(n) |
定长的字符串类型 | n 示意长度。理论占用存储的大小由编码格局决定 |
VARCHAR(n) |
变长的字符串类型 | n 示意最长长度。理论占用存储的大小由编码格局决定 |
TEXT |
变长的字符串类型 | TEXT 和 VARCHAR(65535) 很相似,然而实际上是无奈达到 65535 的。如果读者有趣味,能够进一步浏览相干材料 |
FLOAT(m,d) |
四字节浮点型 | 其中 m 示意有效位数,d 示意小数点后的位数。括号中的数字不理论影响数据的存储,只影响展现 |
DOUBLE(m,d) |
八字节浮点数 | |
DECIMAL(m,b) |
定点数 | 在 MySQL 中,定点数实际上是应用 string 的模式来存储的 |
所有的整型数据类型默认为有符号类型,均能够在前面加上 UNSIGNED
修饰符变成无符号类型。
MySQL 操作
MySQL 的罕用操作我在之前的一篇文章中作为笔记记了一下,读者能够参阅:MySQL/MariaDB 语句速查笔记
参考资料
- SQL – 维基百科
- MySQL – 维基百科
- MySQL FLOAT、DOUBLE、DECIMAL(小数类型)
- MySQL 技术底细 – InnoDB 存储引擎(第 2 版)
本文章采纳 常识共享署名 - 非商业性应用 - 雷同形式共享 4.0 国内许可协定 进行许可。
文章最早公布于云 + 社区,也是自己的博客。
原作者:amc,欢送转载,但请注明出处。
原文题目:面试官教你 MySQL —— 简介和性能
公布日期:2020-11-03
原文链接:https://segmentfault.com/a/1190000037714746。