2008-12-01 79 views
2

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

有没有人有一个快速和肮脏的方式来处理这不涉及重写我的所有代码?

+0

升级生产服务器? :) – Greg 2008-12-01 21:32:03

+0

男人,我知道MySQL是一个玩具,但我不知道... – 2008-12-01 21:40:44

+0

@Paul:三年前发布了MySQL 5.0,支持视图,触发器和存储过程。较旧版本的任何软件都可能被视为较弱。 – 2008-12-01 21:53:59

回答

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/

+0

谢谢 这是,可悲的是,我的雇主。他们在生产和开发服务器上有不同的环境,甚至不愿意告诉他们的程序员。升级不是一种选择。我想知道Joel测试会对此有何评论? – MattBelanger 2008-12-01 21:44:16

0

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

1

ouch。除了DeLorean和助焊剂电容器或升级服务器之外,我不知道有什么简单的方法可以解决此问题。很多改变似乎是必要的。

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版本,那么它不会那么容易。