MySQL临时表是共享资源吗?

MySQL临时表是共享资源吗?,mysql,concurrency,temp-tables,Mysql,Concurrency,Temp Tables,我有一个使用临时表的MySQL存储过程。假设我的表名是“temp”,我用它来存储一些中间数据。它将在过程开始时创建,并在过程结束时删除 CREATE PROCEDURE p() BEGIN CREATE TEMPORARY TABLE \`temp\`(...); INSERT INTO \`temp\` VALUES(...); DROP TEMPORARY TABLE \`temp\`; END; 问题是,不同的用户可能会同时使用此存储过程,因此我想知道这是否会导致任何问题(即临时

我有一个使用临时表的MySQL存储过程。假设我的表名是“temp”,我用它来存储一些中间数据。它将在过程开始时创建,并在过程结束时删除

CREATE PROCEDURE p()
BEGIN

CREATE TEMPORARY TABLE \`temp\`(...);

INSERT INTO \`temp\` VALUES(...);

DROP TEMPORARY TABLE \`temp\`;

END;

问题是,不同的用户可能会同时使用此存储过程,因此我想知道这是否会导致任何问题(即临时表中插入的数据中存在任何冲突)。换句话说,临时表是对同一SP的不同调用中的共享资源吗?

临时表仅在当前会话中可见

因此,如果您有多个同时的会话,那么每个会话都有自己的同名独立临时表


文档:,ctrl+f表示“您可以使用临时表”

否,临时表仅限于数据库连接的范围。在同一数据库连接期间,您可以在对过程的后续调用中使用temp表,但其他连接无法访问它。他们可以用相同的名称创建一个表,但每个临时表都是独立的。当您关闭连接时,临时表会消失。

我认为您不必删除临时表,因为它只是一个临时表。我在临时表中得到了来自Web服务器执行的不同存储过程调用的混合结果。你能想象为什么会这样吗?apache对不同的http请求是否使用相同的mysql连接?谢谢lot@FeidaKila,我猜不出你所说的“混合结果”是什么意思。也许您应该发布一个新问题。我的意思是,在同一个临时表中插入不同的存储过程调用(使用不同的参数)的结果是混合的。我想我会提出一个关于这个问题的新问题。设想用户A调用SP(A、B、C);以及用户b呼叫SP(D,E,F);同时执行,目标表从两个过程调用中插入行。@FeidaKila,临时表的作用域是创建它们的会话。两个并发会话不能插入到同一临时表中。也就是说,如果您在定义表时实际使用了
CREATE TEMPORARY TABLE…
。这就是我在存储过程中创建表的方式(我在CREATE语句之前也使用了drop TABLE):如果不存在,则创建临时表tmpfinal(在池数据库连接的情况下该怎么办?会话根本不重要。@AnveshChecka,在池连接的情况下,一次只有一个会话可以使用该连接。打开连接会将其从可用池中删除(将其标记为正在使用中,或特定实现将其从可用连接池中删除所做的任何操作)。“正在关闭”连接只是将其释放回池中,以便另一个会话可以使用它。池连接消除了从头开始创建它们、创建上下文和在服务器上分配内存等相关的开销。但是池连接决不会从多个会话中同时使用。