在MySQL中操作克隆表的教程
可能有一种情况,当需要一个完全相同的副本表CREATETABLE...SELECT不适合需要,因为副本必须包含相同的索引,默认值,依此类推。
按下面的步骤,可以处理这种情况。
- 使用SHOWCREATETABLE得到一个CREATETABLE语句中指定源表的结构,索引等。
- 修改语句更改表名称的克隆表,并执行该语句。通过这种方式将有确切的克隆表。
- 或者,如果需要进行表的内容复制,使用INSERTINTO...SELECT语句也可以搞定。
实例:
试试下面的例子来创建一个克隆表tutorials_tbl
步骤1:
有关表获取完整的结构
mysql>SHOWCREATETABLEtutorials_tbl\G; ***************************1.row*************************** Table:tutorials_tbl CreateTable:CREATETABLE`tutorials_tbl`( `tutorial_id`int(11)NOTNULLauto_increment, `tutorial_title`varchar(100)NOTNULLdefault'', `tutorial_author`varchar(40)NOTNULLdefault'', `submission_date`datedefaultNULL, PRIMARYKEY(`tutorial_id`), UNIQUEKEY`AUTHOR_INDEX`(`tutorial_author`) )TYPE=InnoDB 1rowinset(0.00sec) ERROR: Noqueryspecified
步骤2:
重命名此表,并创建另一个表
mysql>CREATETABLE`clone_tbl`( ->`tutorial_id`int(11)NOTNULLauto_increment, ->`tutorial_title`varchar(100)NOTNULLdefault'', ->`tutorial_author`varchar(40)NOTNULLdefault'', ->`submission_date`datedefaultNULL, ->PRIMARYKEY(`tutorial_id`), ->UNIQUEKEY`AUTHOR_INDEX`(`tutorial_author`) ->)TYPE=InnoDB; QueryOK,0rowsaffected(1.80sec)
步骤3:
在执行步骤2的克隆数据库的表中。如果想从旧表中的数据复制,那么可以通过使用INSERTINTO...SELECT语句。
mysql>INSERTINTOclone_tbl(tutorial_id, ->tutorial_title, ->tutorial_author, ->submission_date) ->SELECTtutorial_id,tutorial_title, ->tutorial_author,submission_date, ->FROMtutorials_tbl; QueryOK,3rowsaffected(0.07sec) Records:3Duplicates:0Warnings:0
最后,将有确切的克隆表。