如何将mysql数据库一个database中的所有表合并到一个新表中

如何将mysql数据库一个database中的所有表合并到一个新表中,第1张

以MySQL数据库为例,通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表中。此方法对于SQLServer数据库,也就是T-SQL来说,同样适用 。

类别一、 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:(此方法只适合导出两表在同一database)

INSERT INTO 目标表 SELECT FROM 来源表;

例如,要将 articles 表插入到 newArticles 表中,则可以通过如下SQL语句实现:

INSERT INTO newArticles SELECT FROM articles;

类别二、 如果只希望导入指定字段,可以用这种方法:

INSERT INTO 目标表 (字段1, 字段2, ) SELECT 字段1, 字段2, FROM 来源表;

请注意以上两表的字段必须一致(字段类型),否则会出现数据转换错误。

1、跨服务器复制表中数据

insert into openrowset('sqloledb','localhost';'sa';'123',TestdboTable_B)

select from TestdboTable_A

//启用Ad Hoc Distributed Queries:

exec sp_configure 'show advanced options',1

reconfigure

exec sp_configure 'Ad Hoc Distributed Queries',1

reconfigure

//使用完成后,关闭Ad Hoc Distributed Queries:

exec sp_configure 'Ad Hoc Distributed Queries',0

reconfigure

exec sp_configure 'show advanced options',0

reconfigure

2、//不跨服务器

insert into dboTable_B) select from dboTable_A

将表名和数据库连接字符串用代码拼接好 然后执行上述您需要的sql语句 程序功能即可完成

将一个mysql数据库中的一个表导入到另一个mysql数据库中

db1为原数据库,db2为要导出到的数据库,fromtable 是要导出的表名

1方法一:

登录导出到的数据库,执行

create table fromtable select from db1fromtable;

2方法二:

在cmd下执行,mysqldump -u root -p db1 fromtable file=d:/fromtablesql; 输入秘密,root为用户名

登录db2 执行 source d:/fromtablesql;

3方法三:

登录db1 执行 select from fromtable into outfile "d:/fromtable txt"; 导出纯数据格式

登录db2 执行 load data infile d:/fromtable txt into table fromtable; 需要先建一张和原表结构一样的空表。

4建一个odbc连接,先导出到access中,再导出到另一个库中。

UNION *** 作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

注释:默认地,UNION *** 作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

MySQL InnoDB 表数据页或者二级索引页(简称数据页或者索引页)的合并与分裂对 InnoDB 表整体性能影响很大;数据页的这类 *** 作越多,对 InnoDB 表数据写入的影响越大。

MySQL 提供了一个数据页合并临界值(MERGE_THRESHOLD),在某些场景下,可以人为介入,减少数据页的合并与分裂。

在 InnoDB 表里,每个数据页默认16K 大小,默认 MERGE_THRESHOLD 值为 50,取值范围从 1 到 50,默认值即是最大值。也就是当页面记录数占比小于 50% 时,MySQL 会把这页和相邻的页面进行合并,保证数据页的紧凑,避免太多浪费。

目前数据库中大约有

100

张表,

1)

其中一张是用来保存产品类型的

table1

。例如ID

|

typeint

|

varchar(500)

2)

每个类型的产品会有不同的相关信息,table3

这些信息对应了其余的多张表,但是每个表的结构相似,最多4

个字段,例如

ID

|

data1

|

data2

|

table2_FK

3)

另外一张表是用来保存所有类型的具体产品的名字的,

table2

ID

|

name

|

table1_FK

int

|

varchar(500)

|

引用这应该把table2

table3

这种表合并为一张表

就这么用两张表差不多吧,

保存产品类型的

table1

1对多个产品

ID

data1

data2

data3

data4

type

table1_FK

data1,data2

属于一张表

data3,data4

属于一张表

显然这样做效果不是很理想啊,因为表很多,这样定义的话在新表中大概就会有很多字段啊

引用这个问题一定会存在的,如果你要减少表的数量,一定不可避免地要多出一些冗余字段,

没有哪个系统的数据库表设计得有很完美的,

有些东西没法都是最好的,比如,你要查询的性能,就得减少表的联查询,

要减少表自然就要看需求满足再合并一些表,自然就有了冗余字段,

只是想办法找到一个性能和冗余字段的平衡点,也就是最佳结合,这是要不断去试的

先说一下我的思路:

首选你把表1,表2,表3中的数据都合并在一起表中,使用union all合并在一起。先不要管姓名是否会重复。

但是在执行合并的时候,需要对每一个待合并的数据,打上一个标签,代表这个是哪个表中来的数据,这个标签最后用于区分同一个人的不同的成绩是分别是多少,不能因为合并在一起后,就把同一个人的三项成绩给搞混了。

合并后的数据进行行转列的 *** 作。

具体的SQL语句如下图所示:

我这个方法比较笨

要 *** 作的诗句实际上有两种,而且插入数据库的格式也不一样,可以第一步先把不同的找出来,第二步吧相同的找出来然后按你那种格式放在一起

第一步

1select Ano,A,qty from A where not exists ( select from B where Ano=Bno);选出A中不重复的记录

2select Bno,B,qty from B where not exists ( select from A where Ano=Bno);

第二部

select Ano,Aqty,Bno,Bqty from A,B where Ano = Bno

我比较菜,想不出厉害的方法了

实现的方法很多,如倒入、导出、运行SQL查询、编写表合并程序等。可以在本数据库从外部数据库导入数据表,也可以从本数据库导出到外部目标数据库表。实现的方法多种多样,不一而足,但是不要指望有一种方法可以很简便地实现多数据库多表合并。它需要根据表结构,约束以及具体的合并要求等因素综合考虑来确定具体的合并方案。

将一个表的数据数据全部附加到另一个表中,只要没有主键冲突的问题,直接insert select 就可以了:

insert into ta(col1,col2,) select col1,col2, from tb;

如果有冲突,要先将所有主键删除,然后合并后,再重新建主键。

以上就是关于如何将mysql数据库一个database中的所有表合并到一个新表中全部的内容,包括:如何将mysql数据库一个database中的所有表合并到一个新表中、SQL 表如何两张表合并成一张 !!、MYSQL 两张表数据怎么合并等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9482964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存