如何在 MySQL 中声明内部表?

Posted

技术标签:

【中文标题】如何在 MySQL 中声明内部表?【英文标题】:How to declare Internal table in MySQL? 【发布时间】:2011-01-13 14:04:06 【问题描述】:

我想知道如何在 mysql 中定义或声明内部表

我是 MySQL 新手,不懂语法

如你所见,我创建了存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `MySP`(
    actioncode VARCHAR(5),
    TNewsID BIGINT
)

BEGIN

IF actioncode = 1 then -- Retrive all from the database --
    select *
    from emp.tbnews;
elseIF actioncode = 2 then -- Retrive all from the database By NewsID --
    select NewsID,NewsSubject,NewsSubjectAR,NewsDetails,NewsDetailsAR,CreatedOn,DisplayOrder,
           AllowDisplay,img  
    from emp.tbnews
    Where NewsID=TNewsID;
elseIF actioncode = 3 then -- fkjskldfjklsdf --
    select NewsID,NewsSubject,NewsSubjectAR,NewsDetails,NewsDetailsAR,CreatedOn,DisplayOrder,
           AllowDisplay,img  
    from emp.tbnews;

 END IF;
 END

我真正想要的是在 IF 语句之前声明内部表

在 Sql Server 中我是这样做的

declare  @tbTemp table (
 a as int,
 b as char...etc.
)

因为我想把插入语句放在后面

IF actioncode = 1
    Insert into @tbTemp

如果你知道,请告诉我怎么做

向每一个人致以最诚挚的问候。

【问题讨论】:

【参考方案1】:
create temporary table tmp
(
id int unsigned not null,
name varchar(32) not null
)
engine=memory; -- change engine type if required e.g myisam/innodb

insert into tmp (id, name) select id, name from foo... ;

-- do more work...

select * from tmp order by id;

drop temporary table if exists tmp;

create temporary table tmp engine=memory select id, name from foo... ;

-- do more work...

select * from tmp order by id;

drop temporary table if exists tmp;

【讨论】:

COOOOOOOOOOL 非常感谢,这解决了我的问题!【参考方案2】:

你的意思是CREATE TEMPORARY TABLE 吗?它是特定于运行语句的连接的内存中表,因此除非您正在运行持久连接,否则您不必担心名称冲突。

【讨论】:

更正:CREATE TEMPORARY TABLE 并不表示该表驻留在内存中。这是通过创建语句末尾的 type=MEMORY 附录完成的。如果不指定类型,则临时表将是 MyISAM 表。与普通表的唯一区别是,当运行 CREATE TEMPORARY TABLE 的连接关闭时,将收集临时表(它的范围仅限于连接)。

以上是关于如何在 MySQL 中声明内部表?的主要内容,如果未能解决你的问题,请参考以下文章

Day901.内部临时表 -MySQL实战

阿里MySQL面试题内部临时表

Hive中内部表和外部表之间的相互转换

mysql - 如何强制更改内部连接的评估顺序?

MYSQL:三个表的内部联接

mysql更新列内部连接另一个表