Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除行时更新其他行的主键列_C#_Mysql_Database - Fatal编程技术网

C# 删除行时更新其他行的主键列

C# 删除行时更新其他行的主键列,c#,mysql,database,C#,Mysql,Database,在我的数据库中,有一个表,其中基本上包含问题及其选项和答案。第一个字段是~questionid~并且是主键,正如预期的那样(我现在已经禁用了自动增量)。我的客户可能想删除一些问题。这给我留下了两个选择: 所有后续问题都向上移动,以便不存在空行。此选项意味着这些问题将更改其问题id 保持原样,这样会有空行。如果有新条目,它应该填充第一个空行 我如何着手实施其中任何一项?事实上,我更喜欢第二种,但如果有人有不同的意见,欢迎。 我使用的是MySQL数据库和C#。我不确定您是如何实现的。我会这样做的

在我的数据库中,有一个表,其中基本上包含问题及其选项和答案。第一个字段是~questionid~并且是主键,正如预期的那样(我现在已经禁用了自动增量)。我的客户可能想删除一些问题。这给我留下了两个选择:

  • 所有后续问题都向上移动,以便不存在空行。此选项意味着这些问题将更改其问题id

  • 保持原样,这样会有空行。如果有新条目,它应该填充第一个空行

  • 我如何着手实施其中任何一项?事实上,我更喜欢第二种,但如果有人有不同的意见,欢迎。

    我使用的是MySQL数据库和C#。

    我不确定您是如何实现的。我会这样做的

      questions
         question_id - pk
         question
    
      answers
         answer_id - pk
         answers
    
      question_answer
          question_id
          answer_id
    

    这将提供更多的优势。许多问题都会有相同的答案。如果一个问题可以删除,那么将其连同答案一起从问答表中删除。您使用的是数据库,因此不必担心这些问题

    SQL表中没有“空”行的概念(可以说,如果所有列都为NULL,则该行为空,但这与此无关)。SQL表中的行不是固有的顺序

    行本身存储在页面上,页面上可能有也可能没有额外的空间容纳更多行。当你想到空行时,这可能就是你所想的

    删除行时,数据不会重新排列。页面上只有一些额外的空间,以防以后添加新行。如果在两个现有行之间添加一个主键为的新行,并且页面已满,则数据库会将页面“拆分”为两个。另外两页有额外的空间

    然而,重要的一点不是它是如何工作的。在应用程序中使用关系数据库的一个原因是,您可以添加和删除行,而不必担心它们的实际物理存储

    如果您有一个包含大量事务(删除和插入)的数据库,那么您可能希望定期重新排列数据,以便更好地适应页面。然而,这种优化通常只有在此类事务量很大时才有必要

    不过有一件事。您的应用程序不应该依赖于主键是连续的,因此它可以正确地处理删除