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 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。
这是当前数据库状态的快照。
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
示例
这是显示更新数据之前数据库状态的截图。
这是已执行的 Cassandra Update 命令的快照,该命令更新 Student 表中的记录。
Update University.Student Set name='Hayden' Where rollno=1;
成功执行 Cassandra 中的 'Update Student' 查询后,rollno 为 1 的学生的姓名将从 'Clark' 更改为 'Hayden'。
这是显示更新数据之后数据库状态的截图。
Cassandra 删除数据
DELETE 命令会从 Student 表中删除整行或某些列。删除数据后,不会立即从表中删除。相反,已删除的数据会标记为墓碑,并在压缩后被移除。
语法
Delete from KeyspaceName.TableName Where ColumnName1=ColumnValue
上面的 Cassandra delete row 语法将根据 where 子句中的数据过滤条件删除一行或多行。
Delete ColumnNames from KeyspaceName.TableName Where ColumnName1=ColumnValue
上述语法将从表中删除某些列。
示例
这是显示删除数据之前数据库当前状态的快照。
这是将从 Student 表中删除一行的命令快照。
Delete from University.Student where rollno=1;
成功执行 CQL Delete 命令后,将从 Student 表中删除一行,该行的 rollno 值为 1。
这是显示删除数据之后数据库状态的快照。
Cassandra 不支持的内容
Cassandra 查询语言 (CQL) 存在以下限制。
- CQL 不支持 max、min、avg 等聚合查询
- CQL 不支持 group by、having 查询。
- CQL 不支持 joins。
- CQL 不支持 OR 查询。
- CQL 不支持通配符查询。
- CQL 不支持 Union、Intersection 查询。
- 表列无法在不创建索引的情况下进行过滤。
- 大于 (>) 和小于 (<) 查询仅支持集群列。Cassandra 查询语言由于存在许多限制,不适合进行分析。
Cassandra WHERE 子句
在Cassandra中,数据检索是一个敏感问题。通过在非主键列上创建索引来过滤 Cassandra 中的列。
语法
Select ColumnNames from KeyspaceName.TableName Where ColumnName1=Column1Value AND ColumnName2=Column2Value AND . . .
示例
- 这是显示未过滤数据时从 Student 表检索数据的快照。
select * from University.Student;
从 Student 表中检索了两条记录。
- 这是显示过滤数据时从 Student 表检索数据的快照。检索到了一条记录。
数据按 name 列过滤。检索到所有 name 等于 Guru99 的记录。
select * from University. Student where name='Guru99';