Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

 trigger-33083.test  Interaktion und
Portierbarkeitunbekannt

 
Spracherkennung für: .test vermutete Sprache: SQL {SQL[198] ABAP[102] VDM[66]} [Methode: maximale Elemente, drei Dimensionen]

#
# MDEV-33083 "AFTER UPDATE" trigger does not fire if no data change in "ON DUPLICATE KEY UPDATE"
# Verify that INSERT..ON DUPLICATE KEY UPDATE behaves the same as normal UPDATE wrt triggers
# in case of updates that do not change data. We expect both BEFORE and AFTER to be fired,
# and also the same behavior in case of trigger failures.
#

--echo #
--echo # Test with triggers that succeed
--echo #

CREATE TABLE t1 (id INT PRIMARY KEY, val INT);
CREATE TABLE log (id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255));

INSERT INTO t1 VALUES (1, 1);

CREATE TRIGGER t1_before_update BEFORE UPDATE ON t1 FOR EACH ROW
  INSERT INTO log (msg) VALUES ('before update');

CREATE TRIGGER t1_after_update AFTER UPDATE ON t1 FOR EACH ROW
  INSERT INTO log (msg) VALUES ('after update');

--echo #
--echo # Normal UPDATE with no data change
--echo # Expected: Both BEFORE and AFTER triggers fire.
--echo #
TRUNCATE log;
UPDATE t1 SET val = 1 WHERE id = 1;
SELECT * FROM log ORDER BY id;
TRUNCATE log;

--echo #
--echo # INSERT ... ON DUPLICATE KEY UPDATE with no data change
--echo # Expected: Both BEFORE and AFTER triggers fire.
--echo #
INSERT INTO t1 (id, val) VALUES (1, 1) ON DUPLICATE KEY UPDATE val = 1;
SELECT * FROM log ORDER BY id;
TRUNCATE log;

--echo #
--echo # Part 2: Test with triggers that fail
--echo #

DROP TRIGGER t1_before_update;
DROP TRIGGER t1_after_update;

--echo #
--echo # Failing BEFORE UPDATE trigger
--echo #
CREATE TRIGGER t1_before_update_fail BEFORE UPDATE ON t1 FOR EACH ROW
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Error in BEFORE UPDATE';

--echo #
--echo # Normal UPDATE with no data change (fails due to BEFORE trigger)
--echo #

--error ER_SIGNAL_EXCEPTION
UPDATE t1 SET val = 1 WHERE id = 1;

--echo # INSERT ... ON DUPLICATE KEY UPDATE with no data change (fails due to BEFORE trigger)´
TRUNCATE log;
--error ER_SIGNAL_EXCEPTION
INSERT INTO t1 (id, val) VALUES (1, 1) ON DUPLICATE KEY UPDATE val = 1;

DROP TRIGGER t1_before_update_fail;

CREATE TRIGGER t1_before_update_log BEFORE UPDATE ON t1 FOR EACH ROW
  INSERT INTO log (msg) VALUES ('before update');
CREATE TRIGGER t1_after_update_fail AFTER UPDATE ON t1 FOR EACH ROW
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Error in AFTER UPDATE';

--echo #
--echo # Failing AFTER UPDATE trigger
--echo #

--error ER_SIGNAL_EXCEPTION
UPDATE t1 SET val = 1 WHERE id = 1;
SELECT * FROM log ORDER BY id;
TRUNCATE log;

--echo #
--echo # Test ON DUPLICATE  KEY UPDATE with no data change (failing AFTER UPDATE trigger)
--echo #

--error ER_SIGNAL_EXCEPTION
INSERT INTO t1 (id, val) VALUES (1, 1) ON DUPLICATE KEY UPDATE val = 1;
SELECT * FROM log ORDER BY id;

--echo #
--echo # Cleanup
--echo #
DROP TABLE t1, log;

[Konzepte0.19Was zu einem Entwurf gehörtWie die Entwicklung von Software durchgeführt wird2026-10-08]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1867298