如何使用Slick进行INSERT IGNORE查询?

时间:2013-02-13 19:29:17

标签: scala slick

由于我在我的项目中使用的主题数据的性质,在输入集中经常需要重复记录(有时它意味着在同一输入集中重复记录,这可以通过以下方式轻松处理:预插入过滤,但通常输入集可以包含与数据库中已存在的记录重复的记录。

MySQL和SQLite INSERT IGNORE功能有助于处理此问题。

所以我得到的问题是:

  1. 如何在将数据插入MySQL或SQLite数据库时使Slick使用INSERT IGNORE而不是裸INSERT

  2. 使用Slick与MS SQL Server本地不支持时,模拟INSERT IGNORE功能的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

我对Slick没有经验。从我收集的源代码中,为了使Slick能够使用INSERT IGNORE,您需要执行以下几个步骤:

  • 扩展所需数据库的驱动程序
  • 覆盖通过InsertBuilder创建的默认def createInsertBuilder(node: Node): InsertBuilder。扩展它并添加一个类似于buildInsert方法的专用方法。
  • 覆盖通过InsertInvoker创建的默认def createCountingInsertInvoker[T, U](u: ShapedValue[T, U])。扩展它并添加insertIgnore,该def insert[TT](query: Query[TT, U])(implicit session: Session): RetQuery应与FullInsertInvoker
  • 中的INSERT IGNORE类似

至于你的第二个问题。 INSERT IGNORE不支持的变通方法的实施是依赖于数据库的,谷歌将帮助您找到不同的实现。由于上面添加{{1}}的方法与驱动程序无关,因此您可以使用相同的结构为任何数据库添加功能。