以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 两张表数据怎么合并等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)