• ③ database数据库操作


    1 mySQL

    1.2 mySQL的安装配置

    请自行查找相关资料

    1.3 在NodeJs中使用mySQL

    1.3.1 安装mysql模块

        npm install mysql
    

    1.3.2 连接数据库

    1. 使用连接对象方式
        var mysql = require('mysql');
    
        //创建连接对象,并配置参数
        var connection = mysql.createConnection({
            host     : 'localhost',
            user     : 'root',
            password : '',
            database : 'edusys'
        });
            
        // 连接数据库
        connection.connect();
            
        // 查询数据库
        connection.query('select * from student', function (error, results, fields) {
            if (error) throw error;
            console.log('The solution is: ', results);
        });
            
        // 关闭连接,释放资源
        connection.end();
    
    2. 使用连接池方式(官方是推荐)
    • 使用连接池,默认会在连接池中创建10个连接对象(connectionLimit),使用完成自动放回连接池,不需要手动关闭
        var mysql = require('mysql');
    
        //创建连接池
        var pool  = mysql.createPool({
            host     : 'localhost',
            user     : 'root',
            password : '',
            port: 3306,
            database: 'edusys',
            multipleStatements: true
        });
    
        pool.query('select * from student', function(error, rows){
            console.log(rows);
        });
    
    3. 封装模块
        // 配置参数
        // ...
        module.exports = {
            query: sql=>{
                return new Promise((resolve,reject)=>{
                    pool.query(sql, function(err, rows){
                        if(err) return reject(err);
                        resolve(rows);
                    });
                })
            }
        }
    

    1.3.3 数据库操作:

    1. query(sql,callback)
    • insert into <表名> [(<字段名1>[,..<字段名n > ])] values ( 值1 )[, (值n )];
        insert into MyGuests (firstname, lastname, email) values ('John', 'Doe', 'john@example.com');
    
    • delete from <表名> where <条件>
        --删除MyGuests表中id为1的数据
        DELETE FROM MyGuests where id=1;
    
        --删除所有数据
        DELETE FROM MyGuests
    
    • update <表名> set 字段=新值,… where 条件
       update MyGuests set name='Mary' where id=1;
    
    • select <字段1, 字段2, ...> from <表名> where <表达式>
        --查看表 MyGuests 中所有数据
        select * from MyGuests;
    
        --查看表 MyGuests 中前10行数据:
        select * from MyGuests order by id limit 0,10;
    
    2. 条件控制语句: WHERE
    • SELECT * FROM tb_name WHERE id=3;
    • 相关条件控制符:

      • =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b

      • AND、OR、NOT

      • LIKE用法中

        • % 匹配任意、

        • _ 匹配一个字符(可以是汉字)

      • LIMIT idx,qty:数量控制

        • SELECT * FROM goods LIMIT 2,5
      • IS NULL 空值检测

      • 排序ORDER BY

        • asc 升序(默认)

        • desc 降序

    2 MongoDB

    • MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式

    • bson:是一种类json的一种二进制形式的存储格式,简称Binary JSON

    2.1 下载与安装

    2.2 配置数据库(V3.6)

    • 配置环境变量

    • 安装mongodb默认自动配置环境变量,方便在命令行中使用相关命令

    • 配置数据库保存目录

        mongod.exe --dbpath D:datamongodbdb
    
    • 启动成功后,可通过 http://127.0.0.1:27017 访问,但关闭后每次访问都必须重复以上操作

    2.2.1 配置为 windows 服务,实现开机自动启动Mongodb

    1. 创建mongod.cfg文件,并写入以下内容
        systemLog:
            destination: file
            path: d:datamongodblogmongod.log
        storage:
            dbPath: d:datamongodbdb
    
    1. 执行以下命令,安装windows服务
       mongod.exe --config c:mongodbmongod.cfg --service --serviceName MongoDB --install
    

    PS: MongoDB4.0后默认安装windows服务

    2.3 命令行操作

    2.3.1 连接数据库

    • mongo 连接到数据库并进行操作

    • mongod 显示数据库信息

    2.3.2 常用命令(命令行)

    • 输入help可以看到基本操作命令
    1. 数据库操作(Database)
    • 查看所有数据库: show dbs

    • 创建/切换数据库: use DBNAME

      • 如果数据库不存在,则创建数据库,否则切换数据库。
    • 查看当前使用的数据库: db

    • 显示当前db状态: db.stats()

    • 查看当前db的链接地址: db.getMongo()

    • 删除当前使用数据库: db.dropDatabase()

    2. 集合操作(Collection)

    用 use DBNAME 切换到当前数据库后,可以进行集合与文档的操作

    • 创建集合:

      • db.createCollection(NAME);

      PS:只有创建了集合,数据库才能真正成功创建

    • 查询所有集合:

      • show collections
    • 删除集合:

      • db.NAME.drop();
    3. 文档操作(Document)

    文档就是数据,这里的所有操作都是针对数据,格式:db.NAME.方法()

    • 增(插入数据):

      • insertOne(document)

      • inertMany([document,...])

        db.user.insertOne({username:'laoxie'});
        db.user.insertMany([{"username": 'laoxie'}, {'username': 'jingjing'}]);
    

    当你插入一些文档时,MongoDB 会自动创建集合NAME

    • 删(删除数据)

      • deleteOne(query)

      • deleteMany(query)

    • 改(更新数据)

      • updateOne(query,newData)

      • updateMany(query,newData)

        //更新指定字段
        //查找name属性为tiantian的数据,并更新age属性为27
        db.user.updateOne({name:'tiantian'},{$set:{age:27}})
    
        // 找到所有年龄大于18的数据,并设置description为成年
        db.user.updateMany( { age: { $gt : 18 } } , { $set : { description : "成年"} } );
    
    • 查(查询数据):

      • 查询所有:db.NAME.find()

      • 按条件查询(支持多条件):db.NAME.find(query)

      • 查询第一条(只获取第一条):db.NAME.findOne(query)

      find()方法一般后一般使用toArray()方法把结果转成数组

          //查询user下所有数据
          db.user.find().toArray((err,result)=>{});
          
          // 查询user下年龄为38的
          db.user.find({age:38}).toArray()
      
          // 查询user下年龄大于38的
          db.user.find({age:{$gt:38}}).toArray()
      
          //利用pretty()方法格式化结果
          db.user.find().toArray().pretty();
      

    2.3.3 查询条件

    • 比较查询

      • 大于:$gt

      • 小于:$lt

      • 大于等于:$gte

      • 小于等于:$lte

      • 非等于:$ne

    • 包含/不包含:$in/$nin

        db.goods.find({id:{$in:[10,18,26,13]}})
    
    • 或:$or
        db.user.find({$or:[{name:'laoxie'},{name:'jingjing'}]})
        db.user.find({$or:[{age:{$gt:18}},{description:"成年"}]})
    
    • 匹配所有:$all

    • 判断文档属性是否存在:$exists

        db.user.find({password:{$exists:true}})   //查找属性password存在的用户
        db.user.find({password:{$exists:false}})  //查找属性password不存在的数据
        db.user.find({age:{$in:[null],$exists:true}}) //查找age属性存在但值为null的数据
    
    • 正则表达式
        db.user.find({"name":/jack/i});//查找name属性包含jack的数据(不区分大小写)
    

    2.3.4 筛选

    • 限制数量:db.表名.find().limit(数量);

    • 跳过指定数量:db.表名.find().skip(数量)

    • 排序:sort({key:1})

      • 1 : 升序

      • -1 : 降序

    三个放在一起使用的时候,执行的顺序是先 sort(), 然后是 skip(),最后是 limit()

        // 把类型为字String的价格按数字排序
        db.goods.find().collation({numericOrdering:true}).sort({price:1})
    
        // 根据某个值修改文档中的另一个值(把price的值改成sale_price的8折)
        db.goods.find({price:0}).forEach(item=>{                
            db.goods.updateOne({_id:item._id},{$set:{price: item.sale_price*0.8}})
        })
    

    2.4 NodeJS中使用mongodb

    2.4.1 安装mongodb模块

        npm install mongodb --save
    

    2.4.2 数据库操作

    • 连接mongoDB
        const mongodb = require('mongodb');
        const MongoClient = mongodb.MongoClient;
    
        //连接mongoDB
        MongoClient.connect("mongodb://localhost:27017", function(err, client) {
          if(err) throw err;
            // 连接数据库,无则自动创建
            let db = client.db('laoxie');
        });
    

    2.4.3 集合操作

    • 创建集合:createCollection()

      • 格式:db.createCollection(name, options)
    • 使用集合:collection()

      • db.collection(name)
    • 删除集合:drop()

      • 格式:db.COLLECTION_NAME.drop(callback)
        db.createCollection('site', function (err, res) {
            if (err) throw err;
            console.log("创建集合!");
            db.close();
        });
    

    2.4.4 文档操作

    同上命令行操作 <文档操作(Document)>

    2.5 MongoDB的导入导出

    • 导出mongoexport

    把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据

    * 格式:`mongoexport -d dbname -c collectionname -o file --type json/csv -f field`
    
    * 参数说明:
    
        * -d :数据库名
    
        * -c :collection名
    
        * -o :输出的文件名
    
        * --type : 输出的格式,默认为json
    
        * -f :输出的字段,如果-type为csv,则需要加上-f "字段名"
    
        mongoexport -d mytest -c goods -o D:/data/goods.json --type json -f  "_id,name,price,img_url,add_time"
    
    • 导入mongoimport

      • 格式:mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field

      • 参数说明:

        • -d :数据库名

        • -c :collection名

        • --type :导入的格式默认json

        • -f :导入的字段名

        • --headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段

        • --file :要导入的文件

         mongoimport -d mongotest -c goods --file D:/data/goods.json --type json
    

    2.6 MongoDB备份与恢复

    • 备份

      • 格式:mongodump -h dbhost -d dbname -o dbdirectory

      • 参数说明:

        • -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

        • -d: 需要备份的数据库实例,例如:test

        • -o: 备份的数据存放位置,例如:D:/mongodump/

        当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。

          mongodump -h 127.0.0.1:27017 -d mytest -o D:/mongodump/
      
    • 恢复

      • 格式:mongorestore -h dbhost -d dbname --dir dbdirectory

      • 参数或名:

        • -h: MongoDB所在服务器地址

        • -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

        • --dir: 备份数据所在位置,例如:D:/mongodump/

        • --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!

          mongorestore -h 192.168.17.129:27017 -d mytest --dir D:/mongodump/
      
  • 相关阅读:
    4.羽翼sqlmap学习笔记之Post登录框注入
    3.羽翼sqlmap学习笔记之Cookie注入
    2.羽翼sqlmap学习笔记之MySQL注入
    1.羽翼sqlmap学习笔记之Access注入
    转:C语言中的头文件可以自己写吗?
    12.Struts2自定义拦截器
    linux 软件安装篇
    微信开发-PC调试-JS-SDK功能之分享功能调试
    JS加载相对路径脚本的方法
    apache环境之困扰,Rewrite导致无法加载多个不同的.html文件
  • 原文地址:https://www.cnblogs.com/pleaseAnswer/p/15001007.html
Copyright © 2020-2023  润新知