Я работаю над базой данных MySQL и раньше я не слишком много делал с триггерами, но нашел конкретный сценарий, в котором я их использую.Я сталкиваюсь с чем-то странным, хотя.Короче говоря, мой триггер не влияет на определенное поле, если оно не указано.Я надеюсь, что кто-то может исправить это так, чтобы это всегда происходило.
Вот пример кода
DROP TABLE IF EXISTS reservations;
CREATE TABLE reservations(
resid int(8) NOT NULL AUTO_INCREMENT,
siteid int(5),
camperid int(8),
charge decimal(10,2),
checkin datetime NOT NULL,
checkout datetime NOT NULL,
balance decimal(10,2),
PRIMARY KEY (resid),
FOREIGN KEY (siteid) REFERENCES sites(siteid),
FOREIGN KEY (camperid) REFERENCES campers(camperid)
);
Теперь триггер
DELIMETER //
CREATE TRIGGER balanceCheck BEFORE INSERT ON reservations
FOR EACH ROW
BEGIN
IF NEW.balance != NEW.charge THEN SET NEW.balance = NEW.charge; END IF;
END;// --this isn't working yet
DELIMETER;
Вот SQL, которыйтриггер не перехватывает
INSERT INTO reservations (resid, siteid, camperid, charge, checkin, checkout)
VALUES (1, 1, 1, 90, '2016-04-10 13:00:00', '2016-04-12 15:00:00');
Вот SQL, который триггер перехватывает
INSERT INTO reservations (resid, siteid, camperid, charge, checkin, checkout, balance)
VALUES (2, 1, 1, 90, '2016-04-10 13:00:00', '2016-04-12 15:00:00', 9);
Кажется, зависит от того, ссылаюсь ли я на поле эффекта или нет, если триггер может повлиять на него,Как я могу сделать так, чтобы поле баланса всегда действовало, даже если оно не указано?Я хотел бы сохранить это решение, используя триггер, если это возможно.