MySQL - Триггер после обновления

Введение в триггеры MySQL после обновления

Здравствуйте,unkeraj数据库爱好者! Сегодня мы окунемся в fascinující svět MySQL After Update Triggers. Не волнуйтесь, если вы новички - я буду вашим доброжелательным проводником в этом путешествии, как я делал для countless студентов на протяжении многих лет преподавания. Давайте начнем с основ и постепенно поднимемся!

MySQL - After Update Trigger

Что такое триггер?

Представьте себе магическую сигнализацию, которая срабатывает каждый раз, когда что-то конкретное происходит в вашей базе данных. Это в essentie то, что такое триггер! Это особый вид сохраненной программы, которая автоматически выполняется при возникновении particular eventu в базе данных.

Что такое триггер после обновления?

Триггер после обновления - это определенный тип триггера, который срабатывает после выполнения операции 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 ;

Разберем это:

  1. DELIMITER //: Это временно изменяет разделитель, чтобы мы могли использовать точку с запятой внутри определения триггера.
  2. CREATE TRIGGER update_employee_timestamp: Мы называем наш триггер 'update_employee_timestamp'.
  3. AFTER UPDATE ON employees: Это specifies, что триггер должен срабатывать после операции UPDATE в таблице 'employees'.
  4. FOR EACH ROW: Триггер сработает для каждой строки, affected_by UPDATE.
  5. IF OLD.salary != NEW.salary THEN: Мы проверяем, изменилась ли зарплата.
  6. SET NEW.last_updated = CURRENT_TIMESTAMP: Если зарплата изменилась, мы обновляем столбец 'last_updated' текущим timestamp.
  7. 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' автоматически заполнен текущим timestamp.

Продвинутые техники триггеров после обновления

Теперь, когда у нас есть основы, давайте рассмотрим некоторые более продвинутые техники.

Журналирование изменений

Одним из распространенных применений триггеров после обновления является журналирование изменений. Давайте создадим новую таблицу для журналирования изменений зарплаты:

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 = 'Зарплата не может быть уменьшена';
END IF;
END //
DELIMITER ;

Этот триггер вызовет ошибку, если кто-то пытается обновить зарплату сотрудника до более низкой величины.

Триггер после обновления с использованием клиентской программы

Хотя мы сосредоточивались на создании триггеров напрямую в MySQL, стоит отметить, что вы также можете управлять триггерами через клиентские программы. Многие инструменты управления базами данных и программные языки предоставляют интерфейсы для работы с триггерами MySQL.

Создание триггера с использованием PHP

Вот пример того, как вы можете создать триггер с использованием PHP:

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// Создание подключения
$conn = new mysqli($servername, $username, $password, $dbname);

// Проверка подключения
if ($conn->connect_error) {
die("Подключение не удалось: " . $conn->connect_error);
}

// SQL для создания триггера
$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
";

// Выполнение запроса
if ($conn->multi_query($sql) === TRUE) {
echo "Триггер создан успешно";
} else {
echo "Ошибка создания триггера: " . $conn->error;
}

$conn->close();
?>

Этот PHP-скрипт подключается к вашей базе данных MySQL и создает тот же триггер 'update_employee_timestamp', который мы создали раньшe.

Заключение

И вот мы и arrived! Мы совершили путешествие по стране MySQL After Update Triggers, от основ до более продвинутых техник. Помните, что триггеры - это мощные инструменты, но используйте их мудро. Они могут быть двуострыми - великолепны для поддержания целостности данных и автоматизации задач, но чрезмерное использование может привести к проблемам с производительностью.

Как и с любым программным концептом, ключ к maîtrise триггеров - это практика. Так что вперед, экспериментируйте с различными сценариями и смотрите, как триггеры могут сделать вашу работу с базой данных умнее, а не сложнее. Счастливого triggering!

Метод Описание
CREATE TRIGGER Создает новый триггер
DROP TRIGGER Удаляет существующий триггер
SHOW TRIGGERS Отображает информацию о триггерах
SIGNAL Вызывает ошибку или сообщение в триггере
OLD Относится к старому значению столбца в триггере UPDATE
NEW Относится к новому значению столбца в триггере UPDATE

Credits: Image by storyset