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

如何在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    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的答案