[PHP] MySQL 특정 필드에 중복값 넣지 않기 UNIQUE

2022. 10. 9. 22:32Program/PHP

128_PHP MySQL 특정 필드에 중복값 넣지 않기 UNIQUE

[요약]

  • 테이블의 필드에 같은 값이 입력되지 않게 하는 옵션 UNIQUE 에 대해 알아보자

테이블의 대표 필드에 promary key를 적용하면 해당 필드에는 같은 값이 들어가지 않는다.

primary key 처럼 플드에 같은 값이 들어가지 않게 하는 기능에는 UNIQUE가 있다.

primary key는 단 한 번만 사용할 수 있고, 사요할 경우 필드는 해당 테이블의 기준이 되는 필드가 되지만, UNIQUE는 같은 값이 들어가지 않게만 하는 기능을 갖고 있다. 예를 들어, 이메일 주소는 한 사람이 하나씩 갖고 있는 고유한 값이다.

따라서 같은 이메일 주소가 들어가지 않도록 테이블을 설계할 필요가 있다.

 

다음은 myMember 테이블에 UNIQUE를 추가하여 같은 값이 들어가지 않도록 필드 옵션을 수정하는 쿼리문이다.

ALTER TABLE myMember modify email varchar(30) NOT NULL UNIQUE COMMENT '고객의 이메일 주소';

옵션을 입력할 때 UNIQUE를 추가한다.

 

다음은 앞의 쿼리문을 실행하는 예제이다.

[예제: 131-1_alterUnique.php ]

<?php
    include $_SERVER['DOCUMENT_ROOT'] . '/php/108-2_connectDB.php';

    $sql = "ALTER TABLE myMember modify email varchar(30) NOT NULL UNIQUE COMMENT '고객의 이메일 주소'";
    $result = $dbConnect->query($sql);

    if ($result) {
      echo "변경 완료";
    } else {
      echo "변경 실패";
    }
?>

실행결과

기존 옵션에 UNIQUE를 추가했다.

이 쿼리문을 실행하면 이제 email 필드에는 같은 값을 추가할 수 업게 된다.

이를 확인하기 위해 이미 존재하는 이메일 주소를 임의로 넣어보자.

 

실행하는 쿼리문은 다음과 같다.

INSERT INTO myMember(userId, name, password, phone, email, birthDay, gender, regDate) 
VALUES('calvin', '케빈', '9007', '010-9876-5432', 'tom@gmail.com', '1974-10-09', 'm', now());

 

다음은 위의 쿼리문을 사용한 예제이다.

[예제: 131-2_insert.php ]

<?php
    include $_SERVER['DOCUMENT_ROOT'] . '/php/108-2_connectDB.php';

    $sql = "INSERT INTO myMember(userId, name, password, phone, email, birthday, gender, regDate) ";
    $sql .= "VALUES('calvin', '케빈', '9007', '010-9876-5432', 'tom@gmail.com', '1974-10-09', 'm', now());";
    $result = $dbConnect->query($sql);

    if ($result) {
      echo "입력 완료";
    } else {
      echo "입력 실패";
    }
?>

실행결과

error_reporting을 on으로 해 놓은 경우 이미 존재하는 이메일 주소를 UNIQUE가 설정된 email 필드에 입력하려 했으므로 입력에 실패하게 된다.

 

 

 


 

 

 

초보자를 위한 PHP 200제
김태영 지음 | 정보문화사