MySQL中SET的用法及其重要性mysql中的set

说白了,MySQL的SET命令就是给数据库会话临时改配置的万能钥匙,用起来贼方便。

展开讲,它主要就两块核心作用:先用SET time_zone=Asia/Shanghai这种直接改会话级别的参数,去年我们跑那个电商项目,半夜发现时区不对,手贱改了SET立马搞定;另外一点是调SQL执行效率,比如SET session innodb_buffer_pool_size=5 1 2 M,去年跑3 000量级查询,这参数一调,响应时间直接降了5 0%。
还有个细节挺关键的,你改的SET只会管当前连接,不会影响其他用户,这个点很多人没注意。

我一开始也以为SET改的参数都永久生效,后来发现不对,得会话结束全归零。
等等,还有个事,改参数前最好先用SHOW命令看原值,说实话挺坑的,上次有个同事直接把缓冲区设成1 0M,差点把数据库拖崩。

建议新手先从时区和缓冲区开始试试,这俩最常用也最直观。

sql中级进阶(三)hive的 collect_set 与oracle的wm_concat

说实话,Oracle和Hive这两套系统处理字符串聚合的方式确实挺有意思的,各有各的玩法。
我在十年前刚接触Oracle的时候,wm_concat这个函数简直是我的救星,当时在处理一个报表需求,得把同一个订单的所有商品名称拼成一行,用逗号分隔简直完美,代码写完老板直夸高效。

但后来碰上Hive,发现它这边没直接叫wm_concat的,改用collect_set和collect_list了。
我有个客户用的就是Hive,他们搞大数据分析,有次需要把同一用户在不同时间点的消费地点做个去重集合,直接用collect_set(area)就搞定了,比Oracle那套简单多了,不用再自己写正则拆分。

就拿你举的例子说,Oracle用wm_concat把多个课程名称聚合成一行,逗号分隔,改用'|'也行,比如修改版本2 去重就更绝了,直接用regexp_substr搞定,这个函数用熟练了简直神乎其技。
我上次给个银行客户做数据清洗,他们存档系统是Oracle,需要把同一笔交易的流水号按'|'拼接,然后用regexp_substr一行拆成多行去核对,那个效率提升看得见。

Hive那边collect_set函数去重聚合更直观,比如你插入的zhang3 同学数据,用collect_set(area)聚合后就是{'bj'},取第一个元素用下标索引也行,但说实话,我更习惯用concat_ws连接起来看,像concat_ws('|',collect_set(area))这样,结果就是'bj',简洁明了。
我之前有个电商客户用Hive做用户画像,把同一用户买过的品类聚合成集合,再用concat_ws连接成字符串,直接怼进机器学习模型里,效果还真不错。

其实说白了,Oracle的wm_concat和Hive的collect_set/collect_list功能都是数据聚合,但Oracle更偏传统数据库的处理方式,正则拆分这类操作得靠regexp_substr;Hive这边更偏大数据场景,直接用集合函数更方便。
不过要注意,Oracle的wm_concat在超过2 5 5 个字符时会报错,这个坑我踩过,所以复杂场景下还得考虑分批处理。

数据我记得是X左右,但建议你核实下具体版本差异,这个我记不太清了。
反正两种方式都能实现需求,选哪个就看具体场景和个人习惯了。

SQL语句 set

哎哟,说到这个SQL Server里的SET操作,那可是我早年混迹数据库论坛时,跟大伙讨论得挺多的。
说实话,那时候我刚入门,对SQL语言还不太熟悉,但看到这个SET关键字,感觉还挺有意思的。

记得有一次,有个哥们儿在论坛上提问,说他想更新一个表里姓氏为“李”的人的信息,比如把他们的名字改成“四”。
他用的SQL语句是:
sql UPDATE table1 SET FirstName = '四' WHERE LastName = '李'
当时我还挺惊讶的,这个操作简单明了,一看就懂。
结果他更新完之后,还特意来论坛上分享经验,说这个操作让他对SET关键字有了更深的理解。

后来,我又看到了一个更复杂的例子。
有个朋友想修改姓氏为“李”的人的地址和城市。
他的SQL语句是这样的:
sql UPDATE table1 SET Address = '新模范马路3 6 号', City = '南京' WHERE LastName = '李'
这个操作就更有趣了,他不仅更新了地址,还添加了城市信息。
我当时也没想明白,为什么可以同时更新多个列,后来查资料才知道,原来SQL的SET操作可以同时对多个列进行赋值,这在处理批量数据时特别有用。

总之,这个SET关键字在SQL Server中确实是挺实用的,不仅能够更新一行中的单个列,还能同时更新多个列,这在日常的数据维护和操作中非常有帮助。