Cassandra CQL 基本命令详解

标签: Cassandra CQL NoSQL Docker 分布式数据库


一、前言

学习 CQL(Cassandra Query Language) 的基本命令,并通过实际操作来熟悉 Cassandra 的数据操作方式。

CQL 的语法与 SQL 非常相似,但底层是基于 Cassandra 的分布式 KV 架构设计的,理解这一点对后续开发至关重要。


二、进入 Cassandra 命令行

2.1 进入容器

bash 复制代码
docker exec -it cassandra /bin/sh

-it 表示以交互式终端进入容器,cassandra 是我们之前启动的容器名称。

2.2 打开 CQL Shell

进入容器后,输入以下命令进入 CQL 交互式命令行:

bash 复制代码
cqlsh

如果看到类似下面的输出,说明连接成功:

复制代码
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 6.1.0 | Cassandra 4.1.0 | CQL spec 3.4.6 | Native protocol v4]
Use HELP for help.
cqlsh>

三、Keyspace(键空间)操作

Keyspace 相当于 MySQL 中的 Database,是 Cassandra 中最顶层的命名空间,用于定义数据的复制策略。

3.1 查看所有 Keyspace

sql 复制代码
DESCRIBE KEYSPACES;

3.2 创建 Keyspace

sql 复制代码
CREATE KEYSPACE IF NOT EXISTS xxx
WITH replication = {
  'class': 'SimpleStrategy',
  'replication_factor': 1
};

参数说明:

  • class: 复制策略,SimpleStrategy 适合单数据中心
  • replication_factor: 副本数,本地测试设为 1,生产环境建议设为 3

3.3 切换 Keyspace

sql 复制代码
USE xxx;

切换后,命令行提示符会变成:

复制代码
cqlsh:xxxx>  //xxx表名

四、表(Table)操作

4.1 创建笔记内容表

在项目中,我们需要存储笔记的正文内容,设计如下:

sql 复制代码
CREATE TABLE IF NOT EXISTS note_content (
    note_id BIGINT PRIMARY KEY,
    content TEXT,
    create_time TIMESTAMP,
    update_time TIMESTAMP
);

设计说明:

  • note_id: 笔记唯一标识,作为分区键(Partition Key)
  • content: 笔记正文,使用 TEXT 类型存储大文本
  • create_time / update_time: 创建和更新时间

4.2 查看表结构

sql 复制代码
DESCRIBE TABLE note_content;

4.3 查看所有表

sql 复制代码
DESCRIBE TABLES;

五、数据增删改查(CRUD)

5.1 插入数据

sql 复制代码
INSERT INTO note_content (note_id, content, create_time, update_time)
VALUES (10001, '今天天气真好,适合去公园散步!', toTimestamp(now()), toTimestamp(now()));

5.2 查询数据

sql 复制代码
-- 查询所有笔记内容
SELECT * FROM note_content;

-- 根据 note_id 查询单条记录
SELECT * FROM note_content WHERE note_id = 10001;

-- 只查询 content 字段
SELECT content FROM note_content WHERE note_id = 10001;

⚠️ 注意 :Cassandra 中 WHERE 条件必须包含分区键,否则需要创建二级索引。

5.3 更新数据

sql 复制代码
UPDATE note_content 
SET content = '更新后的笔记内容...', update_time = toTimestamp(now())
WHERE note_id = 10001;

5.4 删除数据

sql 复制代码
-- 删除指定列
DELETE content FROM note_content WHERE note_id = 10001;

-- 删除整行
DELETE FROM note_content WHERE note_id = 10001;

5.5 清空表(慎用)

sql 复制代码
TRUNCATE note_content;

六、常用 CQL 命令速查表

命令 说明 示例
CREATE KEYSPACE 创建键空间 CREATE KEYSPACE xxx WITH replication = {...}
USE 切换键空间 USE xxx;
DROP KEYSPACE 删除键空间 DROP KEYSPACE xxx;
CREATE TABLE 创建表 CREATE TABLE note_content (...)
DESCRIBE 查看结构 DESCRIBE TABLES;
INSERT 插入数据 INSERT INTO note_content ...
SELECT 查询数据 SELECT * FROM note_content
UPDATE 更新数据 UPDATE note_content SET ...
DELETE 删除数据 DELETE FROM note_content WHERE ...
TRUNCATE 清空表 TRUNCATE note_content;

七、CQL 与 SQL 的核心区别

特性 CQL (Cassandra) SQL (MySQL)
数据模型 宽列存储(分布式 KV) 关系型表结构
连接查询 ❌ 不支持 JOIN ✅ 支持 JOIN
事务支持 仅支持轻量级 BATCH ✅ 完整 ACID
主键作用 决定数据分布位置 唯一性约束
聚合查询 功能有限 功能丰富
扩展性 水平扩展(分布式) 垂直扩展为主

💡 设计建议:在 Cassandra 中,表结构应该根据查询需求来设计(Query-first design),而不是像关系型数据库那样先设计实体关系。


八、总结

本节我们学习了 Cassandra CQL 的基本命令,包括:

  1. ✅ 通过 Docker 进入 Cassandra 容器和 CQL Shell
  2. ✅ Keyspace 的创建、切换和删除
  3. ✅ 表的创建和结构查看
  4. ✅ 数据的增删改查操作
  5. ✅ CQL 与 SQL 的核心差异

九、参考与扩展阅读

如果本文对你有帮助,欢迎点赞 👍、收藏 ⭐、关注 ✅,我们下节见!

相关推荐
Escalating_xu1 小时前
【Linux】线程概念与控制:从地址空间、LWP 到 pthread_create、join、detach 与 NPTL
java·linux·redis
Lam Tang1 小时前
APS 系列文章 09
java·代理模式
evans在进步1 小时前
LeetCode 198:打家劫舍——Java 动态规划详解
java·leetcode·动态规划
2601_963870222 小时前
【计算机毕业设计】基于Spring Boot的考研信息交流平台的设计与实现
java·spring boot·后端
大模型丫丫2 小时前
Spring Boot 入门指南:从零开始构建你的第一个应用
java·spring boot·后端
拾光Ծ2 小时前
Linux五种I/O模型与fcntl非阻塞控制
java·linux·服务器·i/o模型
半旧5182 小时前
【Java Web02】WEB服务器内部实现技术揭秘
java·服务器·前端
gis开发之家2 小时前
日志怎么打才专业?Spring Boot 4 日志体系与 Logback 配置(生产级实战)
java·spring boot·后端·logback
SaaS发言人2 小时前
渠道数字化解决方案横评:谁更懂快消
java·大数据·人工智能