Триггер, Не предотвращающий Недопустимую вставку (Возможно, неверная инструкция select)

#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. ошибка была напечатана, но она все еще допускала вставку