MySQL - CREATE TRIGGER: 초보자 가이드

안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 MySQL 트리거의 매력적인 세상으로 창入할 것입니다. 프로그래밍에 처음이시라면 걱정하지 마세요; 이 여정에서 여러분의 친절한 안내자가 되겠습니다. 이 튜토리얼의 끝을 맺을 때까지, 여러분은 프로처럼 트리거를 생성할 수 있을 것입니다!

MySQL - Create Trigger

트리거는 무엇인가요?

트리거를 생성하기 전에, 먼저 그것이 무엇인지 이해해 보겠습니다. 상상해 보세요, 문을 두드릴 때 항상吠える 충성스러운 개가 있다고요. 데이터베이스 세계에서 트리거는 그 개와 같습니다 - 데이터베이스에서 특정 이벤트가 발생할 때 자동으로 활성화되는 응답입니다.

정의

트리거는 테이블과 연결된 이름이 있는 데이터베이스 객체로, 해당 테이블에서 특정 이벤트가 발생할 때 자동으로 활성화됩니다.

MySQL에서 트리거 생성하기

이제 트리거가 무엇인지 알았으니, MySQL에서 그것을 어떻게 생성하는지 배워보겠습니다. 마법의 새로운 신기술을 배우는 것처럼, 하지만 마법仗을 흔드는 대신 명령어를 타이핑할 것입니다!

기본 문법

CREATE TRIGGER 문의 기본 구조는 다음과 같습니다:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
trigger_body;

이를 해부해 보겠습니다:

  1. trigger_name: 여러분이 트리거를 부르는 이름입니다. 그것이 무엇을 하는지 설명하는 이름을 선택하세요.
  2. {BEFORE | AFTER}: 트리거가 활성화되는 시점을 결정합니다 - 지정된 이벤트 전이나 후입니다.
  3. {INSERT | UPDATE | DELETE}: 트리거를 활성화시키는 이벤트입니다.
  4. table_name: 트리거와 연결된 테이블입니다.
  5. FOR EACH ROW: 이벤트에 영향을 받는 각 행에 대해 트리거가 활성화됩니다.
  6. trigger_body: 트리거가 활성화될 때 실행되는 SQL 문입니다.

예제 1: BEFORE INSERT 트리거

insert 작업이 테이블에 추가되기 전에 모든 직원 이름을 대문자로 변환하는 트리거를 생성해 보겠습니다.

CREATE TRIGGER capitalize_name
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);

이 예제에서:

  • 트리거 이름은 capitalize_name입니다.
  • employees 테이블에 insert 작업이 발생하기 전에 활성화됩니다.
  • 각 새로운 행에 대해 name 열을 대문자로 변환합니다. UPPER() 함수를 사용합니다.
  • NEW은 추가되는 새로운 행을 가리킵니다.

예제 2: AFTER UPDATE 트리거

이제 급여 변화를 별도의 테이블에 로그로 남기는 트리거를 생성해 보겠습니다.

CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END;

이 작업에서는 다음과 같은 일이 발생합니다:

  • 트리거 이름은 log_salary_changes입니다.
  • employees 테이블에 update 작업이 발생한 후에 활성화됩니다.
  • 급여가 변화했는지 확인합니다 (OLD.salary <> NEW.salary).
  • 변화가 있으면 salary_log 테이블에 기록을 추가합니다.
  • OLD은 업데이트 전의 행을, NEW은 업데이트 후의 행을 가리킵니다.

클라이언트 프로그램을 사용하여 트리거 생성하기

MySQL에서 직접 트리거를 생성할 수도 있지만, 때로는 클라이언트 프로그램을 사용하는 것이 더 편리합니다. MySQL 명령줄 클라이언트를 사용하여 이를 어떻게 할 수 있는지 살펴보겠습니다.

단계 1: MySQL에 연결하기

먼저 터미널이나 명령 프롬프트를 엽니다하고 MySQL에 연결합니다:

mysql -u username -p

username을 여러분의 MySQL 사용자 이름으로 변경하세요. 비밀번호를 입력하도록 요청됩니다.

단계 2: 데이터베이스 선택하기

연결 후, 작업하고자 하는 데이터베이스를 선택합니다:

USE your_database_name;

단계 3: 트리거 생성하기

이제 트리거를 생성할 수 있습니다. 급여 로그 예제를 사용해 보겠습니다:

DELIMITER //

CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END//

DELIMITER ;

DELIMITER //DELIMITER ;를 사용하는 이유는 트리거 본문에 세미콜론이 포함되어 있기 때문입니다. 임시로 델리미터를 변경해야 합니다.

단계 4: 트리거 확인하기

트리거가 성공적으로 생성되었는지 확인하려면 다음을 사용할 수 있습니다:

SHOW TRIGGERS;

이 명령어는 현재 데이터베이스의 모든 트리거를 표시합니다.

트리거 메서드

MySQL에서 가장 흔히 사용되는 트리거 메서드 목록입니다:

메서드 설명
BEFORE INSERT 새로운 행이 삽입되기 전에 활성화됨
AFTER INSERT 새로운 행이 삽입된 후에 활성화됨
BEFORE UPDATE 기존 행이 업데이트되기 전에 활성화됨
AFTER UPDATE 기존 행이 업데이트된 후에 활성화됨
BEFORE DELETE 기존 행이 삭제되기 전에 활성화됨
AFTER DELETE 기존 행이 삭제된 후에 활성화됨

기억하세요, 이러한 각 메서드는 올바르게 사용될 때 강력한 도구가 될 수 있습니다. 과도하게 사용하면 복잡성과 성능 문제를 초래할 수 있습니다.

결론

축하합니다! MySQL 트리거의 세계로 첫 걸음을 냈습니다. 트리거가 무엇인지, 어떻게 생성하는지, 그리고 클라이언트 프로그램을 사용하여 어떻게 사용하는지 배웠습니다. 기억하세요, 마법의 도구처럼, 트리거는 신중하게 사용되어야 합니다. 데이터베이스 작업을 크게 향상시킬 수 있지만, 과도하게 사용하면 복잡성과 성능 문제를 초래할 수 있습니다.

MySQL 여정을 계속하면서 트리거를 연습하고 실험해 보세요. 곧 메르린도 부러워할 만한 데이터베이스 마법을 만들 수 있을 것입니다! 행복한 코딩을 기원하며, 여러분의 쿼리가 항상 기대하는 결과를 반환하길 바랍니다!

Credits: Image by storyset