编辑主键
本文关键字:编辑 | 更新日期: 2023-09-27 18:30:15
如果表仅包含主键字段,是否有办法在 MVC3 中编辑主键。例如,我有一个控制台表,其中我将控制台名称作为主键,我希望能够编辑它并更改它并保存编辑后的值。
如果您需要更多信息,请告诉我。
作为一般规则,切勿编辑主键。SQL Server 中的主键通常具有聚集的唯一索引,因此编辑主键意味着您可能必须重新生成索引(可能不是每次,但取决于倾斜)。
相反,我会创建一个假的主键,例如 SQL Server 中的 IDENTITY 列,并在 Name 列上放置一个 UNIQUE 约束。如果您的表变大,在 int 列上检索项目也比在 varchar() 列上检索要快。
更新:由于我被告知我没有回答这个问题(即使这是公认的答案),因此可以在SQL Server中更改主键值。但从技术上讲,这不是编辑操作,因为引用完整性可能会阻止真正的编辑(我没有尝试过,所以请随意进行自己的实验!
该操作将如下所示:
- 使用新的 PK 值向主表添加新行
- 运行更新操作以将所有 FK 值更改为新的 PK 值
- 删除旧的 PK 行
我也会在事务中运行所有这些。但我要再次声明以记录在案,我不建议采取这种方法。
正如aKzenT指出的那样,在定义主键时,最好始终使用自动编号/身份或序列(Oracle)。对于 b 树处理器来说,查找和连接数字键的效率要高得多,尤其是当文本键长于几个字节时。键越小,需要搜索的 b 树页面就越少。
另一个重要原因是自动生成的密钥无法修改。使用可修改的文本键时,外键必须使用级联更新,许多(例如 Oracle、DB2)RDBMS 不支持声明式,必须使用触发器定义,这非常复杂。
在您的情况下,将文本键替换为自动生成的主键将消除该问题。