Есть ли способ в таблице MySQL присвоить значение по умолчанию, если этому поле присвоено значение, не входящее в перечисление?
CREATE TABLE `comments` (
`status` enum('approved','moderated','unmoderated') NOT NULL DEFAULT 'unmoderated'
);
Работает, если status
не задано при создании, но если вы установите его на что-то не в перечислении или NULL, оно будет "пустым" (оно не похоже на NULL). Я ожидал бы, что это будет "unmoderated", если я установил его в NULL, так как он не может быть нулевым. Не уверен, что это имеет смысл. Нужно ли мне дезинфицировать мои данные перед вставкой, чтобы убедиться, что значение существует в перечислении в первую очередь?
UPDATE comments SET status = NULL;
UPDATE comments SET status = 'not_in_there';
Если вы попытаетесь установить поле ENUM в значение, не входящее в список определений, оно будет вставлено как индекс 0, пустая строка. Значение по умолчанию входит в игру, если для этого столбца не указано значение.
Я думаю, что для того, чтобы сделать то, что вам нужно, вам нужно сначала проверить недопустимое значение в коде, а затем включить значение, которое вы хотите в запросе.