9

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

MySQL 和 SQLiteINSERT IGNORE特性有助于处理这个问题。

所以我的问题是:

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

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

4

1 回答 1

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): RetQueryfromFullInsertInvoker

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

于 2013-02-18T12:05:46.550 回答