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执行结果:
相关推荐
独行soc33 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain1 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship1 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站1 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
理想不理想v2 小时前
webpack最基础的配置
前端·webpack·node.js
梦想平凡3 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO3 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong3 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起4 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化