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)
이 솔루션은 삽입할 때 값을 지정하지 않은 경우에만 값을 제공합니다.
두 번째 솔루션: 트리거 사용
세 번째 솔루션: 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
'sourcecode' 카테고리의 다른 글
포스트백 시 확인 요약에 오류 메시지를 추가하려면 어떻게 해야 합니까? (0) | 2023.09.01 |
---|---|
IE9은 F12를 친 후에만 아약스 호출을 올바르게 수행합니다. (0) | 2023.09.01 |
mysql에 대한 도커의 액세스 권한 (0) | 2023.09.01 |
시스템 유휴 시간 가져오기 (0) | 2023.09.01 |
비'@objc' 메서드가 '@objc' 프로토콜의 선택적 요구 사항을 충족하지 않습니다. (0) | 2023.09.01 |