mongodb

发布时间:2022-12-04 MONGODB 数据库

目录

getting started

结构

文档

Collection

动态schema

CollectionName

subcollection

DataBases

MongoShell

插入

查询

更新

delete

数据类型

null

boolean

Number (64bit float)

NumberInt

NumberLong

String

Date (时间戳)

js得正则表达式

array

嵌入得document

objectId

二进制数据

代码类型

MongoShell

help

updateOne

CRUD

find

$gte $lte $lt $ne

$in $nin $or

特定的类别

null

regular expression

queryArray

E:\mongo\bin

getting started

结构

document

        每个document都有唯一得"_id"

collection

是一个分布式得数据库,可以使用mongo shell处理。

文档

大小写敏感、类型敏感。

如下不同
{"count" : 5}
{"count" : "5"}

Collection

动态schema

但是依然需要一些collection,包括不同得混在一起增加复杂度,包括data得局部性,以及部分得唯一索引得效率等。

CollectionName

不可以用空串

不可以用\0得字符

不建议使用system开头得

不应当使用 $符号

subcollection

虽然子collection与父亲之间可能没啥关系。但是是一个良好得组织数据得方式。

DataBases

不可以用空串

不允许包含特殊字符 /, \, ., ", *, <, >, :, |, ?, $

大小写敏感

最大64字节。

保留得 如admin local config

        admin 鉴权和眼圈

        local 保存再副本过程中使用得

        config 一些设置信息,如每个shard

MongoShell

#db
db
#切换db
use test
#某个collection
db.mine.find()
# db
show dbs
# collections
show collections


插入

#插入
movie = {"title" : "Star Wars: Episode IV - A New Hope",
... "director" : "George Lucas",
... "year" : 1977}

db.movies.insertOne(movie)

db.movies.find().pretty();

#drop
db.movies.drop()
#返回值
true

#insert Many
 db.movies.insertMany([{"title" : "Ghostbusters"},
...                        {"title" : "E.T."},
...                        {"title" : "Blade Runner"}]);


db.movies.find()

#insertMany 默认按照顺序插入
db.movies.drop()
db.movies.insertMany([ {"_id" : 0, "title" : "Top Gun"},  {"_id" : 1, "title" : "Back to the Future"},    {"_id" : 1, "title" : "Gremlins"}, {"_id" : 2, "title" : "Aliens"}]) 

#只插入了两个
db.movies.find()                                                                                                      { "_id" : 0, "title" : "Top Gun" }                                                                                      { "_id" : 1, "title" : "Back to the Future" } 


#非顺序插入就会不断得插入
db.movies.drop()
db.movies.insertMany([ {"_id" : 0, "title" : "Top Gun"},  {"_id" : 1, "title" : "Back to the Future"},    {"_id" : 1, "title" : "Gremlins"}, {"_id" : 2, "title" : "Aliens"}], {"ordered":false}) 

insert 不能接受超过48MB得数据,客户端会自动分割成48MB 

多插入时,默认按照顺序插入,插入到有问题得停止

可以通过指定 {“ordered”:false} 来乱序插入,那么插入得时候由mongo自行决定顺序,且出错以后,还会试图插入剩余的。

插入时会校验大小,单个文档不能超过16M,可以使用Object.bsonsize(doc)来判断大小。

查询

#查看一个
db.movies.findOne()
#find
db.movies.find({"year":1977})

更新

#更新
db.movies.updateOne({title : "Star Wars: Episode IV - A New Hope"}, {$set : {reviews: []}})

#查询
db.movies.find().pretty()

{                                                                                                                               "_id" : ObjectId("637cf0e28666b0a3bebc2f3f"),                                                                           "title" : "Star Wars: Episode IV - A New Hope",                                                                         "director" : "George Lucas",                                                                                            "year" : 1977,                                                                                                          "reviews" : [ ]                                                                                                 }  


#replace 最好用_id 替换
db.users.drop()
userjoe={
    "_id" : ObjectId("4b2b9f67a1f631733d917a7a"),
    "name" : "joe",
    "friends" : 32,
    "enemies" : 2
}
db.users.insert(userjoe)


joe={                                                                                                                               "_id" : ObjectId("4b2b9f67a1f631733d917a7a"),                                                                           "relationships" : {                                                                                                             "friends" : 32,                                                                                                         "enemies" : 2                                                                                                   },                                                                                                                      "username" : "joe"                                                                                              }

db.users.replaceOne({"name":"joe"},joe)

db.users.find().pretty()

 updateOne

updateMany

$inc {条件},{$inc{“属性”:1}}

$set  {条件},{$set{“属性”:设置值}}

$unset  {条件},{$unset{“属性”:1}}

#db.pages $inc
db.pages.drop()
page1={
    "_id" : ObjectId("4b253b067525f35f94b60a31"),
    "url" : "www.example.com",
    "pageviews" : 52
}

db.pages.insert(page1)
db.pages.find().pretty() 

