前提:先在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()}
});