0

We have the following trigger to ensure that a version field is updated in a related table, normally the trigger contains only the UPDATE statement, the INSERTs are added for debugging and to explain the problem:

CREATE TRIGGER `tableB_ins` BEFORE INSERT ON `tableB`
 FOR EACH ROW 
   BEGIN
     IF @`entityVersion` IS NOT NULL THEN
   INSERT INTO debug_log 
     VALUES (null, now(), "tableB_ins 1", NEW.taskId, IFNULL(@`entityVersion`, "WAS NULL"), ROW_COUNT());

   UPDATE tableA SET entityVersion = @`entityVersion` WHERE taskId = NEW.taskId;

   INSERT INTO debug_log 
     VALUES (null, now(), "tableB_ins 2", NEW.taskId, IFNULL(@`entityVersion`, "WAS NULL"), ROW_COUNT());

   SET @`entityVersion` := null;
 END IF;

END ;;

The @entityVersion variable is set in a separate request before the INSERT into tableB, which is working as expected. Sometimes we get the situation, that @entityVersion is not set and is therefore null. But randomly the above UPDATE and the debug INSERTs are still called, which should be prevented by the IF @entityVersion IS NOT NULL clause.

The content in the debug_log table is:

| 155 | 2022-10-11 12:39:18 | tableB_ins 1      | b613 | WAS NULL | -1           |
| 156 | 2022-10-11 12:39:18 | UPDATE WAS CALLED | b613 | 11       | 0            |
| 157 | 2022-10-11 12:39:18 | tableB_ins 2      | b613 | WAS NULL | 1            |

The final question: how can it be, that the inserts are added with "WAS NULL", which means that @entityVersion was null, although the IF NOT NULL is surround the statements? How can that be?

0 Answers0