Mysql
 sql >> Database >  >> RDS >> Mysql

Valore predefinito di MySQL come valore di un altro campo

Vedo due possibili soluzioni per questo:

1. Possibilità:

Usi una funzione per ignorare semplicemente sort_num se non è impostato:

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

coalesce() restituisce il primo valore non nullo, quindi dovresti inserire valori per sort_num se hai davvero bisogno di riordinare gli articoli.

2. Possibilità:

Scrivi un trigger, che imposta automaticamente il valore se non è impostato nell'istruzione di inserimento:

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
//

(ispirato da questo commento )

Tuttavia, ciò potrebbe incorrere in problemi di parallelizzazione (inserimento di più query contemporaneamente)