• 07-Node.js操作MySQL数据库

    # Node.js 连接 MySQL

    (1)安装 mysql 包:

    $ npm install mysql
    
    1

    (2)引入 mysql 包:

    const mysql = require("mysql");
    
    1

    (3)建立连接:

    let mysql = require("mysql");
    let options = {
      host: "localhost",
      //port:"3306", //可选,默认3306
      user: "root",
      password: 'xxx', // 这里改成你自己的数据库连接密码
      database: "qiangu_database",
    };
    //创建与数据库进行连接的连接对象
    let connection = mysql.createConnection(options);
    
    //建立连接
    connection.connect((err) => {
      if (err) {
          // 数据库连接失败
        console.log(err);
      } else {
          // 数据库连接成功
        console.log("数据库连接成功");
      }
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    正常来说,运行程序后,应该会提示数据库连接成功

    如果在运行时提示错误Client does not support authentication protocol requested by server,解决办法如下:(在终端进入 sql 之后,输入如下命令)

    # 注意,这里的 'root' 请填你的user账号, 'localhost' 请填 你的 host, 'password' 请填你的密码
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    
    # 然后执行如下命令
    flush privileges;
    
    1
    2
    3
    4
    5

    # Node.js 增删改查 MySQL

    针对下面这张表:

    通过 Node.js可以对其进行一些增删改查操作。代码举例如下。

    # 1、查询表

    let mysql = require('mysql');
    let options = {
        host: 'localhost',
        //port:"3306",//可选,默认3306
        user: 'root',
        password: 'xxx', // 这里改成你自己的数据库密码
        database: 'qiangu_database'
    }
    //创建与数据库进行连接的连接对象
    let connection = mysql.createConnection(options);
    
    //建立连接
    connection.connect((err) => {
        if (err) {
            // 数据库连接失败
            console.log(err)
        } else {
            // 数据库连接成功
            console.log('数据库连接成功')
        }
    });
    
    
    // 1、查询表
    let strSql1 = 'select * from qiangu_student_table';
    connection.query(strSql1, (err, result, fields) => {
        if (err) {
            // 表查询失败
            console.log(err);
        } else {
            // 表查询成功
            console.log('qiangu_student_table 表查询结果:' + JSON.stringify(result));
            console.log('fields:' + JSON.stringify(fields));
        }
    })
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36

    打印结果如下:

    qiangu_student_table 表查询结果:
    [{"id":1,"name":"千古壹号","age":28},{"id":2,"name":"许嵩","age":34},{"id":3,"name":"邓紫棋","age":28}]
    
    fields:[
        {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"id","orgName":"id","charsetNr":63,"length":11,"type":3,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true},
        {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"name","orgName":"name","charsetNr":33,"length":765,"type":253,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true},
        {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"age","orgName":"age","charsetNr":63,"length":11,"type":3,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true}
    ]
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 删除表

    // 2、删除表
    let strSql2 = 'drop table test2_table';
    connection.query(strSql2, (err, result) => {
        if (err) {
            // 表删除失败
            console.log(err);
        } else {
            // 表删除成功
            console.log('表删除成功:' + result);
        }
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    打印结果:

    表删除成功:
    OkPacket {
        fieldCount: 0,
        affectedRows: 0,
        insertId: 0,
        serverStatus: 2,
        warningCount: 0,
        message: '',
        protocol41: true,
        changedRows: 0
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 删除数据库

    将上方的sql语句换一下即可:

    let strSql3 = 'drop database qiangu_database';
    
    
    1
    2

    # 2、新建数据库

    let mysql = require('mysql');
    let options = {
        host: 'localhost',
        //port:"3306",//可选,默认3306
        user: 'root',
        password: 'smyhvae001',
        // database: 'qiangu_database'  // 注意,因为代码里是创建新的数据库,所以这里不需要填其他的数据库名
    }
    //创建与数据库进行连接的连接对象
    let connection = mysql.createConnection(options);
    
    //建立连接
    connection.connect((err) => {
        if (err) {
            // 数据库连接失败
            console.log(err);
        } else {
            // 数据库连接成功
            console.log('数据库连接成功')
        }
    });
    
    // 创建新的数据库
    const strSql4 = 'create database qiangu_database3';
    connection.query(strSql4, (err, result) => {
        if (err) {
            console.log(err);
        } else {
            console.log('新建数据库成功:' + JSON.stringify(result));
        }
    
    });
    
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    打印结果:

    数据库连接成功
    新建数据库成功:{
        "fieldCount":0,"affectedRows":1,"insertId":0,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
    }
    
    
    1
    2
    3
    4
    5

    # 3、新建表

    新建表的sql语句举例:

    CREATE TABLE `qiangu_table5` (
        `id` int NOT NULL AUTO_INCREMENT,
        `name` varchar(255) DEFAULT NULL,
        `age` int DEFAULT NULL,
        PRIMARY KEY (`id`)
    );
    
    1
    2
    3
    4
    5
    6

    如果是在 js 代码中执行上面这样命令的话,要记得把 sql 语句存放在字符串里的同一行。

    代码举例如下:

    let mysql = require('mysql');
    let options = {
        host: 'localhost',
        //port:"3306",//可选,默认3306
        user: 'root',
        password: 'smyhvae001',
        database: 'qiangu_database'
    }
    //创建与数据库进行连接的连接对象
    let connection = mysql.createConnection(options);
    
    //建立连接
    connection.connect((err) => {
        if (err) {
            // 数据库连接失败
            console.log(err);
        } else {
            // 数据库连接成功
            console.log('数据库连接成功')
        }
    });
    
    
    // 新建表
    // 注意,在 js 代码中,sql 语句要存放在字符串里的同一行。
    const strSql5 = 'CREATE TABLE `qianguyihao_table5` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`));';
    
    connection.query(strSql5, (err, result) => {
        if (err) {
            // 新建表失败
            console.log(err);
        } else {
            // 新建表成功
            console.log('qianguyihao 新建表成功:' + JSON.stringify(result));
        }
    })
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37

    打印结果:

    数据库连接成功
    qianguyihao 新建表成功:
    {
        "fieldCount":0,"affectedRows":0,"insertId":0,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
    }
    
    1
    2
    3
    4
    5

    # 在指定的表中插入数据

    在指定的表中插入数据:

    // 在指定的表中插入数据
    const strSql6 = "insert into qianguyihao_table5 (name, age) values ('千古壹号', '28')";
    
    connection.query(strSql6, (err, result) => {
        if (err) {
            // 插入数据失败
            console.log(err);
        } else {
            // 在指定的表中插入数据成功
            console.log('qianguyihao 在指定的表中插入数据成功:' + JSON.stringify(result));
        }
    });
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    打印结果:

    qianguyihao 在指定的表中插入数据成功:
    {
        "fieldCount":0,"affectedRows":1,"insertId":1,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
    }
    
    1
    2
    3
    4

    如果插入的数据是变量(比如是用户提交上来的数据),那么,sql 语句可以这样写:

    // 在指定的表中插入数据(数据作为变量)
    const strSql7 = "insert into qianguyihao_table5 (name, age) values (?, ?)";
    
    connection.query(strSql7, ['许嵩', '34'], (err, result) => {
        if (err) {
            // 插入数据失败
            console.log(err);
        } else {
            // 在指定的表中插入数据成功
            console.log('qiangauyihao 在指定的表中插入数据成功:' + JSON.stringify(result));
        }
    });
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13