这是针对 MySQL 数据库的 Ruby 编程教程。 它涵盖了使用 Ruby 进行 MySQL 编程的基础。 它使用mysql
模块。 这些示例是在 Ubuntu Linux 上创建和测试的。
如果您需要重新了解 Ruby 语言,可以在极客教程上找到完整的Ruby 教程。
MySQL & Ruby
_MySQL
是领先的开源数据库管理系统。 它是一个多用户,多线程的数据库管理系统。 MySQL 在网络上特别流行。 它是由 Linux,Apache,MySQL 和 PHP 组成的非常流行的LAMP平台的一部分。 目前,MySQL 由 Oracle 拥有。 MySQL 数据库在最重要的 OS 平台上可用。Ruby_
是一种动态的,反射性的,通用的面向对象的编程语言。 最近,它在 Web 编程中变得非常流行,这主要归功于 Ruby on Rails 框架的成功。
mysql 模块
mysql
模块是 MySQL 服务器的 Ruby 接口。 它为 Ruby 程序提供的功能与 MySQL C API 为 C 程序提供的功能相同。
在这里,我们为 MySQL 数据库安装 Ruby 模块。
开始之前
我们将创建一个新的数据库用户和一个新的数据库。 为此,我们使用mysql
客户端程序。
我们使用 root 帐户连接到 MySQL 服务器。 我们用SHOW DATABASES
语句显示所有可用的数据库。
我们创建一个新的mydb
数据库。 在整个教程中,我们将使用此数据库。
我们创建一个新的数据库用户。 我们授予该用户mydb
数据库所有表的所有特权。
MySQL 服务器版本
在第一个示例中,我们将获取 MySQL 数据库的版本。
在此脚本中,我们获取服务器版本。 我们用两种不同的方式来做。
我们导入mysql
模块。 该模块具有用于 MySQL 数据库的类和方法。
我们创建连接对象。 参数包括主机名,用户名和密码。 在我们的情况下,主机名是 localhost,例如 我们的电脑。
我们创建的 Mysql 对象具有get_server_info
方法。 它返回安装的 MySQL 服务器的版本。
获取版本的另一种方法是执行SELECT VERSION()
SQL 语句。 我们获取数据。 由于只检索一条记录,因此我们称为fetch_row
方法。
我们检查错误。 这很重要,因为使用数据库容易出错。
最后,我们释放资源。
输出可能类似于上面。
列出数据库
MySQL Ruby 模块具有list_dbs
方法,该方法返回可用的数据库。
在此脚本中,我们在 MySQL 服务器上打印所有可用的数据库。
list_dbs
方法返回可用数据库名称的数组。 使用数组的 each 方法,我们将数组的每个项目打印到控制台。
在我的系统上,我创建了上述数据库。
创建并填充表
我们创建一个表,并用一些数据填充它。
我们创建一个 Writers 表,并向其中添加五个作者。
要执行 SQL 语句,我们使用query
方法。 该 SQL 语句创建一个称为 Writers 的新数据库表。 它有两列。 ID 和名称。
我们使用INSERT
语句在表中插入作者。 在这里,我们添加两行。
执行脚本后,我们使用mysql
客户端工具从 Writers 表中选择所有数据。
检索数据
现在我们已经将一些数据插入数据库中,我们可以将其取回。
在此示例中,我们从 Writers 表中检索所有数据。
构造函数的最后一个参数是我们要连接的数据库名称。
该 SQL 语句从Writers
表中选择所有数据。
我们使用结果集对象的num_rows
方法获得结果集中的行数。
在这里,我们使用fetch_row
方法获取每一行。 它返回一行作为字段数组。 默认情况下,打印时这些字段用换行分隔。 使用join
方法,我们将每一行打印在一行上。 字段由一个空格分隔。
接下来,我们介绍另一种从表中检索数据的方法。
我们从Writers
表中打印所有数据。 这次我们使用结果集的每种方法遍历数据。
我们使用每种方法遍历结果集。
这是示例的输出。
我们可以以 Ruby 哈希的形式遍历数据。
在示例中,我们使用each_hash
迭代器。 可以通过列名称检索结果集中的记录。
我们使用each_hash
方法查看结果集。 返回的每一行都是一个 Ruby 哈希; 键值对的集合。 键是列名。
示例的输出。
多个语句
MySQL 支持多条语句执行。 必须通过特殊选项启用它。
在此示例中,我们在一个查询中具有三个SELECT
语句。
首先,我们需要使用Mysql::OPTION_MULTI_STATEMENTS_ON
启用多条语句处理。
在这里,我们定义了三个SELECT
语句。 它们之间用分号分隔。
查询方法返回第一个结果集。 我们从该结果集中获取一行。
我们将获得其他结果集,直到没有更多要处理的语句为止。
运行示例。
元数据
元数据是有关数据库中数据的信息。 MySQL 系统中的元数据包含有关存储数据的表和列的信息。 受 SQL 语句影响的行数是元数据。 结果集中返回的行数和列数也属于元数据。
在此脚本中,我们从 SQL 查询中找出行数和列数。
该 SQL 语句返回三行。 每行有两列。
这两行返回结果集中的列数和行数。 请注意,此处的字段是列的同义词。 返回的数据是元数据。
在这里,我们从结果集中返回一行。 这是存储在我们数据库表中的原始数据。
对于INSERT
,DELETE
和UPDATE
语句,有一种称为rows_affected
的方法。 此方法返回受这三个语句影响的行数。
在我们的示例中,我们从Writers
表中删除了前三行。
一个 SQL 语句,该语句删除Writers
表的前三行。
在这里,我们得到受上述 SQL 语句影响的行数。 该数字属于元数据。
我们执行受影响的.rb 脚本,并检查Writers
表中的更改。 三行已被删除。
在下一个示例中,我们将检查有关字段的元数据。
我们从数据库中获得一条记录。 我们得到字段的表名,列名,长度和类型。
该查询返回一行。 它有两列。
使用fetch_field_direct
方法,我们得到了一条特定的记录。 更准确地说,记录来自第一行第二列的交集。
我们使用字段对象的属性读取器获取元数据。
这是示例的输出。
在与元数据有关的最后一个示例中,我们将打印表中的所有行及其列名。
我们将Writers
表的内容打印到控制台。 现在,我们也包括列的名称。
第一步,我们获取列名。 它们使用标准的 Ruby 字符串格式化功能进行打印。
现在,将获取数据并将其打印到控制台。 我们也进行一些格式化。
脚本的输出。
预备语句
现在,我们将以预备语句来关注自己。 在编写预备语句时,我们使用占位符,而不是直接将值写入语句中。 预准备的语句可提高安全性和性能。
在上面的示例中,我们将新行插入Writers
表。 我们使用预备语句。
prepare
方法用于创建预备语句。 ?
字符是一个占位符。 稍后,我们将一个值绑定到该占位符。
我们将名称变量中的值绑定到占位符,并执行预备语句。
预备语句已关闭。
脚本成功运行后,我们在 Writers 表中看到一个新作者。
写图像
有些人喜欢将其图像放入数据库中,有些人则希望将其保留在文件系统中以供其应用使用。 当我们处理大量图像时,会出现技术难题。 图像是二进制数据。 MySQL 数据库具有一种特殊的数据类型来存储称为BLOB
(二进制大对象)的二进制数据。
对于此示例,我们创建一个名为Images
的新表。
在上面的脚本中,我们读取 JPG 图像并将其插入到Images
表中。
我们打开并阅读图像。 read
方法以字符串形式返回数据。
将该字符串数据放入预备语句中。 在这样做之前,使用 Ruby 字符串对象的unpack
方法对其进行解码。 解码是必需的,因为图像对象具有许多无法正常处理的特殊字符。
读取图像
在前面的示例中,我们已将图像插入数据库表中。 现在,我们将从表中读取图像。
我们从图片表中读取了一张图片。
我们从表中选择一条记录。
我们创建一个可写的二进制文件。
我们从先前的 SQL 语句中获取数据并将其写入文件。 fetch_row
方法返回一个数组对象。 在将数据写入文件之前,使用数组的pack
方法将其放回原始格式。 对于解码和反转这两种操作,我们使用相同的指令'H*'
。 它代表十六进制字符串。
现在我们在当前目录中应该有一个名为woman2.jpg
的映像。 我们可以检查它是否与我们插入表中的图像相同。
事务支持
transaction
是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库,也可以全部回滚。
默认情况下,MySQL 在自动提交模式下运行。 在这种模式下,对表的所有更改将立即生效。 为了防止这种情况,我们必须关闭自动提交模式。 禁用自动提交后,对事务感知表的更改不会立即永久更改。 要存储更改,我们必须调用COMMIT
语句或ROLLBACK
还原它们。 Ruby MySQL 为这些 SQL 语句commit
和rollback
提供了便捷的方法。
MySQL 数据库具有不同类型的存储引擎。 最常见的是 MyISAM 和 InnoDB 引擎。 在数据安全性和数据库速度之间需要权衡。 MyISAM 表的处理速度更快,并且不支持事务。 commit
和rollback
方法未实现。 他们什么都不做。 另一方面,InnoDB 表可以更安全地防止数据丢失。 他们支持事务。 它们处理较慢。
Writers
表的引擎是 InnoDB,它支持事务。
在此脚本中,我们尝试更新三行。
自动提交模式被禁用。
我们执行三个UPDATE
语句。 最后一个不正确。 第二个参数丢失。
如果一切正常,则更改将提交到表中。
如果发生错误,则会回滚更改。
运行脚本会出现错误。 但是,该事务已回滚,并且前两行未更改。
您可能也对 MySQL Python 教程, MySQL Visual Basic 教程或 MySQL PHP 教程,MySQL Java 教程,MySQL Ruby 教程,MySQL C# 教程感兴趣。