我希望能够轻松地在 MySQL 中调试我的脚本,就像在 SQL Server 中一样(运行一部分脚本,然后验证表等),但临时表不会保留在服务器上。 例如:
CREATE temporary table a(i int);
INSERT INTO a VALUE (1);
SELECT * FROM a;
如果我运行整个脚本,它会返回正确的结果,但是如果我在插入中逐条语句地运行它,则会收到以下错误:
SQL.sql:错误(2,13):表“test.a”不存在
我认为这是服务器配置问题。
事务结束时临时表将被删除。
临时表: 创建时可以使用 TEMPORARY 关键字 桌子。 TEMPORARY 表仅对当前连接可见, 并在连接关闭时自动丢弃。这意味着 两个不同的连接可以使用相同的临时表名称 不会相互冲突或与现有的非临时性冲突 同名表。 (现有表将被隐藏,直到 临时表被删除。)要创建临时表,您必须具有 创建临时表权限。
注意 CREATE TABLE 不会自动提交当前活动的表 如果您使用 TEMPORARY 关键字,则交易。
因此,如果您在不同的事务中运行所有这些sql,那么当您运行插入语句时,临时表将不存在。
这些执行是否在不同的事务中执行取决于您使用的接口。如果您“运行整个脚本,它会返回正确的结果”,那就是这样,因为它都在同一个事务中。
您可以尝试强制它在同一事务上运行:
START TRANSACTION;
<SQL QUERYS>
COMMIT;
无论如何,我推荐您MySQL Workbench作为界面。
我致以最诚挚的问候,希望这对您有帮助。