Mysql 确保表仅包含特定字段的唯一值
我定义了一个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条记录填充此表,但不应在另一条记录中添加唯
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的组合描述为唯一性的要求。你的回答与你自己的问题不一致。