You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MariaDB 11.8 and above allows to specify list of columns in the update
trigger and such trigger is fired only when one of the specified columns
is updated. The `INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS` table
lists all such columns for a trigger.
A column is shown only if the user has any non-SELECT privileges on the
column specified in the trigger.
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') GROUP BY TABLE_SCHEMA;
CREATE TRIGGER trigger_before_update BEFORE UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b, NEW.a, NEW.b);
2972
+
UPDATE t SET a = 10 WHERE a = 1;
2973
+
SELECT * FROM t;
2974
+
a b c
2975
+
10 2 3
2976
+
SELECT * FROM t1;
2977
+
a_old b_old a_new b_new
2978
+
1 2 10 2
2979
+
SHOW CREATE TRIGGER trigger_before_update;
2980
+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
2981
+
trigger_before_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_before_update BEFORE UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b, NEW.a, NEW.b) # # # #
2982
+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
CREATE TRIGGER trigger_after_update AFTER UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b, NEW.a, NEW.b);
2988
+
UPDATE t SET a = -10 WHERE a = 10;
2989
+
SELECT * FROM t;
2990
+
a b c
2991
+
-10 2 3
2992
+
SELECT * FROM t2;
2993
+
a_old b_old a_new b_new
2994
+
10 2 -10 2
2995
+
SHOW CREATE TRIGGER trigger_after_update;
2996
+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
2997
+
trigger_after_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_after_update AFTER UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b, NEW.a, NEW.b) # # # #
2998
+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_after_update';
CREATE TRIGGER trigger_before_update BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3032
+
UPDATE t, t1 SET t.c = t.c + 10 WHERE t.b = t1.a;
3033
+
SHOW CREATE TRIGGER trigger_before_update;
3034
+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3035
+
trigger_before_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_before_update BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b) # # # #
3036
+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
CREATE TRIGGER trigger_after_update AFTER UPDATE OF a ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b);
3041
+
SHOW CREATE TRIGGER trigger_after_update;
3042
+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3043
+
trigger_after_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_after_update AFTER UPDATE OF a ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b) # # # #
3044
+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_after_update';
# Test with normal trigger without list of columns. This should not list any rows in TRIGGERED_UPDATE_COLUMNS
3049
+
CREATE TABLE t (a INT, b INT, c INT);
3050
+
INSERT INTO t VALUES (1, 2, -3), (2, 3, -4);
3051
+
CREATE TABLE t1 (a INT, b INT);
3052
+
CREATE TRIGGER trigger_before_update BEFORE UPDATE ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3053
+
SHOW CREATE TRIGGER trigger_before_update;
3054
+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3055
+
trigger_before_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_before_update BEFORE UPDATE ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b) # # # #
3056
+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
0 commit comments