1、前言
在功能开发完毕,在本地或者测试环境进行测试时,经常会遇到这种情况:有专门的测试数据,测试过程会涉及到修改表中的数据,经常不能一次测试成功,所以,每次执行测试后,原来表中的数据其实已经被修改了,下一次测试,就需要将数据恢复。
我一般的做法是:先创建一个副本表,比如测试使用的user表,我在测试前创建副本表user_bak,每次测试后,将user表清空,然后将副本表user_bak的数据导入到user表中。
上面的操作是对一个table做备份,如果涉及到的table太多,可以创建database的副本。
接下来我将对此处的表结构复制以及表数据复制进行阐述,并非数据库的复制原理!!!!
下面是staff表的表结构
create table staff ( id int not null auto_increment comment '自增id', name char(20) not null comment '用户姓名', dep char(20) not null comment '所属部门', gender tinyint not null default 1 comment '性别:1男; 2女', addr char(30) not null comment '地址', primary key(id), index idx_1 (name, dep), index idx_2 (name, gender)) engine=innodb default charset=utf8mb4 comment '员工表';
2、具体方式
2.1、执行旧表的创建SQL来创建表
如果原始表已经存在,那么可以使用命令查看该表的创建语句:
mysql> show create table staff\G*************************** 1. row *************************** Table: staffCreate Table: CREATE TABLE `staff` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id', `name` char(20) NOT NULL COMMENT '用户姓名<mark>本文来源gaodaimacom搞#^代%!码&网(</mark>9;, `dep` char(20) NOT NULL COMMENT '所属部门', `gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性别:1男; 2女', `addr` char(30) NOT NULL, PRIMARY KEY (`id`), KEY `idx_1` (`name`,`dep`), KEY `idx_2` (`name`,`gender`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工表'1 row in set (0.01 sec)
可以看到,上面show creat table xx的命令执行结果中,Create Table的值就是创建表的语句,此时可以直接复制创建表的SQL,然后重新执行一次就行了。
当数据表中有数据的时候,看到的创建staff表的sql就会稍有不同。比如,我在staff中添加了两条记录:
mysql> insert into staff values (null, '李明', 'RD', 1, '北京');Query OK, 1 row affected (0.00 sec) mysql> insert into staff values (null, '张三', 'PM', 0, '上海');Query OK, 1 row affected (0.00 sec) mysql> select * from staff;+----+--------+-----+--------+--------+| id | name | dep | gender | addr |+----+--------+-----+--------+--------+| 1 | 李明 | RD | 1 | 北京 || 2 | 张三 | PM | 0 | 上海 |+----+--------+-----+--------+--------+2 rows in set (0.00 sec)