// mysql 데이터베이스에서 레코드 자료 추가시 중복 레코드 방지 방법

Prevent Sending Duplicate record 

 

Best way to avoid duplicate entry into mysql database

https://stackoverflow.com/questions/2219786/best-way-to-avoid-duplicate-entry-into-mysql-database

 

    - 유닉크 인덱스 키 설정

ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);

 

 

    - 중복으로 INSERT 될때 무시(에러 발생 안함)

INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");

 

 

//-------------------------------------

    - 참고) 중복시 특정 칼럼을 UPDATE
INSERT INTO thetable (pageid, name, somefield)
VALUES (1, "foo", "first")
ON DUPLICATE KEY UPDATE (somefield = 'first')

INSERT INTO thetable (pageid, name, somefield)
VALUES (1, "foo", "second")
ON DUPLICATE KEY UPDATE (somefield = 'second')

 


    - 참고) 중복시 카운터 증가
INSERT INTO thetable (pageid, name)
VALUES (1, "foo"), (1, "foo")
ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)

 

 

//-----------------------------------------------------------------------------

* 2개의 칼럼의 조합이 중복되지 않게 MySql DB 테이블 설정
ALTER TABLE `users` ADD UNIQUE `unique_index`(`email`, `user_id`);

- 유니크 칼럼 추가 가능
ALTER TABLE `users` ADD UNIQUE `unique_index2`(`nickname`);

- 유니크 설정 삭제
ALTER TABLE `users` DROP INDEX `unique_index2`;

 


//===================
* 중복된 값 조회
select users.*
from  users join 
     (select email, user_id, count(*) as dup 
      from users 
      group by email, user_id 
      having dup > 1 
     ) `tsum` 
     on users.email = tsum.email and users.user_id = tsum.user_id ; 


//=================
// 참고

MySQL select records for duplicates using multiple columns
https://stackoverflow.com/questions/16324328/mysql-select-records-for-duplicates-using-multiple-columns 

 

MySQL 중복데이터 관리방법 (INSERT IGNORE, ON DUPLICATE KEY UPDATE...)

https://umanking.github.io/2021/07/05/mysql-duplicate-record/

 

How To Avoid Inserting Duplicate Records in MySQL
https://ubiq.co/database-blog/how-to-avoid-inserting-duplicate-records-in-mysql/

 

 

반응형
Posted by codens