Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SELECT语句中创建临时表,而不使用单独的Create table_Mysql_Select_Temp Tables_Create Table_Derived Table - Fatal编程技术网

Mysql 在SELECT语句中创建临时表,而不使用单独的Create table

Mysql 在SELECT语句中创建临时表,而不使用单独的Create table,mysql,select,temp-tables,create-table,derived-table,Mysql,Select,Temp Tables,Create Table,Derived Table,是否可以从select语句创建临时(仅会话)表,而不使用CREATETABLE语句并指定每个列类型?我知道派生表能够做到这一点,但它们是超临时的(仅限语句),我想重复使用 如果我不必编写CREATETABLE命令并保持列列表和类型列表匹配,这将节省时间 CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1) 从手册中可以找到 创建表时可以使用临时关键字。临时表仅对当前会话可见,并且在会话关闭时自动删除。这意味着

是否可以从select语句创建临时(仅会话)表,而不使用CREATETABLE语句并指定每个列类型?我知道派生表能够做到这一点,但它们是超临时的(仅限语句),我想重复使用

如果我不必编写CREATETABLE命令并保持列列表和类型列表匹配,这将节省时间

CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)
从手册中可以找到

创建表时可以使用临时关键字。临时表仅对当前会话可见,并且在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名,而不会相互冲突,也不会与相同名称的现有非临时表冲突。(在删除临时表之前,现有表是隐藏的。)若要创建临时表,必须具有“创建临时表”权限

使用以下语法:

CREATE TEMPORARY TABLE t1 (select * from t2);

选择前必须先关闭发动机:

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)

当表包含
BLOB
/
TEXT
列时,不支持
ENGINE=MEMORY
,如果需要将索引添加到临时表中,请执行以下操作:

CREATE TEMPORARY TABLE IF NOT EXISTS 
  temp_table ( INDEX(col_2) ) 
ENGINE=MyISAM 
AS (
  SELECT col_1, coll_2, coll_3
  FROM mytable
)

它还可以与主键一起工作,据我所知,如果您在phpMyAdmin中使用SELECT语句,则SELECT语句将在临时表上工作,但在执行该SELECT之后,临时表将消失。这意味着首先要准确地设置您想要对其执行的操作,并且在您更改数据(删除、更新)的“操作”语句完成之前,不要查看任何结果。

完美!具有最佳MaxLength和all的列!我添加了单词
temporary
so
create temporary table mytable as select…
@imperium2335,也许您应该尝试以下操作:
create table t as select。。。限制为0;alter table t engine=内存;插入t选择…
。或者,您可以更改“新表的默认引擎”。我想这可以在会话级别变量中完成。更好的方法是,使用右上角的“提问”按钮。这不需要知道列名和类型,而这正是提问者希望避免使用“创建表”的原因。如果不存在,您可以这样使用它
创建临时表表2,如表1
,如果您不想复制数据,just Structure会话是什么意思?Engine=内存是否也可以与这种语法一起使用?@DarkSide Yes Engine=内存也可以使用。请参见以下示例:MyISAM和内存引擎之间的区别是什么?内存的好处是什么?@yeahman MyISAM引擎将数据存储在磁盘中,但内存引擎将数据保存在RAM中。备注:内存引擎不支持
事务
,仅支持表级锁定。。。阅读更多:复制数据更客观!伟大的
CREATE TEMPORARY TABLE IF NOT EXISTS to_table_name AS (SELECT * FROM from_table_name)