Mysql 如何在执行sql脚本时回显打印语句
我们有一个简单的sql脚本,需要针对MySQL数据库执行,我们希望打印脚本进度的日志语句(例如,在foo中插入10条记录或从bar中删除5条记录)。我们如何做到这一点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
#!/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的解决方案相比