Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从三个表中删除记录的存储过程_Mysql_Sql Server - Fatal编程技术网

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

Mysql 从三个表中删除记录的存储过程,mysql,sql-server,Mysql,Sql Server,我不熟悉存储过程,所以我非常需要你们的帮助,我有三张表,分别是Event_Session、Event_Speaker、Session_Speaker。我想通过传递Event\u Session\u id来删除Event\u Session记录,它还应该同时删除Session\u Speaker和Event\u Speaker记录,请帮助我!这是桌子 事件\可与字段进行会话 事件\会话\ Id、会话\名称、会话\描述、标记 导航属性:会话\扬声器 会话\可通过字段进行会话 事件会话Id、事件发言人

我不熟悉存储过程,所以我非常需要你们的帮助,我有三张表,分别是Event_Session、Event_Speaker、Session_Speaker。我想通过传递Event\u Session\u id来删除Event\u Session记录,它还应该同时删除Session\u Speaker和Event\u Speaker记录,请帮助我!这是桌子

事件\可与字段进行会话

事件\会话\ Id、会话\名称、会话\描述、标记

导航属性:会话\扬声器

会话\可通过字段进行会话

事件会话Id、事件发言人Id、创建日期

导航属性:事件会话、事件扬声器

事件\可通过字段进行会话

事件发言人Id、发言人姓名、创建日期

导航属性:会话\扬声器

实际上,您需要从事件会话表中删除操作:

更新:根据要求,同义词程序:

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 ; 

您可以通过运行调用事件\会话\过程123来执行它;其中123是您要删除的事件会话Id实际上您可以不使用触发器来完成,对于初学者,我建议您使用更简单的方法来完成

如果您可以返回到原始脚本或生成新的查询页面并尝试以下操作

首先要注意您设置的任何主键和外键约束 但是在这些简单的声明的最后,输入DELETE级联

下面是我的一个数据库脚本中的一个示例

更改表名 添加约束您的列\u fk外键您的列引用您的表删除级联上的列; 去

为了让您更容易理解我写的内容,这里有一个直接来自我的数据库脚本的示例

换桌小组 在删除级联上添加约束DID\fk外键DID引用DEVELOPERSDID; 去


cascade所做的只是遍历数据库的其余部分并删除对已删除项的所有其他引用,这样您就可以保持引用完整性

确定您需要两个数据库品牌的解决方案吗?还不够吗?谢谢你的评论,你现在能简要介绍一下这个问题吗?我已经向现场描述了这个问题Hanks Stephan你能回答这个问题吗?因为我已经重申了我的问题你的触发器工作得很好,但有一件事是,我可以拥有存储过程,因为我在我的任何应用程序中都没有使用级联删除或触发器application@user2299256我不明白你为什么想要一个存储过程。。。由于触发器将在每次删除时自动调用,而不是手动确保在每次删除前调用该过程。。。想想看,如果你在应用程序的不同点发布删除语句。。。这将是一场噩梦,因为我正在使用实体框架4.0的Asp.Net MVC4应用程序,我正在从UI中删除数据,因此,我不需要从Event_Speaker ss中自动删除,其中ss.Event_Speaker_Id=从Session_Speaker es中选择Event_Speaker_Id,其中es.Event_Session_Id=Event_Session_Id\u Delete导致错误->给出的Delete语句与引用冲突约束FK_会话_演讲者_事件_演讲者。冲突发生在数据库EventMgmt表dbo.Session\u Speaker列“event\u Speaker\u id”中。他不想使用级联或触发器。他想要一个过程感谢您的回答,但我不会更改我的数据库!
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 ;