【问题标题】:Merge and Alias of two MySQL tables两个MySQL表的合并和别名
【发布时间】:2010-02-28 21:29:21
【问题描述】:

我有两张桌子:membersmembers_data
它们都共享相同的唯一自动增量id 键和唯一username 字段。

我想将这两个表合并为一个 members 表,但是我有大约 50 个使用 membersmembers_data 引用的脚本。我还需要某种别名设置,以使我的 members_data 查询指向新的 members 表。

这可能吗?

【问题讨论】:

    标签: mysql merge alias


    【解决方案1】:

    您可以通过创建一个仅从另一个表执行 SELECT * 的视图来有效地将一个表别名为另一个表。然而,这不是一件好事:

    • 它让未来的代码维护者感到困惑,因为它的视图实际上是另一个表(他们当然可以在源代码中查看您的视图**)
    • 在某些情况下,优化器可能效率低下
    • 这不是重构事物的正确方式。

    但是,取决于测试这“50 个脚本”的难易程度和它们的重要性(提示:难以测试的非常关键的代码可能会真正阻碍有效的开发),创建视图可能是短期内要做的务实的事情(在实际应用中,短期解决方案通常会保留数年或永远存在)。

    如果可行,我敦促您更改“50 个脚本”并进行所有必要的测试以发布此类更改。在我们的团队中,我们进行了更改(在一个版本中),修改了“50 多个脚本”,但测试当然证明具有挑战性(或至少很耗时)。

    随着应用程序变得越来越大、越来越复杂,回归测试变得越来越困难。尽可能多地考虑这一点至关重要,因为重构将变得必要(假设应用程序得到了开发或维护),而且回归是不好的。

    ** 当然,您所有的表、视图等都已编写脚本并在您的源代码管理系统中!

    【讨论】:

    • 从我刚刚阅读的内容来看,我无法使用视图,因为它不适用于 UPDATE 查询(我需要更新 members_data 才能在删除表后实际更新成员。 ) 我认为我必须更改脚本,因为它说视图也没有优化,而且我不能长时间使用它!感谢您的帮助
    • 您应该能够更新视图,除非它的定义方式使得更新毫无意义。 “SELECT * from t”视图应该没问题。
    【解决方案2】:

    它们都共享相同的唯一自动增量 ID 键和唯一的用户名字段。

    这句话是毫无意义的gobbledy-gook。在 MySQL(或大多数 rDBMS 中两个表可以共享列)中没有办法。

    我怀疑您的问题可能有几个可能的答案,但如果没有看到实际的架构,很难说清楚。

    假设您的意思是这两个表都有一个唯一的用户名字段,并且两个表中的大小相同,并且两个表都有一个名为 id 的自动增量列,那么事情就更清楚了 - 在这种情况下创建实现两个基础表中的列的复合表,将数据迁移到其中并用视图替换 2 个原始表。

    C.

    【讨论】:

    • 对不起,我不应该说共享,也许如果我告诉你他们都有相同的行数会有所帮助。
    • 行?不,这根本没有帮助。
    • 每个成员都有一个唯一的 id 每个成员在 members 和 members_data 中都有一行
    猜你喜欢
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2010-10-18
    • 2012-11-08
    相关资源
    最近更新 更多