Node.js에서는 DROP TABLE 문을 사용하여 MySQL 데이터베이스에 존재하는 테이블을 삭제할 수 있습니다. 더 이상 사용하지 않는 테이블을 통째로 제거해야 하는 경우가 종종 있는데, 기업 환경에서는 사용하지 않는 테이블을 바로 삭제하기보다 아카이브(보관)하는 것이 안전하다는 점을 참고하세요.
테이블을 삭제할 때는 크게 두 가지 상황을 고려할 수 있습니다.
- 테이블이 존재하면 삭제하고, 존재하지 않으면 에러 발생
- 테이블 존재 여부와 관계없이 무조건 삭제 시도
이 글에서는 두 가지 경우를 모두 예제와 함께 살펴보겠습니다.
사전 준비 사항
본격적으로 시작하기 전에 아래 명령어가 실행되어 프로젝트 환경이 준비되어 있어야 합니다.
- mkdir mysql-test
- cd mysql-test
- npm init -y
- npm install mysql
위 과정은 프로젝트 폴더에 Node.js의 mysql 모듈(의존성)을 설치하는 단계입니다.
테이블 삭제하기
테이블을 삭제하려면 먼저 app.js 파일을 생성한 뒤, 아래 코드를 복사해서 붙여넣고 다음 명령어로 실행합니다.
>> node app.js
예제 1 — 존재하지 않는 테이블 삭제 시도
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
// "customers" 테이블 삭제:
var sql = "DROP TABLE customers";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table deleted");
console.log(result);
});
});위 코드는 데이터베이스에 customers라는 이름의 테이블이 없기 때문에 에러를 발생시킵니다. 현재 데이터베이스에는 students라는 테이블만 존재합니다.
출력 결과
Error: ER_BAD_TABLE_ERROR: Unknown table 'bo.customers'
예제 2 — 존재하는 테이블 삭제
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
// "students" 테이블 삭제:
var sql = "DROP TABLE students";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table deleted");
console.log(result);
});
});출력 결과
테이블이 실제로 존재하므로 정상적으로 삭제되며, 다음과 같은 결과가 출력됩니다.
Table deleted
OkPacket {
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverStatus: 2,
warningCount: 0, // 테이블이 존재하는 경우 warningCount = 0
message: '',
protocol41: true,
changedRows: 0
}테이블이 존재할 때만 삭제하기 (IF EXISTS)
그렇다면 위와 같은 에러 상황은 어떻게 피할 수 있을까요? 해결 방법은 간단합니다. SQL 문에 IF EXISTS 절을 추가하면 됩니다. 이 절을 사용하면 테이블이 존재할 때만 삭제가 수행되고, 존재하지 않아도 에러 대신 경고(warningCount)만 반환됩니다.
아래 코드를 app.js 파일에 붙여넣은 후 실행해 보세요.
>> node app.js
예제
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
// "customers" 테이블 삭제 (존재할 경우에만):
var sql = "DROP TABLE IF EXISTS customers";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Table deleted");
console.log(result);
});
});출력 결과
Table deleted
OkPacket {
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverStatus: 2,
warningCount: 1, // 테이블이 존재하지 않으면 warningCount > 0
message: '',
protocol41: true,
changedRows: 0
}결과 객체의 warningCount 값을 확인하면 테이블이 실제로 삭제되었는지, 아니면 애초에 존재하지 않았는지 판단할 수 있다는 점도 유용하게 기억해 두세요.