默认监听端口号 27017/28017
进程名 mongod mongo
数据传输协议 TCP
数据库目录 /data/db
服务名 mongodb
liuys@ubuntu:~$ sudo wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
--2018-01-31 18:31:39-- https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
Resolving fastdl.mongodb.org (fastdl.mongodb.org)... 54.192.212.129, 54.192.212.164, 54.192.212.115, ...
Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|54.192.212.129|:443... failed: Connection refused.
Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|54.192.212.164|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 40282490 (38M) [application/x-gzip]
Saving to: ‘mongodb-linux-x86_64-3.0.6.tgz’
mongodb-linux-x86_64-3.0.6.tgz 100%[====================================================>] 38.42M 45.8KB/s in 9m 52s
2018-01-31 18:41:54 (66.5 KB/s) - ‘mongodb-linux-x86_64-3.0.6.tgz’ saved [40282490/40282490]
liuys@ubuntu:~$ sudo tar -xf /opt/mongodb-linux-x86_64-3.0.6.tgz
liuys@ubuntu:~$ sudo mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
** MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:
liuys@ubuntu:~$ sudo export PATH=/usr/local/mongodb/bin:$PATH
** 以下实例中我们将data目录创建于根目录下(/)。
** 注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。
liuys@ubuntu:~$ mkdir -p /data/db
liuys@ubuntu:~$ sudo cd /usr/local/mongodb/bin/
liuys@ubuntu:~$ sudo ./mongod
2018-02-01T10:45:49.238+0800 I STORAGE [initandlisten]
2018-02-01T10:45:49.238+0800 I STORAGE [initandlisten] ** WARNING: Readahead for /data/db is set to 4096KB
2018-02-01T10:45:49.238+0800 I STORAGE [initandlisten] ** We suggest setting it to 256KB (512 sectors) or less
2018-02-01T10:45:49.238+0800 I STORAGE [initandlisten] ** http://dochub.mongodb.org/core/readahead
2018-02-01T10:45:49.238+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal
2018-02-01T10:45:49.238+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed
2018-02-01T10:45:49.277+0800 I JOURNAL [durability] Durability thread started
。。。。。。。
liuys@ubuntu:~$ sudo ./mongo
MongoDB shell version: 3.0.6
connecting to: test
Welcome to the MongoDB shell.
。。。。。。。
** 如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。
** MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
** 当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
liuys@ubuntu:~$ sudo cd /usr/local/mongodb/bin
liuys@ubuntu:~$ sudo ./mongo MongoDB shell version: 3.0.6
connecting to: test Welcome to the MongoDB shell. ……
> 2+2
4
> 3+6
9
> db.runoob.insert({x:10})
WriteResult({ "nInserted" : 1 })
> db.runoob.find()
{ "_id" : ObjectId("5a7280e615a8f7a4cd7bf532"), "x" : 10 }
第一个命令将数字 10 插入到 runoob 集合的 x 字段中。
** 如果你想启用该功能,需要在启动的时候指定参数 --rest
liuys@ubuntu:~$ sudo ./mongod --dbpath=/data/db --rest
2018-02-01T10:54:06.272+0800 I CONTROL ** WARNING: --rest is specified without --httpinterface,
2018-02-01T10:54:06.272+0800 I CONTROL ** enabling http interface
2018-02-01T10:54:06.336+0800 I STORAGE [initandlisten]
*** MongoDB 的 Web 界面访问端口比服务的端口多1000。
所有的增加的命令
> mongodb://localhost
*** 通过 shell 连接 MongoDB 服务:
liuys@ubuntu:~$ sudo ./mongo
MongoDB shell version: 3.0.6
connecting to: test
...
*** 这时候你返回查看运行 ./mongod 命令的窗口,可以看到是从哪里连接到MongoDB的服务器,您可以看到如下信息:
……省略信息……
2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] allocator: tcmalloc
2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] options: { storage: { dbPath: "/data/db" } }
2015-09-25T17:22:27.350+0800 I NETWORK [initandlisten] waiting for connections on port 27017
2015-09-25T17:22:36.012+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open) #
该行表明一个来自本机的连接
……省略信息……
** 使用用户名和密码连接到 MongoDB 服务器,你必须使用 'username:password@hostname/dbname' 格式,'username'为用户名,'password' 为密码。
** 使用用户名和密码连接登陆到默认数据库:
liuys@ubuntu:~$ sudo ./mongo
MongoDB shell version: 3.0.6
connecting to: test
** 使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上。输出结果如下所示:
> mongodb://admin:123456@localhost/
...
** 使用用户名和密码连接登陆到指定数据库,格式如下:
> mongodb://admin:123456@localhost/test
** 更多连接实例 ** 连接本地数据库服务器,端口是默认的。
> mongodb://localhost
** 使用用户名fred,密码foobar登录localhost的admin数据库。
> mongodb://fred:foobar@localhost
** 使用用户名fred,密码foobar登录localhost的baz数据库。
> mongodb://fred:foobar@localhost/baz
** 连接 replica pair, 服务器1为example1.com服务器2为example2。
> mongodb://example1.com:27017,example2.com:27017
** 连接 replica set 三台服务器 (端口 27017, 27018, 和27019):
> mongodb://localhost,localhost:27018,localhost:27019
** 连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。
> mongodb://host1,host2,host3/?slaveOk=true
** 直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器。
> mongodb://host1,host2,host3/?connect=direct;slaveOk=true
** 当你的连接服务器有优先级,还需要列出所有服务器,你可以使用上述连接方式。 安全模式连接到localhost:
> mongodb://localhost/?safe=true
** 以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒。
> mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
> use runoob
switched to db runoob
> db
runoob
>
> show dbs
local 0.078GB
test 0.078GB
>
> db.runoob.insert({"name":"菜鸟教程"})
WriteResult({ "nInserted" : 1 })
> show dbs
local 0.078GB
runoob 0.078GB
test 0.078GB
>
> db.runoob.insert({"name":"菜鸟教程"})
WriteResult({ "nInserted" : 1 })
创建一个主键的可自动增长非负的字段的表
创建一个时间等特定字段的表
创建含datetime 与 timestamp 的当未给TIMESTAMP字段赋值时,自动以当前系统时间赋值,而DATETIME字段默认赋值为 NULL的表
创建含enum(值1,值2,值N) 只能在列举的范围内选择一个值set(值1,值2,值N) 能在列举的范围内选择一个或多个值,以及浮点数的表
添加一个auto_increment初始值的表
#指定第一条的编号从多少开始 2).添加表数据
插入文档记录的注意事项 MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:
db.COLLECTION_NAME.insert(document)
以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中:
>db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
** col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档
添加单条数据
同时添加多条数据
同时向特定字段添加多条数据
建表时创建主键
创建主键 primary key 一个表里只能有一个主键,字段值不允许重复且不允许赋null值;若多个字段做主键叫复合主键,复合主键必须一起创建(字段的值不允许同时相同)。和auto_increment连用,让字段的值自动增长 字段的值自加1后给当前字段赋值 通常把表中能够唯一定位一条记录的字段设置为主键字段。
在已有表里创建主键
创建外键 foreign key
1 表的存储引擎必须是innodb 2 字段的类型要一致 3 被参考的字段必须是key 的一种(primary key) 创建父表并插入数据
创建子表
使用外键时的注意事项:
当一个表被参考时 ,表和被参考的字段都不允许删除 一个表里可以有多个外键字段。 一个父表可以被多个子表参考 所有的删除命令
删除字段名
删除主键
删除表结构
删除外键:
2).删除表记录(以行为删除单位)
删除与条件匹配的记录 delete from 库名.表名 where 条件;
删除所有记录。
1).改名字
修改字段名
修改表名
3).修改表结构
添加至字段之首
添加至指定字段后面
一次添加多个字段
3).修改表数据 ** update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)
参数说明:
** query : update的查询条件,类似sql update查询内where后面的。
** update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
** upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
** multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
** writeConcern :可选,抛出异常的级别。 集合 col 中插入如下数据:
>db.col.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
通过 update() 方法来更新标题(title):
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
#输出信息
> db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>
** 可以看到标题(title)由原来的 "MongoDB 教程" 更新为了 "MongoDB"。
** 以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
db.collection.save(
,
{
writeConcern:
}
)
参数说明: ** document : 文档数据。 ** writeConcern :可选,抛出异常的级别。 实例中替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:
>db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
** 替换成功后,我们可以通过 find() 命令来查看替换后的数据
>db.col.find().pretty()
{
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
}
>
更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
** db.collection.updateOne() 向指定集合更新单个文档 ** db.collection.updateMany() 向指定集合更新多个文档
> use test
db.test_collection.insert( [
{"name":"abc","age":"25","status":"zxc"},
{"name":"dec","age":"19","status":"qwe"},
{"name":"asd","age":"30","status":"nmn"},
] )
*** 更新单个文档
> db.test_collection.updateOne({"name":"abc"},{$set:{"age":"28"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.test_collection.find()
{ "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "zxc" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "qwe" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "nmn" }
>
*** 更新多个文档
> db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
> db.test_collection.find()
{ "_id" : ObjectId("59c8ba673b92ae498a5716af"), "name" : "abc", "age" : "28", "status" : "xyz" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b0"), "name" : "dec", "age" : "19", "status" : "xyz" }
{ "_id" : ObjectId("59c8ba673b92ae498a5716b1"), "name" : "asd", "age" : "30", "status" : "xyz" }
>
4).修改字段类型
若修改的类型与已经存储的数据有冲突,不允许修改 修改字段约束条件
所有的查看的命令
1).查看已插入文档过程
> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
>
** 将数据定义为一个变量
> document=({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});
** 执行插入操作:
> db.col.insert(document)
WriteResult({ "nInserted" : 1 })
>
** 执行后显示结果如下:
{
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
2).查看表结构
3).查看建库的过程
4).查看表中复合条件记录指定字段的值
select 字段名列表 from 库名.表名 where 条件表达式;
5).数值比较 (字段必须是数值类型)字段名 符号 值
= != > >= < <=
6).字符比较 (字段必须是数值类型)字段名 符号 "值"
= !=
7).范围内匹配
between...and.... 在...之间 in (值列表) 在...里... not in (值列表) 不在...里...
8).匹配空 is null 匹配非空 is not null
9).逻辑比较
(2个或2个以上查询条件时使用逻辑比较) 逻辑与 and 多个条件必须同时成立 逻辑或 or 多个条件时某一个条件成立就可以 逻辑非 ! 取反
10).模糊查询
字段名 like '模糊查询表达式'; 模糊查询表达式
% 表示零个或多个字符 _ 表示任意一个字符
11). 正则匹配
字段名 regexp '正则表达式'; ^ $ . * [0-9] 0123456789
12).数学计算 + - * / %
13).聚集函数
count(字段名) 统计字段值的个数 max(字段名) 获取字段的最大值 min(字段名) 获取字段的最小值 avg(字段名) 获取字段的平均值 sum(字段名) 统计字段的和
sql查询命令 group by 字段名;
14).查询结果排序
sql查询 order by 字段名 排序方式; asc 默认 升序 desc 降序
15).在查询结果里过滤数据
sql查询 having 条件表达式;
16). 限制显示查询记录的条目
默认会把复合查询条件的记录全部显示出来 sql查询 limit 数字1,数字2; 数字1 表示从查询结果的第几条记录开始显示 数字2 表示显示几条记录
17).复制表(快速创建一个新表 把表备份一下)
源表的字段的key属性不会被复制给新表。 create table 新表名 sql查询; 复制所有内容
create table 新表名 select * from 表名;
18).怎么显示登录的用户名和客户端地址
19). 登录用查看自己的访问权限?
复制部分内容
create table 新表名 select 字段名列表 from 表名 where 条件;
只复制表结构
create table 新表名 select * from 表名 where 不成立的条件;
18).嵌套查询
把内层查询结果作为外层查询的查询条件 select 字段名列表 from 表名 where 条件 (select 字段名列表 from 表名) ;
19).多表查询
select 字段名列表 from 表名1 ,表名2,表名n; select 字段名列表 from 表名1 ,表名2,表名n where 条件表达式;
连接查询 左连接left jion ... on 条件 查询时以左边的表为主显示查询结果 右连接right jion ... on 条件 查询时以左边的表为主显示查询结果 mysql> create table t43 select name,uid,shell from userdb.user limit 3;
数据的导入与导出
数据导入 : 把系统文件的内容存储到数据库的表里
mysql> LOAD DATA INFILE '文件名' INTO TABLE 表名 FIELDS TERMINATED BY '分隔符' LINES TERMINATED BY '\n'; 把系统用户信息存储到 userdb库下的user表里/etc/passwd 用户名:密码占位符:uid:gid:描述信息:家目录:shell
查看表结构
导入数据
数据导入注意事项
字段分隔符要与文件内的一致 指定导入文件的绝对路径 导入数据的表字段类型要与文件字段匹配 数据导出: 把数据库表里记录存储到系统文件里
语法格式:
SQL查询命令 INTO OUTFILE "文件名"; SQL查询命令 INTO OUTFILE "目录名/文件名" fields terminated by "符号" lines terminated by "符号";
数据导出注意事项
导出的内容由SQL查询语句决定 若不指定路径,默认会放在执行导出命令时所在库对应的数据库目录下。 应确保mysql用户对目标文件夹有写权限。 存储导出数据的文件具有唯一性