node.js对数据库mysql的连接与操作(增、删、改、查、五种SQL语法)

前提:先在vscode终端下载安装mysql:npm install mysql -save

步骤总结:

(1)建立与数据库的连接

(2)做出请求:

实际上就是操作mysql里的数据。增删改查 insert、delete、updata、select

(3)通过回调函数获取结果

一、什么是SQL?

SQL(Structured Query Language)是结构化查询语言。专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,去操作数据库里的数据

二、SQL主要掌握:

(1)SQL的使用之增删改查: 

查询数据(select)、插入数据(insert into)、更新数据(updata)、删除数据(delete)

(2)需掌握的五种SQL语法:

where条件、and和or运算符、order by排序、count(*)函数、as关键字

三、增删改查的基本使用 ***

代码示例都以query操作为例。

(1)查询 SELECT

1》作用:

select语句用于从表中查询数据。执行结果被储存在一个结果表中。

2》语法格式:

注意:SQL语句关键字对大小写不敏感。SELECT=select

2-1》从from指定的表中,查询出所有的数据。*表示所有列

select * from 表名

2-2》从from指定的表中,查询出指定列名称(字段)的数据。

select 列名 from 表名

3》代码示例:
//1.安装mysql 
// 在控制台 npm install mysql -save
// 2.导入mysql模块
const mysql=require('mysql');
// 3.建立链接
// (3-1)创建链接对象
const conn=mysql.createConnection({host:'localhost', //mysql服务器地址port:3306, //mysql默认端口3306user:'root', //mysql登录用户名password:'root', //mysql登录密码database:'musicdb', //访问的数据库名称multipleStatements:true, //设置一次请求允许多条sql语句同时执行。默认false
});
// (3-2)链接数据库
conn.connect((err)=>{if(err){console.log('链接数据库失败');}else{console.log('链接数据库成功');}
});
// 4.执行sql语句,对数据库进行操作
// (4-1)准备sql语句
let sql2="select * from users"; //通过*把users表中所有数据查询出来
let sql3="select username,password from users"; //把users表中username和password对应的数据查询出来// (4-2)执行sql2
conn.query(sql2,[],(err,results,fields)=>{ //三个参数,sql语句、sql给出的数据、回调函数(err,results[sql语句执行的结果],fields[涉及到的字段列表])if(err){console.log(err);}else{ // 对于查询操作(select),它返回的是数组,其元素是查询结果行的对象(查询结果集)。// 我们要去访问它时,例如可以result[0].username// fields 只有查询操作select才有fields数组。元素就是每一个查询结果集的字段console.log(results); //RowDataPacket对象数组//console.log(fields); //FieldPacket对象数组。// (4-3)关闭数据库conn.end()}
}); 
sql2执行结果:

sql3执行结果: 

(2)插入 insert

1》作用:

insert into 语句用于向数据表中插入新的数据行。

2》语法格式:

2-1》使用拼接字符串写入参数

insert into 表名() values()

2-2》使用占位符写入参数

insert into 表名() values(?,?,?..)

let a=[?1的值,?2的值,?3的值...];

3》代码示例:
//1.安装mysql 
// 在控制台 npm install mysql -save
// 2.导入mysql模块
const mysql=require('mysql');
// 3.建立链接
// (3-1)创建链接对象
const conn=mysql.createConnection({host:'localhost', //mysql服务器地址port:3306, //mysql默认端口3306user:'root', //mysql登录用户名password:'root', //mysql登录密码database:'musicdb', //访问的数据库名称multipleStatements:true, //设置一次请求允许多条sql语句同时执行。默认false
});
// (3-2)链接数据库
conn.connect((err)=>{if(err){console.log('链接数据库失败');}else{console.log('链接数据库成功');}
});
// 4.执行sql语句,对数据库进行操作
// (4-1)准备sql语句
// 拼接字符串、使用占位符两种方式
let sql1="insert into users() values(0,'admin','123456','女',18,'123@qq.com',1,'admin','user_photo.png')";
let sql2="insert into users() values(0,?,?,?,?,?,?,?,?)";
let params=['w1','123','女',22,'22@qq.com','1','cust','user_photo.png'];// (4-2)执行sql
conn.query(sql1,[],(err,results,fields)=>{ //三个参数,sql语句、sql给出的数据、回调函数(err,results[sql语句执行的结果],fields[涉及到的字段列表])if(err){console.log(err);}else{// 对于更新操作(insert、update、delete)的results对象的重要属性:// affectedRows  影响的行数(主要针对于insert、delete操作) // insertId      插入行的主键值(主要针对于insert操作) // changedRows   改变的行数(主要针对于update操作) console.log(results);//console.log(fields);// (4-3)关闭数据库conn.end()}
}); 
sql1执行结果:

 sql2执行结果:

