2

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

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

第 3086 行的错误 1062 (23000):重复条目 '56.450000000--3.366670000-121' 用于键 'lat_lon_height'

AFAICT 正是它应该做的。但是,目前,我只希望脚本继续运行,而不是插入重复的条目,而是打印关于它们的警告。我尝试按照MySQL 文档其他一些在线资源,以多种方式在脚本开头安装 continue 处理程序,但所有这些都只会产生语法错误:

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;

我究竟做错了什么 ?

4

2 回答 2

1

除了在存储过程内部,我没有使用过处理程序,我对它们的使用受到限制但平淡无奇。也许你可以把你的代码变成一个存储过程,然后运行这个存储过程?你可能会发现 MySQL 接受了你正在尝试做的事情。

于 2010-09-27T10:20:39.417 回答
0

好的,让 SQL 脚本简单地打印所有发生的错误的一种方法是使用 --force 命令行选项,如

mysql --force < my_insertion_script.sql

仍然不知道如何处理重复的条目,但是一旦我弄清楚了(不是 SQL 问题),可能会有所帮助。

很想让继续处理程序工作,虽然......

于 2010-09-27T08:34:12.793 回答