• mysql入门与mongoDB入门


    数据库入门

    mysql数据库

    创建表
    - 数据类型
        + 整数类型 int
        + 浮点类型 double
        + 日期类型 date/timestamp 
        + 字符串类型 char varchar
            * 可变varchar(n)  必须要给字符最大长度n 使用:用户名,密码,身份证号码。 n= 40 40 个字节,20个字符 
            * 不可变是char 不需要给字符长度,使用;商品描述、歌词...
            * 空间换时间 
            * text 长度不限 
    - 首先足够用,其次尽量小
    
        create table 表名(
            id int,
            name varchar(20)
        );
    
    - 查看创建表的语句
        + show create table 表名
    - 查看表的明细
        + desc 表名
    
    删除表
    - drop table 表名
    
    插入数据
    - 第一种:全表字段插入
        + `insert into 表名 values (val1,val2...)`
        + 插入的字段类型和*顺序必须*与表的字段*类型*与顺序保持一致,个数是针对全表字段的插入
    - 指定表字段的插入
        + `insert into 表名 (字段1,字段2...) values (val1,val2...)`
        + 插入的数据的顺序要与声明的字段名的顺序一致
        + 类型也要一致,个数也要一致
    

    总结

    sql 语句 结尾必须要有 分号

    • 启动:到安装的bin文件下 或者用可视化工具
    • 1: 登录:
      • mysql -u root -p
      • 密码
      • mysql 连接 -u用户名root -p
      • mysql -hlocalhost -uroot -p
      • mysql yanqi -uroot -p
    • 2: 查看有哪些数据库
      • show databases;
    • 3: 切换数据库
      • use 数据库名;
    • 4: show tables;
      • 没有表: 必须创建表 create table ceshi(id int,name varchar(20));
    • 5: 查看表字段明细
      • desc 表名;
    • 6: 插入数据
      • insert into 表名 (字段1,..) values (值1...)
      • 插入的是数据,表中字段;以及字段的类型;是在创建表示决定的
    • 更新操作
      • UPDATE 表名 SET 字段1 = 表达式,[,字段2 = 表达式] [WHERE express布尔值]
      • update student set tmp = 20+1,sex = sex where 1=1;
    • 删除操作
      • DELETE FROM 表名 [,WHERE exr布尔值]
      • delete from student where name = '马蓉';
    • truncate和delete的区别
      • truncate table 表名
        delete会一条一条的删 自增id保留
        truncate先摧毁整张表,再创建一张和原来的表结构一模一样的表
        truncate在效率上比delete高
        truncate只能删除整表的数据,也就是格式化。
        truncate会把自增id截断恢复为1

    查询语句

    • DISTINCT 去重,尽量不要根据* 来去重
      • select distinct name,age from student;
    • 查询语句可以指定多个字段查询,也可以使用* 查询
      • 在企业中,使用SQL查询* 是会拉低查询效率的 ,建议少用* 查询
    条件查询
    • select * from student where math > 66.6 or math < 66.6;
    • 语法:select * from 表 查询条件
    > < <= >= = <>    大于、小于、大于(小于等于)、不等于
    between...and 显示在某一区间的值
    in(set) 显示在in列表中的值,例:in(100,200)
    like ‘张pattern’ 模糊查询%
    is null 判断是否为空
    and 多个条件同时成立
    or  多个条件任一成立
    not 不成立,例:where not(salary>100)
    
    模糊查询
    - 包含关`select * from student where name like '%关%';` 
    - 以关开头`select * from student where name like '关%';` 
    - 以关结尾`select * from student where name like '%关';` 
    
    • 判断为空
      • select * from student where sex is not null;
    聚合函数
    • 统计数量
      • count(星号)
    • 求和
      • sum(math+english+chinese)
    • 平均值
      • avg(math+english+chinese)
    • 找最值
      • max(列)/min(列)/max(math+english+chinese)
    排序(order by)
    • select * from student where 1= 1 order by chinese desc,math desc,english desc;
    分组(group by)
    • 如果聚合函数只有一行,需要对于不同的集合做聚合运算就加上分组
      • select zu,count(*) from student group by zu;
    分页(limit)
        - `select * from student limit 10,5;`
        - limit offset(起始位置) count(显示多少个)
        - limit 使用的时候,offset从0开始
        - 豆瓣: offset (当前页-1)* 页显示数
            + count : 页显示数
    
    默认端口(数据库汇总)
    • oracle:1521
    • sqlserver :1433
    • mysql :3306
    • mongodb :27017
    • DB2 : 50000

    mysql中间使用

    使用步骤
    • 1:导入mysql 中间件 const mysql = require(‘mysql’);
    • 2: 创建连接池 const pool =mysql.createPool()
    • 3: 取出链接 pool.getConnection()
    • 4:操作数据 pool.query()
    • 5:释放链接 release()
    • 6:操作数据库完毕(err/success) 做什么(交给外部处理函数)

    mysql中间件操作mysql 数据库方法封装

    const pool  = mysql.createPool({
      connectionLimit : 10,// 一次性
      host            : 'localhost',
      user            : 'root',
      port            : '3306',
      password        : '123456',
      database        : 'yanqi'
    });
     
    var db = {};
    
    db.p = function (sql,parm,callback) {
        // getConnection() 从连接池中获取链接 
        // 回参一:抛出错误
        // 回参二:获取到的链接
        pool.getConnection(function(error,connection){
            if(error){
                callback(error);// 错误异常处理
                return // 获取链接池失败 以下不执行了
            }
         // query()  往数据库发送请求的
         // 参一:sql语句
         // 参二:回调函数:处理数据库的响应
         // 回参一:抛出错误异常(错误优先原则)
         // 回参二:数据库响应的正确结果  
             connection.query(sql,parm,function(error,results){
                 console.log(`${sql}===>${parm}`);
                 //  --> 释放链接
                 connection.release();
                //  ----> 将操作数据库结果发送给外界让外处理
                 callback(error,results);// callback 是对查询结果的处理
             })
        })
    }
    
    getConnection()
    query()

    作用:通过连接池去操作去操作数据库

    参一: sql 语句 换句话,如果想对数据是增删改查操作,就写对应的sql 语句

    参二: 回调函数:sql 语句执行的结果

    ——> 回参一: 返回的是错误信息

    ——> 回参二:sql 执行成功 输出的结果

    mongoDB

    • 关系是数据库对应多个集合
      • 集合对应多个文档对象
      • 在mongo中不论是db还是集合,你都无需去创建他
      • 直接就当他已经存在,直接Use来使用
        • use db名称;
          • 接着会被切换到该db中
          • db.要创建的集合名称.save({});这样集合就被创建了
    • 1:启动服务器
      • mongod --dbpath "D:/mongodb/db" // 目录一定要存在自己创建随便名称‘
        • 尽量设置在非系统盘 C盘生成目录是需要权限的
      • 如果看到waiting for connections on port 27017说明服务已经启动
    • 客户端连接服务器另开一个命令行
      • mongo 默认连接的是test数据库
    • 查询有哪些数据库
      • 查询数据库:show dbs;
      • 切换数据库: use 数据库名;
    • 查询当前db下有哪些集合
      • show collections;
    • 查询数据:
      • db.集合名.find(); //查询出来的是文档对象 document
      • db.users.find();
    • 添加数据:
      • db.集合名.save(对象) //mongo默认会给我们加入_id作为该文档对象的唯一标识
      • db.users.save({contry:'中国',name:'小明',score:77});
    • 删除数据:
      • db.集合名.remove(条件对象);//条件匹配就会被删除
      • db.users.remove({name:'小明'});
      • 如果给定一个空对像,会匹配全部
    • 更新数据:
      • db.集合名.update({匹配条件对象},{$set:{修改后的对象}});
      • db.users.update({name:'小明'},{$set:{contry:'印度'}});;
    条件查询
    练习:
       查询姓名为小明的学生
            db.users.find({name:'小明'});;
       查询英语成绩大于90分的同学
            db.users.find({score:{$gt:90}}); //查找成绩大于90分$gt
            //$lt小于
       查询数学成绩不等于88的同学
            db.users.find({score:{$ne:88}});
       查询总分大于200分的所有同学
            db.users.find({score:{$gt:200}});
    
    分页
    • db.users.find().skip(3).limit(3);
    • db.集合名称.find().跳到3.显示3条
      ​ ​ ​ ​ + limit 0,3
    排序
    • db.users.find().sort({key:排序方式});
    • db.users.find().sort({'score':1}); //正数代表升序,负数代表降序
    模糊匹配
    • db.users.find({name:{$regex:'小'}});
    • db.users.find({name:{$regex:'明'}});
    聚合函数
    • 需要求当前集合的记录数:

    • db.users.find().count();

    • 求最大值
      -求整个集合的总成绩
      ​ + db.集合名.聚合({ 组的划分规则{_id:‘1’,显示内容:{ s u m : ′ sum:' sum:score’}} })

      • 求所有人的平均分
        • db.users.aggregate({$group:{_id:'1',sumscore:{$avg:'$score' } }});
      • 求按国家分组,求所有国家的总分
        • db.users.aggregate({$group:{_id:'$contry',sumScore:{$sum:'$score'}}});
    • 添加基础数据:
      db.users.save({contry:‘中国’,name:‘小明’,score:77});
      db.users.save({contry:‘中国’,name:‘小红’,score:88});
      db.users.save({contry:‘中国’,name:‘小张’,score:99});
      db.users.save({contry:‘美国’,name:‘jack’,score:45});
      db.users.save({contry:‘美国’,name:‘rose’,score:67});
      db.users.save({contry:‘美国’,name:‘mick’,score:89});

    解决32位异常
    mongod --dbpath=“路径” --journal --storageEngine=mmapv1

    mongoose

    mySQL与 mongoDB 区别

    1:mysql 是关系型数据库 mongoDB 是非关系型

    2: mysql 需要自己创建连接池 操作数据库 ,mongoDB 内部自带连接池

    3: 概念区分:

    ​ myql 数据库/表/字段

    ​ mongoDB 数据库/集合/文档最对象

    4:操作数据:

    • mysql 必须先创建数据库—>创建表—> 字段——>字段值的数据类型 这些必须在操作数据之前准备好 中间 字段有改变时候,必须要通过表来改变。不能通过操作数据的sql语句来修改
    • mongoDB 创建数据库 ,集合以及文档对象,都可以通过操作数据的命令来创建或者修改。使用’命令行‘时,如果没有集合则会自动创建,有 则对集合中文档对象操作
  • 相关阅读:
    Visual Studio Code——SSH连接Linux
    [Spring MVC 4] MyBatis 分页开发
    UE4 Android端使用MediaPlayer注意事项
    学习Maven Web 应用
    这测试谁爱做谁做,我反正不做了,4年工作经验去面试10分钟就结束了,现在大环境卷成这样了吗?
    【论文笔记】CrossKD: Cross-Head Knowledge Distillation for Object Detection
    leetcode:1154. 一年中的第几天(python3解法)
    IntelliJ IDEA 2022.2正式发布,支持Spring Boot 3和Spring 6
    深度学习设计模式之装饰器模式
    vue3 开启 https
  • 原文地址:https://blog.csdn.net/CarrreyYan_979292/article/details/138900930