2016-06-08 6 views
0

나는 is_deleted 값을 columng하는 이메일 열의 0 인 경우에만 유효 행 아래에 있도록 1[email protected]0[email protected]가 입력하는 경우는 허용해서는 안 곳에서 허용 입력하면이 두 컬럼이있는 테이블, 나는, 고유성 만들고 싶어해야 . 어떻게 MySQL 에서이 제약 조건을 만들 수 있습니까?하나의 테이블에서 0/1 값을 갖는 mysql에서 두 개의 열을 고유하게 만드는 방법은 무엇입니까?

email   is_deleted 
[email protected] 1 
[email protected] 1 
[email protected] 1 
[email protected] 0 

고유 한 두 열을 모두 만들려고했지만 한 항목 만 허용했지만 이후에는 실패합니다.

[email protected] 1 
[email protected] 0 

고유 한 필드가있는 소프트 삭제 작업을하고 있습니다.

도움 주셔서 감사합니다.

답변

2

이것은 실제로 Stack Overflow에서 잠깐 살펴본보다 나은 질문 중 하나입니다. 내 이해에서, 적어도 조금 창조적 인 일을하지 않고서는 이것은 불가능합니다. 나는 그것을 작동하게 상상할 수

유일한 방법은 == 1 is_deleted 임의의 임의 IFF를 포함 할 수 있으며, 같은 테이블로 모든 3

에 대한 고유 키를 사용하여 추가 필드를 만드는 것입니다 다음과 같이 보일 수있는 것은 :

email   is_deleted null_ident 
[email protected] 1   0cc175b9c0f1b6a831c399e269772661 
[email protected] 1   92eb5ffee6ae2fec3ad71c777531578f 
[email protected] 1   4a8a08f09d37b73795649038408b5f33 
[email protected] 0   0 

그래서, is_deleted 경우에만 잠글 것이 모든 3에 대한 고유 키는 0이고 null_ident는 (비즈니스 로직을 통해 처리로)도 0입니다. 주소에 대해 is_deleted를 설정해야하는 경우 ident 키도 설정해야합니다.


또한 위 예제에서 null_ident는 일반적으로 허용되는 고유성을위한 md5 해시입니다. 필요한 항목에 따라 더 강력 할 수도 있고 덜 강력 할 수도 있습니다. 빌어 먹을 타임 스탬프는 아마 당신의 요구에 잘 맞을 것입니다. 인덱스의 char (36)은 약간 무겁지만 ... 이메일 주소는 varchar (310)입니다. :)