最新MySQL新手教程,2021年9月25日更新,MySQL 是一种开源关系数据库管理系统,在现代科技领域的大型公司中都有使用。自创建以来,MySQL 已将自己确立为关系数据库创建和操作的行业标准。
要了解 MySQL 数据库,我们必须分解它所属的工具的底层分支:数据库管理系统和 SQL 表。
之后,我们将转到如何使用标准 SQL 构建、填充和操作我们自己的 MySQL 程序的示例!
今天,我们将讨论:

数据库管理系统概述
从广义上讲,数据库管理系统是开发人员用来创建、维护和删除多个数据库的工具的一个分支。通过简化数据库创建过程,这些系统使开发人员能够以一种快速且用户友好的方式来创建数据库、通过表指定数据子集以及在每个表中操作数据。
它们还带来许多生活质量的好处,例如:
- 自动索引,在添加新项目和框架后更新以同时处理多个表,
- 参照完整性保证,如果相同的数据在不同的表中多次出现,则确保所有索引都被记录和链接,
- 能够组合来自各种单独表的数据以完成单个用户请求。
SQL 表介绍
理解 MySQL 的另一个重要方面是熟悉结构查询语言表(SQL 表),它是任何 MySQL 程序的基础组件。
SQL 表是一种将数据存储在数字表中的方法。这些被组织成严格定义的列,确定该列中所有数据的类型和大小。这些列的标准是任何数据库模式的重要组成部分 。
MySQL 和当今可用的许多其他关系数据库管理系统使用的这种 SQL 表系统。
SQL 表数据库是关系数据库的一个例子。表列根据它们的共享属性和与其他数据点的关系来组织数据。
mysql 分层
与其他关系数据库管理系统 (RDBMS) 一样,MySQL 的每个方面都根据关系分为多个层。
每一层变得越来越具体,允许开发人员在程序的其余部分中微调每个子集的可访问性。
mysql 服务器层
MySQL的核心是MySQL服务器。服务器可以作为一个单独的库访问,可以嵌入到您的应用程序中以处理数据库命令。
MySQL 程序的所有方面都以某种方式与 MySQL 服务器交互。
数据库(database)
这是我们层中最高和最广泛的层,充当其下所有层的容器。它是一组结构化的数据,没有它,MySQL 将无法运行。多个数据库可以存在于任何给定的程序中,允许开发人员在同一程序中包含广泛分离的表子集。
例如,一个家庭可以为每个成员创建一个单独的 MySQL 程序,其中包含单独的数据库,组织所有后来的数据表以与他们定义的家庭成员相关。
表(tables)
我们的第二大层,表是相关数据子集的存储位置。一个数据库下可以存在多个表,每个用户定义的类别有一个表。查询必须指定它们在哪个表中工作,以确保意外交叉或延长运行时间。这也有助于保护隐私,因为有时我们可能想要打印我们的一个表,但为当前操作隐藏另一个。
继续我们的例子,我们家庭程序中的每个家庭成员数据库可能有一个表用于请求生日礼物,TABLE GIFTS
,另一个表用于私人密码,TABLE PASSWORDS
。
列(columns)
列进一步分解表,因为每个定义的列都包含一个数据类型,该列中的所有值都必须是该数据类型。表中的每一列都可以是不同的数据类型,并进一步将数据拆分为上下文子集。列对于指定表中所有行应具有的信息(即使它只是NULL
)以及将该行的值与所有其他行分开存储特别有用。
例如,我们之前的表格GIFTS
可能有三列:一列列出产品名称,ProductName
;列出产品销售商的一份ProductSeller
;另一个列出价格,Price
。这些列中的前两列将包含字符串值,而后者将包含数字值。
行(row)
行是最小的层,其行为类似于列;列显示类型内的关系,而行则根据不太明确的方式进行分组。表中的每一行都有一个指向它的特定键。
最好通过一个例子来理解这一点。在 中 GIFTS
,我们可以插入一行,该行已经确定了每一列的值:“Gitwa”代表 ProductName
,“Znlive Lamp.”。对于 ProductSeller
,“15.50”对于 Price
。如果这些不在同一行上,用户将无法看到这三个变量中的任何一个之间的联系,因为它们是不同的值和不同的类型。但是,由于它们列在同一行索引下,因此很容易看出所有这些值都属于同一个对象。
查询(query)
在 MySQL 中,查询是从表中检索数据的任何命令。这通常通过SELECT
命令完成,并且是用于表操作的最常见的命令类型。
mysql 优点
作为一个关系型数据库管理系统,MySQL 具有数据库管理系统和内置 SQL 表的所有上述优点,但也在此基础上进行了创新,具有一些独特的功能。以下是 MySQL 最大优势的细分:

