将列更改为常规列而不是外键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将列更改为常规列而不是外键相关的知识,希望对你有一定的参考价值。

我有一个特定的情况,我的数据库中有一个列类型,其中列当前是int类型,它是一个允许空值的外键类型...

我的问题是:是否可以将此列简单地更改为不是外键的int类型而不会弄乱两个表中的数据,并保持值不变?

例如:

alter table xy
alter column ForeignKeyIdColumn int null

会这样的吗?

有人可以帮我吗?

答案

外键不是表的列的属性,它是定义表之间关系的数据库对象。

你可以使用ALTER TABLEDROP CONSTRAINT删除外键约束(虽然我不推荐它),但你必须知道约束的名称才能这样做(这就是为什么在SQL SERVER中命名所有内容的最佳做法):

ALTER TABLE xy
    DROP CONSTRAINT <constraint name here>;

但是,正如我所写,我不建议删除外键约束。 外键是强制引用完整性的数据库方式 - 这意味着在不更改或删除引用值的情况下,无法更改或删除另一个表引用的值。 删除外键意味着您的数据库将无法再强制执行引用完整性,这可能会导致数据损坏。

有关更多信息,请阅读Delete Foreign Key Relationships

以上是关于将列更改为常规列而不是外键的主要内容,如果未能解决你的问题,请参考以下文章

sql 用于将列更改为作为主键的标识列的SQL代码。您必须删除密钥,删除列,将列添加回i

访问 SQL - 将列更改为自动编号?

如何将列更改为行[重复]

Postgresql以通用方式将列更改为行

使用条件将列更改为单独的数据框

将列更改为可为空的查询不起作用[重复]