MySQL过程临时表选择

标签 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 语句的唯一变量是 IDX(主键)。其他的总是 NULL。

这段代码有问题吗?

最佳答案

您是否查看过您的临时表以查看其中挥之不去的数据类型?该过程完成后临时表仍会存在,如果您从同一 session 再次运行该过程,您将向现有临时表中写入新行。

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

关于MySQL过程临时表选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695375/

相关文章:

mysql - 如何在 Coldfusion 中创建具有 UUID 名称的临时 MySQL 表?

mysql - Docker 无法链接到未运行的容器

java - 使用java从流式api将推文存储在mysql中

mysql - EXISTS 子查询导致错误 1064

mysql - 奇怪的 MySQL 弹出窗口 "Mysql Installer is running community mode"

sql-server - 使用 SQL 存储过程从不同表中删除多条记录

stored-procedures - 存储过程未在 Crystal 报表中显示字段

mysql - 创建存储过程时遇到问题

SQL SERVER QUERY 选择每个项目的最大值记录

sql - 数据库中已有一个名为 '##Temp'的对象