mysql 中的常见数据类型
在进入代码示例之前,让我们先看看 MySQL 基本数据类型的语法、每种类型的独特之处以及每种类型的使用布局。
字符串类型
CHAR(x)
我们的第一个字符串类型是CHAR
,它具有确定的字符要求 x,在定义时指定。如果字符串小于指定的长度,MySQL 将用多个空格填充字符串,直到达到字符限制。这是内存效率最高的字符串类型,但鉴于字符要求的严格性,可能会受到限制。
例如:
如果列 ProductName
被创建为类型,CHAR(10)
那么“Lam”的存储值将在“plu”这个词之后包含七个空格。
VARCHAR(x)
这种字符串类型非常相似,CHAR
除了它可以允许不同的字符长度并且不填充空格。但是,该字符串包含的字符数不能超过定义时指定的数量 x;如果一个字符串确实超过了字符限制,它会被截断以适当地适应。
VARCHAR
使用比等长 CHAR
类型略多的内存,但是,差异非常小(5 个字节,而相同的四字符字符串为 4 个字节),除非在大型项目中,否则几乎不会被注意到。因此,它 VARCHAR
被更广泛地使用,因为它以更清晰的形式存储数据而没有明显的缺点。
数字类型
整型(Integer)
对于熟悉其他编程语言的人来说,INTEGER
类型会很熟悉。此数据类型接受 -2147483648 和 2147483647 之间的整数。
添加到该SQL标准,MySQL也允许的亚型 TINYINT
,MEDIUMINT
和 BIGINT
,其中每个具有不同的最小和最大值,以及不同的存储要求:

从表中可以看出,这些类型的整数中的每一种都有不同的存储要求。为了最大限度地提高程序的效率,最好对任何给定的列使用最小的适用整数类型。
Numeric(M,D)
该 NUMERIC
类型以十进制形式存储精确的数字数据值。当定义了这种类型的列时,可以指定可能的最大有效数字数 M 和 D,要保留的小数点右侧的位数。这些会影响可能数字的范围,与 一样 NUMERIC(4,2)
,范围是 -9999.99 到 9999.99。它还允许如果未指定,则 M 的默认值是 10,D 的默认值是 30。
与 一样 INTEGER
,一般来说,最好将范围保持在适合情况的小范围内。
例如,NUMERIC(4,4)
列 Price
将 15.50 存储为“15.5000”,因为有四个有效数字,小数点右侧有两个。如果 Price
是 NUMERIC(5,4)
,则 15.50 将存储为“015.5000”。
特殊类型
特殊类型是指形式上既不是字符串也不是数字的数据,这使得该类别的范围很广。虽然 MySQL 中有几十种特殊数据类型,但我们将只介绍一些最简单和最容易使用的数据类型,DATE
用于存储日期和ENUM
仅选择有效响应的数据。
DATE and DATETIME
该DATE
类型以“yyyy-mm-dd”形式存储日期信息,从“1000-01-01”到“9999-12-31”之间的年份。
对于更精确的时间戳,我们还可以使用 ,DATETIME
它包括该DATE
类型的所有信息,但还包括 hh:mm:ss 形式的时间戳。该时间随后会自动转换为 UTC 进行存储,并在检索时转换回本地时区。
这些形式的优点是它们可以按日期以及日期的选择方面(例如月或年)正确排序,而无需考虑日期的其他不需要的方面。
ENUM(a, b, c)
该 ENUM
类型接受从一组在列创建定义允许的答案中选择的字符串值,这里如图所示a
,b
和c
。
如果输入了无效值,MySQL 会存储一个空白字符串作为特殊错误情况。这在创建必须填写且仅具有某些可接受选项的字段时最常用。
例如,如果我们创建另一个表 ,MUGS
来存储我们最喜欢的 Mug Co. 杯子的信息,我们可以有一列从三个可用选项中指定杯子的颜色:
ENUM('Red', 'Blue', 'Yellow')
在这里,我们的有效选择是“红色”、“蓝色”和“黄色”;如果一行插入此列的值作为“紫色”MySQL,将改为保存一个空白字符串。
示例:存储工单信息
到目前为止,我们一直在研究一个更个人化的 MySQL 问题,该问题用作书面列表的集合。现在,我们将转到一个示例,说明如何构建标准 SQL MySQL 程序来处理我们名为 znlive.com 的小型网站管理公司的工单信息,从数据库构建到数据插入和访问。
为了在本练习之外进一步磨练您的 MySQL 技能,你可以先学习一些 SQL 入门指南,适合那些刚开始您的 MySQL 之旅并希望精通精通的人!
创建数据库、表和列
首先,我们创建我们的数据库 CustomerService
,我们将在其中存储与该部门相关的所有表。然后我们使用 USE
来选择 CustomerService
作为我们后面命令的目标。

