我想创建一个临时表,该表将临时隐藏真实表并与真实表具有相同的名称和结构。

独立地,所有功能都按预期工作。这将创建一个临时表,该表隐藏前一个表,直到临时表再次被删除:

CREATE TEMPORARY TABLE t (test INT);

这将创建一个与原始表具有相同结构(但名称不同)的临时表:
CREATE TEMPORARY TABLE t2 LIKE t;

但这给出了一个错误:
CREATE TEMPORARY TABLE t LIKE t;



该表是一个持久缓存,用于保存从原始表中获取时需要很长时间的分组数据。该数据用于生成报告。有时,对于部分报告,我想根据数据的子集重新创建缓存。临时表非常适合这种情况,因为我可以用新鲜数据覆盖原始缓存,在其上运行报告功能,并在连接结束时自动删除它,而所有其他进程都可以愉快地使用真正的持久表。

最佳答案

现在我明白你想要做什么,这是我最接近做你想做的事情:

CREATE TEMPORARY TABLE t AS SELECT * FROM t LIMIT 0;

这将创建一个临时表,它将使用几乎相同的模式“隐藏”原始表。不涉及的关键是任何键定义、这些键上的 auto_increment 属性、索引和默认值。

原答案:
您可以在工作时重命名表。理解在此版本中,当脚本运行时,您的影子表将对所有其他连接可见:
CREATE TABLE target_temp LIKE target;

然后原子地重命名这两个表,因此“临时”表替换了真正的表:
RENAME TABLE target TO target_old, target_temp TO target;

做你的事...

然后,撤消:
RENAME TABLE target TO target_temp, target_old TO target;
DROP TABLE target_temp;

关于mysql - 像普通表一样创建临时表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18435540/

10-13 07:56