데이터 삽입에 이어, 이제 저장된 레코드를 삭제하는 방법을 알아보겠습니다. MySQL에서는 테이블의 특정 식별자(조건)를 기준으로 레코드를 삭제할 수 있으며, 이때 DELETE FROM 문을 사용합니다.
레코드 삭제의 두 가지 방식
- 정적 삭제(Static Deletion) – 미리 정해진 조건값을 코드에 직접 작성하여 해당 조건에 맞는 레코드를 삭제하는 방식입니다.
- 동적 삭제(Dynamic Deletion) – 삭제 전에 사용자로부터 조건값을 입력받은 후, 그 값을 기반으로 레코드를 삭제하는 방식입니다.
사전 준비 사항
본격적으로 시작하기 전에 아래 명령어가 실행되어 프로젝트 환경이 준비되었는지 확인하세요.
mkdir mysql-test
cd mysql-test
npm init -y
npm install mysql
위 과정은 프로젝트 폴더에 Node.js에서 MySQL을 사용할 수 있도록 mysql 의존성 모듈을 설치하는 단계입니다.
students 테이블에서 레코드 삭제하기
- MySQL 테이블에서 레코드를 삭제하려면 먼저
app.js파일을 생성합니다. - 아래 예제 코드를 파일에 복사하여 붙여넣습니다.
- 다음 명령어로 코드를 실행합니다.
>> node app.js
예제 1: 정적 삭제
아래 예제는 address가 'Delhi'인 학생 레코드를 삭제하는 코드입니다.
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
// address="Delhi"인 레코드 삭제
var sql = "DELETE FROM student WHERE address = 'Delhi'; "
con.query(sql, function (err, result) {
if (err) throw err;
console.log("Record deleted = ", result.affectedRows);
console.log(result);
});
});실행 결과
Record deleted = 1
OkPacket {
fieldCount: 0,
affectedRows: 1, // 삭제된 레코드 수
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}결과 객체의 affectedRows 속성을 통해 실제로 삭제된 레코드의 개수를 확인할 수 있습니다.
예제 2: 동적 삭제 (플레이스홀더 활용)
다음 예제는 address 필드값을 동적으로 전달하여, 해당 조건과 일치하는 레코드만 삭제합니다. 물음표(?) 플레이스홀더를 사용하면 SQL 인젝션 위험을 줄이면서 안전하게 쿼리를 실행할 수 있습니다.
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
// 테이블에서 원하는 레코드 삭제
let sql = `DELETE FROM student WHERE address = ?`;
// address=Delhi인 행 삭제
con.query(sql, 'Delhi', (err, result, fields) => {
if (err) throw err;
console.log("Record deleted = ", result.affectedRows);
console.log(result);
});
});실행 결과
OkPacket {
fieldCount: 0,
affectedRows: 3, // address=Delhi 조건으로 3개 행 삭제됨
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}마무리
이처럼 Node.js와 mysql 모듈을 활용하면 간단한 쿼리 작성만으로 MySQL 테이블의 레코드를 손쉽게 삭제할 수 있습니다. 특히 실무 환경에서는 하드코딩된 값 대신 플레이스홀더(?)를 사용한 파라미터 바인딩 방식을 권장합니다. 이는 보안성을 높이고 코드 재사용성을 향상시키기 때문입니다.