c# - 删除一行时更新其他行的主键列

标签 c# mysql database

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

  1. 所有后续问题都会向上移动,以便不存在空行。此选项意味着这些问题的问题 ID 将会更改

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

我该如何实现其中的任何一个?事实上,我更喜欢第二种,但如果有人有不同的意见,欢迎。
我正在使用 MySQL 数据库和 C#。

最佳答案

您正在使用数据库,因此不必担心这些问题。

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

行本身存储在页面上,页面可能有也可能没有额外空间来容纳更多行。当您想到空行时,您可能会想到这一点。

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

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

如果您的数据库包含大量事务(删除和插入),那么您可能需要定期重新排列数据,使其更适合页面。不过,通常只有当此类交易量很大时才需要进行此类优化。

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

关于c# - 删除一行时更新其他行的主键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12031029/

相关文章:

c# - 从 AdornerLayout 或 Adorner 或装饰控件访问 AdornerPanel?

Mysql 按多个具有不同值的列进行分组

mysql - Joomla 2.5 : You do not have access to the administrator section of this site

php - 将 bool 字段回显为是/否或其他值

mysql - 如何在 mySQL 中选择没有 Null 的最后一列

mysql - 大数据量数据库设计

mysql - 通过预定义的数据库列表强制完整性

c# - 有没有办法在 .NET 中执行零复制?

c# - IE9 WebBrowser 控件是否支持 IE9 的所有功能,包括 SVG?

c# - 将数据成员添加到 C# 中的现有类