我在我的 Go 应用程序中使用gocql并尝试解决下面描述的问题。
CREATE TABLE IF NOT EXISTS website.users (
id uuid,
email_address text,
first_name text,
last_name text,
created_at timestamp,
PRIMARY KEY (email_address)
);
此查询将覆盖匹配记录,这是 Cassandra 的预期行为。
INSERT INTO users (id, email_address, first_name, last_name, created_at)
VALUES (?, ?, ?, ?, ?)
为了防止覆盖现有记录,我们可以IF NOT EXISTS
在查询结束时使用。
INSERT INTO users (id, email_address, first_name, last_name, created_at)
VALUES (?, ?, ?, ?, ?)
IF NOT EXISTS
但是,我无法知道查询是否影响了数据库中的任何行。不知何故,我需要将“记录存在”消息返回给调用者,但目前不可能。如果有一些特定的东西session.Query(...).Exec()
会很有用,但据我所知没有。
如果没有匹配的记录,我在继续之前考虑SELECT
过,但是您可以猜到这是不可行的,因为当我在之后编辑新记录时,其他一些操作可能已经使用相同的电子邮件地址编辑了新记录。email_address
INSERT
INSERT
SELECT
INSERT
我们如何处理这种情况?