32

如何将字段的默认值设置为 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
);
4

3 回答 3

26
于 2013-03-13T11:53:11.550 回答
18

对于 AFTER 插入触发器,“NEW”是不可接受的。您应该通过 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;;
于 2013-08-31T11:40:32.157 回答
0

MySQL 8.0.13 开始,您可以引用另一列作为列的默认值。

一个列的表达式默认值可以引用其他表列,但对生成的列或具有表达式默认值的列的引用必须是表定义中较早出现的列。也就是说,表达式默认值不能包含对生成的列或具有表达式默认值的列的前向引用。

CREATE TABLE table1 (
  id int NOT NULL AUTO_INCREMENT,
  name varchar(250) NOT NULL,
  name_url varchar(250) NOT NULL DEFAULT (`name`),

  created datetime NOT NULL DEFAULT (UTC_TIMESTAMP()),
  modified datetime NOT NULL DEFAULT (UTC_TIMESTAMP()),

  PRIMARY KEY (id),
)
ENGINE = INNODB,
CHARACTER SET utf8mb4,
COLLATE utf8mb4_0900_ai_ci;
于 2022-02-28T18:26:30.297 回答