триггер mysql ограничивает количество строк, вставляемых в столбец id

0

Я хотел бы, чтобы мои пользователи сайта отправляли данные с моей формой HTML. Тем не менее, я хочу, чтобы каждый пользователь был ограничен до 5 заявок. Для этого я использую триггер DML MySQL, чтобы ограничить мой столбец "um_id" только пятью строками на один идентификатор. Но я знаю, что мой синтаксис неправильный, и я прошу кого-нибудь здесь помочь исправить его, чтобы он действительно мог работать.

Сейчас я тестирую это в PHPMyAdmin, и в конечном итоге он будет помещен в мой PHP файл. Таким образом, um_id будет иметь значение и быть объединенным с этим триггером SQL.

CREATE TRIGGER ml_trigger 
BEFORE INSERT 
ON ml_character;
BEGIN
IF ( SELECT . 'um_id' . COUNT(*) > 5 ) THEN ROLLBACK;
END IF;
  • 0
    Использование having на самом деле не уверен , что вы запрашивая , но что - то вроде SELECT count(*) as the_count where um_id = ? having the_count < 5 в SELECT count(*) as the_count where um_id = ? having the_count < 5
Теги:
triggers

1 ответ

1
Лучший ответ

Что-то вроде этого:

DELIMITER $$

CREATE TRIGGER ml_trigger_bi 
BEFORE INSERT
ON ml_character
FOR EACH ROW
BEGIN
   -- get count of existing rows with same um_id
   DECLARE li_cnt BIGINT;
   SELECT COUNT(*) AS cnt
     FROM ml_character t
    WHERE t.um_id = NEW.um_id
     INTO li_cnt ;
   -- if already five rows, throw error
   IF li_cnt >= 5 THEN
      SIGNAL '45000' SET MESSAGE_TEXT = 'Already five rows in ml_character';
   END IF;
END$$

DELIMITER ;

Значение um_id будет исходить от вставленной строки; мы NEW.um_id это значение как на NEW.um_id.

  • 0
    Да, это работает именно так, как я хотел! Ты удивительный! Он продолжал выдавать синтаксическую ошибку # 1064, но как только я добавил SQLSTATE сразу после SIGNAL, он действительно заработал.
  • 0
    DOH! Я пропустил ключевое слово SQLSTATE в операторе SIGNAL. Виноват.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню