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》代码示例:
javascript 复制代码
//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默认端口3306
    user:'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》代码示例:
javascript 复制代码
//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默认端口3306
    user:'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》代码示例:
javascript 复制代码
//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默认端口3306
    user:'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》代码示例:
javascript 复制代码
//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默认端口3306
    user:'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表里的数据如下:
javascript 复制代码
const mysql=require('mysql');
const conn=mysql.createConnection({
    host:'localhost', //mysql服务器地址
    port:3306, //mysql默认端口3306
    user:'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)中一样
javascript 复制代码
const mysql=require('mysql');
const conn=mysql.createConnection({
    host:'localhost', //mysql服务器地址
    port:3306, //mysql默认端口3306
    user:'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》代码示例:
javascript 复制代码
const mysql=require('mysql');
const conn=mysql.createConnection({
    host:'localhost', //mysql服务器地址
    port:3306, //mysql默认端口3306
    user:'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执行结果:
相关推荐
ma_king15 小时前
入门 java 和 数据库
java·数据库·后端
前端付豪15 小时前
Nest 项目小实践之图书展示和搜索
前端·node.js·nestjs
jiayou6418 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
无责任此方_修行中19 小时前
如何利用 pnpm 的安全控制功能防御 npm 供应链攻击
javascript·npm·node.js
允许部分打工人先富起来19 小时前
在node项目中执行python脚本
前端·python·node.js
NineData1 天前
NineData 迁移评估功能正式上线
数据库·dba
NineData1 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
None3212 天前
【NestJs】基于Redlock装饰器分布式锁设计与实现
后端·node.js
赵渝强老师2 天前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
Gogo11212 天前
构建高性能 Node.js 集中式日志体系 (下篇):Pino + PM2 + OpenSearch 代码落地实战
node.js