programing

고유한 이름을 가진 테이블 생성

testmans 2023. 6. 24. 08:49
반응형

고유한 이름을 가진 테이블 생성

노드를 사용하여 마리아DB 10.3 데이터베이스에 비임시 테이블을 만들어야 합니다.따라서 고유한 테이블 이름을 생성하는 방법이 필요합니다.

Node 함수는 테이블이 만들어진 항목 또는 시간에 대한 고유한 기능에 대한 정보에 액세스할 수 없으므로 타임스탬프 또는 연결 ID로 이름을 작성할 수 없습니다.현재 데이터베이스를 사용해야만 이름의 고유성을 확인할 수 있습니다.

질문에는 Postgre가 있습니다.다음을 제안하는 SQL 답변:

SET @name = GetBigRandomNumber();

WHILE TableExists(@name)
BEGIN
    SET @name = GetBigRandomNumber();
END

다음을 사용하여 MariaDB 구현을 시도했습니다.@name = CONCAT(MD5(RAND()),MD5(RAND()))임의의 64문자열을 생성합니다.(COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE @name) >0고유한 이름인지 확인합니다.

SET @name = CONCAT(MD5(RAND()),MD5(RAND()));
WHILE ((COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE @name) >0) DO
    SET @name = CONCAT(MD5(RAND()),MD5(RAND()));
END WHILE;
CREATE TABLE @name ( ... );

그러나 위 쿼리를 실행하려고 하면 구문 오류가 발생합니다.제 SQL 지식이 부족해서 어떤 문제가 있을지 모르겠습니다.

또한 이 접근 방식이 효율적입니까?임의로 생성된 이름은 데이터베이스의 현재 테이블과 충돌할 가능성이 매우 낮을 정도로 충분히 길기 때문에,WHILE루프를 실행할 필요가 거의 없을 것입니다. 하지만 테이블 이름을 자동으로 증분하는 일종의 내장 함수가 있습니까? 아니면 유사한 기능이 있습니까?

SET @name := UUID();

만약 그 안에 있는 대시가 문제를 일으킨다면,

SET @name := REPLACE(UUID(), '-', '');

보다 안전할 것입니다.RAND()그리고, 이론적으로, 그것의 고유성을 검증할 필요가 없을 것입니다.결국, 그것이 UUID의 목적입니다.

언급URL : https://stackoverflow.com/questions/52889679/generate-tables-with-unique-names

반응형