首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在sql insert时抑制唯一键检查

如何在sql insert时抑制唯一键检查
EN

Stack Overflow用户
提问于 2019-01-07 22:42:46
回答 1查看 58关注 0票数 0

我有一个包含一些表的MySQL数据库。

在其中一个表中,我想通过SQL脚本插入一些新行。

不幸的是,我必须在两列中插入一个空字符串,这两列是该表的唯一键的一部分。

因此,我尝试在插入之前和之后设置UNIQUE_CHECKS,但由于重复条目而出现错误。

下面是表的定义:

代码语言:javascript
运行
复制
CREATE TABLE `Table_A` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `number` varchar(25) DEFAULT NULL,
  `changedBy` varchar(150) DEFAULT NULL,
  `changeDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`,`number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

以及导致错误的INSERT语句:

代码语言:javascript
运行
复制
SET UNIQUE_CHECKS = 0;
INSERT INTO `Table_A`
(`name`, `number`, `changedBy`, `changeDate`)
SELECT DISTINCT '', 'myUser', CURRENT_TIMESTAMP
FROM Table_A
AND id NOT IN
(
    SELECT DISTINCT id
    FROM Table_A
);
SET UNIQUE_CHECKS = 1;

如您所见,我使用的是UNIQUE_CHECKS。

但正如我所说的,这不能正常工作。

任何帮助或建议都将不胜感激。

帕特里克

EN

回答 1

Stack Overflow用户

发布于 2019-01-07 22:49:51

关闭insert操作的唯一键并不表示它将只检查在您再次打开它之后发生的操作的唯一性。这只是意味着数据库在关闭时不会浪费时间检查约束,但当您再次打开它时,它会检查约束。

这意味着您需要确保该列在具有唯一键列中具有唯一值,然后才能启用它。你不会这么做的。

如果您希望以某种方式保持在某个时间点之后插入的新记录的唯一性,则需要创建触发器并手动检查新记录与现有数据的关系。更新可能也是如此。但我不建议这样做-您可能应该重新设计数据,这样要么唯一键不在那里,要么数据对于所有记录来说都是真正唯一的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54076515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档