db.pages.updateOne({"url" : "www.example.com"}, {"$inc" : {"pageviews" : 1}})
#变成53了
db.pages.find().pretty()

#$set 新增
db.pages.updateOne({"_id":ObjectId("4b253b067525f35f94b60a31")},{"$set" : {"protocol" : "http"}})

db.pages.find().pretty()

#set 变更
db.pages.updateOne({"_id":ObjectId("4b253b067525f35f94b60a31")},{"$set" : {"protocol" : "ftp"}})
db.pages.find().pretty()


#set 变更类型
db.pages.updateOne({"_id":ObjectId("4b253b067525f35f94b60a31")},{"$set" : {"protocol" : ["ftp", "http"]}})
db.pages.find().pretty()



#unset 
db.pages.updateOne({"_id":ObjectId("4b253b067525f35f94b60a31")}, {"$unset": {"protocol":1}})
#恢复了
db.pages.find().pretty()

        update* 必须使用$set $push $incr等字段防止覆盖

        array得

                $push 和$pull, pull会去除所有该名字得

                $addToSet 添加所有得到set中

                array可以按照索引$set 某一个值,但是要加上 双引号,

                也可以设置所有得,对应得索引改为$[]  db.pages.updateOne({pageviews:53},{$set:{"buttons.$[].position":4}})
                

db.pages.find()
{ "_id" : ObjectId("4b253b067525f35f94b60a31"), "url" : "www.example.com", "pageviews" : 53 }

 db.pages.updateOne({pageviews:53},{$push :{"user":"ouyangshaogong"}})
 { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

 db.pages.find().pretty()
 {
         "_id" : ObjectId("4b253b067525f35f94b60a31"),
         "url" : "www.example.com",
         "pageviews" : 53,
         "user" : [
                 "ouyangshaogong"
         ]
 }

db.pages.updateOne({pageviews:53},{$push :{"user":"xunfang"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
db.pages.updateOne({pageviews:53},{$push :{"user":"xunfang"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

数组得更新 


 db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "ouyangshaogong",
                "xunfang",
                "xunfang"
        ]
}
#pull会pull掉所有得对应得元素,有两个“xunfang” 就会都消失
 db.pages.updateOne({pageviews:53},{$pull :{"user":"xunfang"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "ouyangshaogong"
        ]
}

#可以push多个元素
db.pages.updateOne({pageview:53}, {$push:{user:{$each:["haha","xixi"]}}})
db.pages.find().pretty()

{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "ouyangshaogong",
                "haha",
                "xixi"
        ]
}
#你甚至可以限制array得大小 $slice 负值从后往前, 正值从前往后
db.pages.updateOne({pageviews:53}, {$push:{user:{$each:["haha","xixi"], $slice:4}}})

db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "ouyangshaogong",
                "haha",
                "xixi",
                "haha"
        ]
}

#上一个得后两个,加上新得两个,xixi haha haha xixi
db.pages.updateOne({pageviews:53}, {$push:{user:{$each:["haha","xixi"], $slice:-4}}})
db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "xixi",
                "haha",
                "haha",
                "xixi"
        ]
}

#你甚至可以sort决定添加顺序,然后再去保留,但是必须加上$each
db.pages.updateOne({pageviews:53}, {$push:{user:{$each:["haha","xixi","dare","abc"], $slice:-5, $sort:{user:-1}}}})
#可以使用$addToSet 来去重。

db.pages.updateOne({pageviews:53}, {$addToSet:{user:{$each:["haha","xixi"]}}})
db.pages.find().pretty()
 db.pages.updateOne({pageviews:53},{$addToSet:{user:"xixi"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 }
> db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "xixi",
                "haha",
                "haha",
                "xixi"
        ]
}

#数组得按照索引操作,先添加个对象类型
db.pages.updateOne({pageviews:53},{$addToSet:{buttons:{$each:[{"name":"click",position:5 },{"name":"click",position:6 },{"name":"submit",position:7 }]}}})

db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "xixi",
                "haha",
                "haha",
                "xixi"
        ],
        "buttons" : [
                {
                        "name" : "click",
                        "position" : 5
                },
                {
                        "name" : "click",
                        "position" : 6
                },
                {
                        "name" : "submit",
                        "position" : 7
                }
        ]
}
#按照索引更新某一个,注意这种方式必须加双引号 更新第二个
db.pages.updateOne({pageviews:53},{$set:{"buttons.1.name":"cancel"}})
 db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "xixi",
                "haha",
                "haha",
                "xixi"
        ],
        "buttons" : [
                {
                        "name" : "click",
                        "position" : 5
                },
                {
                        "name" : "cancel",
                        "position" : 6
                },
                {
                        "name" : "submit",
                        "position" : 7
                }
        ]
}
#更新所有得 buutons得position为4
 db.pages.updateOne({pageviews:53},{$set:{"buttons.$[].position":4}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "xixi",
                "haha",
                "haha",
                "xixi"
        ],
        "buttons" : [
                {
                        "name" : "click",
                        "position" : 4
                },
                {
                        "name" : "cancel",
                        "position" : 4
                },
                {
                        "name" : "submit",
                        "position" : 4
                }
        ]
}

