在MySQL数据库中禁用单个约束而不删除它

时间:2014-04-16 21:37:12

标签: mysql sql database

我希望禁用许多中的单个唯一键约束而不将其丢弃在MySQL数据库中。有人可以让我知道。

1 个答案:

答案 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可能会完成您想要的任务,但我会非常非常小心。