Пожалуйста, я сделал этот триггер, чтобы обновить rating
таблицы после каждой вставки, когда 2 столбца (id_prof, id_etud) вставлены уже в таблице, но это дает mi эту ошибку
> #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 6
Триггер:
CREATE TRIGGER Before_Insert_Rate
BEFORE INSERT ON rating
FOR EACH ROW
BEGIN
IF (EXISTS(SELECT * FROM rating WHERE id_prof=NEW.id_prof and id_etud = NEW.id_etud)) THEN
UPDATE 'rating' SET 'rate' = NEW.rate WHERE 'id_prof' = NEW.id_prof and 'id_etud' = NEW.id_etud;
ELSE INSERT INTO rating VALUES (NEW.idprof,New.rate,New.id_etud);
END IF
END
DELIMITER ;
Я решил это, используя ON DUPLICATE KEY
для запроса вместо триггера
CREATE TABLE 'rating' (
'id_prof' int(11) NOT NULL,
'rate' float NOT NULL,
'id_etud' int(11) NOT NULL,
UNIQUE (id_prof,id_etud)
)
запрос:
INSERT INTO rating (id_prof,rate,id_etud) VALUES (1,2,5)
ON DUPLICATE KEY UPDATE rate=2
Вы должны установить DELIMITER раньше. Измените его на:
DELIMITER //
CREATE TRIGGER Before_Insert_Rate
BEFORE INSERT ON rating
FOR EACH ROW
BEGIN
IF (EXISTS(SELECT * FROM rating WHERE id_prof=NEW.id_prof and id_etud = NEW.id_etud)) THEN
UPDATE 'rating' SET 'rate' = NEW.rate WHERE 'id_prof' = NEW.id_prof and 'id_etud' = NEW.id_etud;
ELSE INSERT INTO rating VALUES (NEW.idprof,New.rate,New.id_etud);
END IF
END; //
DELIMITER ;
Триггер может получать как старые, так и новые данные в своей таблице. Триггер также может влиять на другие таблицы, но не разрешается изменять таблицу, которая уже используется (для чтения или записи) оператором, вызывающим функцию или триггер.
Это означает, что ни один запрос в таблице X
может вставить INSERT, UPDATE или DELETE из таблицы X
; это также означает, что если триггер в таблице X
изменяет таблицу Y
, он будет терпеть неудачу для любого запроса, используя обе таблицы X
и Y
которые "запускают" его.
Пример: UPDATE x INNER JOIN y ON x.id = y.id SET x.something = 1, y.something = 2
приведет к UPDATE x INNER JOIN y ON x.id = y.id SET x.something = 1, y.something = 2
начала BEFORE UPDATE ON x
(который обновляет, вставляет или удаляет из y
).
REPLACE INTO
или предложение ON DUPLICATE KEY
запроса INSERT.
rating
.