#过滤更新(先设置一下)
db.pages.updateOne({pageviews:53},{$set:{"buttons.2.position":6}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

#设置大于4得变成5(刚刚得索引为2得)
 db.pages.updateOne({pageviews:53}, {$set:{"buttons.$[ele].position":5}},{arrayFilters:[{"ele.position":{$gt:4}}]})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "xixi",
                "haha",
                "haha",
                "xixi"
        ],
        "buttons" : [
                {
                        "name" : "click",
                        "position" : 4
                },
                {
                        "name" : "cancel",
                        "position" : 4
                },
                {
                        "name" : "submit",
                        "position" : 5
                }
        ]
}

upsert 以及 setOnInsert 后者只有插入时更新。类似于putDocumentIfAbsent

db.users.updateOne({"rep" : 25}, {"$inc" : {"rep" : 3}}, {"upsert" : true})

 db.users.find()
{ "_id" : ObjectId("638380269e9d33d7668a0bce"), "rep" : 28 }


#没有时才去更新
db.users.updateOne({}, {"$setOnInsert" : {"createdAt" : new Date()}}, {"upsert" : true})

 db.users.updateOne({"jobId":1}, {"$setOnInsert" : {"createdAt" : new Date()}}, {"upsert" : true})
{
        "acknowledged" : true,
        "matchedCount" : 0,
        "modifiedCount" : 0,
        "upsertedId" : ObjectId("638382259e9d33d7668a0cc5")
}
> db.users.find()
{ "_id" : ObjectId("638381329e9d33d7668a0c5b"), "createdAt" : ISODate("2022-11-27T15:24:34.984Z") }
{ "_id" : ObjectId("638382259e9d33d7668a0cc5"), "jobId" : 1, "createdAt" : ISODate("2022-11-27T15:28:37.593Z") }

replaceOne

        最好使用_id 去替换

updateOne

updateMany

delete

db.movies.deleteOne({title : "Star Wars: Episode IV - A New Hope"})


#deleteMany
db.movies.drop()
db.movies.insertMany([ {"_id" : 0, "title" : "Top Gun"},  {"_id" : 1, "title" : "Back to the Future"},    {"_id" : 2, "title" : "Aliens"}, {"_id" : 3, "title" : "Aliens"}]) 

db.movies.deleteMany({"title":"Aliens"})
#只剩下两个
db.movies.find()

数据类型

脱胎于json

null

boolean

Number (64bit float)

NumberInt

NumberLong

String

Date (时间戳)

        newDate() 具体见15章

js得正则表达式

array

        可以包含不同得类型

        可以针对其中得值做索引

        

嵌入得document

objectId

        mongodb 一定需要又一个“_id”,每个collection必须唯一。

        默认得“_id”类型 默认12字节。

        前32位为秒级时间戳

        接下来40位随机值,包括24位得机器,16位得pid

        最后三字节位counter

二进制数据

代码类型

MongoShell

help

updateOne

