【问题标题】:Deleting tables on a relational database (InnoDB)删除关系数据库 (InnoDB) 上的表
【发布时间】:2020-04-09 06:00:37
【问题描述】:

我管理了一个关系数据库,我想删除一个表及其子表(引用作为参考值,如 fk_table_value)。

当我做一个简单的“DELETE FROM companies WHERE id=4”时,我会收到错误消息:“无法删除或更新父行:外键约束失败”。

在这里你可以看到我的数据库地图。

【问题讨论】:

  • 您有三个依赖于 Companies 表的表。如果您删除该公司,则某些实体会丢失其外键实体。通俗地说,company_division、params_value 和 schedule_type 不应该有 fk_company_id = 4。
  • 这就是重点,我想从所有这些表中删除与该公司相关的每个条目。
  • 简单的回答是必须先删除其他三个表中的所有依赖行。
  • 你已经找到了一个 FOREIGN KEYs 的例子。

标签: mysql sql phpmyadmin innodb


【解决方案1】:
CREATE TABLE buildings (
    building_no INT PRIMARY KEY AUTO_INCREMENT,
    building_name VARCHAR(255) NOT NULL,
    address VARCHAR(255) NOT NULL
);

CREATE TABLE rooms (
    room_no INT PRIMARY KEY AUTO_INCREMENT,
    room_name VARCHAR(255) NOT NULL,
    building_no INT NOT NULL,
    FOREIGN KEY (building_no)
        REFERENCES buildings (building_no)
        ON DELETE CASCADE
);

假设您已经定义了两个这样的表。所以我们可以看到房间在建筑物上有一个外键,它被设置为 ON DELETE CASCADE。这意味着如果删除了建筑物中的实体,则所有具有该 building_no 的房间也将被删除。

这也将解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2013-01-23
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多