2017-10-12 68 views
0

我是Cassandra的新手。鉴于我希望能够通过account_id排序,独特的插入如何工作?使用IF NOT EXISTS的主键和聚簇列的UNIQUE插入

E.g.

INSERT INTO测试(电子邮件,活动,ACCOUNT_ID,密码,姓名,电话)VALUES(?,?,?,?,?,?)IF NOT EXISTS

我会假设,如果该电子邮件已经存在于数据库中我会收到一个“应用错误”。但是,如果电子邮件存在,并且account_id不同,我会发现另一行插入到数据库中。

当有主键和聚簇列时,如何使用IF NOT EXISTS执行LWT。我只希望插入仅在主键不存在时适用。我不想让逻辑包含主键+集群列。

CREATE TABLE test.testing (
    email text, 
    account_id uuid, 
    password text, 
    name frozen <name>, 
    active boolean, 
    phone map<text, frozen <phone>>, 
    PRIMARY KEY ((email), account_id); 

回答

1

对于您在帖子中提到的用例,您希望每个电子邮件ID只有一行。

如果这是你想要的,那么你必须从主键中删除account_id。

那么电子邮件将只在您的架构中的partition_key。

Cassandra不支持在非群集列上进行排序,因此按照account_id对查询进行排序,您可以在此之上触发用户触发,也可以在后端进行排序。

+0

这是有道理的。要明确您是否正在使用成为主键一部分的群集列。 – patbaker82