如何在单个原子操作中将临时 table 转换为永久 table?

How to convert a temporary table to permanent table in a single atomic operation?

如何在单个原子操作中将临时 table 转换为静态 table,同时仍然对 table 结构不可知但仍保留它,在 MySQL?

对于 table 的预先创建的临时文件:

CREATE TEMPORARY TABLE _tmp SELECT 0 AS Col1, 'text' AS Col2;
ALTER TABLE _tmp ADD UNIQUE INDEX (Col1, Col2);

当然,一个人总是可以去的:

CREATE TABLE permanent SELECT * FROM _tmp; -- 1
ALTER TABLE permanent ADD UNIQUE INDEX (Col1, Col2); -- 2

或者,由于缺乏更好的解决方案,我正在使用:

-- mostly agnostic to the structure unless for generated or auto-increment columns
CREATE TABLE permanent LIKE _tmp; -- 1
INSERT INTO permanent SELECT * FROM _tmp; -- 2

如上图所示,现在我只能设法用至少 2 (DDL + (DDL or DML)) 语句来完成。

有没有办法将其改进为单个 DDL?也许是一种功能,可以促进结合 LIKEINSERT 的功能?

CREATE TABLE permanent
SELECT * FROM _tmp;

fiddle

或(如果您需要唯一密钥)

CREATE TABLE permanent ( UNIQUE KEY `Col1` (`Col1`,`Col2`) )
SELECT * FROM _tmp;

fiddle