【发布时间】:2018-12-04 14:21:54
【问题描述】:
我正在尝试用不同的应用程序替换一个应用程序。当替换就位时,我们决定尝试同时使用两者,这意味着让两者都访问同一个数据库。还有一个问题。 AppOld 和 AppNew 访问数据库的同一个表,假设它是一个用户表。 AppOld 有一个名为active 的字段,而AppNew 有一个名为deactivated 的字段。表格的其余部分是相同的。
因此,这是一种丑陋的解决方案,我可以在其中处理对其中一个应用程序的更改,这并不理想,因为我需要更改此应用程序中使用该表的库,而这些库是使用其他代码。或者我需要添加端点,以便一个应用程序可以实际调用另一个应用程序。
最简单的解决方案是 MySQL 中的虚拟字段。类似的东西我可以这样定义:active is not deactivated。这将允许我用一个 ALTER TABLE 来解决这个问题。现在我想知道这是否可能。到目前为止,我找不到任何暗示这是可能的,但最好在增加 6 小时的工作量之前询问。
只是为了澄清:我不能更改 SELECT 语句,因为这些是由 ORM 完成的,而这些 ORM 又在库中,也用于不同的项目。所以,我想添加一个与另一列相反定义的列,而不是保存值。出于同样的原因,我也不能调用存储过程。我认为这是可能的,但请证明我错了。
【问题讨论】:
-
即使使用 InnoDB 的在线 DDL,也不要介意我的最后一条评论,因为您想存储虚拟列,因此您正在考虑 6 小时的停机时间。此外,您真的需要存储计算/生成的字段吗?跨度>
-
反正我看不到你最后的评论,所以我不介意。我不需要存储它。但我需要在不更改 ORM 的情况下访问它。我只是在谷歌上搜索了一些,发现生成的虚拟列非常适合我的需要,但是 mysql 说它不知道语法。我现在正在研究触发器。
-
访问生成的列或由触发器“生成”的列也意味着通过忘记提及的方式更改选择查询。
标签: mysql