Veo dos posibles soluciones para esto:
Utiliza una función para simplemente ignorar sort_num
si no está configurado:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
devuelve el primer valor no nulo, por lo tanto, insertaría valores para sort_num
si realmente necesita reordenar artículos.
Escribe un activador, que establece automáticamente el valor si no está establecido en la declaración de inserción:
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
//
(inspirado en este comentario )
Sin embargo, esto podría generar problemas de paralelización (inserción de múltiples consultas al mismo tiempo)