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

问题描述 投票:0回答:1

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

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

如果我运行整个脚本,它会返回正确的结果,但是如果我在插入中逐条语句地运行它,则会收到以下错误:

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

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

mysql sql debugging temp-tables
1个回答
1
投票

事务结束时临时表将被删除。

来自dev.mysql:

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

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


因此,如果您在不同的事务中运行所有这些sql,那么当您运行插入语句时,临时表将不存在。

这些执行是否在不同的事务中执行取决于您使用的接口。如果您“运行整个脚本,它会返回正确的结果”,那就是这样,因为它都在同一个事务中。


您可以尝试强制它在同一事务上运行:

START TRANSACTION;
<SQL QUERYS>
COMMIT;

无论如何,我推荐您MySQL Workbench作为界面。

我致以最诚挚的问候,希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.