Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Domyślna wartość MySQL jako wartość innego pola

Widzę dwa możliwe rozwiązania tego problemu:

1. Możliwość:

Używasz funkcji, aby po prostu zignorować sort_num jeśli nie jest ustawiony:

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

coalesce() zwraca pierwszą niepustą wartość, dlatego należy wstawić wartości dla sort_num jeśli naprawdę potrzebujesz zmienić kolejność przedmiotów.

2. Możliwość:

Piszesz wyzwalacz, który automatycznie ustawia wartość, jeśli nie jest ustawiona w instrukcji insert:

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

(zainspirowany ten komentarz )

Może to jednak spowodować problemy z równoległością (wiele zapytań wstawionych w tym samym czasie)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę dodać klucz obcy podczas tworzenia nowej tabeli?

  2. Wyzwalacz MySQL, jeśli warunek istnieje

  3. MySQL otrzymuje pozycję wiersza w ORDER BY

  4. Jak przenieść model między dwiema aplikacjami Django (Django 1.7)

  5. Tabela bazy danych nie istnieje zgodnie z kompilatorem Android Studio