화요일, 2월 09, 2021

[유튜브 방송] (즐겁게 배우는 SQL #47) 트리거 - 트리거

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 47편을 공개해드리겠다. 47편은 트리거를 소개한다.

2021년 2월 9일자 [즐겁게 배우는 SQL #47] 트리거 - 트리거 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 트리거 기본 형식
  • 07:13 BEFORE INSERT 트리거 예제
  • 13:03 AFTER UPDATE 트리거 예제
  • 17:47 트리거 제거 예제

원본 학습자료는 SQLite Trigger를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 트리거 기본 형식
    CREATE TRIGGER [IF NOT EXISTS] trigger_name 
       [BEFORE|AFTER|INSTEAD OF] [INSERT|UPDATE|DELETE] 
       ON table_name
       [WHEN condition]
    BEGIN
     statements;
    END;
    
  • 단계 2: BEFORE INSERT 트리거 예제
    1. SQL> CREATE TABLE leads ( id integer PRIMARY KEY, first_name text NOT NULL, last_name text NOT NULL, phone text NOT NULL, email text NOT NULL, source text NOT NULL );
    2. SQL> CREATE TRIGGER validate_email_before_insert_leads BEFORE INSERT ON leads BEGIN SELECT CASE WHEN NEW.email NOT LIKE '%_@__%.__%' THEN RAISE (ABORT,'Invalid email address') END; END;
    3. SQL> INSERT INTO leads (first_name,last_name,email,phone) VALUES('John','Doe','jjj','4089009334');
    4. SQL> INSERT INTO leads (first_name, last_name, email, phone) VALUES ('John', 'Doe', 'john.doe@sqlitetutorial.net', '4089009334');
    5. SQL> INSERT INTO leads (first_name, last_name, email, phone, source) VALUES ('John', 'Doe', 'john.doe@sqlitetutorial.net', '4089009334', 'company');
    6. SQL> SELECT * FROM leads;
  • 단계 3: AFTER UPDATE 트리거 예제
    1. SQL> CREATE TABLE lead_logs ( id INTEGER PRIMARY KEY, old_id int, new_id int, old_phone text, new_phone text, old_email text, new_email text, user_action text, created_at text );
    2. SQL> CREATE TRIGGER log_contact_after_update AFTER UPDATE ON leads WHEN old.phone <> new.phone OR old.email <> new.email BEGIN INSERT INTO lead_logs ( old_id, new_id, old_phone, new_phone, old_email, new_email, user_action, created_at ) VALUES ( old.id, new.id, old.phone, new.phone, old.email, new.email, 'UPDATE', DATETIME('NOW') ); END;
    3. SQL> UPDATE leads SET last_name = 'Smith' WHERE id = 1;
    4. SQL> UPDATE leads SET phone = '4089998888', email = 'john.smith@sqlitetutorial.net' WHERE id = 1;
    5. SQL> SELECT old_phone, new_phone, old_email, new_email, user_action FROM lead_logs;
  • 단계 4: 트리거 제거 예제
    1. SQL> DROP TRIGGER validate_email_before_insert_leads;
EOB

댓글 없음:

댓글 쓰기