复制表结构及数据

来源:互联网 发布:java框架cs通讯 编辑:程序博客网 时间:2024/05/21 21:02
以user表为模型创建user_bak表,并将user表的所有数据复制到user_bak里,create table user_bak as select * from user;
以user表为模型创建user_bak表,只创建表结构,不复制数据,create table user_bak as select * from user where 1<>1;

但是这两个语句都不会复制主键,索引,自增等额外信息,比如原表里的主键id,自增,复制后变成无自增,无主键,默认值为0:
show create table user的结果如下:
| user  | CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `age` tinyint(3) unsigned NOT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |

show create table user_bak的结果如下:
| user_bak | CREATE TABLE `user_bak` (
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(30) CHARACTER SET utf8 NOT NULL,
  `age` tinyint(3) unsigned NOT NULL COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

解决办法:
create table user_bak like user;
不过这样只能复制表结构,而不能复制数据;

可以再结合语句:insert into user_bak select * from user;
达到复制表结构以及数据的目的;

另一种指定插入的字段:
insert into article(title,keywords,desc,contents) select title,keywords,desc,contents from article where article_id = 100;
0 0