sourcecode

MySQL: 필드 기본값을 다른 열로 설정

copyscript 2023. 9. 1. 21:15
반응형

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

데이터 유형 기본값에 설명된 대로:

DEFAULT value데이터 형식 규격의 절은 열의 기본값을 나타냅니다.한 가지 예외를 제외하고 기본값은 상수여야 하며 함수 또는 식을 사용할 수 없습니다.이는 예를 들어 날짜 열의 기본값을 또는 같은 함수 값으로 설정할 수 없음을 의미합니다.열에 대한 기본값으로 지정할 수 있다는 점은 예외입니다.섹션 11.3.5, "자동 초기화업데이트"참조하십시오.

대신 삽입 트리거를 정의할 수 있습니다.

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'는 AFTER 삽입 트리거에 사용할 수 없습니다.'필드 업데이트'는 삽입 전 트리거를 통해 수행해야 합니다.

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

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;

검색 후..몇 가지 해결책을 찾았습니다.

첫 번째 솔루션: 기본값 사용

REMAINING    INT default (MAX_VALUE - BOOKED_UNITS)

이 솔루션은 삽입할 때 값을 지정하지 않은 경우에만 값을 제공합니다.

두 번째 솔루션: 트리거 사용

SQL 값 열 자동 생성

세 번째 솔루션: Generated Always AS 사용

1번 INT, 2번 INT, 결과 INT 항상 생성됨 AS(2번 - 1번),

삽입 후 이 솔루션이 항상 채워집니다.

언급URL : https://stackoverflow.com/questions/15384429/mysql-set-field-default-value-to-other-column

반응형