数据库1:数据库入门讲解
大家可能一听数据库,就会觉得这是一个高大上的东西,当年Oracle(甲骨文)就凭借着他的Oracle数据库系统蝉联了好几年的世界第一市值的宝座,据说当年一套数据库系统就没有低于100万的;那个时候,一个Oracle数据库管理员的证书可是非常吃香的,在那个一个月一个大城市最低工资只有1000的年代里,拥有Oracle数据库管理员证书的人,一年可以轻松拥有十几二十万的年薪的。
当然现在要是去当一年数据库管理员也是非常不错的,家里有钱有关系的学生,其实你们可以往这个方向考虑。当数据库管理员就有点类似于仓库管理员,只要你做的好,其实工作很轻松,待遇又很高。你只要做好数据库的备份和安全,然后要会一些数据库的优化就可以了,很多时候很多单位其实也不差钱,所以数据库的优化在一些单位就不是那么重要,就是多添置一些设备的问题而已。
说了这么多题外话,现在我们回归主题,那么数据库到底是什么?
其实数据库没有那么高深,就在我们身边,我们就有碰到很多数据库的例子,比如一个文本文件、一个excel文件,其实就是一个数据库。比如我们现在做一个班级的学生信息表,
这就是一个数据库,也是一个数据表,这个数据表里面就包含了学号、姓名、出身年月、籍贯这四个数据列。
说到这里,既然数据库就是这么一个简单的东西,那么为什么要有数据库、建立数据库的目的是什么?相信大家也都看出来了,数据库就是存放一堆数据的地方,当我们有一堆数据要存放的时候,那总要想个办法让他有条理的存放一下,这就是数据库最初的目的,然后到了后面,发现数据越来越多了,这个时候就又产生了查询效率的问题,排序的问题,这个时候数据库程序的好坏就体现出来了,比如假如我们一个班级有一亿人,要查询这一亿人中有哪些姓陈的,然后按照出生年月排序好,这个时候好的数据库的查询所花的时间就是差的数据库所花时间的几分之一、甚至是几十分之一,这也就是为什么oracle他们敢卖这么贵的原因,他们在大数据查询方面的速度无人能比,在银行、电信等这些涉及几亿几十亿的数据处理上拥有超级快的速度。
所以我们建立数据库的目的,一是为了有条理的存放数据,二就是为了能方便快速的查询到我们想要的数据,这就是建立数据库的初衷目的,也是数据库的根本。
至于后面基于这个基本需求的前提下,衍生出了索引、触发器等等,都是为了加快和提升查询速度、提升数据处理效率而衍生出来的。
那么我们建立数据库的目的就是为了存放、管理、查询数据,而当前市面上有多种不同的数据库,大的如甲骨文的Oracle、微软的Sql Server、开源的MySql,小的如微软的Office中带的Access、Excel、文本文件等,那么如果每家都规定自己的一套查询办法的话,那就程序开发来说就是一个非常痛苦的事情了,要换一套数据库,就要对程序进行全面的重新修改和测试。所以大家就规定了一套统一的查询方法,这就是Sql查询语言产生的原因。
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
结构化查询语言不要求用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。
结构化查询语言Sql包含6个部分:
1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。select是用得最多的词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING,比如我们上面的学生信息表中,假如我们要查询有哪些学生是2001.6月之前出生的,那我们可以这么查询 Select * from 学生信息表 where 出生年月<\’2001.6\’
2、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
3、事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
4、数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。
6、指针控制语言(CCL):它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
一文了解主流图数据库查询语言|操作入门篇
图数据库已经越来越被人们熟知,同时也在许多企业中得到了应用,但是由于市面上没有统一的图查询语言标准,所以有部分开发者对于不同图数据库的用法存在着疑问。因此本文作者对市面上主流的几款图数据库进行了一番分析,并以查询操作为例进行深入介绍。
文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。
虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数据库为图结构),但不计各自的性能问题,关系型数据库可以通过递归查询或者组合其他 SQL 语句(Join)完成图查询语言查询节点关系操作。得益于 1987 年 SQL 成为国际标准化组织(ISO)标准,关系型数据库行业得到了很好的发展。同 60、70 年代的关系型数据库类似,图数据库这个领域的查询语言目前也没有统一标准,虽然 19 年 9 月经过国际 SQL 标准委员会投票表决,决定将图查询语言(Graph Query Language)纳为一种新的数据库查询语言,但 GQL 的制定仍需要一段时间。
鉴于市面上没有统一的图查询语言标准,在本文中我们选取市面上主流的几款图查询语言来分析一波用法,由于篇幅原因本文旨在简单介绍图查询语言和常规用法,更详细的内容将在进阶篇中讲述。
Gremlin 是 Apache ThinkerPop 框架下的图遍历语言。Gremlin 可以是声明性的也可以是命令性的。虽然 Gremlin 是基于 Groovy 的,但具有许多语言变体,允许开发人员以 Java、JavaScript、Python、Scala、Clojure 和 Groovy 等许多现代编程语言原生编写 Gremlin 查询。
支持图数据库:Janus Graph、InfiniteGraph、Cosmos DB、DataStax Enterprise(5.0+) 、Amazon Neptune
Cypher 是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询,和 SQL 很相似,Cypher 语言的关键字不区分大小写,但是属性值,标签,关系类型和变量是区分大小写的。
支持图数据库: Neo4j、RedisGraph、AgensGraph
nGQL 是一种类 SQL 的声明型的文本查询语言,nGQL 同样是关键词大小写不敏感的查询语言,目前支持模式匹配、聚合运算、图计算,可无嵌入组合语句。
支持图数据库:Nebula Graph
在比较这 3 个图查询语言之前,我们先来看看他们各自的术语,如果你翻阅他们的文档会经常见到下面这些“关键字”,在这里我们不讲用法,只看这些图数据库常用概念在这 3 个图数据库文档中的叫法。
术语GremlinCyphernGQL点VertexNodeVertex边EdgeRelationshipEdge点类型LabelLabelTag边类型labelRelationshipTypeedge type点 IDvidid(n)vid边 IDeidid®无插入addcreateinsert删除dropdeletedelete / drop更新属性setPropertysetupdate
我们可以看到大体上对点和边的叫法类似,只不过 Cypher 中直接使用了 Relationship 关系一词代表边。其他的术语基本都非常直观。
上面说了一通术语之类的“干货”之后,是时候展示真正的技术了——来个具体一点的例子,在具体的例子中我们将会分析 Gremlin、Cypher、nGQL 的用法不同。
实操示例使用了 Janus Graph 的示例图 The Graphs of Gods。该图结构如下图所示,描述了罗马万神话中诸神关系。
复制代码
在数据插入这块,我们可以看到 nGQL 使用 INSERT VERTEX 插入点,而 Gremlin 直接使用类函数的 g.addV() 来插入点,Cypher 使用 CREATE 这个 SQL 常见关键词来创建插入的点。在点对应的属性值方面,nGQL 通过 VALUES 关键词来赋值,Gremlin 则通过操作 .property() 进行对应属性的赋值,Cypher 更直观直接在对应的属性值后面跟上想对应的值。
在边插入方面,可以看到和点的使用语法类似,只不过在 Cypher 和 nGQL 中分别使用 -[]-> 和 **-> 来表示关系,而 Gremlin 则用 to() ** 关键词来标识指向关系,在使用这 3 种图查询语言的图数据库中的边均为有向边,下图左边为有向边,右边为无向边。
复制代码
这里,我们可以看到大家的删除关键词都是类似的:Delete 和 Drop,不过这里需要注意的是上面术语篇中提过 nGQL 中删除操作对应单词有 Delete 和 Drop ,在 nGQL 中 Delete 一般用于点边,Drop 用于 Schema 删除,这点和 SQL 的设计思路是一样的。
复制代码
可以看到 Cypher 和 nGQL 都使用 SET 关键词来设置点对应的类型值,只不过 nGQL 中多了 UPDATE 关键词来标识操作,Gremlin 的操作和查看点操作类似,只不过增加了变更 property 值操作,这里我们注意到的是,Cypher 中常见的一个关键词便是 MATCH,顾名思义,它是一个查询关键词,它会去选择匹配对应条件下的点边,再进行下一步操作。
复制代码
在查看数据这块,Gremlin 通过调取 valueMap() 获得对应的属性值,而 Cypher 正如上面更新数据所说,依旧是 MATCH 关键词来进行对应的匹配查询再通过 RETURN 返回对应的数值,而 nGQL 则对 saturn 进行 hash 运算得到对应 VID 之后去获取对应 VID 的属性值。
复制代码
查询父亲,其实是一个查询关系 / 边的操作,这里不做赘述,上面插入边的时候简单介绍了 Gremlin、Cypher、nGQL 这三种图数据库是各自用来标识边的关键词和操作符是什么。
复制代码
查询祖父,其实是一个查询对应点的两跳关系,即:父亲的父亲,我们可以看到 Gremlin 使用了两次 out() 来表示为祖父,而 nGQL 这里使用了 |(Pipe 管道) 的概念,用于子查询。在两跳关系处理上,上面说到 Gremlin 是用了 2 次 out(),而 Cypher、nGQL 则引入了 step 数的概念,分别对应到查询语句的 GO 2 STEP 和 [:father *2],相对来说 Cypher、nGQL 这样书写更优雅。
复制代码
这个是一个典型的查询语句,找寻符合特定条件的点并返回结果,在 Cypher 和 nGQL 中用 WHRER 进行条件判断,而 Gremlin 延续了它的“编程风”用 gt(100) 表示年大于龄 100 的这个筛选条件,延伸下 Gremlin 中 eq() 则表示等于这个查询条件。
复制代码
这是一个沿指定点 Pluto 反向查询指定边(居住)的操作,在反向查询中,Gremlin 使用了 in 来表示反向关系,而 Cypher 则更直观的将指向箭头反向变成 <- 来表示反向关系,nGQL 则用关键词 REVERSELY 来标识反向关系。
复制代码
这是一个通过查询指定点 Pluto 查询指定边 brother 后再查询指定边 live 的查询,相对来说不是很复杂,这里就不做解释说明了。
最后,本文只是对 Gremlin、Cypher、nGQL 等 3 个图查询语言进行了简单的介绍,更复杂的语法将在本系列的后续文章中继续,欢迎在论坛留言交流。
你真的学好数据库了吗?最全数据库学习路线及课时内容计划详解
现如今数据库已经成为所有IT从业者必不可少的一项技能技术,不管您从事的是技术、产品、运营亦或是算法等互联网的岗位都需要和数据库技术相伴,数据库技术也随着互联网技术的进步和革新一步步走向云端走向海量,下面就跟我梳理的内容一起了解一下数据库技术的学习内容及各阶段要求详解。
数据学习
整体阶段划分:SQL基础→关系型云数据库→NoSQL基础→NosQL云数据库→数据库高级应用
时间投入计算:24+24+27+4+5=84小时。每周8小时学习就是10周,2.5月,每天8小时学习就是10天。
其中SQL基础和NoSQL基础是重要基础阶段,致于2个有关云数据库部分都是在阿里控制台对云数据的管理操作为主,是把之前基础课程里的本地数据库管理操作迁移到了web端,根据手册来掌握非常容易的,可以留在具体采购相应数据库之后在仔细学习掌握也行,可以先一遍过对整个云数据库的管理模式和操作流程有个大致印象即可。
最后部分的数据库高级应用也是拓宽眼界使用,不会立即在帮助中起到直接的效果,但是可以启发很多优化路线和数据库设计思路。
4门课程 | 137课时 | 3套阶段自测考试
每个课时10分钟左右,一共需要1400分钟。需要24小时。如果周8小时学习时间,总计学习时间为3周。
学习前要求:计算机基本操作,以及英语基础(方便记住英文命令)。
学习后将掌握:各种SQL语句,比如增删改查等基础功能,以及索引、锁和高级应用等。
SQL基础
3门课程 I 32课时 I 阶段自测考试即将上线
每个课时45分钟左右,也需要需要24小时左右。如果周8小时学习时间,总计时间投入3周。
学习前要求:熟练掌握SQL相关操作,熟悉常见的关系型数据库,比如MySQL、SQL Server、PostgreSQL等。
学习后将掌握:关系型云数据库的基本操作,比如创建实例、连接、备份恢复等。
关系型云数据库
4门课程 I 108课时 I 阶段自测考试即将上线
每个课时15分钟左右,总共需要27小时,总计时间投入4周。
学习前要求:SQL基础、JSON基础等。
学习后将掌握:常见的NoSQL数据库(比如MongoDB、Redis、HBase、Memcached等)的基本操作。
NoSQL基础
6门课程 | 45课时 | 阶段自测考试即将上线
每个课时5分钟左右,总共需要3.75小时,总计时间投入1周。
学习前要求:熟悉常见的NoSQL数据库。
学习后将掌握:NoSQL云数据库的基本操作,比如创建实例、白名单设置、备份恢复、监控报警等。
NoSQL云数据库
3门课程 I 21课时 I 阶段自测考试即将上线
每个课时14分钟左右,总共需要5个小时,总计时间投入1周。
学习前要求:熟练掌握并应用SQL、NoSQL、云数据库等。
学习后将掌握:数据库运维经验、云数据库选型及架构、云数据库性能优化等。
数据库高级应用
如果觉得对您工作生活有帮助欢迎点赞、收藏或关注我,长期分享各种互联网相关的技术知识和干活内容。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。