繁体   English   中英

在不删除MySQL db的情况下禁用单个约束

[英]Disabling single constraint in MySQL db without dropping it

我想禁用一个唯一的唯一键约束,而不将其删除到MySQL数据库中。 有人可以让我知道。

有两种方法可以回答这个问题.....

如果您的目标是存储唯一的数据(除了一种情况,这是一个例外),那么您就不走运了。 一个表的唯一键约束就是...。表的唯一键约束。 并且将重复的键存储在唯一的键列中是行不通的。

现在,如果因为已经知道数据是唯一的而试图加快数据插入速度,那就是另一回事了。 在这种情况下,您可以设置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不需要存储引擎忽略重复的键。 仍然允许引擎检查它们并在检测到它们时发出重复密钥错误。

换句话说,您可以让数据库信任您,您不会使用重复的键插入数据...它仍然可以进行检查,并且在存在唯一键约束的情况下,您当然不能在表中存储重复的键。 但是,您可以以此来加快插入速度。

顺便说一句,我不知道您可以禁用特定列的唯一键检查的任何方式,尽管我不能肯定地说这是不可能的。 也就是说,我不知道(而且我也不相信有任何方法)忽略许多特定列中的特定检查...但是我不能肯定地说严格地说这是不可能的。

根据您的实际需求(除了禁用密钥而不删除它,而是为什么需要禁用该密钥而不删除它),您也许还可以使用ON DUPLICATE KEY( https:// dev。 mysql.com/doc/refman/5.6/en/insert-on-duplicate.html )。 另外,INSERT IGNORE可能会完成您想要的,但是我会非常小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM