vertica主键列能插入重复值的处理办法

news2024/10/6 0:36:20
问题描述

开发同事反馈在vertica中创建含主键列的表中插入重复数据时没有进行校验,插入重复值成功。经过测试着实可以插入重复值,这个坑有些不一样。
创建表和插入语句如下:

--创建表
CREATE TABLE dhhtest(
    ID VARCHAR(64) PRIMARY KEY 
);
--插入语句  不报错
insert into dhhtest values('1');
insert into dhhtest values('1');

--查询  发现2条语句
select * from dhhtest;
分析过程

百度没有相关的博客,最后只好硬着头皮去

查表约束是否启用

is_enabled显示f 未启用

SELECT constraint_name, column_name, constraint_type, is_enabled FROM PRIMARY_KEYS WHERE table_
name IN ('dhhtest');
constraint_name | column_name | constraint_type | is_enabled
-----------------+-------------+-----------------+------------
C_PRIMARY | id | p | f
查看数据库参数

表可以指定 Vertica 是否自动强制执行主键、唯一键或使用关键字 ENABLED 或 DISABLED 检查约束。如果省略 ENABLED 或DISABLED,则 Vertica 通过检查相应的配置参数:
image.png

查看创建表和约束语法
--创建表中Table-Constraint语法

[ CONSTRAINT constraint-name ]
{
... PRIMARY KEY (column[,... ]) [ ENABLED | DISABLED ]
... | FOREIGN KEY (column[,... ] ) REFERENCES table [ (column[,...]) ]
... | UNIQUE (column[,...]) [ ENABLED | DISABLED ]
... | CHECK (expression) [ ENABLED | DISABLED ]
}

--创建约束语法
ALTER TABLE table_name ADD CONSTRAINT constraint-name PRIMARY KEY (column) ENABLED;
解决办法
解决办法1_更改数据库参数
#查主键约束默认不启用 默认值0 (false/disabled)
SELECT GET_CONFIG_PARAMETER('EnableNewPrimaryKeysByDefault');
#查唯一键约束默认不启用 默认值0 (false/disabled)
SELECT GET_CONFIG_PARAMETER('EnableNewUniqueKeysByDefault');

#主键约束默认不启用改为默认启用
SELECT SET_CONFIG_PARAMETER('EnableNewPrimaryKeysByDefault', 1);  
#唯一键约束默认不启用改为默认启用
SELECT SET_CONFIG_PARAMETER('EnableNewUniqueKeysByDefault', 1);
解决办法2_更改SQL
方案1
CREATE TABLE dhhtest(
    ID VARCHAR(64) PRIMARY KEY 
);
ALTER TABLE public.dhhtest ADD CONSTRAINT pk_dhhtest PRIMARY KEY (ID) ENABLED;


方案2
CREATE TABLE dhhtest(
    ID VARCHAR(64) PRIMARY KEY ENABLED
);

查看约束是否启用,t启用
SELECT constraint_name, column_name, constraint_type, is_enabled FROM PRIMARY_KEYS WHERE table_
name IN ('dhhtest');
constraint_name | column_name | constraint_type | is_enabled
-----------------+-------------+-----------------+------------
C_PRIMARY | id | p | t
补充下主键概念
  • 概念

主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。

  • 作用:

1)保证实体的完整性;
2)加快数据库的操作速度
3)在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

  • 特点:

1)一个表中只能有一个主键。如果在其他字段上建立主键,则原来的主键就会取消。在ACCESS中,虽然主键不是必需的,但最好为每个表都设置一个主键。
2)主键的值不可重复,也不可为空(NULL)。
3)主键值不能被重用
提示:虽然并不总是需要主键,但是多数数据库设计者都会保证他们创建的每个表具有一个主键,以便以后的数据库的操作和管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1297422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年度AI投资策略报告:AI三要素共振,AIGC云到端加速推进

今天分享的AI系列深度研究报告:《2024年度AI投资策略报告:AI三要素共振,AIGC云到端加速推进》。 (报告出品方:中国银河证券研究院) 报告共计:103页 核心观点:行业热度将持续,积极把…

Git版本控制---入门学习

1.简介 是一个免费的开源分布式版本控制系统工具,旨在快速高效地处理从小型到大型的所有项目。 它是由 Linus Torvalds 在2005年创建的,用于开发 Linux 内核。 Git具有大多数团队和开发人员所需的功能、性能、安全性和灵活性。 它还用作重要的分布式版本…

深度学习——第3章 Python程序设计语言(3.8 深度学习框架PyTorch)

3.8 深度学习框架PyTorch 目录 1. PyTorch简介 2. PyTorch的安装 3. PyTorch相关资源 4. 张量 5. 自动求导 6. 并行计算简介 7. AI硬件加速设备 PyTorch简介 PyTorch是由Meta AI(Facebook)人工智能研究小组开发的一种基于Lua编写的Torch库的Python实现的深度学习库&…

Gemini 能够拯救的谷歌吗?

没有人会记住第二个登上月球的人,除了他自己。 谷歌现在处于尴尬的地位,在 2022 年之前,他以 Chrome Google 搜索确立搜索领域绝对霸主之位,全球市场份额高达 90% 之多,FireFox、Opera 等等浏览器都难以匹敌。而随着 …

