MySQL - 视图替代

时间:2008-12-01 21:28:47

标签: mysql

我开发了一个使用MySQL 5的应用程序,它使用Views来访问主要数据。事实证明,我们的生产服务器使用MySQL 4,它没有包含视图。

有没有人有一种快速而肮脏的方式来解决这个问题,而不涉及重写我的所有代码?

4 个答案:

答案 0 :(得分:2)

这无疑指出了在开发和生产环境中使用相同技术的重要性!

涉及触发器或存储过程的变通办法不起作用,因为MySQL 4.x也不支持这些变通方法。

此时您的选择:

  • 重写应用程序代码以复制非规范化表格中的数据,以便与您的观点相匹配。

  • 将您的生产数据库升级到MySQL 5.0。如果您正在谈论托管服务提供商,请联系该提供商并询问他们是否有MySQL 5.0选项,否则您需要重新定位到提供商。

我建议使用后一种方法,它比编写代码来管理重复数据要少得多。

请注意,MySQL 4.1在四年前作为生产软件发布。此版本的主动支持于2006年结束。对MySQL 4.1的扩展支持将于2009-12-31结束。见http://www.mysql.com/about/legal/lifecycle/

答案 1 :(得分:2)

想到的快速而又非常脏的方法是将DBI子类化并在那里重新编写SQL。当然,取决于你正在使用的视图,如果你的意思是MySQL 4.0(没有子查询)或MySQL 4.1(确实有子查询)。

如果您使用的是4.1,则可以转为:

CREATE VIEW foo AS
  SELECT a, b, c FROM real_table WHERE fooable = 1;

SELECT * FROM foo;

SELECT v1.* FROM (
  SELECT a, b, c FROM real_table WHERE fooable = 1
) v1;

至少,后一种语法适用于5.0.x,我认为它也应该在4.1.x中。

如果你在4.0 ......好吧,那就不那么容易了。

答案 2 :(得分:1)

哎哟。除了DeLorean和磁通电容器或升级服务器,我不知道有什么简单的方法可以解决这个问题。很多变化似乎是必要的。

答案 3 :(得分:0)

不幸的是,如果没有升级到MySQL 5,可能不会。