programing

MySQL 기본 ID UUID 설정

javamemo 2023. 8. 28. 20:43
반응형

MySQL 기본 ID UUID 설정

데이터베이스에 다음이 있는 테이블을 작성하려고 합니다.id기본적으로 UUID로 ID를 채울 필드입니다.

저는 다음과 같은 것을 시도했습니다.

CREATE TABLE FOO (
  id CHAR(36) PRIMARY KEY DEFAULT uuid()
);

당신의 도움에 대단히 감사합니다.

MySQL 5.7, 8.0.12 이상

5.7 또는 8.0.12의 MySQL은 열의 기본값으로 함수 또는 식을 사용하는 것을 지원하지 않습니다.

데이터 형식 규격의 DEFAULT value 절은 열의 기본값을 나타냅니다.한 가지 예외를 제외하고 기본값은 상수여야 하며 함수 또는 식을 사용할 수 없습니다.

https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html

다른 대안은 트리거를 사용하여 다음을 모니터링하는 것입니다.BEFORE INSERT원하는 테이블의.

DELIMITER ;;
CREATE TRIGGER `foo_before_insert` 
BEFORE INSERT ON `foo` FOR EACH ROW 
BEGIN
  IF new.id IS NULL THEN
    SET new.id = uuid();
  END IF;
END;;
DELIMITER ;

이 작업을 수행하면 의 기본값이 변경됩니다.INSERT에 대한 진술.uuid()값(명시적으로 정의되지 않은 경우).


MySQL 8.0.13 이상

MySQL 8.0.13 릴리스에서는 괄호 안에 포함된 식을 기본값으로 사용할 수 있습니다.

예제 db<>fiddle

에 지정된 기본값DEFAULT절은 문자 상수 또는 식일 수 있습니다.한 가지 예외를 제외하고 표현식 기본값을 괄호 안에 넣어 리터럴 상수 기본값과 구분합니다.예외는 다음과 같습니다.TIMESTAMP그리고.DATETIME열, 사용자가 지정할 수 있습니다.CURRENT_TIMESTAMP기본값으로 [sublish](괄호를 포함하지 않습니다.

CREATE TABLE foo (b BINARY(16)  DEFAULT (UUID_TO_BIN(UUID())));

새 행을 삽입할 때 열 이름을 생략하거나 열을 다음과 같이 지정하여 식이 기본값인 열에 대한 기본값을 삽입할 수 있습니다.DEFAULT(문자 기본값이 있는 열의 경우와 마찬가지로):

INSERT INTO foo () VALUES();
INSERT INTO foo () VALUES(DEFAULT);

https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html

MySql 버전 8 이상의 경우에는 에서 답을 찾을 수 있습니다. MySql에서 기본값으로 함수를 사용할 수 있습니까?

CREATE TABLE t1 (   'uuid_field' VARCHAR(32) DEFAULT (uuid());

사용하는 경우binary(16)유형으로 다음과 같이 기본값을 설정할 수 있습니다.

unhex(replace(uuid(),'-',''))

언급URL : https://stackoverflow.com/questions/46134550/mysql-set-default-id-uuid

반응형