Mysql
 sql >> Base de données >  >> RDS >> Mysql

Valeur par défaut de MySQL en tant que valeur d'un autre champ

Je vois deux solutions possibles pour cela :

1. Possibilité :

Vous utilisez une fonction pour simplement ignorer sort_num s'il n'est pas défini :

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

coalesce() renvoie la première valeur non nulle, vous insérez donc des valeurs pour sort_num si vous avez vraiment besoin de commander à nouveau des articles.

2. Possibilité :

Vous écrivez un déclencheur, qui définit automatiquement la valeur si elle n'est pas définie dans l'instruction d'insertion :

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

(inspiré de ce commentaire )

Cependant, cela peut rencontrer des problèmes de parallélisation (plusieurs requêtes insérées en même temps)