Как установить значение перечисления по умолчанию, если мы вставляем недопустимое значение перечисления в MYSQL? - PullRequest
7 голосов
/ 26 марта 2011

У меня есть таблица

CREATE TABLE `enum_test` ( 
`id` int(10) default NULL, 
`value` enum('YES','NO') NOT NULL default 'YES' 
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

, затем выполните запрос ниже

INSERT INTO enum_test(id) VALUES (2);  set 'YES' in `enum` field.
INSERT INTO enum_test(id,value) VALUES (2,1);  set 'YES' in `enum` field.

Но

 //why below query set blank value in enum field??  
  INSERT INTO enum_test(id, value) VALUES (2, 'YESS');

Я хочу, чтобы еслиПользователь вводит значение, которое не существует в поле enum, затем он должен установить значение по умолчанию enum как это сделать?

Ответы [ 2 ]

5 голосов
/ 26 марта 2011

Используйте функцию триггера, например:

mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON enum_test
-> FOR EACH ROW
-> BEGIN
->     IF (NEW.value != 'YES' AND NEW.value != 'NO')
->         SET NEW.value = '';
->     END IF;
-> END;//
mysql> delimiter ;

Подробнее о триггерах здесь: Mysql manual, синтаксис триггера

редактирование: Как и предполагалось, также возможно определить хранимую процедуру и вызывать ее из триггера, что я бы посчитал лучше для удобства обслуживания базы данных. Триггеры являются частью определения базы данных, поэтому вы добавляете это в любой файл sql с помощью операторов CREATE TABLE.

2 голосов
/ 26 марта 2011

См. Ответ Томаса о триггере или, возможно, используйте хранимую процедуру .

В основном вы получаете значение по умолчанию.В строгом режиме будет выдана ошибка.В противном случае:

http://dev.mysql.com/doc/refman/5.0/en/enum.html

Если вы вставите недопустимое значение в ENUM (то есть строку, отсутствующую в списке допустимых значений)вместо этого вставляется пустая строка в качестве специального значения ошибки.Эту строку можно отличить от «обычной» пустой строки тем, что эта строка имеет числовое значение 0. Подробнее об этом позже.

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