gpt4 book ai didi

mysql - 无法插入重复键 : MySQL to SQL server

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:06 24 4
gpt4 key购买 nike

假设我们有以下数据 block (SQL 表):

Col-A Col-B Col-C Col-D
1 1 1 1
1 1 1 2
1 1 1 3
2 2 2 4
2 2 2 5

在 MySQL 中,表定义为:

CREATE TABLE `my_table` (
`Col-A` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`Col-B` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`Col-C` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`Col-D` INT(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`Col-A`, `Col-B`, `Col-C`),
KEY `my_index` (`Col-D`) USING BTREE
);

我需要将 MySQL 数据库转换为 SQL Server。这是我的初步尝试:

CREATE TABLE my_table (
Col-A INT NOT NULL DEFAULT(0),
Col-B INT NOT NULL DEFAULT(0),
Col-C INT NOT NULL DEFAULT(0),
Col-D INT NOT NULL DEFAULT(0),
CONSTRAINT my_pk PRIMARY KEY NONCLUSTERED (Col-A, Col-B, Col-C)
)

CREATE INDEX my_idx ON my_table(Col-D)

当我尝试导入数据时(我使用 bcp),出现以下错误:

Cannot insert duplicate key ... The duplicate key is (1, 1, 1)

我怀疑 my_pkmy_idx 定义有问题。有任何指示或建议吗?

最佳答案

你知道主键的定义吗?

http://en.wikipedia.org/wiki/Primary_key

In the relational model of database design, a unique key or primary key is a set of attributes whose values uniquely define the characteristics of each row.

当 Col-A + Col-B + Col-C 的组合唯一时,您违反了主键约束,因此 SQL 服务器不允许这样做。

您的选择是:

  1. 扩展 PK 以包括 Col-D
  2. 放弃 PK 并在 Col-A、Col-B 和 Col-C 上使用(聚类或非聚类)索引
  3. 修复数据,使其不违反 PK 约束(删除记录或更改/更正不正确的记录)
  4. 添加 synthetic (or surrogate) key (参见 mrjoltcola's answer)

选择哪个选项取决于您并取决于您的要求。我们无法仅根据您问题中的信息为您解答。

为什么 MySQL 首先允许这些数据进入那里... *耸耸肩* MySql 是一个“有趣”的野兽。也许在数据已经在表中之后添加了 PK 约束,也许它是一个非常旧的版本,也许您使用的是 MyISAM 而不是 InnoDB。我不确定是哪一个,但这些原因中的每一个(或它们的组合)都是一个很好的猜测,或者至少在某个时间/版本之前是不错的猜测。无论哪种方式:它不应该是可能的(即使后来添加了 PK 约束;MySQL 应该拒绝添加它,因为表中的数据是冲突的)但是 MySQL 有,并且确实有, 它有自己奇怪的推理这些事情的方式。如果我没记错的话,严格模式会有所帮助,但我不记得它是只适用于 InnoDB 表还是适用于 MyISAM 等。无论哪种方式;那天他们把它弄得一团糟;我(或你)不必担心记住底层 MyISAM/InnoDB/Whatevs 等的差异,或者哪个特定版本允许(不)发生什么,或者你是否需要严格模式或不需要这个或那个像 PK 这样的基本东西才能正常工作*

* 每个 RDBMS 都有它的怪癖;我确信某些开关/切换/设置/whatevs 有充分的理由来调整一些细节,我是说 PK 无论如何都应该是 PK。

关于mysql - 无法插入重复键 : MySQL to SQL server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24703818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com