MySQL - 数据库信息
MySQL 通常存储两种类型的数据:以表和视图形式存储的实际数据,以及有关数据库结构及其对象的信息。这些信息称为元数据。
例如,当用户忘记数据库或其对象的某些信息时,MySQL 会提供特定的命令来检索这些信息。实际上,您可以从 MySQL 数据库中检索三种类型的信息。它们如下:
查询结果信息 - 包括受 SELECT、UPDATE 或 DELETE 语句影响的记录数。
表和数据库信息 - 包括表和数据库结构相关的信息。
MySQL 服务器信息 - 包括数据库服务器的状态、版本号等。
在 MySQL 提示符下获取所有这些信息非常容易,但在使用 PERL 或 PHP API 时,我们需要显式调用各种 API 来获取所有这些信息。
从 MySQL 提示符下获取数据库信息
从 MySQL 提示符访问 MySQL 服务器时,在 Windows 的命令提示符和 Linux 的终端等中,使用以下命令获取有关数据库的任何信息。
SHOW DATABASES:此命令用于检索 MySQL 中存在的所有数据库的列表。
SHOW TABLES:此命令用于显示数据库中存在的表的列表。
mysql -V:此命令用于提供系统中安装的 MySQL 的当前版本。
DESC 或 DESCRIBE:此命令用于检索数据库表的结构或定义。
mysql -V 命令
如果要检查系统中安装的 MySQL 服务器的版本,请在命令提示符中使用以下 mysql -V 命令或终端。
注意: 您必须记住,在 Windows 中,命令提示符必须以管理员身份运行。
示例
在这里,我们在命令提示符中检查 MySQL 服务器的当前版本 -
C:\Windows\System32> mysql -V
输出
从下面的输出中我们可以看到,当前的 MySQL 服务器版本是"8.0.33"−
mysql Ver 8.0.33 for Win64 on x86_64 (MySQL Community Server - GPL)
SHOW DATABASES 命令
要列出或检索 MySQL 中所有数据库的名称,您可以在登录 MySQL 服务器后使用以下 SHOW DATABASES 命令−
注意 − 此命令将同时列出系统数据库和用户定义的数据库。用户必须识别所有数据存储在其内的特定用户定义数据库。
示例
在以下查询中,我们将获取当前 MySQL 服务器中存在的数据库列表 -
SHOW DATABASES;
此处,前三行是系统数据库,后两行是用户定义数据库 -
Database |
---|
information_schema |
mysql |
performance_schema |
tutorials |
tutorials_copy |
SHOW TABLES 命令
要列出 MySQL 数据库中的所有表,您可以在使用 USE 命令选择一个数据库后,使用 SHOW TABLES 命令 -
示例
在下面的查询中,我们选择一个名为"Tutorials"的数据库 -
USE Tutorials;
现在,让我们使用 SHOW TABLES 命令获取上述数据库中所有表的名称 -
Show Tables;
输出
以下是"Tutorials"数据库中存在的表的列表 -
Tables_in_tutorials |
---|
customers |
employees |
students |
DESC 命令
如果我们想要检查 MySQL 表的结构,我们需要使用 DESC 或 DESCRIBE 查询。DESC 是 DESCRIBE 查询的快捷方式,但返回的结果相同。
示例
这里,我们获取 MySQL CUSTOMERS 表的结构 -
DESC CUSTOMERS;
以下是结构 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL | auto_increment |
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | NULL | ||
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18,2) | YES | NULL |
获取查询影响的行数
现在让我们看看如何获取这些信息。
PERL 示例
在 DBI 脚本中,受影响的行数由 do() 或 execute() 命令返回,具体取决于执行查询的方式。
# 方法 1 # 使用 do() 执行 $query my $count = $dbh->do ($query); # 如果发生错误,则报告 0 行 printf "%d rows were affected ", (defined ($count) ? $count : 0); # 方法 2 # 使用 prepare() 和 execute() 执行查询 my $sth = $dbh->prepare ($query); my $count = $sth->execute ( ); printf "%d rows were affected ", (defined ($count) ? $count : 0);
PHP 示例
在 PHP 中,调用 mysql_affected_rows() 函数来查找查询更改了多少行。
$result_id = mysql_query ($query, $conn_id); # 如果查询失败,则报告 0 行 $count = ($result_id ? mysql_affected_rows ($conn_id) : 0); print ("$count rows were affected ");
列出表和数据库
列出数据库服务器中所有可用的数据库和表非常容易。如果您没有足够的权限,结果可能为 null。
除了以下代码块中显示的方法外,您还可以使用 SHOW TABLES 或 SHOW DATABASES 查询来获取 PHP 或 PERL 中的表或数据库列表。
PERL 示例
# 获取当前数据库中所有可用的表。 my @tables = $dbh->tables ( ); foreach $table (@tables ){ print "Table Name $table "; }
PHP 示例
尝试以下示例获取数据库信息 -
复制并粘贴以下示例为 mysql_example.php -
<html> <head> <title>Getting MySQL Database Info</title> </head> <body> <?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'root@123'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); $tutorial_count = null; if($mysqli->connect_errno ) { printf("Connect failed: %s<br />", $mysqli->connect_error); exit(); } printf('Connected successfully.<br />'); if ($result = mysqli_query($mysqli, "SELECT DATABASE()")) { $row = mysqli_fetch_row($result); printf("Default database is %s<br />", $row[0]); mysqli_free_result($result); } $mysqli->close(); ?> </body> </html>
输出
访问部署在 Apache Web 服务器上的 mysql_example.php 并验证输出。
Connected successfully. Default database is tutorials
获取服务器元数据
MySQL 中有一些重要的命令,可以在 MySQL 提示符下执行,也可以使用 PHP 等脚本执行,以获取有关数据库服务器的各种重要信息。
Sr.No. | 命令 &描述 |
---|---|
1 |
SELECT VERSION() 服务器版本字符串 |
2 |
SELECT DATABASE() 当前数据库名称(如果没有则为空) |
3 |
SELECT USER() 当前用户名 |
4 |
SHOW STATUS 服务器状态指标 |
5 |
SHOW VARIABLES 服务器配置变量 |