我们在Scala项目中使用Slick。我们需要进行Upsert操作(插入/更新)的模块。我们知道的方法之一就是简单地使用SQL语句并执行它,但是现在我们仍然希望使用Slick来代替它。
由于Slick的版本我们使用支持InsertOrUpdate()操作,我们想要使用它。现在这是一个问题: -
我们的表有一个主键,即设置为自动增量的索引。我们想要做的upsert操作是在一个事务id上,虽然它应该是唯一的,但在数据库中没有标记为唯一或主键。
如何处理这种情况?我尝试通过首先检查表来手动实现Upsert,然后插入/更新但在生产环境中失败,当每秒发出许多请求时,我们有大约1%的结果有2个插入。
答案 0 :(得分:-1)
如果您想自动生成唯一ID,那么您应该转到UUID。这将使碰撞几乎不可能。然而,在我看来,你不想这样做。
其他选项是保留在单独的表ui = dashboardPage(
dashboardHeader(
title = "My Awesome Dashboard",
tags$li(class = "dropdown",
tags$li(class = "dropdown", textOutput("logged_user"), style = "padding-top: 15px; padding-bottom: 15px; color: #fff;"),
tags$li(class = "dropdown", actionLink("login", textOutput("logintext"))))
)
, dashboardSidebar(), dashboardBody())
server = function(input, output, session) {
logged_in <- reactiveVal(FALSE)
# switch value of logged_in variable to TRUE after login succeeded
observeEvent(input$login, {
logged_in(ifelse(logged_in(), FALSE, TRUE))
})
# show "Login" or "Logout" depending on whether logged out or in
output$logintext <- renderText({
if(logged_in()) return("Logout here.")
return("Login here")
})
# show text of logged in user
output$logged_user <- renderText({
if(logged_in()) return("User 1 is logged in.")
return("")
})
}
shinyApp(ui = ui, server = server)
中,并使(transactionId, id)
成为主键和autoinc。