Значение по умолчанию MySQL как другое значение поля

Могу ли я, и, если можно, как установить значение по умолчанию для поля в таблице MySQL для значения другого поля?

Вещь: у меня есть данные, и каждый объект данных имеет свой идентификатор в таблице. Но мне хотелось бы изменить порядок данных, изменив их индекс сортировки, не изменяя их идентификатор. Таким образом, для поля sort_num по умолчанию должно быть установлено значение, заданное индексированным полем с автоматическим приращением ID.

Спасибо заранее!

Ответы

Ответ 1

Я вижу два возможных решения для этого:

1. Возможность:

Вы используете функцию, чтобы просто игнорировать sort_num, если она не установлена:

`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`

coalesce() возвращает первое ненулевое значение, поэтому вы должны вставлять значения для sort_num, если вам действительно нужно переупорядочить элементы.

2. Возможность:

Вы пишете триггер, который автоматически устанавливает значение, если оно не установлено в инструкции insert:

DELIMITER //

CREATE TRIGGER sort_num_trigger
BEFORE INSERT ON mytable
FOR EACH ROW BEGIN
    DECLARE auto_inc INT;
    IF (NEW.sort_num  is null) THEN
         -- determine next auto_increment value
        SELECT AUTO_INCREMENT INTO auto_inc FROM information_schema.TABLES
        WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME = 'mytable';
        -- and set the sort value to the same as the PK
        SET NEW.sort_num = auto_inc;
    END IF;
END
//

(вдохновленный этим комментарием)

Однако это может привести к проблемам с параллелизмом (одновременное добавление нескольких запросов)

Ответ 2

Плохая идея, чтобы перестроить столбец с автоинкрементами, поэтому лучше было бы

Добавить столбец sort_num в таблицу

ALTER TABLE data ADD sort_num column-definition; (column definition same as ID)

UPDATE data SET sort_num = ID

Теперь играйте со столбцом sort_num, так как он не влияет на идентификатор столбца