MySql에서 기본값으로 함수를 사용할 수 있습니까?
나는 다음과 같은 것을 하고 싶다.
create table app_users
(
app_user_id smallint(6) not null auto_increment primary key,
api_key char(36) not null default uuid()
);
단, 이로 인해 오류가 발생합니다.mysql의 디폴트값으로 함수를 호출하는 방법이 있습니까?
감사해요.
아니, 그럴 수 없다.
다만, 다음과 같은 트리거를 간단하게 작성할 수 있습니다.
_insert_app_users 전에 트리거 생성app_users에 삽입하기 전에각 행에 대하여new.api_key = uuid()를 설정합니다.
mysql v8.0.13 에서는 필드의 기본값으로 식을 사용할 수 있습니다.
DEFAULT 절에서 지정된 기본값은 리터럴 상수 또는 식입니다.한 가지 예외를 제외하고 식 기본값을 괄호 안에 넣어 리터럴 상수 기본값과 구분합니다.
CREATE TABLE t1 (
uuid_field VARCHAR(32) DEFAULT (uuid()),
binary_uuid BINARY(16) DEFAULT (UUID_TO_BIN(UUID()))
);
이미 언급했듯이 당신은 할 수 없다.
이 동작을 시뮬레이트 하려면 , 다음의 방법으로 트리거를 사용할 수 있습니다.
CREATE TRIGGER before_insert_app_users
BEFORE INSERT ON app_users
FOR EACH ROW
IF new.uuid IS NULL
THEN
SET new.uuid = uuid();
END IF;
기존 행을 다음과 같이 업데이트해야 합니다.
UPDATE app_users SET uuid = (SELECT uuid());
안타깝게도 MySQL 5에는 기본값으로 상수가 필요합니다.이 문제는 다음 링크에서 훨씬 더 자세히 설명되었습니다.그러나 유일한 답은 null을 허용하고 테이블 트리거를 추가하는 것입니다.
MySQL은 최근에야 DB 패키지의 일부로 UUID를 받아들였고, 우리가 원하는 만큼 기능이 풍부하지 않습니다.
http://www.phpbuilder.com/board/showthread.php?t=10349169
기본값은 상수여야 합니다. 함수 또는 식일 수 없습니다.
MySQL에 해 주세요.UUID()CHAR(36)UUID를 텍스트로 저장하는 것(다른 응답에 나타나 있듯이)은 매우 비효율적입니다.대신 열은 다음과 같아야 합니다.BINARY(16) , 을.UUID_TO_BIN()때, 그리고 「」를 참조해 주세요.BIN_TO_UUID()시시시시
CREATE TABLE app_users
(
app_user_id SMALLINT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
api_key BINARY(16)
);
CREATE TRIGGER before_insert_app_users
BEFORE INSERT ON app_users
FOR EACH ROW
IF new.api_key IS NULL
THEN
SET new.api_key = UUID_TO_BIN(UUID());
END IF;
MySQL은 이것이 UUID인지 잘 모르기 때문에 바이너리로 저장된 문제를 해결하기가 어려울 수 있습니다.이 문서에서는 공간을 차지하거나 바이너리 버전과 텍스트 버전을 동기화하지 않고 필요에 따라 UUID를 텍스트로 변환하는 생성 컬럼을 작성하는 방법에 대해 설명합니다.https://mysqlserverteam.com/storing-uuid-values-in-mysql-tables/
버전 10.2.1 이후의 MariaDB에서는 가능합니다.메뉴얼을 참조해 주세요.
CREATE TABLE test ( uuid BINARY(16) PRIMARY KEY DEFAULT unhex(replace(uuid(),'-','')) );
INSERT INTO test () VALUES ();
SELECT * FROM test;
위의 답변이 오래된 버전인지 잘 모르겠습니다만, unhex() 함수를 사용하여 할 수 있는 것을 보았습니다.시도해보니 동작합니다.( maria db version 10 . 2 )
할수있습니다
.... column_name binary(16) not null default unhex(replace(uuid(),'-',''))
그리고 그것은 동작한다.UUID를 표시하려면 16진수(column_name)를 수행합니다.
Harrison Fisk의 답변은 쓰여졌을 때 훌륭했지만, 지금은 시대에 뒤떨어졌다.
요즘은 표현으로 사용할 수 있습니다.DEFAULT이 값은 MySQL 8.0 및 MariaDB 10.2부터 지원됩니다.주의: 다음과 같은 비결정론적 함수를 사용할 수 있습니다.NOW()또는USER(), 를 사용하지 마십시오.binlog_format=statement.
언급URL : https://stackoverflow.com/questions/270309/can-i-use-a-function-for-a-default-value-in-mysql
'source' 카테고리의 다른 글
| React + ES6 + 웹 팩을 사용하여 구성 요소를 가져오고 내보내는 방법은 무엇입니까? (0) | 2023.02.14 |
|---|---|
| MySQL 쿼리 런타임 감소 (0) | 2023.01.29 |
| 테이블스페이스 오류: Mariadb에서 테이블 복원 (0) | 2023.01.29 |
| HTML 속성과 속성의 차이점은 무엇입니까? (0) | 2023.01.29 |
| (Nuxt.js/Vue.js) 새로 고침 후 Vuex 저장소에서 액시오스 인증 토큰 설정 리셋 (0) | 2023.01.29 |