PHP는 MySQL 테이블을 생성할 때 mysql_query() 함수를 제공합니다. 마찬가지로 이 함수를 활용하면 MySQL 임시 테이블(Temporary Table)도 손쉽게 만들 수 있습니다. 임시 테이블은 세션이 종료되면 자동으로 삭제되기 때문에 중간 계산 결과를 저장하거나 복잡한 쿼리를 단계별로 처리할 때 유용하게 사용됩니다.
아래 예제를 통해 PHP 스크립트로 임시 테이블을 생성하는 방법을 살펴보겠습니다.
예제: 'SalesSummary' 임시 테이블 만들기
다음 예제에서는 PHP 스크립트를 사용하여 'SalesSummary'라는 이름의 임시 테이블을 생성합니다.
<html>
<head>
<title>MySQL 임시 테이블 생성하기</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "CREATE TEMPORARY TABLE SalesSummary( ".
"Product_Name VARCHAR(50) NOT NULL, ".
"total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, ".
"avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, ".
"total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 ); ";
mysql_select_db( 'TUTORIALS' );
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not create table: ' . mysql_error());
}
echo "Table created successfully\n";
mysql_close($conn);
?>
</body>
</html>코드 설명
1. 데이터베이스 연결
mysql_connect() 함수로 호스트, 사용자명, 비밀번호를 지정하여 MySQL 서버에 접속합니다. 연결에 실패하면 die() 함수가 실행되어 오류 메시지와 함께 스크립트가 종료됩니다.
2. CREATE TEMPORARY TABLE 쿼리 작성
일반 테이블 생성 문법과 동일하지만, CREATE 뒤에 TEMPORARY 키워드를 추가한다는 점이 핵심입니다. 이 예제의 SalesSummary 테이블은 다음과 같은 컬럼으로 구성됩니다.
- Product_Name: 상품명(VARCHAR 50자, NULL 허용 안 함)
- total_sales: 총 매출액(DECIMAL(12,2), 기본값 0.00)
- avg_unit_price: 평균 단가(DECIMAL(7,2), 기본값 0.00)
- total_units_sold: 총 판매 수량(INT UNSIGNED, 기본값 0)
3. 쿼리 실행 및 결과 확인
mysql_select_db()로 'TUTORIALS' 데이터베이스를 선택한 후, mysql_query()로 쿼리를 실행합니다. 반환값이 false이면 테이블 생성에 실패한 것이므로 오류 메시지를 출력하고, 성공하면 완료 메시지를 표시한 뒤 mysql_close()로 연결을 종료합니다.
참고 사항
예제에 사용된 mysql_* 계열 함수는 PHP 5.5부터 지원 중단(deprecated)되었고 PHP 7부터 완전히 제거되었습니다. 실제 프로젝트에서는 mysqli 확장 또는 PDO를 사용하는 것이 좋습니다. 예를 들어 mysqli 방식으로는 다음과 같이 작성할 수 있습니다.
<?php
$conn = new mysqli('localhost', 'root', 'rootpassword', 'TUTORIALS');
if ($conn->connect_error) {
die('Could not connect: ' . $conn->connect_error);
}
$sql = "CREATE TEMPORARY TABLE SalesSummary(
Product_Name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
)";
if (!$conn->query($sql)) {
die('Could not create table: ' . $conn->error);
}
echo "Table created successfully\n";
$conn->close();
?>또한 임시 테이블은 해당 데이터베이스 연결(세션) 내에서만 유효하며, 같은 이름의 일반 테이블이 있더라도 임시 테이블이 우선적으로 참조된다는 점을 기억해 두면 좋습니다.