首页 > 解决方案 > 如果一列或两列或两列都没有设置非空值,则 MySQL 触发器进行标记

问题描述

我有一张基本的桌子;我已经大大简化了它以使其更清晰。

user
....
user_id
ref_id_1
ref_id_2
user_value
total_ref

ref_id_1andref_id_2可以选择设置,如果设置了 and 2 中的一个或两个,我希望列计数total_refref_id_1因此,如果我创建一个ref_id_2设置为 12 且ref_id_1为 NULL 的记录,则total_ref值应为 1。

如果我将记录更新ref_id_1为 6,那么total_ref应该是 2。如果我更新并删除一个值并将其设置为 NULL,那么 total_ref 应该是 1。两个 ref 的值并不重要,只有它们有一个值集。

触发器是管理此问题的最佳方法吗?我需要这个,因为 total_ref 将用于拆分 total_value;如果是 2,那么我减半,如果是 1,那么我不减半。

如何在 MySQL 中最好地实现这样的触发器?还是替代方案?

标签: mysql

解决方案


在@Barmar 的帮助下

ALTER TABLE user
ADD COLUMN total_ref INT (1)
GENERATED ALWAYS AS ((ref_id_1 IS NOT NULL) + (ref_id_2 IS NOT NULL)) STORED;

不同之处在于括号(没有它是无效的),如果我只使用 AS 它不会更改更新时的 total_refs。


推荐阅读