数据库的概念
在计算机出现以前,那个时候人们都是通过纸质文件来保存数据。这种保存方式肯定是有很多缺点的。
例如:
- 纸质文件容易丢失和损坏
- 占用空间大
- 浪费资源(浪费纸张,破坏环境)
- 查找数据困难
后面,计算机出现了,人们选择使用计算机来保存数据。那个时候最常见的是使用word和excel来保存数据。
这种保存方式同样存在缺点:
- 易丢失(不小心删除了)
- 查询不便
- 如果是很大的excel,打开都非常费力,而且极易被损坏
为了解决上述的问题,数据库就出现了。
数据库,英文叫做Database,简称DB。是按照数据结构组织,存储和管理数据的仓库。
数据库的特点:
- 数据是结构化
- 数据可以实现共享
- 数据的独立性高
- 数据可以统一管理和控制
数据库的分类
数据库可以分为层次数据库、网络数据库和关系数据库。现在更多的关心的是一个数据库是关系型还是非关系型。
所谓关系型,就是指数据是存储在一张一张的表格里面。而每一张表之间又产生了相应的关系。
什么是数据库系统?
很多初学者以为数据库就是数据库系统。但是,实际上数据库系统的范围要比数据库的范围要广。
数据库系统可以包含硬件和软件。软件里面有可以分为3类:(1)数据库 (2)数据库管理系统(3)数据库应用程序
1. 数据库
存储数据的容器。
2. 数据库管理系统
所谓数据库管理系统,其实就是各个公司针对数据库管理所推出的产品。常见的数据库管理系统如下:
Oracle 数据库管理系统(关系型)
该数据库管理系统是由甲骨文公司开发的,在数据库领域一直处于领先的地位。Oracle在全球的使用最为广泛。
Oracle有一个特点,就是非常的昂贵。
SQL Server数据库管理系统(关系型)
该数据库管理系统由微软开发,广泛用于电子商务、银行、保险、电力等行业。该数据库的系统界面友好、易于操作。但是只能在windows系统下面运行。
DB 2 数据库管理系统(关系型)
是由IBM公司推出的数据库管理系统。
mySQL(关系型)
PostgreSQL 数据库管理系统(对象关系型数据库)
mongoDB(非关系型数据库)
由10ten公司开发的非关系型数据库,但是这种数据库被誉为最像关系型的非关系型数据库。
3数据库应用程序
虽然已经有了数据库管理系统,但是无法满足用户对数据库的管理,因为纯命令的方式来操作数据库是不太方便的。
这个时候就需要数据库应用程序来和数据库进行通信。数据库应用程序往往都是以图形界面的方式。
常见的数据库应用程序
Navicat:
SQLyog
Robo3T
SQL
SQL是一门语言,英语全称Structured Query Language,翻译成中文就是“结构化查询语言”。该语言是由IBM在1975-1979年之间开发出来。在80年代被美国国家标准学会定义成关系型数据库查询的标准语言。
select * from stu;
换句话说,只要是关系型数据库,都可以用SQL来操作数据。SQL从结构上去划分的话,可以分为4大类:
- 数据定义语言(例如:create、alter 等语句)
- 数据操作语言(例如:insert、update、delete 等语句)
- 数据查询语言(例如:select 语句)
- 数据控制语言(例如:commit、rollback 等语句)
NoSQL 简介
随着互联网Web2.0网站的兴起,传统的SQL(关系型)数据库在应付Web2.0网站的时候,就有点显得力不从心了。
1. 不够灵活、扩展困难
在SQL数据库中,都是通过表来对数据进行存储。一张信息表一般都有固定的字段,这样使得Web应用在数据做横向的扩展的时候很困难。
2. 过于笨重、性能低下
与一些功能不足的NoSQL类型数据库相比,SQL数据库有很多特性反而没有用武之地。比如,在很多场景下,针对及时存取、事务等操作并没有特别的要求。所以说这些额外的特性反而消耗着SQL数据库的性能。
NoSQL,英语全称Not only SQL,翻译成中文“不仅仅是SQL”
但是实际上,现在绝大多数的NoSQL数据库已经完全放弃了对SQL语言的支持。
NoSQL的优点
- 高可扩展性
- 分布式计算
- 低成本
- 架构灵活、半结构化数据
- 没有复杂的关系
NoSQL的缺点
- 没有标准化
NoSQL数据库的分类
1. 键值存储数据库
这一类的数据库主要会使用到一个哈希表,通过哈希表以键值的形式来存储。
常见的这一类数据库有 Tokyo Cabinet、Redis、OracleBDB
2. 列存储数据库
通过列的形式来存储数据。常见的有Cassandra、HBase、Riak
3. 文档型数据库
和第一种键值类似,只不过用对象的形式来存储数据。这一类常见的数据库有CouchDB、MongoDB
4. 图形数据库
这一类数据库就是以图形结构的形式来存储数据。这一类型的数据库有Neo4J、Infogrid、InfiniteGraph
MongoDB
在文档类型存储的NoSQL中,MongoDB为佼佼者。有人设置建议将LAMP中的M替换为MongoDB
安装MongoDB方法(参考菜鸟教程)
使用MongoDB时首先需要启动MongoDB服务器,启动之后该服务器默认监听27017端口,接下来就可以启动客户端进行连接。
如果要退出MongoDB,首先切换到admin主要数据库,使用db.shutdownServer()来关闭数据库服务器。(如果是Windows用户,直接点击右上角叉叉即可)
常用命令
- 查看所有的数据库 show dbs
- 创建数据库
use 数据库名
该命令即是创建也是切换。但是注意的是,刚创建好的数据库,如果里面没有数据,使用show dbs 是查看不到的。 - 查看当前使用的数据库
db
数据库相关操作
创建数据库
use 数据库名
本意是切换数据库,如果该数据库不存在,则会创建。但是创建后的空数据库使用show dbs 不会显示。至少要往数据库里面添加一条数据才会显示。
删除数据库:db.dropDatabase()
调用该方法后,会删除当前所使用的数据库。
集合相关操作
创建集合db.createCollection(name, options)
name:要创建的集合的名字
options:可选参数,详细见下表
如果要查询当前的数据库有哪些集合,可以通过show collections 或者 show tables命令
操作示例:
但是,一般来讲不需要显式的来创建集合。当我们往一个不存在的集合里面插入数据的时候,会自动生成一个新的集合。
删除集合:db.集合名.drop()
文档相关操作
文档相关操作就包含了增删改查;
插入文档
通过命令insert或者save命令就可以插入文档,在mongodb3.2版本之后,还提供了insertOne 以及 insertMany命令来控制插入一条或者多条
更新文档
在mongodb中,使用update命令来更新文档,语法如下:
操作示例如下:
如果要修改多条文档,可以将multi设置为true
删除文档
以前mongodb使用remove来进行文档的删除。但是现在不推荐使用remove方法来删除。因为使用该方法来删除数据,并不会释放空间,也就是说,删除完毕之后,还需要使用db.repairDatabase()来回收磁盘空间。
现在官方推荐使用deleteOne()或者deleteMany()方法来进行文档的删除。
deleteOne使用示例:
deleteMany使用示例:
还可以使用db.集合名.deleteMany({}),代表删除该集合下的所有文档。
文档的查询
基本的查询db.集合名.find(),该命令会将所有的数据查询出来
如果想要在查询时使用更加易读的方式来显示数据,可以添加上pretty方法。
条件查询
mongodb同样提供了条件查询。
实际操作示例:
查询年龄为18岁的
查询年龄大于等于18岁的
查询姓名不为keke的人
AND条件查询
mongodb里面可以往find方法中传入多个键值对,每个键值对以逗号隔开。
语法:db.集合名.find({key1:value1, key2:value2})
上面的语句类似于SQL里面的select * from stu where age>=18 and gender=‘male’
OR条件查询
mongodb中or条件使用关键字KaTeX parse error: Expected '}', got 'EOF' at end of input: …为:db.集合名.find({or:[{},{},…]})
查询条件的排序
在mongodb中,排序使用sort()方法。里面传入一个key(key对应的是具体的字段),key对应的值为1或者-1,如果是1,就是升序,如果是-1,那就是降序。
如果遇到第一个字段的排序相同,想要指定第二个字段的排序规则,方法很简单,继续传入key即可。
查询结果的限制
有些时候,我们不需要一次性查询出所有的符合条件的文档,这个时候就需要对文档进行一个分批的显示,这个时候就需要一个限制。
在mongodb数据库中,使用limit方法,该方法接收一个参数,该参数就是要读取的条数。
该方法一般会和skip()方法配合着使用。该方法表示跳过指定数量的数据
这两个方法多用于制作分页的时候。
模糊查询
mongodb中的模糊查询使用正则表达式即可
数据库的导入导出以及备份
数据库的导入导出
mongodb中支持将数据库导出为json或者CSV格式
语法:mongoexport -d 数据库名 -c 集合名 -o file --type json/csv -f filed
通过mongoimport就可以导入数据。具体的语法如下:
语法:mongoimport -d 数据库名 -c 集合名 --file filename --headerline --type json/csv fileld
数据库的备份和导入数据库
数据库的备份也是使用频率相当高的一个操作。
语法:mongodump -h dbhost -d dbname -o dbdirectory
数据库的恢复
语法:mongorestore -h dbhost -d dbname --dir dbdirectory
Nodejs操作mongodb数据库
nodejs连接mongodb数据库
安装mongodb模块:npm i mongodb
(1)通过连接字符串进行连接
这种连接方式非常简单,就是将数据库服务器以及端口等信息书写成一个字符串,然后传入connect方法即可。
在上面的连接方式中,会出现警告,提醒我们需要写入第二个useUnifiedTopology 参数,将其设置为true。设置方法如下:
(2)通过client对象来进行连接
这种连接方式将数据库服务器以及端口信息创建成一个对象,然后通过调用该对象的connect方法来进行连接
nodejs操作mongodb数据库
(1)创建集合
使用createCollection方法即可创建集合。
效果:
(2)删除集合
删除集合首先使用collection方法定位到具体的集合,然后使用drop方法进行删除。
(3)插入数据
可以使用insertOne或者insertMany来插入数据
效果:
(4)删除数据
删除数据对应饿方法也是两个,deleteOne和deleteMany
效果:
(5)更新数据
更新数据同样存在updateOne和updateMany两个方法。具体使用示例如下:
效果:
(6)查询数据
nodejs连接了mongodb之后,同样是使用find方法来查询数据
实际操作示例:
如果是条件查询,就在find方法中插入查询条件即可。
具体操作示例如下:
(7)查询结果排序
同样是使用sort方法来进行排序
具体操作如下:
(8)查询结果限制
同样是通过limit方法来对查询结果进行限制,配合skip方法来经常做分页的效果。