0

我正在开发一个基本上由两个表组成的消息传递系统:CONVERSATIONS 和 MESSAGES。该过程检查是否存在对话,如果存在,它将对话 ID 保存到 VAR 中并将其用于消息插入。如果没有,它会在对话表中创建一个条目,并使用 LAST ID 作为 MESSAGES 表的条目值。

到目前为止它工作得很好,但我有两个问题:

  • 在我无知的观点中,如果更多用户同时调用该过程,那么如此定义的 VARS @last_id 和 @conv_id 可能会发生某种冲突。想象一下@last_id 设置为 40,在插入发生之前,另一个用户调用了相同的过程,并且该值设置为 41 .. 这有可能吗?

  • 这个 INSERT 过程似乎很慢,一旦被缓存,虽然它似乎变得有点快,但我对它不满意。除了 INDEXING 有什么解决办法吗?

谢谢你。

DELIMITER //

CREATE PROCEDURE chat_insert(id1 INT, id2 INT, text VARCHAR(250))

BEGIN
SELECT id INTO @conv_id FROM conversations WHERE 

(user_id_one = id1 AND user_id_two = id2) 

 OR  (user_id_one = id2 AND user_id_two = id1) LIMIT 1;  

IF(@conv_id IS NOT NULL)    

THEN

    INSERT INTO messages (conversations_id,user_id,text) 
     VALUES (@conv_id,id1,text);

    ELSE

            INSERT INTO conversations (user_id_one,user_id_2) 
            VALUES (id1,id2);
            SET @last_id = LAST_INSERT_ID();
             INSERT INTO messages (conversations_id,user_id,text) 
            VALUES (@last_id,id1,text);
    END IF;
END 
//
4

0 回答 0