(3)更改 UPDATA

1》作用:

update语句用于修改表中的数据。

2》语法格式:

update 表名 set 列名=新值 where 列名=某值

3》代码示例:
//1.安装mysql 
// 在控制台 npm install mysql -save
// 2.导入mysql模块
const mysql=require('mysql');
// 3.建立链接
// (3-1)创建链接对象
const conn=mysql.createConnection({host:'localhost', //mysql服务器地址port:3306, //mysql默认端口3306user:'root', //mysql登录用户名password:'root', //mysql登录密码database:'musicdb', //访问的数据库名称multipleStatements:true, //设置一次请求允许多条sql语句同时执行。默认false
});
// (3-2)链接数据库
conn.connect((err)=>{if(err){console.log('链接数据库失败');}else{console.log('链接数据库成功');}
});
// 4.执行sql语句,对数据库进行操作
// (4-1)准备sql语句
// 1》更新某一行中的一个列
// 要求:将users表中的用户名为admin2的用户密码password改为888
let sql4="update users set password='888' where username='admin'";
// 1》更新某一行中的若干列
// 要求:将users表中的用户名为admin2的性别gender和年龄age分别改为男和60
let sql5="update users set gender='男',age='60' where username='admin'";// (4-2)执行sql
conn.query(sql5,[],(err,results,fields)=>{ //三个参数,sql语句、sql给出的数据、回调函数(err,results[sql语句执行的结果],fields[涉及到的字段列表])if(err){console.log(err);}else{console.log(results);// (4-3)关闭数据库conn.end()}
}); 
sql5执行结果: 

(4)删除 DELETE

1》作用:

delete语句用于删除表中的行。

2》语法格式:

delete from where 列名=值

3》代码示例:
//1.安装mysql 
// 在控制台 npm install mysql -save
// 2.导入mysql模块
const mysql=require('mysql');
// 3.建立链接
// (3-1)创建链接对象
const conn=mysql.createConnection({host:'localhost', //mysql服务器地址port:3306, //mysql默认端口3306user:'root', //mysql登录用户名password:'root', //mysql登录密码database:'musicdb', //访问的数据库名称multipleStatements:true, //设置一次请求允许多条sql语句同时执行。默认false
});
// (3-2)链接数据库
conn.connect((err)=>{if(err){console.log('链接数据库失败');}else{console.log('链接数据库成功');}
});
// 4.执行sql语句,对数据库进行操作
// (4-1)准备sql语句
// 要求:删除users表中的用户名为w1的用户
let sql6="delete from users where username='w1'";// (4-2)执行sql
conn.query(sql6,[],(err,results,fields)=>{ //三个参数,sql语句、sql给出的数据、回调函数(err,results[sql语句执行的结果],fields[涉及到的字段列表])if(err){console.log(err);}else{console.log(results);// (4-3)关闭数据库conn.end()}
}); 
运行结果:

三、五种SQL语法

 where条件、and和or运算符、order by排序、count(*)函数、as关键字

(1)where子句

1》介绍:

where子句用于限定选择的标准。在select、update、delete语句中,皆可使用where子句来限定选择的标准

2》语法:

2-1》查询语句中的where条件

select 列名 from 表名 where 列 运算符 值

2-2》更新语句中的where条件

update 表名 set 列=新值 where 列 运算符 值

2-3》删除语句中的where条件

delete from 表名 where 列 运算符 值

