Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Standardwert als anderer Feldwert

Ich sehe zwei mögliche Lösungen dafür:

1. Möglichkeit:

Sie verwenden eine Funktion, um sort_num einfach zu ignorieren wenn es nicht gesetzt ist:

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

coalesce() gibt den ersten Nicht-Null-Wert zurück, daher würden Sie Werte für sort_num einfügen wenn Sie Artikel wirklich nachbestellen müssen.

2. Möglichkeit:

Sie schreiben einen Trigger, der den Wert automatisch setzt, wenn er nicht in der Insert-Anweisung gesetzt ist:

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

(inspiriert von diesem Kommentar )

Dies kann jedoch zu Parallelisierungsproblemen führen (mehrere Abfragen werden gleichzeitig eingefügt)