MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

Node.jsでMySQLのテーブルを削除する方法(DROP TABLE文の使い方)

Node.jsからMySQLデータベースに接続している場合、「DROP TABLE」ステートメントを使うことで、既存のテーブルを削除できます。テーブル全体を削除したいケースはありますが、企業環境では、使用しなくなったテーブルは削除せずにアーカイブしておくことが推奨されるのが一般的です。

テーブルを削除する際には、主に次の2つのシナリオが考えられます。

  • テーブルが存在する場合のみ削除し、存在しない場合はエラーをスローする
  • テーブルの存在有無にかかわらず削除を実行する

この記事では、両方のシナリオについて具体的なコード例とともに解説します。

事前準備

作業を始める前に、以下のコマンドがすでに実行済みであることを確認してください。

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

これらのコマンドは、プロジェクトフォルダにNode.jsのmysqlモジュール(依存パッケージ)をインストールするためのものです。

テーブルを削除する基本手順

  • まず、app.jsファイルを作成します。
  • 次に、後述のサンプルコードを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」を使ってテーブルが存在する場合のみ削除する

先ほどの例のように、存在しないテーブルを指定してエラーになるのを避けたい場合はどうすればよいのでしょうか。その答えが「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
}

このように、DROP TABLE IF EXISTSを使えば、テーブルの存在有無を事前に確認することなく安全に削除処理を行えます。本番環境での運用では、誤って必要なテーブルを削除しないよう、IF EXISTS句の活用と事前のバックアップ取得を心がけましょう。

  1. JavaのPreparedStatementを使ってMySQLテーブルにレコードを挿入する方法

    JavaのPreparedStatementを使用してMySQLのテーブルにレコードを挿入するには、まずINSERT文の雛形を作成し、値の部分をプレースホルダー(?)で置き換えます。SQLインジェクション対策やパフォーマンス向上の観点からも、この方法は推奨されています。1. INSERT文の基本構文レコード挿入用のSQLは、以下のような構文で記述します。String anyVariableName = INSERT INTO yourTableName(yourColumnName1, yourColumnName2, yourColumnName3, ...N) + VALUES (?, ?

  2. Javaを使用してMySQLテーブルの値を表示する方法

    MySQLデータベースのテーブル値をJavaで表示するには、ResultSetの概念を利用します。データベースへの接続には、MySQL JDBCドライバーを使用します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo87    -> (    -> name varchar(20),    -> age int    -> )