我正在获取id为200,000 -500,000的数据,并尝试将其转换为演示数据。我想把它放在数据库的开头而不是中间。 ID不是连续的,由于其他数据被删除,因此增量存在间隙。
我尝试使用此命令
UPDATE table_name SET `id`=(`id`-200000)
它为第一组做得很好,但总共只有大约1000个记录,而且我仍然有200,000个范围内的东西。我愚蠢地认为我可以再次运行它,但是一旦尝试将数字的id分配给负1,它就会给我一个未签名的密钥错误。
我通常只是从insert语句中删除主键并将其重新插入到新数据库中,但在这种情况下,还有多个其他表具有自动级联的外键约束,以使其保持同步。
任何人都有一个有用的脚本,可以完成这样的任务吗?我不确定这种情况经常发生,但希望有人解决了这个问题。
我尝试制作存储过程(我的第一个),但收到错误:unknown system variable 'id'
DROP PROCEDURE IF EXISTS proc_demo_decrement;
CREATE PROCEDURE proc_demo_decrement()
BEGIN
DECLARE lastId INT DEFAULT 5;
demo_loop : LOOP
SET id = lastId +1;
SET lastId = id;
SELECT id;
END LOOP;
END;
答案 0 :(得分:0)
今晚学到了一些新技巧,这是存储过程:
DROP PROCEDURE IF EXISTS proc_demo_front_load;
CREATE PROCEDURE proc_demo_front_load()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a,b INT DEFAULT 4;
DECLARE cur1 CURSOR FOR SELECT id FROM client ORDER BY id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO b;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE client SET id = a + 1 where id = b;
SET a = a+1;
END LOOP;
CLOSE cur1;
END;