티스토리 뷰

반응형

참고사이트 : 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함