> 데이터 베이스 > MySQL 튜토리얼 > ROW_NUMBER()를 사용하여 ID 열 없이 데이터를 자동 증가시키려면 어떻게 해야 합니까?

ROW_NUMBER()를 사용하여 ID 열 없이 데이터를 자동 증가시키려면 어떻게 해야 합니까?

DDD
풀어 주다: 2025-01-04 21:53:40
원래의
839명이 탐색했습니다.

How Can I Auto-Increment Data Without an Identity Column Using ROW_NUMBER()?

ORDER BY 없이 ROW_NUMBER()를 사용하여 데이터 자동 증가

ID 열 없이 테이블에 데이터를 삽입할 때 다음이 필요합니다. 기본 키를 자동 증가시키는 대체 방법을 찾으세요. 일반적으로 사용되는 접근 방식 중 하나는 행의 순차적 번호 지정을 허용하는 ROW_NUMBER() 함수입니다.

일반적으로 ROW_NUMBER() 함수에는 행 순서를 결정하기 위해 ORDER BY 절이 필요합니다. 그러나 합법적인 주문 필드를 사용할 수 없는 시나리오가 있습니다. 이 문제를 해결하기 위해 (SELECT 1)과 같이 ORDER BY 절에 임의의 상수 표현식을 사용하는 해결 방법이 있습니다.

이 기술을 OVER() 절과 결합하면 다음을 계산할 수 있습니다. 특정 순서를 지정하지 않고 각 행의 행 번호:

Row_Number() OVER (ORDER BY (SELECT 1))
로그인 후 복사

그런 다음 이 표현식을 INSERT 문에서 사용하여 기본 순서를 자동 증가시킬 수 있습니다. key:

INSERT INTO dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};
로그인 후 복사

그러나 이 해결 방법은 SourceTable의 원래 행 순서 보존을 보장하지 않는다는 점에 유의하는 것이 중요합니다. 실제로 결과의 최종 순서에 영향을 미치는 다른 요소가 있을 수 있습니다. 이는 "(특정 방식으로) 정렬되지 않음"이라는 개념이 "원래 순서 유지"와 다르기 때문입니다.

따라서 기본 키 자동 증가에 ID 열을 사용하는 것이 일반적으로 ROW_NUMBER( ) 해결 방법. 복잡한 계산이 필요하지 않을 뿐만 아니라 각 행에 고유하고 충돌하지 않는 ID가 있는지 확인하여 동시성과 데이터 무결성을 향상시킵니다.

위 내용은 ROW_NUMBER()를 사용하여 ID 열 없이 데이터를 자동 증가시키려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