是否可以从select语句创建临时(仅会话)表而不使用create table语句并指定每个列类型?我知道派生表能够做到这一点,但这些都是超临时的(仅限声明),我想重新使用。在没有单独的CREATE TABLE的情况下在SELECT语句中创建临时表
如果我不需要编写create table命令并保持列表和列表匹配,这将节省时间。
是否可以从select语句创建临时(仅会话)表而不使用create table语句并指定每个列类型?我知道派生表能够做到这一点,但这些都是超临时的(仅限声明),我想重新使用。在没有单独的CREATE TABLE的情况下在SELECT语句中创建临时表
如果我不需要编写create table命令并保持列表和列表匹配,这将节省时间。
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)
从手动发现在http://dev.mysql.com/doc/refman/5.7/en/create-table.html
创建表时,您可以使用TEMPORARY关键词。 TEMPORARY表是仅对当前会话可见,并且在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名称而不会相互冲突,或与现有的非TEMPORARY同名表相冲突。 (直到临时表被删除时,现有表才会隐藏。)要创建临时表,您必须具有CREATE TEMPORARY TABLES特权。
使用此语法:
CREATE TEMPORARY TABLE t1 (select * from t2);
这对复制数据更为客观!大! – 2017-02-23 20:33:39
发动机前必须选择:
CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY
as (select * from table1)
ENGINE=MEMORY
当表包含BLOB
/TEXT
列
除了psparrow的不支持如果您需要,请回答到添加一个索引到临时表做到:
CREATE TEMPORARY TABLE IF NOT EXISTS
temp_table (INDEX(col_2))
ENGINE=MyISAM
AS (
SELECT col_1, coll_2, coll_3
FROM mytable
)
它还与PRIMARY KEY
完美!具有最佳最大长度和所有列的!我添加了“临时”这个词,所以“创建临时表mytable作为select ...”。 – 2011-05-02 16:36:34
你会如何指定该表的引擎?例如MEMORY 我试过ENGINE = MEMORY,但它给我一个语法错误。 – imperium2335 2012-06-26 06:57:00
@ imperium2335,也许你应该试试以下内容:'create table t as select ... limit 0;改变表t引擎=内存;插入到t选择...'。或者,也许你可以改变“新表的默认引擎”。我想这可以在会话级别变量中完成。更好的是,使用右上方的Ask Question按钮。 – 2012-06-29 16:05:50