MySQL:DECLARE CONTINUE HANDLER继续出错,打印警告

时间:2010-09-27 08:03:04

标签: mysql handler mysql-error-1062

我正在审查/重新设计/重构数据库,并希望创建一个新的数据库,以更智能的方式存储几乎相同的数据。 “遗留”数据库中的一个问题是它没有正确使用密钥和索引,因此存在重复的条目,其中应该没有。

我编写了一个python脚本,它从遗留数据库中读取数据并生成一个SQL脚本,然后使用许多非常相似的SQL INSERT语句将这些值从遗留数据库插入到新数据库中。每次遇到带有错误消息的重复条目时,SQL脚本都会停止

  

ERROR 1062(23000)第3086行:为'lat_lon_height'重复输入'56 .450000000--3.366670000-121'

AFAICT正是应该做的。但是,目前,我只希望脚本继续运行,不要插入重复的条目,而是打印关于它们的警告。我尝试在the MySQL docssome 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;

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我没有使用处理程序,除了存储过程内部,我对它们的使用受到限制但是平安无事。也许您可以将代码转换为存储过程然后运行存储过程?您可能会发现MySQL接受您当时要执行的操作。

答案 1 :(得分:0)

好的,让SQL脚本只打印所有出现的错误的一种方法是使用--force命令行选项,如

mysql --force < my_insertion_script.sql

仍然不知道对重复条目实际做了什么,但是一旦我发现了(不是SQL问题),this可能会有所帮助。

很想让继续处理程序工作,但是......