我是存储过程的新手,所以我需要你们的帮助,我有三个表Event_Session、Event_Speaker、Session_Speaker。我想通过传递 Event_session_id 来删除 Event_Session 记录,它还应该同时删除 Session_Speaker 和 Event_Speaker 记录,请帮助我!这是表格
Event_Session(包含字段的表格)
Event_Session_Id, Session_name, Session_Description, Tags
Navigation Properties: Session_Speaker
Session_Speaker(包含字段的表格)
Event_Session_Id, Event_Speaker_Id, created_date
Navigation properties: Event_Session , Event_Speaker
Event_Speaker(包含字段的表格)
Event_Speaker_Id, Speaker_name, Created_date
Navigation Properties : Session_Speaker
最佳答案
你实际上需要一个trigger对 Event_Session
表中的 DELETE
操作:
delimiter $$
CREATE TRIGGER Event_Session_Trigger
AFTER delete ON Event_Session
FOR EACH ROW
BEGIN
DELETE FROM Event_Speaker ss
WHERE
ss.Event_Speaker_Id = (
SELECT
Event_Speaker_Id
FROM Session_Speaker es
WHERE
es.Event_session_id = old.Event_session_id
)
DELETE FROM Session_Speaker es
WHERE
es.Event_session_id = old.Event_session_id
END$$
delimiter ;
更新:根据要求,同义词程序:
DELIMITER //
CREATE PROCEDURE Event_Session_Procedure(IN Event_Session_Id_Delete INT)
BEGIN
DECLARE Event_Speaker_Id_Delete INT;
SELECT
Event_Speaker_Id INTO Event_Speaker_Id_Delete
FROM Session_Speaker es
WHERE
es.Event_session_id = Event_Session_Id_Delete
DELETE FROM Event_Session e
WHERE
e.Event_session_id = Event_Session_Id_Delete
DELETE FROM Session_Speaker es
WHERE
es.Event_session_id = Event_Session_Id_Delete
DELETE FROM Event_Speaker ss
WHERE
ss.Event_Speaker_Id = Event_Speaker_Id_Delete
END //
DELIMITER ;
您可以通过运行 CALL Event_Session_Procedure(123);
来执行它,其中 123 是您要删除的 Event_Session_Id
关于mysql - 从三个表中删除记录的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16955945/