2011-11-16 55 views
28

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

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

回答

32

这会给你是一个SQL脚本中简单的打印:

select 'This is a comment' AS ''; 

另外,如果在updatedeleteinsert命令之后直接使用,则会为您的状态更新添加一些动态数据:

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

插入,更新,删除命令的语法是否相同? – Joe

+0

我一直在使用它。它工作正常。 – cherouvim

+0

如果必须从某个更新/插入/删除语句中捕获受影响的行数,我该怎么办? – Joe

1

您可以使用打印-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 
+3

我怀疑很多人安装了ksh。 – Blender

+0

我还应该提到,此脚本可以从Windows或Linux环境运行 – Joe

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

我不知道如果这能帮助:

假设您想要从命令行运行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