企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 使用 Perl 获取 MySQL 元数据 > 原文: [http://zetcode.com/db/mysqlperl/meta/](http://zetcode.com/db/mysqlperl/meta/) 元数据是有关数据库中数据的信息。 MySQL 中的元数据包含有关存储数据的表和列的信息。 受 SQL 语句影响的行数是元数据。 结果集中返回的行数和列数也属于元数据。 | 方法名称 | 描述 | | --- | --- | | `column_info()` | 提供有关列的信息 | | `table_info()` | 提供有关表的信息 | | `primary_key_info()` | 提供有关表中主键的信息 | | `foreign_key_info()` | 提供有关表中外键的信息 | 上表列出了四种用于检索元数据的 Perl DBI 方法。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->primary_key_info(undef, "mydb", "Cars"); my @ary = $sth->fetchrow_array(); print join(" ", @ary), "\n"; $sth->finish(); $dbh->disconnect(); ``` 在第一个示例中,我们将在`Cars`表中找到有关主键的信息。 ```perl my $sth = $dbh->primary_key_info(undef, "main", "Cars"); ``` `primary_key_info()`返回一个活动语句句柄,该句柄可用于获取有关构成表主键的列的信息。 ```perl my @ary = $sth->fetchrow_array(); ``` 从语句句柄,我们检索信息。 ```perl $ ./pk_info.pl mydb Cars Id 1 PRIMARY ``` 从输出中我们可以看到`Cars`表中有一个主键。 主键是第一列,名为`Id`。 接下来,我们将打印`Cars`表中的所有行及其列名。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my $sth = $dbh->prepare( "SELECT * FROM Cars LIMIT 8" ); $sth->execute(); my $headers = $sth->{NAME}; my ($id, $name, $price) = @$headers; printf "%s %-10s %s\n", $id, $name, $price; my $row; while($row = $sth->fetchrow_hashref()) { printf "%2d %-10s %d\n", $row->{Id}, $row->{Name}, $row->{Price}; } $sth->finish(); $dbh->disconnect(); ``` 我们将`Cars`表的内容打印到控制台。 现在,我们也包括列的名称。 记录与列名对齐。 ```perl my $headers = $sth->{NAME}; ``` 我们从语句对象获得列名。 ```perl my ($id, $name, $price) = @$headers; printf "%s %-10s %s\n", $id, $name, $price; ``` 列名将打印到控制台。 我们使用`printf`函数应用某些格式。 ```perl my $row; while($row = $sth->fetchrow_hashref()) { printf "%2d %-10s %d\n", $row->{Id}, $row->{Name}, $row->{Price}; } ``` 数据被检索,格式化并打印到终端。 ```perl $ ./column_names.pl Id Name Price 1 Audi 52642 2 Mercedes 57127 3 Skoda 9000 4 Volvo 29000 5 Bentley 350000 6 Citroen 21000 7 Hummer 41400 8 Volkswagen 21601 ``` `column_names.pl`脚本的输出。 在与元数据有关的最后一个示例中,我们将列出`test.db`数据库中的所有表。 ```perl #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect( "dbi:mysql:dbname=mydb", "user12", "34klq*", { RaiseError => 1 }, ) or die $DBI::errstr; my @tables = $dbh->tables(); foreach my $table ( @tables ) { print "Table: $table\n"; } $dbh->disconnect(); ``` 该代码示例将当前数据库中的所有可用表打印到终端。 ```perl my @tables = $dbh->tables(); ``` 表名使用`tables()`方法检索。 ```perl $ ./list_tables.pl Table: `mydb`.`Cars` Table: `mydb`.`Friends` Table: `mydb`.`Images` ``` 这些是我们系统上的表。 在 MySQL Perl 教程的这一部分中,我们使用了数据库元数据。