Как уменьшить значение в другой таблице с помощью триггера?(Баз данных) - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу, чтобы мой триггер уменьшал количество на 1 в таблице «количество» при добавлении новой строки в «rented_equipment_log», где date_returned имеет значение NULL.

Основной обзор базы данных:что есть стол оборудования с колоннами;модель, производитель, тип и количество.(Например, 1001, «Джексон», «весло», 10)

В таблице rented_equipment_log есть столбцы;member_id, модель, тип, date_taken, date_returned.(Например, 17225663, 1001, весло, 2018-11-26, 2018-11-27)

Таким образом, когда участник вынимает элемент оборудования, но еще не вернул его (date_returned равен нулю), количествоэтой же модели уменьшается на 1 в табличном оборудовании.

Однако я получаю синтаксическую ошибку.Я смотрел на другие вопросы, подобные этому, и до сих пор не могу понять, в чем ошибка.

Вот триггер:

delimiter //
CREATE TRIGGER UpdateQuantity 
AFTER INSERT ON rented_equipment_log
FOR EACH ROW BEGIN
    DECLARE q integer;
    SELECT quantity INTO q FROM equipment WHERE model = NEW.model; 
    IF (date_returned IS NULL) THEN
    UPDATE equipment
    SET quantity = q -1 WHERE model = NEW.model
END IF;
END;//

И вот ошибка: # 1064 - у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который следует использовать рядом с 'END IF;END 'в строке 9

1 Ответ

0 голосов
/ 26 ноября 2018

Я не уверен, почему вы получаете ошибку там.Но ваш запрос сложнее, чем необходимо:

delimiter //

CREATE TRIGGER UpdateQuantity 
AFTER INSERT ON rented_equipment_log
FOR EACH ROW
BEGIN
    UPDATE equipment e
        SET e.quantity = e.quantity - 1
        WHERE e.model = NEW.model and ?.date_returned IS NULL;
END;//

Я не уверен, должно ли date_returned быть new.date_returned или e.date_returned.Я даже не понимаю это условие.Я бы ожидал e.equipment > 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...