ICT Diary

Network(主にCisco系)、Server(RedHat系)、Program(適当)を気まぐれにUPしていく。

Node.js Mysqlの使い方

目次



mysqlモジュールのインストール



npm install mysql

DBに接続



DB情報

接続先:localhost
DB名:testdb
ユーザ名:hoge
パスワード:hoge

接続

    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host     : "localhost", //hostname or ip address
        user     : "hoge",      //username
        password : "hoge"       //password
        //database : "testdb"   //※1
    });

    connection.connect();

※1 :ここでDB名を指定するとSQL文でテーブル名の前にDB名を付けなくてよくなるが、今回はあえて指定しない。

接続(エラー処理あり)

    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host     : "localhost", //hostname or ip address
        user     : "hoge",      //username
        password : "hoge"       //password
    });

    connection.connect(function(err) {
        if (err) {

            // エラー文出力
            console.error("DB log: database conenect failed");
            console.error('error DB connect: ' + err.stack);
            return;
        }

        //接続成功ログ
        console.log("DB log: database conenect success");
        console.log('connected as id ' + connection.threadId);
    });

    //DB切断
    connection.end(function(err){

        if(err){
            console.log(err);//DB切断エラーログ
        }
    });

切断(callback引数あり)

    connection.end(function(err){

        if(err){
            console.log(err);//DB切断エラーログ
        }
    });

切断(callback引数無し)

    connection.destroy();

クエリ(SQL実行)



前提情報

DB構造

テーブル名:sample |列名|型|primary| |:-:|:-:|:-:| |code|int|○| |user|char|| |age|int|| |||

SQL
  • DB作成
    create database testdb;
  • テーブル作成
    create table sample(code int(10) primary key, user char(10), age int(10));

DBデータ

テーブル名:sample |code|user|age| |:-:|:-:|:-:| |1|山田|20| |2|田中|30| |3|木村|10| |||

SQL
  • データ作成
    insert into sample(code, user, age) values(1, '山田', 20);
    insert into sample(code, user, age) values(2, '田中', 30);
    insert into sample(code, user, age) values(3, '木村', 10);

SELECT

SQL

    select * from testdb.sample where code = 1;

Code

    var code = 1;
    var sql = "select * from testdb.sample where code = "+ code;

    connection.query(sql, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

INSERT

SQL

    insert into testdb.sample(code,user,age) values(4,'中村',25);

Code

    var sql = "insert into testdb.sample(code,user,age) values(4,'中村',25);";

    connection.query(sql, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

UPDATE

SQL

    update testdb.sample set age = 60 where code = 4;

Code

    var sql = "update testdb.sample set age = 60 where code = 4;";

    connection.query(sql, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

DELETE

SQL

    delete from testdb.sample where code = 1;

Code

    var sql = "delete from testdb.sample where code = 1";
    connection.query(sql, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

クエリ(SQL実行):プレースホルダー使用



SELECT(プレースホルダー使用)

SQL

    select * from testdb.sample where code = 1;

Code

    var sql = "select * from testdb.sample where code = ?";
    var data = [1];
    connection.query(sql, data, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

INSERT(プレースホルダー使用)

SQL

    insert into testdb.sample(code,user,age) values(5,'内田',23);

Code

    var sql = "insert into testdb.sample set ?";
    var data = {code:5,user:'内田',age:23};
    connection.query(sql,data,function(err,results,fields){
        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

UPDATE(プレースホルダー使用)

SQL

    update testdb.sample set user = '山本' Where code = 5;

Code

    var sql = "update testdb.sample set user = ? Where code = ?";
    var data = ['山本',5];
    connection.query(sql,data,function(err,results,fields){
        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

DELETE(プレースホルダー使用)

SQL

    delete from testdb.sample where code = 1;

Code

    var sql = "delete from testdb.sample where code = ?";
    var data = [1];
    connection.query(sql, data, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

クエリ(SQL実行):プレースホルダーを使用した複数行実行

SQL

    insert into testdb.sample(code,user,age) values(10,'桂枝雀',59);
    insert into testdb.sample(code,user,age) values(11,'桂歌丸',81);

Code

    var sql = "insert into testdb.sample(code,user,age) values(?),(?)";
    var data = [[10,'桂枝雀',59],[11,'桂歌丸',81]];
    connection.query(sql, data, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

クエリ(SQL実行):列名指定にもプレースホルダーを使用した実行



SQL

    select code, user from testdb.sample where code = 1;

Code

    var sql = "select ?? from testdb.sample where code = ?";
    var columns = ["code", "user"];
    var data = [columns,2];
    connection.query(sql, data, function (err, results, fields) {

        if(err){
            console.error("sql execute error");
        }else{
            console.log("sql execute seccess");

            console.log(results);
            //DB切断
            connection.end(function(err){

                if(err){
                    console.log(err);//DB切断エラーログ
                }
            });
        }
    });

トランザクション処理



    connection.beginTransaction(function(err) {
        if (err) {
            console.log(err);
        }else{

            var sql = "insert into testdb.sample(code,user,age) values(?),(?)";
            var data = [[10,'桂枝雀',59],[11,'桂歌丸',81]];

            connection.query(sql, data, function (err, results, fields) {
                if(err){
                    console.error("sql execute error");
                    //エラー時はロールバックして元に戻す
                    connection.rollback(function() {
                        console.log(err);

                        //DB切断
                        connection.end(function(err){

                            if(err){
                                console.log(err);//DB切断エラーログ
                            }
                        });
                    });
                }else{
                    console.log("sql execute seccess");

                    connection.commit(function(err) {//コミット

                        if (err) {//コミット失敗
                            connection.rollback(function() {
                                console.log(err);
                                //DB切断
                                connection.end(function(err){
                                    if(err){
                                        console.log(err);//DB切断エラーログ
                                    }
                                });
                            });
                        }else{
                            console.log('success!');

                            console.log(results);
                            //DB切断
                            connection.end(function(err){

                                if(err){
                                    console.log(err);//DB切断エラーログ
                                }
                            });
                        }
                    });
                }
            });
        }
    });