在执行之间删除了Mysql临时表

时间:2014-01-08 14:36:10

标签: mysql sql debugging temp-tables

我希望能够在Mysql中轻松调试我的脚本,就像在MSSQL中一样(运行一大块脚本然后验证表等),但临时表不会保留在服务器上。 例如:

CREATE temporary table a(i int);
INSERT INTO a VALUE (1);
SELECT * FROM a;

如果我运行整个脚本,它会返回正确的结果,但如果我在插入语句中声明语句,则会出现以下错误:

  

SQL.sql:错误(2,13):表'test.a'不存在

我认为这是服务器配置问题。

1 个答案:

答案 0 :(得分:1)

交易结束时会删除临时表。

来自dev.mysql:

  

临时表:   您可以在创建时使用TEMPORARY关键字   表。 TEMPORARY表仅对当前连接可见,   并在连接关闭时自动删除。这意味着   两个不同的连接可以使用相同的临时表名   没有相互冲突或与现有的非TEMPORARY冲突   同名表。 (现有的表一直隐藏到   临时表被删除。)要创建临时表,您必须具有   CREATE TEMPORARY TABLES特权。

     

注意CREATE TABLE不会自动提交当前活动的   如果使用TEMPORARY关键字,则为事务。


因此,如果您在传递事务中运行所有这些sql,则在运行insert语句时,临时表将不存在。

如果在不同的事务中执行这些执行取决于您使用的接口。多数民众赞成如果你“运行整个脚本它返回正确的结果”,因为它在同一个交易中。


您可以尝试使用以下命令强制它在同一个事务上运行:

START TRANSACTION;
<SQL QUERYS>
COMMIT;

无论如何,我建议你 MySQL Workbench 作为界面。

我最诚挚的问候,我希望这会对你有所帮助。