【问题标题】:Delete other data with foreign key用外键删除其他数据
【发布时间】:2019-07-27 01:59:09
【问题描述】:

我正在申请实习。我们在休息时间玩游戏,我正在制作一个应用程序来跟踪比分。

我可以与玩家一起添加游戏。之后,我可以编辑游戏并指定获胜者。 游戏桌和获胜者桌都是分开的。

Players: ID(PK), name
Games: ID(PK), player_1(FK), player_2(FK) --- Connected to players.id
Winners: ID(FK), name (FK) --- winners.id connected to games.id, name to players.

如果我没有在游戏中指定获胜者,我可以安全地删除记录。但是,如果我分配了获胜者,我不能:不能删除或更新父行:外键约束失败

我知道为什么,因为获胜者与游戏有关。但是如何删除游戏并立即从另一张桌子上删除获胜者?

【问题讨论】:

    标签: mysql sql join phpmyadmin sql-delete


    【解决方案1】:

    先从winners中删除外键约束:

    ALTER TABLE winners DROP FOREIGN KEY yourforeignkeyname
    

    然后用ON DELETE CASCADE重新创建它:

    ALTER TABLE winners 
    ADD CONSTRAINT yourforeignkeyname 
    FOREIGN KEY (ID) 
    REFERENCES games(ID) 
    ON DELETE CASCADE;
    

    现在,当您删除游戏时,获胜者行也将被删除。

    【讨论】:

    • 为一张桌子工作。其他 2 个表出现错误:(Errcode: 121 "Duplicate key on write or update")
    • 还有哪些表?此代码会影响winners 表。
    • 我知道。我有 3 张桌子,我简化了我所说的内容。我有 fifa_winners、darts_winners 和 billiard_winners。与 fifa_games、dart_games 和 billiard_games 相关联。它只适用于飞镖,但不适用于其他飞镖。
    • 您必须对所有约束执行相同的操作,但在重新创建约束时为每个约束赋予不同的名称。
    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多