首页 > 数据库 >04.Nodejs操作MySQL

04.Nodejs操作MySQL

时间:2022-12-06 16:36:53浏览次数:40  
标签:语句 console 04 err Nodejs 数据库 MySQL SQL log

在Nodejs中操作MySQL数据库


目录

MySQL数据库


SQL的基本使用


1.什么是SQL
SQL(英文全称: Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。

三个关键点:

  1. SQL是一门数据库编程语言
  2. 使用SQL语言编写出来的代码,叫做SQL语句
  3. SQL语言尽能在关系型数据库中使用(例如MySQL、Oracle、SQL Server)。非关系型数据库(例如Mongodb)不支持SQL语言

2.SQL能做什么

  1. 从数据库中查询数据
  2. 向数据库中插入新的数据
  3. 更新数据库中的数据
  4. 从数据库删除数据
  5. 可以创建新数据库
  6. 可在数据库中创建新表
  7. 可在数据库中创建存储过程、视图
  8. etc...

SELECT语句


SELECT语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集)。语法格式如下:

-- 这是注释
-- 从FROM指定的[表中],查询出所有的数据.
SELECT * FROM 表名称

-- 从FROM指定的[表中],查询出指定 列名称[字段] 的数据
SELECT 列名称 FROM 表名称
-- 注意: SQL语句中的关键字对大小写不敏感。SELECT等效于select,FROM等双于from

实例:

image-20220327165711766

image-20220327165741777

INSERT INTO语句


INSERT INTO语句用于向数据表中插入新的数据行,语法格式如下:

-- 语法解读:向指定的表中,插入如下几列数据,列的值通过values——指定
-- 注意:列和值要——对应,多个列和多个值之间,使用英文的逗号分隔
INSERT INTO table_name(列1,列2,.. . ) VALUES (值1,值2,....)

实例:

image-20220327170432822

UPDATE语句


Update语句用于修改表中的数据。语法格式如下:

-- 语法解读:
-- 1、用 UPDATE 指定要更新哪个表中的数据
-- 2.用 SET 指定列对应的新值
-- 3,用 WHERE 指定更新的条件
UPDATE 表名称 SET 列名称=新值 WHERE 列名称=某值

实例:
image-20220327170721413

image-20220327170934636

DELETE语句


DELETE语句用于删除表中的行。语法格式如下:

--语法解读:
--从指定的表中,根据WHERE条件,删除对应的数据行
DELETE FROM 表名称 WHERE 列名称 = 值

实例:

image-20220327171140716

WHERE子句


WHERE子句用于限定选择的标准。在SELECT、UPDATE、DELETE语句中,皆可使用WHERE子句来限定选择的标准。比如:

image-20220327171333954

可在WHERE子句中使用的运算符:

操作符 描述
= 等于
<>也可以写作!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
AND与OR运算符

AND和OR可在WHERE子语句中把两个或多个条件结合起来。
AND表示必须同时满足多个条件,相当于JavaScript 中的&&运算符,例如 if (a !== 10 && a !== 20)
OR表示只要满足任意一个条件即可,相当于JavaScript 中的||运算符, 例如i if (a !== 10 || a !== 20)

实例:

image-20220327172643506

image-20220327172709544

ORDER BY 子句


ORDER BY语句用于根据指定的列对结果集进行排序。ORDER BY语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

实例:

image-20220327184721135

image-20220327184820259

image-20220327184909624

COUNT(*)函数


COUNT(*)函数用于返回查询结果的总数据条数,语法格式如下:

SELECT COUNT( * ) FROM 表名称

实例:

image-20220327185138543

使用AS关键字为列设置别名

实例:

image-20220327185346239

image-20220327185459662

在Nodejs中操作MySQL


操作步骤:

  1. 安装操作MySQL 数据库的第三方模块(mysql)
  2. 通过mysql模块连接到MySQL 数据库
  3. 通过mysql模块执行SQL语句

image-20220327212523702

安装与配置mysql模块


  1. 安装mysql

mysql模块是托管于npm 上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数据库的能力。想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:

npm i mysql
  1. 配置相关环境

在使用mysql模块操作MySQL数据库之前,必须先对 mysql模块进行必要的配置,主要的配置步骤如下:

image-20220327212835068

const databar = mysql.createPool({
	host: '127.0.0.1',    //数据库的IP地址
	user: 'root',		 //登录数据库的账号
	password: '',		 //登录数据库的密码
	database: 'my_db_01'  //指定要操作的数据库
})

  1. 测试mysql模块是否能够正常工作

    调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果:

// 检测mysql模块是否正常工作
databar.query('SELECT 1',(err,results) =>{
	if(err) return console.log(err.message)
	//如果说能打印出[ RowDataPacket {'1' : 1} ] 的结果,就证明数据库连接正常
	console.log(results)
})

mysql操作语句


查询数据


//查询users表中所有的用户数据
//模糊查询 `SELECT * FROM book where bookname like '%${搜索关键词}%'`
databar.query( 'SELECT * FROM users ', (err, results) => {
	//查询失败
	if (err) return console.log(err.message)
	//查询成功
	console.log(results)
})
// 参数一: sql语句,操作数据库的核心
// 参数二: 回调函数
// 注意:如果执行select查询语句,则执行返回的结果是数组

插入数据


向users表中新增数据,其中username为Spider-Man,password为 pcc321。示例代码如下:

