CQL和SQL的CRUD操作比较

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值