mysql - 从三个表中删除记录的存储过程

标签 mysql sql-server

我是存储过程的新手,所以我需要你们的帮助,我有三个表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

最佳答案

你实际上需要一个triggerEvent_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/

相关文章:

PHP/MYSQL 泛化 SELECT 子句

java - 无法创建 PoolableConnectionFactory(用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES))

php - 使用用户 ID 登录后重定向

sql - 将行复制并粘贴到具有不同值的同一 SQL 表中

c# - 请求失败,HTTP 状态为 401 : Unauthorized IN SSRS

MySQL:GROUP_CONCAT 中的 DISTINCT 删除相同的值(不是重复的)

javascript - 如何在javascript中获取mysql数据以进行动态表单添加

sql - 如何在 SQL Server 中截断日期时间?

sql-server - 获取 child 账户

php - 连接 CI 与 SQL Server 2008 R2