连接关闭后,MySql临时表仍然存在(来自.NET)

时间:2015-09-24 18:59:57

标签: c# mysql .net

我正在MySql中创建一个临时表,并希望在我断开连接后它不在那里。我已经删除了代码中的所有内容,只留下了这个:

        //create the first connection
        var connection = new MySqlConnection(ConnectionString);
        connection.Open();

        //create a temp table
        var cmd = connection.CreateCommand();
        cmd.CommandText = "CREATE TEMPORARY TABLE SomeDummyTable(Column1 float)";
        cmd.ExecuteNonQuery();

        //read the new temp table to proove it's created
        cmd = connection.CreateCommand();
        cmd.CommandText = "select * from SomeDummyTable";
        cmd.ExecuteNonQuery();

        //close and dispose of the first connection
        connection.Close();
        connection.Dispose();

        //create new connection
        MySqlConnection connection2 = new MySqlConnection(ConnectionString);
        connection2.Open();
        var cmd2 = connection2.CreateCommand();

        cmd2.CommandText = "select * from SomeDummyTable";
        //this does not throw an exception, even though SomeTable is 
        //a temp table from the previous connection
        cmd2.ExecuteNonQuery();

所以我使用一个连接创建临时表,然后关闭该连接并打开另一个连接。我可以使用第二个连接看到临时表。是什么赋予了?我错过了什么?

此外:如果我关闭应用程序并重新打开它,临时表就不存在了。可能是某些连接池还是什么?

1 个答案:

答案 0 :(得分:3)

这似乎是MySQL连接池的错误,或者您正在使用的特定提供商。根据我在粗略搜索中找到的内容,临时表应该在创建它们的连接关闭时自动删除。我期望连接池改变这种行为。

然后想到两个解决方法:

  1. 完成使用后,显式删除临时表。
  2. 通过将Pooling=False;添加到连接字符串来禁用连接池。
  3. This MySQL bug report似乎是恰当的。显然,其他连接属性未被重置。也许临时表没有被立即删除(或者后续连接无法访问)是同一问题的一部分。

    You should report the bug.我在bug中搜索了“临时表连接池”,但没有找到任何明确涵盖你的场景的内容。