3》可以在where子句中使用的运算符

等于(=)、不等于(<>或!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、在某个范围内(between)、搜索某种模式(like)

(2)and和or运算符

1》介绍:

 and和or可在where子句中把两个或多个条件结合起来

and:必须同时满足多个条件,相当于js中的 &&

or:只要满足任一个条件即可,相当于js中的 ||

2》代码示例:
我的数据库users表里的数据如下:

const mysql=require('mysql');
const conn=mysql.createConnection({host:'localhost', //mysql服务器地址port:3306, //mysql默认端口3306user:'root', //mysql登录用户名password:'root', //mysql登录密码database:'musicdb', //访问的数据库名称multipleStatements:true, //设置一次请求允许多条sql语句同时执行。默认false
});
conn.connect((err)=>{if(err){console.log('链接数据库失败');}else{console.log('链接数据库成功');}
});
// (2)and运算符代码示例
// 要求:使用and来查询users表中的性别gender为男并且年龄age为22的用户
let sql7="select * from users where gender='男' and age=22";
// (3)or运算符代码示例
// 要求:使用and来查询users表中的性别gender为男或者年龄age为60 的用户
let sql8="select * from users where gender='男' or age=60";
// (4-2)执行sql
conn.query(sql7,[],(err,results,fields)=>{ //三个参数,sql语句、sql给出的数据、回调函数(err,results[sql语句执行的结果],fields[涉及到的字段列表])if(err){console.log(err);}else{console.log(results);// (4-3)关闭数据库conn.end()}
}); 
sql7执行结果:

sql8执行结果: 

(3)order by 子句

1》介绍:

 order by语句用于 根据指定的列对结果集进行排序

升序排序:order by语句默认按照升序对记录进行排序,asc关键字表示升序排序

降序排序:如果要求降序排序,可以使用desc关键字

多重排序:有升序也有降序,有asc也有desc关键字

2》代码示例:
 users表数据同(2)中一样
const mysql=require('mysql');
const conn=mysql.createConnection({host:'localhost', //mysql服务器地址port:3306, //mysql默认端口3306user:'root', //mysql登录用户名password:'root', //mysql登录密码database:'musicdb', //访问的数据库名称multipleStatements:true, //设置一次请求允许多条sql语句同时执行。默认false
});
conn.connect((err)=>{if(err){console.log('链接数据库失败');}else{console.log('链接数据库成功');}
});
// (2-1)升序排序
// 要求:对users表中的数据,按照年龄age进行升序排序
let sql9="select * from users order by age";
// (2-2)降序排序
// 要求:对users表中的数据,按照年龄age进行降序排序
let sql10="select * from users order by age desc";
// (2-3)多重排序
// 要求:对users表中的数据,先按照年龄age进行降序排序,再按username的字母顺序进行升序排序
let sql11="select * from users order by age desc,username asc";
// (4-2)执行sql
conn.query(sql9,[],(err,results,fields)=>{ //三个参数,sql语句、sql给出的数据、回调函数(err,results[sql语句执行的结果],fields[涉及到的字段列表])if(err){console.log(err);}else{console.log(results);// (4-3)关闭数据库conn.end()}
}); 
sql9执行结果:

(4)count(*)函数 和 as关键字

1》介绍:

 count(*)函数用于返回查询结果的总数据条数。

as关键字可以为列设置别名

2》语法:

select count(*) from 表名

select count(*) as 设置的别名 from 表名

3》代码示例:
const mysql=require('mysql');
const conn=mysql.createConnection({host:'localhost', //mysql服务器地址port:3306, //mysql默认端口3306user:'root', //mysql登录用户名password:'root', //mysql登录密码database:'musicdb', //访问的数据库名称multipleStatements:true, //设置一次请求允许多条sql语句同时执行。默认false
});
conn.connect((err)=>{if(err){console.log('链接数据库失败');}else{console.log('链接数据库成功');}
});
// (3)count(*)函数代码示例:
// 要求:返回users表中enable为1的总数据条数
let sql12="select count(*) from users where enable=1";
// (4)as关键字代码示例:
// 要求:给(3)中查询出来的总数据条数count(*)设置一个别名为total
let sql13="select count(*) as total from users where enable=1";
// (4-2)执行sql
conn.query(sql13,[],(err,results,fields)=>{ //三个参数,sql语句、sql给出的数据、回调函数(err,results[sql语句执行的结果],fields[涉及到的字段列表])if(err){console.log(err);}else{console.log(results);// (4-3)关闭数据库conn.end()}
}); 
sql12执行结果:

sql13执行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/8422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kubernetes集群一主二从安装教程】

文章目录 环境准备主机间做信任安装ansible工具 升级内核版本使用elrepo源升级内核查看最新版内核安装最新的内核版本设置系统默认内核设置默认内核为我们刚才升级的内核版本 初始化关闭防火墙关闭selinux关闭swap修改主机名修改hosts文件将桥接的IPv4流量传递到iptables的链配…

nlp课设 - 基于BERT 的情感分类

基于BERT 的情感分类 主要论文&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&#xff08;双向Transformer 的预训练&#xff09; 核心技术&#xff1a; Embedding 、Attention --> Transformer 任务简介、拟解决问题…

09 - 数据清洗案例

流程图 kettle 面板图片 操作步骤 1、订阅数据源&#xff08;kafka consumer&#xff09; 2、抽取字段并转换key&#xff08;JSON input&#xff09; 3、判断img字段是否有值&#xff0c;有的话进行url转base64&#xff08;JavaScript 代码&#xff09; // 获取输入字段的值 v…

流量分析利器arkime的学习之路(三)---结合Suricata攻击检测

1、基础 Arkime安装部分参考《流量分析利器arkime的学习之路&#xff08;一&#xff09;—安装部署》 在此基础上安装suricata软件并配置。 2、安装suricata yum install suricate 可能依赖的文件包括libyaml&#xff0c;PyYAML&#xff0c;这些可能在之前安装arkime或者其他…

面试二十四、继承多态

一、继承的本质和原理 组合&#xff08;Composition&#xff09;&#xff1a; 组合是一种"有一个"的关系&#xff0c;表示一个类包含另一个类的对象作为其成员。这意味着一个类的对象包含另一个类的对象作为其一部分。组合关系通常表示强关联&#xff0c;被包含的对象…

Terrain —— Nodes

目录 Convert HeightField —— 转化高度场 HeightField —— 为地形创建初始高度场或遮罩场 HeightField Blur —— 模糊高度场或遮罩场 HeightField Clip —— 限制高度场的值 HeightField Combine Layers —— 将多个volume或VDB合并为一个新的volume或VDB HeightFiel…

我独自升级崛起怎么玩 我独自升级崛起游玩教程分享

《我独自升级&#xff1a;ARISE》是一款预计在 Android、iOS 和 PC 平台推出的动作 RPG&#xff0c;故事内容基于网络漫画版本改编&#xff0c;讲述世界各地出现「次元传送门」&#xff0c;而少部分人类觉醒了可以对抗传送门中怪物的「猎人」能力&#xff0c;玩家可以在故事模式…

【进程等待】是什么 | 为什么 | 怎么办 | wait阻塞等待

目录 进程等待是什么&#xff1f; 为什么要进程等待&#xff1f; 如何进程等待&#xff1f; wait 阻塞等待 进程等待是什么&#xff1f; 进程终止会把进程退出的数据&#xff08;退出码和退出信号&#xff09;存放到进程的PCB中保存下来&#xff0c;让父进程进行等待。…

【投稿资讯】区块链会议CCF C -- CoopIS 2024 截止7.10 附录用率

会议名称&#xff1a;CoopIS CCF等级&#xff1a;CCF C类学术会议 类别&#xff1a;人机交互与普适计算 录用率&#xff1a;2023年接收率21% (21 regular 10 work-in-progress papers/100) AREA 5: HUMAN-CENTRIC SECURITY AND PRIVACY IN INFORMATION SYSTEMS Access Con…

Linux网站服务

1.概念:HTML:超级文本编辑语言 网页:使用HTML,PHP,JAVA语言格式书写的文件。 主页:网页中呈现用户的第一个界面。 网站:多个网页组合而成的一台网站服务器。 URL:统一资源定位符&#xff0c;访问网站的地址。 网站架构:LAMP: LinuxApacheMYSQLPHP(系统服务器程序数据管理…

OpenHarmony 实战开发 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境&#xff1a;Windows 11 编译环境&#xff1a;Ubuntu 22.04 开发板型号&#xff1a;DAYU 200&#xff08;RK3568&#xff09; 系统版本&#xff1a;OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…

使用电路仿真软件教学的优势分析

随着科技的飞速发展&#xff0c;电子工程领域对人才的需求与日俱增。为了满足这一需求&#xff0c;教育者们不断探索着更加高效、直观的教学方法。电路仿真软件的出现&#xff0c;为电子工程教学注入了新的活力&#xff0c;它以其独特的优势&#xff0c;成为现代电子工程教育中…

啸叫抑制器采用什么处理芯片?ES56031或PH56031

会议系统或卡拉OK最头疼的就是啸叫了吧&#xff0c;来看看啸叫抑制器采用什么芯片 四通道啸叫抑制器&#xff0c;采用了2个电路板&#xff0c;每个板子处理2路信号&#xff0c;每块电路板有2个卡侬输入插座&#xff0c;2个卡侬输出插座 ES56031S&#xff0c;该啸叫抑制器为4通道…

请大数据把我推荐给正在申请小程序地理位置接口的人

小程序地理位置接口有什么功能&#xff1f; 若提审后被驳回&#xff0c;理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;那么遇到这种情况&#x…

软件可靠度计算

软件的整体可靠度依据&#xff1a;若是单个就是当前部件的可靠度。若是多个部件&#xff0c;就需要多个部件的可靠度相乘。若是多个部件且有相同备份&#xff0c;那么计算公式更加不一样。 计算公式&#xff1a; 部件数&#xff1a;N 部件可靠度均为&#xff1a;R 单个部件的可…

树莓派4b测量光照强度

1.BH1750光照强度连接图 2. BH1750工作原理 BH1750的通讯过程 第1步:发送上电命令。 发送的过程和第2步基本一致,把测量命令(0x10)改成上电命令(0x01)。第2步:发送测量命令。 下面图片上的例子,ADDR引脚是接GND的,发送的测量命令是“连续高分辨率测量(0x10)”。 发送数据…

oc渲染器如何设置调渲染更快?oc云渲染加速助力

OC渲染器是Cinema 4D软件中广泛使用的渲染工具&#xff0c;它利用GPU进行硬件加速渲染&#xff0c;具备强大的计算性能。这使得它能够为产品和动画制作人员提供卓越的渲染质量。此外&#xff0c;OC渲染器还支持云渲染技术&#xff0c;这在需要进行大规模渲染任务时非常有用&…

【商业】SD NAND(贴片式TF卡)性能体验及应用

SD NAND【商业】   外观   NAND与TF卡的区别   雷龙CS SD NAND(贴片式TF卡)性能体验及应用   最后 SD NAND 外观正反示意图 NAND与TF卡的区别 什么是SD NAND&#xff1f;它俗称贴片式T卡&#xff0c;贴片式TF卡&#xff0c;贴片式SD卡&#xff0c;贴片式内存卡&am…

【贪心算法】哈夫曼编码Python实现

文章目录 [toc]哈夫曼编码不同编码方式对比前缀码构造哈夫曼编码哈夫曼算法的正确性贪心选择性质证明 最优子结构性质证明 总结 Python实现时间复杂性 哈夫曼编码 哈夫曼编码是广泛用于数据文件压缩的十分有效的编码方法&#xff0c;其压缩率通常为 20 % 20\% 20%到 90 % 90\%…

【C++】——内存管理

&#x1f600;&#x1f600;前言 好久没更新了&#xff0c;五一小长假&#xff0c;有点玩脱了&#xff0c;今天赶紧补一篇博客&#xff0c;回回状态 一 c/c内存分配 下面看下面一段代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; i…