두 열의 조합을 위한 양방향 고유 키 제약 조건
MySQL에 아래 테이블 열이 있습니다.
id
user_primary_email
user_secondary_email
요.user_primary_email
★★★★★★★★★★★★★★★★★」user_secondary_email
를 사용하여 얻을 수 있는 일의UNIQUE KEY unique_key_name (user_primary_email, user_secondary_email)
위의 고유한 키 제약 조건을 추가하면 아래의 시나리오를 달성하거나 개별 열에 고유한 키를 추가하는 것만으로 달성할 수 있습니다.
user_primary_email = 'xyz@gmail.com' AND user_secondary_email = 'pqr@gmail.com'
user_primary_email = 'xyz@gmail.com' AND user_secondary_email = 'pqr@gmail.com' //This will not be allowed to enter due to unique key constraint
현재 제가 직면하고 있는 문제는 아래와 같이 동일한 조합을 추가하여서는 안 된다는 것입니다.
user_primary_email = 'pqr@gmail.com' AND user_secondary_email = 'xyz@gmail.com' //This should not be allowed to add since already same email id combination added once
id | user_primary_email | user_secondary_email
-------------------------------------------------------
1 | xyz@gmail.com | pqr@gmail.com
-------------------------------------------------------
2 | pqr@gmail.com | xyz@gmail.com
-------------------------------------------------------
위의 경우 id 2 행을 삽입할 때 id 1 행에 이미 두 이메일 ID 조합이 사용되고 있기 때문에 오류가 발생합니다.
어떤 도움이라도 좋습니다.
어느 마리아에서도DB:
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`user_primary_email` varchar(64) DEFAULT NULL,
`user_secondary_email` varchar(64) DEFAULT NULL,
`mycheck` varchar(128) AS (IF(user_primary_email<user_secondary_email,CONCAT(user_primary_email,user_secondary_email),CONCAT(user_secondary_email,user_primary_email))) PERSISTENT,
PRIMARY KEY (`id`),
UNIQUE KEY `mycheck` (`mycheck`)
);
MariaDB [test]> insert into t values (1,'a','b',null);
Query OK, 1 row affected (0.03 sec)
MariaDB [test]> insert into t values (2,'b','a',null);
ERROR 1062 (23000): Duplicate entry 'ab' for key 'mycheck'
이를 직접 지원하는 것은 아니지만 회피책을 사용하여 양방향 키를 만들 수 있습니다.즉, 2개의 컬럼을 정렬한 버전에 고유 키가 필요합니다.
다행히도, 당신은 그것을 아주 쉽게 할 수 있습니다.MySQL 5.7.6+는 생성된 열과 고유한 인덱스를 지원하므로 두 값을 정렬하고 고유성을 적용하는 데 사용할 수 있습니다.
create table testBiDirKey (
a varchar(100),
b varchar(100),
a_ordered varchar(100) as (least(a, b)) STORED,
b_ordered varchar(100) as (greatest(a, b)) STORED,
unique key unqBi_test_ab (a_ordered, b_ordered)
);
insert into testBiDirKey(a,b) values('a', 'b');
insert into testBiDirKey(a,b) values('b', 'a');
Error Code: 1062. Duplicate entry 'a-b' for key 'unqBi_test_ab'
으로 치료하다null
, 키와 하게 사용할 수 있습니다.
insert into testBiDirKey(a,b) values('a', null);
insert into testBiDirKey(a,b) values('a', null);
insert into testBiDirKey(a,b) values(null, 'a');
모두 허용됩니다. 해서 더하면 요.coalesce(x,'')
값을 둘 중 하나).null
''
를 참조해 주세요를 참조해 주세요.에 값을 를 들어 값이 않은 ),
)는의 컬럼을 1개의 할 수 있습니다.,
되는 것 이 없습니다.- 단, 1 개개개개개 - - - - - - - - - - - - - - - - - - - - - - - - - -.
5.7.8은 STORED
키워드를 입력하면 인덱스에서 이러한 열을 사용할 수 있습니다.이 키워드는 값을 저장(디스크 공간 사용)하거나 필요할 때 계산(기본값)하는 경우에 적용됩니다.
5.7할 수 (MySQL 5.7.6에서는).update
★★★★★★★★★★★★★★★★★」insert
하려면 , 더 가 필요합니다 두 열을 이 값으로 업데이트하려면 동일한 논리가 적용되며, 코드만 조금 더 있으면 됩니다.
언급URL : https://stackoverflow.com/questions/41040301/bi-directional-unique-key-constraint-for-combination-of-two-columns
'IT' 카테고리의 다른 글
시스템인 이유Java 네이티브 어레이 복사 (0) | 2022.10.19 |
---|---|
Python 문자열에서 \xa0을 삭제하는 방법 (0) | 2022.10.19 |
높이가 100%인 풀스크린 iframe (0) | 2022.10.19 |
선택한 라디오 버튼의 값을 가져오려면 어떻게 해야 합니까? (0) | 2022.10.18 |
IntelliJ Import 정리 (0) | 2022.10.18 |