【问题标题】:MySQL Double The Amount Of Data In Database With No Orphaned DataMySQL 在没有孤立数据的情况下使数据库中的数据量翻倍
【发布时间】:2016-03-05 14:29:50
【问题描述】:

出于测试目的,我想将数据库中的数据量增加一倍。

除了循环遍历表模式之外,还有更好的方法来解决这个问题,例如:

select table_name from information_schema.tables where table_schema='<database_name>';

对于结果中的表名:

explain <database_name>.<table_name>;

python中基于table创建对象

select * from <table_name>;

将这些数据填充到我们创建的对象中

将对象主键 (GUID) 更改为新的 guid,如果该主键存在于其他对象的任何其他位置,则将其更改为相同的 guid

将新数据插入数据库。

预期结果: 这将使我在数据库中拥有的对象数量增加一倍。

【问题讨论】:

    标签: python mysql database


    【解决方案1】:

    您不需要在 Python 中创建对象。您可以将表中的数据重新插入到自身中:

    insert into t
        select t.*
        from t;
    

    这假设没有列是标识列(可能是一个错误的假设)。因此,您需要列出列:

    insert into t(col1, col2, . . .)
        select col1, col2, . . .
        from t;
    

    不要包含标识列。让它得到它的默认值。如果未设置身份,那么您可能需要执行以下操作:

    insert into t(col1, col2, . . .)
        select t.id + maxid + 1, col1, col2, . . .
        from t cross join
             (select max(id) as maxid from t) m;
    

    对于 UUID,您可以使用函数生成新密钥。

    但是,此操作无需将数据移出数据库。

    【讨论】:

    • 这也假设外键关系在数据库中正确设置,对吧?我不确定,总是这样
    • OP 只是想将数据库中的数据翻倍,所以我觉得只需将表复制到新表即可缓解身份问题
    • @cricket_007 。 . .这个答案中没有任何内容建议创建一个新表。查询只是将表的数据重新插入到同一个表中。
    • 我知道,这可能行得通,但我只是建议像“插入 table2 select * from table1”之类的东西也会使数据库的大小加倍
    • @cricket_007 。 . .这是此答案中的第一个建议。
    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 2011-11-03
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多