I see two possible solutions for this:
1. Possibility:
You use a function to simply ignore sort_num
if it is not set:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
returns the first non-null value, therefore you would insert values for sort_num
if you really need to reorder items.
2. Possibility:
You write a trigger, which automatically sets the value if it is not set in the insert statement:
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
//
(inspired by this comment)
However, this might run into parallelization issues (multiple queries inserting at the same time)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…