我正在尝试使用选项从 bash 脚本捕获 mysql 表中删除的行数--execute
,但似乎不起作用。我回答了一些问题,其中提到使用选项,它可以工作,但没有达到预期的效果。我使用了 mysql 命令和awk 和 sed-vv
的各种组合,但似乎没有任何效果。-vvv --silent
--skip-column-names
MySQL 客户端是mysql Ver 8.0.39 for Linux on aarch64 (MySQL Community Server - GPL)
如何在使用 MySQL -e,--execute 时输出 UPDATE/INSERT 查询结果?
以下是代码
deleted=$(mysql --login-path=lp1 --init-command="SET SQL_LOG_BIN = 0" -vv --silent --skip-column-names db -e "delete from table1 where column1 date_format('2022-04-01 00:00:00','%Y-%m-%d 00:00:00') and date_format('2023-03-31 23:59:59','%Y-%m-%d 23:59:59') order by column1 limit 20;")
echo ${deleted}
该语句删除了某些行,但打印了如下输出
-------------- delete from table1 where column1 between date_format('2022-04-01 00:00:00','%Y-%m-%d 00:00:00') and date_format('2023-03-31 23:59:59','%Y-%m-%d 23:59:59') order by column1 limit 20 -------------- Query OK, 20 rows affected -------------- 1 row in set Bye
如果我再添加一行来获取 row_count,那么它会给我 -1
mysql --login-path=${LP_wallet_0} -e "select row_count()"
即使我在同一个删除查询中尝试 row_count(),它只会附加此行select row_count() -------------- 2 1 row in set Bye
--vv --silent --skip-column-names
我尝试了和awk
和也是的不同组合sed
,但无法得到计数。
-vv
如果你查询的话就不需要了ROW_COUNT();
。mytable
这是我刚刚测试的一个示例。我的架构中有一个表test
,该表有 6 行。输出:
我使用它
-s
来静音,-N
跳过列名,并确保select row_count()
在同一个会话中。因此它只输出
6
,表示受影响的行数。由于输出只是该结果,因此很容易捕获,而无需使用sed
或进行任何解析awk
。如果您尝试
row_count()
在后续的 mysql 命令中进行查询,它将不起作用,因为它仅报告同一会话中前一个 SQL 语句影响的行数。