数据进行CRUD操作时,CQL语句和SQL语句的异同之处。

1.建表

在此之前先分别创建两张表,插入数据,用来测试然后进行比较

  • 在SQL数据库里面创建表
  • 在CQL数据库里面创建表

2.CRUD语句比较

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

  • Cql

    1.可以看到在Sql里面插入数据,不加字段名可行但在Cql里面不可行(显示有语法错误,不符合Cql语法)
    2.其标准语法格式为

insert into tableName (col1,col2,col3,...) values (v1,v2,v3,...)
  1. 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 , 那就是盲找,这个查询代价非常高。

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

  1. 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 函数来进行查询范围。

最新文章

  1. MVC 验证码实现( 简易版)
  2. C#复习④
  3. GridView控件RowDataBound事件的一个实例
  4. java方法参数
  5. js学习--浏览器对象计时器setInterval()与setTimeout()的使用与区别
  6. [RxJS] Combination operator: withLatestFrom
  7. 11g r2 模拟OCR和voting disk不可用,完整恢复过程,以及一些注意事项
  8. shell编程/字库裁剪(2)——编程过程
  9. Docker之容器
  10. koa2+webSocket 聊天室
  11. SQL 模糊查询(like)
  12. phantomjs 中文文档
  13. 爬虫——BeautifulSoup和Xpath
  14. 用WMI监控IIS
  15. 学习Linux系统中命令的简单方法
  16. python数据类型之内置方法
  17. JOptionPane类提示框常用方法总结
  18. windows 上的 neovim 配置
  19. 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
  20. 库的操作&表的操作

热门文章

  1. Python脚本导出AWS EC2资源清单
  2. JDK1.8源码(八)——java.util.HashMap类
  3. Java基础(四)——抽象类和接口
  4. python打包发布自己的pip项目
  5. Python习题集(八)
  6. ubantu 编译安装xl2tpd笔记
  7. 在C#中使用RSA进行加密和解密
  8. 【转载】小心 int 乘法溢出!
  9. switchery插件:多个按钮,用jquery进行切换
  10. 用tcping检查网站开放的端口