gpt4 book ai didi

c# - MySQL - 键 "PRIMARY"的重复条目

转载 作者:行者123 更新时间:2023-11-29 02:16:18 24 4
gpt4 key购买 nike

我有以下情况:

在我的数据库中,我有一个名为Person 的表。一个人有一个ID。在我的概念模型中,student 是从 person 继承的,所以我有另一个名为 Student 的表。

我编写了 C# 代码以插入到 Student 表中:

string query = "INSERT INTO Person (ID, ...) VALUES("id",...);";
MySqlCommand command = new MySqlCommand(query, connection);
command.ExecuteNonQuery();
query = "INSERT INTO Student (..., ID) VALUES(...,"id");";
command.ExecuteNonQuery();

显然,我需要先将值添加到Person 类中,因为每个学生都是一个人。因此,在我这样做之后,我尝试将其余的 Student 数据添加到表中。

问题是我收到这个错误:

Duplicate entry (id) for key "PRIMARY"

我不明白,因为这个 key 需要相同。

最佳答案

异常信息非常清楚:

Duplicate entry (id) for key "PRIMARY"

您在表格上复制 ID。您没有说明这是在哪一行发生的,所以,让我们假设这两种可能性(并且错误不在其他地方)。

  1. 当您尝试插入表 PERSON 时发生异常。

在这种情况下,如果该表的 PRIMARY KEY 是 AUTO INCREMENT,这是不可能的。如果不是,并且您自己插入了记录的 ID,则您的代码没有正确创建 ID,而是插入了表中已存在的值。

要在运行时检查是否是这种情况,只需在实际插入之前选择您要插入的 ID:

string query = "SELECT count(*) FROM Person WHERE ID = " + id;
MySqlCommand command = new MySqlCommand(query, connection);
int count = (int)command.ExecuteScalar();
if (count > 0)
{
//You already inserted this ID. Warn the user
}
  1. 插入表 STUDENT 时出现异常

首先,假设您要插入到此处显示的 STUDENT 中的 ID 不是表 student 的主键,而只是表 PERSON 的 FK(外键)。

在这种情况下,与第 1 项相同的内容适用于此。您在表格中输入了重复的 ID。使用第 1 项中的相同方法来验证这一点。

但是,如果来自 PERSON 的 ID 确实与来自 STUDENT 的 ID 相同(一对一的关系),那有什么问题呢?

一模一样。您正在输入重复的 ID。

因此,无论错误发生在何处,您都允许您的代码尝试在表中插入重复 ID(主键)。

同样,您必须手动创建 ID,因为自动递增主键不会导致此问题(除非您手动设置 ID,在这种情况下 MySQL 将使用此值而不是自动值)。

如果您手动创建 ID,则必须确保它们不重复。

关于c# - MySQL - 键 "PRIMARY"的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39185694/

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