2014-12-02 22 views
0

我正在尋找MySql中的Sql-Server相關功能在MySql中的內存表和臨時表

過程中的表變量。 here

程序中的臨時表。 here

我希望表變量在內存中,臨時表存儲在臨時數據庫中。 如果在程序中聲明瞭兩者,則在程序執行完成後兩者都將被清理。

MySql只提供一個名爲Temporary Table的選項。如何實現這兩個?我們是否需要清除這些表或在完成該過程後MySql會處理它?

回答

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 ;