#mysql #if-statement #select #triggers
#mysql #если-заявление #выбирать #раздражители
Вопрос:
Я пытаюсь использовать триггер, чтобы предотвратить вставку, когда таблица достигает определенного количества значений
мой триггер заключается в следующем
DELIMITER // CREATE TRIGGER validate_insert /*create trigger to validate updates */ BEFORE INSERT ON trainer_party_members FOR EACH ROW SET @trainernumber=NULL; SELECT COUNT(trainer_party_members.trainer_id) INTO @trainernumber FROM trainer_party_members WHERE trainer_party_members.trainer_id=trainer_id; IF (@trainernumber=6) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "maximum amount of trainers"; END IF; // DELIMITER ;
предполагается, что он останавливает вставки, когда достигает 6. я не уверен, почему это не работает
подумал, что это может быть проблемой с моим заявлением select
вставка в таблицу trainer_party_memebers выглядит следующим образом
INSERT INTO trainer_party_members (pokemon_id, trainer_id) VALUES (1, 1), -- Trade this one (Will's Pikachu) (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (11, 2); -- for this one. (Koga's Squirtle)
теоретически это должно препятствовать входу значения (7,1)
Комментарии:
1.
WHERE trainer_party_members.trainer_id=trainer_id;
Что есть (точнее — должно быть)trainer_id
? теоретически это должно предотвратить попадание значения (7,1) в Абсолютно невозможное. Либо вставляются все строки, либо возникает ошибка (возможно, вызванная СИГНАЛОМ), и ни одна строка не вставляется.2. идентификатор обучающего — это идентификатор обучающего вставляемого значения
3. trainer_id — это идентификатор trainer_id вставляемого значения No. Это то же
trainer_party_members.trainer_id
самое, что и . Для ссылки на вставленное значение необходимо использовать псевдонимNEW
.4. и как бы я сделал так, чтобы строки не вставлялись?
5. ошибка выводится, но это ничего не мешает. вместо этого я создал новую функцию вставки, которая попыталась добавить еще одно значение, которое превысило бы 6. ошибка была напечатана, но она все еще допускала вставку