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:将数据添加到列而不删除以前的数据的主要内容,如果未能解决你的问题,请参考以下文章