当前位置: 首页 > news >正文

达梦管理工具报错“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。”

在使用达梦数据库管理工具时,我们测试过程中时常需要更新表数据,有时为了便捷,会直接使用管理工具修改表数据的值,但偶尔会遇到“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。”的报错,那么这究竟是怎么回事呢。

一、问题复现:

1.创建一张测试表,并插入数据

2.使用SQL查询该表数据

3.修改表数据

在修改表数据的过程中,出现了报错

正常情况下,点击查询结果集这里的“小锁”图标,即可修改数据

但这里点击时,弹出了报错窗口,报错信息为“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。

二、问题分析

根据我们的操作可以确认,查询结果集就是出自同一张表。如果查询结果集确实不是出自同一张表(即实际并非本文中的操作方式,而是几张表关联查询),那一定是不可以用这种方式更新表数据的。

所以,根据其报错提示,该问题主要是由于该表查询的列不唯一,也就是说表中不存在主键、唯一约束、唯一索引,无法确定数据唯一性。

进一步排查,在我们操作管理工具执行更新操作前,打开数据库SQL日志,看看操作管理工具,数据库具体执行了什么操作呢?

通过抓取管理工具操作的SQL,查询SQL日志发现,日志中有这样一段SQL:

格式化该SQL,简单分析下可以得知,该条SQL语句,其实就是看查询的结果集对应的表上是不是有唯一索引(达梦创建唯一键时,会自动创建一条由系统内部维护的唯一索引),且唯一索引在哪些列上。

执行一下该条SQL,该语句对应的参数分别是模式名和表名,根据SQL日志中的PARAMS参数提示,确认两个参数实际为模式名'SYSDBA'和表名'TEST'

实际的查询结果为空。 

那么如果在C1列上创建唯一索引,效果会如何呢?

创建唯一索引的方法有很多,可以创建主键,唯一约束,唯一索引(创建主键和唯一约束时,数据库内部都会创建一个由数据库内部自己维护的唯一索引)。

这里创建主键试试:

ALTER TABLE "SYSDBA"."TEST" ADD PRIMARY KEY("C1");

主键创建完毕,再次执行SQL日志中的那条查询语句,此时已经有结果集了,查询结果显示在SYSDBA模式下的TEST表中C1列上,创建了一个升序排列的唯一索引,索引名为INDEX33649530(该索引由数据库系统自动创建,内部自己维护,用户不可主动删除,删除时会报错“试图删除系统索引”)。当然,如果创建唯一约束和唯一索引,效果是一样的,区别在于如果创建的是唯一索引,这里查询结果显示的就是我们自定义的唯一索引名字了。

此时再去用管理工具执行修改数据的操作,则不会再报错,可以提交并修改成功

再次查询,数据确认已修改

三、注意事项

需要注意:

1.如果在执行SQL查询时,查询结果集中的列必须全部包含创建唯一索引时对应的列,否则则会报错。

如下图中,只有SQL1,SQL4,SQL6,SQL7可以更新表数据(即查询结果集必须包含C1列):

而下图中,只有SQL6,SQL7可以更新表数据(即查询结果集必须包含C1,C3列):

四、解决方法

解决该问题,有以下三种方法可供参考:

(1)添加主键约束

ALTER TABLE "SYSDBA"."TEST" ADD CONSTRAINT PK_TEST_C1 PRIMARY KEY("C1");
或
ALTER TABLE "SYSDBA"."TEST" ADD PRIMARY KEY("C1");

(2)添加唯一约束

ALTER TABLE "SYSDBA"."TEST" ADD CONSTRAINT "CONS_UNI_TEST_C1" UNIQUE("C1");

(3)创建唯一索引

CREATE UNIQUE INDEX "UIDX_TEST_C1" ON "SYSDBA"."TABLE1"("C1");

相关文章:

达梦管理工具报错“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。”

在使用达梦数据库管理工具时,我们测试过程中时常需要更新表数据,有时为了便捷,会直接使用管理工具修改表数据的值,但偶尔会遇到“结果集不可更新,请确认查询列是否出自同一张表,并且包含值唯一的列。”的报…...

TensorFlow2从磁盘读取图片数据集的示例(tf.keras.utils.image_dataset_from_directory)

import os import warnings warnings.filterwarnings("ignore") import tensorflow as tf from tensorflow.keras.optimizers import Adam from tensorflow.keras.applications.resnet import ResNet50#数据所在文件夹 base_dir ./data/cats_and_dogs train_dir os…...

Unity开发过程中的一些小知识点

1、如何查询挂载了指定脚本的游戏物体 可以直接在Hierarchy面板上,搜索想要找的脚本名 2、如何将Unity生成的多个相同游戏物体获得序号 可以使用Unity的API Transform.GetSiblingIndex() 实现。 Transform.GetSiblingIndex()gameobject.idTransform.GetSiblingI…...

大语言模型(LLM)综述(一):大语言模型介绍

A Survey of Large Language Models 前言1. INTRODUCTION2. OVERVIEW2.1 大语言模型的背景2.2 GPT系列模型的技术演变 前言 随着人工智能和机器学习领域的迅速发展,语言模型已经从简单的词袋模型(Bag-of-Words)和N-gram模型演变为更为复杂和…...

在Ubuntu上安装和挂载NFS

