添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
无邪的斑马  ·  Spring Boot Gradle ...·  1 年前    · 
鬼畜的铁链  ·  java - How to use MDC ...·  1 年前    · 
不羁的感冒药  ·  Updating feature ...·  1 年前    · 

由于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

    注意:不指定条件将删除所有数据

    //删除id为14的同学
    delete from stu where id=14
    // 删除的时候,不加添加,将删除stu表中全部记录
    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
    -- 查询所有学生的id,name,height
    select id,name,height from stu
    -- 带条件的查询
    select * from stu where 条件
    -- 查询所有的男同学
    select * from stu where sex='男'
    -- 查询id为2的男同学
    select * from stu where id=2
    -- 查询年龄大于50的同学
    select * from stu where age > 50
    -- 查询年龄大于50岁的男同学
    select * from stu where age>50 and sex='男'
    -- 查询年龄在30~60之间的同学,包括30和60
    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

    //  固定写法三步:
    // 1.加载 MySQL 模块
    var mysql = require('mysql');
    // 2.创建 MySQL 连接对象
    var connection = mysql.createConnection({
        host: 'localhost',   // 你要连接的数据库服务器的地址
        port: 3306,// 端口号
        user: 'root',        // 连接数据库服务器需要的用户名
        password: 'root',        // 连接数据库服务器需要的密码
        database: 'hreo'      //你要连接的数据库的名字
    //3.连接 MySQL 服务器
    connection.connect((err) => {
        // 如果有错误对象,表示连接失败
        if (err) return console.log('数据库连接失败')
        // 没有错误对象提示连接成功
        console.log('mysql数据库连接成功')
    // 导出模块
    // module.exports = connection;
    module.exports = connection;
    

    操作语句:增删改查

    onnection.query()这个方法是执行SQL语句的

    因为上面以及写了创建SQL之类的,这里直接演示执行SQL语句

    //这里引用上面导出的模块
    const conn = require("/uilt/sql")
    //执行SQL语句
    const sqlStr =`select id,name,age from 表名`
    //conn.query(sqlStr,(错误,正确)=>{})
    conn.query(sqlStr,(err,result)=>{
    	console.log(err)//打印错误
    	console.log(result)//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;
        //  2. 根据注册业务的要求,先去看一下名字有没有占用!
        // 根据用户名去做一次查询 如果找到了结果,说明名字被占用了,如果查询结果为空,说明
        //    名字可以使用
        // 拼接查询
        const sqlStrselect = `select username from user where username="${userName}"`
        conn.query(sqlStrselect, (err, result) => {
            if (err) {
                res.json({ msg: "服务器错误", code: 500 })
                return
            // console.log("这是:", result);
            if (result.length > 0) {
                res.json({ msg: '注册失败,用户名被占用', code: 201 })
                return
            // 没有被占用,继续做添加
            // 拼接SQL语句
            const sqlStr = `insert into user(username,password) values("${userName}","${userPwd}")`
            // 根据SQL语句返回值
            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;
        // 拼接SQL字符串
        const sqlStr = `insert into heros(name,gender) values("${name}","${gender}")`
        conn.query(sqlStr, (err, result) => {
            // 根据SQL返回参数
            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) => {
        // console.log(req.body);
        // 接收参数
        const { id, name, gender, img } = req.body;
        let condition = [];
        //这里的判断是否有值,如果有则添加,无则通过,最后转换成字符串,给SQL语句里面
        if (name) {
            condition.push(`name="${name}"`)
        if (gender) {
            condition.push(`gender="${gender}""`)
        if (img) {
            condition.push(`img="${img}"`)
        // console.log(condtion);
        const conditionStr = condition.join();
        // 拼接SQL语句
        const sqlStr = `update heros set ${conditionStr}  where id=${id}`
        // 根据SQL返回不同的数据
        conn.query(sqlStr, (err, result) => {
            if (err) {
                res.json({ msg: "修改错误", code: 500 })
            res.json({
                code: 200,
                msg: '修改成功'
    

    行删除类型的SQL语句,查询结果(result)是一个对象,该对象中有 affectedRows 属性

    // 1. 加载mysql
    const mysql = require('mysql');
    // 2. 创建连接对象
    const conn = 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数据库连接成功')
    // 删除
    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导出

    封装数据库,由于写接口时,需要大量用到,提高代码复用性

    // 由于四项(insert,delete,update,select)操作只是sql语句不同
    // 1. 加载mysql
    const mysql = require('mysql');
    // 2. 创建连接对象
    const conn = 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数据库连接成功')
    module.exports = connection
    

    封装导出之后,从别的页面导入

    也就调用模块

    const xxx = require("模块名")

    ·····数据库就那么多啦,虽然SQL还有一些创建表的命令没有讲出来,有兴趣的小伙伴查一下哦

    分类:
    前端
    标签: