2013-04-22 42 views
0

如果我有一个创建它运行临时表X每次一个存储过程,有没有一种方式来运行带有某种独特的会话ID的存储过程,这样,当人一运行存储过程,它创建临时表X,然后当人B运行相同的过程时,它不会创建临时表X,然后崩溃。

我基本上是想有做了一个程序,但我想muluple人在同一时间运行同样的程序,用了,因为临时表已创建的程序故障切换。只是想知道是否有什么我可以用MySQL中的会话变量来做的,或者可能使用某人的连接信息来为运行该过程的每个人创建一个独特的会话。也许每次都创建表X_session_ID。有没有办法在存储过程中生成唯一的ID?MySQL的唯一会话运行存储过程

回答

0

你可以创建一个使用CREATE TEMPORARY TABLE这将阻止用户之间的名称冲突而不是诉诸生成唯一标识符所需的临时表;

临时表

创建表时,您可以使用TEMPORARY关键词。 TEMPORARY表只对当前连接可见,并在连接关闭时自动删除。这意味着两个不同的连接可以使用相同的临时表名称,而不会相互冲突,也不会与现有的具有相同名称的非TEMPORARY表冲突。

+0

感谢。我使用以下CREATE TEMPORARY TABLE search_columns_temp1作为我的过程的一部分。所以每次运行该过程时,都会创建该临时表。那么这是否意味着当人A连接时,运行程序,并且人B可能同时连接运行同一个程序,那么在一个数据库上创建两个search_columns_temp1表? – user1236443 2013-04-22 10:56:43

+0

@ user1236443是的,但是用户都不能看到其他用户的临时表,它们都可以有一个同名的表并且只能看到他们自己的表。 – 2013-04-22 10:58:57

+0

我认为我存在的问题是存储过程具有特定的权限,已由我定义,并倾向于以我身份运行(即SQL安全定义器)。所以每次运行这个程序时,它都在我的细节下运行。这样做是为了让我不必为了运行这一个过程而给许多用户相同的特权。临时表是否仍然有效?基于连接?或者如果它始终在我之下运行,它是否会因为临时表已创建而失败? – user1236443 2013-04-22 11:00:03