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 ...
随机推荐
- 并发容器之ConcurrentMap
一.concurentMap 1.数据结构,分段数组segment不扩容,里面的table扩容,每次翻倍,table中放的是entry链表的头地址: 2.初始化 segment和table的长度都是2 ...
- linux 档案权限篇之一
一:预备知识 1.在linux中,任何一个档案都具有.所有者.用户组.其他用户这三种身份的个别权限. 1.所有者:即档案拥有者,由于Linux是多人多任务的系统,因此可能常常会有很多人同时使用这部主机 ...
- ThinkCMF5.1主要特性
更改框架协议为MIT,让你更自由地飞 基于ThinkPHP 5.1重构,但核心代码兼容5.0版本,保证老用户最小升级成本 增加对swoole支持,同时支持swoole协程和全同步模式(请单独安装扩展) ...
- JetBrains 系列软件汉化包 2017.3-2018.1
JetBrains 系列软件汉化包 关键字: Android Studio 3.0-3.1.3 汉化包 CLion 2018.1-2018.2 汉化包 GoLand 2017.3.2-2018.2 汉 ...
- 【转载】flag标志什么?哦,它标志代码馊了
几乎每次在代码中发现flag变量,我总是能嗅到一股馊味.不管你闻没闻到,反正我闻到了. 在代码中,flag通常作为标志变量的名字.但问题在于,不是所有的问题或代码都需要使用这种标志变量,更不是使用标志 ...
- 多线程run()方法是不能够被直接调用的
操作系统线程的五种状态: 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于"可运行 ...
- Vue3的其他属性和API函数
customRef() 自定义Ref函数实现Ref()的相关功能 1 <script> 2 import { ref customRef} from 'vue' 3 4 function ...
- composer出现问题: Could not open input file: composer.phar
可以执行下面命令 php -r "readfile('https://getcomposer.org/installer');" | php This will install c ...
- UML类图及其JAVA的代码实现
推荐 : https://my.oschina.net/u/3635618/blog/3165129 http://www.uml.org.cn/oobject/201104212.asp
- Mybatis中使用级联查询,一对多的查询
一.需求描述 自己在开发一个小程序的过程中,需要做的一个查询是稍微比较复杂的查询,根据用户信息去查询用户所对应的宠物信息. 一个用户可能对应多个宠物,所以在用户和宠物信息的对应关系就是一对多的关系. ...