如果值不存在,将值插入 MySQL 表?

Posted

技术标签:

【中文标题】如果值不存在,将值插入 MySQL 表?【英文标题】:Insert values into MySQL table if value does not already exist? 【发布时间】:2020-06-03 15:04:52 【问题描述】:

我希望使用 Python 将嵌套列表插入到 mysql 表中。我想为新的 ID 值插入新行,并为那些具有现有 ID 值的列更新某些列。但是,对于这些嵌套列表之一(水果,s [2]),如果这些记录为空,我只想更新 mysql 表中的这些行!我意识到我提出的查询仅适用于新插入的 id 编号,而不适用于更新现有行。这就是我需要帮助的地方!

s = [[1, 20, 21],[1999, 1998, 1990], ['Apple', 'Pear', 'Bannana']

id = s[0] 
yearborn = s[1] 
favfruit = s[2]

query = '''INSERT INTO table (PersonID, Year, Fruit) 
           VALUES (%s, %s, %s)'''

cursor.executemany(query, s)

【问题讨论】:

相关:***.com/questions/1361340/… 【参考方案1】:

我想为新的 ID 值插入新行,并为那些具有现有 ID 值的列更新某些列。

在 MySQL 中,你可以使用 insert ... on duplicate key syntax 和一些条件逻辑来仅 updatefruit 如果它最初是 null

insert into table (personid, year, fruit) 
values (%s, %s, %s)
on duplicate key update 
    year = values(year), 
   fruit = coalesce(fruit, values(fruit));

为此,您需要对列 personid 设置唯一(或主键)约束。

【讨论】:

我有这个但是由于某种原因“fruit = coalesce....”似乎没有任何效果? 你说的没有任何作用是什么意思? 所以第一行 "values (year) 工作正常。但是 coalesce() 似乎没有改变值。这可能是因为 mysql 表中没有设置空值。肯定是一个空白条目,但看起来像这样 --> ' '?我不确定我是否只是在这里猜测?coalesce 假定为空条目? @Sam: coalesce()null 值进行操作。如果您的值是空字符串,则:fruit = case when fruit = '' then values(fruit) else fruit end。或者你可以同时处理:fruit = case when fruit = '' or fruit is null then values(fruit) else fruit end

以上是关于如果值不存在,将值插入 MySQL 表?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

如果值不存在,则插入连接表

仅当表中不存在两个 id 的组合时才将值插入表中

MySql 表插入,如果不存在,否则更新

如果值不存在,则从其他列插入 id 或 NULL

大查询 - 仅在列值不存在时插入