gpt4 book ai didi

mysql - Slick 3 为单个列表生成不正确的 MySQL upsert 语句

转载 作者:行者123 更新时间:2023-11-29 06:14:56 25 4
gpt4 key购买 nike

我有一个非常简单的 MySQL 表,它使用单个字符串列表示一组名称。我想使用 Slick 的 insertOrUpdate 但它生成的 MySQL 不正确,从而导致错误。具体来说就是要执行

insert into `TABLE1_NAME` (`column`)  values ('value') on duplicate key update

它没有指定要更新的什么,所以失败了。具有两列的类似表可以很好地更新插入,其中包含类似

的语句
insert into `TABLE2_NAME` (`key`, `other_col`)  values ('value1', 'value2') on duplicate key update `other_col`=VALUES(`other_col`)

有人看过吗?我们确实为 TABLE1 设置了一个主键。我们可能没有正确地做我们的表投影映射。我们正在使用 Slick 3.1.1。

class Table1(tag: Tag) extends Table[Table1Record](tag, "TABLE1_NAME") {
def value = column[String]("value", O.PrimaryKey, O.Length(254))
def * = (value) <> (Table1Record, Table1Record.unapply)
}

class Table2(tag: Tag) extends Table[Table2Record](tag, "TABLE2_NAME") {
def value1 = column[String]("value1", O.PrimaryKey, O.Length(254))
def value2 = column[String]("value2", O.Length(254))
def * = (value1, value2) <> (Table2Record.tupled, Table2Record.unapply)
}

最佳答案

在单个列表中没有“插入或更新”这样的概念。单列是键的一部分。如果键完全匹配,则没有其他列要更新。如果键不匹配,那么新插入的行将不会与任何键重复,因此不会发生更新子句。因为没有其他要更新的列,所以生成的 SQL 格式不正确 —— 生成了一些文本,假设某些字段名将附加在它后面,但没有要附加的字段名。

顺便说一下,对于一个有两列的表,插入语句看起来像

insert into `TABLE2_NAME` (`key`, `other_col`) 
values ('value1', 'value2')
on duplicate key update `other_col`=VALUES(`other_col`)

它只列出了 update 子句中的非键列。 (正确理解这一点应该有助于您更好地理解单列表的情况。)

关于mysql - Slick 3 为单个列表生成不正确的 MySQL upsert 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com