在Ubuntu上安装和挂载NFS可以按照以下步骤进行: 安装NFS客户端工具:在Ubuntu上,可以使用以下命令安装NFS客户端工具: shell复制代码 sudo apt-get install nfs-common 创建挂载点:在本地Ubuntu计算机上,…...

Python 实现的简易数据库管理系统 (DBMS)

在这篇文章中,我们将深入探讨如何使用 Python 从头开始实现一个简易的数据库管理系统 (DBMS)。这不是一个生产级的 DBMS,但它为我们提供了一个如何构建数据库系统的基础概念。 1. 数据表的实现 首先,我们定义了一个 Table 类来模拟数据库中…...

1.初识MySQL

初识 MySQL 1.服务器处理客户端请求2.常用存储引擎3.关于存储引擎的一些操作3.1 查看当前服务器程序支持的存储引擎3.2 设置表的存储引擎3.2.1 创建表时指定存储引擎3.2.2 修改表的存储引擎 4.总结 MySQL 默认采用 TCP/IP 的方式来处理客户端与服务器连接过程。 1.服务器处理客…...

【列存储学习总结】

在 OpenGauss 中,列存储是一种高效的数据存储方式,它在处理分析查询和数据仓库工作负载时具有很高的性能优势。列存储将表中的数据按列存储在磁盘上,而不是按行存储,这样可以极大地提高数据读取和分析操作的效率。当涉及大量数据的…...

小记java正则表达式中matcher.find() 和 matcher.matches() 的区别

matcher.find() 顾名思义,find为查找,其功能为查找字符串中是否有符合条件的字串(包含本身),当查找到时即返回true,更多地与matcher.group(int i) 配合使用,用于从字符串中取出特定字串。 mat…...

当中国走进全球化的“深水区”,亚马逊云科技解码云时代的中国式跃升

中国跨境贸易中支付金融与服务领域的综合创新型企业连连国际的联席CEO沈恩光发现,眼下,很多跨境电商的出海方式已发生了变化。几年前,它们还主要借助第三方电商平台,而现在,更多公司开始选择通过自主渠道进入海外市场&…...

零基础Linux_21(多线程)页表详解+轻量级进程+pthread_create

目录 1. 页表详解 1.1 权限条目页框 1.2 页目录页表项 2. 线程的概念 2.1 轻量级进程 2.2 Linux的线程 2.3 pthread_create 2.4 原生线程库LWP和PID 3. 线程的公有资源和私有资源 3.1 线程的公有资源 3.2 线程的私有资源 4. 线程的优缺点 4.1 线程的优点 4.2 线程…...

nodejs+wasm+rust debug及性能分析

文章目录 背景v8引擎自带的profilelinux的perf采集wasm三方库性能分析编译debug版本wasmrust程序debug调试异常模型正常模型结论优化 参考 Node使用火焰图优化CPU爆涨 - 掘金 【Node.js丨主题周】理解perf 与火焰图-腾讯云开发者社区-腾讯云 Easy profiling for Node.js Applic…...

IP证书针对公网IP签发

很多项目应用需要采用IP地址数据桥接访问,这种情况下需要确保数据安全性及信任不被劫持的情况下,需要使用给IP地址增加数字证书进行保护。针对这种情况下我们对公网IP地址申请SSL证书做了详细的介绍,让我们可以更快地了解如何用IP地址去申请S…...

SpringBoot-集成Minio

官方文档:Kubernetes 的 MinIO 对象存储 — MinIO Object Storage for Kubernetes 一、简介 Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频…...

【ML】cheatsheet

LR 原理与面试题目DT, Adaboost, GBDT, xgboost 原理 细节 与 例子 https://www.cnblogs.com/createMoMo/p/12635709.html xgboost挺详细的算法原理与例子 https://zhuanlan.zhihu.com/p/660468945 着重lightgbm就xgboost的改善方向 https://zhuanlan.zhihu.com/p/366952043机器…...

【字符串】【将字符数组转为字符串】Leetcode 122 路径加密

【将字符数组转为字符串】Leetcode 122 路径加密 解法1 在Java中,char数组没有直接的toString()方法来将其转换为字符串。如果你想将char数组转换为字符串,可以使用String类的构造函数来实现: ⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐…...

网络基础知识100问

1.什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2.OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示…...

女孩子就是要打扮漂亮,让童年不留遗憾

好的衣服当然要分享给好看的人啦! 百搭圆领卫衣,经典版型不挑人穿 复合奥利绒面料,罗纹收口设计 时尚百搭怎么穿都好看 单穿内搭都可以 卡通鹅真的好可爱 宝贝穿上去真的元气满满哦...

实现目录数据的上移(up)、下移(down)、置顶(top)、置底(bottom)的操作

ApiOperation("8-15 交接班-标签设置排序")ApiImplicitParams({ApiImplicitParam(name "id", value "id", dataType "string", required true),ApiImplicitParam(name "orgnCode", value "机构代码", dataT…...

Ubuntu 常用命令

文章目录 Linux 目录结构常用命令ls:查看目录内容pwd:查看当前目录绝对路径cd:切换目录mkdir:创建目录rm:删除文件/目录touch:创建空文件mv:移动和重命名文件/目录cp:复制粘贴cat&am…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性&#xf…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...