我正在开发一个基本上由两个表组成的消息传递系统:CONVERSATIONS和MESSAGES。该过程检查是否存在会话,如果存在会话,则将会话ID保存到VAR中并将其用于消息插入。如果没有,它会在会话表中创建一个条目,并使用最后一个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
//