将数据备份到另一个表中

时间:2012-03-03 03:30:20

标签: mysql temp-tables

执行以下存储过程时出现“未知表'matched_temp'”错误。

DELIMITER $$

DROP PROCEDURE IF EXISTS `apms`.`sp_partition_parkinout` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_partition_parkinout`()
BEGIN

DROP TEMPORARY TABLE IF EXISTS MATCHED_TEMP;

CREATE TEMPORARY TABLE MATCHED_TEMP AS
    SELECT ID FROM CARDINOUT
    WHERE (`State` = 2) AND
        (ID NOT IN (SELECT ID FROM CARDINOUT_MATCHED))
    LIMIT 200;

INSERT INTO CARDINOUT_MATCHED
SELECT * FROM CARDINOUT
WHERE ID IN (SELECT ID FROM MATCHED_TEMP);

DELETE FROM CARDINOUT
WHERE ID IN (SELECT ID FROM MATCHED_TEMP);

END $$

DELIMITER ;

我想定期执行它以将数据从cardinout移动到cardinout_matched。保持表cardinout尽可能小的目的,因为cardinout经常被查询。

还有其他选择可以实现吗?

由于 Botem

1 个答案:

答案 0 :(得分:1)

CREATE TEMPORARY TABLE MATCHED_TEMP (
    ID INT
);
INSERT INTO MATCHED_TEMP
SELECT ID FROM CARDINOUT 
(...)