db.movies.updateOne
function (filter, update, options) {
    var opts = Object.extend({}, options || {});

    // Check if first key in update statement contains a $
    var keys = Object.keys(update);
    if (keys.length == 0) {
        throw new Error("the update operation document must contain at
        least one atomic operator");
    }
    ...

用shell 跑脚本

mongo script1.js script2.js script3.js
MongoDB shell version: 4.2.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.2.1

loading file: script1.js
I am script1.js
loading file: script2.js
I am script2.js
loading file: script3.js
I am script3.js
...
CRUD find

查询条件与返回值 1为include 0为exclude

db.task.find({"attr1": "a", "attr2":"b"},{"returnAttr1":1, "excludeAttr2":0})


 db.pages.find().pretty()
{
        "_id" : ObjectId("4b253b067525f35f94b60a31"),
        "url" : "www.example.com",
        "pageviews" : 53,
        "user" : [
                "xixi",
                "haha",
                "haha",
                "xixi"
        ],
        "buttons" : [
                {
                        "name" : "click",
                        "position" : 4
                },
                {
                        "name" : "cancel",
                        "position" : 4
                },
                {
                        "name" : "submit",
                        "position" : 5
                }
        ]
}
> db.pages.find({pageviews:53},{"url":1})
{ "_id" : ObjectId("4b253b067525f35f94b60a31"), "url" : "www.example.com" }

$gte $lte $lt $ne

$in $nin $or

        这几个都接数组,但是or后面接json数组,但是in 和nin是在条件里面。

$not not是不满足的条件,在条件外面例如

db.users.find({"id_num" : {"$mod" : [5, 1]}})

db.users.find({"id_num" : {"$not" : {"$mod" : [5, 1]}}})

特定的类别

null

null查询的时候可以指定为null的,也会查不存在的。如果需要区分,可以使用exists

db.c.find()
{ "_id" : ObjectId("4ba0f0dfd22aa494fd523621"), "y" : null }
{ "_id" : ObjectId("4ba0f0dfd22aa494fd523622"), "y" : 1 }
{ "_id" : ObjectId("4ba0f148d22aa494fd523623"), "y" : 2 }

 db.c.find({"y" : null})
{ "_id" : ObjectId("4ba0f0dfd22aa494fd523621"), "y" : null }

db.c.find({"z" : null})
{ "_id" : ObjectId("4ba0f0dfd22aa494fd523621"), "y" : null }
{ "_id" : ObjectId("4ba0f0dfd22aa494fd523622"), "y" : 1 }
{ "_id" : ObjectId("4ba0f148d22aa494fd523623"), "y" : 2 }

#区分null和exists
db.c.find({"z" : {"$eq" : null, "$exists" : true}})

regular expression

 db.users.find( {"name" : {"$regex" : /joe/i } })

queryArray

db.food.insertOne({"fruit" : ["apple", "banana", "peach"]})
#查单个
db.food.find({"fruit" : "banana"}).pretty()
{
        "_id" : ObjectId("638387a6d7de9d4b1b22e3ac"),
        "fruit" : [
                "apple",
                "banana",
                "peach"
        ]
}
#multi插入
db.food.insertMany([{"_id" : 1, "fruit" : ["apple", "banana", "peach"]},{"_id" : 2, "fruit" : ["apple", "kumquat", "orange"]},{"_id" : 3, "fruit" : ["cherry", "banana", "apple"]}])
cherry", "banana", "apple"]}])
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }

db.food.find().pretty()
{
        "_id" : ObjectId("638387a6d7de9d4b1b22e3ac"),
        "fruit" : [
                "apple",
                "banana",
                "peach"
        ]
}
{ "_id" : 1, "fruit" : [ "apple", "banana", "peach" ] }
{ "_id" : 2, "fruit" : [ "apple", "kumquat", "orange" ] }
{ "_id" : 3, "fruit" : [ "cherry", "banana", "apple" ] }

#$all 所有的都匹配的才输出
db.food.find({fruit : {$all : ["apple", "banana"]}})
{ "_id" : ObjectId("638387a6d7de9d4b1b22e3ac"), "fruit" : [ "apple", "banana", "peach" ] }
{ "_id" : 1, "fruit" : [ "apple", "banana", "peach" ] }
{ "_id" : 3, "fruit" : [ "cherry", "banana", "apple" ] }

where可以接一些复杂的函数,但是不建议用

 db.foo.find({"$where" : function () {
... for (var current in this) {
...     for (var other in this) {
...         if (current != other && this[current] == this[other]) {
...             return true;
...         }
...     }
... }
... return false;
... }});

cursor

cursor有一定的资源消耗,但是默认会10分钟释放。

limit skip sort

db.stock.find({"desc" : "mp3"}).limit(50).skip(50).sort({"price" : -1})
Indexes

注意,mongo的索引为b树而非b+树,设计理念不同。

for (i=0; i<1000000; i++) {
db.users.insertOne(
{
"i" : i,
"username" : "user"+i,
"age" : Math.floor(Math.random()*120),
"created" : new Date()
}
);
}

执行计划

db.users.find({"username": "user101"}).explain("executionStats")

可以看到执行计划

创建索引

db.users.createIndex({"username":1})

db.users.find({"username": "user101"}).explain("executionStats")

 覆盖索引

#直接排序
db.users.find().sort({"age" : 1, "username" : 1})
#结果
Error: error: {                                                                                                                                                                                                             "ok" : 0,                                                                                                                                                                                                           "errmsg" : "Executor error during find command :: caused by :: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting.",                                                             "code" : 292,                                                                                                                                                                                                       "codeName" : "QueryExceededMemoryLimitNoDiskUseAllowed"                                                                                                                                                     } 

#加索引后排序
db.users.createIndex({"age":1, "username":1})

#秒回来
db.users.find().sort({"age" : 1, "username" : 1})

#注意顺序,下面这个就跑不了
db.users.find().sort({"username" : 1, "age" : 1})

#下面这个也可以 
db.users.find({"age" : 21}).sort({"username" : -1})

mongo怎么使用索引:

去执行一个试验计划,多开几个线程都执行一遍,看哪个先执行完。

更多相关推荐


MySQL update替换字段部分内容

发布时间:2019-01-14 数据库
 需求:数据库info表中name字段,值为Beijingcar、Beijingpeople、Beijinghouse等;将该字段以Beijing开头更新成BJ开头。 解决:可以使用MySQL内置的REPLACE函数,具体用法如下:UPDATE表名SET字段名=REPLACE(object,'search','replace');updateinfosetname=REPLACE(name,'Be...

chkconfig命令及的使用 与linux的七个运行级别

发布时间:2012-12-10 操作系统 数据库
为什么80%的码农都做不了架构师?&gt;&gt;&gt;  linuxchkconfig命令及的七个运行级别  chkconfig:     chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。  语法: 1.chkconfig--list [name] 2.chkconfig--add nam...

云计算中的地域和可用区概念

发布时间:2018-12-17 大数据 数据库
 摘要: 简单来说,可以将地域理解为不同城市的机房,将可用区理解为同一个城市的不同机房上一篇说数加的文章,很多同学向我吐槽说看不懂,里面有太多云计算的产品和概念,对于没有接触使用云计算的同学来说,确实有点像天书一样,满眼都是陌生的名词。所以接下来准备安利一下云计算的一些基本概念,看看对大家有没有帮助。 亚马逊AWS是公共云计算的先驱,一些云计算中重要的产品设计和基础概念可以说都是亚马逊引入的。这其...

Redis安装及使用(Windows&&Linux)

发布时间:2022-11-22 缓存 REDIS # REDIS 数据库
Windows1.下载下载地址:Releases·tporadowski/redis·GitHub。目前最新5.0.142.解压3.先后打开redis-server.exe和redis-cli.exe两个文件(一定要按顺序) 4.使用正常使用在redis-cli.exe里面输入各种命令(使用期间redis-server不能关闭),例如ping LinuxLinux自行下载,本文使用的是虚拟机的方式...

Python爬虫爬取美剧网站

发布时间:2019-01-15 爬虫 PYTHON 数据库
一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间。之前是能在视频网站上面在线看的,可是自从广电总局的限制令之后,进口的美剧英剧等貌似就不在像以前一样同步更新了。 但是,作为一个宅diao的我又怎甘心没剧追呢,所以网上随便查了一下就找到一个能用迅雷下载的美剧下载网站【天天美剧】,各种资源随便下载,最近迷上的BBC的高清纪录片,大自然美得不要不要的。​​虽说找到了资源网站可以下载了,但...

linux wget 命令用法详解(附实例说明)

发布时间:2018-01-25 PHP 操作系统 数据库
来源:http://www.jb51.net/LINUXjishu/86326.htmlLinuxwget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器。这样既浪费时间又浪费精力,那不没办法...

关于权限管理

发布时间:2010-01-16 TREE 数据库
 昨天,我隔壁的一批人讨论了一天的权限管理问题,直道我头痛的离去。我把他们讨论的东西整理如下:1,权限管理的作用域是被赋予权限的人的集合。2,人有三个纬度,个人,角色和部门3,个人权限和角色权限必须在部门权限存在的前提下。3.1,角色纬度受部门纬度限制即R(G(a))可以,但G(R(a))错误:G是给a赋予部门权限,R是给a赋予角色权限。3.2,个人纬度受部门纬度限制即P(G(a)) 可以,但G(...

CentOS下编译安装MySQL 5.6.21

发布时间:2016-07-19 开发工具 运维 数据库
一、编译安装MySQL前的准备工作安装编译源码所需的工具和库yuminstallgccgcc-c++ncurses-develperl安装cmake:http://www.cnblogs.com/jiu0821/p/5680830.htmlwgethttp://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gztar-xzvfcmake-2.8.10.2....

centos7下mysql5.6.21安装过程

发布时间:2014-10-25 服务器 数据库
因为要研究openvpn+mysql+pam所以,从官网下载了mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz安装包,反复安装了几次终于成功,经历曲折啊!! MySQL安装包存放位置:/usr/local/srcMySQL编译安装位置:/usr/local/mysqlyuminstallmakeapr*autoconfautomakecurlcurl-develg...

centos6.3 X64 安装zabbix2.4.1

发布时间:2014-10-16 运维 PHP 数据库
此文档网上搜集了改了下。加了点内容吧。作者莫怪哦。呵呵。首先确认下zabbix需要很多PHP插件在已有的LAMP或者LNMP的基础上安装zabbix,安装一些依赖包:yum-yinstallmysql-devellibcurl-develnet-snmp-devel 添加用户:groupaddzabbixuseraddzabbix-gzabbix创建数据库,添加授权账号createdatabase...

mysql中date_format函数

发布时间:2018-01-24 数据库
%a缩写星期名%b缩写月名%c月,数值%D带有英文前缀的月中的天%d月的天,数值(00-31)%e月的天,数值(0-31)%f微秒%H小时(00-23)%h小时(01-12)%I小时(01-12)%i分钟,数值(00-59)%j年的天(001-366)%k小时(0-23)%l小时(1-12)%M月名%m月,数值(00-12)%pAM或PM%r时间,12-小时(hh:mm:ssAM或PM)%S秒(0...

mysql查询语句练习题

发布时间:2015-06-15 数据库
为什么80%的码农都做不了架构师?&gt;&gt;&gt;  Sutdent表的定义字段名字段描述数据类型主键外键非空唯一自增Id学号INT(10)是否是是是Name姓名VARCHAR(20)否否是否否Sex性别VARCHAR(4)否否否否否Birth出生年份YEAR否否否否否Department院系VARCHAR(20)否否是否否Address家庭住址VARCHAR(50)否否否否否 Score...

mysql 存储过程 demo

发布时间:2016-10-27 数据库
--查看存储过程SHOWPROCEDURESTATUS;--显示pro存储过程的详细信息SHOWCREATEPROCEDUREpro;--删除pro存储过程DROPPROCEDUREIFEXISTSpro;--创建简单的存储过程DELIMITER//DROPPROCEDUREIFEXISTSpro//CREATEPROCEDUREpro()BEGINSELECT1;END//DELIMITER;-...

mysql ab复制 abb

发布时间:2012-12-02 开发工具 数据库
 在三台主机上安装mysql配置主服务器mastervim/etc/my.cnf server_id=1log-bin=binloglog-bin-index=binlog.index/etc/init.d/mysqldrestart 创建slave用户:mysql&gt;GRANTreplicationslaveON*.*TO'kang1'@'192.168.1.84'identifiedby'...

navicat如何连接MySQL,报错“2003 - Can‘t connect to MySQL server on ‘localhost‘ (10061 “Unknown error“)”处理

发布时间:2022-11-22 MYSQL 数据库
1.打开Navicat,点击左上角的【连接】按钮。2.新建连接,大家要注意了,此处新建的是连接,不是新建的数据库,我看到好多人都是把连接名当成库名写上了,这是不对的。可以建多个连接的意思是比如我们可以连接本地的mysql,也可以连接开发环境服务器的mysql,或者测试环境、生产环境等不同的Mysql.还有很多小伙伴,MySQL数据库的密码忘记了,我们可以通过项目中的application.yml找...

MySQL数据库:SQL语句中不可省去的引号

发布时间:2013-09-04 PYTHON 数据库
2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt;有一次在代码中发现了一个BUG,在排查过程中,差点晕翻;作一个DBA也碰到这种低级错误;大为自嘲。其实这个问题在官方手册里就写得很明白;(可见官方文档的重要性)mysql&gt; create table h1(id int ,col1 char(1));QueryOK, 0 rowsaffected(0.00 sec)mys...

mysql 存储过程入门

发布时间:2017-05-19 数据库
这篇文章主要介绍了MySql存储过程与函数详解,内容很详细,需要的朋友可以参考下 存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。一、存储过程1.1、基本语法CREATEPROCEDUR...

asp.net+sqlserver汽车4s店销售网站系统c#项目

发布时间:2022-11-16 数据库
数据项管理员信息表{用户编号,用户名称,用户密码}新闻信息表{编号,标题,内容,添加时间}汽车信息表{编号,汽车名称,汽车价格,汽车图片,汽车描述,添加时间,级别,变速箱,发动机}汽车配件信息表{编号,配件名称,配件价格,配件图片,配件描述,添加时间,类别编号}信息反馈信息表{编号,姓名,留言内容,电子邮件,联系电话,QQ,回复信息}会员信息表{编号,账号,性别,密码,电子邮件,联系电话,地址,备...

类相关

发布时间:2019-07-12 数据库
importpymysqlimportredisclassSyy:country='China'def__init__(self):self.money=5000defchaogu(self):self.money+=50000print('炒股!',self.money)#节省代码classXs(Syy):defchaogu(self):super().chaogu()print('唱歌')sd...

AE中确定工作空间类型

发布时间:2019-07-29 数据库
if(pWks.Type==esriWorkspaceType.esriRemoteDatabaseWorkspace){采用%,主要是对SDE数据库}else{用*针对Access数据库}转载于:https://www.cnblogs.com/dengshiwei/p/4258642.html...

转载:PostgreSQL SQL的性能提升

发布时间:2014-05-28 数据库
原文:http://blog.csdn.net/hantiannan/article/details/4522172PostgreSQL提供了一些帮助提升性能的功能。主要有一些几个方面。1.使用EXPLAIN  EXPLAIN命令可以查看执行计划,在前面的blog中已经介绍过。这个方法是我们最主要的调试工具。 2.及时更新执行计划中使用的统计信息  由于统计 信息不是每次操作数据 库 都 进 行更...

最常用的数据库字段类型还不知道?

发布时间:2020-06-23 ORACLE SQL 数据库
常用的数据库字段类型如下:字段类型 中文说明 限制条件 其它说明CHAR 固定长度字符串 最大长度2000bytes VARCHAR2 可变长度的字符串 最大长度4000bytes 可做索引的最大长度749NCHAR 根据字符集而定的固定长度字符串 最大长度2000bytes NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000bytes DA...

【OS】线程

发布时间:2022-11-04 JAVA 开发语言 操作系统 数据库
线程的概念和特点学前自问:什么是线程?为什么要引入线程?线程的引入在OS中引入进程的目的是为了使多个程序能并发执行,以提高资源利用率。在OS中引入线程是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。进程的局限性进程的属性1.进程是一个可拥有资源的独立单位。2.进程是一个可独立调度和分派的基本单位。进程的局限性各个进程的内存地址空间相互独立,只能通过请求操作系统内核的帮助来完成进...

浅谈线程池(上):线程池的作用及CLR线程池

发布时间:2009-07-22 操作系统 数据库
线程池是一个重要的概念。不过我发现,关于这个话题的讨论似乎还缺少了点什么。作为资料的补充,以及今后文章所需要的引用,我在这里再完整而又简单地谈一下有关线程池,还有.NET中各种线程池的基础。更详细的内容就不多作展开了,有机会我们再详细讨论这方面的细节。这次,还是一个“概述”性质的,希望可以说明白这方面问题的一些概念。线程池的作用其实“线程池”就是用来存放“线程”的对象池。在程序中,如果某个创建某种...

Elasticsearch之元数据(meta-fields)介绍

发布时间:2017-12-29 大数据 JSON 数据库
image.png1.什么是meta-fields在Elasticsearch下,一个文档除了有数据之外,它还包含了元数据(Metadata)。每创建一条数据时,都会对元数据进行写入等操作,当然有些元数据是在创建mapping的时候就会设置,它里面定义了每个添加的doc的处理方式。类似于数据库的表结构数据。2.有哪些meta-fieldsES中元数据大体分为五中类型:身份元数据、索引元数据、文档元...

Foundation 框架

发布时间:2018-08-20 移动开发 操作系统 数据库
前言框架是由许多类、方法、函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易。Foundation框架:为所有程序开发奠定基础的框架称为Foundation框架。Cocoa:是指Foundation、CoreData和AppKit(ApplicationKit)框架。用于MacOSX设备上的应用程序开发。CocoaTouch:是指Foundation、CoreData和UIKit框架。用于...

JPA学习笔记-JPQL

发布时间:2015-10-30 JAVA 数据库
JPQL语言,即JavaPersistenceQueryLanguage的简称。JPQL是一种和SQL非常类似的中间性和对象化查询语言,它最终会被编译成针对不同底层数据库的SQL查询,从而屏蔽不同数据库的差异。JPQL语言的语句可以是select语句、update语句或delete语句,它们都通过Query接口封装执行javax.persistence.QueryQuery接口封装了执行数据库查询...

29.Python修炼之路【33-查询之分组】2018.05.31

发布时间:2018-05-31 数据库 PYTHON
分组按照字段分组,表示此字段相同的数据会被放到一个组中分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中可以对分组后的数据进行统计,做聚合运算语法:select列1,列2,聚合...from表名groupby列1,列2,列3...查询男女生总数selectgenderas性别,count(*)fromstudentsgroupbygender;查询各城市人数selecthomet...

从 zabbix server 3.2 升级到 zabbix server 3.4.6

发布时间:2018-01-24 运维 PHP 数据库
一、停止zabbixServer[root@jrgc ~]# /etc/init.d/zabbix_server stopShutting down zabbix_server:                                [  OK  ][root@jrgc ~]# /etc/init.d/zabbix_agentd stopShutting down zabbix_agent...

[原创]带主体复制环境的数据库迁移

发布时间:2009-06-12 复制 数据库
源数据库:windows200332bit,oracle9.2.0.5目标数据库:windows200864bit,oracle10.2.0.3--在源数据库服务器上执行的操作--1.全库备份expsystem/systemfile=d:\db_backup\db.dmpfull=ydirect=ylog=d:\db_backup\db.log--shutdown数据库--修正另一主体复制站点的t...

Python 3.2安装第三方模块

发布时间:2016-01-15 数据库 操作系统 PYTHON
安装第三方模块:在Python中,安装第三方模块是通过pip包管理器完成的。如果你正在使用mac或者Linux,安装pip这步可以省掉。如果你正在使用windows,确保安装python过程中勾选了pip和Addpython.exetopath。在命令提示符下尝试运行pip命令。如果提示未找到命令,则可以重新运行python安装程序安装添加pip。注意,mac或者linux上可能python3.x...

Linux备份和回复mysql数据库

发布时间:2017-05-08 数据库
备份:mysqldump-uroot-p密码数据库名&gt;/home/data.bak    mysqldump-uroot-p密码数据库名.表名&gt;/home/data.bak恢复:mysql-uroot-p密码数据库名&lt;/home/data.bak注意:  1.恢复的时候需要先建立一个空的数据库  2.其实备份出来的文件data.bak里的内容就是一条条sql语句转载于:https...

Mysql数据库备份和还原常用的命令

发布时间:2017-11-09 数据库
Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下面为大家分享一下操作的常用的命令。一、备份命令1、备份MySQL数据库的命令&lt;!--CodehighlightingproducedbyActiproCodeHighlighter(freewa...

使用动态代理记录方法执行的时间

发布时间:2009-04-22 JAVA UI 数据库
在大型系统中,我们经常需要监视我们系统执行的性能状况,当出现性能问题时,我们要能够迅速地找到瓶颈在什么地方。在程序的层面上来说,就是看哪个方法执行所消耗的时间很长。使用动态代理可以非常方便的记录方法执行的时间,比如,下面的截图,就是ESBasic.Emit.Aop.Interceptors.MethodTimeInterceptor截获器记录的片段:&lt;!--&lt;br/&gt;&lt;br...

MyBatis

发布时间:2022-10-10 笔记 SQL SERVLET 数据库
目录MyBatis核心配置文件:自定义映射resultMapMyBatis添加功能获取自增的主键1.resultMap处理字段和属性的映射关2、多对一映射处理3、一对多映射处理方式二:分步式查询,同多对一association改为collection动态SQL批量添加:批量删除:MyBatis的逆向工程 分页插件MyBatis核心配置文件:&lt;?xmlversion="1.0"encoding...

MyBatis-Plus代码生成器

发布时间:2022-11-10 MYSQL JAVA 笔记 数据库
引入依赖&lt;!--velocity模板引擎,MybatisPlus代码生成器需要--&gt;&lt;dependency&gt;&lt;groupId&gt;org.apache.velocity&lt;/groupId&gt;&lt;artifactId&gt;velocity-engine-core&lt;/artifactId&gt;&lt;version&gt;2.0&lt;/vers...

MySQL登录报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)

发布时间:2022-11-23 JAVA MYSQL 数据库 出错啦
问题描述:在MySQL登录时出现Accessdeniedforuser'root'@'localhost'(usingpassword:YES)拒绝访问。问题分析:一、出现accessdenied的原因有如下可能:1)mysql的服务器停止:  若MySQL已经没有启动,重启MySQL服务器:systemctlrestartmysqld2)用户的端口号或者IP导致:  若用户的端口号与IP(330...

什么是MySQL数据库?应用环境有哪些?

发布时间:2022-11-03 MYSQL 服务器 数据库
  MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品  MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一  MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓...

shiro+Thymeleaf整合教程

发布时间:2018-07-09 JAVA WEB.XML 数据库
1.web.xml&lt;?xmlversion="1.0"encoding="UTF-8"?&gt;&lt;web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/...

给老师的建议

发布时间:2019-06-20 大数据 JAVA 数据库
  经过大二一年的学习我举得老师的教学方法很好:让学生自学,我当时也是看着老师的这种方法来的软件工程。到那时经过长时间的学习,我不禁发现了几个问题,老师的教学方法很好,但是就是感觉有点太快了,我们在大二上学习的javaweb等知识,我们完成了半年学会了JavaBean+servlet+javaweb的链接,但是web的编程还需要的很长的时间进行联系,我们一些的CSS还没有学懂。对此我建议老师可以在...

面试感悟:3年工作经验程序员应有的技能

发布时间:2016-03-14 JAVA 面试 数据库
前言因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的。简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少),其中成功...

Oracle函数translate()的用法

发布时间:2019-06-10 数据库
一、语法:TRANSLATE(string,from_str,to_str)二、目的返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE是REPLACE所提供的功能的一个超集。如果from_str比to_str长,那么在from_str中而不在to_str中的额外字符将从string中被删除,因为它们没有相应的替换字符。to_str不...

开发者需要知道的有关软件架构的五件事

发布时间:2018-01-21 人工智能 数据库
\本文要点:\\因为软件系统的分布式特点以及开发团队的分布性,了解软件架构的基础变得越来越重要。\\t在过度设计和毫无设计之间,我们应该把注意力放在对软件系统有重大影响的决策和权衡上。\\t好的架构师应该是团队的活跃分子,不仅能够进行代码协作,还能为团队提供技术指导。\\t软件架构中的沟通环节极具挑战性。C4模型对软件架构中的沟通环节进行了结构化,从一个上下文图表开始,再逐步深入到系统的各个技术层...

oracle 类型转换函数

发布时间:2011-08-25 数据库
数值型函数 abs:求绝对值函数,如:abs(−5)5 sqrt:求平方根函数,如:sqrt(2)1.41421356 power:求幂函数,如:power(2,3)8 cos:求余弦三角函数,如:cos(3.14159)−1 mod:求除法余数,如:mod(1600,300)100 ceil:求大于等于某数的最小整数,如:ceil(2.35)3 floor:求小于等于某数的最大整数,如:floo...

转:oracle日期函数集锦

发布时间:2010-09-13 数据库
转自:http://www.javaeye.com/topic/190221一、常用日期数据格式1.Y或YY或YYY年的最后一位,两位或三位SQL&gt;Selectto_char(sysdate,'Y')fromdual;TO_CHAR(SYSDATE,'Y')--------------------7SQL&gt;Selectto_char(sysdate,'YY')fromdual;TO_C...

第2章 深入分析java I/O的工作机制(上)

发布时间:2017-08-03 运维 操作系统 数据库
java的I/O操作类在包java.io下,大致分成4组:  所有文件的存储都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再存储这些字节到磁盘。在读取文件时,也是一个字节一个字节读取。  字节流可以用于任何类型的对象,包括二进制对象;而字符流只能处理字符或者字符串  字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二...

数据库中Schema(模式)概念的理解

发布时间:2017-08-31 DATABASE SCHEMA 数据库
在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念。实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。如果把database看作是一个仓库,仓库很多房间(sche...