한국어 번역
MySQL - 업데이트 후 트리거
MySQL 업데이트 후 트리거 소개
안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 MySQL의 흥미로운 세계, 즉 MySQL 업데이트 후 트리거의 세계로 뛰어들어 보겠습니다. 초보자이시라도 걱정 마세요 - 저는 여러분의 친절한 안내자가 되어 이 여정을 함께할 것입니다. 수년 동안 수많은 학생들을 가르쳐온 경험을 바탕으로 여러분을 안내하겠습니다. 기본 개념부터 시작해 보겠습니다!
트리거는 무엇인가요?
당신의 데이터베이스에서 특정 사건이 발생할 때마다 마법의 알림이 울리는 상상을 해보세요. 그것이 트리거입니다! 트리거는 데이터베이스에서 특정 이벤트가 발생할 때 자동으로 실행되는 특별한 종류의 저장 프로그램입니다.
업데이트 후 트리거는 무엇인가요?
업데이트 후 트리거는 UPDATE 연산이 수행된 후 발생하는 특정 종류의 트리거입니다. 데이터를 변경한 후 즉시 행동을 취하는 주의 깊은 비서와 같은 것입니다.
첫 번째 업데이트 후 트리거 생성
이제 손을 불끈 잡고 우리의 첫 번째 업데이트 후 트리거를 생성해 보겠습니다! 간단한 예제로 시작해 보겠습니다.
실험장 설정
먼저 작업할 간단한 테이블을 생성해 보겠습니다:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
salary DECIMAL(10, 2),
last_updated TIMESTAMP
);
이 테이블은 우리 직원들의 정보를 관리합니다. 이제 직원의 급여가 변경될 때 자동으로 'last_updated' 열을 업데이트하는 업데이트 후 트리거를 추가해 보겠습니다.
트리거 생성
트리거를 생성하는 방법은 다음과 같습니다:
DELIMITER //
CREATE TRIGGER update_employee_timestamp
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary != NEW.salary THEN
SET NEW.last_updated = CURRENT_TIMESTAMP;
END IF;
END //
DELIMITER ;
이를 설명해 보겠습니다:
-
DELIMITER //
: 이는 일시적으로 델리미터를 변경하여 트리거 정의 내에서 세미콜론을 사용할 수 있게 합니다. -
CREATE TRIGGER update_employee_timestamp
: 우리는 트리거를 'update_employee_timestamp'로 이름지었습니다. -
AFTER UPDATE ON employees
: 이 트리거는 'employees' 테이블에 대한 UPDATE 연산 후에 발생합니다. -
FOR EACH ROW
: 트리거는 UPDATE에 영향을 받은 각 행에 대해 발생합니다. -
IF OLD.salary != NEW.salary THEN
: 급여가 변경되었는지 확인합니다. -
SET NEW.last_updated = CURRENT_TIMESTAMP
: 급여가 변경되면 'last_updated' 열을 현재 시간으로 설정합니다. -
DELIMITER ;
: 델리미터를 원래의 세미콜론으로 되돌립니다.
트리거 테스트
트리거를 작동시켜 보겠습니다:
INSERT INTO employees (id, name, salary) VALUES (1, 'John Doe', 50000);
UPDATE employees SET salary = 55000 WHERE id = 1;
SELECT * FROM employees;
이 명령어를 실행한 후, 'last_updated' 열이 자동으로 현재 시간으로 채워졌는지 확인할 수 있습니다.
고급 업데이트 후 트리거 기술
기본 개념을 이해했으므로, 더 고급적인 기술을 탐구해 보겠습니다.
변경 로그 생성
업데이트 후 트리거의 일반적인 사용 사례 중 하나는 변경 사항을 로그하는 것입니다. 먼저 급여 변경 사항을 로그할 새로운 테이블을 생성해 보겠습니다:
CREATE TABLE salary_changes (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_id INT,
old_salary DECIMAL(10, 2),
new_salary DECIMAL(10, 2),
change_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
이제 트리거를 수정하여 변경 사항을 로그합니다:
DELIMITER //
CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary != NEW.salary THEN
INSERT INTO salary_changes (employee_id, old_salary, new_salary)
VALUES (NEW.id, OLD.salary, NEW.salary);
END IF;
END //
DELIMITER ;
이 트리거는 직원의 급여가 업데이트될 때마다 'salary_changes' 테이블에 새로운 항목을 추가합니다.
조건부 논리 사용
트리거는 더 복잡한 조건부 논리를 포함할 수 있습니다. 예를 들어, 급여가 줄지 않도록 방지하고 싶다면 다음과 같이 할 수 있습니다:
DELIMITER //
CREATE TRIGGER prevent_salary_decrease
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < OLD.salary THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Salary cannot be decreased';
END IF;
END //
DELIMITER ;
이 트리거는 누군가가 직원의 급여를 낮추려고 할 때 오류 메시지를 발생시킵니다.
클라이언트 프로그램을 사용한 트리거 관리
우리는 직접 MySQL에서 트리거를 생성하는 것에 집중했지만, 클라이언트 프로그램을 통해 트리거를 관리할 수도 있습니다. 많은 데이터베이스 관리 도구와 프로그래밍 언어는 MySQL 트리거를 작업할 수 있는 인터페이스를 제공합니다.
PHP를 사용한 트리거 생성
다음은 PHP를 사용하여 트리거를 생성하는 예제입니다:
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// Connection setup
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL to create trigger
$sql = "
CREATE TRIGGER update_employee_timestamp
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary != NEW.salary THEN
SET NEW.last_updated = CURRENT_TIMESTAMP;
END IF;
END
";
// Execute query
if ($conn->multi_query($sql) === TRUE) {
echo "Trigger created successfully";
} else {
echo "Error creating trigger: " . $conn->error;
}
$conn->close();
?>
이 PHP 스크립트는 MySQL 데이터베이스에 연결하고, 이전에 생성한 'update_employee_timestamp' 트리거를 생성합니다.
결론
이제 여러분은 MySQL의 업데이트 후 트리거의 세계를 여행한 것입니다. 기본 개념에서 고급 기술까지! 트리거는 강력한 도구이지만, 신중하게 사용해야 합니다. 과도한 사용은 성능 문제를 유발할 수 있습니다.
어떤 프로그래밍 개념이든, 트리거를 마스터하려면 연습이 중요합니다. 다양한 시나리오를 실험하고, 트리거가 데이터베이스 작업을 더 지능적으로 만드는 방법을 배워보세요. 행복한 트리거 사용을 기원합니다!
Credits: Image by storyset