MySQL触发器检查行字段是否存在

标签 mysql sql triggers mariadb

我在表上创建了一个触发器,如下所示:

delimiter //
CREATE TRIGGER tb_ins BEFORE UPDATE ON tb
FOR EACH ROW
BEGIN
    IF (NEW.size <> size) THEN

    END IF;
END;//

问题是,单独更新 size 以外的任何字段都会给我一个错误,提示找不到这样的字段。

例如:

UPDATE tb SET color = 'red' WHERE id = 1;

给我一​​个没有找到字段的错误,因为更新不包含触发器需要的 size 字段。

我需要知道是否有办法检查我的触发器函数中是否存在特定的 ROW 字段。如何实现?

我需要等同于:

IF EXISTS(ROW.size) THEN

END IF;

最佳答案

错误与 UPDATE 语句中引用的列无关。

最大的问题是触发器主体中对 size 的不合格引用。如果目的是检测分配给 size 的值的变化,我们应该将 NEW.size 的值与 OLD.size 进行比较.


DELIMITER $$

DROP TRIGGER IF EXISTS tb_ins $$

CREATE TRIGGER tb_ins 
BEFORE UPDATE ON tb
FOR EACH ROW
BEGIN
   IF NOT (NEW.size <=> OLD.size) THEN
      -- value of size column has been modified
      BEGIN END;
   END IF;
END$$

THENEND IF 之间没有任何内容是无效的。我们必须在那里有一些东西。 MySQL 容忍一个空的 BEGIN END; block ,因此我们可以将其用作空操作。

目前尚不清楚您要实现的目标。

关于MySQL触发器检查行字段是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191940/

相关文章:

mysql - "Row_Number() over"语法错误

php - Ajax请求并使用php pdo复制一些行但更改一些值

查询 "undefined"列 (?) 时出现 SQL 错误

sql - 在 SQL Server 2008R2 中使用 CAST 函数除以 2 个数字

google-apps-script - onSelectionChange 在更改选项卡时重新触发自身

mysql - 如何在使用动态生成字段的 Sql Server 中添加?

mysql - SQL 显示多列

php - MySQL返回连接表的第一行

hadoop - 如何在Hive表中实现触发器概念

MySQL:更新触发器。如果不匹配任何行,获取 UPDATE 的 where 子句中使用的列的值?