2014-09-18 2 views
1

이것은 실행하려고하는 쿼리이지만 작동하지 않습니다.날짜/시간 열의 날짜 만 매개 변수 중 하나로 사용하여 고유 키를 만들 수 있습니까?

ALTER TABLE values ADD UNIQUE(id_cod, id_op, (SELECT date(V.completed_date) FROM values V;)); 

나는 값 테이블이 3 열이 있습니다 id_cod, id_opcompleted_date 나는 UNIQUE KEY에 사용할하지만 난 단지 날짜 - 시간의 날짜 부분을 사용하는 것이 나에게 중요합니다.

답변

1

MySQL에서는 그렇게 할 수 없습니다.

네 번째 열 을 추가하여 고유 제한 조건에 포함시키고 날짜 부분이 completed_date 인 열을 업데이트하는 트리거를 만들 수 있습니다.

+0

제안 해 주셔서 감사합니다. 그것은 나에게 유용하다. – adrian

1

세 가지 대안이 있으며 어느 것도 훌륭한 옵션이 아닙니다.

첫 번째 것은 날짜에 대해 별도의 열을 포함하는 것입니다. 트리거를 사용하여이를 유지 보수 한 다음 해당 열을 사용하여 고유 색인을 작성할 수 있습니다.

열을 날짜와 시간의 두 부분으로 나눌 수 있습니다. 그런 다음 색인의 날짜 부분 만 사용하십시오.

YYYY-MM-DD HH : MM : SS 형식을 사용하여 필드를 문자열로 나타낼 수 있습니다. 그런 다음이 필드에 접두사 색인을 사용할 수 있습니다 : create unique index idx_values_3 on values(id_code, id_op, datestr(10)).

두 번째 옵션이 가장 합리적이라고 생각합니다.

+0

두 번째 옵션이 가장 좋음에 동의합니다. 좋은 옵션은 아니지만 동의하지 않습니다 :-) id_code + id_op + date는 테이블의 자연 키를 생성하는 것으로 보이지만 시간은 단지 추가 정보 일뿐입니다. 그래서 두 가지를 분리하는 것은 완전한 의미를가집니다. –

+0

@ThorstenKettner. . . 다른 데이터베이스는 함수 기반 인덱스 또는 계산 열의 인덱스를 지원합니다. 이러한 고유 한 색인을 구현하는 더 좋은 방법입니다. –

+0

예 그들에 대해 알고 있으며 액세스 속도를 높이기위한 인덱스에 관해서는 동의합니다. 그러나 여기서 우리는 고유 한 색인에 대해 이야기하고 있습니다. id_code + id_op + date는 레코드를 고유하게 식별합니다. 그러한 데이터를 추가 데이터와 분리하는 것이 좋다고 생각합니다. –

관련 문제