精华内容
下载资源
问答
  • 数据库基本操作

    千次阅读 2018-07-25 16:46:55
    常用数据库操作 1 mysql数据库使用总结 2 本文主要记录一些mysql日常使用的命令,供以后查询。 3 1.更改root密码 4 mysqladmin -uroot password 'yourpassword' 5 2.远程登陆mysql服务器 6 mysql -uroot -...

    .常用数据库操作

    复制代码

     1 mysql数据库使用总结
     2 本文主要记录一些mysql日常使用的命令,供以后查询。
     3 1.更改root密码
     4 mysqladmin -uroot password 'yourpassword'
     5 2.远程登陆mysql服务器
     6 mysql -uroot -p -h192.168.137.10 -P3306
     7 3.查询数据库
     8 show databases;
     9 4.进入某个数据库
    10 use databasename;
    11 5.列出数据库中的表
    12 show tables;
    13 6.查看某个表全部字段
    14 desc slow_log;
    15 show create table slow_log\G; (不仅可以显示表信息,还可以显示建表语句)
    16 7.查看当前用户
    17 select user();
    18 8.查看当前所在数据库
    19 select database();
    20 9.创建新数据库(可以指定字符集)
    21 create database db1 charset utf8;
    22 10.创建新表
    23 create table t1 (`id` int(4), `name` char(40));
    24 11.查看数据库版本
    25 select version();
    26 12.查看数据库状态
    27 show status;         当前会话状态
    28 show global status;  全局数据库状态
    29 show slave status\G;   查看主从数据库状态信息
    30 13.查询数据库参数
    31 show variables;
    32 14.修改数据库参数
    33 show variables like 'max_connect%';
    34 set global max_connect_errors = 1000;(重启数据库会失效,要在配置文件中修改)
    35 15.查看当前数据库队列
    36 show processlist;
    37 16.创建普通用户并授权给某个数据库
    38 grant all on databasename.* to 'user1'@'localhost' identified by '123456';
    39 17.查询表数据
    40 select * from mysql.db;           //查询该表中的所有字段
    41 select count(*) from mysql.user;  //count(*)表示表中有多少行
    42 select db,user  from mysql.db;    //查询表中的多个字段
    43 select * from mysql.db where host like '10.0.%';在查询语句中可以使用万能匹配 “%”
    44 18.插入一行数据
    45 insert into db1.t1 values (1, 'abc');
    46 19.更改表的某一行数据
    47 update db1.t1 set name='aaa' where id=1;
    48 20.清空表数据
    49 truncate table db1.t1;
    50 21.删除表
    51 drop table db1.t1;
    52 22.清空数据库中的所有表(数据库名是eab12)
    53 mysql -N -s information_schema -e "SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') FROM TABLES WHERE TABLE_SCHEMA='eab12'" | mysql -f eab12
    54 23.删除数据库
    55 drop database db1;
    56 24.数据库备份
    57 mysqldump  -uroot -p'yourpassword' mysql >/tmp/mysql.sql
    58 25.数据库恢复
    59 mysql -uroot -p'yourpassword' mysql </tmp/mysql.sql
    60 26.新建普通用户
    61 CREATE USER name IDENTIFIED BY 'ssapdrow';
    62 27.更改普通用户密码
    63 SET PASSWORD FOR name=PASSWORD('fdddfd');
    64 28.查看name用户权限
    65 SHOW GRANTS FOR name;
    66 29.脚本中执行mysql命令
    67 mysql -uuser -ppasswd -e"show databases"
    68 echo "show databases"|mysql -uuser -ppassword
    69 以下是执行大量mysql语句采用的方式
    70 mysql -uuser -hhostname -ppasswd <<EOF
    71 mysql语句
    72 EOF

    转自https://www.cnblogs.com/suxiaoman/p/7693066.html

    展开全文
  • 芒果数据库基本操作

    千次阅读 2019-09-27 11:07:44
    芒果数据库基本操作 MongoDB (芒果数据库) 数据存储阶段 文件管理阶段(.txt .doc .xls) 优点 : 使用简单方便 数据能够长期保存 可以存储大量数据 缺点 : 数据一致性差 数据的查找修改不方便 数据冗余...

    芒果数据库基本操作
    MongoDB (芒果数据库)


    数据存储阶段

    文件管理阶段(.txt  .doc  .xls)

    优点 : 使用简单方便
            数据能够长期保存
              可以存储大量数据

    缺点 : 数据一致性差
            数据的查找修改不方便
              数据冗余

    数据库管理阶段

    优点 : 数据组织结构化,降低冗余
            提高增删改查效率
              方便扩展
              方便程序调用,做自动化的处理
    缺点 : 数据库使用特定的语句操作,相对复杂


    几个概念

    数据 :能够输入到计算机中并被识别处理的信息的集合

    数据结构:研究一个数据集合中,数据之间关系的学科

    数据库: 按照数据结构,存储数据的仓库。在数据库管理系统管理下在一定介质上的数据集合。

    数据库管理系统 :管理数据库的软件,用于建立维护数据库

    数据库系统 :由数据库和数据库管理系统等开发工具组成的集合


    关系型数据库

    采用关系模型来组织数据结构的数据库 (二维表)

    Oracle  DB2   SQLServer  MySql   Sqlite

    优点:容易理解,逻辑类似常见的表格
          使用方便,都使用sql语句,sql语句很成熟
          数据一致性高,冗余低,完整性好
          技术成熟,可以使用外部关联等复杂操作

    缺点:每次都需要sql语句的解析,消耗大
          不能很好的满足并发需求,特别是海量数据爆发,读写能力不足
          关系型数据库每一步操作都要加锁,以保证操作的原子性,增加了数据库负担
          数据的一致性有时会导致空间浪费


    非关系型数据库 (NoSql--》not only sql)

    优点 : 高并发,读写能力强
            普遍比关系型数据库容易扩展
              弱化了数据结构,降低数据一致性

    缺点 : 通用性差,没有sql语句一样的一致化操作
            操作过于冗长,容易混乱
              没有join等复杂操作,很多也不支持事务等操作

    NoSql 使用情况
    1. 对数据一致性要求低
    2. 数据库需要处理海量并发
    3. 需要处理速度较快,比如做一个临时的中间过度存储    器
    4. 数据库构建比较方便的构建非关系模型

    Nosql分类:

    键值型数据库:Redis
    列存储数据库
    文档型数据库:MongoDB
    图形数据库

    MongoDB 数据库  (非关系型数据库--》文档型数据库)

    1. 由c++编写的数据库管理系统
    2. 支持丰富的增删改查操作
    3. 支持丰富的数据类型
    4. 支持众多的编程语言接口(python  PHP  C++  c#)
    5. 使用方便,便于部署。相对成熟。

    MongoDB安装

    自动安装
    sudo apt-get install mongodb

    默认安装位置 :  /var/lib/mongodb 
    配置文件:/etc/mongodb.conf
    命令集: /usr/bin   /usr/local/bin
    (软件安装后提供功能性的命令)

    手动安装
    1.下载Mongodb(开源)
    www.mongodb.com-->get mongodb --> community server

    选择想要下载的版本

    2. 选择合适的位置解压(/usr/local  /opt)
    tar 解压后得到 MongoDB文件夹

    3. 将命令集 (解压后文件夹中bin目录)添加到环境变    量
    PATH=$PATH:/opt/mongo/bin
    export PATH
    将以上两句添加如 /etc/rc.local

    4. 重启系统

    Mongodb 命令

    设置数据库存储位置
    mongod  --dbpath   目录

    e.g.    mongod  --dbpath  dbs

    设置数据库端口
    mongod  --port  8080 
    *默认端口  27017


    mongo 
    进入mongo shell界面:mongodb的交互界面,操作数据库

    退出界面 : quit() 或  ctrl + c 

    mongodb数据库组织形式

    键值对 ---》 文档 ---》 集合 ---》数据库

    ------------------------
    ID   |   NAME   |   AGE
    ------------------------
    1    |   Lily   |   17
    ------------------------
    2    |   Lucy   |   18
    ------------------------

    {
      "_id":1,
      "NAME":"Lily",
      "AGE":17
    },
    {
      "_id":2,
      "NAME":"Lucy",
      "AGE":18
    }

    mysql 和 mongodb 概念比价

    mysql        mongodb        含义

    database     database       数据库

    table        collection     表/集合

    column       field          字段/域

    row          document       记录/文档

    index        index          索引


    创建数据库

    use databaseName 

    e.g.  use stu  #创建一个stu数据库

    * use 实际上是表示选择某个数据库使用。当这个数据库不存在时会自动创建。
    * 使用use后数据不会马上被创建,而是在实际写入数据时才会创建


    查看当前系统中数据库
    show  dbs

    系统数据库:
    admin:存放用户及其权限
    local: 存储本地数据
    config:存储分片信息

    数据库的命名规则
    1. 使用utf-8字符
    2. 不能有空格,点,/ \  '\0'字符
    3. 长度不超过64字节
    4. 不和系统数据库重名

    db:mongodb系统全局变量,代表当前正在使用的数据库

    * 如果没有use任何数据库情况下 db表示test。此时插入数据则创建test数据库


    数据库备份和恢复

    备份:mongodump -h dbhost -d    dbname   -o dbdir
                       主机      要备份数据库   目录

    e.g.   
    将stu数据库备份到student目录中
    mongodump -h  127.0.0.1 -d stu -o student

    恢复:mongorestore -h  dbhost:port -d dbname  path
                           主机           数据库  目录

    e.g.
    将stu数据库恢复到student数据库中
    mongorestore -h 127.0.0.1:27017 -d student  student/stu

    数据库的监测
    mongostat

    insert query update delete: 每秒执行增删改查次数
    command : 每秒运行命令次数
    flushes : 每秒清理缓存次数
    vsize :使用的虚拟内存
    res:物理内存

    mongotop 
    监测每个数据库的读写时长

     ns         total     read       write
    数据集合    总时长    读时长    写时长


    删除数据库
    db.dropDatabase()

    删除db代表的数据库

    创建集合 

    db.createCollection(collection_name)

    e.g.   
    创建一个class1的集合
    db.createCollection("class1")

    创建集合2
    当向一个集合中插入数据的时候,如果这个集合不存在则会自动创建

    db.collecionName.insert(...)

    e.g.  如果class2不存在则自动创建    db.class2.insert({"name":'Tom','age':17,'sex':'m'})

    查看数据库中集合
    show collections
    show tables

    集合命名规则
    1. utf-8 字符
    2. 不能有'\0'
    3. 不要以system.开头,因为这是系统保留集合前缀
    4. 不要和关键字重复


    删除集合
    db.collectionName.drop() 

    e.g.   db.class.drop()   #删除class这个集合

    集合的重命名

    db.collectionName.renameCollection("new_name")

    e.g.  将class2重命名为class0
    db.class2.renameCollection("class0")


    文档

    mongodb中数据的组织形式 --》 文档

    mongodb文档 :以键值对形式组成的类似字典的数据描述形式

    键: 即文档的域

    键的命名规则:
    1. utf-8字符串
    2. 不含有'\0' 通常不用 .  $
    3. 一个文档中的键不能重复

    * 文档中的键值对是有序的
    * mongodb中数据严格区分大小写

    值: 即文档存储的数据    支持bson数据

    JavaScript ---》 json ---》bson

    类型             值

    整型            整数
    布尔类型        true  false
    浮点型          小数
    Array           数组
    Timestamp       时间戳
    Date            时间日期
    Object          内部文档
    Null            空值 null
    String          字符串
    Symbol          特殊字符串
    Binary data     二进制字串
    code            代码
    regex           正则表达式
    ObjectId        ObjectId字串

    ObjectId 

    "_id" : ObjectId("5b503b7f38d0e992e1270560")

    _id : 当在mongo代表中插入文档时,如果不指定_id则会自动添加这个域,作为主键。

    ObjectId() 值是系统自动生成的不重复字串标识

    24位   8位  文档创建时间
           6位  机器ID
           4位  进程ID
           6位  计数器

    集合中的文档:
    1. 集合中的文档不一定有相同的域
    2. 集合中的文档多少不一定相同
    3. 集合中的文档,值的类型不一定相同

    集合设计
    1. 集合中的文档尽可能描述同一类数据
    2. 同一类数据不要过多分散在多个集合中存放
    3. 集合中文档的结构层次不宜过多


    插入文档

    db.collectionName.insert()

    插入单个文档

    e.g.
    db.class0.insert({name:"HanMei",age:17,sex:'w'})

    * 插入数据时域名可以不加引号
    * 查看插入结果  db.class.find()
    * _id 为系统自动添加主键,如果自己写_id则为自己设定的值,但是仍然不可重复
    * 一个集合中的文档是有序的

    插入多个文档
    db.collectionName.insert([{},{},{}])

    e.g. 
    db.class2.insert([{name:'阿宝',age:32},{name:'阿哲',age:31},{name:'阿蓉',age:26}])

    save() 插入文档
    save() 也可以用来插入多条数据
    如果正常插入与insert相同
    当插入指定_id值重复的数据时save()可以对原数据进行修改,但是insert()会报错

    db.collectionName.save()

    e.g.   db.class1.save({name:'Lily',age:13,sex:'w'})

    * 如果不加_id域时用法同insert()
    * 如果加_id,此_id值存在则save表示修改该文档。

    作业 :
    1. 关系型数据库和非关系型数据库区别
    2. 复习mysql 增删改查
    3. 练习mongo 数据库集合创建删除,文档插入命令


    第二天

    复习

    1.关系型数据库和非关系型数据库比较
    2.MongoDB 文档型数据库
       
        创建数据库: use database
        删除数据库: db.dropDatabase()

        创建集合: db.createCollection()
                   db.collection.insert()
        删除集合: db.collection.drop()
        重命名  : db.collection.renameCollection()
        
        查看数据库: show  dbs
        查看集合: show collections    
                   show  tables

    3. 文档   bson

    www.mongodb.com --> docs  查找文档帮助

    插入文档 : insert()   save() 
    ***********************************************

    获取集合对象
     db.getCollection('class1') ===》 db.class1
        
    e.g. 
    db.getCollection('class1').insert({name:'Marry',age:16,sex:'w'})


    查找操作

    mysql :  select ... from  table  where ....

    mongo :  db.collection.find(query,field)

    查找所有内容
    db.collection.find()  ----> select * from table

    find(query,field)
    功能 : 查找数据
    参数 : query: 筛选条件,相当于where子句
            field: 选定要展示的域
    返回值 : 返回查找到的文档

    query : 以键值对形式给出筛选条件
            {name:'Lily'}
    e.g.  db.class1.find({name:'Lily'})

    field : 以键值对的形式给出要展示(不展示)的域,域名为键,值为1表示展示,0表示不展示

    * 如果某个域设置为0则表示不展示该域其他的均展示
    * 如果某个域设置为1则表示展示该域其他的均不展示
    * _id必须设置为0才不会显示
    * 除了_id其余设置的值必须相同

    e.g.  db.class1.find({name:'Lily'},{_id:0,name:1,age:1})

    findOne(query,field)
    功能 : 只查找第一条复合条件的文档
    参数返回值同find()

    e.g.  db.class1.findOne({sex:'w'},{_id:0})


    query 更多筛选功能

    操作符:使用$符号标注的一个有特殊意义的字符串。用以表达一定的含义。比如 $lt 表示小于

    比较操作符
    $eq  等于

    e.g.    db.class1.find({age:{$eq:13}},{_id:0})
            db.class1.find({age:13},{_id:0})

    $lt  小于 <

    e.g.  年龄小于15
    db.class1.find({age:{$lt:15}},{_id:0})

    * 字符串也可以比较大小

    $lte  小于等于  <=

    e.g.  小于等于15
    db.class1.find({age:{$lte:15}},{_id:0})

    $gt  大于  >

    e.g. 大于15
    db.class1.find({age:{$gt:15}},{_id:0})

    $gte  大于等于  >=

    e.g  大于等于15   
    db.class1.find({age:{$gte:15}},{_id:0})

    $ne   不等于  !=

    e.g.  不等于13
     db.class1.find({age:{$ne:13}},{_id:0})

    * 如果某个文档不存在查找的域,则不等于可以匹配到该文档

    $in  包含

    e.g.  年龄包含 在11,12,13,14的
    db.class1.find({age:{$in:[11,12,13,14]}},{_id:0})

    $nin  不包含

    e.g. 年龄不是13,14
    db.class1.find({age:{$nin:[13,14]}},{_id:0})

    逻辑操作符

    query 逗号分隔的条件即为与关系
    e.g. 年龄大于13 小于16
    > db.class1.find({age:{$gt:13,$lt:16}},{_id:0})
    e.g. 年龄大于13且性别为女
    > db.class1.find({age:{$gt:13},sex:'w'},{_id:0})

    $and 逻辑与

    e.g.   年龄大于13 并且姓名大于Lily db.class1.find({$and:[{age:{$gt:13}},{name:{$lt:'Lily'}}]},{_id:0})

    $or 逻辑或

    e.g.  年龄大于15或者为男生
    db.class1.find({$or:[{age:{$gt:15}},{sex:'m'}]},{_id:0})

    $not  逻辑非

    e.g.  年龄不大于15
    db.class1.find({age:{$not:{$gt:15}}},{_id:0})

    $nor  既不也不

    e.g.  既不大于16 也不是女生
    db.class1.find({$nor:[{age:{$gt:16}},{sex:'w'}]},{_id:0})


    条件混合

    年龄大于16并且为男生  或者 年龄小于14
     db.class1.find({$or:[{age:{$gt:16},sex:'m'},{age:{$lt:14}}]},{_id:0})


    年龄大于16或者为女生  并且 姓名大于 Jame
    db.class1.find({name:{$gt:'Jame'},$or:[{age:{$gt:16}},{sex:'w'}]},{_id:0})


    数组  

    [1,2,3,4]

    数组查找

    查看数据中是否包含某一项

    e.g.  如果score数组中包含67即可
    db.class3.find({score:67},{_id:0})
    db.class3.find({score:{$gt:90}},{_id:0})


    $all
    查找数据中同时包含多项

    e.g. 同时包含64  75
    db.class3.find({score:{$all:[64,75]}},{_id:0})


    $size 
    通过数组元素个数查找

    e.g. 
    db.class3.find({score:{$size:3}},{_id:0})

    $slice 
    取出数组的部分进行显示  放在field中

    e.g.  显示数组中前两项
    db.class3.find({},{_id:0,score:{$slice:2}})

    e.g.  跳过第一项显示后面一项
    db.class3.find({},{_id:0,score:{$slice:[1,1]}})


    其他查找方法

    $exists
    判断一个域是否存在

    e.g.  查找存在age域的文档
    db.class1.find({age:{$exists:true}},{_id:0} )

    * true 表示有这个域 false表示筛选无这个域

    $mod
    余数查找

    e.g.  查找除以2余数为1的 
     db.class1.find({age:{$mod:[2,1]}},{_id:0} )

    $type 
    找出值为指定类型的文档

    e.g.  查找age数据类型为1的文档
     db.class1.find({age:{$type:1}},{_id:0} )

    具体数字和类型的匹配
    Type                Number
    Double                 1
    String                 2
    Object                 3
    Array                   4
    Binary data             5
    ObjectId               7
    Boolean                 8
    Date                   9
    Null                   10
    RE                     11
    Symbol                 14
    32-bit integer         16
    Timestamp               17
    64-bit integer         18


    查找结果相关函数

    distinct()
    功能:查看集合某个域的取值范围

    e.g. 查看集合中age域值的范围  
    db.class1.distinct("age")

    pretty()
    功能: 格式化显示查找结果

    e.g.   db.class1.find().pretty()  


    limit(n)
    功能: 显示查找结果的前n条

    e.g.  显示查找结果的前三条  
    db.class1.find({},{_id:0}).limit(3)

    skip(n)
    功能 : 跳过前n条显示

    e.g.  跳过前三条显示后边的内容
    db.class1.find({},{_id:0}).skip(3)

    count()
    功能 : 计数统计

    e.g. 统计男生数量
    db.class1.find({sex:'m'},{_id:0}).count()


    sort({域:1/-1})
    功能 : 对查找结果排序
    参数 : 以键值对的形式给出
            1 表示按照升序排序, -1表示降序排序

    e.g.  按照年龄升序
    db.class1.find({},{_id:0}).sort({age:1})

    复合排序:当第一排序项相同时比较第二排序项

    e.g. 
    db.class0.find({},{_id:0}).sort({age:1,name:1})

    函数的连续调用
    当函数返回文档集合时还可以继续调用函数

    e.g.  查找班级年龄最大的三个
    db.class1.find({},{_id:0}).sort({age:-1}).limit(3)

    文档的删除操作

    delete  from table  where  ...

    db.collection.remove(query,justOne)
    功能 : 删除文档
    参数 : query  筛选要删除的文档 相当于where
                   用法同查找
        justOne : 布尔值,默认为false 表示删除所有。如果设置为true 只删除第一条符合条件的文档。
    e.g. 
    db.class2.remove({name:"阿蓉"})

    e.g.  justOne为true则只删除第一条符合条件的
    db.class0.remove({age:17},true)

    删除集合中所有文档

    e.g.  删除class2中所有文档
    db.class2.remove({})


    练习 :
    1. 创建数据库  名字 grade
      use  grade
    2. 数据库中创建集合 class
    3. 集合中插入文档,格式如下
       {name:'zhang',age:10,sex:'m',hobby:['a','b']}
       age范围  4-15
       hobby 范围 
       [draw  dance  sing  pingpong    basketball  football  running  computer]  

    4. 查找练习
       查看班级所有人信息
       db.class.find({},{_id:0})

       查看班级年龄8岁的同学信息
       db.class.find({age:8},{_id:0})
       
       查看年龄大于10岁的学生信息
       db.class.find({age:{$gt:10}},{_id:0})
      
       查看年龄在8-11岁之间的学生信息
       db.class.find({$and:[{age:{$gt:8}},{age:{$lt:11}}]},{_id:0})

       查看年龄为9岁且为男生的学生
       db.class.find({age:9,sex:'m'},{_id:0})

       找到年龄小于7岁或大于12岁的学生
       db.class.find({$or:[{age:{$lt:7}},age:{$gt:12}],{_id:0})
     
       找到年龄为8岁或者11岁的学生
       db.class.find({$or:[{age:8},{age:11}]},{_id:0})
       db.class.find({age:{$in:[8,11]}})

       找到有两项兴趣爱好的学生
       db.class.find({hebby:{$size:2}},{_id:0})

       找到兴趣中有draw的学生
       db.class.find({hebby:draw},{_id:0})

       找喜欢画画又喜欢跳舞的学生
       db.class.find({hebby:{$all:['draw','dance']}})

       统计兴趣有三项的学生人数
       db.class.find({hebby:{%size:3}}).count

       找到本班年龄第二大的同学 
       db.class.sort({age:-1}).skip(1).limit(1)

       查看本班学生兴趣爱好涵盖哪些方面
       db.class.distinct('hebby')

       找到年龄最大的三个同学
       db.class.sort({age:-1}).limit(3)

    5. 删除所有年龄大于12或者小于7岁的同学除非他的爱好有三项以上
      db.class.remove({$and:[{$or:[{age:{$gt:12}},{age:{$lt:7}}]},{hebby:{$size:{$lt:3}}}]})

     

    修改操作
    update  table  set  ... where ...

    db.collection.update(query,update,upsert,multi)
    功能 : 修改文档
    参数 : query : 筛选需要修改的文档,相当where
                     用法同查找
            update: 要修改什么内容 相当set。往往需要配合修改操作符
              upsert:bool值 默认false 如果query的文档不存在则不做操作
                    设置为true 则如果文档不存在根据query和update内容插入新文档
              multi: bool值 默认false 如果筛选到多条文档则只修改第一条。
                    设置为true则表示修改所有筛选到的文档

    e.g.  年龄修改为18 db.class0.update({name:'HanMei'},{$set:{age:18}})

    e.g.  如果筛选内容不存在则插入 
     db.class0.update({name:'Jame'},{$set:{age:18}},true)

    e.g.  如果匹配到多条,则修改所有
    db.class0.update({sex:'w'},{$set:{name:'小芳'}},false,true)

    作业 : 1. 操作一遍增删改查已经解除的操作符
            2. 学习一下魔法方法 __call__ 
              3. 网络程序


    第三天

    复习 : 

    1. 查找操作   find(query,field)   findOne()

       操作符 : 比较  $lt  $lte  $gt  $gte  $ne  $eq
                       $in  $nin
                   逻辑 $and  $or   $not  $nor

                 数组  $all  $size 

                   其他  $exists   $mod   $type

    2. 函数 : pretty()  limit()   skip()  sort()
               count()
       其他函数: distinct()   getCollection()

    3.  删除文档    remove(query,justOne)
                    remove({})

    4.  修改操作  update(query,update,upsert,multi)

    ==================================================

    修改操作符

    $set
    修改一个域的值,或者增加一个域

    e.g.  修改功能 如果该域不存在则增加这个域
    db.class0.update({age:20},{$set:{name:'小薇'}})

    $unset
    删除一个域

    e.g.   sex后面为空表示删除一个域
    db.class0.update({name:'Jame'},{$unset:{sex:''}})

    $rename 
    修改一个域的名称

    e.g.  将sex域名修改为gender
    db.class0.update({},{$rename:{sex:'gender'}},false,true)


    $setOnInsert
    如果update执行了插入文档操作,表示补充插入内容 

    e.g.  如果执行插入操作则将setOnInsert中内容也插入
    db.class0.update({name:'Tom'},{$set:{age:17},$setOnInsert:{gender:'m',tel:'12345'}},true)
    00
    * 在update参数中可以同时写多个修改器

    $inc
    加减修改器

    e.g. 所有人年龄增加1
    db.class0.update({},{$inc:{age:1}},false,true)

    * $inc值可以是正数负数整数小数

    $mul
    乘法修改器

    e.g. Tom年龄 乘以2
    db.class0.update({name:'Tom'},{$mul:{age:2}})

    * $mul值可以是正数负数整数小数


    $max
    指定了某个域值的下限,如果小于指定值则修改为指定值

    e.g.  将年龄不到20的修改为20
    db.class0.update({},{$max:{age:20}},false,true)

    $min
    指定了某个域值的上限,如果大于指定值则修改为指定值

    e.g.  年龄大于25的修改为25 
    db.class0.update({},{$min:{age:25}},false,true)


    数组修改器

    $push  向数组中添加一项

    e.g. 
    db.class3.update({name:'小明'},{$push:{score:5}})

    $pushAll  向数组中添加多项

    e.g.
    db.class3.update({name:'小红'},{$pushAll:{score:[5,10]}})

    $pull  从数组中删除一项

    e.g.
    db.class3.update({name:'小红'},{$pull:{score:10}})

    *数组可以有重复值,如果删除则会把所有指定的值都删除

    $pullAll  删除数组中多项

    e.g.  
    db.class3.update({name:'小明'},{$pullAll:{score:[67,5]}})


    $each   对多个值逐一操作

    e.g.  
    db.class3.update({name:'小明'},{$push:{score:{$each:[5,10]}}})

    $position  指定插入位置 

    e.g.  需要搭配$each使用,将数据从1号位置插入
    db.class3.update({name:'小红'},{$push:{score:{$each:[10],$position:1}}})

    $sort  对数组进行排序

    e.g.  和each一起使用,对数组score进行排序
    db.class3.update({name:'小红'},{$push:{score:{$each:[],$sort:1}}})

    $pop  弹出一项

    e.g.   1表示弹出最后一项 -1表示删除第一项  
    db.class3.update({name:'小红'},{$pop:{score:-1}})

    $addToSet  向数组中添加一项,不能和已有的内容重复

    e.g.  添加87,不能和已有数据重复
    db.class3.update({name:'小红'},{$addToSet:{score:87}})


    时间类型

    mongodb中存储时间格式 : ISODate()

    方法1 :  new Date()   自动生成当前时间

    e.g. 
    db.class2.insert({title:'Python入门',date:new Date()})

    方法2 : ISODate()  生成当前时间

    e.g. 
    db.class2.insert({title:'Python精通',date:ISODate()})

    方法3  Date()  将生成的当前时间变为字符串存储

    e.g. 
    db.class2.insert({title:'Python疯狂',date:Date()})

    ISODate()
    功能 : 生成时间类型存储
    参数 : 参数指定时间
             "2018-07-01 12:10:56"
         "20180701 12:10:56"
         "20180701"

    e.g. 
    db.class2.insert({title:'Python崩溃',date:ISODate("2018-07-01 01:12:12")})


    时间戳

    valueOf()
    将时间转换为时间戳

    e.g.
    db.class2.insert({title:'Python放生',date:ISODate().valueOf()})


    Null  ----》 null

    1. 如果某个域存在却没有值,可以设置为null

    e.g.  
    db.class2.insert({title:'Python涅槃',price:null})

    2. 如果某个域不存在可以使用null匹配

    e.g.  找到date域不存在的文档
     db.class2.find({date:null},{_id:0})


    Object 内部文档

    文档内某个域的值还是一个文档,则这个文档为内部文档

    * 当需要使用内部文档某个域的时候,可以使用外部文档 . 的方法引用内部文档。但是注意此时需要加引号

    e.g.
    db.class4.find({'book2.title':'python Web'},{_id:0})

    e.g. 
    db.class4.update({'book1.title':'python爬虫'},{$set:{'book1.price':48.8}})

    数组的下标引用

    * 使用数组时,可以使用数组域 . 数组序列下标的方式引用数组的具体某一项

    e.g. 
    db.class3.find({'score.0':98},{_id:0})

    e.g.
    db.class3.update({name:'小明'},{$set:{'score.0':100}})


    查找结果的有序性

    即可以对find的查找结果使用[]的方式引用具体某一条

    e.g.
    db.class1.find({},{_id:0})[1]

    练习 : 
    使用之前的grade数据库

    1. 将小红年龄修改为8岁,兴趣爱好变为跳舞画画
    {$set:{age:8,hobby:[‘draw’,'dance']}}

    2. 追加小明兴趣爱好 唱歌
     {$push:{hobby:'sing'}}

    3. 追加小王兴趣爱好,吹牛,打篮球
    {$pushAll:{hobby:['chuiniu','basketball']}}

    4. 小李兴趣多了跑步唱歌,但是要确保和之前的不重复
    {$addToSet:{hobby:{$each:['running','sing']}}}

    5. 班级所有人年龄加1
    {$inc:{age:1}},false,true

    6. 删除小明的sex属性
    {$unset:{sex:''}}

    7. 删除小李的第一个爱好 
    {$pop:{hobby:-1}}

    8. 删除小红的兴趣画画和唱歌
    {$pullAll:{hobby:['draw','sing']}}


    索引

    指建立指定键值对及所在文档中存储位置的对照清单。使用索引可以方便我们快速查找,减少遍历次数,提高查找效率。

    mongodb创建索引

    ensureIndex()
    功能 : 创建索引
    参数 : 索引域,索引类别和选项

    e.g.  根据name 创建索引
    db.class1.ensureIndex({name:1})

    * 1表示正序 -1逆序

    查看一个集合中的索引

    db.class1.getIndexes()

    * _id是系统自动创建的索引

    自定义索引名称

    db.class1.ensureIndex({name:1},{name:'name_index'})

    删除索引
    dropIndex()
    功能 : 删除索引
    参数 : 要删除的索引,可以是索引名称或者索引键值对

    e.g.   db.class1.dropIndex('age_index')
    e.g.   db.class1.dropIndex({name:-1})

    dropIndexes()
    删除所有索引  除了_id

    e.g. db.class1.dropIndexes()


    索引类型

    复合索引
    根据多个域创建一个索引

    e.g. 
    db.class1.ensureIndex({name:1,age:-1})


    数组和子文档索引

    如果对某个域创建索引,值为数组或者子文档,则通过数组或子文档进行查找时也是索引查找

    覆盖索引

    查找返回的内容,仅仅是索引表存储的内容,不需要再去原数据库查找

    唯一索引

    创建索引时希望集合中创建索引的域的值均不重复


    e.g.
    db.class1.ensureIndex({name:1},{unique:true})

    * 创建唯一索引的域的值不可以重复


    稀疏索引(间隙索引)

    只针对有指定域的文档创建索引表,如果某个文档没有该域则不做索引处理

    e.g.  创建age域的稀疏索引
    db.class1.ensureIndex({age:1},{sparse:true})


    索引约束
    1. 当数据发生更新 ,索引也要随之更新。影响插入,修改,删除操作的效率
    2. 索引表也需要占有一定的磁盘空间

    综上 :当数据量比较小,或者需要频繁的进行数据修改操作而不是查找操作的时候,不适合创建索引


    聚合操作

    对文档的更高级的筛选整理统计

    db.collection.aggregate()
    功能 : 聚合函数,完成聚合操作
    参数 : 聚合条件 ---》 聚合操作符

    聚合操作符

    $group  分组聚合  需要配合分组统计操作符使用
          
          $sum  : 求和 
          
          e.g. 
          db.class1.aggregate({$group:{_id:'$sex',
                        分组  按sex内容分组
           num:            {$sum:1}}})
         自定义统计域       统计什么

           e.g. 统计所有男生和女生的年龄之和
        db.class1.aggregate({$group:{_id:'$sex',num:{$sum:'$age'}}})

         $avg   求平均
         
         e.g.  求每个性别的平均年龄
         db.class1.aggregate({$group:{_id:'$sex',num:{$avg:'$age'}}})

         $max  求最大值
         
         e.g.  求每组年龄的最大值
         db.class1.aggregate({$group:{_id:'$sex',max:{$max:'$age'}}})

         $min  求最小值

         e.g.  求每组年龄的最小值
         db.class1.aggregate({$group:{_id:'$sex',min:{$min:'$age'}}})

    $project 
    用于修改文档的显示效果

    e.g. 
    db.class1.aggregate({$project:{_id:0,sex:0}})

    e.g.   指定显示域名
    db.class1.aggregate({$project:{_id:0,Name:'$name',Age:'$age'}})


    $match  过滤数据

    e.g.  过滤年龄大于16的
    db.class1.aggregate({$match:{age:{$gt:16}}})

    作业 : 熟练mongodb增删改查操作
            熟练 索引操作

        
    第四天

    复习:

    1. 数据的修改 
    update(query,update,upsert,multi)

    修改器 : $set   $unset  $rename  $setOnInsert
              $inc   $mul  $max  $min 
          $push  $pushAll  $pull  $pullAll 
          $each  $position   $sort  $addToSet
          $pop

    时间类型 : new Date()   ISODate()  Date()
                valueOf()

    null : 作为一个域的值,或者表示一个域不存在

    内部文档 :通过 . 获取内部文档某个域的值

    索引操作: ensureIndex({},{})
               dropIndex()  dropIndexes()
               getIndexes()

    聚合操作

    aggregate()

    聚合操作
    $group   $project   $match
    $sum
    $avg
    $max
    $min
    **********************************************

    聚合操作

    $limit  显示前几条文档

    e.g.  获取数据的前两个文档
    db.class1.aggregate({$limit:2})

    $skip  跳过几条文档

    e.g.  跳过前两条文档显示后面内容  
    db.class1.aggregate({$skip:2})

    $sort  排序

    e.g.  按年龄升序排序
     db.class1.aggregate({$sort:{age:1}})

    聚合管道 : 将前一个聚合操作得到的结果,给后一个聚合操作继续使用

    db.collection.aggregate([聚合1,聚合2....])


    e.g. $match ---> $project  ---> $sort
    db.class1.aggregate([{$match:{sex:'m'}},{$project:{_id:0}},{$sort:{age:1}}])

    e.g.   $group  ---> $match
    db.class1.aggregate([{$group:{_id:'$name',num:{$sum:1}}},{$match:{num:{$gt:1}}}])

    练习:
    增加分数域  score:{chinese:88,math:76,english:76}

    1.学生按照性别分组,统计每组人数
    aggregate({$group:{_id:'$sex',num:{$sum:1}}})

    2. 统计每名男生的语文分数
    aggregate([{$match:{sex:'m'}},{$project:{_id:0,name:1,'score.chinese':1}}])

    3. 将所有女生按照英语成绩降序排序
    aggregate([{$match:{sex:'w'}},{$sort:{'score.englisth':-1}}])


    固定集合

    mongodb中可以创建大小固定的集合,称之为固定集合

    特点 : 插入速度快,顺序查找速度快
            能够淘汰早期数据
              可以控制集合大小

    使用 : 临时缓存
            日志处理

    db.createCollection(collection,{capped:true,size:10000,max:1000})

    capped:true    表示创建固定集合
    size : 表示集合的大小  bytes    4.0最小 4096
    max : 表示最多存放多少文档

    e.g. 
    db.createCollection('log',{capped:true,size:10,max:3})


    文件存储

    文件存储到数据库方式

    1. 存储路径
       将文件在本地的路径以字符串形式存储到数据库

       优点 : 节省数据库空间
       缺点 : 当数据库或者文件位置发生变化时文件丢失。

    2. 存储文件本身
       以二进制方式将文件存储到数据库
       
       优点:数据库和文件绑定存在
       缺点 : 占用空间大,结构化麻烦

    mongodb存储二进制文件

    * GridFS方法存储大文件  >16M为大文件
    * 将文件转化为二进制,进行插入  Binary data

    GridFS方案解释

    1. 在mongodb中一个数据库创建两个集合共同完成对文件的存储
    2. fs.files 用来存储文件的相关信息,为每一个文件创建一个文档,存储文件名、文件类型等信息
    3. fs.chunks 用来分块存储文件的实际内容

    如何存储
    mongofiles  -d  dbname   put   file
                    数据库       要存储的文件

    * 如果数据库不存在自动创建

    fs.files
    { "_id" : ObjectId("5b569b8969d72e103282f608"), "chunkSize" : 261120, "uploadDate" : ISODate("2018-07-24T03:22:54.259Z"), "length" : 247759369, "md5" : "a94853f4f64b3e87bf98aea770855615", "filename" : "abc.mp4" }

    fs.chunks
    { "_id" : ObjectId("5b569b8969d72e103282f61d"), "files_id" : ObjectId("5b569b8969d72e103282f608"), "n" : 20, "data" : BinData(0,"7Pa7M7M9nZt2bezsz272vbdm/7fhu672fwAAbZKbmR2S7Ndv/.....")}

    * 对于同一个文件 fs.files中的_id值等于 fs.chunks中的files_id值

    文件提取方法

    mongofiles  -d  dbname  get  file

    Grid的优缺点
    优点 : 存储方便,提供较好的命令支持
    缺点 : 读写效率低

    游标

    通过一定的操作获取返回结果的对象

    var  cursor = db.class1.find()
    cursor.hasNext()  判断是否有next
    cursor.next()  获取下一条数据

    python操作mongodb 

    pymongo模块   第三方模块

    安装 
    sudo  pip3  install  pymongo

    操作步骤
    1. 创建mongodb数据库连接对象

    conn = pymongo.MongoClient('localhost',27017)

    2. 得到数据库对象

    db = conn.stu 

    3. 获取集合对象

    myset = db.class1

    4. 增删改查,索引 ,聚合

    调用各种myset的属性函数

    5. 关闭数据库连接
    conn.close()

    插入操作

    insert()
    insert_many()     insert_one()
    save()

    查找操作

    cursor = find()
    返回一个结果游标

    * 在pymongo中使用操作符的方法与mongo shell中相同,只需要转变为字符串格式加上引号即可

    cursor 的属性函数

    next()
    limit()
    skip()
    sort([('name',1),('age',-1)])
    count()

    * 使用了next或者for取游标后就不能使用limit sort操作了

    find_one()
    返回一个字典

    更新操作

    update(query,updata,upsert=False,multi=False)
    update_many()
    update_one()

    删除操作
    remove(query,multi = True)

    multi默认为True表示删除所有筛选内容
    如果设置为False则表示删除一条

    复合功能函数
    find_one_and_delete()


    索引操作
    ensure_index()   创建索引
    list_indexes()   查看索引
    drop_index()   删除索引
    drop_indexes()  删除所有索引

    聚合操作
    aggregate([])
    参数写法和mongo shell中聚合相同
    返回值 : 返回一个迭代游标 同find()


    GridFS  程序提取

    import gridfs 

    gridfs.GridFS(db)


    插入二进制格式数据

    import bson.binary 

     

     

     

    展开全文
  • mysql数据库基本操作

    2016-06-07 14:56:55
    mysql数据库基本操作

    显示所有数据库      Show databases

    创建数据库   Create database 数据库

    删除数据库   Drop database 数据库名

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,884
精华内容 23,553
关键字:

数据库基本操作