내 레일 앱의 경우 mysql 데이터베이스 테이블에서 중복 레코드를 발견했습니다.동시 발생 원인 중복 레코드가 삽입되었습니다
user_product 테이블
ID | user_id | product_id | 금액 | created_at | update_at
181115 | 811115 | 1800 | 2 | 2014-10-16 03:00:13 | 2014-10-16 03:03:58
181116 | 811115 | 1800 | 2 | 2014-10-16 03:00:13 | 2014-10-16 03:03:58
하지만 사용자 제품 모델에의 validates_uniqueness_of를 추가했습니다.
class UserProduct < ActiveRecord::Base validates_uniqueness_of :product_id, scope: :user_id ...... end
나는 rails doc에서 유용한 정보를 발견했다. 액티브 ::하는 검증 #과 함께이 검증 방법을 사용는
, 중복 레코드 삽입의 부재를 보장하지 않습니다 저장 응용 프로그램 수준에서 고유성 검사 조건을 경주 본질적 경향이 있기 때문이다. 이것은 '직렬화 가능'격리 수준으로 트랜잭션을 사용하는 경우에도 발생할 수 있습니다.
데이터베이스 격리 수준을 검사했는데 "직렬화 가능"이 아니라 "반복 가능 읽기"입니다.
SELECT @@global.tx_isolation;
REPEATABLE-READ
이 문제를 해결하기 위해 고유 인덱스를 합성 할 수 있습니다.
add_index :user_product, [:product_id, :user_id], unique: true
근원을 찾으십시오. 아무도 저를 도울 수 있기를 바랍니다. 고마워요!
은 기본 키가 아닌 ID입니까? –
예, 기본 키가 아닙니다 – pangpang