제약사항 UNIQUE
는 컬럼에 데이터의 중복 여부를 처리하는 속성입니다. 컬럼에는 다 양한 값들이 입력될 수 있는데, 특정한 컬럼의 경우 데이터를 구분하기 위하여 중복되지 않은 고유의 값만 처리해야 되는 경우도 많이 발생합니다.
컬럼의 UNIQUE 속성을 지정하게 되면 컬럼의 데이터 값은 중복을 허용하지 안습니다. 입력된 모든 데이터는 서로 다른 값을 가지고 있습니다. 만일 중복된 컬럼 데이터가 입력 될 때 SQL 쿼리 명령은 오류를 발생합니다. 간단한 설정값으로 중복으로 인하여 발생될 수 있는 오류를 사전에 방지할 수 있습니다.
프라이머리 키 (PRIMARY KEY) 제약사항 또한 자동적으로 유일값 (UNIQUE) 속성과 같은 유일성이 보장되는 값을 가집니다.
09.3.1 쿼리 실습
UNIQUE 설정은 컬럼들을 선언한 뒤에 마지막에 별도의 추가 선언을 합니다. UNIQUE(컬럼명) 형태로 더 추가하면 됩니다.
| 예제 쿼리 |
CREATE TABLE members (
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
UNIQUE (Id)
);
또는 CONSTRAINT 키워드를 통하여 여러 컬럼을 UNIQUE로 정의할 수 있습니다.
| 예제 쿼리 |
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255),
CONSTRAINT UC_members UNIQUE (Id,LastName)
);
ALTER TABLE 명령으로 기본값을 추가로 설정을 변경할 수 있습니다.
| 예제 쿼리 |
ALTER TABLE members ADD UNIQUE (Id);
CONSTRAINT 키워드를 통하여 다수의 컬럼 필드를 유일값으로 추가할 수 있습니다.
| 예제 쿼리 |
ALTER TABLE members ADD CONSTRAINT UC_members UNIQUE (Id,LastName);
유일값을 삭제할 수도 있습니다.
| 예제 쿼리 |
ALTER TABLE members DROP INDEX UC_members;
09.3.2 PHP 실습
PHP 코드를 통하여 UNIQUE 속성 처리에 대한 실습입니다. 관련 메서드를 추가하여 소스에 적용합니다.
| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.
public function constraintUNIQUE($tbname, $field)
{
if ($tbname) {
$queryString = "ALTER TABLE $tbname ADD UNIQUE ($field)";
// 쿼리를 전송합니다.
if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
$this->msgEcho("쿼리성공] ".$queryString);
$this->msgEcho(" 기본값 설정!");
return true;
} else {
$this->msgEcho("Error] ".$queryString);
return false;
}
} else {
$this->msgEcho("Error] 테이블 이름이 없습니다.");
return false;
}
}
public function constraintUNIQUE_Drop($tbname, $field)
{
if ($tbname){
$queryString = "ALTER TABLE $tbname DROP INDEX `$field`";
// 쿼리를 전송합니다.
if (mysqli_query($this->dbcon, $queryString)=== TRUE){
$this->msgEcho("쿼리성공] ".$queryString);
$this->msgEcho(" 기본값 설정!");
return true;
} else {
$this->msgEcho("Error] ".$queryString);
return false;
}
} else {
$this->msgEcho("Error] 테이블 이름이 없습니다.");
return false;
}
}
예제 파일 | attr-03.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
$tbname = "members";
$field = "email";
// 컬럼필드 유일필드 설정
$db->constraintUNIQUE($tbname, $field);
?>
화면 출력
mysql connected!
쿼리성공] ALTER TABLE members ADD UNIQUE (email)
기본값 설정!