Last active
October 30, 2023 10:07
-
-
Save rksk/908a7edfa6f735183448aeecedfd65ef to your computer and use it in GitHub Desktop.
MySQL: Logging table changes into another table using triggers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This is related to the blog post: https://medium.com/p/5215c77083e5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE TABLE data ( | |
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, | |
timestamp TIMESTAMP, | |
data1 VARCHAR(255) NOT NULL, | |
data2 DECIMAL(5,2) NOT NULL | |
); | |
CREATE TABLE data_log ( | |
action VARCHAR(255), | |
action_time TIMESTAMP NULL DEFAULT NULL, | |
id INT, | |
timestamp TIMESTAMP NULL DEFAULT NULL, | |
data1 VARCHAR(255) NULL, | |
data2 DECIMAL(5,2) NULL | |
); | |
DROP TRIGGER IF EXISTS ai_data; | |
DELIMITER $$ | |
CREATE TRIGGER ai_data AFTER INSERT ON data | |
FOR EACH ROW | |
BEGIN | |
INSERT INTO data_log (action, action_time, id, timestamp, data1, data2) | |
VALUES('insert', NOW(), NEW.id, NEW.timestamp, NEW.data1, NEW.data2); | |
END$$ | |
DELIMITER ; | |
DROP TRIGGER IF EXISTS au_data; | |
DELIMITER $$ | |
CREATE TRIGGER au_data AFTER UPDATE ON data | |
FOR EACH ROW | |
BEGIN | |
INSERT INTO data_log (action, action_time, id, timestamp, data1, data2) | |
VALUES('update', NOW(), NEW.id, NEW.timestamp, NEW.data1, NEW.data2); | |
END$$ | |
DELIMITER ; | |
DROP TRIGGER IF EXISTS ad_data; | |
DELIMITER $$ | |
CREATE TRIGGER ad_data AFTER DELETE ON data | |
FOR EACH ROW | |
BEGIN | |
INSERT INTO data_log (action, action_time, id, timestamp, data1, data2) | |
VALUES('delete',NOW(), OLD.id, OLD.timestamp, OLD.data1, OLD.data2); | |
END$$ | |
DELIMITER ; | |
INSERT INTO data (timestamp, data1, data2) | |
VALUES ('2018-10-03 15:23:54', 'some text', 45.28); | |
UPDATE data | |
SET data1 = 'updated value' | |
WHERE data2 = 45.28; | |
DELETE FROM data | |
WHERE data1 = 'updated value'; | |
SELECT * FROM data_log; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment