• 在日常编写SQL中,使用变量来灵活的构建执行的SQL语句是比较常见的。就像在编程中使用变量、函数参数等是一样的道理。本文介绍使用JSON函数(JSON_ARRAYJSON_SEARCH)、以及 FIND_IN_SET 如何简单的实现带有数据组变量的SQL拼接与执行。使用该方法,则无需使用CONCAT函数拼接SQL,再使用PREPARE/EXECUTE语法执行,所以会更加简洁,可读性、扩展性更强。

    具体的,例如需要再查询结果中找到u_name在数组@u_list_j中的记录,那么使用JSON方式可以按照如下模式实现:

    SET @u_list_j = JSON_ARRAY('zhou','wu','zheng','wang','zhuge');
    
    SELECT 
        id,u_name 
    FROM 
        t_01 
    WHERE 
        JSON_SEARCH(@u_list_j,'one',t_01.u_name);

    另一种较为常见的方法是使用 FIND_IN_SET 函数。其使用方法如下:

    set @u_list_s = 'zhou,wu,zheng,wang,zhuge';
    
    SELECT 
        u_name 
    FROM 
        t_01 
    WHERE 
        FIND_IN_SET(t_01.u_name,@u_list_s);

    另外,还可以尝试使用 LOCATE 函数实现,只是使用该函数需要注意,在做字符串匹配的时候容易出现的重复、错误匹配问题。例如,数组中存在”zhuge”,那么匹配”zhu”,则可能匹配成功,但这并不是期望的结果。

    示例表:

    本文中使用的一些示例表如下:

    CREATE TABLE t_01(
      id int UNSIGNED AUTO_INCREMENT primary key,
      u_name varchar(32)
    );
    
    INSERT INTO t_01(u_name) values
      ('wu'),
      ('zhao'),
      ('qian'),
      ('sun'),
      ('li');
  • 西溪东

    这是最近在西溪湿地东侧游玩拍的几张照片。

    孔子问道于老子
    (more…)
  • 如何学习MySQL

    《高性能MySQL》第四版发布后,收到了很多读者的反馈,其中关注最多的是作为一个初学者,应该如何能够较为系统的学习MySQL,从而应对日常工作或者获得更好的职业发展。于是和多个业内朋友讨论后,整理了一些MySQL学习的推荐资源,供初学者参考。文章末尾有一个MySQL学习交流群,供加入提问与讨论。


    业界专家的经验

    Yangyidba 阿里云的数据库专家

    yangyidba 阿里云数据库专家

    刚刚入行时,有哪些资料给你了帮助?

    正式接触 MySQL 是2011年底,当时的公司的数据库版本主要是 5.5 版本和少量 5.1 版本。因为之前学Oracle的经验是查看官方文档,学习MySQL 资料主要是 “官方文档” 和当时的淘宝DBA团队组织的技术大学的技术分享,学习MySQL技术的技术特性和经典案例。

    其实就现在而言,MySQL 官方文档依然是最好的学习资料和教材, 里面非常详细的说明 MySQL的基础架构,redo,undo,读写逻辑,字段类型,锁,存储引擎,主从复制,MGR ,性能优化等等。把官方文档通读一遍,基本上能超越60-70%左右的DBA,为什么不是更高呢?因为学习技术是为了使用技能。

    进一步了解 MySQL/数据库,是哪些资料帮助了你?

    (more…)
  • 来自海拉鲁大陆的勇者林克
    (more…)
  • 在去年5月,在云数据库技术公众号发布了“一张图读懂阿里云数据库架构与选型”。过去了大约10个月时间,阿里云数据库RDS也发布了很多新的特性与能力,包括RDS集群版、Serverless、ARM支持等,另外,之前的版本也缺少了数据库代理,云盘类型等。这里一并进行更新,发布了新的v2版本如下:

    (more…)
  • 为什么写博客

    2009年的时候,刚开始写博客就想过这个问题,当时想法比较简单(参考),记录一些技术和生活的成长。十几年过去了,最近又在想这个问题。十几年,很多东西都发生了改变,也许是成长了很多,也许是老成了很多,想法有了很多的变化、也从孤家寡人变成了四口之家、也从九楼的宿舍换到了现在的四口之家、也从整天打dota的状态变成现在以工作以及孩子成长教育为中心的生活、也从整天被爸妈叮嘱到反过来整天叮嘱爸妈、也从数据库的小白成长为一个经验丰富的数据库老兵…

    是啊,那为什么还写博客?

    “玩”也许是最重要的了。

    最早选择了开源的WordPress构建个人博客,而WordPress的插件式的架构给用户留下了非常多的“玩”的空间。当初,还是新手的时候,主要靠安装各式各样的插件,尝试各式各样的主题,让博客看起来与众不同。例如,你可以通过地图插件,将你的GPS行动路线,在博客中较为个性化的展示出来(参考),也可以自定义页面把自己某个时间截面的小趣味记录下来:Chrome Theme;有也可以做一个简单的聚合页面把自己读到好的文章记录一下:常读常新。WordPress提供的插件式的架构,让其界面呈现具备很强的个性化,在后端功能上也可以实现各种能力。总得来说,是很好玩的。

    早期,构建博客还有另一个可玩性,就是如何在互联网上构建可以被访问的服务。这本身就是一个非常有意思的事情,对于刚开始接触计算机技术的人来说,本来就很意思,需要了解技术可能包括DNS、HTML、httpd、https、Linux、云计算等。相比于,学校课程中,从8086开始介绍,要有意思得多。虽然,从8086开始学习可能是更重要。但是,玩吗,开心就好。

    “玩”大概是最重要的。是啊,想想,随着年龄的增长,生活是多么的无趣。

    记录与火花

    上次七爷说,“时间会赋予照片意义”(大概是这个意思)。博客记录的内容,可以是文字或者图片。时间也会赋予其更大的意义。另外,现在回头看看自己十年前的文字,青涩、鲁莽,但是却散发出一种力量。回头看看十年前的一些照片,也让人非常怀念。数年前后的思想对比,也让自己感受到成长,也会对未来充满一些期望,大概还会成长吧。

    除了关于生活的记录之外,博客另一个非常常见的场景是关于技术相关的记录,通常都是一些“思想火花”的记录,当然也有很多人会去写系统的思考,总得来说,记录“火花”的比较多。可能是生活场景的火花,也可能是一个关于技术细节的火花,还可能是某个感悟的火花。

    分享与帮助

    最近发现自己博客上,一篇关于scp加速的文章(参考),持续的会有来自搜索引擎的流量。当时,写那篇文章一方面是工作需要,另一方面自己也花了非常多的时间去测试验证。现在回头看看,认真的测试验证与分享,应该是给了很多人帮助的。

    能够帮助到他人,也算是非常不错的。

    影响力的构建

    在各种自媒体、视频号如此流行的当下,写博客已经不太能够达到这个效果了。不过,一个人有博客,写博客,一般来说,还是一个更加有血有肉的、非脸谱化的、更加立体的一个人。

    实际上的情况是,很少有很有影响力的人会写博客的,更多的是在各大自媒体平台,通过较为专业化的运营去实现影响力。

    其他

    也看到很多人,尝试在个人博客上做一些商业化,基本上没有看到成功案例。没做精确的计算,这几乎是不可能的,就像你随便玩玩乐高,或者随便玩玩游戏,想商业化,都是非常难的。商业化的世界,对内容质量、内容密度的要求,和博客松散的“玩”模式是完全不同的。

    关于隐私的问题

    只要对外表达,或多或少都会涉及到个人隐私问题。简单通透一些,或许更好,就这样吧,不纠结这个问题。

    最后,在这个世界上,我们每个人当然都是渺小的,渺小如一粒尘土,但是,也确实是一颗尘土,而不是虚无。