我希望禁用许多中的单个唯一键约束而不将其丢弃在MySQL数据库中。有人可以让我知道。
答案 0 :(得分:2)
有两种方法可以回答这个问题......
如果您的目标是存储唯一的数据(除了一个案例,这是一个例外),那你就不走运了。表的唯一键约束正是......表的唯一键约束。将重复的密钥存储在一个唯一的密钥列中是行不通的。
现在,如果您正在尝试加速数据插入,因为您已经知道您的数据是唯一的,那就是另一回事了。在这种情况下,您可以设置unique_checks = 0,插入数据,然后重新打开
这描述了这个过程:http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_unique_checks
引用:
如果设置为1(默认值),则唯一性将检查二级索引 执行InnoDB表。如果设置为0,则存储引擎是 允许假设输入数据中不存在重复键。 如果您确定您的数据不包含唯一性 违规,你可以将此设置为0,以加快大表导入 InnoDB的。
请注意,将此变量设置为0不需要存储引擎 忽略重复的键。仍允许发动机检查 如果它们检测到它们并发出重复键错误。
换句话说,你可以告诉你的数据库相信你没有插入带有重复键的数据......它仍然可以检查,当你有一个唯一的键约束时,你当然不能在表中存储重复的键。 。但是你可能会加快插入速度。
是的,我不知道你有什么方法可以禁用特定列的唯一密钥检查,尽管我不能肯定地说这是不可能的。也就是说,我不知道(而且我也不相信)有任何方法可以忽略许多特定列的检查......但我不能肯定地说它严格来说是不可能的。根据您的实际需求(除了禁用密钥而不删除密钥,而不是为什么您需要在不删除密钥的情况下禁用该密钥),您也可以使用在DUPLICATE KEY(https://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html)上。或者INSERT IGNORE可能会完成您想要的任务,但我会非常非常小心。