【发布时间】:2019-06-27 15:10:54
【问题描述】:
使用mysql 5.7,当我执行这个程序时:
DELIMITER $$
CREATE PROCEDURE tres()
BEGIN
DECLARE maxid INT;
DECLARE x INT;
SET maxid = 655;
SET x=1;
WHILE x<= maxid DO
INSERT INTO `forum_topicresponder` (topic_id, username, reply_id) SELECT p.topic_id, p.creator_name, p.id FROM forum_post AS p WHERE p.topic_id=x;
SET x = x + 1;
END WHILE;
END$$
我明白了
mysql> 调用 tres();
查询正常,0 行受影响(3.49 秒)
但是,当我对循环范围内的某些值执行 INSERT 时:
INSERT INTO `forum_topicresponder` (topic_id, username, reply_id) SELECT p.topic_id, p.creator_name, p.id FROM forum_post AS p WHERE p.topic_id=42;
我看到结果插入没有问题。
表架构:
CREATE TABLE `forum_topicresponder` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`topic_id` int(10) NOT NULL DEFAULT '0',
`username` varchar(300) CHARACTER SET utf8mb4 NOT NULL DEFAULT 'na',
`reply_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=latin1;
和
CREATE TABLE `forum_post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` varchar(16000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`topic_id` int(11) NOT NULL DEFAULT '0',
`creator_id` int(11) NOT NULL DEFAULT '0',
`creator_name` varchar(30) NOT NULL DEFAULT 'NA',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6264595 DEFAULT CHARSET=utf8;
那么这里可能出了什么问题,我该如何解决?
【问题讨论】:
-
不清楚。您期望什么以及会发生什么?
-
我希望循环遍历所有
topic_ids,获取每个相关响应者并将它们插入forum_topicresponder。正如单个插入查询所做的那样。 -
测试它工作正常..它将所有记录从forum_post复制到forum_topicresponder..然后出了什么问题..?
-
感谢测试。然而不同的是,我的
forum_post没有reply_id字段。我已经添加了架构。请再看一遍。