CREATE TABLE archived_movies LIKE movies;
-- table ๊ตฌ์กฐ ๋ณต์ฌ
DROP TABLE archived_movies;
TRUNCATE TABLE archived_movies; -- table ๋ชจ๋ ๋ด์ฉ ์ญ์
DELIMITER $$ -- ๋ค๋ฅธ DELIMITER ์ฌ์ฉ
CREATE EVENT archive_old_movies
ON SCHEDULE EVERY 2 MINUTE
STARTS CURRENT_TIMESTAMP + INTERVAL 2 MINUTE
DO -- 1๊ฐ๋ DO๋ง ์ฌ์ฉ
BEGIN
INSERT INTO archived_movies
SELECT * FROM movies
WHERE release_date < YEAR(CURDATE()) - 20;
DELETE FROM movies WHERE release_date < YEAR((CURDATE()) - 20;
END$$
DELIMITER ;
DROP EVENT archive_old_movies;
#11.2 Recap
show events;
show create event ~~~;
#11.3 Triggers
-- before - insert, update, delete ์
-- after - insert, update, delete ํ
CREATE TABLE records (
record_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
changes tinytext,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);
INSERT INTO movies SELECT * FROM archived_movies WHERE movie_id = 2;
-- INSERT
CREATE TRIGGER before_movie_insert
BEFORE INSERT
ON movies
FOR EACH ROW
INSERT INTO records (changes) VALUES (CONCAT('Will Insert', NEW.title));
CREATE TRIGGER after_movie_insert
AFTER INSERT
ON movies
FOR EACH ROW
INSERT INTO records (changes) VALUES (CONCAT( 'Insert completed: ', NEW.TITLE));
-- UPDATE
CREATE TRIGGER before_movie_update
BEFORE UPDATE
ON movies
FOR EACH ROW
INSERT INTO records (changes) VALUES (CONCAT('Will update title: ', OLD.title, ' -> ', NEW.title));
CREATE TRIGGER after_movie_update
AFTER UPDATE
ON movies
FOR EACH ROW
INSERT INTO records (changes) VALUES (CONCAT('update completed: ', OLD.title, ' -> ', NEW.title));
-- DELETE
CREATE TRIGGER before_movie_delete
BEFORE DELETE
ON movies
FOR EACH ROW
INSERT INTO records (changes) VALUE (CONCAT('Will delete: ', OLD.title));
CREATE TRIGGER after_movie_delete
AFTER DELETE
ON movies
FOR EACH ROW
INSERT INTO records (changes) VALUE (CONCAT('Bye : ', OLD.title));
#11.4 Overpowered Trigger
SHOW TRIGGERS;
DROP TRIGGER after_movie_update;
TRUNCATE TABLE records;
DROP TRIGGER after_movie_update;
DELIMITER $$
CREATE TRIGGER after_movie_update
AFTER UPDATE
ON movies
FOR EACH ROW
BEGIN
DECLARE changes TINYTEXT DEFAULT '';
IF NEW.title <> OLD.title THEN
SET changes = CONCAT('Title Changed', OLD.title, '->', NEW.title, '\n ');
END IF;
IF NEW.budget <> OLD.budget THEN
SET changes = CONCAT(changes, 'Budget changed ', OLD.budget, '->', NEW.budget);
END IF;
INSERT INTO records (changes) VALUES (changes);
END$$
DELIMITER ;