mysql - MySQL 触发器在许多 int (0/1) 上更新 varchar depwnding
问题描述
我有一个这样的表
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| _id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | | NULL | |
| kategori | varchar(50) | NO | | NULL | |
| GR | int(1) | NO | | NULL | |
| WW | int(1) | NO | | NULL | |
| FS | int(1) | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
我想Kategori
每次都更新GR
,WW
或者FS
被改变了。
而 if GR
, WW
or FS
is1
的值应该是GR, WW, FS
for kategori
。
IF GR=1
,WW=0
并且FS=1
值应该是GR, FS
类别等。
我找不到可以工作的触发器。
解决方案
以下触发器应该可以解决问题。
它在更新表之前运行,如果没有为该kategory
字段指定值,则检查 、 和 的值GR
以WW
设置FS
它。
触发器认识到UPDATE
可能会在未设置所有 3 个字段的情况下发生的事实:在这种情况下,它会查找数据库中字段的现有值。这应该允许kategori
在这种情况下与数据保持同步。
delimiter $$
CREATE TRIGGER updateMyTable
BEFORE UPDATE ON my_table
FOR EACH ROW
BEGIN
IF NEW.kategori IS NULL THEN
IF COALESCE(NEW.GR, OLD.GR) = 1 THEN
SET NEW.kategori = IF( NEW.kategori IS NULL, 'GR', CONCAT(NEW.kategori, ',', 'GR') );
END IF;
IF COALESCE(NEW.WW, OLD.WW) = 1 THEN
SET NEW.kategori = IF( NEW.kategori IS NULL, 'WW', CONCAT(NEW.kategori, ',', 'WW') );
END IF;
IF COALESCE(NEW.FS, OLD.FS) = 1 THEN
SET NEW.kategori = IF( NEW.kategori IS NULL, 'FS', CONCAT(NEW.kategori, ',', 'FS') );
END IF;
END IF;
END$$
delimiter ;
推荐阅读
- ios - 是否可以使用 swift 将用户输入输出到 .csv?
- r - 奇怪的坐标单位
- r - 根据逻辑向量中的值创建数字向量 - R
- docker - 使用 SCP 将文件/文件夹直接从运行在 Web 主机上的 docker 容器下载/上传到本地机器/从本地机器下载/上传文件/文件夹
- python - Python 数字格式
- tkinter - exe文件和机器人框架
- java - 在火花数据集中使用 java.util.date
- javascript - React 从同一个 index.js 的不同 HTML 页面渲染多个 DOM 元素
- javascript - Cpanel:单击按钮时要加载PHP内容
- sql - 在具有许多参数的过程中查询