永久计算字段mysql数据库

lawou6xi  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(480)

我正在尝试用不同的应用程序替换一个应用程序。在替换完成后,我们决定尝试同时使用这两种方法,这意味着两种方法都可以访问同一个数据库。还有一个问题。appold和appnew访问数据库的同一个表,假设它是一个用户表。appold有一个字段叫做 active 而appnew有一个名为 deactivated . table的其余部分是一样的。
所以,这是一种丑陋的解决方案,我可以处理对其中一个应用程序的更改,这并不理想,因为我需要更改在这个应用程序中使用的库,这些库正在使用该表,而这些库正在使用其他代码。或者我需要添加端点,以便一个应用程序可以实际调用另一个应用程序。
最简单的解决方案是在mysql中创建一个虚拟字段。我可以这样定义: active is not deactivated . 这将允许我用一个alter表来解决这个问题。现在我想知道这是否可能。到目前为止,我找不到任何可能的建议,但最好在增加6小时的工作量之前询问一下。
澄清一下:我不能更改select语句,因为它们是由orm完成的,orm又在库中完成,这些库也在不同的项目中使用。所以,我想添加一个列,它是由另一个列的对立面定义的,而不是保存值。出于同样的原因,我也不能调用存储过程。我认为这是不可能的,但请证明我错了。

nbysray5

nbysray51#

好吧,我找到了两种方法:
生成的列:https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html
我自己无法让它们工作,因为服务器的mysql版本低于5.7,而且从5.7以后才支持。
触发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-停用。看到deactivated是0或1,它总是完全相反的。我在这里发现了一个妙招:https://stackoverflow.com/a/1461135/9094259. 以防万一有人想给他一票。那确实很管用。但我期待着有一天我可以放下那些触发器。
干杯!

相关问题