2013-03-13 20 views
18

Jak ustawić wartość domyślną dla pola do innej kolumny w Mysql Zrobiłem to oracle z wirtualnym polem, ale nie wiem jak to zrobić w Mysql to jest mój stół:mysql ustaw wartość domyślną pola na inną kolumnę

create table TSM_TRANSACTION_TBL 
(
    TRANS_ID  INT primary key auto_increment, 
    LOCATION_ID INT, 
    TRANS_DATE DATE, 
    RESOURCE_ID INT, 
    TS_ID  INT, 
    MAX_VALUE INT, 
    BOOKED_UNITS INT default 0, 
    REMAINING INT default MAX_VALUE - BOOKED_UNITS, 
    BOOKED  INT not null, 
    USER_ID  INT, 
    TRANS_TIME TIMESTAMP 
) 
+1

Możliwy duplikat: http://stackoverflow.com/questions/6377977/mysql-default-value-as-other-fields-value –

Odpowiedz

18

Jak wykazano poniżej Data Type Default Values:

klauzula w opisie typu danych DEFAULT value oznacza domyślną wartość dla kolumny. Z jednym wyjątkiem wartość domyślna musi być stała; nie może być funkcją lub wyrażeniem. Oznacza to na przykład, że nie można ustawić wartości domyślnej kolumny daty jako wartości funkcji, takiej jak NOW() lub CURRENT_DATE. Wyjątkiem jest możliwość określenia CURRENT_TIMESTAMP jako domyślnej dla kolumny TIMESTAMP. Zobacz Section 11.3.5, “Automatic Initialization and Updating for TIMESTAMP.

Zamiast tego można zdefiniować wyzwalacza wstawienia:

CREATE TRIGGER foo AFTER INSERT ON TSM_TRANSACTION_TBL FOR EACH ROW 
    IF NEW.REMAINING IS NULL THEN 
    SET NEW.REMAINING := NEW.MAX_VALUE - NEW.BOOKED_UNITS; 
    END IF;; 
+5

użyłem kodu, ale powiedziano mi, że nie można używać nowy po wstawieniu i zmieniłem go na wcześniej i działa idealnie – BMW

14

„nowa” jest nie do przyjęcia dla PO wstawić wyzwala. Powinieneś zrobić "aktualizację pola" przez wyzwalacz PRZED wstawieniem. Więc

CREATE TRIGGER foo BEFORE INSERT ON TSM_TRANSACTION_TBL FOR EACH ROW 
    IF NEW.REMAINING IS NULL THEN 
     SET NEW.REMAINING := NEW.MAX_VALUE - NEW.BOOKED_UNITS; 
    END IF;; 
Powiązane problemy