为啥插入和选择查询的结果集不同

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

【讨论】:

所以答案是否定的,在进行插入时无法得到返回的插入数据。

以上是关于为啥插入和选择查询的结果集不同的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 中为结果集生成插入语句

为啥 libsvm 在同一数据集上创建不同的结果

将 select 和 dateadd 函数中的结果集插入到同一个表中

将查询结果集插入数据表的SQL语句怎样写?

为啥 WMI 不会在 ManagementObjectCollection 中返回完整的结果集?

Doctrine ORM,两个不同的查询产生相同的结果集