Node.js操作MySQL数据库

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 《前端基础》

Node.js 连接 MySQL

(1)安装 mysql 包:

$ npm install mysql

(2)引入 mysql 包:

const mysql = require("mysql");

(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("数据库连接成功");
  }
});

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

如果在运行时提示错误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;

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));
    }
})

打印结果如下:

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}
]

删除表

// 2、删除表
let strSql2 = 'drop table test2_table';
connection.query(strSql2, (err, result) => {
    if (err) {
        // 表删除失败
        console.log(err);
    } else {
        // 表删除成功
        console.log('表删除成功:' + result);
    }
});

打印结果:

表删除成功:
OkPacket {
    fieldCount: 0,
    affectedRows: 0,
    insertId: 0,
    serverStatus: 2,
    warningCount: 0,
    message: '',
    protocol41: true,
    changedRows: 0
}

删除数据库

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

let strSql3 = 'drop database qiangu_database';

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));
    }
});

打印结果:

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

3、新建表

新建表的sql语句举例:

CREATE TABLE `qiangu_table5` (
    `id` int NOT NULL AUTO_INCREMENT,
    `name` varchar(255) DEFAULT NULL,
    `age` int DEFAULT NULL,
    PRIMARY KEY (`id`)
);

如果是在 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));
    }
})

打印结果:

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

在指定的表中插入数据

在指定的表中插入数据:

// 在指定的表中插入数据
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));
    }
});

打印结果:

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

如果插入的数据是变量(比如是用户提交上来的数据),那么,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));
    }
});
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
410 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
11月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
523 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
12月前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
323 11
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
SQL JavaScript 关系型数据库
Node服务连接Mysql数据库
本文介绍了如何在Node服务中连接MySQL数据库,并实现心跳包连接机制。
174 0
Node服务连接Mysql数据库
|
SQL JavaScript 关系型数据库
Node.js 连接 MySQL
10月更文挑战第9天
160 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
306 2
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
244 1
JavaScript中的原型 保姆级文章一文搞懂
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
156 0

推荐镜像

更多