그래서 나는 복합 키, 기본적으로 '사용자 ID'이 테이블이 - 고유해야합니다 '데이터'가이 만 효력을 만들 수 있다면 궁금 해서요, 그러나MySQL의 조건부 복합 키?
(내 다른 질문 SQL table - semi-unique row? 참조) userID가 0이 아닌 경우? 즉, 'userID'- 'data'는 0이 아닌 userID에 대해 고유해야합니다.
아니면 잘못된 나무를 짖고 있습니까?
감사
말라
그래서 나는 복합 키, 기본적으로 '사용자 ID'이 테이블이 - 고유해야합니다 '데이터'가이 만 효력을 만들 수 있다면 궁금 해서요, 그러나MySQL의 조건부 복합 키?
(내 다른 질문 SQL table - semi-unique row? 참조) userID가 0이 아닌 경우? 즉, 'userID'- 'data'는 0이 아닌 userID에 대해 고유해야합니다.
아니면 잘못된 나무를 짖고 있습니까?
감사
말라
SQL 제약 조건은 테이블의 모든 행에 적용됩니다. 특정 데이터 값에 따라 조건부로 만들 수는 없습니다.
그러나 0이 아닌 NULL
을 사용할 수 있으면 고유 제한 조건을 피해 갈 수 있습니다. 고유 제한 조건은 NULL
을 갖는 여러 항목을 허용합니다. 그 이유는 고유성은 값이 같음을 의미하기 때문입니다.이 존재할 수 있습니다. 균등 의미는 value1 = value2
이 참이어야 함을 의미합니다. 그러나 SQL에서 NULL = NULL
은 을 알 수 없으므로입니다.
CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));
INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo');
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
지금까지 너무 좋아, 이제 다음과 같은 문이 고유 제한 조건을 위반하는 것이라고 생각할 수도 있지만, 그렇지 않은 :
INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
최고, 감사합니다! 내가 다른 솔루션을 사용했다고 말했지만 내 질문에 대한 완벽한 답을 주었고 의심 할 여지없이 미래에 사용할 것입니다 =) – Mala