MySQL:将字段默认值设置为其他列
如何在MySQL中将字段的默认值设置为其他列 我在Oracle和virtual field中做过,但我不知道如何在MySQL中做 这是我的桌子:MySQL:将字段默认值设置为其他列,mysql,default,default-value,Mysql,Default,Default Value,如何在MySQL中将字段的默认值设置为其他列 我在Oracle和virtual field中做过,但我不知道如何在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
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
);
如以下文件所述:
数据类型规范中的DEFAULTvalue
子句指示列的默认值。除了一个例外,默认值必须是常量;它不能是函数或表达式。例如,这意味着您不能将日期列的默认值设置为函数(如或)的值。例外情况是,可以指定为列的默认值。看
相反,您可以定义插入触发器:
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;;
对于插入后触发器,“新”是不可接受的。您应该通过插入前触发器执行“字段更新”。所以
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,我将其更改为before,它工作得很好我修复了@eggyal的答案