Transactions
- 여러 쿼리문을 묶어서 하나의 작업처럼 처리하는 방법
- 다 성공 혹은 다 실패 해야하는 작업
- ex) 계좌이체 - 인출 이후 입금이 안되면 처음부터 없었던 거래로 만들어야 한다.
Transaction Syntax
- START TRANSACTION
- COMMIT
- 모든 작업이 정상적으로 완료되면 한꺼번에 DB에 반영
- ROLLBACK
- 부분적으로 작업이 실패하면 모든 연산을 취소하고 실행 전으로 되돌림
START TRANSACTION;
state_ments;
...
[ROLLBACK|COMMIT];
START TRANSACTION;
INSERT INTO users (name)
VALUES ('DAMI'),('DAM');
ROLLBACK;|COMMIT;
SELECT * FROM users;
Triggers
- 특정 이벤트에 대한 응답으로 자동으로 실행 되는 것
Triggers Syntax
- CREATE TRIGGER 키워드 다음에 생성하려는 트리거의 이름을 지정
- 각 레코드의 어느 시점에 트리거가 실행 될 지 지정(삽입,수정,삭제 전/후)
- ON 키워드 뒤에 트리거가 속한 테이블의 이름을 지정
- 트리거가 활성화 될 때 실행할 코드를 TRIGGER_BODY에 지정
- 여러 명령문을 실행하려면 BEGIN END 키워드로 묶어서 사용
[DELIMITER
CREATE TRIGGER trigger_name
{BEFORE|AFTER} {INSERT|UPDATE|DELETE}
ON table_name FOR EACH ROW
[BEGIN]
trigger_body;
...;
...;
[END
[DELIMITER;]
- SHOW TRIGGERS; (트리거 목록 확인)
- DROP TRIGGER trigger_name; (해당 트리거 삭제)
DELIMITER
CREATE TRIGGER mytrigger
BEFORE UPDATE
ON users FOR EACH ROW
BEGIN
SET NEW.updatedAt = CURRENT_TIME();
END
DELIMITER ;
DELIMITER
CREATE TRIGGER recordLogs
AFTER INSERT
ON users FOR EACH ROW
BEGIN
INSERT INTO usersLogs (description, createdAt)
VALUES('글이 작성 되었습니다', CURRENT_TIME());
END
DELIMITER ;