首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我在表中看到两个列的值都是重复的,即使我正在使用一个Set?

在表中看到两个列的值都是重复的,即使使用了一个Set,可能是因为以下原因:

  1. 数据类型不匹配:Set是一种集合数据结构,它只能存储唯一的元素。如果表中的列是不同的数据类型,即使使用了Set,也无法去除重复值。确保表中的列与Set的数据类型匹配。
  2. Set的使用方式不正确:Set是一种无序的集合,它不会保留元素的插入顺序。如果你希望保留插入顺序并去除重复值,可以考虑使用LinkedHashSet。另外,Set的去重是基于元素的equals()和hashCode()方法,确保你的元素类正确实现了这两个方法。
  3. 数据插入重复:即使使用了Set,如果在插入数据时没有进行去重操作,仍然会导致表中出现重复值。在插入数据之前,先判断Set中是否已经存在该值,如果存在则不进行插入操作。
  4. 数据库查询问题:如果使用数据库查询语句获取表中的数据,并将其存储到Set中,可能是查询语句有问题导致重复值。请检查查询语句是否正确,并确保查询结果中没有重复数据。

综上所述,要解决表中出现重复值的问题,可以检查数据类型是否匹配、使用正确的集合类型、在插入数据时进行去重操作,并确保数据库查询语句正确无误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【MySQL】说透锁机制(三)行锁升锁如何避免? 锁了如何排查?

