在Slick中插入InsertUrUpdate - 不使用主键时

时间:2017-09-15 07:30:59

标签: scala slick

我们在Scala项目中使用Slick。我们需要进行Upsert操作(插入/更新)的模块。我们知道的方法之一就是简单地使用SQL语句并执行它,但是现在我们仍然希望使用Slick来代替它。

由于Slick的版本我们使用支持InsertOrUpdate()操作,我们想要使用它。现在这是一个问题: -

我们的表有一个主键,即设置为自动增量的索引。我们想要做的upsert操作是在一个事务id上,虽然它应该是唯一的,但在数据库中没有标记为唯一或主键。

如何处理这种情况?我尝试通过首先检查表来手动实现Upsert,然后插入/更新但在生产环境中失败,当每秒发出许多请求时,我们有大约1%的结果有2个插入。

1 个答案:

答案 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。