// 1. 定义需要插入到表中的数据对象
const user ={username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,其中的?表示占位符
const sqlStr = 'INSERT INTO users (username,password) VALUES(?,?)'
// 3. 使用数组形式,依次为?指定具体的值
databar.query(sqlStr, [user.username,user.password],(err.results)=>{
	if(err) return console.log(err.message)
	console.log(results.affectedRows === 1){console.log('插入数据成功')}
})

快捷插入数据

// 1. 定义需要插入到表中的数据对象
const user ={username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,其中的?表示占位符
const sqlStr = 'INSERT INTO users SET ?'
// 3. 直接为?指定具体的值
databar.query(sqlStr, user,(err.results)=>{
	if(err) return console.log(err.message)
	if(results.affectedRows === 1){console.log('插入数据成功')}
})

更新数据


// 1. 定义需要更新的数据对象
const user ={id:1 , username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,
const sqlStr = 'UPDATE users SET username = ? , password = ? , WHERE id = ?'
// 3. 调用databar.query()执行SQL语句的同时,依次为?指定具体的值
databar.query(sqlStr, [user.username, user.password, user.id],(err.results)=>{
	if(err) return console.log(err.message)
	if(results.affectedRows === 1){console.log('插入数据成功')}
})

快捷更新:

// 1. 定义需要更新的数据对象
const user ={id:1 , username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,
const sqlStr = 'UPDATE users SET ? , WHERE id = ?'
// 3. 调用databar.query()执行SQL语句的同时,依次为?指定具体的值
databar.query(sqlStr, [user, user.id],(err.results)=>{
	if(err) return console.log(err.message)
	if(results.affectedRows === 1){console.log('插入更新成功')}
})

删除数据


// 1. 待执行的SQL语句,
const sqlStr = 'DELETE FROM users WHERE id = ?'
// 2. 调用databar.query()执行SQL语句的同时,依次为?指定具体的值
//注意:如果SQL语句中有多个值,则必须使用数组为每个暂未符指定具体的值
//但如果只有一个占位符,则可以省略数组
databar.query(sqlStr, 7,(err.results)=>{
	if(err) return console.log(err.message)
	if(results.affectedRows === 1){console.log('删除数据成功')}
})

标记删除

使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。

所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status字段标记为删除即可。

//标记删除,使用UPDATE语句替代DELETE语句;只更新数据状态,而非真正删除
//像下面代码中的sql语句的意义是,当id=?时,将其status值变更为
databar.query('UPDATA USERS SET status=1 WHERE id=?', 6,(err.results)=>{
	if(err) return console.log(err.message)
	if(results.affectedRows === 1){console.log('删除数据成功')}
})

标签:语句,console,04,err,Nodejs,数据库,MySQL,SQL,log
From: https://www.cnblogs.com/szfzb/p/16955667.html

相关文章

  • 05.Nodejs_web开发模式
    Web开发目录目录Web开发Web开发模式服务端渲染的传统Web开发模式前后端分离的Web开发模式Session认证机制在项目中使用Session向session中存入数据:从session中获取数......
  • 00.Nodejs环境搭建
    Nodejs的环境搭建目录Nodejs的环境搭建安装node搭建服务器环境查看本地ip项目复活安装node英文官网:https://nodejs.org/en/中文官网下载node地址https://nodejs.or......
  • iPXE在Ubuntu20.04上的部署
    特别鸣谢:陆旭xu.lu老师找一个双网卡(有线+无线)的笔记本安装好Ubuntu20.04,WiFi网络作为互联网连接,物理网络接口作为DHCP和操作系统推送的连接接口,设置IP地址为10.1.1.99/24。#......
  • Linux系统安装Mysql
    环境和版本 Linux:CentOS8Mysql:8.0.20一、在linux系统的/usr/local目录下创建mysql文件夹切换目录:cd/usr/local创建文件夹:mkdirmysql二、下载安装包1、切换......
  • 3.MySql的数据管理(DML语言)
    1.外键(了解即可)方式一:在创建表的时候,增加约束,较复杂--创建年级表CREATETABLEIFNOTEXISTS`grade`( `grade_id`INT(10) NOTNULLAUTO_INCREMENTCOMMENT'学号'......
  • MySQL5.7二进制部署❄️⛄☃️
    MySQL5.7二进制部署❄️⛄☃️准备工作:卸载系统中的mariadbrpm-qa|grepmariadbyumremovemariadb1.下载二进制安装包wgethttps://downloads.mysql.com/archives......
  • PostgreSQL和MySQL的优劣对比
    在开发项目的过程中,难免要面对选择数据库的情况。总结此文章是因为在之前公司里使用的都是MYSQL数据库,而在现在公司里,新项目中使用的是PostgreSQL数据库,在使用过程中,经......
  • PostgreSql和MySql数据类型之间的比较以及推荐
    文章介绍了postgresql和MySql之间数据类型的比较,以及推荐使用。因为存在数据库表迁移等场景,会更需要此类情况的对比1.数值类型的比较整数:mysql中的整数类型和pg......
  • mysql字符串分割
    mysql字符串分割 1、字符串分割函数dropfunctionifexistsstr_for_substr;CREATEDEFINER=`root`@`%`FUNCTION`str_for_substr`(`num`int,`str`varcha......
  • mysqldump备份命令使用参数
    参数参数说明导出全部数据库。mysqldump-uroot-p--all-databases导出全部表空间。mysqldump-uroot-p--all-databases--all-tablespaces不导出任何表空间......