您现在的位置是:主页 > news > 网站建设启凡/嘉兴新站seo外包
网站建设启凡/嘉兴新站seo外包
admin2025/4/24 20:18:03【news】
简介网站建设启凡,嘉兴新站seo外包,自己做传奇网站,上海做网站最专业【NodeJs-5天学习】第四天存储篇② ——NodeJs连接操作mysql 8.01. 前言2. mysql模块2.1 安装mysql模块2.2 操作mysql模块2.2.1 基本连接进行数据库连接2.2.2 pool连接池进行数据库连接2.2.3 CURD操作2.2.3.1 插入数据 —— INSERT2.2.3.2 更新数据 —— UPDATE2.2.3.3 删除数据…
【NodeJs-5天学习】第四天存储篇② ——NodeJs连接操作mysql 8.0
- 1. 前言
- 2. mysql模块
- 2.1 安装mysql模块
- 2.2 操作mysql模块
- 2.2.1 基本连接进行数据库连接
- 2.2.2 pool连接池进行数据库连接
- 2.2.3 CURD操作
- 2.2.3.1 插入数据 —— INSERT
- 2.2.3.2 更新数据 —— UPDATE
- 2.2.3.3 删除数据 —— DELETE
- 2.2.3.4 创建数据表 —— CREATE TABLE
- 3.总结
- 参考资料
面向读者群体
- ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
- ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️
- ❤️ 本篇创建记录 2023-03-12 ❤️
- ❤️ 本篇更新记录 2023-03-12 ❤️
技术要求
- 有HTML、CSS、JavaScript基础更好,当然也没事,就直接运行实例代码学习
专栏介绍
- 通过简短5天时间的渐进式学习NodeJs,可以了解到基本的服务开发概念,同时可以学习到npm、内置核心API(FS文件系统操作、HTTP服务器、Express框架等等),最终能够完成基本的物联网web开发,而且能够部署到公网访问。
🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
1. 前言
在前一篇
- 【NodeJs-5天学习】第四天存储篇① ——安装使用mysql 8.0
中我们讲解了如何搭建mysql数据库服务器并且能够进行简单的CURD操作,那么本篇我们继续来学习一下如何使用NodeJs连接MySQL
。
注意:
- 本篇是基于 【NodeJs-5天学习】第四天存储篇① ——安装使用mysql 8.0 进行讲解,所以务必先学习该篇。
2. mysql模块
基本上分为几个步骤:
- ① 安装操作MySQL数据库的第三方模块(
mysql
) - ② 通过mysql模块
连接
到MySQL 数据库 - ③ 通过mysql模块
执行
SQL语句
2.1 安装mysql模块
终端上执行命令:
npm install mysql --save
模块官方说明(建议多看看):
- https://github.com/mysqljs/mysql
这里官方也给了一个简单的demo使用案例。
// 第一步:引入mysql模块
var mysql = require('mysql');
// 第二步:创建数据库连接,这里参数会很多
var connection = mysql.createConnection({host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
});// 第三步:正式发起数据库连接
connection.connect();// 第四步:执行查询操作
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {if (error) throw error;console.log('The solution is: ', results[0].solution);
});// 第五步:关闭数据库
connection.end();
基本上可以分为五个操作步骤:
- 引入模块
- 创建连接
连接参数最好去看看官方文档说明
- https://github.com/mysqljs/mysql#connection-options
同时包括ssl参数:
- https://github.com/mysqljs/mysql#ssl-options,CA相关证书配置
- 发起连接
目前支持一次性连接和Pool连接池两种方式
- CURD操作
需要我们写好
sql
语句,然后使用query
方法执行对应语句即可
- 关闭数据库
包括两个方法:
end
(一般推荐使用这个方法)destory
2.2 操作mysql模块
2.2.1 基本连接进行数据库连接
这里创建一个simple_mysql.js 文件:
// 第一步:引入mysql模块
let mysql = require("mysql");// 连接参数
const db_config={host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
}// 第二步:创建数据库连接,这里参数会很多
let connect=mysql.createConnection(db_config)// 第三步:正式发起数据库连接
connect.connect(function(err){if(err){console.log(`mysql连接失败: ${err}!`);}else{console.log("mysql连接成功!");}
})// 第四步:执行查询操作
let sqlQuery="select * from test";
connect.query(sqlQuery,function(err,result){if(err){console.log(`SQL error: ${err}!`);}else{console.log(result);closeMysql(connect);}
})//查询成功后关闭mysql
function closeMysql(connect){connect.end((err)=>{if(err){console.log(`mysql关闭失败:${err}!`);}else{console.log('mysql关闭成功!');}
})
}
执行该文件,可以看到打印效果:
整个执行过程:
- 通过mysql模块的createConnection()来创建一个数据库连接(注意只是创建了,还没有连接);
- 然后通过createConnection()返回对象的connect()方法进行数据库连接
- 通过query()方法进行数据库操作
- end()方法关闭数据库;通过destory()方法也可以关闭数据库,不过没有回调函数,直接关闭;
注意:
- 以上代码只能一次性链接数据库,如果数据库出现问题无法连接(可以通过关闭数据库服务)不能自动再次连接
这里创建一个autoconnect_mysql.js (支持自动连接)文件:
// 第一步:引入mysql模块
let mysql = require("mysql");// 连接参数
const db_config={host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
}// 第二步:创建数据库连接,这里参数会很多
let connect=mysql.createConnection(db_config)console.log('createConnection 创建连接')// 第三步:正式发起数据库连接
connect.connect(function(err){if(err){console.log(`mysql连接失败: ${err},正在重新连接...`)setTimeout(function(){autoConnect(connect);},2000); //2s重新连接}else{console.log("mysql连接成功!")sqlQuery(connect)}
})// 第四步:执行查询操作
function sqlQuery(connect){console.log('query 执行sql语句')//基本的查询语句let sqlQuery="select * from test";connect.query(sqlQuery,function(err,result){if(err){console.log(`SQL error: ${err}!`);}else{console.log(result);closeMysql(connect);}});
}//查询成功后关闭mysql
function closeMysql(connect){connect.end((err)=>{if(err){console.log(`mysql关闭失败:${err}!`);}else{console.log('mysql关闭成功!');}
})
}let time = 0; //控制连接次数
const maxTime = 10; // 最大连接次数//数据连接失败后自动连接控制连接次数
function autoConnect(connect){if(time < maxTime){time++;connect.connect(function(err){if(err){console.log(`mysql自动连接:${time}`);setTimeout(function(){autoConnect(connect)},2000);}else{console.log("mysql连接成功!");sqlQuery(connect);}});}else{console.log("真尽力连不上,检查其他问题吧!");}
}
测试过程:
- 先保证mysql服务正常运行,再运行autoconnect_mysql js文件
- 关闭mysql服务,再运行autoconnect_mysql js文件
这里设置了自动链接次数为10次,如果超过这10次还连不上就没办法咯;
2.2.2 pool连接池进行数据库连接
以上就是通过mysql模块进行基础链接,接下来看看mysql连接池来连接数据库,连接池的主要可以服用已有的链接,而不像普通链接那样用一次关闭一次连接,不关闭连接会照成资源浪费;
这里创建一个pool_mysql.js 文件:
// 第一步:引入mysql模块
let mysql = require("mysql");// 连接参数
const db_config={host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
}// 第二步:创建数据库连接池,这里参数会很多
let pool=mysql.createPool(db_config)// 第三步:正式发起数据库连接
pool.getConnection(function(err,connect){//通过getConnection()方法进行数据库连接if(err){console.log(`mysql链接失败${err}`);}else{// 第四步:执行查询操作connect.query('select * from test',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);connect.release();//释放连接池中的数据库连接pool.end();//关闭连接池}});}
})
执行以上文件。
- 通过连接池
createPool
()方法连接数据库的方式与通过createConnection
()方法用法一致; - 然后通过
getConnection
()方法来对数据库进行连接 release
()释放连接池中的数据库连接,注意只是单纯的释放并没有关闭,如果有下次对数据库的访问还是会用上的pool.end
()方法是关闭连接池,完全关闭可以理解为对数据库的完全关闭;
2.2.3 CURD操作
2.2.3.1 插入数据 —— INSERT
数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。
INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。
INSERT…VALUES
语句(支持插入多行数据,对于多行场景下性能更好),通用语法:
INSERT INTO [表名]([列名],[列名]) VALUES
([列值],[列值])),
([列值],[列值])),
([列值],[列值]));
- <表名>:指定被操作的表名。
- <列名>:指定需要插入数据的列名。若向表中的所有列插入数据,则全部的列名均可以省略,直接采用 INSERT<表名>VALUES(…)
- VALUES 或 VALUE 子句:该子句包含要插入的数据清单。数据清单中数据的顺序要和列的顺序相对应。
INSERT…SET
语句(插入单行,支持部分列),通用语法:
INSERT INTO [表名]
SET <列名1> = <值1>, <列名2> = <值2>, <列名3> = <值3>;
这里我们往test表里面插入数据测试一下效果:
// 第一步:引入mysql模块
let mysql = require("mysql");// 连接参数
const db_config={host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
}// 第二步:创建数据库连接池,这里参数会很多
let pool=mysql.createPool(db_config)// 第三步:正式发起数据库连接
pool.getConnection(function(err,connect){//通过getConnection()方法进行数据库连接if(err){console.log(`mysql链接失败${err}`);}else{// 第四步:执行查询操作connect.query('select * from test',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});let insertSql = 'insert into test set name = \'花无缺\''connect.query(insertSql,function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});let insertSql2 = 'insert into test(name) values (\'小鱼儿\'),(\'如来神掌\')'connect.query(insertSql2,function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});}
})
同时也看看 DBeaver显示的数据:
说明我们是插入数据成功。
注意:我们这里有重复数据,主要是博主进行了多次操作
2.2.3.2 更新数据 —— UPDATE
在 MySQL 中可以使用 UPDATE 语句来修改、更新一个或多个表的数据。
语法格式:
UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]
- <表名>:用于指定要更新的表名称。
- SET 子句:用于指定表中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的默认值。如果指定的是默认值,可用关键字 DEFAULT 表示列值。
- WHERE 子句:可选项。用于限定表中要修改的行。若不指定,则修改表中所有的行。
- ORDER BY 子句:可选项。用于限定表中的行被修改的次序。
- LIMIT 子句:可选项。用于限定被修改的行数。
- 修改一行数据的多个列值时,SET 子句的每个值用逗号分开即可。
这里我们把test表里面名字为“花无缺”改成“花有缺”,测试一下效果:
// 第一步:引入mysql模块
let mysql = require("mysql");// 连接参数
const db_config={host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
}// 第二步:创建数据库连接池,这里参数会很多
let pool=mysql.createPool(db_config)// 第三步:正式发起数据库连接
pool.getConnection(function(err,connect){//通过getConnection()方法进行数据库连接if(err){console.log(`mysql链接失败${err}`);}else{// 第四步:执行查询操作connect.query('select * from test',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});let insertSql = 'UPDATE test SET name = \'花有缺\' WHERE name = \'花无缺\''connect.query(insertSql,function(err,result){if(err){console.log(`SQL error:${err}`)}else{connect.query('select * from test',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});}});}
})
2.2.3.3 删除数据 —— DELETE
在 MySQL 中,可以使用 DELETE
语句来删除表的一行或者多行数据。
语法格式为:
DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
- <表名>:指定要删除数据的表名。
- ORDER BY 子句:可选项。表示删除时,表中各行将按照子句中指定的顺序进行删除。
- WHERE 子句:可选项。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行。
- LIMIT 子句:可选项。用于告知服务器在控制命令被返回到客户端前被删除行的最大值。
在不使用 WHERE 条件的时候,将删除所有数据。
这里我们把test表里面名字为“花有缺”的数据全部删掉,测试一下效果:
// 第一步:引入mysql模块
let mysql = require("mysql");// 连接参数
const db_config={host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
}// 第二步:创建数据库连接池,这里参数会很多
let pool=mysql.createPool(db_config)// 第三步:正式发起数据库连接
pool.getConnection(function(err,connect){//通过getConnection()方法进行数据库连接if(err){console.log(`mysql链接失败${err}`);}else{// 第四步:执行查询操作connect.query('select * from test',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});let deleteSql = 'DELETE FROM test WHERE name = \'花有缺\''connect.query(deleteSql,function(err,result){if(err){console.log(`SQL error:${err}`)}else{connect.query('select * from test',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});}});}
})
2.2.3.4 创建数据表 —— CREATE TABLE
要在数据库中创建一个新表,可以使用MySQL CREATE TABLE语句。 CREATE TABLE语句是MySQL中最复杂的语句之一。
基本语法:
CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
其中,[表定义选项]的格式为:
<列名1> <类型1> [,…] <列名n> <类型n>
CREATE TABLE 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的。
这里我们在nodejs库里面新增一个表todos
,测试一下效果:
// 第一步:引入mysql模块
let mysql = require("mysql");// 连接参数
const db_config={host : 'localhost', // 主机地址user : 'root', // 用户名password : '123456', // 用户密码database : 'nodejs', // 数据库名port : 3306 // 端口号,默认3306
}// 第二步:创建数据库连接池,这里参数会很多
let pool=mysql.createPool(db_config)// 第三步:正式发起数据库连接
pool.getConnection(function(err,connect){//通过getConnection()方法进行数据库连接if(err){console.log(`mysql链接失败${err}`);}else{// 第四步:执行查询操作connect.query('select * from test',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});// 创建表let createTodos = `create table if not exists todos(id int primary key auto_increment,title varchar(255)not null,completed tinyint(1) not null default 0)`;connect.query(createTodos, function(err, results, fields) {if (err) {console.log(err.message);} else {// 查看数据库中所有的表connect.query('SHOW FULL TABLES',function(err,result){if(err){console.log(`SQL error:${err}`)}else{console.log(result);}});}});}
})
3.总结
篇②主要介绍nodejs下的mysql简单使用,关于mysql深入学习请自行搜索学习,博主很难在一篇文章中深入讲解,更多的是抛砖引玉。麻雀虽小五脏俱全,初学者需要慢慢理解并加以实际应用。
参考资料
- https://blog.csdn.net/u012475786/article/details/72621257
- http://c.biancheng.net/view/2430.html