sql >> Databasteknik >  >> RDS >> Mysql

MySQL standardvärde som andra fälts värde

Jag ser två möjliga lösningar för detta:

1. Möjlighet:

Du använder en funktion för att helt enkelt ignorera sort_num om det inte är inställt:

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

coalesce() returnerar det första icke-nullvärdet, därför skulle du infoga värden för sort_num om du verkligen behöver beställa om artiklar.

2. Möjlighet:

Du skriver en trigger, som automatiskt sätter värdet om det inte är satt i insert-satsen:

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

(inspirerad av denna kommentar )

Detta kan dock stöta på problem med parallellisering (flera frågor infogas samtidigt)



  1. MYSQL-utdata i trädformat ELLER Lägger till nivå (förälder-barn)

  2. SQL Server Error 110:Det finns färre kolumner i INSERT-satsen än de värden som anges i VALUES-satsen.

  3. Skapa databaser med liquibase på tom mysql-instans

  4. Nätverksadaptern kunde inte upprätta anslutningen vid anslutning till Oracle DB