mysql - 如果一列或两列或两列都没有设置非空值,则 MySQL 触发器进行标记
问题描述
我有一张基本的桌子;我已经大大简化了它以使其更清晰。
user
....
user_id
ref_id_1
ref_id_2
user_value
total_ref
ref_id_1
andref_id_2
可以选择设置,如果设置了 and 2 中的一个或两个,我希望列计数total_ref
。ref_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 中最好地实现这样的触发器?还是替代方案?
解决方案
在@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。
推荐阅读
- jquery - Jquery ShapeShift:在拖放之前在拖动期间选择元素?
- javascript - 将 DD-MM-YYYY 转换为日期格式并将值设置为 html.Editor 不显示值
- java - 我可以通过作为流项目字段的 int 值的总和来限制 Java Stream 的长度吗?
- sharepoint - 外部用户无法在共享 SharePoint Online 网站的文档页面下创建新文件夹
- php - 会话数据不显示
- php - laravel5.8:GET 404(未找到)
- hive - 如何计算 Hive 中不包括假期的工作日数?
- c++ - 我可以只提供部分类定义作为使用命名空间构建的静态库的标头吗?
- c# - 在 Swagger 下拉列表和 json 上显示 Enum 成员友好名称
- php - 在php html中下载excel时出现问题