Mysql 在SELECT语句中创建临时表,而不使用单独的Create table
是否可以从select语句创建临时(仅会话)表,而不使用CREATETABLE语句并指定每个列类型?我知道派生表能够做到这一点,但它们是超临时的(仅限语句),我想重复使用 如果我不必编写CREATETABLE命令并保持列列表和类型列表匹配,这将节省时间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) 从手册中可以找到 创建表时可以使用临时关键字。临时表仅对当前会话可见,并且在会话关闭时自动删除。这意味着
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
socreate 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)