我正在审查/重新设计/重构数据库,并希望创建一个新的数据库,以更智能的方式存储几乎相同的数据。 “遗留”数据库中的一个问题是它没有正确使用密钥和索引,因此存在重复的条目,其中应该没有。
我编写了一个python脚本,它从遗留数据库中读取数据并生成一个SQL脚本,然后使用许多非常相似的SQL INSERT语句将这些值从遗留数据库插入到新数据库中。每次遇到带有错误消息的重复条目时,SQL脚本都会停止
ERROR 1062(23000)第3086行:为'lat_lon_height'重复输入'56 .450000000--3.366670000-121'
AFAICT正是应该做的。但是,目前,我只希望脚本继续运行,不要插入重复的条目,而是打印关于它们的警告。我尝试在the MySQL docs和some other online resources之后以几种方式在脚本开头安装继续处理程序,但所有这些只会产生语法错误:
DECLARE CONTINUE HANDLER FOR 1062
SELECT 'Duplicate key in unique index';
或
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'
SELECT 'Duplicate key in unique index';
或
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'
BEGIN
SELECT 'Duplicate key in unique index';
END;
我做错了什么?
答案 0 :(得分:1)
我没有使用处理程序,除了存储过程内部,我对它们的使用受到限制但是平安无事。也许您可以将代码转换为存储过程然后运行存储过程?您可能会发现MySQL接受您当时要执行的操作。
答案 1 :(得分:0)
好的,让SQL脚本只打印所有出现的错误的一种方法是使用--force命令行选项,如
mysql --force < my_insertion_script.sql
仍然不知道对重复条目实际做了什么,但是一旦我发现了(不是SQL问题),this可能会有所帮助。
很想让继续处理程序工作,但是......