여기에 문제가 있습니다.mysql은 여러 필드가있는 중복 레코드를 방지합니다
id : int(11) not null primary key
name : varchar(255) not null
status : enum('ACTIVE','DELETED')
참고 : 나는 다음과 같은 스키마의 테이블을 가지고있는 기록은 '소프트 삭제'이며, 우리가 '삭제됨'에 상태를 플래그.
문제는 db의 기존 레코드가 '삭제됨'상태가 아닌 한 2 명의 스레드를 통해 동일한 이름의 항목을 만들 수 없기를 바라는 것입니다. 이 작업을 수행하는 방법은 무엇입니까?
우리는 'DELETED'에 같은 이름의 항목이 있고 삭제하고자하는 영역이 'ACTIVE'이므로 오류가 발생합니다. 영역을 'DELETED'플래그로 지정하십시오.
그래, 좋은 생각이야! –
@PaulBellora 안타깝게도 nullable로 설정할 수 없습니다. 그렇지 않으면 UNIQUE 인덱스가 예상대로 작동하지 않습니다. NOT NULL이어야하며 기본값은 레코드가 소프트 삭제되지 않았 음을 나타내는 0이어야합니다. 직접 해보십시오. deleted_at을 nullable로 설정하면 name = '아마도 유일', deleted_at = NULL로 원하는 수만큼 레코드를 생성 할 수 있습니다. –
@ zi42 - 절대적으로 옳습니다. http://stackoverflow.com/a/429827/697449) - 의심해서 죄송합니다. +1 –