这里是针对于默认事务隔离级别:可重复读(RR)事务隔离级别来说, 因为RR隔离级别下,需要解决不可重复读 和幻读问题, 所以遍历扫描聚集索引记录时, 为了防止扫描过索引被其它事务修改(不可重复读问题...对于索引失效几个常见场景简单说明一下: 复合索引未遵循最左前缀原则 例如,新建一个复合索引:abc 和 name,如下: ALTER TABLE `lock_test`....结果一算,发现走索引还不如全扫描快, 那么这时即使你用是索引等值 也不会走索引,会走全扫描,这也就导致了索引失效!...此时, 咱们已经清楚知道了 可能造成 行锁升场景,那么应对起来也就更有底气了,建议是: 禁止where条件使用无索引进行更新/删除 这是我们最应该做到!...请求锁id blocking_trx_id 阻塞事务id blocking_lock_id 阻塞锁id 这里模拟一个锁等待,然后查询,可以清晰看到谁阻塞了谁 温馨提示:只有发生锁等待才有数据

2.1K21

Oracle压缩黑科技(三):OLTP压缩

而另一方面,我们看到Oracle也极力将解压比例降至最低——通过只扩展那些包含正在更新标记。...每次测试之后,我们通过查看user_tables获得结果如下: 我们可以看到最明显一点是,对于OLTP压缩pctfree默认与非压缩表相同都是10(这就解释了为什么很多情况下,我们看到是...然后我们必须解释“heap block compress”和“HSC OLTP inline compression”表现,这两个记录都是1521。...一个有十九个标记覆盖了11个连续,这意味着“真实”行一个字节表示11数据 。 如果只是更新这些一个,Oracle会将一个字节扩展为全11!...不幸是,看到很多应用程序,每个都有一个名字像last_updated_by,这个重复,但很可能随时间而改变。

2.4K70
  • MySQL优化底层逻辑

    数据与索引关系要想知道使用索引为什么要有那么多注意事项和原则,我们需要先了解一下数据和索引关系。接下来通过一个简单例子,说明一下B+Tree索引存储数据具体实现。...goods这些数据B+Tree逻辑结构如下图可以看到非叶子节点上只存放了主键,而叶子节点存放了主键对应整行数据,这种索引又叫「聚簇索引」 也叫「主键索引」 。...这里为goods_no、goods_name创建一个普通索引后,数据在这个索引逻辑结构如下图可以看到普通索引每个非叶子节点键值存放是索引数据,而叶子节点不仅存放了索引数据,还存放了对应主键值...,那么优化器就会忽略索引直接全扫描,因为这种情况下即使通过索引定位数据,也会因为索引重复去访问大部分数据页,加上维护索引以及访问索引开销,这样下来还不如直接去访问数据页。...当优化器看到WHERE条件中有OR关键字时,会看前后两个字段是否都是索引,因为OR含义就是两个只要满足一个即可,所以只要有一个不是索引就会进行全扫描。

    40531

    SqlAlchemy 2.0 中文文档(五十四)

    为什么推荐 LIMIT 中使用 ORDER BY(特别是 subqueryload() )? 如何映射没有主键?...几乎所有情况下,确实有所谓 候选键,它是一或一系列,可以唯一标识一行。如果一张真的没有这个,而且有实际完全重复行,那么该就不符合 第一范式,也不能被映射。...收到了一个关于“隐式组合 X 属性 Y 下”警告或错误 这种情况指的是映射包含两个,这两个由于它们名称而被映射到同一属性名称下,但没有迹象表明这是有意。...映射类需要为每个要存储独立属性指定明确名称;当两个具有相同名称并且没有消歧义时,它们就会落入同一个属性下,效果是从一个被复制到另一个,取决于哪个首先分配给属性。...## 正在使用会话重新加载数据,但它没有看到我在其他地方提交更改 关于这种行为主要问题是,会话行为就像事务处于可串行化隔离状态一样,即使事务并不是(通常情况下并不是)。

    13010

    MySQL深入学习第三篇 -事务隔离:为什么你改了还看不见?

    重复读是指,一个事务执行过程中看到数据,总是跟这个事务启动时看到数据是一致。当然重复读隔离级别下,未提交变更对其他事务也是不可见。 4....假设数据 T 只有一,其中一行为 1,下面是按照时间顺序执行两个事务行为。...这时候事务 B 虽然还没有提交,但是结果已经被 A 看到了。因此,V2、V3 也都是 2。 2. 若隔离级别是“读提交”,则 V1 是 1,V2 是 2。事务 B 更新提交后才能被 A 看到。...那什么时候需要“可重复读”场景呢?我们来看一个数据校对逻辑案例。 假设你管理一个个人银行账户一个存了账户余额,一个存了账单明细。...这里我们展开说明“可重复读”。 MySQL ,实际上每条记录在更新时候都会同时记录一条回滚操作。记录上次最新,通过回滚操作,都可以得到前一个状态

    35320

    SQL语句逻辑执行过程和相关语法详解

    因此,建议TOP/LIMIT和ORDER BY一起使用。但即使如此,仍是不安全。例如,ORDER BY中有重复,那么TOP/LIMIT时候如何决定获取哪些行呢?...假如DISTINCT消除了部分列重复,最终将只返回一条重复记录,而如果使用非select_list排序,将要求返回一条重复记录同时还要返回每个重复对应多条记录以便排序,而在要求范式关系是无法整合这样结果...下面是分组后经过加工结构: 其中第一是分组得到结果,把它和原数据结合在一起了。注意,这是一个不符合关系模型范式要求结构。...关于GROUP BY,有以下两个问题: 1.为什么分组之后涉及到对组操作时只允许返回标量值? 标量值即单个,比如聚合函数返回就是标量值。...例如,分组后对"Java"班返回了一个汇总值,假如同时要使用sid和name,因为这两没有被聚合或分组,因此只能为这两每个返回一行,也就是说返回汇总标量值同时还要求返回"Java"班组每一行

    3.6K20

    MySQL实战第三讲 -事务隔离:为什么你改了还看不见?

    重复读是指,一个事务执行过程中看到数据,总是跟这个事务启动时看到数据是一致。当然重复读隔离级别下,未提交变更对其他事务也是不可见。 4. ...假设数据 T 只有一,其中一行为 1,下面是按照时间顺序执行两个事务行为。...这时候事务 B 虽然还没有提交,但是结果已经被 A 看到了。因此,V2、V3 也都是 2。 2. 若隔离级别是“读提交”,则 V1 是 1,V2 是 2。事务 B 更新提交后才能被 A 看到。...那什么时候需要“可重复读”场景呢?我们来看一个数据校对逻辑案例。 假设你管理一个个人银行账户一个存了账户余额,一个存了账单明细。...这里我们展开说明“可重复读”。 MySQL ,实际上每条记录在更新时候都会同时记录一条回滚操作。记录上次最新,通过回滚操作,都可以得到前一个状态

    24120

    数据库四大特性及数据库隔离级别

    不可重复读 不可重复读是指对于数据库某个数据,一个事务执行过程多次查询返回不同查询结果,这就是事务执行过程,数据被其他事务提交修改了。...不可重复读同脏读区别在于,脏读是一个事务读取了另一未完成事务执行过程数据,而不可重复读是一个事务执行过程,另一事务提交并修改了当前事务正在读取数据。 3....虚读(幻读) 幻读是事务非独立执行时发生一种现象,例如事务T1批量对一个某一为1数据修改为2变更,但是在这时,事务T2对这张插入了一条为1数据,并完成提交。...幻读和不可重复都是读取了另一条已经提交事务(这点同脏读不同),所不同是不可重复读查询都是一个数据项,而幻读针对是一批数据整体(比如数据个数)。...这种隔离级别也支持所谓“不可重复读”。这意味着用户运行同一个语句两次,看到结果是不同

    80810

    MySQL实战45讲 笔记

    如果发现即使 where 条件带上了索引,优化器走还是全扫描,这时我们就要使用 force index([index_name]) 告诉优化器使用哪个索引。...可重复读是指,一个事务执行过程中看到数据,总是跟这个事务启动时看到数据是一致。当然重复读隔离级别下,未提交变更对其他事务也是不可见。...InnoDB 索引模型 InnoDB 都是根据主键顺序以索引形式存放,这种存储方式称为索引组织。...你可以想象一下,如果一个查询正在遍历一个数据,而执行期间另一个线程对这个结构做变更,删了一,那么查询线程拿到结果跟结构对不上,肯定是不行。...这里再次说明一下,我们上面的所有案例都是重复读隔离级别 (repeatable-read) 下验证

    69510

    第16章_多版本并发控制

    个人主页:shark-Gao 个人简介:大家好,是 shark-Gao,一个想要与大家共同进步男人 目前状况:23 届毕业生,目前某公司实习 ❤️欢迎大家:这里是 CSDN,总结知识地方,欢迎来到我博客...换言之,就是为了查询一些正在被另一个事务更新行,并且可以看到它们被更新之前,这样 在做查询时候就不用等待另一个事务释放锁。...,它聚簇索引记录中都包含两个必要隐藏。...查询得到结果是重复,记录 c 都是 张三 ,这就是 可重复含义。...每一次进行普通 SELECT 操作前都会生成一个 ReadView REPEATABLE READ 只第一次进行普通 SELECT 操作前生成一个 ReadView,之后查询操作都重复 使用这个

    14430

    Mysql进阶垫脚石 -- 到底什么是数据库事务?

    重复读:一个事务执行过程中看到数据,总是跟这个事务启动时看到数据是一致。当然重复读隔离级别下,未提交变更对其他事务也是不可见。...假设数据 T 只有一,其中一行为 1,下面是按照时间顺序执行两个事务行为。...想你可能会问那什么时候需要“可重复读”场景呢?我们来看一个数据校对逻辑案例。 假设你管理一个个人银行账户一个存了每个月月底余额,一个存了账单明细。...这里我们展开说明“可重复读”。 MySQL ,实际上每条记录在更新时候都会同时记录一条回滚操作。记录上最新,通过回滚操作,都可以得到前一个状态。...如图中看到视图 A、B、C 里面,这一个记录分别是 1、2、4,同一条记录在系统可以存在多个版本,就是数据库多版本并发控制(MVCC)。

    76820

    用 Python 写一个 NoSQL 数据库

    主键被定义为唯一不可重复. 也就是说, 带有某一指定 VIN 车辆至多只能出现一次. 这一点非常重要,为什么? 来看一个例子: Relations 假设我们正在经营一个汽车修理业务....也就是说,如果把 Black 2014 Lexus RX 350 修整 10 次的话, 那么即使 Make, Model, Year 和 Color 这些信息并不会改变,每一次仍然重复记录了这些信息...它还包括了其他一些信息, 比如哪些可以为空, 哪些不允许有重复, 以及其他对表所有限制信息。...我们还需要决定是否每一行都要求该必须有一个。 通常情况下, 让一个列有是十分有道理, 但是这么做的话可能会需要一些我们无法轻易获得信息(比如数据库每个用户年龄)。...记住, Python , 函数可以被认为是一个,并且可以像其他任何一样被存储一个 dict 。 在上面的代码, 虽然有些命令请求参数相同,但是仍决定分开处理每个命令。

    84030

    mysql事务回滚机制概述「建议收藏」

    在当前事务确实能看到插入记录,最后只不过被删除了,但是auto_increament不会删除而是改变 为什么auto_increament没有回滚:因为innodb存储引擎auto_increment...最大,然后将这个放到auto_increment计数器,所以ROLLBACK MYSQLauto_increment计数器也不会做负运算 事务分为哪些种:扁平事务,带有保存点扁平事务...MYSQL中使用事务: MYSQL命令行命令下事务都是自动提交,即执行Sql语句就会马上执行COMMIT操作。...然后事务T2新插入 一行记录,这行记录恰好可以满足T1所使用查询条件WHERE子句条件。然后T1又使用相同查询再次对表进行检索, 但是此时却看到了事务T2刚才插入新行。...mysql事务回滚怎样实现代码可以参考此bolg:http://bbs.csdn.net/topics/390876901 要同时修改数据库两个不同时,如果它们不是一个事务的话,当第一个修改完

    2.6K10

    数据库两大神器【索引和锁】

    平衡树:它是一棵空树或它左右两个子树高度差绝对不超过1,并且左右两个子树都是一棵平衡二叉树。 如果一棵普通极端情况下,是能退化成链表(树优点就不复存在了) ?...创建多索引也涉及到了一种特殊索引-->覆盖索引 我们前面知道了,如果不是聚集索引,叶子节点存储是主键+ 最终还是要“回”,也就是要通过主键再查找一次。...比如,FROM_UNIXTIME(create_time) = '2016-06-06' 就不能使用索引,原因很简单,B+树存储都是数据字段,但是进行检索时,需要把所有元素都应用函数才能比较...写写阻塞:当前用户修改数据,其他用户不能修改当前用户正在修改数据,会加锁! ? 从上面已经看到了:读锁和写锁是互斥,读写操作是串行。 如果某个进程想要获取读锁,同时另外一个进程想要获取写锁。...每次读取都是当前最新版本! Repeatable read避免不可重复读是事务级别的快照!每次读取都是当前事务版本,即使被修改了,也只会读取当前事务版本数据。

    1.7K00

    用 Python 写一个 NoSQL 数据库

    主键被定义为唯一不可重复. 也就是说, 带有某一指定 VIN 车辆至多只能出现一次. 这一点非常重要,为什么? 来看一个例子: Relations 假设我们正在经营一个汽车修理业务....也就是说,如果把 Black 2014 Lexus RX 350 修整 10 次的话, 那么即使 Make, Model, Year 和 Color 这些信息并不会改变,每一次仍然重复记录了这些信息...它还包括了其他一些信息, 比如哪些可以为空, 哪些不允许有重复, 以及其他对表所有限制信息。...我们还需要决定是否每一行都要求该必须有一个。 通常情况下, 让一个列有是十分有道理, 但是这么做的话可能会需要一些我们无法轻易获得信息(比如数据库每个用户年龄)。...记住, Python , 函数可以被认为是一个,并且可以像其他任何一样被存储一个 dict 。 在上面的代码, 虽然有些命令请求参数相同,但是仍决定分开处理每个命令。

    80690

    原 GetHashCode重写指南(译文)

    但是, 为什么每个对象都要求能在哈希插入自己哈希呢?要求每一个对象能够做到似乎是一个奇怪事情。...一个集合可能需要执行许多操作, 但两个基本运算是集合插入一个新项, 并检查给定项是否 set 。我们希望这些操作能够快速进行, 即使该集合很大。...如果一个hash对象hash改变了,很明显包含方法将不能正常工作,你把这个对象放到5号桶,然后hash突变,使用contain方法判断对象是否存在时,它就到74号桶里查找,自然是找不到...对象可能会超出你预料放进hash,许多linq操作内部都是使用hashlinq操作不要做危险可能会导致hash改变操作。...这是很常见结合一起异或他们,但这未必是一件好事。假设您有一个数据结构,其中包含发送地址和家庭地址字符串。即使单个字符串哈希算法是非常好,如果存在大量两个字符串相同对象,这些对象

    1.1K60

    Python后端技术栈(六)--数据库

    key 是由多个来组成,比如 a,b,c 三个可以理解为组成一个(a,b,c)元组。...尤其是枚举,一共才几个,创建什么索引,完全没有必要~ 3.索引长度不要太长(比较耗费时间) 作为索引 B + Tree 是以 key 形式存在,为什么主键索引要使用自增 int 呢?...InnoDB 辅助索引其实是叶子节点中保存一个主键,查找时候先找到主键,然后根据主键找到数据。这就是为什么 InnoDB 中使用辅助索引要慢一些。...(0.01 sec) 1.6.3.3外连接 外连接包含两种,一种是左连接,一种是右连接: 1.左连接返回左中所有记录,即使没有匹配记录 2.右连接返回右中所有记录,即使没有匹配记录...Sorted Set 为了简化实现,使用了 skiplist 而不是平衡树实现。我们通过上图来了解一下跳跃原理: 可以看到它有三层。

    81420

    MySQL读取记录和我想象不一致——事物隔离级别和MVCC

    ReadView它没有物理结构,作用是事务执行期间用来定义“看到什么数据”。...4.2.2 REPEATABLE READ —— 一个事务第一次读取数据时生成一个ReadView   按照可重复定义,一个事务启动时候,能够看到所有已经提交事务结果。...也就是说REPEATABLE READ隔离级别下,事务两次查询得到结果是一样。记录name都是’刘备’,这就是为什么RR下,不会出现不可重复理由。...从上图可以看到回滚段里都是之前事务修改过记录,事务提交后该记录旧版本就不需要了,所以只有当开启回滚段以来所有事务都提交时候,回滚段就可以删除。 为什么不推荐使用长事务?   ...事务隔离是怎么通过ReadView(读视图)实现? 并发版本控制(MVCC)概念是什么, 是怎么实现? 使用长事务弊病? 为什么使用长事务可能拖垮整个库? 怎么查询各个长事务?

    39210

    深入理解 MySQL—锁、事务与并发控制

    即使一个并没有设置任何索引,这种时候 innoDB 会创建一个隐式聚集索引(primary Key),然后在这个聚集索引上加锁。...因为该范围内所有现有之间间隙都是锁定。 对于使用唯一索引来搜索唯一行语句 select a from ,不产生间隙锁定。...最简单情况下,如果一个事务正在插入,那么其他任何事务必须等待向该插入它们自己,以便由第一个事务插入行接收连续主键值。...INNODB MVCC 通常是通过每行数据后边保存两个隐藏来实现(其实是三,第三是用于事务回滚,此处略去),一个保存了行创建版本号,另一个保存了行更新版本号(上一次被更新数据版本号)...不可重复读:简单来说就是一个事务读取数据可能产生变化,ReadCommitted 也称为不可重复读。 同一事务,多次读取同一数据返回结果有所不同。

    86520

    深入理解 MySQL ——锁、事务与并发控制

    即使一个并没有设置任何索引,这种时候 innoDB 会创建一个隐式聚集索引(primary Key),然后在这个聚集索引上加锁。...因为该范围内所有现有之间间隙都是锁定。 对于使用唯一索引来搜索唯一行语句 select a from ,不产生间隙锁定。...最简单情况下,如果一个事务正在插入,那么其他任何事务必须等待向该插入它们自己,以便由第一个事务插入行接收连续主键值。...INNODB MVCC 通常是通过每行数据后边保存两个隐藏来实现(其实是三,第三是用于事务回滚,此处略去),一个保存了行创建版本号,另一个保存了行更新版本号(上一次被更新数据版本号)...不可重复读:简单来说就是一个事务读取数据可能产生变化,ReadCommitted 也称为不可重复读。 同一事务,多次读取同一数据返回结果有所不同。

    73110
    领券