当前位置: 首页 > 面试题库 >

如果不存在外键,那么不使用名称添加外键约束(如果存在则删除外键约束)?

谷梁宏恺
2023-03-14
问题内容

我发现创建一个查询有困难。假设我有一个“产品和品牌”表。我可以使用此命令添加外键,

          ALTER TABLE Products
          ADD FOREIGN KEY (BrandID)
          REFERENCES Brands(ID)

但是,如果外键不存在,我只需要运行此命令。我需要类似的事情是在不使用名称的情况下删除“外键约束”(如果存在)。


问题答案:

首先,您应该始终命名您的FK以及所有其他约束,以免出现此类麻烦。

但是,如果您不知道FK的名称,则可以使用多个系统视图进行检查:

IF NOT EXISTS 
(
    SELECT * FROM sys.foreign_key_columns fk 
    INNER JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id 
    INNER JOIN sys.columns rc ON rc.object_id = fk.referenced_object_id AND rc.column_id = fk.referenced_column_id
    WHERE fk.parent_object_id = object_id('Products') AND pc.name = 'BrandID'
    AND fk.referenced_object_id = object_id('Brands') AND rc.NAME = 'ID'
)
ALTER TABLE Products 
ADD CONSTRAINT Your_New_FK_NAME FOREIGN KEY (BrandID)
REFERENCES Brands(ID)


 类似资料:
  • 问题内容: 刚在Mac OS X 10.6上安装了MySQL 5.5,并且在许多表上都有一个奇怪的问题。下面是一个例子。插入行失败,但不应插入外键约束。它引用的外键确实存在。有任何想法吗? 更新 :多次删除并重新创建数据库后,我在上述插入失败后进行了操作,并得到了令人惊讶的结果。找不到父语言表!这似乎很奇怪…有什么想法吗? 更新2 :事实证明,这只是MySQL中的一个 巨大 错误。显然,最新版本的

  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除

  • 我定义了一个外键。为了检查它,我在具有外键的表中插入了错误的值。未打印任何错误,值已成功添加。我不知道我是否正在运行一些旧版本的sqlite3或类似的东西,我对这个领域是完全陌生的。 创建表ref(value 1 int, value 2,主键(value 1)); 为(value1 int、value3 int、主键(value3)、外键(value1)引用ref(value1))创建表; 插入

  • 下面是一个现有的模型,名为: 下面是我试图创建的新模型: 看起来很简单,对吧?所以我进行迁移: 在网上搜索,我只找到了一个关于Django的问题的例子(在创建表时Django MySQL错误),但这并没有帮助。没有迁移到,我也看不出为什么会有迁移,因为我们最近既没有修改这部分,也没有升级任何包。 对任何帮助深表感谢。

  • 我有以下设置, 我正在尝试将一个名为 的列添加到这是另一个名为 列的表的外键。 为了实现上述目标,我在终端上尝试了以下方法: 但是这给了我一个错误: 错误:外键约束中引用的列“sender”不存在 我该怎么解决这个问题?

  • hibernate如何生成外键约束名称? 如果我不定义一个名字,Hibernate会生成这样的东西 这个名字是如何产生的?可能是从字段名散列或类似的内容?我需要知道名称是否在所有实例上都相等。