在 Kettle 中,我在转换中使用以下逻辑,给定一些字符串 X 和 Y 作为输入:
[User Defined Java Expression] Generate ID
[Insert / Update] Update/Insert table set id = generatedId, name=X, company=Y where name = X; don't update the ID column
[Database Value Lookup]select id from table where name = X
想法是更新表中的现有条目或创建新条目并在下一步中获取感兴趣行的 ID(可能是现有的或新生成的)。
这在 MySQL + MyISAM 上执行时工作正常,但在 MySQL + InnoDB 上失败,所有其他参数都相同。当行刚刚在第二步中插入时,最后一步失败,但适用于数据库中已经存在的行。似乎连接在实际插入发生之前尝试执行最后一步的 SELECT。MySQL 设置中的所有参数都设置为默认值(MySQL 5.1 和 5.5 显示相同的行为)。
所以我的问题是:Kettle 和/或 MySQL 中的相关参数是什么?我如何保证这按预期工作?我无法切换回 MyISAM。