제약사항 ‘NOT NULL ’은 컬럼의 NULL 값에 대한 처리 여부를 지정하는 속성입니다. 보 통 컬럼에 아무런 데이터가 입력되지 않으면 NULL 값으로 설정됩니다.
컬럼의 데이터에 반드시 들어가야 하는 필수 데이터 값은 ‘NOT NULL’ 속성을 부여하는 것이 좋습니다. NOT NULL 제약사항이 설정된 컬럼은 데이터를 필수적으로 입력해야 하기 때문에 데이터 값이 없는 경우 SQL 쿼리 구문은 오류로 실행되지 않습니다.
NULL로 비어 있는 컬럼 값으로 인하여 발생할 수 있는 오류를 미리 방지할 수 있는 유용 한 제약사항입니다.
09.1.1 쿼리 실습
다음 예제는 ‘Customers’ 테이블에서 ‘ID’, ‘LastName’, ‘FirstName’ 컬럼 필드 값의 NULL을 허용하지 않는 형태로 테이블을 생성합니다.
| 예제 쿼리 |
CREATE TABLE members (
Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
);
컬럼의 NULL 허용 및 방지는 테이블 생성 후에도 ALTER TABLE 명령을 사용하여 수정 할 수 있습니다.
| 쿼리 문법 |
ALTER TABLE 테이블명 CHANGE COLUMN `컬럼명` `컬럼명` 데이터 타입 NOT NULL
또는 다음과 같이 사용하여 수정할 수 있습니다.
| 쿼리 문법 |
ALTER TABLE 테이블명 CHANGE COLUMN `이전 컬럼명` `변경 컬럼명` 데이터 타입 NULL
09.1.2 PHP 실습
PHP 코드를 통하여 NOT NULL 제약사항 속성을 실습해 봅니다.
| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.
public function constraintNOTNULL($tbname, $field, $datatype)
{
if ($tbname) {
$queryString = "ALTER TABLE $tbname CHANGE COLUMN `$field` `$field` $datatype NOT NULL";
// 쿼리를 전송합니다.
if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
$this->msgEcho("쿼리성공] ".$queryString);
$this->msgEcho(" NOT NULL 설정!");
return true;
} else {
$this->msgEcho("Error] ".$queryString);
return false;
}
} else {
$this->msgEcho("Error] 테이블 이름이 없습니다.");
return false;
}
}
public function constraintNULL($tbname, $field, $datatype)
{
if ($tbname) {
$queryString = "ALTER TABLE $tbname CHANGE COLUMN `$field` `$field` $datatype NULL";
// 쿼리를 전송합니다.
if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
$this->msgEcho("쿼리성공] ".$queryString);
$this->msgEcho(" NULL 설정!");
return true;
} else {
$this->msgEcho("Error] ".$queryString);
return false;
}
} else {
$this->msgEcho("Error] 테이블 이름이 없습니다.");
return false;
}
}
예제 파일 | attr-02.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
$tbname = "members";
// 컬럼필드 NULL 허용하지 않습니다.
$db->constraintNOTNULL($tbname, "City", "varchar(30)");
// 컬럼필드 NULL 허용.
$db->constraintNULL($tbname, "FirstName", "varchar(20)");
?>
화면 출력
mysql connected!
쿼리성공] ALTER TABLE members CHANGE COLUMN `City` `City` varchar(30) NOT NULL
NOT NULL 설정!
쿼리성공] ALTER TABLE members CHANGE COLUMN `FirstName` `FirstName` varchar(20) NULL
NULL 설정!
NOT NULL 설정은 MySQL 검색 및 처리 성능을 향상시킬 수 있습니다. 만일 모든 컬럼을 NOT NULL 로 설정하면 각각의 컬럼마다 1비트의 공간을 절약할 수 있습니다.