MySql таблицы и триггеры - PullRequest
       2

MySql таблицы и триггеры

0 голосов
/ 13 сентября 2011

Насколько я понимаю, MySql игнорирует CHECK в синтаксисе CREATE TABLE. Я поэтому думал - почему бы не использовать триггеры?

Например, у меня есть таблица людей, и одно поле - номер телефона. Можно ли сконструировать триггер для проверки того, что номер телефона действителен (например, код города), и в случае неверного номера телефона для сбоя вставки с соответствующим сообщением об ошибке?

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Да, вы можете создать триггер для проверки введенных значений и вызова неизвестной процедуры.Например -

CREATE TABLE table1
  id INT(11) NOT NULL,
  phone VARCHAR(10) DEFAULT NULL,
  PRIMARY KEY (id)
);

DELIMITER $$

CREATE trigger1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
  IF NOT NEW.phone REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]{2}$' THEN
    CALL error; -- Call nonexistent procedure
  END IF;
END
$$

DELIMITER ;
1 голос
/ 13 сентября 2011

Да, это возможное и часто используемое решение.

Начиная с MySQL 5.5 вы можете использовать SIGNAL для выдачи сообщения об ошибке.Перед этим вам нужно вызвать ошибку другим способом.Я обычно вставляю сообщение об ошибке в таблицу с индексом UNIQUE, чтобы эта вставка завершилась неудачно, а мое сообщение об ошибке содержится в сообщении об ошибке MySQL.

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