Comment définir la valeur par défaut pour un champ à une autre colonne dans Mysql Je l'ai fait Oracle avec un champ virtuel mais je ne sais pas comment le faire dans Mysql voici ma table:
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
)
Comme indiqué sous Valeurs par défaut du type de données :
La clause
DEFAULT value
Dans une spécification de type de données indique une valeur par défaut pour une colonne. À une exception près, la valeur par défaut doit être une constante; ce ne peut pas être une fonction ou une expression. Cela signifie, par exemple, que vous ne pouvez pas définir la valeur par défaut pour une colonne de date comme étant la valeur d'une fonction telle queNOW()
ouCURRENT_DATE
. L'exception est que vous pouvez spécifierCURRENT_TIMESTAMP
comme valeur par défaut pour une colonneTIMESTAMP
. Voir Section 11.3.5, "Initialisation et mise à jour automatiques pourTIMESTAMP
" .
Au lieu de cela, vous pouvez définir un déclencheur d'insertion:
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;;
Le "NOUVEAU" est inacceptable pour les déclencheurs APRÈS insertion. Vous devez faire la "mise à jour sur le terrain" par un déclencheur AVANT l'insertion. Donc,
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;;