Mysql 确保表仅包含特定字段的唯一值

Mysql 确保表仅包含特定字段的唯一值,mysql,import,duplicates,ignore,Mysql,Import,Duplicates,Ignore,我定义了一个MYSQL表: CREATE TABLE Data ( ID BIGINT(20) NOT NULL AUTO_INCREMENT, Unique_Hash BINARY(16) NOT NULL, Size BIGINT(20) NOT NULL, DateAdded DATETIME NOT NULL, PRIMARY KEY (ID), INDEX (Unique_Hash) ); 我希望用1000条记录填充此表,但不应在另一条记录中添加唯

我定义了一个MYSQL表:

CREATE TABLE Data (
   ID BIGINT(20) NOT NULL AUTO_INCREMENT,
   Unique_Hash BINARY(16) NOT NULL,
   Size BIGINT(20) NOT NULL,
   DateAdded DATETIME NOT NULL,
   PRIMARY KEY (ID),
   INDEX (Unique_Hash)
);
我希望用1000条记录填充此表,但不应在另一条记录中添加唯一的\u散列/大小对。相反,我希望确保与我现有的Unique_Hash/Size值匹配的任何新记录都被忽略。这是DateAdded字段,它在重复忽略参数时打断了我的设置


如何安全地将数据导入此表,以确保我的记录相对于我的唯一散列和大小字段是唯一的?

在唯一散列和大小字段上创建多列唯一索引。这肯定会阻止将具有相同数据的任何条目插入表中

导入数据时,可以使用
insert ignore…
语句忽略由于唯一索引冲突而在插入过程中收到的任何错误。这些将作为警告报告

请注意使用以下产品的副作用:

如果发生以下情况,将触发错误的数据转换将中止语句 未指定忽略。使用“忽略”,将无效值调整为 最接近的值和插入值;发出警告,但 语句不中止。您可以使用mysql_info()C API函数实际插入到表中的行数


在unique_散列和Size字段上创建多列唯一索引。这肯定会阻止将具有相同数据的任何条目插入表中

导入数据时,可以使用
insert ignore…
语句忽略由于唯一索引冲突而在插入过程中收到的任何错误。这些将作为警告报告

请注意使用以下产品的副作用:

如果发生以下情况,将触发错误的数据转换将中止语句 未指定忽略。使用“忽略”,将无效值调整为 最接近的值和插入值;发出警告,但 语句不中止。您可以使用mysql_info()C API函数实际插入到表中的行数


您可以在表中添加索引,以确保两列的唯一性条件:

ALTER TABLE `Data` ADD UNIQUE `Unicity` (`Unique_Hash`, `Size `);
根据此说明,您的配对在表中是唯一的(不能插入重复配对)。如果尝试插入重复对,将出现以下错误:

#1062 - Duplicate entry 'XXX-XXXX' for key 'Unicity' 
另一个解决方案是在插入之前消除重复对。 为此,您可以使用例如 前谷歌精炼。我曾经为这类任务使用过它,我得到了一些非常好的结果


我希望它会对您有所帮助。

您可以在表中添加一个索引,以确保两列的唯一性条件:

ALTER TABLE `Data` ADD UNIQUE `Unicity` (`Unique_Hash`, `Size `);
根据此说明,您的配对在表中是唯一的(不能插入重复配对)。如果尝试插入重复对,将出现以下错误:

#1062 - Duplicate entry 'XXX-XXXX' for key 'Unicity' 
另一个解决方案是在插入之前消除重复对。 为此,您可以使用例如 前谷歌精炼。我曾经为这类任务使用过它,我得到了一些非常好的结果


我希望它会对你有所帮助。

以下是我所做的,似乎解决了我的问题:

我(重新)将我的表格定义为:

创建表数据( ID BIGINT(20)非空自动增量, 唯一\u散列二进制(16)不为空, 大小BIGINT(20)不为空, 添加日期s/DATETIME/TIMESTAMP/默认值s/NOT NULL/CURRENT_TIMESTAMP/, 主键(ID), s/索引/唯一键/(唯一散列) );

现在我可以导入以下数据:

将忽略插入数据(唯一\u散列,大小)选择散列作为唯一\u散列,大小来自临时


现在,这会自动添加“当前时间”字段,并防止从我的临时表导入重复数据。

以下是我所做的,似乎解决了我的问题:

我(重新)将我的表格定义为:

创建表数据( ID BIGINT(20)非空自动增量, 唯一\u散列二进制(16)不为空, 大小BIGINT(20)不为空, 添加日期s/DATETIME/TIMESTAMP/默认值s/NOT NULL/CURRENT_TIMESTAMP/, 主键(ID), s/索引/唯一键/(唯一散列) );

现在我可以导入以下数据:

将忽略插入数据(唯一\u散列,大小)选择散列作为唯一\u散列,大小来自临时


现在,这将自动添加当前\u时间字段,并防止从我的临时表中导入重复项。

否,这将不仅防止根据您在问题中的定义添加重复项,因为您只将唯一\u哈希字段定义为唯一索引,而在问题中,您将unique_hash和size的组合描述为唯一性的要求。您的答案与您自己的问题不一致。不,这不仅会防止根据您在问题中的定义添加重复项,因为您只将unique_hash字段定义为unique index,而在问题中,您将unique_hash和size的组合描述为唯一性的要求。你的回答与你自己的问题不一致。