我正在尝试用不同的应用程序替换一个应用程序。当替换完成后,我们决定尝试同时使用两者,这意味着两者都访问同一个数据库。还剩下一个问题。 AppOld 和 AppNew 访问数据库的同一个表,假设它是用户表。 AppOld 有一个名为 active
的字段,而 AppNew 有一个名为 deactivated
的字段。表的其余部分是相同的。
所以,这是一种丑陋的解决方案,我可以在其中处理对其中一个应用程序的更改,这并不理想,因为我需要更改此应用程序中使用该表的库,并且这些库是使用其他代码。或者我需要添加端点,以便一个应用程序实际上可以调用另一个应用程序。
最简单的解决方案是 MySQL 中的虚拟字段。我可以这样定义:active is not deactivated
。这将使我能够通过一个 ALTER TABLE 来解决这个问题。现在我想知道这是否可能。到目前为止,我找不到任何迹象表明这是可能的,但最好在添加 6 小时的工作量之前询问一下。
澄清一下:我无法更改 SELECT 语句,因为这些语句是由 ORM 完成的,而 ORM 又位于库中,也用于不同的项目。因此,我想添加一个与另一列相反定义的列,而不是保存值。出于同样的原因,我也无法调用存储过程。我认为这是可能的,但请证明我错了。
最佳答案
好的,我找到了两种方法来完成这项工作:
我自己无法让它们工作,因为服务器的 MySql 版本低于 5.7,并且仅从 5.7 开始支持。
这是一个简短的示例,展示了它们的外观。
CREATE TRIGGER ins_check BEFORE INSERT ON user
FOR EACH ROW
SET NEW.active = 1 - NEW.deactivated;
该触发器自动将事件更改为 1 - 停用。看到 deactivated 不是 0 就是 1,它总是完全相反的。我在这里发现了这个巧妙的技巧:https://stackoverflow.com/a/1461135/9094259 。以防万一有人想给那个人投票。这确实运作得很好。但我期待着有一天我可以放弃这些触发器。
干杯!
关于mysql - 永久计算域mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615009/