我在rails应用程序中使用mysql,我想创建一个触发器,但是要进行迁移。 这是我的sql代码
DELIMITER ;;
CREATE TRIGGER check_validation_participant
BEFORE UPDATE ON participants
FOR EACH ROW
BEGIN
DECLARE valide INTEGER;
IF NEW.current_state = 1 THEN
SELECT COUNT(*) INTO valide
FROM participants
WHERE user_id = NEW.user_id
AND current_state = 1;
IF valide > 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Un événement est déjà validé pour cet utilisateur';
END IF;
END IF;
END;;
在迁移中,我将此代码写入执行“...”但我有很多语法错误。 谢谢:))
答案 0 :(得分:1)
好的,你只需要做
execute <<-SQL
CREATE TRIGGER check_validation_participant
BEFORE UPDATE ON participants
FOR EACH ROW
BEGIN
DECLARE valide INTEGER;
IF NEW.current_state = 1 THEN
SELECT COUNT(*) INTO valide
FROM participants
WHERE user_id = NEW.user_id
AND current_state = 1;
IF valide > 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Un événement est déjà validé pour cet utilisateur';
END IF;
END IF;
END;
SQL
这是因为rails可以执行指令&#34; DELIMITER&#34;因为它是一种mysql语法。