Mysql 在插入时更新外键。。。挑选

Mysql 在插入时更新外键。。。挑选,mysql,sql,Mysql,Sql,我使用以下语句将一个表(POST)中的值插入另一个表(对话): 每次插入后,我想更新posts的conversation\u id列,以指向新插入的conversations行 实现这一点的最佳方法是什么?我认为你需要的是一个触发器: DELIMITER $$ CREATE TRIGGER AFTER INSERT ON `conversations` FOR EACH ROW BEGIN UPDATE posts SET posts.conversation_id =

我使用以下语句将一个表(POST)中的值插入另一个表(对话):

每次插入后,我想更新
posts
conversation\u id
列,以指向新插入的
conversations


实现这一点的最佳方法是什么?

我认为你需要的是一个触发器:

DELIMITER $$

CREATE TRIGGER AFTER INSERT ON `conversations` FOR EACH ROW
BEGIN
    UPDATE posts
        SET posts.conversation_id = NEW.Id
        WHERE
            posts.subject = NEW.subject
            AND posts.user_id = NEW.user_id
            AND posts.created_at = NEW.created_at;
END$$

此查询将插入多行。这些帖子看起来是对话的子帖子,为什么您没有帖子所涉及的对话id呢?这是数据库迁移的一部分。我正在创建表对话,然后将相关数据从帖子移动到对话,然后通过在帖子上设置对话id来尝试在它们之间建立关系。然后只需循环遍历结果集,并使用最后一个插入id()来更新帖子。如果您试图进行转换,请禁用对话中的标识列。使用Update语句更新posts.conversation\u id,然后恢复标识。看起来你太努力了…你能举个例子说明你的意思吗?不确定mysql语言,但它的工作原理是这样的:从对话中选择max(id)+1进入:my_max for循环;更新设置后的对话\u id=my\u max;插入对话(id),选择我的最大值;我的_max++;结束循环。。很抱歉,语法
无法更新存储函数/触发器中的表“posts”,因为调用此存储函数/触发器的语句已经使用了它
DELIMITER $$

CREATE TRIGGER AFTER INSERT ON `conversations` FOR EACH ROW
BEGIN
    UPDATE posts
        SET posts.conversation_id = NEW.Id
        WHERE
            posts.subject = NEW.subject
            AND posts.user_id = NEW.user_id
            AND posts.created_at = NEW.created_at;
END$$