使用IF NOT EXISTS的主键和聚簇列的UNIQUE插入
问题描述:
我是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);
答
对于您在帖子中提到的用例,您希望每个电子邮件ID只有一行。
如果这是你想要的,那么你必须从主键中删除account_id。
那么电子邮件将只在您的架构中的partition_key。
Cassandra不支持在非群集列上进行排序,因此按照account_id对查询进行排序,您可以在此之上触发用户触发,也可以在后端进行排序。
这是有道理的。要明确您是否正在使用成为主键一部分的群集列。 – patbaker82