枚举 LeetCode2048. 下一个更大的数值平衡数

如果整数 x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n ,请你返回 严格大于 n 的 最小数值平衡数 。 如果n的位数是k,n它的下一个大的平衡数一定不会超过 k1个k1…

JS中的模糊查询功能

什么是模糊查询 模糊查询是指可以在不明确指定查询条件的情况下,自动查找与指定字符串相似的内容。例如,我们在搜索引擎中输入关键字时,就会出现相关的搜索结果,这就是利用了模糊查询功能。 在JS中,我们可以利用一些…

Python:核心知识点整理大全9-笔记

目录 ​编辑 5.2.4 比较数字 5.2.5 检查多个条件 1. 使用and检查多个条件 2. 使用or检查多个条件 5.2.6 检查特定值是否包含在列表中 5.2.7 检查特定值是否不包含在列表中 banned_users.py 5.2.8 布尔表达式 5.3 if 语句 5.3.1 简单的 if 语句 5.3.2 if-else 语句 …

中间件系列 - Redis入门到实战(基础篇)

前言 1.学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 2. 本内容仅用于个人学习笔记,如有侵扰,联系删除 3. 本章学习目标: 初始Redis 认识NoSQL认识Redi…

SpringCloud Gateway

目录 一、gateway简介二、gateway快速入门2.1 引入依赖2.2 编写启动类2.3 编写基础配置和路由规则 三、断言工厂四、过滤器工厂4.1 路由过滤器的种类4.2 请求头过滤器4.3 默认过滤器 五、全局过滤器5.1 全局过滤器作用5.2 自定义全局过滤器5.3 过滤器执行顺序 六、跨域问题6.1 …

超越极限!如何进行高效分布式性能测试,让Jmeter揭示并发下系统的真正实力

一、为什么要进行分布式性能测试 当进行高并发性能测试的时候,受限于Jmeter工具本身和电脑硬件的原因,无法满足我们对大并发性能测试的要求。 基于这种场景下,我们就需要采用分布式的方式来实现我们高并发的性能测试要求。 二、分布式性能测…

短视频ai剪辑分发矩阵系统源码3年技术团队开发搭建打磨

如果您需要搭建这样的系统,建议您寻求专业的技术支持,以确保系统的稳定性和安全性。 在搭建短视频AI剪辑分发矩阵系统时,您需要考虑以下几个方面: 1. 技术实现:您需要选择适合您的需求和预算的技术栈,例如使…

调用win32 api获取电脑名字和系统目录

学习一下几个函数的功能,和调用方式; void CBasenameView::OnDraw(CDC* pDC) {CBasenameDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;TCHAR myname1[50], myname2[50], mydirname1[50], myd…

大学生有担当,乡村振兴新亮点“艺术点亮乡村,创意引领未来”

12月7日上午,由花都区文化馆(区非物质文化遗产保护中心)指导,广州工商学院主办,广州工商学院国际教育学院承办,花都区文化馆炭步分馆、广州盛美文化传播有限公司协办的广州工商学院国际教育学院视觉传达设计…

更改 Mac 所使用网络服务的顺序

如果以多种不同的方式(例如使用 Wi-Fi 或以太网)接入互联网或网络,你可以更改连接时电脑所尝试的网络连接顺序。 如果有多个活跃的连接,电脑会首先尝试列表顶部的连接,然后按降序尝试其他连接。 你不能更改虚拟专用网…

学习记录---kubernetes动态卷使用---storageClass及驱动安装(nfs驱动)

一、简介 kubernetes中,在存储层面,我们常用到的两个资源是pv和pvc,其中pv是实际创建出来的一致性卷,我们可以通过pv将容器中的数据进行持久化保存,而pvc则可以理解为pod使用pv的中间控制器,通过pvc将pv绑…

电商平台商品销量API接口,30天销量API接口接口超详细接入方案说明

电商平台商品销量API接口的作用主要是帮助开发者获取电商平台上的商品销量信息。通过这个接口,开发者可以在自己的应用或网站中实时获取商品的销量数据,以便进行销售分析、库存管理、市场预测等操作。 具体来说,电商平台商品销量API接口的使…

二百一十一、Flume——Flume实时采集Linux中的Hive日志写入到HDFS中(亲测、附截图)

一、目的 为了实现用Flume实时采集Hive的操作日志到HDFS中,于是进行了一场实验 二、前期准备 (一)安装好Hadoop、Hive、Flume等工具 (二)查看Hive的日志在Linux系统中的文件路径 [roothurys23 conf]# find / -name…

地址栏不安全提示

在使用浏览器时访问网站的时候,我们可能会遇到地址栏提示不安全的情况。这种情况通常都是是由于未安装有效SSL证书或者网站SSL证书过期等原因导致的。本文将介绍如何处理地址栏提示不安全的问题,以确保我们的上网安全。 1,缺少SSL证书&#x…

【接口技术】实验4:定时器与计数器

实验4 定时器与计数器实验 一、实验目的 1:掌握8253的计数特点和编程方法。 2:掌握8253各类工作方式的基本工作原理。 3:掌握PC机中断处理系统的基本原理。 4:学会编写中断服务程序。 二、实验内容 1:8254计数器…