MySQL - After Delete 트리거
안녕하세요, 데이터베이스 열정가 여러분! 오늘은 MySQL 트리거의 fascineting 세계로 함께 뛰어보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 이 여정을 안내해드리게 되어 기쁩니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 기본부터 차근차근 설명해드릴게요. 따뜻한 커피(또는 차, 그게 여러분의 취향이라면)를 한 잔 손에 들고, 시작해보겠습니다!
MySQL 트리거는 무엇인가요?
After Delete 트리거에 뛰어들기 전에, MySQL에서 트리거가 무엇인지 이해해보겠습니다. 여러분의 충성스러운 개가 문을 두드릴 때마다 항상 짖는다고 상상해보세요. 이때 문을 두드리는 것은 이벤트고, 개의 짖는 것은 그 이벤트에 대한 자동 반응입니다. 마찬가지로, MySQL에서 트리거는 데이터베이스에서 특정 이벤트에 대한 자동 반응입니다.
MySQL After Delete 트리거
이제 우리의 별이 되는 After Delete 트리거에 집중해보겠습니다. 이름에서 알 수 있듯이, 이 트리거는 테이블에서 DELETE 연산이 발생한 후에 발생합니다. 마치 파티가 끝난 후 everything을 정리하는 청소팀을 가지고 있는 것과 같습니다.
After Delete 트리거의 문법
After Delete 트리거를 생성하는 기본 문법을 보여드리겠습니다:
CREATE TRIGGER trigger_name
AFTER DELETE ON table_name
FOR EACH ROW
BEGIN
-- 트리거 본문
END;
이를 하나씩 설명해보겠습니다:
-
CREATE TRIGGER trigger_name
: 트리거에 이름을 지정합니다. -
AFTER DELETE ON table_name
: 지정된 테이블에서 DELETE 연산이 발생한 후에 트리거를 발생시킵니다. -
FOR EACH ROW
: DELETE 연산에 영향을 받은 각 행에 대해 트리거가 실행됩니다. -
BEGIN
과END
: 트리거 본문을 감싸는 키워드로, 여기서 트리거가 수행해야 할 동작을 정의합니다.
예제 1: 삭제된 레코드 로그
우리가 students
테이블을 가지고 있고, 삭제된 학생 레코드를 추적하고 싶다고 가정해봅시다. 이를 위해 deleted_students_log
테이블을 생성하고 After Delete 트리거를 사용하여 삭제된 레코드를 로그합니다.
먼저, 테이블을 생성해보겠습니다:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
grade INT
);
CREATE TABLE deleted_students_log (
id INT,
name VARCHAR(50),
grade INT,
deleted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
이제 After Delete 트리거를 생성해보겠습니다:
DELIMITER //
CREATE TRIGGER log_deleted_student
AFTER DELETE ON students
FOR EACH ROW
BEGIN
INSERT INTO deleted_students_log (id, name, grade)
VALUES (OLD.id, OLD.name, OLD.grade);
END //
DELIMITER ;
이 트리거에서 OLD
키워드를 사용하여 삭제된 행의 값을 액세스하고 있습니다. students
테이블에서 학생이 삭제될 때마다, 그 정보가 자동으로 deleted_students_log
테이블에 기록됩니다.
예제 2: 관련 테이블 업데이트
때로는 레코드를 삭제할 때 관련 테이블을 업데이트해야 할 수 있습니다. 예를 들어, classes
테이블이 각 반의 학생 수를 추적하고 있다고 가정해봅시다. 학생이 삭제될 때, 해당 반의 학생 수를 줄여야 합니다.
먼저, classes
테이블을 생성해보겠습니다:
CREATE TABLE classes (
id INT PRIMARY KEY,
name VARCHAR(50),
student_count INT DEFAULT 0
);
이제 students
테이블에 class_id
열을 추가해보겠습니다:
ALTER TABLE students
ADD COLUMN class_id INT,
ADD FOREIGN KEY (class_id) REFERENCES classes(id);
마지막으로, classes
테이블의 student_count
를 업데이트하는 After Delete 트리거를 생성해보겠습니다:
DELIMITER //
CREATE TRIGGER update_class_count_after_delete
AFTER DELETE ON students
FOR EACH ROW
BEGIN
UPDATE classes
SET student_count = student_count - 1
WHERE id = OLD.class_id;
END //
DELIMITER ;
이 트리거는 학생이 삭제될 때마다 해당 반의 student_count
를 자동으로 줄입니다.
클라이언트 프로그램을 사용한 After Delete 트리거
이제 MySQL에서 After Delete 트리거가 어떻게 작동하는지 이해했으므로, 클라이언트 프로그램을 사용하여 이를 상호작용해보겠습니다. 이 예제에서는 Python과 mysql-connector
라이브러리를 사용합니다.
먼저, mysql-connector
을 설치해야 합니다. pip를 사용하여 설치할 수 있습니다:
pip install mysql-connector-python
이제 After Delete 트리거를 사용하는 Python 스크립트를 작성해보겠습니다:
import mysql.connector
# MySQL 데이터베이스에 연결
db = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database_name"
)
cursor = db.cursor()
# 학생을 추가하는 함수
def insert_student(id, name, grade, class_id):
sql = "INSERT INTO students (id, name, grade, class_id) VALUES (%s, %s, %s, %s)"
values = (id, name, grade, class_id)
cursor.execute(sql, values)
db.commit()
print(f"학생 {name}이(가) 성공적으로 추가되었습니다.")
# 학생을 삭제하는 함수
def delete_student(id):
sql = "DELETE FROM students WHERE id = %s"
value = (id,)
cursor.execute(sql, value)
db.commit()
print(f"ID {id}인 학생이 성공적으로 삭제되었습니다.")
# 삭제된 학생 로그를 확인하는 함수
def check_deleted_log():
cursor.execute("SELECT * FROM deleted_students_log")
result = cursor.fetchall()
print("삭제된 학생 로그:")
for row in result:
print(row)
# 반의 학생 수를 확인하는 함수
def check_class_count(class_id):
sql = "SELECT student_count FROM classes WHERE id = %s"
value = (class_id,)
cursor.execute(sql, value)
result = cursor.fetchone()
print(f"반 {class_id}의 학생 수: {result[0]}")
# 주 프로그램
if __name__ == "__main__":
# 학생 추가
insert_student(1, "Alice", 10, 1)
# 학생 삭제
delete_student(1)
# 삭제된 학생 로그 확인
check_deleted_log()
# 반의 학생 수 확인
check_class_count(1)
# 데이터베이스 연결 닫기
db.close()
이 스크립트는 학생을 추가하고, 삭제하고, 삭제된 학생 로그와 업데이트된 반의 학생 수를 확인하는 방법을 보여줍니다. 이 스크립트를 실행하면 After Delete 트리거가 작동하는 것을 확인할 수 있습니다!
결론
축하합니다! MySQL After Delete 트리거의 세계로 첫 걸음을 뗐습니다. 트리거이 무엇인지, After Delete 트리거를 어떻게 생성하는지, 그리고 Python 클라이언트 프로그램을 사용하여 이를 상호작용하는 방법을 다루었습니다.
트리거는 데이터베이스 관리의 강력한 도구이지만, 신중하게 사용해야 합니다. 과도하게 사용하면 성능에 영향을 줄 수 있으므로, 특정 사용 사례에 대해 트리거가 최선의 해결책인지 항상 고려하세요.
데이터베이스 프로그래밍의 여정을 계속하면서 계속 탐구하고 실험해보세요. 누구나 데이터베이스에 대한 평생의 열정을 자극할 수 있을지도 모릅니다! (이 장난을 알아보셨나요? 데이터베이스 유머를 드렸습니다!)
행복하게 코딩하시고, 쿼리가 항상 원활하게 실행되길 바랍니다!
Credits: Image by storyset