MySQL数据库零基础教学(超详细,适合0基础小白入门)
MySQL体积小、速度快,性能优异,是目前企业实际开发中最广泛应用的数据库之一。
它不仅易学,开发成本低,而且90%以上的数据库操作都跟通用的SQL语法一致,掌握MySQL后再学习其他类似数据库会简单很多。
在目前网络开发就业市场中,MySQL是必备技术之一。
但是这么全面、深入的MySQL数据库学习视频真是不太好找了,动力节点的最新MySQL数据库实战入门视频教程,即便是脱离Java学习的角度单独拿出来学习都没有问题,并且有其独特的特点:
- 适合绝对零基础的观看;
- 视频采用循序渐进的方式教学,所以不存在听不懂,学不会;
- 看完视频完全可以担当日常开发工作;
这套MySQL教程涵盖了全部MySQL数据库的基础,总的来说,是站在绝对零基础的角度进行录制,采用循序渐进的方式讲解。
主要内容包括DQL、DML、DDL、DCL、TCL等SQL语句的学习,尤其对DQL语句进行了详细的讲解,包括单表查询、多表联查、内连接、外连接等。
另外MySQL教程中还讲授了数据库事务的处理,数据库索引的实现原理,视图的使用等内容。
目标就是“看得懂、学得会、做得出”,为后续的学习打下夯实的基础。
戳以下链接点击观看
https://www.ixigua.com/6794696042571891204
001-MySQL教程-数据库概述
002-MySQL教程-MySQL的安装与配置
003-MySQL教程-登录MySQL
004-MySQL教程-DB DBMS SQL的关系
005-MySQL教程-对表的理解
006-MySQL教程-对SQL语句的分类
007-MySQL教程-导入初始化数据
008-MySQL教程-对SQL脚本的理解
009-MySQL教程-查看表结构以及表中的数据
010-MySQL教程-MySQL的常用命令
011-MySQL教程-查看建表语句
012-MySQL教程-简单查询
013-MySQL教程-条件查询
014-MySQL教程-条件查询between and
015-MySQL教程-条件查询is null和is not null
016-MySQL教程-and和or的优先级问题
017-MySQL教程-条件查询in
018-MySQL教程-模糊查询like
019-MySQL教程-数据排序
020-MySQL教程-分组函数
021-MySQL教程-count所有和count具体某个字段的区别
022-MySQL教程-分组查询group by
023-MySQL教程-多字段分组查询
024-MySQL教程-having和where的选择
025-MySQL教程-总结DQL语句的执行顺序
026-MySQL教程-回顾之前内容
027-MySQL教程-去除重复记录
028-MySQL教程-连接查询概述
029-MySQL教程-连接查询的分类
030-MySQL教程-连接查询原理以及笛卡尔积现象
031-MySQL教程-等值连接
032-MySQL教程-非等值连接
033-MySQL教程-自连接
034-MySQL教程-外连接
035-MySQL教程-3张以上表连接查询
036-MySQL教程-navicat工具简单介绍
037-MySQL教程-where后面嵌套子查询
038-MySQL教程-from后面嵌套子查询
039-MySQL教程-select后面嵌套子查询
040-MySQL教程-union的用法
041-MySQL教程-limit以及通用分页SQL
042-MySQL教程-表的创建
043-MySQL教程-向表中插入数据
044-MySQL教程-向表中插入数据
045-MySQL教程-表的复制以及批量插入
046-MySQL教程-修改表中的数据
047-MySQL教程-删除表中的数据
048-MySQL教程-关于表结构的修改
049-MySQL教程-约束作用及常见约束
050-MySQL教程-非空约束
051-MySQL教程-回顾之前内容
052-MySQL教程-唯一性约束
053-MySQL教程-主键约束
054-MySQL教程-主键值自增
055-MySQL教程-外键约束
056-MySQL教程-存储引擎
057-MySQL教程-常见的存储引擎有哪些
058-MySQL教程-MyISAM存储引擎
059-MySQL教程-InnoDB存储引擎
060-MySQL教程-MEMORY存储引擎
061-MySQL教程-34道作业题的第1题
062-MySQL教程-事务概述
063-MySQL教程-事务的原理
064-MySQL教程-事务四大特性
065-MySQL教程-事务的隔离性
066-MySQL教程-演示事务
067-MySQL教程-演示读未提交(上)
067-MySQL教程-演示读已提交(下)
068-MySQL教程-演示串行化读(下)
068-MySQL教程-演示可重复读(上)
069-MySQL教程-索引
070-MySQL教程-视图
071-MySQL教程-数据库数据的导入导出
072-MySQL教程-数据库设计三范式
073-MySQL教程-表的设计经典设计方案
数据库学习技术路线
微信公众号:云计算通俗讲义
持续输出技术干货,欢迎关注!
MySQL技术路线
1. 入门
数据库入门首选要学会基本环境搭建,然后选择一款顺手的图形界面工具,学习各种SQL语句,包括基本建库建表的DDL语句,然后增删改查语句,再掌握了基本的操作之后,需要学会使用一些高级特性,比如视图、存储过程、游标、自定义函数等。
1.1 安装配置
1.2 数据库设计
设计步骤
E-R图
三大范式
1.3 SQL基础
DDL
数据类型
1、整值类型:
整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、INTEGER、BIGINT
浮点数类型:FLOAT、DOUBLE
定点数类型:DEC、DECIMAL
位类型:BIT
2、字符串类型:
CHAR/VARCHAR
BINARY、VARBINARY
TEXT、BLOB
ENUM、SET
3、日期类型选择
DATE、DATETIME、TIMESTAMP、TIME、YEAR
字符集
1、概述
2、Unicode
3、汉字编码
4、字符集选择
5、MySQL字符集
表类型选择
1、存储引擎概述
2、各种存储引擎基本特性
3、如何选择存储引擎
约束
主键约束
<字段名> <数据类型> PRIMARY KEY [默认值]
主键自增长
字段名 数据类型 AUTO_INCREMENT
外键约束
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
唯一约束
<字段名> <数据类型> UNIQUE
检查约束
CHECK <表达式>
默认值
<字段名> <数据类型> DEFAULT <默认值>;
非空约束
<字段名> <数据类型> NOT NULL;
查看约束
SHOW CREATE TABLE <数据表名>;
CREATE
建库:
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
建表:
CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
DROP
DROP DATABASE [ IF EXISTS ] <数据库名>
DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 …]
ALTER
修改库:
ALTER DATABASE [数据库名] {
[ DEFAULT ] CHARACTER SET <字符集名> |
[ DEFAULT ] COLLATE <校对规则名>}
修改表:
ALTER TABLE <表名> [修改选项]
字段:
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
DML
INSERT
INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]
VALUES (值1) [… , (值n) ];
INSERT…SELECT 语句向表中插入其他表的数据
UPDATE
UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]
DELETE
DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
TRUNCATE
TRUNCATE [TABLE] 表名
DQL
基本查询
SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]
别名
<表名> [AS] <别名>
条件查询
WHERE 查询条件
查询条件可以是:
带比较运算符和逻辑运算符的查询条件
带 BETWEEN AND 关键字的查询条件
带 IS NULL 关键字的查询条件
带 IN 关键字的查询条件
带 LIKE 关键字的查询条件
模糊查询
[NOT] LIKE \’字符串\’
范围查找
[NOT] BETWEEN 取值1 AND 取值2
空值查询
IS [NOT] NULL
分组/聚合
GROUP BY <字段名>
过滤分组
HAVING <查询条件>
排序
ORDER BY <字段名> [ASC|DESC]
去重
SELECT DISTINCT <字段名> FROM <表名>;
分页
LIMIT 初始位置,记录数
表连接
内连接
SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]
外连接
左外连接
SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>
右外连接
SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>
交叉连接
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
或
SELECT <字段名> FROM <表1>, <表2> [WHERE子句]
并集
子查询
WHERE <表达式> <操作符> (子查询)
其中,操作符可以是比较运算符和 IN、NOT IN、EXISTS、NOT EXISTS 等关键字。
1)IN | NOT IN
当表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回值正好相反。
2)EXISTS | NOT EXISTS
用于判断子查询的结果集是否为空,若子查询的结果集不为空,返回 TRUE,否则返回 FALSE;若使用关键字 NOT,则返回的值正好相反。
正则表达式
运算符
算数运算符
加(+)、减(-)、乘(*)、除(/,DIV)和模运算(%,MOD)
比较运算符
=、<>/!=、<=>、<、<=、>、>=、BETWEEN、IN、IS NULL、IS NOT NULL、LIKE、REGEXP、RLIKE
逻辑运算符
NOT/!、AND/&&、OR/||、XOR
位运算符
&、|、^、~、>>、<<
运算符优先级
常用函数
字符串函数
CONCAT()、INSERT()、LOWER()、UPPER()、LEFT()、RIGHT()、LPAD()、RPAD()、LTRIM()、RTRIM()、REPEAT()、REPLACE()、STRCMP()、TRIM()、SUBSTRING()
数值函数
ABS()、CEIL()、FLOOR()、MOD()、RAND()、ROUND()、TRUNCATE()
日期和时间函数
CURDATE()、CURTIME()、NOW()、UNIX_TIMESTAMP()、FROM_UNIXTIME()、WEEK()、YEAR()、HOUR()、MINUTE()、MONTHNAME()、DATE_FORMAT()、DATE_ADD()、DATEDIFF()
流程函数
IF、IFNULL、CASE WHEN
其他函数
DATABASE()、VERSION()、USER()、INET_ATON()、INET_NTOA()、PASSWORD()、MD5()
DCL
用户管理
创建用户
CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ] \’password\’ ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] \’password\’ ]]
修改用户
RENAME USER <旧用户> TO <新用户>
其中:
<旧用户>:系统中已经存在的 MySQL 用户账号。
<新用户>:新的 MySQL 用户账号。
删除用户
DROP USER <用户1> [ , <用户2> ]…
其中,用户用来指定需要删除的用户账号。
查看用户权限
在 MySQL 中,可以通过查看 mysql.user 表中的数据记录来查看相应的用户权限,也可以使用 SHOW GRANTS 语句查询用户的权限。
mysql 数据库下的 user 表中存储着用户的基本权限,可以使用 SELECT 语句来查看。SELECT 语句的代码如下:
SELECT * FROM mysql.user;
除了使用 SELECT 语句之外,还可以使用 SHOW GRANTS FOR 语句查看权限。其语法格式如下:
SHOW GRANTS FOR \’username\’@\’hostname\’;
其中,username 表示用户名,hostname 表示主机名或主机 IP。
GRANT
GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] \’password\’]
[, user[IDENTIFIED BY [PASSWORD] \’password\’]] …
[WITH with_option [with_option]…]
REVOKE
REVOKE priv_type [(column_list)]…
ON database.table
FROM user [, user]…
密码管理
修改密码
SET PASSWORD FOR \’username\’@\’hostname\’ = PASSWORD (\’newpwd\’);
重置密码
DPL
BEGIN TRANSACTION
COMMIT
ROLLBACK
1.4 高级特性
MySQL分区
1、什么是分区?
2、分区类型:Range、List、Columns、Hash、Key、子分区
3、分区管理
4、分区与性能
视图
1、什么是视图?
2、视图基本操作:
创建视图
CREATE VIEW <视图名> AS <SELECT语句>
修改视图
ALTER VIEW <视图名> AS <SELECT语句>
删除视图
DROP VIEW <视图名1> [ , <视图名2> …]
查看视图
DESCRIBE 视图名;
或简写成:
DESC 视图名;
存储过程
1、什么是存储过程
2、存储过程基本操作
创建存储过程
CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体> [过程参数[,…] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>
修改存储过程
ALTER PROCEDURE 存储过程名 [ 特征 … ]
删除存储过程
DROP PROCEDURE [ IF EXISTS ] <过程名>
查看存储过程
SHOW PROCEDURE STATUS LIKE 存储过程名;
游标
声明游标
DECLARE cursor_name CURSOR FOR select_statement;
打开游标
OPEN cursor_name;
使用游标
FETCH cursor_name INTO var_name [,var_name]…
关闭游标
CLOSE cursor_name;
绑定变量
定义变量
DECLARE var_name[,…] type [DEFAULT value]
为变量赋值
SET var_name = expr[,var_name = expr]…
自定义函数
CREATE FUNCTION sp_name ([func_parameter[…]])
RETURNS type
[characteristic …] routine_body
触发器
1、什么是触发器
2、触发器基本操作:
创建触发器
CREATE <触发器名> < BEFORE | AFTER >
<INSERT | UPDATE | DELETE >
ON <表名> FOR EACH Row<触发器主体>
删除触发器
DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名>
查看触发器
SHOW TRIGGERS;
全文索引
SQLMode
1、什么是SQL Mode?
2、常见SQL Mode
3、数据迁移中使用SQL Mode
2. 进阶
了解基本SQL操作和高级特性可以基本满足平时开发的需要,但是如果真正从事数据库底层开发,还需要了解这些SQL语句背后的算法,这就涉及索引实现及优化,锁的使用,事务控制,SQL优化。
如果需要掌握一个庞大的数据库系统的操作和运维,还需要掌握主从复制、备份恢复、高可用、基准测试。
2.1 索引
基本操作
创建索引
CREATE (UNIQUE) INDEX indexName ON table_name (column_name);
添加索引
ALTER table tableName ADD (UNIQUE) INDEX indexName(columnName);
删除索引
DROP (UNIQUE) INDEX [indexName] ON mytable;
显示索引
SHOW INDEX FROM table_name;
底层数据结构
二叉树
B树
B+树
索引失效
索引设计原则及优化
锁
锁分类
读锁/写锁
表锁/行锁/页锁
共享锁/排它锁
乐观锁/悲观锁
锁与并发控制
锁
无锁:MVCC
死锁
日志
错误日志
二进制日志
查询日志
慢查询日志
备份恢复
备份恢复策略
逻辑备份与恢复
物理备份与恢复
导入导出
导入
SELECT … INTO OUTFILE
mysqldump
导出
mysql
mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql)
source
source /home/abc/abc.sql # 导入备份数据库
LOAD DATA
LOAD DATA LOCAL INFILE \’dump.txt\’ INTO TABLE mytbl;
mysqlimport
mysqlimport -u root -p –local mytbl dump.txt
事务
什么是事务?
ACID实现原理
事务控制
分布式事务
SQL优化
SQL优化的基本步骤
常用优化策略
服务器优化
磁盘存储优化
应用优化
架构
主从复制
1、主从复制原理
2、启动参数
3、主从切换
MySQL Cluster
高可用
词法解析/语法解析
词语解析
语法解析
语义分析
Lex/yacc
InnoDB存储引擎
体系架构
内存结构
Buffer pool
缓冲池缓存的数据包括Page Cache、Change Buffer、Data Dictionary Cache等,通常 MySQL 服务器的 80% 的物理内存会分配给 Buffer Pool。
Change Buffer
Change buffer 的主要目的是将对 非唯一 辅助索引页的操作缓存下来,以此减少辅助索引的随机IO,并达到操作合并的效果。
Adaptive Hash Index
自适应哈希索引(AHI)查询非常快,一般时间复杂度为 O(1),相比 B+ 树通常要查询 3~4次,效率会有很大提升。innodb 通过观察索引页上的查询次数,如果发现建立哈希索引可以提升查询效率,则会自动建立哈希索引,称之为自适应哈希索引,不需要人工干预,可以通过 innodb_adaptive_hash_index 开启,MySQL5.7 默认开启。
Log Buffer
磁盘结构
段/区/页
表空间
系统表空间
数据字典
Checkpoint
Double Write
Undo
InnoDB File-Per-Table表空间
redo log
事务
隔离级别
ACID
测试
学习数据库,必要的测试工具还是需要掌握的。比如压力测试、稳定性测试等等。
基准测试
测试工具
3. 拓展
学习关系型数据库MySQL,其实还是需要对比着学习一些其他关系型和非关系型数据库,对比它们底层实现原理不同,算法,事务以及应用场景。
这其中包括数据库巨头产品Oracle,因为现在市场占有率还是非常大,如果想要迁移到MySQL,还是需要对Oracle有一个比较系统的了解。而对于现在比较流行的NoSQL,也是需要重点关注的,主要是因为关系型数据库在某些场景不适用,此时Redis等内存数据库可以有效解决,同时二者在应用场景等方面也存在诸多不同。
3.1 Redis
什么是NoSQL?
数据类型
基本操作
持久化
事务
主从复制
集群
3.2 MongoDB
索引
事务
3.3 Hive SQL
4. 推荐书籍
目前我读过质量比较高的MySQL入门和深入学习的书籍有几个,你可以大概参考一下:
编译原理:
龙书,编译器原理的经典之作,但是不需要每个章节都需要深入了解,当作工具书使用就行,大概原理弄懂即可,深究可能很容易糊涂。
词法解析:
这个是市面上不多的讲解词法解析和语法解析的书,介绍的是flex和bison,贴近实际开发,这本书比龙叔要更贴近实践也更易懂。
数据库入门:
网易数据库大牛的著作,讲解比较全面细致,设计基本SQL,索引,锁,备份恢复,主从复制等等。
数据库提升:
这本书讲解的涉及基本语句的实现原理以及应用场景,非常好,可以作为提升。
数据库提升的经典之作,涉及非常知识面非常广泛,包括TPCC测试,主从复制原理,备份恢复,高可用,高并发等等。
存储引擎:
姜承尧老师经典著作,存储引擎底层原理介绍,非常全面详细,对于了解ACID实现原理,MVCC,redo、undo log等等实现原理非常有用,了解存储引擎必备书籍。
索引:
专门讲解索引的原理,优化,讲解的非常好也很实用。
一文了解主流图数据库查询语言|操作入门篇
图数据库已经越来越被人们熟知,同时也在许多企业中得到了应用,但是由于市面上没有统一的图查询语言标准,所以有部分开发者对于不同图数据库的用法存在着疑问。因此本文作者对市面上主流的几款图数据库进行了一番分析,并以查询操作为例进行深入介绍。
文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。
虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数据库为图结构),但不计各自的性能问题,关系型数据库可以通过递归查询或者组合其他 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 个图查询语言进行了简单的介绍,更复杂的语法将在本系列的后续文章中继续,欢迎在论坛留言交流。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。