MySQL-테이블을 자동으로 UUID에 넣도록 변경


14

좋아, 나는 내가 전에 이것을 한 것을 알고있다. 그러나 나는 내 인생에서 그것을 알아낼 수 없습니다. 테이블을 만들었습니다. 열 중 하나는 "LogID"로 표시되며 기본 키이기도합니다.

이 열이 각각의 새 항목에 대해 UUID를 생성하도록 어떻게 변경합니까?

감사

답변:


17

주어진 열에 대한 UUID를 생성 하기 위해 삽입하기 전에 실행할 트리거를 작성하십시오 .

CREATE TRIGGER before_insert_mytable
  BEFORE INSERT ON mytable
  FOR EACH ROW
  SET new.LogID = uuid();

3

UUID () 호출하면 표현식은 UUID를 생성합니다.

불행히도 (AFAIK) MySQL은 표현식을 필드의 기본값으로 허용하지 않습니다. 이 문제를 해결하려면 항상 필드를 기본 null로 설정하고 삽입시 UUID로 필드를 업데이트하는 트리거를 가질 수 있습니다.


2

실제로 는 여전히 할 수 없다고 확신 합니다 . 나는 심각하게 고려할 것 없는 대신 슬림, 같은 더 좋은 데이터 형식을 사용, 기본 키와 같은 UUID를 사용하여 INT. UUID를 별도의 열로 추가 TRIGGER하고 적합한 경우을 통해 업데이트 할 수 있습니다.


데이터베이스 전체에서 고유 한 레코드가 필요한 경우 정수가 손상됩니다.
Cfreak

1
요구 사항이 해당 레벨의 엔진 스토리지 패턴을 지시하는 경우 더 큰 모델 설계 또는 선택한 도구 문제가 있다고 생각합니다. 이 경우 UUID를 별도의 열로 사용하는 것이 실제로는 세계 최고의 솔루션입니다.
Avarkx

UUID는 일단 사람을 위해 포맷되면 부풀어 오른다. UUID를 기본 키로 사용하려면 대시를 제거하고 16 진수를 해제하십시오. 휴먼 형식의 버전이 필요한 경우 생성 된 열을 테이블에 추가 할 수 있습니다. SELECT LENGTH(UNHEX(REPLACE(UUID(),'-','')))= 16 바이트 이진. 보다 여전히 더 큰 INT하지만보다 훨씬 더VARCHAR(36)
miknik

나쁜 조언, miknik. UUID를 기본 키로 사용하면 데이터베이스가 크게 확장됩니다. 복합 기본 키로 16 개의 개별 정수 열이있을 수도 있습니다. 그리고 인덱스 조각화가 풍부합니다! 기본 키는 이제 임의입니다. 그렇다면 외래 키를 사용하지 마십시오. 결합을 O (n)에서 O (n ^ 2)로 변경합니다. O (n log10 (n))에서 O (n ^ 3)으로 두 개의 조인. n을 100,000으로 바꾸고 차이를 뺍니다.
TamusJRoyce

2

방금 응용 프로그램의 삽입에 UUID () 명령을 포함하기로 결정했습니다.

모두 감사합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.