MySql复制表数据
微冷 2021/9/27 mysql
在oracle中复制一个表或者将一个表的数据导入到另外一张表是很简单的操作,常用操作有如下业务场景:
#1 、 复制表结构:
create table new_table_name as select * from table_name_tocopy where 1=2;
#2、复制表结构和数据:
create table new_table_name as select * from table_name_tocopy;
#3、除了上面的还有 insert into select 和 select into 等不赘述;
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
上面的语句最重要的一点没有说,就是表的字段是可以自定义且不必是全部的!
话说回到MySql,Mysql可不可以呢?看官网语句:
#1、 参考地址:https://dev.mysql.com/doc/refman/5.7/en/ansi-diff-select-into-table.html
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
#2、 简化和存在的问题,如果想复制同构全表使用下面的语句,不需要指定列
INSERT INTO tbl_temp2
SELECT tbl_temp1.*
FROM tbl_temp1
#3、上面的问题就是,如果tbl_temp1中没有tbl_temp2中的字段要做如下处理
INSERT INTO tbl_temp2
SELECT tbl_temp1.*, null as 缺失的字段名
FROM tbl_temp1
#4、 如果两个表完全异构,那就要指定列名了just like 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
看了看MySql文档还有个输出到文件的用法:
# 参考地址:https://dev.mysql.com/doc/refman/5.7/en/select-into.html
SELECT
...
...
[INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9