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

MySQL和SQLite的INSERT IGNORE功能在处理此问题方面有很大帮助。

所以我的问题是:

  • 将数据插入MySQL或SQLite数据库时,如何使Slick使用INSERT IGNORE而不是裸INSERT
  • 将Slick与 native 不支持的MS SQL Server一起使用时,模拟INSERT IGNORE功能的最佳方法是什么?
  • 最佳答案

    我没有使用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): RetQueryFullInsertInvoker
    至于第二个问题。不支持INSERT IGNORE时,变通办法的实现取决于数据库,Google会帮助您找到不同的实现。由于上述添加INSERT IGNORE的方法与驱动程序无关,因此您可以使用相同的结构为任何数据库添加功能。

    关于scala - 如何使用Slick进行INSERT IGNORE查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14861467/

    10-11 20:43