由于我在我的项目中使用的主题数据的性质,在输入集中经常需要重复记录(有时它意味着在同一输入集中重复记录,这可以通过以下方式轻松处理:预插入过滤,但通常输入集可以包含与数据库中已存在的记录重复的记录。
MySQL和SQLite INSERT IGNORE
功能有助于处理此问题。
所以我得到的问题是:
如何在将数据插入MySQL或SQLite数据库时使Slick使用INSERT IGNORE
而不是裸INSERT
?
使用Slick与MS SQL Server本地不支持时,模拟INSERT IGNORE
功能的最佳方法是什么?
答案 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}}的方法与驱动程序无关,因此您可以使用相同的结构为任何数据库添加功能。