У меня есть таблица drivers
, которая имеет следующие поля:
driver_id
first_name
last_name
nationality
dob
last_update_id
last_update_datetime
Я хотел бы сохранить старые данные в таблицу drivers_history
, которая в значительной степени является зеркальной копией этой таблицы изатем возвращать идентификатор этой строки и datetime
обратно в таблицу drivers
в полях last_update_id
и last_update_datetime
при каждом обновлении данных.
У меня есть следующий кодпока что для триггера, но мои знания MySQL ограничены, исходя из фона ASP.Net/SQL Server.
DROP TRIGGER IF EXISTS history_trigger $$
CREATE TRIGGER drivers_history_trigger
BEFORE UPDATE ON drivers
FOR EACH ROW
BEGIN
DECLARE _count INT;
IF OLD.first_name != NEW.first_name THEN _count = _count + 1 END IF;
IF OLD.last_name != NEW.last_name THEN _count = _count + 1 END IF;
IF OLD.nationality != NEW.nationality THEN _count = _count + 1 END IF;
IF OLD.dob != NEW.dob THEN _count = _count + 1 END IF;
IF _count > 0
THEN
INSERT INTO drivers_history (
first_name,
last_name,
nationality,
dob,
last_update_id,
last_update_datetime
)
VALUES (
NEW.first_name,
NEW.last_name,
NEW.nationality,
NEW.dob,
NULL,
NULL
);
END IF;
END;
$$
Я не знаю, работает ли этот код, но это то, где я сейчас нахожусь,Пожалуйста, кто-нибудь может помочь мне заполнить оставшуюся часть?
Первая перефразировка кода попытки запуска
DROP TRIGGER IF EXISTS history_trigger $$
CREATE TRIGGER drivers_history_trigger
BEFORE UPDATE ON drivers
FOR EACH ROW
BEGIN
DECLARE _count INT DEFAULT 0;
IF OLD.first_name != NEW.first_name THEN _count = _count + 1 END IF;
IF OLD.last_name != NEW.last_name THEN _count = _count + 1 END IF;
IF OLD.nationality != NEW.nationality THEN _count = _count + 1 END IF;
IF OLD.dob != NEW.dob THEN _count = _count + 1 END IF;
IF _count > 0
THEN
INSERT INTO drivers_history (
first_name,
last_name,
nationality,
dob,
last_update_id,
last_update_datetime
)
VALUES (
OLD.first_name,
OLD.last_name,
OLD.nationality,
OLD.dob,
OLD.last_update_id,
OLD.last_update_datetime
);
END IF;
END;
$$