我在我的数据库中有三个表: tbl_object
, tbl_tag
tbl_object_tag_xref
。
tbl_object
和tbl_tag
只有两列id
和name
。
tbl_object_tag_xref
将对象与标签进行匹配,反之亦然,具有列id
, tbl_object_id
和tbl_tag_id
。
tbl_object
和tbl_tag
表已经被填充了适当的数据。 只有tbl_object_tag_xref
表仍然是空的。
我有一个脚本parsing各种数据源,并以CSV格式输出这些外部参照:
"object1","tag1" "object1","tag2" "object2","tag2" ...
由于脚本可能无法parsing,并产生一些错误的行,这个输出然后由人手validation和纠正(这里的真实数据要复杂得多,而且不能自动执行)。
更正后,数据转换为SQL查询:
INSERT INTO tbl_object_tag_xref VALUES (NULL, (SELECT id FROM tbl_object WHERE name = 'object1'), (SELECT id FROM tbl_tag WHERE name = 'tag1')) INSERT INTO tbl_object_tag_xref VALUES (NULL, (SELECT id FROM tbl_object WHERE name = 'object1'), (SELECT id FROM tbl_tag WHERE name = 'tag2')) INSERT INTO tbl_object_tag_xref VALUES (NULL, (SELECT id FROM tbl_object WHERE name = 'object2'), (SELECT id FROM tbl_tag WHERE name = 'tag2')) ...
现在我想通过采购这些语句将这些数据导入到数据库中。 当然这些陈述中存在错误的内在可能性。 debugging这些错误的最好方法是什么? 有工具可以帮助我吗? 我应该重新考虑整个工作stream程吗?
我的最佳debugging工作stream程如下所示(伪代码):
BEGIN; SOURCE insert_statements.sql; SUMMARIZE all warnings and errors; including information whether already a subquery failed, which one and why including information about the respective line numbers and content in the .sql and the .csv files ASK whether to COMMIT or ROLLBACK;
但是, SHOW WARNINGS
和SHOW ERRORS
不起作用,因为失败的声明通常不是最后一个。 SHOW INNODB STATUS
是一个痛苦的屁股,只显示最后的外键错误,没有总结。 由于数据可能很大(超过3000行),滚动是不可选的,输出缓冲区通常很小以保存所有的输出。
有什么build议么?
performance.cchema = ON在您的.cfg / .ini
运行你的过程,然后使用performance_schema; SELECT * FROM statements_with_errors_or_warnings \ G; 将列出所有最近的错误或警告。 错误将首先列出,然后警告。