永久计算字段mysql数据库

时间:2018-12-04 14:21:55

标签: mysql

我正在尝试用其他应用程序替换应用程序。替换完成后,我们决定尝试同时使用两者,这意味着两者都访问同一个数据库。剩下一个问题。 AppOld和AppNew访问数据库的同一表,假设它是一个用户表。 AppOld的字段为active,而AppNew的字段为deactivated。该表的其余部分相同。

所以,这是一个丑陋的解决方案,我可以处理其中一个应用程序的更改,这并不理想,因为我需要更改正在使用该表的该应用程序中使用的库,并且使用其他代码。或者,我需要添加端点,以便一个应用程序可以实际调用另一个应用程序。

极其简单的解决方案是在MySQL中创建虚拟字段。我可以这样定义:active is not deactivated。这将使我能够使用一个ALTER TABLE解决此问题。现在我想知道那是否有可能。到目前为止,我找不到任何暗示可能的建议,但是最好在添加6小时工作负载之前先询问一下。

为澄清起见:我无法更改SELECT语句,因为这些语句是由ORM完成的,而ORM又位于库中,这些库也用于不同的项目中。因此,我想添加一个与另一列相反的定义的列,而不是保存值。由于同样的原因,我也无法调用存储过程。我认为这是不可能的,但是请证明我错了。

1 个答案:

答案 0 :(得分:0)

好的,我发现了两种方法可以完成这项工作:

  1. 生成的列: https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html

我无法让它们自己工作,因为服务器的MySql版本低于5.7,并且仅从5.7开始受支持。

  1. 触发 https://www.siteground.com/kb/mysql-triggers-use/

这是它们外观的简短示例。

CREATE TRIGGER ins_check BEFORE INSERT ON user
FOR EACH ROW
SET NEW.active = 1 - NEW.deactivated;

该触发器会自动将活动状态更改为1-停用。看到停用状态为0或1,则总是完全相反。我在这里找到了这个巧妙的窍门:https://stackoverflow.com/a/1461135/9094259。以防万一有人想给那个家伙投票。那确实很好。但是我很期待有一天可以放下这些触发器。

干杯!