MySQL通过插入避免数据重复

MySQL通过插入避免数据重复,mysql,Mysql,我正在使用mysql 每个月我上传一个txt文件,创建一个表,然后,在启动查询以查询结果之后,我想将新行添加到一个更大的表中,该表保存一年中的所有月份 我每月创建的表始终保持相同的结构 我已经试验过,在启动查询后,将INSERT插入table_name语句,所有行都有效地插入到较大的表中,但问题是,如果我忘记了一个月前我已经上传了数据,并且我再次处理它,那么没有过滤器,行将再次插入,我将发现它们重复 有没有办法避免这种情况 在这两个表上我都不使用主键。在分类为唯一的列上设置唯一索引。然后使用插入

我正在使用mysql

每个月我上传一个txt文件,创建一个表,然后,在启动查询以查询结果之后,我想将新行添加到一个更大的表中,该表保存一年中的所有月份

我每月创建的表始终保持相同的结构

我已经试验过,在启动查询后,将INSERT插入table_name语句,所有行都有效地插入到较大的表中,但问题是,如果我忘记了一个月前我已经上传了数据,并且我再次处理它,那么没有过滤器,行将再次插入,我将发现它们重复

有没有办法避免这种情况


在这两个表上我都不使用主键。

在分类为唯一的列上设置唯一索引。然后使用插入忽略而不是插入我理解你的问题

使用文件的md5值在表中添加一列

在上传之前,请检查刚刚计算的md5值是否至少存在于表中的一行中,如果存在,请不要上传

md5可以保证您具有非常好的独特性


干杯

我会写在评论中,但是链接太多,所以太长了

您只需要实现键/约束并重新创建表(重新运行创建表脚本)

查看这些链接



如果不想使用主键,请使用唯一约束。

独特(column1,column2,column3,…,columnLast)

为什么不使用主键?主键对于这样的东西非常重要。您可能想开始使用它们。两行是否可能相同,但月份不同?每行都存储时间戳吗?在create table语句中添加Unique(TIMESTABLE column)将解决此问题。如果目标是,则没有
主键的表或具有
Unique
索引的列将很麻烦。在DBMS land中,没有PK的桌子并不是真正的桌子。这个解决方案就像用右臂抓你的左耳,然后伸到你的头上。唯一的约束或主键可以解决问题。数据库软件可以防止输入重复项,不需要给更高的应用程序或dba增加负担。我不声明上面的值不能用作主键。它是每个人用来识别单个文件的工具!当SHA1可用时,MD5是相当无用的。我们真的想继续吗?你关心安全吗?也许是SHA-2?或者我们想帮助解决问题?你的解决方案会奏效的。但我认为最明显的问题是数据库接受了坏数据。它不应允许插入重复项,也不应因人为错误而中断。修复他的大表将防止两次上载同一文件时出错。如果他的文件名不一致,哈希值会不会不同?文件上的md5散列也会散列元数据,不是吗?