• 解决ERROR: No query specified的错误以及\G 和 \g 的区别


    1. 复现错误


    今天使用powershell连接数据库后,执行如下SQL语句:

    mysql> select * from student where id =39 \G;
    
    • 1

    虽然成功查询除了数据,但报出如下错误的信息:

    mysql> select * from student where id =39 \G;
    *************************** 1. row ***************************
            id: 39
          name: 上官婉儿
            no: 2023112345
       address: 王者荣耀法师阵营
    head_image: »?ÿ倨p賗謻p?几 T\灖 u5ë-;┾遙·ÿ ß槆Geo竳â/?PIen%葖î
    娛遖>DYÎ>酄¾ 9?曝ã6ñª
     媾叿ÿ 桉u?     岜盾砚臊罬鱂暤暩"忇r亠胞稛鸑xP诒¶2墸惵vo]*q詛W煂^岙?胼³?_0捁钔搀?bT烰闕X趲梡鉑寄?矃o檣t"珪獨贇篕裴_¿2贌 K湘繇P杝O)
    
    
    
    
    
    
    1 row in set (0.00 sec)
    
    ERROR:
    No query specified
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    No query specified

    2. 分析错误


    首先,我们需要了解\G的作用,可以通过\h命令来查询:

    在这里插入图片描述

    从图中的红框可知,\G表示Send command to mysql server, display result vertically.,即为如下功能:

    1. Send command to mysql server表示向mysql服务器发送一条命令,这个命令是结束的命令,等同于;

    2. display result vertically表示垂直展示SQL

    \G既然表示结束SQL语句,那么:

    select * from student where id =39 \G;
    
    • 1

    就相当于:

    select * from student where id =39 ;;
    
    
    • 1
    • 2
    1. 第一个;的前面有一个查询,正常给出结果;

    2. 第二个;的前面什么都没有,Send command to mysql server后,会抛出一个ERROR提示:No query specified(没有指定查询)

    当然,这种对我们日常操作没有太大影响,不用过分担心。

    但是,对于严谨的程序工程师,遇到这样ERROR的错误提示信息,心里总是会感到有点慌。

    3. 解决问题


    既然\G;都代表一条SQL语句的结束,我们把;去掉即可,如下代码所示:

    mysql> select * from student where id = 39 \G
    *************************** 1. row ***************************
            id: 39
          name: 上官婉儿
            no: 2023112345
       address: 王者荣耀法师阵营
    head_image: »?ÿ倨p賗謻p?几 T\灖 u5ë-;┾遙·ÿ ß槆Geo竳â/?PIen%葖î
    娛遖>DYÎ>酄¾ 9?曝ã6ñª
     媾叿ÿ 桉u?     岜盾砚臊罬鱂暤暩"忇r亠胞稛鸑xP诒¶2墸惵vo]*q詛W煂^岙?胼³?_0捁钔搀?bT烰闕X趲梡鉑寄?矃o檣t"珪獨贇篕裴_¿2贌 K湘繇P杝O)
    
    
    
    
    
    
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    如此,便不再抛出异常了。

    4. \G和\g的区别


    有时,我们也会使用到\g,那么,它和\G有什么区别呢?

    \g只表示Send command to mysql server,并没有垂直展示的意思。

    当然,\g也等于;,即向MySQL服务发送结束语句的命令。

    在这里插入图片描述

    \G除了结束语句外,还有垂直展示的概念:

    
    mysql> show create table student \G
    *************************** 1. row ***************************
           Table: student
    Create Table: CREATE TABLE `student` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `no` varchar(50) NOT NULL,
      `address` text,
      `head_image` blob,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    python包导入原理解析
    DEV,Test, SIT,UAT, Staging, Prod,DR分别是意思?
    [手写spring](5)实现AOP机制(完结)
    使用Apache搭建网站
    【Linux】 ubuntu内存清理
    智能优化与机器学习结合算法实现数据分类matlab代码清单
    wallys/Access Point Wireless Module Wireless AC/AN MiniPCIE Standard Card
    备战蓝桥杯————k个一组反转单链表
    华为WATCH 4系列升级鸿蒙4有哪些新变化
    Unity坐标转换
  • 原文地址:https://blog.csdn.net/lvoelife/article/details/133816796