我正在寻找MySql中的Sql-Server相关功能
程序内的表变量。 here
临时表内部程序。 here
我希望表变量是内存中的,临时表存储在临时数据库中。 如果两个都在内部程序中声明,则在程序完成执行后都将清除它们。
MySql只提供一个名为Temporary Table的选项。如何实现这两个?我们是否需要清除这些表,或者MySql会在程序完成后处理它?</ p>
答案 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 ;