PHP와 MySQL로 개발할 때 스크립트가 실행될 때마다 데이터베이스나 테이블이 중복 생성되어 'already exists' 오류가 발생하는 경우가 있습니다. 이럴 때는 SQL의 IF NOT EXISTS 옵션을 사용하면 대상이 이미 존재하지 않을 때만 생성되도록 처리할 수 있어 안전합니다.
1. 데이터베이스를 한 번만 생성하기
데이터베이스가 존재하지 않는 경우에만 생성하려면 아래 문법을 사용합니다.
CREATE DATABASE IF NOT EXISTS yourDatabaseName;
2. 테이블을 한 번만 생성하기
테이블 역시 같은 방식으로, 이미 존재하지 않을 때만 생성됩니다.
CREATE TABLE IF NOT EXISTS yourTableName
(
yourColumnName yourDatatype,
.
.
N
);3. 실제 실행 예제
먼저 login이라는 이름의 데이터베이스를 생성해 보겠습니다.
mysql> CREATE DATABASE IF NOT EXISTS login; Query OK, 1 row affected (0.23 sec)
위 쿼리는 데이터베이스가 성공적으로 생성되었음을 의미합니다. 만약 login 데이터베이스가 이미 존재한다면 오류 없이 그대로 통과됩니다.
다음은 테이블을 생성하는 쿼리입니다.
mysql> CREATE TABLE IF NOT EXISTS DemoTable
(
Id int
);
Query OK, 0 rows affected (0.56 sec)위 결과 역시 테이블이 정상적으로 생성되었음을 보여줍니다. 테이블이 이미 있다면 아무 작업도 수행하지 않고 넘어갑니다.
4. PHP에서 연결하여 실행하기
PHP 스크립트에서 위 로직을 적용하려면 먼저 MySQL 서버에 접속한 뒤 쿼리를 실행하면 됩니다. mysqli 확장을 사용한 예시는 다음과 같습니다.
<?php
$conn = new mysqli("localhost", "yourUsername", "yourPassword");
if ($conn->connect_error) {
die("연결 실패: " . $conn->connect_error);
}
// 데이터베이스가 없을 때만 생성
$conn->query("CREATE DATABASE IF NOT EXISTS login");
// 생성한 데이터베이스 선택
$conn->select_db("login");
// 테이블이 없을 때만 생성
$conn->query("CREATE TABLE IF NOT EXISTS DemoTable (
Id INT
)");
$conn->close();
?>이처럼 IF NOT EXISTS를 활용하면 스크립트를 여러 번 실행해도 중복 생성 오류 없이 데이터베이스와 테이블을 안전하게 초기화할 수 있습니다.