复制表:这种场景我认为可能比较多的应用在,想修改某个表的数据,但是又没有十足的把握,这时就可以复制一个一模一样的表,用 “复制表” 来做试验。
第一种方法:
1、已经有 test_1 表,想复制一份并命名为:test_2。
- 先 show create table test_1;(或者 show create table test_1 \G;)查看 test_1 的结构。
- 倒数第三行多了个:AUTO_INCREMENT=8,表示 test_1 表中最后一条数据 `id` 字段的值为:7。
mysql> show create table test_1;
+--------+--------------------------------------------------------------------------------+
| Table | Create Table |
+--------+--------------------------------------------------------------------------------+
| test_1 | CREATE TABLE `test_1` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 |
+--------+--------------------------------------------------------------------------------+
1 row in set (0.00 sec)
- 直接把 test_1 改为 test_2,创建 test_2 表。(如下:show create table test_2;)
mysql> create table `test_2`( -> `id` int(10) unsigned AUTO_INCREMENT, -> `name` varchar(20) not null, -> `age` int(10) unsigned, -> primary key(`id`) -> )engine=innodb default charset=utf8; Query OK, 0 rows affected, 3 warnings (0.03 sec)
- 这时再将 test_1 表中已有的数据复制到 test_2 中。
insert into test_2(id, name, age) select id, name, age from test_1;(或者 insert into test_2(id, name, age) select * from test_1; 或者 insert into test_2 select * from test_1;)
- 执行 select * from test_1/test_2; (两表数据一样)
第二种方法:
- 使用 like 。
- create table test_2 like test_1; (字面意思:创建一个像 test_1 的表,名字为 test_2 )
- insert into test_2 select * from test_1;(将查询 test_1 的数据,插入到 test_2 中)
- select * from test_1/test_2;(两表数据一样)
经过简单测试,数据正常,符合我的目标要求。(从一些结果来看,正常;但不保证一定正确;上面的编号 1 2 什么的,不太连续,弄半天不知道咋弄了,将就下)