Nodejs操作MySql数据库详解

Nodejs操作MySql数据库详解

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

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

MySQL8.0.19数据库管理系统安装与简单使用_cnds123的专栏-CSDN博客_数据库管理系统安装

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

Node.js 新手入门_cnds123的专栏-CSDN博客_node 入门

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

Nodejs操作MySql数据库详解_第1张图片

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

npm -v

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

要想使用Node操作MySql数据库,除了已安装MySQL数据库和Nodejs,还需要安装mysql模块(包)——node. 操作 MySQL的驱动程序。特别提示,一般在项目文件夹(js程序文件所在的目录)中,安装mysql模块(包),否则,node.js 连接mysql时报错:error: cannot find module 'mysql'

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

Nodejs操作MySql数据库详解_第2张图片

其中有几条警告(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数据库详解_第3张图片

常见问题: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数据库详解_第4张图片

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

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

Nodejs操作MySql数据库详解_第5张图片

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

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

现在建立一个创建数据库mysrcDB的脚本文件,文件名为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!");
        //建立数据库mysrcDB
	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数据库详解_第6张图片

现在建立一个名为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数据库详解_第7张图片

Nodejs操作MySql数据库小结:

连接到MySQL数据库服务器;

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

关闭数据库连接。

你可能感兴趣的:(MySQL数据库,JavaScrip技术,mysql,数据库,npm)