首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySql中的内存表和临时表中

在MySql中的内存表和临时表中
EN

Stack Overflow用户
提问于 2014-12-02 06:03:55
回答 1查看 1.2K关注 0票数 0

我正在寻找MySql中的Sql-Server相关特性。

表变量在过程中。这里

临时表内程序。这里

我希望表变量在内存中,临时表存储在临时数据库中。如果两个程序都声明在过程内部,则在该过程完成其执行后,将对两者进行清理。

MySql只提供一个名为“临时表”的选项。如何实现这两个目标?我们是否需要清除这些表,还是在程序完成后由MySql来处理呢?

EN

回答 1

Stack Overflow用户

发布于 2014-12-12 04:05:34

来自MySQL文档:

创建表时可以使用临时关键字。临时表仅对当前会话可见,并在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名,而不会相互冲突,或者使用同名的现有非临时表。更多信息:http://dev.mysql.com/doc/refman/5.1/en/create-table.html#create-temporary-table

但是,如果我使用一个连接,会发生什么呢?可能你会有一些数据冲突。在过去,我使用具有唯一id的临时表来避免冲突,如果我多次调用具有相同连接的过程:

代码语言:javascript
复制
DELIMITER $$
DROP PROCEDURE some_proc $$
CREATE PROCEDURE some_proc () 
BEGIN

    -- creating a unique value
    DECLARE VARIABLE tmp_uuid varchar(50);
    SET tmp_uuid = uuid();


    CREATE TEMPORARY TABLE IF NOT EXISTS tbl_temporary
    (
        uuid_id varchar(50), 
        col1 varchar(10),
        col2 varchar(10),
        INDEX(uuid_id)
    );

   -- do some operations on that

    INSERT INTO tbl_temporary(uuid_id, ...) VALUES (tmp_uuid,...);


    -- now, cleaning the data
    DELETE FROM tbl_temporary WHERE uuid_id = tmp_uuid;

    -- if the current session is closed the table will be automatically deleted
END$$

DELIMITER ;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27242892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档