我一直在阅读http://godoc.org/github.com/gocql/gocql,但是我不知道如何插入--如果不是与gocql一起存在的话。
它说,
函数(*查询) ScanCAS 函数(q *查询) ScanCAS(dest ...interface{}) (应用布尔,错误) ScanCAS执行轻量级事务(即包含IF子句的UPDATE或INSERT语句)。如果事务由于现有值不匹配而失败,则前面的值将存储在dest中。
当我跑的时候
cluster := gocql.NewCluster("127.0.0.1")
cluster.Keyspace = "example"
cluster.Consistency = gocql.Quorum
session, _ := cluster.CreateSession()
defer session.Close()
var mapQ map[string]interface{}
var inserted bool
var id gocql.UUID
var timeline, text string
// insert a tweet
isTrue, err := session.Query(`INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST`,
"hermano", gocql.TimeUUID(), "good night").
ScanCAS(); if err != nil {
log.Println(err)
}
fmt.Println(timeline, id, text)
fmt.Printf("%+v\n", isTrue)
fmt.Printf("%+v\n", inserted)
fmt.Printf("%+v\n", mapQ)我得到:
Failed parsing statement: [INSERT INTO tweet (timeline, id, text) VALUES (?, ?, ?) IF NOT EXIST] reason: ArrayIndexOutOfBoundsException -1
所以我的问题是:
发布于 2018-06-25 17:45:40
我的理解是:
如果在gocql中不存在,实际如何插入?你们能给我举个例子吗?
由于要执行的LWT首先需要从Cassandra读取数据并决定是否应该插入/更新该值,ScanCAS将返回1)是否应用此LWT的更改;2)如果不应用,ScanCAS将返回Cassandra中的现有值。因此,在ScanCAS中,您应该尝试读取要插入的相同类型的数据。
如何做好适当的ScanCAS?
类似于问题1。
是什么让MapScanCAS和ScanCAS与众不同?我不明白作者说的是哪一列错配
我认为作者的意思是很容易弄乱扫描返回的值/列的顺序,所以可以使用MapScanCAS来避免这个问题。
发布于 2016-02-03 04:35:47
看起来像一个错误,您应该使用“如果不存在”
https://stackoverflow.com/questions/26847930
复制相似问题