我与MariaDB 10.6
. 创建了一个存储过程,其中创建了一个临时表:
CREATE
DEFINER = root@localhost PROCEDURE my_procedure()
BEGIN
START TRANSACTION;
CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table AS (SELECT id FROM some_table);
# some logic
COMMIT;
END;
我的印象是这个表在程序完成后并没有立即删除,因为我在使用它时遇到了一些问题。在创建表之前删除表后,所有错误都消失了:
DROP TABLE IF EXISTS my_temp_table;
CREATE TEMPORARY TABLE IF NOT EXISTS my_temp_table AS (SELECT id FROM some_table);
TEMPORARY TABLE
问题是:如果我们在一个过程中创建它,究竟什么时候会被删除?
该网站MariaDB
说:
使用 TEMPORARY 关键字创建仅对当前会话可用的临时表。会话结束时会删除临时表。临时表名称特定于会话。
但是程序完成后不应该关闭会话吗?
从客户端的角度来看,会话是与数据库的连接,要关闭它,您需要
Connection.Close
.如果您在执行该过程后不关闭连接并保持它,那么会话是打开的,并且表挂起并且不会去任何地方。
另一件事是连接是否显式关闭。好吧,或者会话可以由服务器关闭 - 通过超时,例如,如果客户端被冻结,或者连接被丢弃。就在那时,表格连同连接一起被遗忘了。
顺便说一句,还有一个伤害。连接可以配置为在中断时自动重新连接 - 但重新连接后临时表将不再存在......