2014-12-21 2 views
0

어쨌든 이상한 문제가 있습니다. 어쨌든 내 눈이 이상합니다. ID, 사용자 이름, 전자 메일, 암호 등이있는 데이터베이스가 있습니다. ID는 기본 키이며 사용자 이름과 전자 메일에 모두 고유 키가 할당되어 있습니다.MySQL : 고유 키

이제 이상한 것은 제출할 때 다음 값을 말할 수 있습니다.

username: ActionHank 
email: [email protected] 

이 첨가된다.

이제 동일한 값을 다시 추가하려고하면 중복 항목이므로 허용되지 않는다는 오류가 발생합니다. 이것은 잘 작동합니다. 그러나 다음에 다음을 넣을 때;

username: ActionHank2 
email: [email protected] 

그냥 다시 입력하기 때문에 이메일 행에 고유 키를 입력하는 동안 2 명의 사용자가 동일한 전자 메일 주소를 사용합니다. 또한 사용자 이름 대신 전자 메일 주소를 변경하면 추가됩니다. 그래서 어떻게 든 MySQL은 UNIQUE 키 중 하나만 등록하거나 혼란 스럽습니다.

이 문제에 대해 도움을 줄 수 있습니까? 감사합니다

편집 : 나는 테이블을 만들 phpMyAdmin을 사용하고 SQL로 내 보낸, 여기에 생성 테이블 보이는 방법은 다음과 같습니다

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(25) NOT NULL, 
    `email` varchar(255) NOT NULL, 
    `password` varchar(255) NOT NULL, 
    `date_registered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `ip_address` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `username` (`username`,`email`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=54 ; 

그래서 나는 마이클과 Kingkero가 제안하는 복합 같아요. phpMyAdmin에서 어떻게 해결할 수 있습니까?

+2

각 행 자체에 UNIQUE 제약 조건이 있으며 둘 다 함께 적용되지 않습니까? – kero

+1

이 테이블에 대한 'SHOW CREATE TABLE tblname'을 게시하십시오. 개별 UNIQUE 인덱스가 아닌 해당 열에 복합 UNIQUE가있을 수 있습니다. –

+0

게시물을 수정합니다. :) – Serellyn

답변

2

usernameemail의 조합을 고유하게 정의했습니다.

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `username` varchar(25) NOT NULL UNIQUE, 
    `email` varchar(255) NOT NULL UNIQUE, 
    `password` varchar(255) NOT NULL, 
    `date_registered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `ip_address` varchar(50) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=54 ; 
0

이 시도 :이 단일 열이기 때문에, 당신은 할 수있다,

create table . . . 
    unique username, 
    unique email 
) 

또는 : 당신은 각각의 고유하려는 경우 별도의 고유 제한 조건을 정의 할 필요가

PRIMARY KEY (`id`), 
UNIQUE KEY `username` (`username`), 
UNIQUE KEY `email` (`email`)