티스토리 뷰
반응형
mysql> create table testtbl( id int, txt varchar(10));
mysql> insert into testtbl values (1,'exid');
mysql> insert into testtbl values(2,'gfriend');
mysql> insert into testtbl values(3,'ioi');
mysql> delimiter $$
mysql> create trigger testtg --- 트리거 생성
-> after delete -- 삭제가 되면 발생
-> on testtbl -- testtbl 에 붙여주세요
-> for each row -- 각 행마다
-> begin
-> set @msg = 'deleted'; -- 전역변수 msg에 deleted 넣어주세요
-> end $$
mysql> delimiter ;
mysql> set @msg = ' ';
mysql> insert into testtbl values(4, 'wannaone'); -- 값 넣을때
mysql> select @msg; -- 발생 안
+------+
| @msg |
+------+
| |
+------+
mysql> update testtbl set txt='apink' where id = 3; -- update시에도 발생 안함
mysql> select @msg;
+------+
| @msg |
+------+
| |
+------+
mysql> delete from testtbl where id = 4; -- 지웠을때만 발생
mysql> select @msg;
+---------+
| @msg |
+---------+
| deleted |
+---------+
mysql> delimiter $$
mysql> create trigger inttg
-> after insert
-> on testtbl
-> for each row
-> begin
-> set @msg = 'in';
-> end $$
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> set @msg = ' ';
Query OK, 0 rows affected (0.00 sec)
mysql> insert into testtbl values (6,'H.O.T.');
Query OK, 1 row affected (0.00 sec)
mysql> select @msg;
+------+
| @msg |
+------+
| in |
+------+
1 row in set (0.00 sec)
mysql> create table backup_userTbl
(userID char(8) not null primary key
-> name varchar(10) not null,
-> birthYear int not null,
-> addr char(2) not null,
-> mobile1 char(3),
-> mobile2 char(8),
-> height smallint,
-> mDate date,
-> modType char(2),
-> modDate date,
-> modUser varchar(256));
새로운 테이블은 insert,update 작업시에 변경할 새로운 데이터를 잠깐 저장해 놓는다
즉 ,insert,update 트리거를 부착시켜 해당 명령이 수행되면 입력/변경 될 새 값이 새로운 테이블에 저장 된 후에 새로운 테이블의 값이 원 테이블에 입력, 변경 되는것이다
a (입력,수정) -> a1 저장(new) -> a에 적용
그러므로 새로운 테이블을 조작하면 입력되는 새로운 값을 다른값으로 대체시킬수 있다<?
그리고 old 테이블은 delete와 update 작업수행을 하면 삭제변경 되기 전의 예전값이 저장된다.
결론적으로 트리거의 작동시에 새로입력/변경되는 새로운값의 데이터를 참조하기 위해선 new 테이블을, 예전데이터를
참조 하고 싶으면 old 테이블을 참조한다.
트리거 생성
backUserTbl_UpdateTrg
update뒤에 발생
usertbl에 부착,
각 행별로
insert into backup_userTbl values (OLD.userID, OLD.name, OLD.birthYear, OLD.addr, OLD.mobile1, OLD.mobil2, OLD.height, OLD.mDate,'modify',curdate(),current_user());
mysql> delimiter $$
mysql> create trigger backUserTbl_UpdtatTrg
-> after update
-> on userTbl
-> for each row
-> begin
-> insert into backup_userTbl values(OLD.userID, OLD.name,OLD.birthYear,OLD.addr,OLD.mobile1, OLD.mobile2, OLD.height, OLD.mDate, 'modify',curdate(),current_user());
-> end $$
mysql> delimiter ;
mysql>
트리거 생성
backUsertbl_DeleteTrg
delete 뒤에 발생
userTbl에 부착
각 행별로
insert into backup_userTbl values(OLD.userID, OLD.name, OLD.birthYear, OLD.addr, OLD.mobile1, OLD.mobil2, OLD.height, OLD.mDate,'delete',curdate(),current_user())
create trigger backUserTbl_UpdtatTrg
after update on userTbl
for each row
begin insert into backup_userTbl
values(OLD.userID,
OLD.name,
OLD.birthYear,
OLD.addr,
OLD.mobile1,
OLD.mobile2,
OLD.height,
OLD.mDate,
'modify',
curdate(),
current_user());
end$$
delimiter $$
mysql> create trigger backUserTbl_DeleteTrg
after delete on userTbl
for each row
begin
insert into backup_userTbl values
(OLD.userID,
OLD.name,
OLD.birthYear,
OLD.addr,
OLD.mobile1,
OLD.mobile2,
OLD.height,
OLD.mDate,
'delete',
curdate(),
current_user());
end$$
mysql> delimiter ;
mysql> update userTbl set height=165 where userID='BBK';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from backup_userTbl;
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| userID | name | birthYear | addr | mobile1 | mobile2 | height | mDate | modType | modDate | modUser |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| BBK | 바비킴 | 1973 | 서울 | 010 | 0000000 | 176 | 2013-05-05 | modify | 2019-09-09 | root@localhost |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
-- 여기서 잠깐.. backup_userTbl에 primarykey 를 설정해버리면 update를 같은건 두번다시 못한다. 프라이머리 키 설정을 해제하자.
mysql> update userTbl set height=165 where userID='BBK';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select * from backup_userTbl;
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| userID | name | birthYear | addr | mobile1 | mobile2 | height | mDate | modType | modDate | modUser |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| BBK | 바비킴 | 1973 | 서울 | 010 | 0000000 | 165 | 2013-05-05 | modify | 2019-09-09 | root@localhost |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
1 row in set (0.00 sec)
mysql> update userTbl set height=176 where userID='BBK'; Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from backup_userTbl;
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| userID | name | birthYear | addr | mobile1 | mobile2 | height | mDate | modType | modDate | modUser |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| BBK | 바비킴 | 1973 | 서울 | 010 | 0000000 | 165 | 2013-05-05 | modify | 2019-09-09 | root@localhost |
| BBK | 바비킴 | 1973 | 서울 | 010 | 0000000 | 165 | 2013-05-05 | modify | 2019-09-09 | root@localhost |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
2 rows in set (0.00 sec)
mysql> delete from userTbl where userID='LSG';
Query OK, 1 row affected (0.00 sec)
mysql> select * from backup_userTbl;
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| userID | name | birthYear | addr | mobile1 | mobile2 | height | mDate | modType | modDate | modUser |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
| BBK | 바비킴 | 1973 | 서울 | 010 | 0000000 | 165 | 2013-05-05 | modify | 2019-09-09 | root@localhost |
| BBK | 바비킴 | 1973 | 서울 | 010 | 0000000 | 165 | 2013-05-05 | modify | 2019-09-09 | root@localhost |
| LSG | 이승기 | 1987 | 서울 | 011 | 1111111 | 182 | 2008-08-08 | delete | 2019-09-09 | root@localhost |
+--------+-----------+-----------+--------+---------+---------+--------+------------+---------+------------+----------------+
3 rows in set (0.00 sec)
반응형
'MySQL' 카테고리의 다른 글
mysql 에서 '' 값 찾기 (0) | 2020.10.20 |
---|---|
190909 고객등급 프로시저 (0) | 2019.09.09 |
190906 while 구구단 프로시저 (0) | 2019.09.09 |
190830 mysql in, out 프로시저 (0) | 2019.09.09 |
mysql max_allowed_packet 에러 (0) | 2019.09.03 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정규식
- 인텔리제이
- ''찾기
- mybatis
- SpringXmlModelInspection
- no getter for property named
- 엑셀다운로드
- selectbox
- spring 엑셀
- 정규식 한글만
- js
- spring error #
- select제어
- 이메일 정규식
- poi 엑셀
- POI EXCEL
- 정규식 특수문자
- Spring
- jQuery
- poi
- Regex
- PageNotFound - No mapping for GET
- 공백찾기
- 정규식 숫자만
- 계좌번호정규식
- JSON파싱
- JSON
- Failed to load resource: the server responded with a status of 404 (Not Found)
- JSON날짜
- IntelliJ #gradle #tomcat #spring #springmvc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함