mysql - 永久计算域mysql数据库

标签 mysql

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

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

最简单的解决方案是 MySQL 中的虚拟字段。我可以这样定义:active is not deactivated。这将使我能够通过一个 ALTER TABLE 来解决这个问题。现在我想知道这是否可能。到目前为止,我找不到任何迹象表明这是可能的,但最好在添加 6 小时的工作量之前询问一下。

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

最佳答案

好的,我找到了两种方法来完成这项工作:

  1. 生成的列: 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 。以防万一有人想给那个人投票。这确实运作得很好。但我期待着有一天我可以放弃这些触发器。

    干杯!

    关于mysql - 永久计算域mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615009/

    相关文章:

    php - 插入mysql日期时间和日期时间仅通过添加日期和时间

    mysql - 奇怪的 : MySQL Left Join, "unknown column";同样的 leftjoin 在多表查询中不起作用

    php - 在 mysql 中存储加密的字符串

    c# - 如何让我的组合显示来自两个表的数据

    php - 将相同的值插入数据库两次

    mysql - 如何删除一个表中的记录,该表的主键在另一个表中作为外键引用?

    PHP - 从数据库获取数据到 JSON

    php - while 中的变量数组

    php - 在一个 SQL 查询 (JOIN) 中获取一个普通表并从另一个表计数

    mysql - 连接多个表时删除重复行 - Mysql