为啥插入和选择查询的结果集不同
Posted
技术标签:
【中文标题】为啥插入和选择查询的结果集不同【英文标题】:Why is the ResultSet not same for insert and select queries为什么插入和选择查询的结果集不同 【发布时间】:2019-07-28 07:40:58 【问题描述】:当我在cassandra
中使用session.execute
时,我注意到ResultSet
的结构对于同一个表是不同的。如果我使用Where
查询表以获取记录,则ResultSet
包含从表中获取的数据。
val resultSet = session.execute(whereClause)
给予
ResultSet[ exhausted: false, Columns[year(bigint), month(bigint),
creation_time_hour(bigint), creation_time_minute(bigint),
question_id(uuid), question_description(varchar)]]
但如果我使用Insert
,我会得到完全不同的东西。
ResultSet[ exhausted: false, Columns[[applied](boolean)]]
这是预期的行为吗?有没有办法在execute
方法返回的ResultSet
的表中获取cassandra
“插入”的数据?
【问题讨论】:
我对 Cassandra 没有任何了解,但 Sql Insert 不会返回任何内容。您可以在插入某些 DBMS 后检索某些内容,例如插入的行数和生成的 PK(如果表中有一个但没有插入实际数据)。 【参考方案1】:通常,INSERT
不会将插入的值返回给用户。触发轻量级事务的插入例外——如果您使用IF NOT EXISTS
。在这种情况下,它可能会返回:
-
单行单列
[applied]
和 true
值 - 这意味着数据已插入;
cqlsh:test> insert into test.u2(id,u) values(5, id:1, t1:3) if not exists;
[applied]
-----------
True
-
单行包含表中对应行的所有值,加上列
[applied]
和 false
值 - 当具有给定主键的行已经存在时会发生这种情况。
cqlsh:test> insert into test.u2(id,u) values(1, id:1, t1:2);
cqlsh:test> insert into test.u2(id,u) values(1, id:1, t1:3) if not exists;
[applied] | id | u
-----------+----+----------------
False | 1 | id: 1, t1: 2
【讨论】:
所以答案是否定的,在进行插入时无法得到返回的插入数据。以上是关于为啥插入和选择查询的结果集不同的主要内容,如果未能解决你的问题,请参考以下文章
将 select 和 dateadd 函数中的结果集插入到同一个表中