Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

Node.js로 MySQL 데이터 삭제하기 – DELETE FROM 문 활용 가이드

데이터 삽입에 이어, 이제 저장된 레코드를 삭제하는 방법을 알아보겠습니다. MySQL에서는 테이블의 특정 식별자(조건)를 기준으로 레코드를 삭제할 수 있으며, 이때 DELETE FROM 문을 사용합니다.

레코드 삭제의 두 가지 방식

  • 정적 삭제(Static Deletion) – 미리 정해진 조건값을 코드에 직접 작성하여 해당 조건에 맞는 레코드를 삭제하는 방식입니다.
  • 동적 삭제(Dynamic Deletion) – 삭제 전에 사용자로부터 조건값을 입력받은 후, 그 값을 기반으로 레코드를 삭제하는 방식입니다.

사전 준비 사항

본격적으로 시작하기 전에 아래 명령어가 실행되어 프로젝트 환경이 준비되었는지 확인하세요.

mkdir mysql-test
cd mysql-test
npm init -y
npm install mysql

위 과정은 프로젝트 폴더에 Node.js에서 MySQL을 사용할 수 있도록 mysql 의존성 모듈을 설치하는 단계입니다.

students 테이블에서 레코드 삭제하기

  1. MySQL 테이블에서 레코드를 삭제하려면 먼저 app.js 파일을 생성합니다.
  2. 아래 예제 코드를 파일에 복사하여 붙여넣습니다.
  3. 다음 명령어로 코드를 실행합니다.
>> 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 테이블의 레코드를 손쉽게 삭제할 수 있습니다. 특히 실무 환경에서는 하드코딩된 값 대신 플레이스홀더(?)를 사용한 파라미터 바인딩 방식을 권장합니다. 이는 보안성을 높이고 코드 재사용성을 향상시키기 때문입니다.