如何将字段的默认值设置为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
)
答案 0 :(得分:24)
数据类型规范中的
DEFAULT value
子句指示列的默认值。除了一个例外,默认值必须是常量;它不能是一个功能或表达。这意味着,例如,您无法将日期列的默认值设置为NOW()
或CURRENT_DATE
等函数的值。例外情况是您可以指定CURRENT_TIMESTAMP
作为TIMESTAMP
列的默认值。请参阅Section 11.3.5, “Automatic Initialization and Updating forTIMESTAMP
”。
相反,您可以定义插入触发器:
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;;
答案 1 :(得分:15)
对于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;;