Nodejs操作MySql数据库详解
Nodejs操作MySql数据库前提是,你已安装MySQL数据库和Nodejs。
关于MySQL8.0.19数据库安装与简单使用
MySQL8.0.19数据库管理系统安装与简单使用_cnds123的专栏-优快云博客_数据库管理系统安装
关于Node.js可以参见Node.js 新手入门
Node.js 新手入门_cnds123的专栏-优快云博客_node 入门
在cmd中使用node -v命令来查看当前是否安装 Node 版本,若安装出现如下图所示版本号信息,说明已安装Node.js:
新版的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模块(包),参见下图:
其中有几条警告(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运行它,参见下图:
常见问题:node.js 连接mysql报错:error:cannot find module 'mysql'
原因:js文件(如test.js)和mysql模块(包)安装的路径不一致
解决办法:
法一、把JS脚本文件放到红框标出的目录中,然后再运行node connTest.js
查看安装过的模块和包的安装位置
npm ls 名字 -g
其中-g查看全局的模块和包信息,去掉查看本地的
如查看mysql模块和包的位置:npm ls mysql
法二、在cmd中切换到“js文件”所在的目录(connTest.js所在的目录D:\NodeTest)运行npm安装mysql包(提示,在D:\NodeTest中产生node_modules子目录),再运行node connTest.js
我的connTest.js保存在D:\NodeTest,参见下图:
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,参见下图:
现在建立一个名为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数据库小结:
连接到MySQL数据库服务器;
对象上的query()方法来执行SQL语句;
关闭数据库连接。