由于我们的业务规模小,而且 MySQL 的强大,理论上我们可以为网站公司的每个部门都拥有数据库,但是,我们将重点关注 CustomerService
这个练习。
一旦我们有了客户服务分支的数据库,我们就创建一个表来存储我们收到的所有支持票,称为 Tickets
。

在此表中,我们定义了每张工单将包含的五列数据:
Username
它将客户的帐户用户名存储为字符串(最多 25 个字符)。Email
它将客户的电子邮件存储为字符串(最多 50 个字符)以供以后回复。DateRecieved
跟踪程序收到每张票的时间(以 SQL DATE 形式,YYYY-MM-DD)。Device
请注意在我们的设备介质中,“移动”或“计算机”中遇到了问题。Description
存储客户的书面问题报告。
为了验证这些已经创建,我们发出SHOW TABLES
命令。

如果我们想了解更多关于我们的列的信息,我们使用 DESC TICKETS
.

在这里,我们可以看到每列的名称和类型,带有Field
和Type
部分。我们还查看列是否可以通过Null
节接受 NULL ,如果列当前被索引Key
,每个列的默认值Default
和任何特殊信息,例如列是否是使用Auto-Increment
选项创建的,带有Extra
节。
插入行
现在我们已经创建了我们的表并定义了列,让我们用一些数据填充它。为此,我们将使用该INSERT
命令添加一行并为五列中的每一列指定其值。

在这里,我们为用户“PURPLEPANDA31”的工单添加了一行,首先列出将要填充的列,然后为该行上的每个列字段定义值。
我们还可以INSERT
通过在该VALUES
部分中包含另一行,使用该命令添加多行。

该INSERT
命令可用于同时添加最多 65535 ÷ 列数的行数,在本示例中超过 13,000!这意味着对于大多数应用程序,只需INSERT
执行一次即可填充整个表。
查询值
现在我们已经填充了我们的表,我们需要一种方法来读取或查询其中的值。为此,我们使用SELECT
命令,它可以查询整个表,选择表中的列,或者只选择在指定列中具有某些值的行。
对于我们的第一个查询,我们将打印整个表,指定我们希望*
在列字段中打印所有列SELECT
。

我们也可以只查询表的某些列,例如,如果我们只关心这些问题中的每一个的日期,我们可以打印一个只有 Username
和 DateRecieved
列的表。

最后,如果我们只想打印在我们网站的计算机版本上发生的票,我们可以WHERE
结合使用修饰符SELECT
来同时搜索和打印我们想要的行!在这里,我们只对计算机上的问题票感兴趣,因此我们指定我们的Device
列必须等于要查询的“计算机”。

结束我们的计划
现在我们已经了解了 MySQL 程序中创建、插入和选择的基础知识,剩下的就是结束程序并清理您的工作区,以便更大更好的 MySQL 项目出现!

进一步实践
如果您想要更多练习,请尝试在下面的终端中创建您自己的 MySQL 程序,使用上面的示例作为指导。
迅速的
为 Websites Incorporated 的另一个分支创建一个数据库DatabaseDesign
。在此数据库中,创建一个两列表EmployeeOps
,以存储有关每个员工在哪个操作系统上工作的信息。第一列将存储员工的姓名,第二列将存储他们使用的是“macOS”、“Windows”还是“Linux”。
插入行,每个员工一个,每个操作系统至少尝试一个员工。最后,查询员工使用“Linux”的任何行的所有列。
接下来要学什么
您可以看到 MySQL 在创建高度结构化的数据集合方面是多么简单和有效。由于它的易用性、适用性和在整个现代技术世界中的流行,难怪 MySQL 已经并将继续成为必不可少的工具。
【江湖人士】(jhrs.com)原创文章,作者:江小编,如若转载,请注明出处:https://jhrs.com/2018/24299.html
扫码加入电报群,让你获得国外网赚一手信息。
文章标题:最新MySQL新手教程(2025版)