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

时间:2014-12-02 06:03:55

标签: mysql sql-server database tsql stored-procedures

我正在寻找MySql中的Sql-Server相关功能

程序内的表变量。 here

临时表内部程序。 here

我希望表变量是内存中的,临时表存储在临时数据库中。 如果两个都在内部程序中声明,则在程序完成执行后都将清除它们。

MySql只提供一个名为Temporary Table的选项。如何实现这两个?我们是否需要清除这些表,或者MySql会在程序完成后处理它?<​​/ p>

1 个答案:

答案 0 :(得分:2)

来自MySQL文档:

  

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

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

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 ;