기존 데이터에 대해 MySQL에서 GUID를 생성하시겠습니까?
방금 MySQL 테이블로 많은 데이터를 Import했는데 기본적으로 기존의 모든 행을 새롭고 고유한 랜덤 GUID로 채우려는 "GUID" 열이 있습니다.
MySQL에서 이 작업을 수행하려면 어떻게 해야 합니까?
나는 노력했다.
UPDATE db.tablename
SET columnID = UUID()
where columnID is not null
그리고 모든 분야를 동일하게 해 주세요.
기존 테이블에 GUID 기본 키 열을 추가하고 고유한 GUID로 채워야 했습니다. 이 업데이트 쿼리는 내부 선택으로 작동했습니다.
UPDATE sri_issued_quiz SET quiz_id=(SELECT uuid());
매우 심플:-)
그게 가장 쉬운 방법인지는 모르겠지만, 효과가 있어요.모든 기능을 수행하는 트리거를 생성하여 테이블을 갱신하는 쿼리를 실행하고 마지막으로 이 트리거를 폐기합니다.
delimiter //
create trigger beforeYourTableUpdate BEFORE UPDATE on YourTable
FOR EACH ROW
BEGIN
SET new.guid_column := (SELECT UUID());
END
//
다음으로 실행한다.
UPDATE YourTable set guid_column = (SELECT UUID());
★★★★★★★★★★★★★★★★★.DROP TRIGGER beforeYourTableUpdate
;
업데이트 트리거를 사용하지 않지만 기본 키 또는 고유 인덱스가 필요한 다른 솔루션:
UPDATE YourTable,
INNER JOIN (SELECT unique_col, UUID() as new_id FROM YourTable) new_data
ON (new_data.unique_col = YourTable.unique_col)
SET guid_column = new_data.new_id
다시 업데이트:원래의 쿼리도 기능하는 것 같습니다(필요없을 수도 있습니다).WHERE columnID is not null
을 사용하다
승인된 솔루션에서는 고유 ID가 생성되지만 언뜻 보기에는 동일한 것으로 보이지만 처음 몇 글자만 다릅니다.
눈에 띄게 다른 키를 원할 경우 다음을 수행하십시오.
update CityPopCountry set id = (select md5(UUID()));
MySQL [imran@lenovo] {world}> select city, id from CityPopCountry limit 10;
+------------------------+----------------------------------+
| city | id |
+------------------------+----------------------------------+
| A Coruña (La Coruña) | c9f294a986a1a14f0fe68467769feec7 |
| Aachen | d6172223a472bdc5f25871427ba64e46 |
| Aalborg | 8d11bc300f203eb9cb7da7cb9204aa8f |
| Aba | 98aeeec8aa81a4064113764864114a99 |
| Abadan | 7aafe6bfe44b338f99021cbd24096302 |
| Abaetetuba | 9dd331c21b983c3a68d00ef6e5852bb5 |
| Abakan | e2206290ce91574bc26d0443ef50fc05 |
| Abbotsford | 50ca17be25d1d5c2ac6760e179b7fd15 |
| Abeokuta | ab026fa6238e2ab7ee0d76a1351f116f |
| Aberdeen | d85eef763393862e5fe318ca652eb16d |
+------------------------+----------------------------------+
MySQL Server 버전 5.5.40-0+wheezy1(Debian)을 사용하고 있습니다.
select @i:=uuid();
update some_table set guid = (@i:=uuid());
UUID가 생성되었을 때 UUID를 변경하려고 할 때 이상한 결과가 발생했기 때문에 사소한 추가만 하면 됩니다.레이크의 답변이 가장 간단하다는 것을 알았습니다만, 대시를 벗기고 싶은 경우는 제외합니다.
참조용:
UPDATE some_table SET some_field=(SELECT uuid());
이것은 스스로 완벽하게 작동했다.하지만 이걸 해보니
UPDATE some_table SET some_field=(REPLACE((SELECT uuid()), '-', ''));
다르지 - 했습니다).GROUP BY some_field
쿼리)를 클릭합니다.괄호를 어떻게 배치했는지는 중요하지 않습니다. 같은 일이 일어납니다.
UPDATE some_table SET some_field=(REPLACE(SELECT uuid(), '-', ''));
REPLACE를 사용하여 UUID를 생성하기 위해 서브쿼리를 둘러싸면 UUID 쿼리를 한 번만 실행할 수 있습니다.이것은 저보다 훨씬 똑똑한 개발자에게 최적화하는 것으로서 매우 의미가 있는 것 같습니다만, 저는 그렇게 하지 않았습니다.
이 문제를 해결하기 위해 다음 두 개의 쿼리로 나눕니다.
UPDATE some_table SET some_field=(SELECT uuid());
UPDATE some_table SET some_field=REPLACE(some_field, '-', '');
물론 간단한 해결책이지만, 이렇게 하면 내가 방금 잃은 시간을 누군가가 절약할 수 있을 거야.
단순한 오타 같은데요그 말은...여기서 columnId는 null입니까?"
UPDATE db.tablename
SET columnID = UUID()
where columnID is null
나는 거의 같은 문제에 직면했다.Im my case uuid는 BINARY(16)로 저장되며 NOT NULL UNIQUIRE 제약조건이 없습니다.각 행에 대해 동일한 UUID가 생성되고 UNIQURE 제약으로 인해 허용되지 않는 문제에 직면했습니다.따라서 이 쿼리는 작동하지 않습니다.
UNHEX(REPLACE(uuid(), '-', ''))
그러나, 이러한 쿼리를 nested inner select와 함께 사용했을 때는, 효과가 있었습니다.
UNHEX(REPLACE((SELECT uuid()), '-', ''))
그러면 모든 엔트리에 대해 고유한 결과가 생성됩니다.
MYSQL
UPDATE tablename SET columnName = UUID()
오라클
UPDATE tablename SET columnName = SYS_GUID();
SQL 서버
UPDATE tablename SET columnName = NEWID();;
UPDATE db.tablename SET columnID = (SELECT UUID()) where columnID is not null
// UID Format: 30B9BE365FF011EA8F4C125FC56F0F50
UPDATE `events` SET `evt_uid` = (SELECT UPPER(REPLACE(@i:=UUID(),'-','')));
// UID Format: c915ec5a-5ff0-11ea-8f4c-125fc56f0f50
UPDATE `events` SET `evt_uid` = (SELECT UUID());
// UID Format: C915EC5A-5FF0-11EA-8F4C-125FC56F0F50
UPDATE `events` SET `evt_uid` = (SELECT UPPER(@i:=UUID()));
mysql을 sql_mode = "로 사용했을 때 이 오류가 발생했습니다.몇 가지 테스트 결과, 이 사용법이 문제의 원인이라고 판단했습니다.디폴트 설정으로 테스트한 결과, 이 문제는 발생하지 않았습니다.주의: 모드를 변경한 후에는 연결을 새로 고치는 것을 잊지 마십시오.
SELECT CONCAT(SUBSTRING(REPLACE(UUID(),'-',''), 1, 5), SUBSTRING(UPPER(REPLACE(UUID(),'-','')), 4, 5), SUBSTRING('@#$%(*&', FLOOR(RAND()*(1-8))+8, 1)) pass
이 SELECT는 소문자 5자, 대문자 5자, 특수문자 1자로 진행했습니다.
언급URL : https://stackoverflow.com/questions/6280789/generate-guid-in-mysql-for-existing-data
'it-source' 카테고리의 다른 글
Java 프로그램콘솔 출력을 여러 파일로 리다이렉트하려면 어떻게 해야 합니까? (0) | 2022.11.29 |
---|---|
Java 8 Itable.ForEach()와 foreach 루프 (0) | 2022.11.29 |
MySQL에서 로그 파일을 보는 방법 (0) | 2022.11.29 |
던질 것으로 예상되는 비동기 테스트를 작성할 수 있습니까? (0) | 2022.11.29 |
JavaScript의 "elseif" 구문 (0) | 2022.11.29 |