我有一个使用临时表的MySQL存储过程。假设我的表名是'temp',我用它来存储一些中间数据。它将在程序开始时创建,并将在结束时删除。
CREATE PROCEDURE p()
BEGIN
CREATE TEMPORARY TABLE \`temp\`(...);
INSERT INTO \`temp\` VALUES(...);
DROP TEMPORARY TABLE \`temp\`;
END;
问题是这个存储过程可能会被不同的用户同时使用,所以我想知道这是否会导致任何问题(即临时表中插入数据的任何冲突)。换句话说临时表是对同一个SP的不同调用中的共享资源吗?
答案 0 :(得分:47)
不,临时表仅限于数据库连接的范围。您可以在同一数据库连接期间对过程的后续调用中使用临时表,但其他连接无法访问它。他们可以使用相同的名称创建表,但每个临时表都是独立的。关闭连接时临时表会消失。
答案 1 :(得分:14)
临时表仅对当前会话可见。
因此,如果你有几个相继的会话 - 每个会话都有自己独立的同名临时表。
文档:http://dev.mysql.com/doc/refman/5.1/en/create-table.html,ctrl + f表示“你可以使用TEMPORARY”