23.md 7.0 KB
Newer Older
W
wizardforcel 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# MySQL & Perl DBI

> 原文: [http://zetcode.com/db/mysqlperl/dbi/](http://zetcode.com/db/mysqlperl/dbi/)

在 MySQL Perl 教程的第一章中,我们将介绍 Perl DBI 模块和 MySQL 数据库。 我们将提供一些定义并显示如何安装必要的元素。

## 先决条件

要使用本教程,我们必须安装 Perl 语言,MySQL 数据库,Perl DBI 和`DBD::MySQL`模块。 DBI 是标准的 Perl 数据库接口。 每个数据库都有其驱动程序。 在我们的例子中,`DBD::mysql`是 MySQL 数据库的驱动程序。

```
$ sudo perl -MCPAN -e shell
cpan> install DBI
cpan[2]> install DBD::mysql

```

上面的命令显示了如何安装 Perl DBI 和`DBD::mysql`模块。

## MySQL 数据库

W
wizardforcel 已提交
22
_MySQL是领先的开源数据库管理系统。 它是一个多用户,多线程的数据库管理系统。 MySQL 在网络上特别流行。 它是非常流行的LAMP_ 平台的一部分,该平台由 Linux,Apache,MySQL 和 PHP 组成。 目前,MySQL 由 Oracle 拥有。 MySQL 数据库在最重要的 OS 平台上可用。 它运行在 BSD UNIX,LINUX,窗,S 或 Mac OS。 维基百科和 YouTube 使用 MySQL。 这些站点每天管理数百万个查询。 MySQL 有两个版本:MySQL 服务器系统和 MySQL 嵌入式系统。
W
wizardforcel 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

MySQL 随附`mysql`命令行实用程序。 它可用于对数据库发出 SQL 命令。 现在,我们将使用`mysql`命令行工具创建一个新数据库。

```
$ sudo apt-get install mysql-server

```

此命令将安装 MySQL 服务器和其他各种软件包。 在安装软件包时,提示我们输入 MySQL 根帐户的密码。 要从源代码安装 MySQL,请查看 [MySQL 安装](http://zetcode.com/databases/mysqltutorial/installation/)页面。

```
$ service mysql status
mysql start/running, process 1238

```

我们检查 MySQL 服务器是否正在运行。 如果没有,我们需要启动服务器。

```
$ sudo service mysql start

```

如果我们已经从软件包中安装了 MySQL 数据库,则上述命令是启动 MySQL 的常用方法。

```
$ sudo -b /usr/local/mysql/bin/mysqld_safe

```

上面的命令使用 MySQL 服务器启动脚本启动 MySQL 服务器。 我们启动 MySQL 服务器的方式可能有所不同。 这取决于我们是否从源代码或软件包安装了 MySQL,也取决于 Linux 发行版。 有关更多信息,请查阅 [MySQL 的第一步](http://zetcode.com/databases/mysqltutorial/firststeps/)或您的 Linux 发行版信息。

接下来,我们将创建一个新的数据库用户和一个新的数据库。 我们使用`mysql`客户端。

```
$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 5.0.67-0ubuntu6 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)

```

我们使用 _mysql 监视器 _ 客户端应用程序连接到服务器。 我们使用根帐户连接到数据库。 我们用`SHOW DATABASES`语句显示所有可用的数据库。

```
mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0.02 sec)

```

我们创建一个新的`mydb`数据库。 在整个教程中,我们将使用此数据库。

```
mysql> CREATE USER user12@localhost IDENTIFIED BY '34klq*';
Query OK, 0 rows affected (0.00 sec)

mysql> USE mydb;
Database changed

mysql> GRANT ALL ON mydb.* to user12@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye

```

我们创建一个新的数据库用户。 我们授予该用户`mydb`数据库所有表的所有特权。

## Perl DBI

W
wizardforcel 已提交
106
Perl _DBI(数据库接口)是用于 Perl 编程语言的数据库访问模块。 它定义了一组提供标准数据库接口的方法,变量和约定。 DBI 还负责驱动程序的动态加载,错误检查和处理,提供方法的默认实现以及许多其他非数据库特定的职责。 DBI 将方法调用分派到适当的数据库驱动程序。DBD_ (数据库驱动程序)是一个 Perl 模块,它转换特定数据库引擎的 DBI 方法。 数据库驱动程序由数据库供应商提供。
W
wizardforcel 已提交
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

```
#!/usr/bin/perl

use strict;
use DBI;

my @ary = DBI->available_drivers();
print join("\n", @ary), "\n";

```

该代码示例列出了系统上所有可用的驱动程序。

```
use DBI;

```

我们为脚本导入 DBI 模块。

```
my @ary = DBI->available_drivers();

```

`available_drivers()`类方法获取系统上所有当前可用的驱动程序。

```
print join("\n", @ary), "\n";

```

此行将驱动程序打印到控制台,每个驱动程序都在单独的行上。

```
$ ./available_drivers.pl 
DBM
ExampleP
File
Gofer
Proxy
SQLite
Sponge
mysql

```

示例输出。

## 常见的 DBI 方法

下表列出了一些常见的 DBI 方法。

| 方法名称 | 描述 |
| --- | --- |
| `available_drivers()` | 返回所有可用驱动程序的列表 |
| `connect()` | 建立与请求的数据源的连接 |
| `disconnect()` | 与数据库服务器断开连接 |
| `prepare()` | 准备要执行的 SQL 语句 |
W
wizardforcel 已提交
167
| `execute()` | 执行预备语句 |
W
wizardforcel 已提交
168
| `do()` | 准备并执行一条 SQL 语句 |
W
wizardforcel 已提交
169
| `bind_param()` | 在预备语句中将值与占位符关联 |
W
wizardforcel 已提交
170
| `bind_col()` | 将 Perl 变量绑定到 SELECT 语句的输出字段 |
W
wizardforcel 已提交
171
| `begin_work()` | 开始新事务 |
W
wizardforcel 已提交
172 173
| `commit()` | 将最新的一系列未提交的数据库更改写入数据库 |
| `rollback()` | 撤消最近一系列未提交的数据库更改 |
W
wizardforcel 已提交
174
| `quote()` | 引用字符串文字,以用作 SQL 语句中的字面值 |
W
wizardforcel 已提交
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
| `dump_results()` | 获取所有行并打印 |
| `fetchrow_array()` | 获取下一行作为字段数组 |
| `fetchrow_arrayref()` | 获取下一行作为字段的参考数组 |
| `fetchrow_hashref()` | 获取下一行作为对哈希表的引用 |
| `fetchall_arrayref()` | 以数组的形式获取所有数据 |
| `finish()` | 完成声明并让系统释放资源 |
| `rows()` | 返回受影响的行数 |
| `column_info()` | 提供有关列的信息 |
| `table_info()` | 提供有关表的信息 |
| `primary_key_info()` | 提供有关表中主键的信息 |
| `foreign_key_info()` | 提供有关表中外键的信息 |

## 约定

在使用 Perl DBI 时,Perl 程序员通常使用以下变量名。 在本教程中,我们也将遵守这些约定。

| 变量名 | 描述 |
| --- | --- |
| `$dbh` | 数据库句柄对象 |
| `$sth` | 语句句柄对象 |
| `$drh` | 驱动程序句柄对象(在应用程序中很少见或使用) |
| `$h` | 上面的任何句柄类型($ dbh,$ sth 或$ drh) |
| `$rc` | 通用返回码(布尔值:true = ok,false = error) |
| `$rv` | 一般返回值(通常为整数) |
| `@ary` | 从数据库返回的值列表,通常是一行数据 |
| `$rows` | 处理的行数(如果可用,否则为-1) |
| `$fh` | 文件句柄 |
| `undef` | NULL 值由 Perl 中的未定义值表示 |
| `\%attr` | 引用传递给方法的属性值的哈希 |

MySQL Perl 教程的这一章介绍了 Perl DBI 模块和 MySQL 数据库。