我有一个MySQL存储例程,在这里我想使用一个临时数据表来存储中间结果。为了避免创建一个“正常”表,我想使用一个内存中的表,当例程执行完成后,这个表就会消失。我是一个MySQL新手,但我想这是个好办法:
DROP TABLE IF EXISTS MyInMemoryTable;
CREATE TABLE MyInMemoryTable ( numberField int ) ENGINE = MEMORY;
...
DROP TABLE IF EXISTS MyInMemoryTable;我的例程只适用于一个用户,但是如果多个用户同时运行例程,我会感到紧张吗?
MyInMemoryTable 本地是否适用于每个用户会话执行例程,因此同时可以有许多此表的实例(没有冲突)?或者MyInMemoryTable是一个针对所有用户的单一全局表,从而可能使不同用户的数据混淆在表中?或者,如果另一个用户忙于运行例程,一个用户会冒得到数据库错误的风险吗?
对我来说,文档是令人困惑的:它说MEMORY引擎将每个表与一个磁盘文件相关联,而且"MEMORY表从未转换为磁盘表“。
我是否误解了内存中的MySQL表?也许有更好的方法?
发布于 2011-11-18 08:27:24
创建一个临时表。
CREATE TEMPORARY TABLE ...;这些表不是共享的,当连接结束时将被删除。
内存表中的标准可能是共享的和全局的。
发布于 2015-04-16 07:16:48
这是两个不同的概念:表引擎和表临时属性。理论上,任何引擎的表都可以是临时的(InnoDB、MyISAM、内存)。在MySQL中,内存引擎可能是最不了解的存储引擎。。在引擎盖下,它是一个递增增长的散列图。因此,是的,内存中的表可以是本地会话,但它们必须是临时的:
mysql> show create table tmp; CREATE TEMPORARY TABLE `tmp` ( `a` int(11) DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=latin1 | 1 row in set (0.00 sec)
mysql> drop table tmp; Query OK, 0 rows affected (0.01 sec)
mysql> show create table tmp; CREATE TABLE `tmp` ( `example` int(11) NOT NULL, `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`example`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 |https://stackoverflow.com/questions/8179600
复制相似问题