MySQL存储过程选择检查插入
所以我尝试在MySQL版本5.5中创建一个存储过程。 我不确定哪里错了,但我想完成的是 从表A中获取超过7天的记录。然后插入到表B中,但我需要检查它是否存在于表B中。如果存在,则跳过,否则插入 这是我的代码:MySQL存储过程选择检查插入,mysql,select,stored-procedures,sql-insert,Mysql,Select,Stored Procedures,Sql Insert,所以我尝试在MySQL版本5.5中创建一个存储过程。 我不确定哪里错了,但我想完成的是 从表A中获取超过7天的记录。然后插入到表B中,但我需要检查它是否存在于表B中。如果存在,则跳过,否则插入 这是我的代码: DROP PROCEDURE IF EXISTS `move_record`; DELIMITER // CREATE PROCEDURE `move_record`() BEGIN DECLARE done INT DEFAULT FALSE; DECLA
DROP PROCEDURE IF EXISTS `move_record`;
DELIMITER //
CREATE PROCEDURE `move_record`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE dt DATETIME;
DECLARE uid,value BIGINT(20);
DECLARE category VARCHAR(30);
DECLARE data,comments VARCHAR(255);
DECLARE cancel TINYINT(1) DEFAULT NULL;
DECLARE curs CURSOR FOR SELECT `datetime`,user_id,category,data,comments,cancel FROM `record` WHERE `datetime` < DATE_SUB(CURDATE(), INTERVAL 7 DAY);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN curs;
myloop: LOOP
FETCH NEXT FROM curs INTO dt,uid,category,data,comments,cancel;
IF done THEN
LEAVE myloop;
END IF;
IF NOT EXISTS (SELECT * FROM `record_arc`
WHERE record_arc.`datetime` = dt
AND record.user_id = uid )
INSERT INTO `record_arc` (`datetime`,user_id,category,data,comments,cancel) VALUES (dt,uid,category,data,comments,cancel);
END IF;
END LOOP myloop;
CLOSE curs;
DEALLOCATE curs;
END//
DELIMITER ;
也许你不需要循环就能做到这一点
INSERT INTO `record_arc`(
`datetime`,
user_id,
category,
data,
comments,
cancel
)
SELECT
`datetime`,
user_id,
category,
data,
comments,
cancel
FROM `record` r
WHERE
`datetime` < DATE_SUB(CURDATE(), INTERVAL 7 DAY)
AND NOT EXISTS(
SELECT 1
FROM `record_arc` r2
WHERE
r2.`datetime` = r.`datetime`
AND r2.user_id = r.user_id
)
别名你用错了。检查下面的代码
IF NOT EXISTS (SELECT 1 FROM `record_arc`
WHERE record_arc.`datetime` = dt
AND record_arc.user_id = uid )
离开read_循环?????应该是leve myloop,请让我们知道您得到的错误。1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解可在第25行record_arc.user_id处使用的“INSERT in record_arc datetime、user_id、category、data、comments、cancel VALU”附近使用的正确语法。[您的代码具有record.user_id.]谢谢。顺便说一句,如果我有很多记录,它会影响性能吗?我每次执行有100000行,或者更多行。这将比循环实现更快。通常应使用基于集合的方法。