Estou tentando capturar o número de linhas excluídas da tabela mysql de um script bash usando --execute
option, e parece que não está funcionando. Eu li algumas perguntas onde menciona o uso -vv
de options, funciona, mas não como esperado. Eu usei várias combinações de -vvv --silent
e --skip-column-names
com o comando mysql e awk e sed também, mas nada parece funcionar.
O cliente MySQL émysql Ver 8.0.39 for Linux on aarch64 (MySQL Community Server - GPL)
Como você pode gerar resultados de consulta UPDATE / INSERT ao usar MySQL -e,--execute?
Aqui está o código
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}
A declaração exclui certas linhas, mas imprime uma saída como esta
-------------- 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
Se eu adicionar mais uma linha para obter o row_count, ele me dará -1
mysql --login-path=${LP_wallet_0} -e "select row_count()"
Mesmo se eu tentar row_count() na mesma consulta de exclusão, ele apenas anexa esta linhaselect row_count() -------------- 2 1 row in set Bye
Tentei diferentes combinações de --vv --silent --skip-column-names
e awk
e sed
também, mas não consegui fazer a contagem.
Você não precisa
-vv
se você consultarROW_COUNT();
.Aqui está um exemplo que acabei de testar. Tenho uma tabela
mytable
no meutest
esquema, a tabela tinha 6 linhas.Saída:
Usei
-s
para silêncio,-N
para pular nomes de colunas, e fiz questão de fazer issoselect row_count()
na mesma sessão.Assim, ele produz apenas
6
, indicando o número de linhas afetadas. Como a saída é simplesmente esse resultado, é fácil capturar sem precisar fazer nenhuma análise comsed
ouawk
.Se você tentar consultar
row_count()
em um comando mysql subsequente, não funcionará, porque ele só relata o número de linhas afetadas pela instrução SQL anterior da mesma sessão.