MySql:将数据添加到列而不删除以前的数据

Posted

技术标签:

【中文标题】MySql:将数据添加到列而不删除以前的数据【英文标题】:MySql: add data to column without delete the previous ones 【发布时间】:2020-04-04 13:42:32 【问题描述】:

我正在尝试制作一个笔记保存系统。 我有一个 html 登录页面,当用户登录时,会出现一个表单来输入一些要存储的注释。我的 mysql 数据库中有 3 列:用户名、密码和存储数据。

例如,假设用户拥有这些:Username:david | Password:david | StoredData: apple,orange

有没有办法执行查询,所以当用户回来并添加另一个注释不要覆盖以前的注释(苹果,橙色)

相反,向数据库添加另一个注释,例如:我添加香蕉。现在数据库应该是StoredData:apple,orange,banana

【问题讨论】:

【参考方案1】:

您可以使用字符串连接:concat_ws() 很方便,因为它会跳过 null 值(因此考虑到列最初为空的情况):

update mytable 
set stored_data = concat_ws(',', stored_data, 'banana')
where name = 'david'

但是请注意,您的设计未正确规范化。用户与其备注之间存在 1-N 关系:您应该有一个单独的表来存储备注,每个备注位于单独的行中,而不是存储分隔列表:

table users

name    | password
david   | ...

table notes

user_name  | note
david      | apple
david      | orange
david      | banana

相关阅读:Is storing a delimited list in a database column really that bad?.

【讨论】:

【参考方案2】:

您可能需要考虑该值是否已存在于列中并且不更新:

update tablename
set storeddata = case 
  when find_in_set('banana', storeddata) then storeddata
  else concat_ws(',', storeddata, 'banana')
end
where username = 'David';

请参阅demo。

【讨论】:

以上是关于MySql:将数据添加到列而不删除以前的数据的主要内容,如果未能解决你的问题,请参考以下文章

怎么解决 ? (将列表添加到列数据框pyspark)

python数据库将+1添加到列

将数据集参数添加到列中,以便稍后通过 DataPrep 在 BigQuery 中使用它们

将多个值添加到列中 - Pandas

如何将mysql内部连接结果从行分组到列

ExtJS 将事件处理程序动态添加到列编辑器