共计 2813 个字符,预计需要花费 8 分钟才能阅读完成。
什么是mysql,它是怎么存储数据的?
MySQL 是一个开源关系数据库管理系统。 与其他关系数据库一样,MySQL 将数据存储在由行和列组成的表中。 用户可以使用结构化查询语言(通常称为 SQL)定义、操作、控制和查询数据。 MySQL 是一个灵活而强大的程序,是世界上最流行的开源数据库系统。
通常,在使用关系数据库时,您会发出单独的 结构化查询语言 (SQL) 查询来检索或操作数据,例如 SELECT
, INSERT
, UPDATE
或者 DELETE
,直接在您的应用程序代码中。 这些语句直接作用于并操作底层数据库表。 如果在访问同一数据库的多个应用程序中使用相同的语句或语句组,则它们通常会在各个应用程序中重复。
MySQL 与许多其他关系数据库管理系统类似,支持使用存储过程。 存储过程有助于将一个或多个 SQL 语句分组以便在通用名称下重用,从而将通用业务逻辑封装在数据库本身内。 可以从访问数据库的应用程序调用这样的过程,以便以一致的方式检索或操作数据。
使用存储过程,您可以为要在多个应用程序中使用的常见任务创建可重用例程,提供数据验证,或通过限制数据库用户直接访问基础表和发出任意查询来提供额外的数据访问安全层。
在本教程中,您将了解什么是存储过程以及如何创建返回数据并使用输入和输出参数的基本存储过程。
先决条件
要遵循本指南,您需要一台运行基于 SQL 的关系数据库管理系统 (RDBMS) 的计算机。 本指南中的说明和示例已使用以下环境进行验证:
- 运行 Ubuntu 20.04 的服务器,具有具有管理权限的非 root 用户和配置了 UFW 的防火墙,如我们的 Ubuntu 20.04 初始服务器设置指南 中所述。
- MySQL 在服务器上安装并受到保护,如 如何在 Ubuntu 20.04 上安装 MySQL 中所述。 本指南已通过非 root MySQL 用户验证,并使用 步骤 3 中描述的过程创建。
- 基本熟悉执行
SELECT
查询从数据库检索数据,如 如何在 SQL 中从表中选择行指南 中所述。
注意: 请注意,许多 RDBMS 使用自己独特的 SQL 实现,并且存储过程语法不是官方 SQL 标准的一部分。 尽管本教程中概述的命令可能适用于其他 RDBMS,但存储过程是特定于数据库的,因此如果您在 MySQL 以外的系统上测试它们,则确切的语法或输出可能会有所不同。
您还需要一个空数据库,您可以在其中创建演示存储过程使用的表。 我们鼓励您阅读以下 “连接到 MySQL 并设置示例数据库” 部分,了解有关连接到 MySQL 服务器和创建本指南示例中使用的测试数据库的详细信息。
连接到 MySQL 并设置示例数据库
如果您的 SQL 数据库系统在远程服务器上运行,请从本地计算机通过 SSH 连接到您的服务器:
然后打开MySQL服务器提示符,替换 sammy
与您的 MySQL 用户帐户的名称:
创建一个名为 procedures
:
如果数据库创建成功,您将收到如下输出:
Query OK, 1 row affected (0.01 sec)
要选择 procedures
数据库,运行以下命令 USE
陈述:
您将收到以下输出:
Database changed
选择数据库后,您可以在其中创建示例表。 桌子 cars
将包含数据库中有关汽车的简化数据。 它将包含以下列:
make
:此列保存每辆拥有的汽车的品牌,使用varchar
数据类型最多为100
人物。model
:该列保存汽车型号名称,用varchar
数据类型最多为100
人物。year
:此列存储汽车的制造年份int
保存数值的数据类型。value
:此列使用以下方式存储汽车的价值decimal
数据类型最多为10
数字和2
小数点后的数字。
使用以下命令创建示例表:
如果打印以下输出,则表已创建:
Query OK, 0 rows affected (0.00 sec)
接下来,加载 cars
通过运行以下命令来获取包含一些示例数据的表 INSERT INTO
手术:
这 INSERT INTO
该行动将增加十辆样品跑车,其中五辆保时捷和五辆法拉利车型。 以下输出表明所有五行均已添加:
Query OK, 10 rows affected (0.00 sec)
Records: 10 Duplicates: 0 Warnings: 0
这样,您就可以按照本指南的其余部分进行操作并开始在 SQL 中使用存储过程。
存储过程简介
MySQL 和许多其他关系数据库系统中的存储过程是命名对象,其中包含一个或多个指令,这些指令在调用时由数据库按顺序执行。 在最基本的示例中,存储过程可以将公共语句保存在可重用例程下,例如使用常用过滤器从数据库中检索数据。 例如,您可以创建一个存储过程来检索在过去给定月份内下过订单的在线商店客户。 在最复杂的场景中,存储过程可以代表广泛的程序,描述健壮应用程序的复杂业务逻辑。
存储过程中的指令集可以包括常见的 SQL 语句,例如 SELECT
或者 INSERT
查询,返回或操作数据。 此外,存储过程可以利用:
- 传递给存储过程或通过它返回的参数。
- 声明的变量直接在过程代码中处理检索到的数据。
- 条件语句,允许根据某些条件执行部分存储过程代码,例如
IF
或者CASE
指示。 - 循环,例如
WHILE
,LOOP
, 和REPEAT
,允许多次执行部分代码,例如针对检索到的数据集中的每一行。 - 错误处理指令,例如将错误消息返回给访问该过程的数据库用户。
- 调用数据库中的其他存储过程。