【问题标题】:Populate table with data stored in separate tables使用存储在单独表中的数据填充表
【发布时间】:2021-03-03 21:20:18
【问题描述】:

我有一个 MySQL 数据库 separate_data,它由 200 个随机名称的表组成(例如 first_tablesecond_table、...) 这些表中的每一个都具有相同的结构和索引。 总大小约为 30GB。

我想将所有这些数据复制到名为 new_database 的新 MySQL 数据库中,在表 all_data 中,保持结构(但删除 auto_increment 列),并添加一列来指示原始表。

所以,例如,情况是:

first_table

+----+------+------+
| id | Col2 | Col3 |
+----+------+------+
|  1 | aaa  | xxx  |
|  2 | aaa  | yyy  |
|  3 | bbb  | zzz  |
+----+------+------+

second_table

+----+------+------+
| id | Col2 | Col3 |
+----+------+------+
|  1 | aaa  | xxx  |
|  2 | ccc  | yyy  |
|  3 | ddd  | zzz  |
+----+------+------+

生成的all_data 表应该是

+------+------+---------------+
| Col2 | Col3 | Original      |
+------+------+---------------+
| aaa  | xxx  | first_table   |
| aaa  | yyy  | first_table   |
| bbb  | zzz  | first_table   |
| aaa  | xxx  | second_table  |
| ccc  | yyy  | second_table  |
| ddd  | zzz  | second_table  |
+------+------+---------------+

问题在于数据量。因此,在 PHP 中执行此操作不是一种选择。我对一些手动工作没问题(例如,首先为separate_data 创建一个数据转储,然后将此数据转储注入new 数据库或类似的东西。

【问题讨论】:

    标签: mysql sql union create-table


    【解决方案1】:

    你似乎想要union all

    create table all_data as
    select col2, col3, 'first_table' as original from first_table
    union all select col2, col3, 'second_table' from second_table
    

    您通常会使用更多 union all 成员来扩展查询以获取其他相关表。

    【讨论】:

    • 感谢您的建议!有没有办法说“从separate_data 获取所有表”而不是必须全部列出?
    • @binoculars:不,您需要枚举所有表。当然,您可以使用您选择的工具以编程方式生成查询字符串。
    • 谢谢!想想看,我还需要对原始表格的引用......我已经更新了我的问题以反映这一点。
    • 我好像遇到了Statement violates GTID consistency: CREATE TABLE ... SELECT。显然,这可以通过应用SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF; SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; 来解决,但为此我需要 SUPER 或 SYSTEM_VARIABLES_ADMIN 权限......不要认为我可以做些什么,因为我的数据库是 Digital Ocean 上的托管数据库集群?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多