Подтвердить что ты не робот

Mysql задает значение по умолчанию для другого столбца

Как установить значение по умолчанию для поля в другой столбец в Mysql Я сделал оракул с виртуальным полем, но я не знаю, как это сделать в 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
)
4b9b3361

Ответ 1

Как указано в Значения по умолчанию для типа данных:

Предложение DEFAULT value в спецификации типа данных указывает значение по умолчанию для столбца. За одним исключением значение по умолчанию должно быть константой; это не может быть функцией или выражением. Это означает, например, что вы не можете установить значение по умолчанию для столбца даты как значение функции, например NOW() или CURRENT_DATE. Исключением является то, что вы можете указать CURRENT_TIMESTAMP как значение по умолчанию для столбца TIMESTAMP. См. раздел 11.3.5, "Автоматическая инициализация и обновление для TIMESTAMP" .

Вместо этого вы можете определить триггер включения:

CREATE TRIGGER foo AFTER 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;;

Ответ 2

"NEW" неприемлемо для триггеров AFTER. Вы должны выполнить "обновление поля" с помощью триггера insert. Итак,

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;;