Используя 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> call 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;
Так что здесь может быть не так и как я могу это исправить?