【问题标题】:Adding a TRIGGER to phpMyAdmin MySQL table to DELETE a row in Table A it's corresponding row is deleted in Table B在 phpMyAdmin MySQL 表中添加 TRIGGER 以删除表 A 中的一行,它对应的行在表 B 中被删除
【发布时间】:2017-10-05 16:50:49
【问题描述】:

我有两个表,分别名为 RESERVATIONSRESERVATION DETAILS

RESERVATIONS 的主键 reservationIdRESERVATION DETAILS 中的外键。

在我的网站中,用户可以从RESERVATION 表中删除预订。

如何添加TRIGGER,如果reservationIdRESERVATION表中删除,RESERVATION DETAILS中与reservationId对应的行也被删除?

使用 phpMyadmin。

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    如果您在删除RESERVATIONS 中的父行时总是想无条件删除RESERVATION_DETAILS,您可以在外键上定义ON DELETE CASCADE。您对RESERVATION_DETAILS 的定义如下所示:

    CREATE TABLE RESERVATION_DETAILS (
        reservationDetailId INT,
        reservationId INT,
        -- etc...
    
        FOREIGN KEY (reservationId)
            REFERENCES RESERVATIONS(reservationId)
            ON DELETE CASCADE
    );
    

    有关详细信息,请参阅MySQL documentation

    【讨论】:

    • 这可能是我们两个答案之间更好的方法。
    【解决方案2】:

    您可以创建一个简单的触发器,以便在删除时从另一个表中删除:

    CREATE TRIGGER delete_reservation_id AFTER DELETE on RESERVATIONS
        FOR EACH ROW
        BEGIN
            DELETE FROM RESERVATION_DETAILS
            WHERE RESERVATION_DETAILS.reservationId = RESERVATIONS.reservationId;
        END
    

    相应地更改您的表名。

    如果您需要删除此触发器,语法如下:

    DROP TRIGGER IF EXISTS delete_reservation_id ;
    

    【讨论】:

    • 谢谢,但它仍然无法正常工作。我已经仔细检查并且表/行名称匹配。此处: CREATE TRIGGER reservation_detail_delete AFTER DELETE on reservation FOR EACH ROW BEGIN DELETE FROM reservationdetail WHERE reservationdetail.ReservationID = reservation.ID; END
    • @user3081458 - ON RESERVATION, 还是 ON RESERVATIONS?
    • @SimonMᶜKenzie 该表被称为RESERVATION,所以它是ON RESERVATION
    • @user3081458 - 不用担心。只是你在问题中称它为RESERVATIONS
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多