RDBMS
Relational Database Management Systemphp
关系型数据库系统mysql
经过表来表示关系程序员
当前主要使用两种类型的数据库:关系型数据库、非关系型数据库,咱们主要学习主流的关系型数据库redis
所谓的关系型数据库RDBMS,是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据算法
查看数据库排名:https://db-engines.com/en/rankingsql
基于“关系模型”的数据库管理系统称为关系数据库管理系统(简称为RDBMS)。
关系数据库中所谓的“关系”,实质上是一张二维表

关系型数据库,存储的格式能够直观地反映实体间的关系。关系型数据库和常见的表格比较类似,关系型数据库中表与表之间是有不少复杂的关联关系的。 常见的关系型数据库有Mysql,SqlServer等。在轻量或者小型的应用中,使用不一样的关系型数据库对系统的性能影响不大,可是在构建大型应用时,则须要根据应用的业务需求和性能需求,选择合适的关系型数据库。 [2]
标准SQL语句
虽然关系型数据库有不少,可是大多数都遵循SQL(结构化查询语言,Structured Query Language)标准。 常见的操做有查询,新增,更新,删除,求和,排序等。 [2]
查询语句:SELECT param FROM table WHERE condition 该语句能够理解为从 table 中查询出知足 condition 条件的字段 param。 [2]
新增语句:INSERT INTO table (param1,param2,param3) VALUES (value1,value2,value3) 该语句能够理解为向table中的param1,param2,param3字段中分别插入value1,value2,value3。 [2]
更新语句:UPDATE table SET param=new_value WHERE condition 该语句能够理解为将知足condition条件的字段param更新为 new_value 值。 [2]
删除语句:DELETE FROM table WHERE condition 该语句能够理解为将知足condition条件的数据所有删除。 [2]
去重查询:SELECT DISTINCT param FROM table WHERE condition 该语句能够理解为从表table中查询出知足条件condition的字段param,可是param中重复的值只能出现一次。 [2]
排序查询:SELECT param FROM table WHERE condition ORDER BY param1该语句能够理解为从表table 中查询出知足condition条件的param,而且要按照param1升序的顺序进行排序。 [2]
整体来讲, 数据库的SELECT,INSERT,UPDATE,DELETE对应了咱们经常使用的增删改查四种操做。 [2]
关系型数据库对于结构化数据的处理更合适,如学生成绩、地址等,这样的数据通常状况下须要使用结构化的查询,例如join,这样的状况下,关系型数据库就会比NoSQL数据库性能更优,并且精确度更高。因为结构化数据的规模不算太大,数据规模的增加一般也是可预期的,因此针对结构化数据使用关系型数据库更好。关系型数据库十分注意数据操做的事务性、一致性,若是对这方面的要求关系型数据库无疑能够很好的知足。 [3]
随着近些年技术方向的不断拓展,大量的NoSql数据库如MongoDB、Redis、Memcache出于简化数据库结构、避免冗余、影响性能的表链接、摒弃复杂分布式的目的被设计。 [5]
指的是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。所谓CAP理论,简单来讲就是一个分布式系统不可能知足可用性、一致性与分区容错性这三个要求,一次性知足两种要求是该系统的上限。而一致性哈希算则指的是NoSQL数据库在应用过程当中,为知足工做需求而在一般状况下产生的一种数据算法,该算法能有效解决工做方面的诸多问题但也存在弊端,即工做完成质量会随着节点的变化而产生波动,当节点过多时,相关工做结果就没法那么准确。这一问题使整个系统的工做效率受到影响,致使整个数据库系统的数据乱码与出错率大大提升,甚至会出现数据节点的内容迁移,产生错误的代码信息。但尽管如此,NoSQL数据库技术仍是具备很是明显的应用优点,如数据库结构相对简单,在大数据量下的读写性能好;能知足随时存储自定义数据格式需求,很是适用于大数据处理工做。 [6]
NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。 [5] 对于非结构化数据的处理更合适,如文章、评论,这些数据如全文搜索、机器学习一般只用于模糊处理,并不须要像结构化数据同样,进行精确查询,并且这类数据的数据规模每每是海量的,数据规模的增加每每也是不可能预期的,而NoSQL数据库的扩展能力几乎也是无限的,因此NoSQL数据库能够很好的知足这一类数据的存储。NoSQL数据库利用key-value能够大量的获取大量的非结构化数据,而且数据的获取效率很高,但用它查询结构化数据效果就比较差。 [3]
目前NoSQL数据库仍然没有一个统一的标准,它如今有四种大的分类:
(1)键值对存储(key-value):表明软件Redis,它的优势可以进行数据的快速查询,而缺点是须要存储数据之间的关系。 [3]
(2)列存储:表明软件Hbase,它的优势是对数据能快速查询,数据存储的扩展性强。而缺点是数据库的功能有局限性。 [3]
(3)文档数据库存储:表明软件MongoDB,它的优势是对数据结构要求不特别的严格。而缺点是查询性的性能很差,同时缺乏一种统一查询语言。 [3]
(4)图形数据库存储:表明软件InfoGrid,它的优势能够方便的利用图结构相关算法进行计算。而缺点是要想获得结果必须进行整个图的计算,并且遇到不适合的数据模型时,图形数据库很难使用。 [3]
1、存储方式
传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储,要读取和查询都十分方便。而非关系型数据不适合这样的表格存储方式,一般以数据集的方式,大量的数据集中存储在一块儿,相似于键值对、图结构或者文档。 [3]
2、存储结构
关系型数据库按照结构化的方法存储数据, 每一个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样作的好处就是因为数据的形式和内容在存入数据以前就已经定义好了,因此整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,若是须要修改数据表的结构就会十分困难。而NoSQL数据库因为面对的是大量非结构化的数据的存储,它采用的是动态结构,对于数据类型和结构的改变很是的适应,能够根据数据存储的须要灵活的改变数据库的结构。 [3]
3、存储规范
关系型数据库为了不重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理的就能够变得很清晰、一目了然,固然这主要是一张数据表的状况。若是是多张表状况就不同了,因为数据涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增长,数据管理会愈来愈复杂。而NoSQL数据库的数据存储方式是用平面数据集的方式集中存放,虽然会存在数据被重复存储,从而形成存储空间被浪费的问题(从当前的计算机硬件的发展来看,这样的存储空间浪费的问题微不足道),可是因为基本上单个数据库都是采用单独存放的形式,不多采用分割存放的方式,因此这样数据每每能存成一个总体,这对于数据的读写提供了极大的方便。 [3]
4、扩展方式
当前社会和科学飞速发展,要支持日益增加的数据库存储需求固然要求数据库有良好的扩展性能,而且要求数据库支持更多数据并发量,扩展方式是NoSQL数据库与关系型数据库差异最大的地方,因为关系型数据库将数据存储在数据表中,数据操做的瓶颈出如今多张数据表的操做中,并且数据表越多这个问题越严重,若是要缓解这个问题,只能提升处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然能够必定的拓展空间,但这样的拓展空间必定有很是有限的,也就是关系型数据库只具有纵向扩展能力。而NoSQL数据库因为使用的是数据集的存储方式,它的存储方式必定是分布式的,它能够采用横向的方式来开展数据库,也就是能够添加更多数据库服务器到资源池,而后由这些增长的服务器来负担数据量增长的开销。 [3]
5、查询方式
关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已得到了各个数据库厂商的支持,成为数据库行业的标准,它可以支持数据库的CRUD(增长,查询,更新,删除)操做,具备很是强大的功能,SQL能够采用相似索引的方法来加快查询操做。NoSQL数据库使用的是非结构化查询语言(UnQL),它以数据集(像文档)为单位来管理和操做数据,因为它没有一个统一的标准,因此每一个数据库厂商提供产品标准是不同的,NoSQL中的文档Id与关系型表中主键的概念相似,NoSQL数据库采用的数据访问模式相对SQL更简单而精确。 [3]
6、规范化
在数据库的设计开发过程当中开发人员一般会面对同时须要对一个或者多个数据实体(包括数组、列表和嵌套数据)进行操做,这样在关系型数据库中,一个数据实体通常首先要分割成多个部分,而后再对分割的部分进行规范化,规范化之后再分别存入到多张关系型数据表中,这是一个复杂的过程。好消息是随着软件技术的发展,至关多的软件开发平台都提供一些简单的解决方法,例如,能够利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不一样类型系统的数据之间的转换。对于NoSQL数据库则没有这方面的问题,它不须要规范化数据,它一般是在一个单独的存储单元中存入一个复杂的数据实体。 [3]
7、事务性
关系型数据库强调ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),能够知足对事务性要求较高或者须要进行复杂数据查询的数据操做,并且能够充分知足数据库操做的高性能和操做稳定性的要求。而且关系型数据库十分强调数据的强一致性,对于事务的操做有很好的支持。关系型数据库能够控制事务原子性细粒度,而且一旦操做有误或者有须要,能够立刻回滚事务。而NoSQL数据库强调BASE原则(基本可用(Basically Availble)、软状态(Soft-state)、最终一致性(Eventual Consistency)),它减小了对数据的强一致性支持,从而得到了基本一致性和柔性可靠性,而且利用以上的特性达到了高可靠性和高性能,最终达到了数据的最终一致性。NoSQL数据库虽然对于事务操做也可使用,但因为它是一种基于节点的分布式数据库,对于事务的操做不能很好的支持,也很难知足其所有的需求,因此NoSQL数据库的性能和优势更多的体如今大数据的处理和数据库的扩展方面。 [3]
8、读写性能
关系型数据库十分强调数据的一致性,并为此下降读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得不好,特别是遇到高并发读写的时候性能就会降低的很是厉害。而NoSQL数据库相对关系型数据库优点最大的偏偏是应对大数据方面,也就是对于大量的天天都产生非结构化的数据可以高性能的读写,这是由于NoSQL数据库是按key-value类型进行存储的,以数据集的方式存储的,所以不管是扩展仍是读写都很是容易,而且NoSQL数据库不须要关系型数据库繁琐的解析,因此NoSQL数据库大数据管理、检索、读写、分析以及可视化方面具备关系型数据库不可比拟的优点。 [3]
9、受权方式
关系型数据库常见的有Oracle,SQLServer,DB2,Mysql,除了Mysql大多数的关系型数据库若是要使用都须要支付一笔价格高昂的费用,即便是免费的Mysql性能也受到了诸多的限制。而对于NoSQL数据库,比较主流的有redis,HBase,MongoDb,memcache等产品,一般都采用开源的方式,不须要像关系型数据库那样,须要一笔高昂的花费。 [3]
所谓的分布式数据库技术,就是结合了数据库技术与分布式技术的一种结合。具体指的是把那些在地理意义上分散开的各个数据库节点,但在计算机系统逻辑上又是属于同一个系统的数据结合起来的一种数据库技术。既有着数据库间的协调性也有着数据的分布性。这个系统并不注重系统的集中控制,而是注重每一个数据库节点的自治性,此外为了让程序员可以在编写程序时能够减轻工做量以及系统出错的可能性,通常都是彻底不考虑数据的分布状况,这样的结果就使得系统数据的分布状况一直保持着透明性。 [7]
数据独立性概念在分布式数据库管理系统中一样是十分重要的一环,可是不只如此,分布式数据管理系统还增长了一个叫分布式透明性的新概念。这个新概念的做用是让数据进行转移时使程序正确性不受影响,就像数据并无在编写程序时被分布同样。 [7]
在分布式数据库里,数据冗杂是一种被须要的特性,这点和通常的集中式数据库系统不同。第一点是为了提升局部的应用性而要在那些被须要的数据库节点复制数据。第二点是由于若是某个数据库节点出现系统错误,在修复好以前,能够经过操做其余的数据库节点里复制好的数据来让系统可以继续使用,提升系统的有效性。 [7]
1、关系型数据库核心元素
数据行(一条记录)
数据列(字段)
数据表(数据行的集合)
数据库(数据表的集合,一个数据库中可以有 n 多个数据表)
2、数据库的分类
关系型数据库:mysql 、sqlserver、oracle、db2、accress、
非关系型数据库:redis、kfaka、MongodDB、Hbase
参考:《非关系型数据库资料》
常见的关系型数据库有哪些?
经常使用的数据库有Access、Oracle、Mysql、SQL Server、SQLite等。那么用户想要选择一个数据库,什么样的数据库才是最能知足用户自身需求的呢?
3、Access数据库
这款数据库是由微软发布的,是一款关联式数据序管理型系统的数据库,一般是被用来开发Web应用程序这些应用程序都利用Asp技术在IIs上运行,可是因为Access是小型的数据库,在不少的使用上都有着局限性,并且若是过多的数据库访问量还会形成数据库的性能极具降低。
4、MySQL数据库
这款数据库是一款小型数据库管理系统的数据库,其开发公司是瑞典MySQLAB公司。MySQL被普遍地应用在Internet上的中小型网站中。因为其体积小、速度快、整体拥有成本低,尤为是开放源码这一特色,许多中小型网站为了下降网站整体拥有成本而选择了MySQL做为网站数据库。
5、SqlServer数据库
这款数据库的特色是真正的客户/服务器体系结构,而且出十是图形化的用户界面,使数据库管理方式更加直观和简单。它还提供了丰富的编程接口工具为用户进行程序设计提供了更大的选择余。在使用上也是很是普遍的。
6、Oracle数据库
这是一款比较典型的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。ORACLE数据库是目前世界上使用最为普遍的数据库管理系统,做为一个通用的数据库系统,它具备完整的数据管理功能;做为一个关系数据库,它是一个完备关系的产品;做为分布式数据库它实现了分布式处理功能。但它的全部知识,只要在一种机型上学习了ORACLE知识,便能在各类类型的机器上使用它。
7、SQLite数据库
这是一款轻型的数据库,是遵照ACID的关联式数据库管理系统,它的设计目标是嵌入式的,并且目前已经在不少嵌入式产品中使用了它,它占用资源很是的低,在嵌入式设备中,可能只须要几百K的内存就够了。这款数据库的运行处理速度比Mysql、PostgreSQL这两款都要快。
8、经常使用的链接工具:
Mysql :phpMyAdmin、Navicat 、MySQL Workbench
Oracle:plsql
Sqlserver: