SQL - 克隆表

  • 简述

    可能存在这样一种情况:您需要一个表的精确副本,而 CREATE TABLE ... 或 SELECT... 命令不适合您的目的,因为副本必须包含相同的索引、默认值等。
    如果您使用的是 MySQL RDBMS,您可以按照以下步骤处理这种情况 -
    • 使用 SHOW CREATE TABLE 命令获取 CREATE TABLE 语句,该语句指定源表的结构、索引等。
    • 修改语句,将表名改为克隆表名并执行该语句。这样,您将拥有一个精确的克隆表。
    • 或者,如果您还需要复制表内容,也可以发出 INSERT INTO 或 SELECT 语句。
  • 例子

    试试下面的例子来创建一个克隆表TUTORIALS_TBL其结构如下 -
    步骤 1− 获取表的完整结构。
    
    SQL> SHOW CREATE TABLE TUTORIALS_TBL \G; 
    *************************** 1. row *************************** 
          Table: TUTORIALS_TBL 
    Create Table: CREATE TABLE 'TUTORIALS_TBL' ( 
      'tutorial_id' int(11) NOT NULL auto_increment, 
      'tutorial_title' varchar(100) NOT NULL default '', 
      'tutorial_author' varchar(40) NOT NULL default '', 
      'submission_date' date default NULL, 
      PRIMARY KEY  ('tutorial_id'), 
      UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
    ) TYPE = MyISAM 
    1 row in set (0.00 sec)
    
    步骤 2− 重命名此表并创建另一个表。
    
    SQL> CREATE TABLE `CLONE_TBL` ( 
      -> 'tutorial_id' int(11) NOT NULL auto_increment, 
      -> 'tutorial_title' varchar(100) NOT NULL default '', 
      -> 'tutorial_author' varchar(40) NOT NULL default '', 
      -> 'submission_date' date default NULL, 
      -> PRIMARY KEY  (`tutorial_id'), 
      -> UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
    -> ) TYPE = MyISAM; 
    Query OK, 0 rows affected (1.80 sec) 
    
    步骤 3− 执行第 2 步后,您将在数据库中克隆一个表。如果要从旧表中复制数据,则可以使用 INSERT INTO... SELECT 语句来完成。
    
    SQL> INSERT INTO CLONE_TBL (tutorial_id, 
       ->                        tutorial_title, 
       ->                        tutorial_author, 
       ->                        submission_date) 
       -> SELECT tutorial_id,tutorial_title, 
       ->        tutorial_author,submission_date, 
       -> FROM TUTORIALS_TBL; 
    Query OK, 3 rows affected (0.07 sec) 
    Records: 3  Duplicates: 0  Warnings: 0 
    
    最后,您将拥有一个您想要的精确克隆表。