💾 MDB 파일 자동번호 INSERT 방법 (파이썬 / PHP 예제)
Access(MDB) 데이터베이스를 사용하다 보면, 자동으로 번호가 증가하는 AutoNumber(자동번호) 필드를 가진 테이블에 데이터를 추가해야 할 때가 많습니다.
이 글에서는 자동번호 필드의 작동 원리와, 파이썬(PyODBC) / PHP(ODBC)에서 INSERT할 때 주의할 점을 정리했습니다.
🧩 1. AutoNumber 필드란?
Microsoft Access에서는 레코드가 추가될 때마다 자동으로 증가하는 필드를 AutoNumber(자동번호) 형식으로 지정할 수 있습니다.
이 필드는 일종의 고유 키(primary key) 역할을 하며, 데이터 삽입 시 사용자가 값을 직접 넣지 않아야 자동 증가가 작동합니다.
예를 들어 다음과 같은 테이블이 있다고 가정합니다.
| ID (AutoNumber) | Name | RegDate | |
|---|---|---|---|
| 1 | 홍길동 | hong@test.com | 2025-10-22 |
| 2 | 이순신 | lee@test.com | 2025-10-23 |
이때, ID 컬럼은 Access가 자동으로 번호를 부여하므로 INSERT 구문에서 생략해야 합니다.
⚙️ 2. SQL 기본 예시
INSERT INTO members (name, email, reg_date)
VALUES ('홍길동', 'hong@test.com', NOW());
👉 ID 필드를 쓰지 않았습니다.
Access가 다음 번호를 자동으로 생성해 줍니다.
🐍 3. 파이썬(PyODBC)으로 MDB INSERT 하기
파이썬에서는 pyodbc 모듈을 통해 MDB(Access) 파일에 연결할 수 있습니다.
아래 예시는 members 테이블에 새로운 회원 정보를 추가하는 코드입니다.
import pyodbc
# MDB 파일 연결
conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\data\test.mdb;')
cursor = conn.cursor()
# AutoNumber 필드는 생략
sql = "INSERT INTO members (name, email, reg_date) VALUES (?, ?, ?)"
cursor.execute(sql, ('홍길동', 'hong@test.com', '2025-10-23'))
conn.commit()
# 마지막으로 생성된 자동번호 확인
cursor.execute("SELECT @@IDENTITY")
last_id = cursor.fetchone()[0]
print("새로 추가된 회원 ID:", last_id)
cursor.close()
conn.close()
✅ 실행 후 출력 예시
새로 추가된 회원 ID: 3
💡
@@IDENTITY는 Access SQL에서 마지막으로 생성된 자동번호(AutoNumber) 값을 반환하는 함수입니다.
💻 4. PHP(ODBC)로 MDB INSERT 하기
PHP에서도 ODBC 드라이버를 통해 MDB 파일에 접근할 수 있습니다.
윈도우 서버 환경에서 자주 사용하는 방식입니다.
<?php
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\data\\test.mdb;", "", "");
$sql = "INSERT INTO members (name, email, reg_date) VALUES ('홍길동', 'hong@test.com', NOW())";
odbc_exec($conn, $sql);
// 마지막 자동번호 값 확인
$rs = odbc_exec($conn, "SELECT @@IDENTITY AS last_id");
odbc_fetch_row($rs);
$last_id = odbc_result($rs, "last_id");
echo "새로운 회원 ID: " . $last_id;
odbc_close($conn);
?>
PHP에서도 동일하게 @@IDENTITY로 마지막 생성된 자동번호 값을 조회할 수 있습니다.
🧠 5. 수동 번호 넣기 (비추천)
AutoNumber 대신 직접 번호를 지정해야 할 경우, 다음처럼 MAX(id)+1을 이용할 수도 있습니다.
INSERT INTO members (id, name, email)
SELECT MAX(id)+1, '홍길동', 'hong@test.com' FROM members;
하지만 이 방식은 동시 삽입 시 충돌 위험이 있으며, Access의 자동증가 기능이 제공하는 안정성을 잃게 됩니다.
따라서 기본 키는 AutoNumber로 두고, SQL에서 생략하는 것이 가장 안전합니다.
