MySQL-подобное ограничение - PullRequest
3 голосов
/ 12 января 2012

Я новичок в MySQL, я только что обнаружил, что он не поддерживает утверждения.

Я получил эту таблицу:

   CREATE TABLE `guest` (
   `ssn` varchar(16) NOT NULL,
   `name` varchar(200) NOT NULL,
   `surname` varchar(200) NOT NULL,
   `card_number` int(11) NOT NULL,
   PRIMARY KEY (`ssn`),
   KEY `card_number` (`card_number`),
   CONSTRAINT `guest_ibfk_1` FOREIGN KEY (`card_number`) REFERENCES `member` (`card_number`) 
   ) 

Мне нужно, чтобы участник мог пригласить максимум 2 гостей. Итак, в таблице guest мне нужно, чтобы конкретный card_number мог появляться максимум 2 раза.

Как мне справиться без утверждений?

Спасибо.

1 Ответ

3 голосов
/ 13 января 2012

Это определенно пахнет триггером BEFORE INSERT на столе 'guest':

DELIMITER $$
DROP TRIGGER IF EXISTS check_guest_count $$
CREATE TRIGGER check_guest_count BEFORE INSERT ON `guest`
  FOR EACH ROW BEGIN
    DECLARE numguests int DEFAULT 0;
    SELECT COUNT(*) INTO numguests FROM `guest` WHERE card_number=NEW.card_number;
    if numguests>=2 THEN
      SET NEW.card_number = NULL;
    END IF;
  END;
$$
DELIMITER ;

Это в основном ищет текущий счетчик гостей, и, если он уже> = 2, устанавливает card_number в NULL. Поскольку card_number объявлен как NOT NULL, вставка будет отклонена.

Протестировано и работает для меня на MySQL 5.1.41-3ubuntu12.10 (Ubuntu Lucid)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...