2013-03-13 15 views
18

Come impostare il valore predefinito per un campo su un'altra colonna in Mysql L'ho fatto oracle con campo virtuale ma non so come farlo in Mysql questa è la mia tabella:mysql imposta il valore predefinito del campo su un'altra colonna

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

Eventuali duplicati: http://stackoverflow.com/questions/6377977/mysql-default-value-as-other-fields-value –

risposta

18

come documentato sotto Data Type Default Values:

La clausola DEFAULT value in una specifica del tipo di dati indica un valore predefinito per una colonna. Con un'eccezione, il valore predefinito deve essere una costante; non può essere una funzione o un'espressione. Ciò significa, ad esempio, che non è possibile impostare l'impostazione predefinita per una colonna della data come valore di una funzione come NOW() o CURRENT_DATE. L'eccezione è che è possibile specificare CURRENT_TIMESTAMP come valore predefinito per una colonna TIMESTAMP. Vedi Section 11.3.5, “Automatic Initialization and Updating for TIMESTAMP.

Invece, è possibile definire un trigger di inserimento:

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

Ho usato il vostro codice, ma mi ha detto che non posso usare nuovo con after insert e l'ho cambiato prima e funziona perfettamente – BMW

14

la 'nuova' è inaccettabile per il dopo inserire trigger. Dovresti fare l '"aggiornamento sul campo" con un trigger di inserimento PRIMA. Così,

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;; 
Problemi correlati