티스토리 뷰
반응형
참고사이트 : https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
delimiter |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
|
delimiter ;
(코드는 참고사이트의 예제)
특정 테이블의 데이터를 업데이트 할 때 이전의 데이터를 백업해 두고 싶었다.
그래서 그 테이블에 BEFORE UPDATE Trigger를 생성해보았다.
MySQL Workbench에 생성하는 메뉴가 있길래 그 메뉴를 이용했다.
왼쪽의 테이블명에서 렌치 모양의 아이콘을 클릭하면, 테이블 수정 화면이 나오는데 그 화면 아래쪽에 있는 탭 중에 'Triggers'가 있다. 그것을 클릭하면 6가지 옵션이 나온다.
BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE
그 중의 하나를 클릭하면 위의 코드와 유사한 쿼리문이 나타난다.
CREATE DEFINER=`아이디`@`접속IP` TRIGGER `DB명`.`Trigger명` BEFORE UPDATE ON `Table명` FOR EACH ROW
BEGIN
END
BEGIN END 문 사이에 동작할 쿼리문을 입력하고 Apply 버튼을 클릭하면 된다.
이전 데이터를 백업할 쿼리문 예제는 아래와 같다.
CREATE DEFINER=`아이디`@`접속IP` TRIGGER `DB명`.`Trigger명` BEFORE UPDATE ON `Table명` FOR EACH ROW
BEGIN
INSERT INTO Backup_Table명 (
Columns...
) SELECT
Columns...
FROM Table명
WHERE PKColumn명 = NEW.PKColumn명;
END
삭제할 때에는 아래의 명령문을 실행하거나 생성했을 때의 옵션으로 가서 '-' 버튼을 클릭하면 된다.
DROP TRIGGER IF EXISTS Trigger명;
반응형
'DB > mariadb | mysql' 카테고리의 다른 글
maria db 용량 확인 (0) | 2021.12.22 |
---|---|
공백문자와 탭문자 제거 (0) | 2021.11.10 |
쿼리튜닝 - INSTR과 LIKE 속도 (0) | 2020.01.15 |
/*!40100 ... */ 주석문 (0) | 2019.06.11 |
Out of range value for column (0) | 2018.12.31 |