Nodejs操作MySql数据库详解

 

Nodejs操作MySql数据库前提是,你已安装MySQL数据库和Nodejs。

关于MySQL8.0.19数据库安装与简单使用

https://blog.csdn.net/cnds123/article/details/104454487

关于Node.js可以参见Node.js 新手入门

https://blog.csdn.net/cnds123/article/details/104559497

 

在cmd中使用node -v命令来查看当前是否安装 Node 版本,若安装出现如下图所示版本号信息,说明已安装Node.js:

Nodejs操作MySql数据库详解

新版的nodejs已经集成了npm,所以安装nodejs时npm也一并安装好了。可以通过输入

npm -v

来测试是否成功安装。出现版本提示表示已安装。:

 

要想使用Node操作MySql数据库,除了已安装MySQL数据库和Nodejs,还需要安装mysql模块(包)——node. 操作 MySQL的驱动程序。

npm install mysql 即可安装mysql模块(包),参见下图:

Nodejs操作MySql数据库详解

其中有几条警告(WARN)可以先不管。

【若安装不了mysql模块(包),使用淘宝镜像去安装】

 

安装完之后如果要使用在代码中引入就可以了:

mysql = require('mysql')

 

例、建立一个名connTest.js脚本文件,用来测试连接,若连接成功将提示“connected as id XX”,其内容如下:

/*引入mysql模块*/

const mysql = require('mysql');

 

/*创建连接*/

const connection = mysql.createConnection({

    host: 'localhost',

    user: 'root',

    password: ''

});

 

/*连接mysql*/

connection.connect(function (err) {

    /*连接出错的处理*/

    if (err) {

        console.error('error connecting: ' + err.stack);

        return;

    }

    console.log('connected as id ' + connection.threadId);

});

/*关闭连接mysql*/

connection.end();

 

使用node connTest.js运行它,参见下图:

Nodejs操作MySql数据库详解

 

常见问题:node.js 连接mysql报错:error:cannot find module 'mysql'

原因:js文件(如test.js)和mysql模块(包)安装的路径不一致

 

解决办法:

法一、把JS脚本文件放到红框标出的目录中,然后再运行node connTest.js

查看安装过的模块和包的安装位置

npm ls 名字 -g

其中-g查看全局的模块和包信息,去掉查看本地的

如查看mysql模块和包的位置:npm ls mysql

Nodejs操作MySql数据库详解

 

法二、在cmd中切换到“js文件”所在的目录(connTest.js所在的目录D:\NodeTest)运行npm安装mysql包(提示,在D:\NodeTest中产生node_modules子目录),再运行node connTest.js

我的connTest.js保存在D:\NodeTest,参见下图:

Nodejs操作MySql数据库详解

 

D:\NodeTest中产生的node_modules子目录,包含你安装的mysql模块(包)。

 

连接成功,对mysql数据库的查询、添加数据等操作就可以进行了。

现在建立一个创建数据库的脚本文件,文件名为nodejs_mysql_DB.js,保存在D:\NodeTest中

var mysql = require('mysql');

var con = mysql.createConnection({

host: "localhost", user: "root", password: ""

});

con.connect(function(err) {

if (err) throw err;

console.log("Connected!");

con.query("CREATE DATABASE mysrcDB", function (err, result) {

if (err) throw err;

console.log("Database created");

});

});

/*关闭连接mysql*/

con.end();

 

脚本文件nodejs_mysql_DB.js用于创建名为mysrcDB的数据库。运行此脚本node nodejs_mysql_DB.js,参见下图:

Nodejs操作MySql数据库详解

 

现在建立一个名为mysqlTest.js的脚本文件,对mysrcDB的数据库建表MYTABLE、插入数据、更新数据、更新数据等操作,内容如下:

// 引入Mysql

var mysql      = require('mysql');

var connection = mysql.createConnection({

  host     : 'localhost',

  user     : 'root',

  password : '',

  database : 'mysrcDB'

});

 

// 执行数据库连接

connection.connect();

 

var sqlstring = "";

 

// 创建表

sqlstring = "Create Table MYTABLE (name VARCHAR(20), sex CHAR(1))"

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

    if (err) {

         console.log('[UPDATE ERROR] - ', err.message);

        return;

    }

    console.log('--------------------------CREATE----------------------------');      

    console.log('CREATE TABLE:', results);       

    console.log('------------------------------------------------------------\n\n'); 

});

 

// 插入数据

sqlstring = "Insert into MYTABLE Values('Michael', 'm')";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[INSERT ERROR] - ', err.message);

        return;

    }       

 

   console.log('--------------------------INSERT----------------------------');      

   console.log('INSERT ID - ', result);       

   console.log('------------------------------------------------------------\n\n'); 

});

 

// 更新数据

sqlstring = "Update MYTABLE Set name = 'Michael Jordan' Where sex = 'm'";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[UPDATE ERROR] - ', err.message);

        return;

    }       

    console.log('--------------------------UPDATE----------------------------');

    console.log('UPDATE affectedRows - ', result.affectedRows);

    console.log('------------------------------------------------------------\n\n'); 

});

 

// 查询数据

sqlstring = "Select * From MYTABLE";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[SELECT ERROR] - ', err.message);

        return;

    }

 

    console.log('--------------------------SELECT---------------------------');

    console.log('SELECT - ', result);

    console.log('------------------------------------------------------------\n\n');  

});

 

//删除数据

sqlstring = "Delete From MYTABLE";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[DELETE ERROR] - ', err.message);

        return;

    }       

 

    console.log('--------------------------DELETE----------------------------');

    console.log('DELETE affectedRows - ', result.affectedRows);

    console.log('------------------------------------------------------------\n\n'); 

});

 

//删除表格

sqlstring = "Drop Table MYTABLE";

connection.query(sqlstring, function (err, result) {

    if(err){

        console.log('[DROP ERROR] - ', err.message);

        return;

    }       

 

    console.log('--------------------------DROP-----------------------------');

    console.log('DROP TABLE :', result.affectedRows);

    console.log('------------------------------------------------------------\n\n');   

});

 

// 断开数据库连接

connection.end();

 

【说明

MySql数据库连接参数说明:

参数                  描述

host                    主机地址 (默认:localhost)

user                    用户名

password                密码

port                    端口号 (默认:3306)

database                数据库名

charset                 连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)

localAddress            此IP用于TCP连接(可选)

socketPath              连接到unix域路径,当使用 host 和 port 时会被忽略

timezone                时区(默认:'local')

connectTimeout          连接超时(默认:不限制;单位:毫秒)

stringifyObjects        是否序列化对象

typeCast                是否将列值转化为本地JavaScript类型值 (默认:true)

queryFormat             自定义query语句格式化方法

supportBigNumbers       数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)

bigNumberStrings        supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)

dateStrings             强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false)

debug                   开启调试(默认:false)

multipleStatements      是否许一个query中有多个MySQL语句 (默认:false)

flags                   用于修改连接标志

ssl                     使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

 】

 

运行此脚本node mysqlTest.js,参见下图:

Nodejs操作MySql数据库详解

 

Nodejs操作MySql数据库小结:

连接到MySQL数据库服务器;

对象上的query()方法来执行SQL语句;

关闭数据库连接。

 

相关文章:

  • 2021-12-13
  • 2021-07-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-27
  • 2021-11-04
猜你喜欢
  • 2021-06-13
  • 2022-12-23
  • 2022-01-19
  • 2022-12-23
  • 2021-05-19
  • 2022-12-23
相关资源
相似解决方案