반응형
UUID에 대한 트리거를 삽입하기 전에 MariaDB
Windows 64 플랫폼에서 MariaDB 5.5.29를 사용하고 있습니다.이 표를 작성했습니다.
CREATE TABLE DM_COUNTRIES
(
COUNTRY_UUID BINARY(16) NOT NULL,
C_NAME VARCHAR(255) NOT NULL UNIQUE,
C_LOCALNAME VARCHAR(255) DEFAULT NULL,
C_COUNTRYCODE VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (COUNTRY_UUID)
)
ENGINE=InnoDB;
여기서 UUID(프라이머리 키)가 지정되지 않은 경우 자동으로 삽입되는지 확인합니다.따라서 이 트리거를 만들었습니다.
DELIMITER |
CREATE TRIGGER TRIG_BI_DM_COUNTRIES
BEFORE INSERT ON DM_COUNTRIES
FOR EACH ROW
BEGIN
IF NEW.COUNTRY_UUID IS NULL THEN
SET NEW.COUNTRY_UUID = UUID();
END IF;
END|
DELIMITER ;
스키마 변경이 필요하지 않은 경우에도 모든 것이 커밋되었는지 확인하려면:
COMMIT;
이것으로 새 행을 삽입하려고 하면 다음과 같이 됩니다.
INSERT INTO DM_COUNTRIES
(C_NAME, C_LOCALNAME, C_COUNTRYCODE)
VALUES
('Großbritannien', 'Great Britain', 'UK');
트리거가 새로운 UUID를 배치하고 테이블에 성공적으로 삽입할 것으로 예상했습니다.하지만 이런 일이 벌어집니다.
에러 코드: 1364.필드 'COUNTRY_UUID'에 기본값이 없습니다.
UUID를 입력하지 않았기 때문에 이것은 확실히 정답입니다.방아쇠가 자동으로 채워지도록 되어 있었어요
생성된 값이 필드에 맞는지 확인하기 위해 unhex로 트리거를 공식화하려고 했습니다.
DELIMITER |
CREATE TRIGGER TRIG_BI_DM_COUNTRIES
BEFORE INSERT ON DM_COUNTRIES
FOR EACH ROW
BEGIN
IF NEW.COUNTRY_UUID IS NULL THEN
SET NEW.COUNTRY_UUID = UNHEX(REPLACE(UUID(), '-', ''));
END IF;
END|
DELIMITER ;
결과는 여전히 똑같다.
문제는 다음과 같습니다.내가 뭘 잘못하고 있지?
않다는 이고, 이 기본값이되어 있지 않다는 입니다.또한 이 컬럼에는 디폴트값이 정의되어 있지 않습니다.DEFAULT NULL
프라이머리 키이기 때문에
한 번 더 .DEFAULT 0
다음과 같이 합니다.IF NEW.COUNTRY_UUID = 0 THEN
:
DELIMITER |
CREATE TABLE DM_COUNTRIES
(
COUNTRY_UUID BINARY(16) NOT NULL DEFAULT 0, -- changed here
C_NAME VARCHAR(255) NOT NULL UNIQUE,
C_LOCALNAME VARCHAR(255) DEFAULT NULL,
C_COUNTRYCODE VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (COUNTRY_UUID)
)
ENGINE=InnoDB |
CREATE TRIGGER TRIG_BI_DM_COUNTRIES
BEFORE INSERT ON DM_COUNTRIES
FOR EACH ROW
BEGIN
IF NEW.COUNTRY_UUID = 0 THEN -- and here
SET NEW.COUNTRY_UUID = UUID();
END IF;
END |
INSERT INTO DM_COUNTRIES
(C_NAME, C_LOCALNAME, C_COUNTRYCODE)
VALUES
('Großbritannien', 'Great Britain', 'UK') |
DELIMITER ;
SQL-Fiddle에서 테스트 완료(MySQL 5.5에서 사용 가능한 MariaDB 인스턴스 없음)
언급URL : https://stackoverflow.com/questions/15473654/mariadb-before-insert-trigger-for-uuid
반응형
'source' 카테고리의 다른 글
열 값을 업데이트하여 문자열의 일부를 바꿉니다. (0) | 2022.09.30 |
---|---|
.asSet(...)이 API에 있나요? (0) | 2022.09.30 |
Lookup에서 재귀 CTE를 사용하는 방법 (0) | 2022.09.29 |
이것은 안티 패턴입니까, 아니면 Vue가 파괴되었는지 여부를 검출하는 더 간단한 방법이 있습니까? (0) | 2022.09.29 |
Eclipse "오류: 주 클래스를 찾거나 로드할 수 없습니다." (0) | 2022.09.29 |