본문 바로가기
MYSQL

MYSQL - 테이블 생성 - Unique

by 하니__ 2024. 5. 17.
유니크

 

만약 회원가입을 위한 데이터들을 입력했다고 하자

 

insert into user
(email, password, nickname)
values
('abc@naver.com', '1234', '홍길동');

 

 

그런데 시간이 흘러 어떤 유저가 내가 이걸 가입을 했었는지

기억을 못하고

다시 했다고 해보자

 

닉네임과 비밀번호는 다르게 했다고 치고

이메일을 중복으로 했다고 하자

 

insert into user
(email, password, nickname)
values
('abc@naver.com', '4567', '길동이');

 

 

그랬을때 아무런 문제 없이 이게 등록이 되면

문제가 있다

 

버그가 발생할 수도 있고

취약점이 생길 수도 있고

 

아무튼

 

그렇다면 이런 일을 방지해야 한다

 

 

테이블 설정으로 들어가서

UQ - Unique 버튼을 체크해주고 어플라이를 한뒤에

 

다시 같은 이메일로 가입을 하려고 한다면

에러가 뜨면서

해당 이메일은 유니크하기때문에 불가능하다는 메세지가 나오게 되고

 

중복 가입을 막게 된다

 

 

 

이중 유니크

 

위의 경우에선 한 가지의 유니크함이 있었다

 

아래의 경우에선

101번 id가 1번의 id에게 팔로우를 했다고 하자

insert into follow
(followerId, followeeId)
values
(101, 1) ;

근데 한번 더 팔로우를 했다고 한다면

 

이렇게 계속 추가적으로 팔로우가 되게 된다

 

이는 어뷰징이며 거짓 팔로우 숫자가 되게 된다

 

그렇다면 이것을 막아야하고

2번 하면 취소가 되게끔 해야겠다

 

 

이번에도 테이블 설정으로 들어가는데

이번 경우처럼 단일설정의 유니크가 아니라

두개의 데이터가 연관되어지는 유니크함은

 

 

테이블 설정 하단의 인덱스로 들어가야한다

인덱스를 클릭하고

 

 

이름은 보기 편하게 알아서 짓고

인덱스 버튼을 눌러 아래의 UNIQUE 버튼을 클릭하자

 

 

 

 

 

 

그러면 우측화면의 새로운 화면이 나오는데

이 때 연결되어 유니크함이 생겨야 하는 데이터를 더블 체크 해주자

 

 

그리고 다시 팔로우를 하려고 한다고 하면

insert into follow
(followerId, followeeId)
values
(101, 1) ;

 

그 값들은 중복데이터라 안된다는 에러메세지가 나오게 된다