php - mysql은 인덱스를 사용하지 않고 어떻게 중복 데이터를 삽입할 수 없나요?
PHP中文网
PHP中文网 2017-05-16 12:58:10
0
2
608

테이블에는 a와 b라는 두 개의 필드가 있습니다.

예를 들어 기록은 다음과 같습니다.
1, 2
1, 3
2, 3
1, 3

설명:
1. 그 중 1과 3은 반복되는 데이터입니다.
2. 테이블에 중복된 데이터가 존재할 수 있습니다.

문제: 사용자가 데이터베이스에 추가하지 않을 중복 데이터를 선택했을 때 사용자가 추가한 데이터는 다음과 같습니다.

2, 3
1, 4
1, 3

1과 4만 삽입할 수 있고 나머지는 삽입할 수 없습니다. 이 요구 사항을 충족하려면 어떻게 해야 합니까? 미안

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(2)
伊谢尔伦

이 문제는 해결하기가 더 쉽습니다. 낙관적 잠금을 사용하면 단계는 다음과 같습니다.
1. (1, 3) 튜플의 md5 해시 키(hashedKey)를 Redis에 생성하고 첫 번째 쿼리에 해당 레코드를
2. 레코드를 삽입할 때 먼저 새 (1,3) 튜플의 md5 해시 키를 redis에 삽입합니다(낙관적 잠금 메커니즘). 삽입할 수 없으면 키가 이미 존재하고 삽입 작업이 수행됨을 증명합니다. ;
3. 해시 알고리즘 예는 다음과 같습니다.

으아아아

=== 질문을 잘 살펴보니 MySQL을 이용해서 해결해야 할 것 같습니다 ===

인덱스를 사용하지 않는다면 정말 좋은 아이디어가 없습니다. 하지만 인덱스를 구축할 수 있다면 a->b를 인덱스 테이블의 필드로 만들 수 있으며 인덱스 유형은 다음과 같습니다. 고유 인덱스를 사용하면 반복 삽입 문제도 해결할 수 있습니다.

为情所困

고유 제약 조건을 사용하는 목적은 데이터베이스 계층에서 중복 데이터를 제한하는 것입니다.

이 제한을 포기하고 싶다면 프로그래밍을 통해서만 피할 수 있습니다.

가장 직접적인 해결책은 데이터를 삽입하기 전에 먼저 데이터를 검색하여 고유성을 고려해야 하는 필드가 업데이트될 값으로 이미 존재하는지 확인하는 것입니다. 존재하는 경우 업데이트를 중단하고, 그렇지 않으면 업데이트를 수행합니다. 그러나 이는 여전히 중복 데이터 입력을 완전히 피할 수는 없으며, 여전히 동시 중복 데이터 입력 가능성이 크게 줄어드는 상황이라고 할 수 있습니다.

고유 제약 조건을 사용할 수 있는 경우 고유 제약 조건 보장을 시도하는 것이 좋습니다. 결국 이것이 시스템 보장의 마지막 계층입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