mysql复制表操作和数据库元数据介绍

在上一章的mysql教程中我们讨论了:mysql alter命令和mysql索引,这一章我们开始讨论mysql的复制表操作以及数据元数据。
一、mysql复制表可能会存在这样的情况你需要一个表的精确复制并创建一个表,select不适合你的目的英文副本必须包含相同的索引、默认值等等。
我们可以通过以下步骤来处理这种情况

  1. 使用SHOW CREATE TABLE获得一个CREATE TABLE语句,该语句指定源表的结构、索引和所有内容。
  2. 将表名更改为复制表的表名并执行语句,这样就会拥有完全相同的复制表。
  3. 可结合SELECT INTO和SELECT语句使用。
【mysql复制表操作和数据库元数据介绍】尝试以下示例为sample创建一个复制表。
步骤一:获得关于表的完整结构。
mysql> show create table sample \G; *************************** 1. row *************************** Table: sample Create Table: CREATE TABLE `sample` ( `s_id` int(11) NOT NULL auto_increment, `s_title` varchar(100) NOT NULL default '', `s_author` varchar(40) NOT NULL default '', `s_date` date default NULL, PRIMARY KEY(`s_id`), UNIQUE KEY `AUTHOR_INDEX` (`s_author`) ) TYPE = MyISAM 1 row in set (0.00 sec)ERROR: No query specified

步骤二:重命名此表并创建另一个表。
mysql> create table clone_temp ( -> s_id int(11) NOT NULL auto_increment, -> s_title varchar(100) NOT NULL default '', -> s_author varchar(40) NOT NULL default '', -> submission_date date default NULL, -> PRIMARY KEY(s_id), -> UNIQUE KEY AUTHOR_INDEX (s_author) -> ) TYPE = MyISAM; Query OK, 0 rows affected (1.80 sec)

步骤三:执行步骤二之后,我们将在数据库中创建一个复制表,如果你想从旧表中复制数据,你可以使用INSERT INTO…SELECT语句。
mysql> insert into clone_temp (s_id, -> s_title, -> s_author, -> submission_date)-> select s_id,s_title, -> s_author,submission_date -> FROM sample;

最后我们就有了一个与我们想要的完全相同的复制表。
二、数据库元数据1、获取和使用MySQL元数据
我们期望从MySQL获得三种类型的信息。
  • 查询结果的信息——包括受SELECT、UPDATE或DELETE语句影响的记录的数量。
  • 关于表和数据库的信息——包括关于表和数据库结构的信息。
  • 关于MySQL服务器的信息,包括数据库服务器的状态、版本号等。
在MySQL提示符中很容易获得所有这些信息,但是在使用PERL或PHP api时,我们需要显式地调用各种api来获得所有这些信息。
2、获取受查询影响的行数
现在让我们看看如何获得这些信息。
PERL例子:在DBI脚本中受影响的行数由do()或execute()命令返回,具体取决于你如何执行查询。
my $count = $dbh->do ($query); printf "影响的行数: %d\n", (defined ($count) ? $count : 0); my $sth = $dbh->prepare ($query); my $count = $sth->execute ( ); printf "影响的行数: %d\n", (defined ($count) ? $count : 0);

PHP例子:在PHP中调用mysql_affect ted_rows()函数来查明一个查询更改了多少行。
$result_id = mysql_query ($query, $conn_id); $count = ($result_id ? mysql_affected_rows ($conn_id) : 0); print ("影响的行数: $count\n");

3、列出表和数据库
在数据库服务器中列出所有可用的数据库和表是非常容易的,如果你没有足够的权限结果可能是空的。
除了在下面的代码块中显示的方法之外,还可以使用SHOW TABLES或SHOW DATABASES查询来获得PHP或PERL中的表或数据库列表。
PERL例子:
my @tables = $dbh->tables ( ); foreach $table (@tables ){ print "表名 $table\n"; }

PHP例子:
< ?php $con = mysql_connect("localhost", "userid", "password"); if (!$con) { die('connect error: ' . mysql_error()); } $db_list = mysql_list_dbs($con); while ($db = mysql_fetch_object($db_list)) { echo $db->Database . "< br />"; } mysql_close($con); ?>

4、获取服务器的元数据
MySQL中有一些重要的命令可以在MySQL提示符下执行,也可以使用任何类似PHP的脚本来获取关于数据库服务器的各种重要信息。
Sr.No. 命令& 描述
1 SELECT VERSION( ) 服务器版本字符串
2 SELECT DATABASE( ) 当前数据库名
3 SELECT USER( ) 当前用户名
4 SHOW STATUS 服务器状态指标
5 SHOW VARIABLES 服务器配置变量

    推荐阅读