admin管理员组文章数量:1547072
文章目录
- 复制表分三种情况:
- 1、复制原有表t_test的结构到另一张表t_testx(x=1,2,......),
- 2、复制原有表t_test的数据到表t_testx(x=1,2,......),有两种情况,
- 3、复制原有表t_test的结构及数据到另一张表t_testx(x=1,2,......),
- 数据库中,表与表的数据转移分以下几种情况:
- 1、相同服务器相同数据库下表与表的数据转移
- 2、相同服务器不同数据库下表与表的数据转移
- 3、不同服务器不同数据库下表与表的数据转移
------------------------------------------------------分割线------------------------------------------------------
---------------------------------------------------以下是正文------------------------------------------------------
复制表分三种情况:
1、复制表的结构
2、复制表的数据
3、复制表的结构及数据
以下用实际的例子展示这三种情况该如何复制?
准备工作:在Navicat Premium 12软件里新建一个连接,叫localserver_test(服务器别名,自己可随意命名),在该连接下新建一个数据库,叫test,效果图如下,
在test数据库下新建一张t_test表,效果图和SQL命令如下,
CREATE TABLE t_test
(
id BIGINT(20) NOT NULL COMMENT '主键',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO t_test (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou'),
(2, 'Jack', 20, 'test2@baomidou'),
(3, 'Tom', 28, 'test3@baomidou'),
(4, 'Sandy', 21, 'test4@baomidou'),
(5, 'Billie', 24, 'test5@baomidou');
准备工作就到这里,接着进入主题!
1、复制原有表t_test的结构到另一张表t_testx(x=1,2,…),
第一种情况:此时表t_test1是不存在的,用以下语句,
CREATE TABLE t_test1 SELECT * FROM t_test WHERE 1=2;
或
CREATE TABLE t_test1 LIKE t_test;
上面两条SQL语句都可以复制结构,会自动新建一张新表t_test1,但新表t_test1没有原有表t_test的数据,效果图如下,
== 温馨提示:虽说两条SQL语句都可以复制结构,但还是存在一些差异的,第一条SQL语句仅仅只复制了结构,而第二条SQL语句除了复制了结构以外,还复制了原有表(t_test)的主键、索引、Extra(auto_increment,字符集编码及排序)、注释、分区等属性,但是不包含触发器、外键等。 ==
第二种情况:由于不管是sqlserver ,oracle ,mysql,access等都不可以创建空表,表中至少得有一个字段,表才能创建成功!所以没有原有表t_test复制结构到已存在的空表(无字段表)的情况。那么,如果复制原有表t_test的结构到已存在的非空表(有字段表)t_test2,该如何实现?以及效果如何呢?我们来演示一下!
已存在的非空表t_test2情况图如下,
接着,运行以下SQL语句,
SELECT * INTO t_test2 FROM t_test WHERE 1=2;
由于本人演示用的是mysql,而mysql不支持将原有表(t_test)结构复制到另一张已存在的表里,所以效果图暂时省略,以后有时间再补充,偷个懒,略略略!
2、复制原有表t_test的数据到表t_testx(x=1,2,…),有两种情况,
第一种情况:两表结构一样情况下
已存在的表t_test3的情况图如下,
与原有表t_test的结构完全相同,接着,运行以下SQL语句,
INSERT INTO t_test3 SELECT * FROM t_test;
运行后效果图如下,
第二种情况:两表结构不一样情况下
已存在的表t_test4的情况图如下,
与原有表t_test的结构不相同(多了一个originalfield字段),接着,运行以下SQL语句,
INSERT INTO t_test4(id,name,age,email) SELECT id,name,age,email FROM t_test;
运行后效果图如下,
3、复制原有表t_test的结构及数据到另一张表t_testx(x=1,2,…),
此时表t_test5是不存在的,用以下语句,
CREATE TABLE t_test5 SELECT * FROM t_test;
或
CREATE TABLE t_test5 AS SELECT * FROM t_test;
上面两条SQL语句效果相同,会自动新建一张新表t_test5,且结构及数据与原有表t_test一模一样,效果图如下,
以上方式有一个不好的地方就是仅仅只复制了结构和数据,新表(t_test5)中没有了原有表(t_test)的主键、索引、Extra(auto_increment,字符集编码及排序)、注释、分区等属性,以及触发器、外键等。
那么,如果也想把原有表(t_test)的主键、索引等一并复制过来,该如何操作呢?
先运行以下代码,
CREATE TABLE t_test6 LIKE t_test;
接着运行这段代码,
INSERT INTO t_test6 SELECT * FROM t_test;
== 温馨提示:推荐一个好用的SQL命令,“show create table 原有表”,运行该命令之后可以将旧表的创建命令列出,我们只需要将列出来的命令拷贝出来,更改table的名字,就可以建立一个完全一样的表 ==
-------------------------------------------------------分割线---------------------------------------------------------
---------------------------------------------下面演示单纯数据转移---------------------------------------------
数据库中,表与表的数据转移分以下几种情况:
1、相同服务器相同数据库下表与表的数据转移
2、相同服务器不同数据库下表与表的数据转移
3、不同服务器不同数据库下表与表的数据转移
以下用实际的例子展示这三种情况该如何复制?
准备工作:沿用上面所创建的连接(localserver_test)以及数据库(test)表(t_testx),接着继续在该连接下创建另一个空的数据库test2,另外,再新建一个远程连接,叫remoteserver_test,在该远程连接下新建一个空的数据库,叫remotetest,效果图如下,
1、相同服务器相同数据库下表与表的数据转移
此种情况的数据转移上面已有介绍,这里总结一下,分两种情况:
第一种情况:两表结构一样情况下
INSERT INTO t_test3 SELECT * FROM t_test;
第二种情况:两表结构不一样情况下
INSERT INTO t_test4(id,name,age,email) SELECT id,name,age,email FROM t_test;
2、相同服务器不同数据库下表与表的数据转移
在localserver_test连接下,将数据库test下的表t_test的数据转移至同一服务器下另一数据库test2下的表tcopy_testx(x=1,2,…)里,有两种情况,
第一种情况:目标表不存在的情况
INSERT INTO test2.tcopy_test2 SELECT * FROM test.t_test;
运行完上面SQL语句后的效果图如下,
== 温馨提醒:以上SQL语句仅复制了结构和数据,并未复制原有表(t_test)的主键、索引、Extra(auto_increment,字符集编码及排序)、注释、分区等属性,以及触发器、外键等 ==
那么,如果想把原有表(t_test)的主键、索引等一并复制过来,这个跟前面所说复制相同数据库下表跟表的结构和数据是类似的,具体代码如下,
先运行以下代码,
CREATE TABLE test2.tcopy_test2 LIKE test.t_test;
接着运行这段代码,
INSERT INTO test2.tcopy_test2 SELECT * FROM test.t_test;
第二种情况:目标表存在的情况
目标表存在的情况下,又分目标表的结构与原有表相同和不相同的情况,可参考前面的代码,这里就不赘述了。
----------------------------------------------前面的都是开胃小菜----------------------------------------------
-----------------------------------------真正又难又麻烦的是下面这个-----------------------------------------
3、不同服务器不同数据库下表与表的数据转移
抱歉,突然事多起来,这个也还没理解透,后面有时间再补充了
版权声明:本文标题:MySQL:如何复制表的部分或全部数据到其他表里? 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727188652a1101218.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论