У меня две таблицы A и B. Если я удалю запись в таблице A, я хочу обновить статус записи в таблице B, используя идентификатор пользователя. Я использую этот код:
CREATE TRIGGER blockuserundo BEFORE DELETE ON user_blocked FOR EACH ROW BEGIN UPDATE members SET ty_status = '1' WHERE user_id = OLD.block_user_id ; END;
Он показывает ошибку, например:
нет новой строки в триггере delete
Пожалуйста, направляйте меня, чтобы написать запрос для вышеуказанного сценария.
Вам нужно установить разделитель на что-то другое ;
DELIMITER | CREATE TRIGGER blockuserundo BEFORE DELETE ON user_blocked FOR EACH ROW BEGIN UPDATE members SET ty_status = '1' WHERE user_id = OLD.block_user_id ; END; | DELIMITER ;
Код ниже работает, как ожидалось:
DROP TABLE IF EXISTS user_blocked; CREATE TABLE user_blocked ( block_user_id INT ); DROP TABLE IF EXISTS members; CREATE TABLE members ( user_id INT, ty_status CHAR(1) ); INSERT user_blocked VALUES (1),(2),(3),(4),(5); INSERT members VALUES (1, '0'),(2, '0'),(3, '0'),(8, '0'),(9, '1'); DELIMITER | CREATE TRIGGER blockuserundo BEFORE DELETE ON user_blocked FOR EACH ROW BEGIN UPDATE members SET ty_status = '1' WHERE user_id = OLD.block_user_id ; END; | DELIMITER ; SELECT * FROM members; DELETE FROM user_blocked WHERE block_user_id IN(1,2); SELECT * FROM members;