如何在执行sql脚本时回显print语句

时间:2011-11-16 06:55:12

标签: mysql sql

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

  1. 我想知道用于插入/更新/删除语句的语法。
  2. 我如何知道受我的陈述影响的行数。
  3. 我还想控制使用脚本顶部的ECHO off或on命令打印它们。
  4. 该脚本应该可以在Windows / Linux操作系统上移植。

6 个答案:

答案 0 :(得分:43)

这将使您在sql脚本中进行简单的打印:

select 'This is a comment' AS '';

或者,如果在updatedeleteinsert命令后直接使用,则会向状态更新添加一些动态数据:

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

答案 1 :(得分:22)

我不知道这是否有帮助:

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

mysql < test.sql

和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

答案 2 :(得分:5)

只是为了让你的脚本更具可读性,可以使用这个proc:

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');

答案 3 :(得分:1)

您可以在脚本中使用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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

对于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)