【问题标题】:Can not modify Primary Key field using an online SQL Table Editor无法使用在线 SQL 表编辑器修改主键字段
【发布时间】:2017-06-22 15:29:33
【问题描述】:

我尝试了 2 种不同的在线 sql 表编辑器,

通用表格编辑器 & 表格智能编辑器

使用上述工具查看数据库时,如果我的表中定义了主键字段,则不可编辑。一开始我以为它与表格编辑器有关,但是2个不同的编辑器导致了相同的问题,所以我认为它与sql server有关。

我目前使用的是 SQL Server 2005。

这是我的编辑器和我的数据库属性的图像:

【问题讨论】:

  • 编辑如何?更改特定行中该列的值,或更改列的定义(类型、大小等)?
  • 无法更改列的值,我添加了编辑器的屏幕截图,主键禁用了列编辑,请参阅我编辑的答案。
  • 您可能看起来是对的,但例如对于访问数据库,这些工具工作正常。我的解决方案将从 2 个列中删除主键,并为我的列添加 UNIQUE 约束。请写下您的评论作为答案,我会接受。

标签: sql sql-server sql-server-2005


【解决方案1】:

通常,尝试修改数据库值失败时会出现错误消息。消息是什么?

这听起来像是主键设置为自动编号的身份。在这种情况下,该值由数据库在创建每一行时自动确定。而且你不能编辑这个值。

【讨论】:

  • 好吧,给你。 ID 为 NULL,这是不允许的。我无法准确说出您在做什么,但我看到上面的 INSERT 查询没有指定 ID 列的值。这意味着它是NULL。这意味着它是不允许的。
  • 但是自动增量并不能解决我的问题,假设有一本书(karamazov 兄弟在数据库中,id=5,copy=1),图书管理员收到了这本书的另一份,他有能够将 id=5, copy=2 的书插入数据库。
【解决方案2】:

您使用的编辑器似乎是基于某些假设构建的 - 主键值永远不会改变,而且它们始终是系统生成的。

这两种假设一般都不成立。虽然经常描述主键值永远不会改变是可取的,但一个好的工具不应该假设这是真的。也不应假定主键值将始终自动生成。


SQL 中内置了一些缓解功能来处理 更改的主键 - 特别是 FOREIGN KEY 约束的 CASCADE 功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多