sourcetip

Oracle 데이터베이스.동일한 테이블에 행의 복사본 삽입(키 중복 오류 메시지)

fileupload 2023. 9. 20. 20:39
반응형

Oracle 데이터베이스.동일한 테이블에 행의 복사본 삽입(키 중복 오류 메시지)

오라클 데이터베이스에는 기본 키 GAME_ID가 있는 테이블이 하나 있습니다.game_name = 'Texas holdems' 행의 복사본을 삽입해야 하는데 다음과 같이 표시됩니다.

UPDATE 또는 INSERT 문에서 중복 키 삽입을 시도했습니다.

사용 중인 쿼리입니다.

INSERT INTO GAME (SELECT * FROM GAME WHERE NAME = 'Texas Holdem');

당신의 가정하에game_idsequence에 의해 생성되며 select 문의 일부로 새 것을 얻을 수 있습니다.

INSERT INTO GAME (game_id, name, col_3)
SELECT seq_game_id.nextval, name, col_3
FROM GAME 
WHERE NAME = 'Texas Holdem';

조금 더 추상적인 관점을 제시하겠습니다...

  • 관계형 데이터베이스에서 표는 수학적 관계 개념의 물리적 표현입니다.
  • 관계는 튜플의 집합입니다(예: 테이블 행/기록).
  • 집합에 주어진 요소가 포함되어 있거나 포함되어 있지 않으므로 다중 집합과 달리 동일한 요소를 여러 번 포함할 수 없습니다.
  • 따라서 테이블에서 동일한 행을 두 개 가질 수 없으며 데이터베이스를 "relational"이라고 부릅니다.1

다른 답변에서도 알 수 있듯이 비슷한 행을 에 삽입할 수 있습니다.


1 실제 DBMS(Oracle 포함)를 사용하면 일반적으로 키 없이 테이블을 만들 수 있지만 동일한 중복을 물리적으로 가능하게 합니다.하지만, 만약 여러분이 그렇게 하고 있다는 것을 알게 된다면, 그것을 큰 붉은 깃발이라고 생각하세요.

키가 같은 행은 하나만 가질 수 있습니다.키를 복제하지 마십시오.복사할 열 목록을 지정하고 키를 제외합니다(자동으로 제공된다고 가정).

테이블에 이미 행을 넣으려고 합니다.예를 들어, 당신의 테이블에는

GAME_ID Name
1       Texas Holdem

이 줄을 테이블에 삽입하려고 하는데 game_id 1이 이미 있습니다. 그래서 이 줄을 삽입하려면 이 게임 이름에 대한 새로운 game_id를 생성하기 위해 이와 같은 줄을 새로 만들어야 합니다.

INSERT INTO GAME(Name) VALUES ('Texas Holdem')

언급URL : https://stackoverflow.com/questions/20907770/oracle-database-insert-a-copy-of-a-row-to-the-same-table-duplicate-key-error-m

반응형