1

我想将 5 个相同的模式(好吧,它们并不完全相同,但我可以编辑字段名称以使它们相同)MySQL 数据库合并到一个数据库中。有什么简单的方法吗?

CREATE TABLE `users` (
    `name` VARCHAR (50) COLLATE utf8_turkish_ci DEFAULT NULL,
    `surname` VARCHAR (50) COLLATE utf8_turkish_ci DEFAULT NULL,
    `telephone` VARCHAR (50) COLLATE utf8_turkish_ci DEFAULT NULL,
    PRIMARY KEY (`id`),

) ENGINE = MyISAM AUTO_INCREMENT = 1000 DEFAULT CHARSET = utf8 COLLATE = utf8_turkish_ci PACK_KEYS = 0 ROW_FORMAT = DYNAMIC
4

3 回答 3

1

如果表与列名/类型完全相同并且被命名

  • 用户1
  • 用户2
  • 用户3
  • 用户4
  • 用户5

有两种方法可以解决这个问题:

方法#1:将数据加载到一个表中

CREATE TABLE user LIKE user1;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user1;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user2;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user3;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user4;
INSERT INTO user (name,surname,telephone,...)
SELECT name,surname,telephone,... FROM user5;

如果 id 是 auto_increment 所有行都会获得新的 id。

方法 #2:使用 MERGE 存储引擎

CREATE TABLE user LIKE user1;
ALTER TABLE user
    ENGINE=Mrg_MyISAM
    UNION=(user1,user2,user3,user4,user5)
;

试试看 !!!

于 2013-05-21T21:42:31.800 回答
1

任何 ETL 工具,例如 Clover,都非常适合您的目的。只需定义您的列映射,您就可以开始了。如果您需要进一步的帮助,请发表评论。

于 2013-05-21T18:34:59.517 回答
1

没有简单的方法可以做到这一点。

您可以尝试更改不同数据库中的表,以使它们具有最相似的格式。

此外,您可以使用语句,例如

Create table as select

为了进一步格式化数据。

比您必须对所有数据库执行 MYSQL DUMP 操作。仅从您感兴趣的数据库模式中选择创建语句,然后从所有不同的数据库中添加您的插入语句(用于数据)。

您可能还必须在 Excel 中或从 mysql 中执行文本操作,以便以兼容的格式获取数据并且可以插入到最终模式中。

于 2013-05-21T18:31:29.677 回答