【问题标题】:How do I delete a row from the table that has the primary key used as foreign key in my other table?如何从另一个表中将主键用作外键的表中删除一行?
【发布时间】:2015-06-28 15:56:02
【问题描述】:

我在我的 SQL Server 2008 数据库中的两个表之间创建了外键关系。当我尝试从包含主键的表中删除一行时,出现错误。如何从我的另一个表中将主键用作外键的表中删除一行?

【问题讨论】:

  • 请分享您的表结构、您尝试运行的 SQL 以及确切的错误。如果没有更多细节,很难为您提供帮助。

标签: sql sql-server-2008


【解决方案1】:

这是具有外键约束的要点:您不能从一个表中删除具有从另一表引用它们的记录的记录。

您可以在约束本身上使用on delete cascade 选项(您需要删除并重新创建它)或先从子表中删除引用记录,然后再从父表中删除记录。

【讨论】:

    【解决方案2】:

    两种选择:

    1. 使用级联删除选项重新创建表。更多细节在这里: http://www.techonthenet.com/sql_server/foreign_keys/foreign_delete.php

      语法:

      CREATE TABLE **child_table**
      (
          column1 datatype [ NULL | NOT NULL ],
          column2 datatype [ NULL | NOT NULL ],
          ...
      
          CONSTRAINT fk_name
          FOREIGN KEY (child_col1, child_col2, ... child_col_n)
          REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
          ON DELETE CASCADE
             [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
      );
      
    2. 手动查找使用主键的子元素并删除:

      DELETE FROM table_name_with_foreign_key
      WHERE some_column=some_value;
      

      然后带着主键回到主表,删除行:

      DELETE FROM table_name
      WHERE some_column = some_value;
      

    【讨论】:

    • @marc_s 我看到有一个编辑,但不确定发生了什么变化;在这个回复中有什么我应该修改的吗?编辑:请忽略,我看到格式被改变了,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2013-12-09
    相关资源
    最近更新 更多