个性化阅读
专注于IT技术分析

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

点击下载

在上一章的mysql教程中我们讨论了:mysql alter命令和mysql索引,这一章我们开始讨论mysql的复制表操作以及数据元数据。

一、mysql复制表

可能会存在这样的情况你需要一个表的精确复制并创建一个表,select不适合你的目的英文副本必须包含相同的索引、默认值等等。

我们可以通过以下步骤来处理这种情况

  1. 使用SHOW CREATE TABLE获得一个CREATE TABLE语句,该语句指定源表的结构、索引和所有内容。
  2. 将表名更改为复制表的表名并执行语句,这样就会拥有完全相同的复制表。
  3. 可结合SELECT INTO和SELECT语句使用。

尝试以下示例为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 服务器配置变量
赞(0)
未经允许不得转载:srcmini » mysql复制表操作和数据库元数据介绍

评论 抢沙发

评论前必须登录!