在本文中,我们将讨论如何有条件地更新列,并讨论 IF、IF EXISTS 和 IF NOT EXISTS 条件命令如何有助于条件更新。
条件更新非常有用,因为查询将返回 TRUE 或 FALSE 中的结果,并且事务跟在 IF、IF EXISTS 和 IF NOT EXISTS 之后,此类命令适用于 Cassandra 中的轻量级事务。那么,让我们来看看。
如果查询匹配一行,则 IF EXISTS 命令将成功执行,如果该行匹配,则返回结果 TRUE,否则返回 FALSE。让我们通过一个例子来理解。
CREATE TABLE Help_desk
(
User_name text,
Request_id uuid,
Query_description text,
Request_date date,
Primary key(User_name)
);
现在,将一些数据插入 Help_desk。
INSERT INTO Help_desk (Request_id, User_name, Query_description, Request_date )
VALUES (uuid(), 'Ashish', ' App is not working', '2019-12-10');
INSERT INTO Help_desk (Request_id, User_name, Query_description, Request_date )
VALUES (uuid(), 'Rana', ' keyboard is not working', '2019-12-11');
INSERT INTO Help_desk (Request_id, User_name, Query_description, Request_date )
VALUES (uuid(), 'Abi', ' cpu is not working', '2019-12-13');
让我们看看结果。
select *
from Help_desk;
输出:
现在,我们将在这里更新 Help_desk 表。
我们来看一下。
UPDATE Help_desk
SET Query_description = 'Resolve and closed the ticket.'
WHERE User_name = 'Ashish'
IF EXISTS;
在上面的 CQL 查询中,如果该行存在,则返回 true。
让我们看看结果。
输出:
在上面的 CQL 查询中,如果不存在行,则返回 true。
让我们看看结果。
[applied]
-----------
False
UPDATE Help_desk
SET Request_id = uuid()
WHERE User_name = 'Ashish'
IF NOT EXISTS;
使用 IF 条件将测试应用于匹配行中的一个或多个其他(非主键)列值。
现在,我们将在这里对匹配行中的其他列值使用 IF 条件。例如,仅当 Request_id 匹配时才设置新的 UUID。
UPDATE Help_desk
SET Request_id = uuid()
WHERE User_name = 'Rana'
IF Request_id = NULL;
让我们看看结果。
输出:
在这里,我们将检查 IF 条件测试是否为空值,例如:
UPDATE Help_desk
SET Request_id = uuid()
WHERE User_name = 'Rana'
IF Request_id = NULL;
让我们看看结果。
输出:
现在,在这里我们将看到所有更改后的最终表输出。
让我们看看结果。
select *
from Help_desk;
输出:
笔记:
- 在上面的场景中,如果 A 记录匹配并且 Request_id 列没有插入值,我们只是提到了几点。
- 这是第二个观察结果,如果 A 记录匹配并且 Request_id 列有一个值(不为空),则语句失败。
- 如果没有与相应条件匹配的记录,则创建新记录。
注意:在 CQL 查询中,条件更新是轻量级事务的示例,它们会产生不可忽略的性能,这会产生成本并且应该谨慎使用。