Categoria: Mysql

Feed desta categoria: mysql

Medindo os tamanhos dos bancos:

SELECT
TABLE_NAME,
SUM(data_length + index_length) / 1024 / 1024 AS 'Data Base Size in MB',
SUM(data_free) / 1024 / 1024 AS 'Free Space in MB'
FROM
information_schema.TABLES
WHERE table_schema = 'nome_do_banco'
GROUP BY TABLE_NAME;

 

Medindo o tamanho das tabelas:

SELECT
table_schema,
table_name,
table_rows,
(data_length + index_length) / 1024 / 1024 AS 'Data Base Size in MB',
(data_free) / 1024 / 1024 AS 'Free Space in MB'
FROM
information_schema.TABLES
where table_schema = 'nome_do_banco'
ORDER BY data_length + index_length DESC


(Vou tentar tornar isso aqui um pouco mais útil)

Bom, ás vezes a gente precisa, por qualquer motivo que seja, dar um truncate table em vária tabelas de uma vez só. Talvez exista um jeito menos improvisado de se fazer, mas esse é o jeito que achei.

A primeira coisa é rodar essa consulta, que vai retornar todos os nomes das tabelas de determinado banco, concatenando com o texto 'TRUNCATE TABLE'.


SELECT concat('TRUNCATE ',TABLE_NAME,' ;') FROM information_schema.`TABLES` T WHERE TABLE_SCHEMA = 'nomedabase';



O retorno disso vai ser algo assim:


'TRUNCATE tabela1 ;'
'TRUNCATE tabela2 ;'
'TRUNCATE tabela3 ;'


Depois disso, é só tirar as aspas e executar.


Contar registros duplicados:


SELECT id_cliente, count(id_cliente) 
FROM  clientes 
GROUP BY id_cliente 
HAVING count( id_cliente) > 1


Mostrar conexões ativas:
SHOW PROCESSLIST;


Gerar sql para otimizar várias tabelas:
SELECT CONCAT('OPTIMIZE TABLE ',TABLE_NAME,'; ')AS tabela from information_schema.TABLES WHERE TABLE_SCHEMA = 'nome_do_bd’


Gerar sql para truncar várias tabelas:
SELECT concat('TRUNCATE ',TABLE_NAME,' ;') FROM information_schema.`TABLES` T WHERE TABLE_SCHEMA = 'nome_da_base'

Comando find_in_set, para quando precisar procurar um registro em uma lista de valores (similar ao IN(), mas passando uma string já formatada com as virgulas):

select id_cliente, Find_In_Set(id_cliente, '172,171,182,183') FROM clientes

Contar horas entre datas:
SELECT TIMEDIFF(STR_TO_DATE('19/01/2011 00:00:00', '%d/%m/%Y %H:%i:%s'),now());


Insert-update: 

REPLACE INTO acesso (login, ip, data_ultimo_acesso )VALUES ('login','192.168.0.1', now());


Ás vezes a gente precisa exportar só um registro de uma tabela.
Dá pra fazer assim:

 mysqldump -t -u usuario -psenha banco tabela --where=id_tabela=666 > ~/insert.sql  


Só pra lembrar: o parâmetro -p recebe a senha 'colada' nele, por exemplo, se a senha for 'estrogonofe', fica assim:

 mysqldump -t -u usuario -pestrogonofe banco tabela --where=id_tabela=666 > ~/insert.sql  


E no final, onde tem '~/insert.sql', é onde vai ser gerado o arquivo com o comando sql pra dar o insert no banco.