MySQL程序临时表选择

时间:2013-07-17 08:56:12

标签: mysql stored-procedures temp-tables

我正在尝试创建一个临时表,并在mysql过程中从中选择结果。

这是一段SQL

DELIMITER $$

CREATE PROCEDURE `mydb`.`simulate_results` (currdate DATETIME, enddate DATETIME, idcam INT)
BEGIN

DECLARE MYVAR1,
        MYVAR2,
        MYVAR3,
        IDX INT;

CREATE TEMPORARY TABLE IF NOT EXISTS tmp (
    `Id` INT NOT NULL AUTO_INCREMENT,
    `Field1` INT NOT NULL,
    `Field2` INT NOT NULL,
    `Field3` INT NOT NULL, PRIMARY KEY (`Id`)) ENGINE=MEMORY; 

INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (0,0,0);
INSERT INTO tmp (`Field1`,`Field2`,`Field3`) VALUES (1,0,0);



SELECT Field1,Field2,Field3,Id INTO MYVAR1,MYVAR2,MYVAR3,IDXFROM tmp ORDER BY RAND() LIMIT 1;


        SELECT MYVAR1; (...)

SELECT INTO statemente填充的唯一变量是IDX(主键)。其他的总是NULL。

此代码有问题吗?

1 个答案:

答案 0 :(得分:4)

您是否查看了临时表以查看其中存在哪种数据?在过程完成后,临时表仍然存在,如果从同一会话再次运行该过程,您将在现有临时表中写入新行。

我会在DROP TEMPORARY TABLE IF EXISTS tmp之前添加CREATE TEMPORARY TABLE ...,以确保您没有旧数据。