SQL trigger, assertion
1. trigger
1
2
3
4
CREATE TRIGGER trigger1 BEFORE INSERT ON table1 WHEN table2.field1 < 100
BEGIN
UPDATE table2 SET field1 = field1 * 1.1
END
- DB 시스템에 어떤 절차를 규정해 두어서, 절차 내 명시된 이벤트가 발생하여 일정 조건을 충족할 때 그에 따라 특정 동작을 수행하게 할 수 있다. 이처럼 이벤트 발생 - 조건 충족 - 동작 수행이라는 일련의 절차가 수행되도록 설정해둔 것을 ECA 규칙 또는 트리거라 한다. 트리거를 DB의 무결성을 유지하기 위해 활용할 수 있다.
- 트리거를 실행할 수 있게 하는 이벤트로는 INSERT, DELETE, UPDATE가 있으며, 각각의 전(BEFORE)/후(AFTER) 중 언제 트리거가 실행되게 할지를 선택할 수 있다.
- WHEN 예약어를 사용하여 트리거의 실행 여부를 조건식이 참이 될 때만 실행하게 할 수 있는데, 생략할 경우 지정한 이벤트가 일어나면 항상 그 트리거에서 지정한 동작을 실행한다.
2. assertion
- 그 DB에 관한 특정한 조건식을 지정하여, 이후 DB에 관한 어떤 연산을 실행시켰을 때 지정했던 조건식이 그 연산을 통해 위배되는 일이 발생하는지를 검사하고 위배된다면 그 연산을 실행시키지 않도록 할 수 있다. 이때 이와 같이 조건식을 지정한 것을 assertion이라 한다.
- 이 역시 DB의 무결성을 유지하기 위해 활용할 수 있으나, assertion을 지정해 두면 DB에 관한 연산을 수행할 때마다 지정된 assertion의 위배 여부를 검사해야 하므로 연산의 처리에 많은 overhead가 발생할 수 있다는 단점이 있다. (이러한 단점 탓인지 SQL3에 규정돼 있음에도 많은 DBMS에서 이 기능을 지원하지 않는다.)