我有一个表提交,我想更新字段消息中具有类似哈希的所有记录。 但是,它不允许我更新使用触发器的同一个表。 我尝试在过程中放置一个事务,但后来我得到一个错误,即函数或触发器中不允许隐式或显式提交。 (即使它在程序中。)
我对mysql程序不是很熟悉,我希望你能解决这个问题。
这是将更新所有其他记录的程序
CREATE PROCEDURE `update_commits_by_message_id` (IN messageId VARCHAR(255))
BEGIN
DECLARE approvedAt DATETIME;
DECLARE approvedByUserId INT(11);
SELECT approved_at, approved_by_user_id
INTO approvedAt, approvedByUserId
FROM commits
WHERE message LIKE CONCAT('%', messageId, '%')
AND approved_at IS NOT NULL
LIMIT 1;
UPDATE commits
SET
approved_by_user_id = approvedByUserId,
approved_at = approvedAt
WHERE message LIKE CONCAT('%', messageId, '%')
AND approved_at IS NULL;
END//
这是触发器,它使用消息id
调用上面的过程CREATE TRIGGER `commit_equalizer`
BEFORE INSERT
ON commits
FOR EACH ROW
BEGIN
DECLARE changeId VARCHAR(250);
SET changeId = SPLIT_STR(NEW.message, 'Change-Id: ', 1);
CALL update_commits_by_message_id(changeId);
END//
DELIMITER ;
答案 0 :(得分:1)
MySql不允许这样做。
请参阅文档:http://dev.mysql.com/doc/refman/5.7/en/faqs-triggers.html#qandaitem-B-5-1-9
B.5.9:可以触发访问表吗?
触发器可以访问自己的表中的旧数据和新数据。触发器也可以影响其他表,但是不允许通过调用函数或触发器的语句修改已经使用的表(用于读取或写入)