mysql表的复制(结构和数据)
时间:2010-11-01 来源:xiaokaizi
-----------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| category | CREATE TABLE `category` (
`cate_id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` smallint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(50) NOT NULL DEFAULT '',
`counts` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`cate_id`)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
当使用create table xxx select * from category; 时,复制过来的表的结构如下。
| category | CREATE TABLE `xxx` (
`cate_id` smallint(8) unsigned NOT NULL DEFAULT '0',
`parent_id` smallint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(50) NOT NULL DEFAULT '',
`counts` int(10) unsigned NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
可以看到有几个明显的不同。
1,主键没有了。
2,auto_increment没有了
3,其他:如索引,以及ts数据列的一些timestamp属性都不见了,且如果源表是innodb存储引擎的话,那么
复制过来的表会变成myisam类型。
附:使用create table xxx select * from yyyy复制的表包括结构和数据都会复制的。
而以上的这些数据结构方面的变化都是用户不需要也不想要的,为了避免发生这种问题,更好的办法是先单独复制表的数据结构,之后再复制表的数据。
CREATE TABLE XXX LIKE YYY;
INSERT INTO XXX SELECT * FROM YYY;
使用以上两条语句就可以避免不必要的问题出现。当然还有一种方法是用MYSQL的数据导入/导出命名也可以完成数据表的复制和移动操作。(备份相关)
| Table | Create Table |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| category | CREATE TABLE `category` (
`cate_id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` smallint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(50) NOT NULL DEFAULT '',
`counts` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`cate_id`)
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=utf8 |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
当使用create table xxx select * from category; 时,复制过来的表的结构如下。
| category | CREATE TABLE `xxx` (
`cate_id` smallint(8) unsigned NOT NULL DEFAULT '0',
`parent_id` smallint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(50) NOT NULL DEFAULT '',
`counts` int(10) unsigned NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
可以看到有几个明显的不同。
1,主键没有了。
2,auto_increment没有了
3,其他:如索引,以及ts数据列的一些timestamp属性都不见了,且如果源表是innodb存储引擎的话,那么
复制过来的表会变成myisam类型。
附:使用create table xxx select * from yyyy复制的表包括结构和数据都会复制的。
而以上的这些数据结构方面的变化都是用户不需要也不想要的,为了避免发生这种问题,更好的办法是先单独复制表的数据结构,之后再复制表的数据。
CREATE TABLE XXX LIKE YYY;
INSERT INTO XXX SELECT * FROM YYY;
使用以上两条语句就可以避免不必要的问题出现。当然还有一种方法是用MYSQL的数据导入/导出命名也可以完成数据表的复制和移动操作。(备份相关)
相关阅读 更多 +