【问题标题】:foreign key constraint fails when drop table from database从数据库中删除表时外键约束失败
【发布时间】:2020-02-05 17:43:34
【问题描述】:

我使用下面的查询创建了 3 个表。但是当我尝试删除 LOANACCOUNT 表时,我收到一个错误:

错误:

错误代码:1217。无法删除或更新父行:外键约束失败

创建表查询:

CREATE TABLE LOANACCOUNT
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    LOANACCOUNTTYPE VARCHAR(9) NOT NULL,
    CREATIONDATE DATE NOT NULL,
    CONSTRAINT LOAN_ACCOUNT_PK PRIMARY KEY (ID),
);

CREATE TABLE TRANSACTIONS
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ACCOUNTID INT UNSIGNED NOT NULL,
    TRANSACTIONTYPE VARCHAR(12) NOT NULL,
    CONSTRAINT TRANSACTION_PK PRIMARY KEY (ID),
    FOREIGN KEY LOANACCOUNT_FK (ACCOUNTID) REFERENCES LOANACCOUNT (ID) ON DELETE CASCADE
);

CREATE TABLE INSTALLMENT
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ACCOUNTID INT UNSIGNED NOT NULL,
    DUEDATE DATE NOT NULL,
    CONSTRAINT INSTALLMENT_PK PRIMARY KEY (ID),
    FOREIGN KEY LOANACCOUNT_FK (ACCOUNTID) REFERENCES LOANACCOUNT (ID) ON DELETE CASCADE
);

删除表查询:

DROP TABLE IF EXISTS LOANACCOUNT;

我知道我的外键有问题,但我不知道如何修复它。

【问题讨论】:

  • 是的,因为 LOANACCOUNT 由其他两个表链接到。您必须先删除其他两个表,然后才能删除 LOANACCOUNT
  • @RiggsFolly 但是有没有办法删除链接到我要删除的表的所有外键?我的意思是一个命令,不要单独删除它们

标签: mysql


【解决方案1】:

正如@Rigg 建议在删除LOANACCOUNT 之前需要删除其他表。

(即)除非没有子表链接,否则不能删除父表。

暂时您可以禁用外键检查,然后删除这些表。

SET SESSION foreign_key_checks = 0;
DROP TABLE IF EXISTS LOANACCOUNT;
SET SESSION foreign_key_checks = 1;

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 2018-07-18
    • 1970-01-01
    • 2018-09-11
    • 2020-10-30
    • 2022-06-20
    • 2021-09-03
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多