新手问个关于数据库的幼稚问题

2020-05-18 18:41:35 +08:00
 Mindjet

wh_users 表有个 preferences 字段,是二进制内容,其实里面就是文本,下载下来之后就可以看得到。

想把其中 ID1 的这个 preferences 应用到这个表中的所有对象,请问这个该怎么做呢?

(刚开始用,遇到了问题,在谷歌上搜「 SQL 复制」,「 SQL 二进制 批量修改」,等等,这样的关键词完全找不到对应的方法,所以来请教,GUI 是 PHPMyAdmin)

3002 次点击
所在节点    MySQL
17 条回复
pushback
2020-05-18 18:49:37 +08:00
update wh_users set preferences = (select preferences from wh_users where id = 1)
不过为啥要批量覆盖呢,这玩意都统一了,查指定为 1 的就行了阿
Mindjet
2020-05-18 18:56:02 +08:00
@pushback 这是用户的配置文件,都指定同一个地址,会不会出现问题呢?比如其中一个用户改了之后,别的用户也全都改了,这个是不行的呀。
Mitt
2020-05-18 19:03:12 +08:00
@Mindjet 你的要求不就是这样?先自己理清楚自己想要啥效果吧
XanderChen
2020-05-18 19:09:26 +08:00
你在 wh_user 新增 user 的时候把这个 preference 接写到 wh_user 里面不就行了吗

我看你的描述,你是先新建了 100 个 user,然后突然想给这 100 个 user 添加一个 preference ?

还想要这个 preference 有一个统一的内容?

我总感觉这个操作有点问题。但是你要真想这样的话。

我觉得最简单的 for 循环加 preference 内容验证可以解决你的问题。
Mindjet
2020-05-18 19:37:38 +08:00
@Mitt 我的需求不是统一地址,而是各自独立修改,这个早就想清楚了,现在补充到原来的位置,为了更明显现在补充到帖子上。
Mindjet
2020-05-18 19:40:32 +08:00
@XanderChen 情况是这样,这些用户是早期的,里面有一个设置,本来是不默认勾选的,但是现在我想将这些早期用户的配置全部更改成勾选,以便核心的用户统一。所以就是一个批量更改的过程,如果是数组,那么很简单一下就会想到用 for,但我这个需求要尽快实现,自己又没有学过任何 SQL 语句,而且这个东西是二进制文件,不是文本,搜了一下也没发现有什么结果,所以就只能来问。
Juszoe
2020-05-18 19:47:17 +08:00
我知道你的意思了,是要将所有用户二进制配置中的某个勾选上吧,你这描述不太准确。
解决方案的话,因为它是非结构化数据,sql 可能无法实现,建议还是写个程序一个个修改吧
Mindjet
2020-05-18 19:52:41 +08:00
@Juszoe

看来我的提问方法有很大的问题,回去反思一下,下次不会这样了 -_-||

***

原来是这样,面对这个 SQL 还不能批量解决了,这个真的没想到,关键是这个二进制数据,实际上就是个文本文档,这就很迷惑了。

「写程序一个一个修改」中的「写程序」指的是什么?

用 JDBC 等工具写程序吗?
Mindjet
2020-05-18 19:56:47 +08:00
@Juszoe 那个「所谓的」二进制文件 ,所有内容已经都附加在问题后面了,感觉不是「非格式化数据」,就是 json
Juszoe
2020-05-18 19:57:34 +08:00
@Mindjet #8 就是单独写个程序,连接数据库一通操作,读取需要修改的配置,程序将配置文件处理过后再将新配置文件 update 进数据库即可,这个需求不复杂,一个 for 循环应该搞定了,每个循环内处理一个用户。
Juszoe
2020-05-18 20:02:10 +08:00
如果是 json,SQL 是可以处理的,但是也是 String 方式存储的才可以(如 varchar ),搜索“sql 操作 json”就能看到
Mindjet
2020-05-18 20:04:00 +08:00
只要能连接数据库操作就可以,那这样的话应该是可以用 JDBC(Java Database Connectivity),像这样小的需求用 Java 是否大材小用了呢?

Python 也许是最佳选择,但没学过,感觉应该没什么难度,脚本语言可能挺简单的吧,花 2 小时还解决不了,考虑用 JDBC 解决。
Mindjet
2020-05-18 20:08:05 +08:00
Windows 版 MySQL 正在安装,准备先从服务器搞下来(用户少非常方便就能弄下来吧),装在本地,用 Python 连接上,编程修改。
Mindjet
2020-05-18 20:13:24 +08:00
@Juszoe 存储方式为「 blob 」,这是我用 Flarum 搭建了一个小论坛,这个就很纳闷了,不知道为什么明明是文本,还要用 blob 存起来,也许是设计失误。
tomczhen
2020-05-18 20:22:10 +08:00
估计是因为早期 MySQL utf8 解决方案里面有这种方式,存二进制可以不用转类型,毕竟还有个 utf8 mb4 。
Mindjet
2020-05-18 20:39:18 +08:00
@tomczhen Thanks♪(・ω・)ノ 原来如此
Mindjet
2020-05-19 18:31:34 +08:00
@Juszoe 已经批量修改完成了,可用 SQL 语句修改,二进制数据表示为十六进制数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/672986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX