Cassandra 查询语言 (CQL):插入、更新(示例)

插入数据

Cassandra 的 INSERT 语句以行的形式将数据写入 Cassandra 列。Cassandra 的 INSERT 查询将仅存储用户指定的列。您必须指定主键列。

未提供的字段不会占用任何空间。插入后不会返回任何结果。

语法

Insert into KeyspaceName.TableName(ColumnName1, ColumnName2, ColumnName3 . . . .)
values (Column1Value, Column2Value, Column3Value . . . .)

示例

这是已执行的 Cassandra Insert into table 查询的快照,该查询将在 Cassandra 表 ‘Student’ 中插入一条记录。

Insert Data

Insert into University.Student(RollNo,Name,dept,Semester) values(2,'Michael','CS', 2);

成功执行 Insert into Cassandra 命令后,Cassandra 表 Student 将插入一行,其 RollNo 为 2,Name 为 Michael,dept 为 CS,Semester 为 2。

这是当前数据库状态的快照。

Insert Data

Upsert 数据

Cassandra 执行 upsert 操作。Upsert 意味着如果主键不存在,Cassandra 将插入一行;如果主键已存在,则会更新该行。

更新数据

Cassandra UPDATE 查询用于更新 Cassandra 表中的数据。如果更新数据后没有返回结果,则表示数据已成功更新,否则将返回错误。列值在 'Set' 子句中更改,而数据通过 'Where' 子句进行过滤。

语法

Update KeyspaceName.TableName 
Set ColumnName1=new Column1Value,
      ColumnName2=new Column2Value,
      ColumnName3=new Column3Value,
       .
       .
       .
Where ColumnName=ColumnValue

示例

这是显示更新数据之前数据库状态的截图。

Update Data

这是已执行的 Cassandra Update 命令的快照,该命令更新 Student 表中的记录。

Update Data

Update University.Student
Set name='Hayden'
Where rollno=1;

成功执行 Cassandra 中的 'Update Student' 查询后,rollno 为 1 的学生的姓名将从 'Clark' 更改为 'Hayden'。

这是显示更新数据之后数据库状态的截图。

Update Data

Cassandra 删除数据

DELETE 命令会从 Student 表中删除整行或某些列。删除数据后,不会立即从表中删除。相反,已删除的数据会标记为墓碑,并在压缩后被移除。

语法

Delete from KeyspaceName.TableName
	Where ColumnName1=ColumnValue

上面的 Cassandra delete row 语法将根据 where 子句中的数据过滤条件删除一行或多行。

Delete ColumnNames from KeyspaceName.TableName
	Where ColumnName1=ColumnValue

上述语法将从表中删除某些列。

示例

这是显示删除数据之前数据库当前状态的快照。

Cassandra Delete Data

这是将从 Student 表中删除一行的命令快照。

Cassandra Delete Data

Delete from University.Student where rollno=1;

成功执行 CQL Delete 命令后,将从 Student 表中删除一行,该行的 rollno 值为 1。

这是显示删除数据之后数据库状态的快照。

Cassandra Delete Data

Cassandra 不支持的内容

Cassandra 查询语言 (CQL) 存在以下限制。

  1. CQL 不支持 max、min、avg 等聚合查询
  2. CQL 不支持 group by、having 查询。
  3. CQL 不支持 joins。
  4. CQL 不支持 OR 查询。
  5. CQL 不支持通配符查询。
  6. CQL 不支持 Union、Intersection 查询。
  7. 表列无法在不创建索引的情况下进行过滤。
  8. 大于 (>) 和小于 (<) 查询仅支持集群列。Cassandra 查询语言由于存在许多限制,不适合进行分析。

Cassandra WHERE 子句

Cassandra中,数据检索是一个敏感问题。通过在非主键列上创建索引来过滤 Cassandra 中的列。

语法

Select ColumnNames from KeyspaceName.TableName Where ColumnName1=Column1Value AND
	ColumnName2=Column2Value AND
	.
	.
	.

示例

  • 这是显示未过滤数据时从 Student 表检索数据的快照。

Cassandra Where Clause

select * from University.Student;

从 Student 表中检索了两条记录。

  • 这是显示过滤数据时从 Student 表检索数据的快照。检索到了一条记录。

数据按 name 列过滤。检索到所有 name 等于 Guru99 的记录。

Cassandra Where Clause

select * from University. Student where name='Guru99';