如何在同一个表中触发父更新的更新子记录

时间:2018-05-01 00:18:27

标签: mysql stored-procedures triggers sql-update

我有一个用户表,其中包含子用户和父用户帐户。 子帐户由父ID字段

指示

我创建了一个存储过程,它可以获取所有必要的信息,并且可以在手动运行时成功更新用户的字段,并提供要更新的特定ID

然后我有一个触发器,可以成功地获取需要更新的子用户。 然而,问题是,当我尝试触发调用程序时,我得到了错误

"无法更新表格' userinfos'在存储的函数/触发器中,因为它已被调用此存储函数/触发器的语句使用"

下面是我在运行存储过程之前检查的代码,它触发的更新是在父项而不是子项上完成的。这意味着如果它在子更新时触发,则它不会运行存储过程,因此无法陷入循环。 (注意事项之前和之后都没有工作)

DELIMITER $$ 
CREATE DEFINER=`~DEFINER HERE~` 
PROCEDURE `update_child_user`(IN `n_company` VARCHAR(64), IN `n_last_name` VARCHAR(48), IN `n_first_name` VARCHAR(48), IN `n_middle_name` VARCHAR(48), IN `n_phone_1` VARCHAR(32), IN `n_phone_2` VARCHAR(32), IN `n_fax` VARCHAR(32), IN `n_address_1` VARCHAR(64), IN `n_address_2` VARCHAR(64), IN `n_city` VARCHAR(64), IN `n_virtuemart_state_id` SMALLINT(1), IN `n_virtuemart_country_id` VARCHAR(255), IN `n_zip` VARCHAR(32), IN `n_billing_email_address` VARCHAR(255), IN `n_virtuemart_user_id` INT(1))
MODIFIES SQL DATA
    UPDATE `userinfos`
    SET    `company` = `n_company` , 
           `last_name` = `n_last_name` , 
           `first_name` = `n_first_name` , 
           `middle_name` = `n_middle_name` , 
           `phone_1` = `n_phone_1` , 
           `phone_2` = `n_phone_2` , 
           `fax` = `n_fax` , 
           `address_1` = `n_address_1` , 
           `address_2` = `n_address_2` , 
           `city` = `n_city` , 
           `virtuemart_state_id` = `n_virtuemart_state_id` , 
           `virtuemart_country_id` = `n_virtuemart_country_id` , 
           `zip` = `n_zip` , 
           `billing_email_address` = `n_billing_email_address` 
    WHERE  `primary_user_id` = `n_virtuemart_user_id`
$$ delimiter ;

和存储过程

Dump()

那么我怎样才能让这个触发器能够递归运行,因为还有其他我不能或者我能以某种方式改变我的语法而不会引发递归阻塞触发器?

0 个答案:

没有答案
相关问题