MySQL - After Delete 트리거

안녕하세요, 데이터베이스 열정가 여러분! 오늘은 MySQL 트리거의 fascineting 세계로 함께 뛰어보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 이 여정을 안내해드리게 되어 기쁩니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 기본부터 차근차근 설명해드릴게요. 따뜻한 커피(또는 차, 그게 여러분의 취향이라면)를 한 잔 손에 들고, 시작해보겠습니다!

MySQL - After Delete Trigger

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;

이를 하나씩 설명해보겠습니다:

  1. CREATE TRIGGER trigger_name: 트리거에 이름을 지정합니다.
  2. AFTER DELETE ON table_name: 지정된 테이블에서 DELETE 연산이 발생한 후에 트리거를 발생시킵니다.
  3. FOR EACH ROW: DELETE 연산에 영향을 받은 각 행에 대해 트리거가 실행됩니다.
  4. BEGINEND: 트리거 본문을 감싸는 키워드로, 여기서 트리거가 수행해야 할 동작을 정의합니다.

예제 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