mySQL INSERT, убедившись, что определенный столбец имеет одно значение «YES», а остальные «NO» - PullRequest
0 голосов
/ 25 марта 2012

У меня есть таблица: список событий с двумя столбцами: имя как var (80) и по умолчанию как ENUM ('y', 'n').

Идея состоит в том, что одновременно может быть установлено только одно событие по умолчанию. Поэтому, если в таблице 100 событий, для 99 из них должно быть значение по умолчанию 'n', а для одного должно быть значение по умолчанию 'y'.

Когда клиент добавляет новое событие в систему, появляется опция «Сделать это событие стандартным». Что я хочу сделать, это вставить событие в таблицу. Если столбец по умолчанию для этой вставки добавлен как 'y', мне нужен простой способ изменить все остальные строки по умолчанию на 'n'.

Есть ли у mySQL способ справиться с этим или мне придется вручную изменить все остальные поля данных на 'n', если пользователь установит новое значение по умолчанию?

Ответы [ 3 ]

3 голосов
/ 25 марта 2012

Я бы предложил изменить вашу текущую таблицу так, чтобы она включала поле идентификатора (уникальное, автоинкрементное), удалить поле перечисления, а затем добавить новую таблицу, в которой хранится идентификатор события по умолчанию.Тогда вам нужно отредактировать только одну строку.

0 голосов
/ 25 марта 2012

как насчет создания STORED PROCEDURE?

DELIMITER $$
CREATE PROCEDURE SetCurrentEvent(IN oEventName varchar(50))
BEGIN
     UPDATE `event_list` SET `default` = 'N';
     UPDATE `event_list` SET `default` = 'Y' WHERE `name` = oEventName;
END$$
DELIMITER ;

Итак, создавая это, вы можете просто использовать:

CALL SetCurrentEvent('qwwrty');
0 голосов
/ 25 марта 2012

Вы можете управлять им с помощью триггера. Иначе вам придется обновить все свои записи, чтобы установить там статус 'n', прежде чем выполнять вставку.

редактировать: ответ SenorAmor выглядит лучше

...