Mysqlでフィールドのデフォルト値を他の列に設定する方法仮想フィールドでOracleを実行しましたが、Mysqlでこれを行う方法がわかりません。これは私のテーブルです。
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
)
データタイプのデフォルト値 に記載されているとおり:
データ型仕様の_
DEFAULT value
_句は、列のデフォルト値を示します。 1つの例外を除いて、デフォルト値は定数でなければなりません。関数または式にすることはできません。これは、たとえば、日付列のデフォルトをNOW()
などの関数の値に設定できないことを意味します。または _CURRENT_DATE
_ 。例外は、 _CURRENT_TIMESTAMP
_ をTIMESTAMP
のデフォルトとして指定できることです。 列。 11.3.5項「TIMESTAMP
の自動初期化と更新」 を参照してください。
代わりに、挿入トリガーを定義できます。
_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;;
_
「NEW」は、AFTER挿入トリガーには受け入れられません。 BEFORE挿入トリガーによって「フィールド更新」を行う必要があります。そう、
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;;