Mariadb 에러 - ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

MariaDB에서 새로운 데이터를 입력하려고 할때 하기와 같은 에러가 발생하면서 입력이 안되는데요.

ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

해당 에러는 내용 그 자체로, PK로 설정된 필드에 중복(Duplicate) 된 값('1')이 있어서 발생한 에러입니다.

즉, 테이블 내에 기존 데이터가 있는 경우에 발생합니다.

이경우 truncate 중복테이블을 삭제하거나 primary 키를 확인하셔야 합니다.

먼저 테이블 상태를 확인하기 위해서 비어있는 테이블인지 여부를 확인해봅니다.

Table의 Row의 전체 갯수는 select count(*)을 통해서 확인하실 수 있습니다.

select count(*) from 테이블

그리고 Desc 명령어를 통해서 테이블의 상태를 확인합니다.

Desc 테이블명

 

이제 테이블상태까지 확인하였는데요.

MariaDB Primary 에러 해결방법

해당 에러의 원인을 알았으니, 에러가 발생했을때 해결하는 방법을 한번 생각해보면 아래와 같은 방법이 존재합니다.

  • 먼저 혹시 Insert나 Update시 잘못 작성하였는지 확인해봅니다.
  • 테이블을 하나만 수정해야 한다면 delete로 해당 PK와 같은 값이 있는 것만 삭제하면 됩니다.
  • 많은 데이터 수정이 필요하다면 차라리 truncate로 테이블을 비우고 새로 입력하시는 것이 편리합니다.
  • 마지막으로 해당 값이 PK로 사용할 값이 아니라면 PK 속성을 해제하여 해결할 수도 있습니다.
ALTER TABLE 테이블명 DROP PRIMARY KEY;

이렇게 DB 에러는 한가지 이지만 해당 메시지를 해결하는 방법은 정말 많은 방법이 있습니다.

가장 먼저 명령어 상태를 확인해보는 과정이 필요합니다.

많은 경우 명령어에 오타나 이전에 입력한 것을 중복입력하는 등 오류가 있을 수 있으니, 명령어를 확인해봅니다.

명령어에 오류가 없다면, 테이블 수정이 필요한데요.

Maria DB에서 테이블을 비우고 다시 입력하기 위해서는 truncate 명령어를 사용하시면 됩니다.

보다 자세한 실제 사용법은 마리아 DB 자습서에 나와 있습니다.

https://mariadb.com/kb/en/truncate-table/

 

TRUNCATE TABLE

DROP and re-CREATE a table.

mariadb.com

Truncate Delete 차이

그리고 테이블 삭제에는 명령어가 3개가 있습니다.(Truncate,Delete, Drop)

Delete로 테이블을 삭제하는 것과 Truncate로 테이블을 삭제하는 것은 항상 헷갈리기 쉬운데요.

delete

delete는 한줄한줄 삭제하느라 시간이 오래걸리는데요. 대신 롤백이 가능합니다.

그리고 데이터의 저장공간을 차지하고 있습니다.

Truncate는 테이블 자체를 삭제(drop)한 뒤 다시 Create 명령어로 만드는 것과 같습니다.

그렇기 때문에 속도가 빠르고, 다만 일부필드만 남기거나 할 수 없습니다.

 

그렇기 때문에 에러가 뜰 경우 왜 발생했는지 원인과 해결하는 방법에 대해서 한번 천천히 생각해보신 다음

코드를 수정하시면 됩니다.

 

'Tip & Tech > SQL' 카테고리의 다른 글

MariaDB 한글 깨짐 해결하기  (18) 2022.03.04
SQL 이란?  (16) 2022.02.11
[DB] 오라클 질의 연습  (0) 2015.11.08
[DB] 오라클 DML/DDL/DCL 차이  (0) 2015.11.07