트리거는 데이터베이스 테이블에 대한 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 저장 프로시저입니다. 트리거는 데이터 무결성을 유지하고, 자동화된 데이터 검증 및 로깅 등에 유용하게 사용됩니다. 이번 글에서는 MSSQL에서 트리거를 작성하는 방법과 사용 예제를 소개하겠습니다.
트리거의 기본 구조
MSSQL에서 트리거는 다음과 같은 기본 구조를 가집니다:
AFTER와 INSTEAD OF 트리거
- AFTER 트리거: 지정된 이벤트가 발생한 후에 실행됩니다.
- INSTEAD OF 트리거: 지정된 이벤트 대신 실행됩니다.
트리거 작성 예제
INSERT 트리거
새로운 레코드가 삽입될 때 로그 테이블에 기록하는 트리거 예제입니다.
CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
DECLARE @empId INT, @empName NVARCHAR(100);
SELECT @empId = INSERTED.EmpID, @empName = INSERTED.EmpName
FROM INSERTED;
INSERT INTO EmployeeLog (EmpID, EmpName, LogDate)
VALUES (@empId, @empName, GETDATE());
END
UPDATE 트리거
기존 레코드가 업데이트될 때 변경 전후 값을 로그에 기록하는 트리거 예제입니다.
CREATE TRIGGER trgAfterUpdate
ON Employees
AFTER UPDATE
AS
BEGIN
DECLARE @oldName NVARCHAR(100), @newName NVARCHAR(100);
SELECT @oldName = DELETED.EmpName, @newName = INSERTED.EmpName
FROM DELETED, INSERTED;
INSERT INTO EmployeeLog (OldValue, NewValue, LogDate)
VALUES (@oldName, @newName, GETDATE());
END
DELETE 트리거
레코드가 삭제될 때 해당 레코드를 다른 테이블로 백업하는 트리거 예제입니다.
CREATE TRIGGER trgAfterDelete
ON Employees
AFTER DELETE
AS
BEGIN
INSERT INTO DeletedEmployees (EmpID, EmpName, DeletedDate)
SELECT EmpID, EmpName, GETDATE()
FROM DELETED;
END
트리거 관리
트리거를 생성한 후에는 필요에 따라 수정하거나 삭제할 수 있습니다.
트리거 수정
트리거를 수정할 때는 기존 트리거를 삭제하고 다시 생성해야 합니다.
DROP TRIGGER trgAfterInsert;
GO
CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
-- 수정된 트리거 내용
END
트리거 삭제
트리거를 삭제하려면 DROP TRIGGER 명령을 사용합니다.
DROP TRIGGER trgAfterInsert;
결론
트리거는 데이터베이스의 자동화된 작업을 구현하는 데 매우 유용한 도구입니다. 적절한 트리거를 사용하면 데이터 무결성을 유지하고, 복잡한 데이터 검증 및 로깅 작업을 자동화할 수 있습니다. 이번 글에서는 MSSQL에서 트리거를 작성하고 관리하는 기본적인 방법과 몇 가지 예제를 살펴보았습니다. 실습을 통해 트리거의 활용도를 높여보시기 바랍니다.