mysql - 确保表只包含某些字段的唯一值

标签 mysql import duplicates

我有一个这样定义的 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)
);

我希望用 1,000 条记录填充此表,但绝不能将 Unique_Hash/Size 对添加到另一条记录中。相反,我想确保忽略与我现有的 Unique_Hash/Size 值匹配的任何新记录。是 DateAdded 字段破坏了我的 ON DUPLICATE IGNORE 参数。

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

最佳答案

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

在导入数据时,您可以使用 insert ignore ... 语句来忽略插入期间由于唯一索引冲突而收到的任何错误。这些将被报告为警告。

请注意使用 ignore option 的副作用:

Data conversions that would trigger errors abort the statement if IGNORE is not specified. With IGNORE, invalid values are adjusted to the closest values and inserted; warnings are produced but the statement does not abort. You can determine with the mysql_info() C API function how many rows were actually inserted into the table.

关于mysql - 确保表只包含某些字段的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987841/

相关文章:

sql-server - Sqoop 无法从 Sql Server 导入数据

android - 如何在 Android Studio 中修复 'Duplicate classes'

javascript - jquery 与 JavaScript

mysql - 从同一个表中选择两列匹配而第三列不匹配的表

PHP-MYSQLI : Inserting User Error

php - 在 update mysql 命令中使用别名的问题

java - 为什么在我的 Maven 项目上组织导入会导致很多错误?

java - 包含相同包或不同包的类的文件夹

sql-server - 如何防止使用此 UNION 选择(或其他方法)重复

mysql - 使用 BIT_AND 运算符查询 MySQL