Linhas duplicadas em tabelas Mysql

3 Comments

Dica simples de como remover linhas duplicadas em tabelas Mysql

1 – Mova as linhas não duplicadas para uma tabela auxiliar (que será criada nesta query):

CREATE TABLE tabela_auxiliar as SELECT * FROM tabela_antiga WHERE 1 GROUP BY [coluna que terá linhas duplicadas removidas];

2 – Remova a tabela antiga:

DROP TABLE tabela_antiga;

3 – Renomeie a tabela auxiliar com o nome da tabela antiga:

RENAME TABLE tabela_auxiliar TO tabela_antiga;

Simples solução, e linhas duplicadas removidas!…

Mysql – Consulta LIKE

7 Comments

Iniciando em Mysql, veja como é simples trabalhar com consultas usando LIKE.

LIKE ‘__a%’
Vai ser buscado todos os itens que tenham a letra a na quarta posição da palavra.

LIKE ‘%a’
Palavras terminadas em a.

LIKE ‘a%’
Palavras começadas em a.

LIKE ‘a%b%c’
Palavra deve começar com a, ter no meio b e terminar com c.

NOT LIKE ‘%@%’
not like é retornado todos os dados que não tenham o valor definido nele, no caso, retorna tudo que não tenha @

campo LIKE ‘%@%’
Retorna todos os dados que tenham o valor definido nele, no caso, retorna tudo que tenha @

Exemplo:

SELECT * FROM `tb_tabela` WHERE campo LIKE "%a%"

MySQL – DATE_FORMAT

3 Comments

DATE_FORMAT na base MYSQL:

Dia
%d    Dia do mês com zero (01..31)
%e    Dia do mês sem zero (1..31)
%D    Dia do mês com sufixo inglês (1st, 2st, 3st..)
%j    Dia do ano (001..365-366)

Mês
%m    Mês númerico com zero (01..12)
%c    Mês númerico sem zero (1..12)
%M    Nome do mês (January..December)
%b    Nome do mês abreviado (Jan..Dec)

Ano
%Y    Ano com 4 dígitos
%y    Ano com 2 dígitos

Semana
%w    Número do dia da semana (0=Domingo..6=Sábado)
%W    Nome do dia da semana (Sunday..Saturday)
%a    Nome do dia da semana abreviado (Sun..Sat)
%U    Número da semana onde Domingo é o primeiro dia da semana (00..53)
%u    Número da semana onde Segunda-feira é o primeiro dia da semana (00..53)
%V    Número da semana onde Domingo é o primeiro dia da semana (01..53)
%v    Número da semana onde Segunda-feira é o primeiro dia da semana (01..53)

Hora – Minutos – Segundos
%H    Hora com zero (00..23)
%k    Hora sem zero (0..23)
%h    Hora com zero (01..12)
%I    Idem – Hora com zero (01..12)
%l    Hora sem zero (1..12)
%i    Minutos com zero (00..59)
%S    Segundos com zero (00..59)
%s    Idem – Segundos com zero (00..59)
%p    AM ou PM
%r    Horário formatado (hh:mm:ss) seguido de AM ou PM
%f    Microsegundos (000000..999999)

Exemplo de uso com PHP: Consulta no banco:


' SELECT *, DATE_FORMAT(data, "%d/%m/%Y") data_txt FROM tabela  ';

Importar Base direto no console (Mysql)

2 Comments

Acesse o prompt de comando e vá ao diretório onde está o arquivo mysql.exe
Em seguida acesse o banco de dados:
Por exemplo:

C:\mysql\bin>mysql -u root -p
Enter password ****
mysql> create database banco_de_dados
mysql> use banco_de_dados
mysql>source c:\pasta\pasta\pasta\banco.sql

Simples não!.

Permissões de usuários no MYSQL

10 Comments

Direitos de acesso no MySQL

O grant possui as seguintes opções de acesso:

* ALL/ALL PRIVILEGES – Simboliza todos os privilégios abaixo;
* ALTER – Permite alterar a estrutura de tabelas;
* ALTER ROUTINE – Permite alterar e excluir stored procedures/functions;
* CREATE – Permite criar banco de dados e tabelas;
* CREATE ROUTINE – Permite criar stored procedures/functions;
* CREATE TEMPORARY TABLES – Permite a criação de tabelas temporárias em expressões SQL que utilizam esse recurso;
* CREATE USER – Permite criar e gerenciar usuários;
* CREATE VIEW – Permite criar visões;
* DELETE – Permite excluir informações;
* DROP – Permite excluir estruturas (bases e tabelas);
* EVENT – Permite criar event schedulers;
* EXECUTE – Permite executar stored procedures;
* FILE – Permite ler e escrever arquivos no sistema;
* GRANT – Permite cadastrar seus privilégios para outros usuários;
* INDEX – Permite o gerenciamento de índices;
* INSERT – Permite inserir informações em tabelas;
* LOCK TABLES – Permite bloquear tabelas;
* PROCESS – Permite visualizar e finalizar processos do MySQL;
* RELOAD – Permite recarregar bancos de dados;
* REPLICATION CLIENT – Permite solicitar replicação;
* REPLICATION SLAVE – Permite replicar suas informações;
* SELECT – Permite consultas;
* SHOW DATABASES – Permite visualizar todas as estruturas dos bancos existentes;
* SHOW VIEW – Permite visualizar os códigos de criação de visões;
* SHUTDOWN – Permite desligar o servidor MySQL;
* SUPER – Permite configurar os dados do servidor MASTER (em caso de replicação);
* TRIGGER – Permite criar e gerenciar triggers;
* UPDATE – Permite alterar informações em tabelas;
* USAGE – Permite utilizar comandos básicos.

A sintaxe do grant é a seguinte:


grant <privilégios> on <banco>.<tabela> to '<usuario>'@'<dominio>' identified by '<senha>'

Agora criaremos um usuário com os mesmos privilégios do root:


mysql> CREATE USER dba;
mysql> GRANT ALL PRIVILEGES ON *.* TO dba@\'localhost\' IDENTIFIED BY 'passworddba';

E um usuário para somente leitura:


mysql> CREATE USER estagiario;
mysql> GRANT SELECT ON minha_base.* TO 'estagiario'@'%' IDENTIFIED BY 'estag';

O parâmetro “%” representa qualquer domínio, ou seja, o usuário estagiário para consultar todas as tabelas de “minha_base” mediante a senha “estag”. Caso você deseje consultar os privilégios do usuário poderemos utilizar o seguinte comando (repare que no campo de senha é gerado um hash, como explicado anteriormente):


mysql> SHOW GRANTS FOR 'estagiario'@'%';

GRANT SELECT ON `minha_base`.* TO 'estagiario'@'%'

Sempre que mudar/setar algum tipo de permissão no MySQL, o comando de atualiza a lista de privilégios faz-se necessário:


mysql> FLUSH PRIVILEGES;

Caso o estagiário esteja abusando com os “selects” da vida, podemos retirar os direitos de acesso com o comando REVOKE, veja:


mysql> REVOKE SELECT ON minha_base.* FROM 'estagiario'@'%';

Ainda se for necessário, podemos excluir ou alterar a senha desse usuário:


mysql> SET PASSWORD FOR 'estagiario' = PASSWORD('nova_senha');
mysql> DROP USER 'estagiario';