CQL和SQL的CRUD操作比较
数据进行CRUD操作时,CQL语句和SQL语句的异同之处。
1.建表
在此之前先分别创建两张表,插入数据,用来测试然后进行比较
- 在SQL数据库里面创建表

- 在CQL数据库里面创建表

2.CRUD语句比较
- 两者的语法类似,CQL 类似 SQL 查询语法的子集和变种,但cql受数据类型、分布式架构的限制
- 具体CRUD操作
- C(create)
Sql

Cql

1.可以看到在Sql里面插入数据,不加字段名可行但在Cql里面不可行(显示有语法错误,不符合Cql语法)
2.其标准语法格式为
insert into tableName (col1,col2,col3,...) values (v1,v2,v3,...)
- R(retrieve)
Sql



Cql


Cassandra 支持的查询语句很严格,首先 partition key 必须精确查询,不然会出现错误(需要加 Allow Filtering)
需要加 Allow Filtering 的情况
- 缺少 partition key 的等值过滤条件

- 对普通列值过滤

- 范围查询后跟精确查询

要求用allow filtering, 为啥呢 ?官方的解释是:
ALLOW FILTERING will probably become less strict as we collect more statistics on our data. For example, if we knew that 90% of entries have no king we would know that finding 10 such entries should be relatively inexpensive.
加了ALLOW FILTERING 后,cassandra会根据已经创建好的统计表,查询那些NODE 上最有可能有king这个cluster, 然后到最有可能的node上去找满足条件的entries。 如果没有加ALLOW FILTERING , 那就是盲找,这个查询代价非常高。
- U(update)
Sql


Cql
更新数据的语法为
update [keyspace_name.] table_name
[using ttl time_value | using timestamp timestamp_value]
set assignment [,assignment,...]
[if exists | id condition [and condition]];


update语句不能更新主键
其原因在于,因为主键列在底层数据结构中作为行键存储,如果改变行键,则需要遍历所有相关的键值对,并进行更新,这相当于进行了数据查询、数据删除和新行插入,开销可能很大。
- D(delete)
Sql

删除一列数据

Cql


由于Cassandra的每一个逻辑行由多个键值对构成,因此在删除时,既可以选择删除一个逻辑行,也可以只删除该行中的某几个键值对(Sql不能),Sql支持删除整个列。
官网关于删除语句的语法

3.总结
CQL与 SQL 的主要差异:不支持在 select 中使用 as 关键字为列增加别名。只能根据 objectId(where objectId=xxx)和其他条件来更新或者删除某个文档。不支持 join,关联查询提供 include、relatedTo 等
语法来替代(关系查询)。仅支持部分 SQL 函数(内置函数)。不支持 group by、having、max、min、sum、distinct 等分组聚合查询语法。不支持事务。不支持锁。模糊查询的方式不同,sql有like、_、%来进行模糊查询,而cql有一个集合过滤contrains。
Cassandra是基于partition key 的hash分布数据,所以不支持范围查询,允许在partition key 的字段上面利用token 函数来进行查询范围。
CQL和SQL的CRUD操作比较的更多相关文章
- LINQ to SQL的CRUD操作
创建数据对象模型 sqlmetal /code:"C:\MyProjects\VS2008\Data\LinqConsoleApp2\LinqConsoleApp2\northwnd.cs& ...
- 数据库CRUD操作以及MyBatis的配置使用
• 业务字段设计 • 数据库创建 • CRUD操作 • MyBatis集成 • 注解和XML定义 • ViewObject和DateTool • 首页开发 • 业务字段设计 实体: name: ...
- 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- MongoDB的CRUD操作
1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- 使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
随机推荐
- 为开源项目 go-gin-api 增加后台任务模块
目录 任务管理界面 (WEB) 任务调度器 任务执行器 小结 推荐阅读 任务管理界面 (WEB) 支持在 WEB 界面 中对任务进行管理,例如:新增任务.编辑任务.启用/禁用任务.手动执行任务 等. ...
- mybatis动态sql以及分页
1.mybatis动态sql 2.模糊查询 3.查询返回结果集的处理 4.分页查询 5.特殊字符处理 1.mybatis动态sql If.trim.foreach If 标签判断某一字段是否为空 &l ...
- WEB漏洞——PHP反序列化
序列化 首先说说什么是序列化 序列化给我们传递对象提供了一种简单的方法.serialize()将一个对象转换成一个字符串,并且在转换的过程中可以保存当前变量的值 而反序列化unserialize()将 ...
- Tars | 第2篇 TarsJava SpingBoot启动与负载均衡源码初探
目录 前言 1. Tars客户端启动 @EnableTarsServer 2. Communicator通信器 3. 客户端的负载均衡调用器LoadBalance 最后 前言 通过源码分析可以得出这样 ...
- scrum项目冲刺_day05总结
摘要:今日完成任务. 1.语音识别完成 2.搜索功能实现了从数据库中的查询 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成) 3.垃圾搜索 ...
- Shell系列(22)- 字符截取命令awk
简介 awk是一个数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个"字段"来处理 awk的流程是依次读取每一行数据,读取完一行数据后,进行条件判断 ...
- PHP-设计模式之-中介者模式
<?php//中介者模式 -- //抽象中介者abstract class UnitedNationa{ punlic abstract function Declared($message,c ...
- jzoj4496-[GDSOI2016]互补约数【莫比乌斯反演】
正题 题目链接:https://gmoj.net/senior/#main/show/4496 题目大意 给出\(n\),定义 \[f(i)=\sum_{d|i}gcd(d,\frac{i}{d}) ...
- Redis之品鉴之旅(六)
持久化 快照的方式(RDB) 文件追加方式(AOF) 快照形式: save和bgsave能快速的备份数据.但是.........., Save命令:将内存数据镜像保存为rdb文件,由于redis是单线 ...
- 深入浅出WPF-07.Property(属性)
依赖属性 1)字段与属性:字段被封装在实例中,要么能够被外界访问(非Private),要么不能够被外界访问(Private).但是我们直接把数据暴露给外界的做法不安全,容易把错误的数据写入字段.于是我 ...