Mysql 如何在执行sql脚本时回显打印语句

Mysql 如何在执行sql脚本时回显打印语句,mysql,sql,Mysql,Sql,我们有一个简单的sql脚本,需要针对MySQL数据库执行,我们希望打印脚本进度的日志语句(例如,在foo中插入10条记录或从bar中删除5条记录)。我们如何做到这一点 我想知道用于insert/update/delete语句的语法 如何知道受语句影响的行数 我还想使用脚本顶部的ECHO off或on命令控制打印它们 脚本应该可以跨Windows/Linux操作系统移植 您可以在脚本中使用print-p--来执行此示例: #!/bin/ksh mysql -u username -ppasswor

我们有一个简单的sql脚本,需要针对MySQL数据库执行,我们希望打印脚本进度的日志语句(例如,在foo中插入10条记录或从bar中删除5条记录)。我们如何做到这一点

  • 我想知道用于insert/update/delete语句的语法
  • 如何知道受语句影响的行数
  • 我还想使用脚本顶部的ECHO off或on命令控制打印它们
  • 脚本应该可以跨Windows/Linux操作系统移植
  • 您可以在脚本中使用print-p--来执行此示例:

    #!/bin/ksh
    mysql -u username -ppassword -D dbname -ss -n -q |&
    print -p -- "select count(*) from some_table;"
    read -p get_row_count1
    print -p -- "select count(*) from some_other_table;"
    read -p get_row_count2
    print -p exit ;
    #
    echo $get_row_count1
    echo $get_row_count2
    #
    exit
    

    这将为您提供sql脚本中的简单打印:

    select 'This is a comment' AS '';
    
    或者,如果直接在
    更新
    删除
    、或
    插入
    命令之后使用,这将向状态更新添加一些动态数据:

    select concat ("Updated ", row_count(), " rows") as ''; 
    

    为了使脚本更具可读性,可以使用以下程序:

    DELIMITER ;;
    
    DROP PROCEDURE IF EXISTS printf;
    CREATE PROCEDURE printf(thetext TEXT)
    BEGIN
    
      select thetext as ``;
    
     END;
    
    ;;
    
    DELIMITER ;
    
    现在,您只需执行以下操作:

    call printf('Counting products that have missing short description');
    

    我不知道这是否有帮助:

    假设要从命令行运行sql脚本(test.sql):

    mysql < test.sql
    
    控制台将显示如下内容:

    SELECT * FROM information_schema.SCHEMATA;
    \! echo "I like to party...";
    
    CATALOG_NAME    SCHEMA_NAME            DEFAULT_CHARACTER_SET_NAME      
             def    information_schema     utf8
             def    mysql                  utf8
             def    performance_schema     utf8
             def    sys                    utf8
    I like to party...
    
    因此,只需使用
    \,就可以在sql语句中执行终端命令,前提是脚本通过命令行运行

    \! #terminal_commands
    

    使用
    mysql-v
    将mysql客户端置于详细模式如何?

    对于mysql,您可以向命令中添加\p,以便在脚本中运行时将其打印出来:

    SELECT COUNT(*) FROM `mysql`.`user`
    \p;
    
    在MySQL客户端中运行它:

    mysql> source example.sql
    --------------
    SELECT COUNT(*) FROM `mysql`.`user`
    --------------
    
    +----------+
    | COUNT(*) |
    +----------+
    |       24 |
    +----------+
    1 row in set (0.00 sec)
    

    我还应该提到,这个脚本可以在Windows或Linux环境下运行。如果我必须捕获某个update/insert/delete语句影响的行数,我应该怎么做。这会增加一个额外的空白行。有没有一种方法不需要额外的一行就可以做到这一点?只要你只需要一条没有任何参数的消息,这个方法就非常有效。这个方法非常有效。你说“如果脚本是通过命令行运行的”——否则该如何运行?也就是说,在什么情况下这不起作用?此功能记录在。这似乎有很多额外的步骤,尤其是与Craig Wayne的解决方案相比