Mysql 当从SELECT语句执行函数时,是否会多次构建存储函数中的临时表?
假设我有一个函数,它创建了一个临时表,我想用于Mysql 当从SELECT语句执行函数时,是否会多次构建存储函数中的临时表?,mysql,database,Mysql,Database,假设我有一个函数,它创建了一个临时表,我想用于SELECT查询。函数是否有可能在SELECT语句中多次重建临时表?这种情况下的最佳实践是什么 CREATE FUNCTION getID(id INT) RETURNS INT DETERMINISTIC BEGIN -- build ID table CREATE TEMPORARY TABLE IF EXISTS tbl2( id int, val int ); -- insert values into tb
SELECT
查询。函数是否有可能在SELECT
语句中多次重建临时表?这种情况下的最佳实践是什么
CREATE FUNCTION getID(id INT)
RETURNS INT DETERMINISTIC
BEGIN
-- build ID table
CREATE TEMPORARY TABLE IF EXISTS tbl2(
id int,
val int
);
-- insert values into tbl2 here
SET @id = NULL;
SELECT tbl2.id INTO @id from tbl2 where id = tbl2.id;
return @id;
END
不可以。所有调用都将在同一个连接中执行,因此除第一个调用外,所有调用都存在该表。您可以强制执行该表,但实际问题是什么?您想在这里做什么?该函数将被调用
x
*行
。话虽如此,MySQL不允许创建拖放表,也不允许在函数中选择。存储过程,但deos允许this@Nae我希望在查询中运行该函数,但我不希望每次必须运行该函数时都重建临时表。@J.Chan好的,但仍然可以。你为什么需要这个?
SELECT getID(id)
FROM tbl
WHERE condition;