由于mysql,apache,php是经典的开者伙伴,市面上有很多的集成环境(一个大的软件,其中已经配置好了这三个软件),我们也可以使用它们。优点在于:基本不需要配置,使用比较方便。这样的集成环境有:
wampserver
phpstudy
appserv
我们以phpstudy为例,去官网下载安装。值得提醒的是,当我们安装完MySQL后,我们的计算机又变成服务器了,不过不是Web服务器,而是MySQL数据库服务器了。
4.1学习使用SQL语句(增删改查)
结构化查询语言(Structured Query Language)简称SQL,用来操作关系型数据库:
是一种数据库查询和程序设计语言,用来存取数据以及查询、更新、和管理关系型数据库。
.sql是数据库脚本文件的扩展名
最常用的用于数据操作的sql语句有四类:,分别对应数据的四种操作:
增(create) 例如:用户注册
删(delete)例如 : 删除订单
改(update)例如:修改密码
查(select,read)例如:信息搜索
4.2学习SQL的命令
添加数据命令:
格式:insert into 表名(字段名1,字段名2) values(值1,值2,.......)
字段的顺序要和值的顺序是完全匹配的
如果是字符串类型的字段,其值要加"",如果是数值类型的字符串,其值不需要加""
删除命令delete
注意:不指定条件将删除所有数据
delete from stu where id=14
delete from stu
修改数据-update
update 表名 set 字段1=值1,字段2=值2, where修改条件
要修改的值使用键值对来表示
多个字段用,要分割
不指定条件,将修改当前表中全部的记录
// 修改id为1的同学年龄为53
update stu set age=53 where id=1
//修改id为1的同学的年龄为35 phone为130
update stu set age=35,phone="130" where id=1
//如果修改的时候,不加条件,则会修改全部数据
update stu set age = 60
数据查询-select
作用:把数据从数据库查出来
select
字段名,字段名2,..... from 表名 where 条件表达式
#查询部分字段
select id,name,phone from stu
#查询所有字段
select * from stu
#带条件的查询
select * from where 条件1 and 条件2
where子句
select * from stu
select id,name,height from stu
select * from stu where 条件
select * from stu where sex='男'
select * from stu where id=2
select * from stu where age > 50
select * from stu where age>50 and sex='男'
select * from stu where age>=30 and age<=60
select * from stu where age between 30 and 60
所有SQL代码实例
# 目标 添加也给名为林子大的学生,年龄19,电话号码是130358
#insert into stu(name,age,phone) values('林子大',19,'130358')
# 添加单个名称
#insert into stu(name) values('大林')
#目标 删除
# 删除全部
#delete from stu、
# 删除年龄=42的学生
#delete from stu where age=42
#目标: 改 把名字为林大大的学生的 phone改成130358
#update stu set phone='130358' where name='林大大'
#update stu set name='林子云', age=21, phone='14544544' where name='小林'
# 查询操作
# 目标: 查询这个表中所有数据
#select id,name,phone from stu
#目标: 用 * 表示所有的字段
#select * from stu
#目标: 找出表中年龄是17的所有信息
#select * from stu where age=17
#目标: 找出表中年龄大于15的所有信息
#select * from stu where age>15
#目标:找出表中年龄=17 或者是20的信息
#select * from stu where age=17 or age=21
#目标:找出表中年龄>10 并且名字是林大大
select * from stu where age>10 and name='林大大'
5.在node.js操作数据库
过mysql这个包来操作MySQL数据库
5.1 安装包
mysql模块是一个第三方的模块,专门用来操作数据库
npm install mysql
5.2 使用步骤:
想要用这个包连接数据库,首先电脑要有mqsql 以及其他配套phpstudy。
步骤:三步
1.加载MySQL模块
const = require("mysql")
2.创建MySQL连接对象
var connection = mysql.createConnection({ host : 'localhost', // 你要连接的数据库服务器的地址 port : 3306,// 端口号 user : 'root', // 连接数据库服务器需要的用户名 password : 'root', // 连接数据库服务器需要的密码 database : 'gz61' //你要连接的数据库的名字 });
3.连接MySQL服务器
connection.connect((err) => { // 如果有错误对象,表示连接失败 if (err) return console.log('数据库连接失败') // 没有错误对象提示连接成功 console.log('mysql数据库连接成功') });
代码如下:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
port : 3306,
user : 'root',
password : 'root',
database : 'gz61'
connection.connect((err) => {
if (err) return console.log('数据库连接失败')
console.log('mysql数据库连接成功')
5.3 导出的SQL
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'hreo'
connection.connect((err) => {
if (err) return console.log('数据库连接失败')
console.log('mysql数据库连接成功')
module.exports = connection;
操作语句:增删改查
onnection.query()这个方法是执行SQL语句的
因为上面以及写了创建SQL之类的,这里直接演示执行SQL语句
const conn = require("/uilt/sql")
const sqlStr =`select id,name,age from 表名`
conn.query(sqlStr,(err,result)=>{
console.log(err)
console.log(result)
if(err){
res.json('错误')
res.json('返回数据')
实际开发:
接收用户注册的用户名,根据要求去查询一下名字有没有被占用,如果找到结果,说明被占用,如果查询结果为空,说明名字可以使用。
请求内部三步:
1.根据请求类型获取参数
2.拼接SQL语句
3.根据SQL不同的情况返回不同的数据
router.post('/register', (req, res) => {
console.log(req.body);
const { userName, userPwd } = req.body;
const sqlStrselect = `select username from user where username="${userName}"`
conn.query(sqlStrselect, (err, result) => {
if (err) {
res.json({ msg: "服务器错误", code: 500 })
return
if (result.length > 0) {
res.json({ msg: '注册失败,用户名被占用', code: 201 })
return
const sqlStr = `insert into user(username,password) values("${userName}","${userPwd}")`
conn.query(sqlStr, (err, result) => {
if (err) {
console.log(err);
res.json({ msg: '服务器错误', code: 500 })
return;
res.json({ msg: "注册成功", code: 200 })
执行添加类型的SQL语句,查询结果(result)是一个对象,该对象中有两个属性要关注:
affectedRows: 受影响行数
insertID: 查询数据的主键值
主要语句: const sqlStr = insert into heros(name,gender) values("${name}","${gender}")
const conn = require('../util/sql')
router.post('/addHero', (req, res) => {
const { name, gender } = req.body;
const sqlStr = `insert into heros(name,gender) values("${name}","${gender}")`
conn.query(sqlStr, (err, result) => {
if (err) {
console.log(err);
res.json({ msg: '添加失败', code: 500 })
} else {
console.log('添加成功:', result)
res.json({
msg: '添加成功',
code: 200,
data: result
执行修改类型的SQL语句,查询结果(result)是一个对象,该对象中有 affectedRows 属性,表示本次修改操作影响到的行数。
const conn = require('../util/sql')
router.post('/updataHero', (req, res) => {
const { id, name, gender, img } = req.body;
let condition = [];
if (name) {
condition.push(`name="${name}"`)
if (gender) {
condition.push(`gender="${gender}""`)
if (img) {
condition.push(`img="${img}"`)
const conditionStr = condition.join();
const sqlStr = `update heros set ${conditionStr} where id=${id}`
conn.query(sqlStr, (err, result) => {
if (err) {
res.json({ msg: "修改错误", code: 500 })
res.json({
code: 200,
msg: '修改成功'
行删除类型的SQL语句,查询结果(result)是一个对象,该对象中有 affectedRows 属性
const mysql = require('mysql');
const conn = mysql.createConnection({
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'gz61'
connection.connect((err) => {
if (err) return console.log('数据库连接失败')
console.log('mysql数据库连接成功')
let sql = 'delete from stu where id=1';
connection.query(sql,(err, result) => {
if (err) throw err;
if (result.affectedRows > 0) {
console.log('删除成功');
} else {
console.log('删除失败');
软删除:把isdelete的值设为1
router.get('/delHeroById', (req, res) => {
const { id } = req.query;
console.log(id);
const sqlStr = `update heros set isdelete=1 where id=${id}`
conn.query(sqlStr, (err, result) => {
if (err) {
res.json({ msg: "服务器错误", code: 500 })
if (result.changedRows === 1) {
res.json({ msg: "删除成功", code: 200 })
} else {
res.json({ msg: "删除失败参数错误", code: 201 })
6 模块化封装
在几个功能中,有相同的语法格式,都要执行同样的内容,我们可以把他进行封装,然后modult.exports导出
封装数据库,由于写接口时,需要大量用到,提高代码复用性
const mysql = require('mysql');
const conn = mysql.createConnection({
host: 'localhost',
port: 3306,
user: 'root',
password: 'root',
database: 'gz61'
connection.connect((err) => {
if (err) return console.log('数据库连接失败')
console.log('mysql数据库连接成功')
module.exports = connection
封装导出之后,从别的页面导入
也就调用模块
const xxx = require("模块名")
·····数据库就那么多啦,虽然SQL还有一些创建表的命令没有讲出来,有兴趣的小伙伴查一下哦