Também chamado de manipulação de registros ou tuplas. Para explicar como funciona, primeiro vamos criar novos registros.
Para começar, vamos deletar absolutamente todas as colunas da tabela, usando esse comando (deixaremos uma coluna temporária):
alter table cursos
add column temp int,
drop column idcurso,
drop column nome,
drop column descricao,
drop column carga,
drop column totaulas,
drop column ano;
Depois voltaremos a colocar as colunas:
alter table cursos
drop column temp,
add column idcurso int not null auto_increment,
add column nome varchar(30),
add column descricao varchar(50),
add column carga decimal(4, 1),
add column totaulas decimal(5, 3),
add column ano int,
add primary key(idcurso);
E depois, colocar alguns registros com alguns erros propositais:
insert into cursos values
('1', 'HTML4', 'Curso de HTML5', '40', '37', '2017'),
('2', 'Algoritmos', 'Lógica de Programação', '20', '15', '2017'),
('3', 'PGP', 'Curso de PHP', '40', '8', '2017'),
('4', 'Jarva', 'Introdução ao Java', '10', '29', '2000'),
('5', 'MySQL', 'Banco de Dados', '30', '15', '2016');
Um comando manipula uma linha por vez, mas dentro de uma linha dá pra mexer em várias colunas ao mesmo tempo.
Para modificar algum dado, você usará o comando assim, o update
atualiza, o set
muda o nome e o campo desejado, e o where
identifica a chave primária da linha alterada, dessa forma:
update cursos
set nome = 'HTML5'
where idcurso = '1';
Para mudar mais de uma coluna por linha ao mesmo tempo, pode fazer assim:
update cursos
set nome = 'PHP', ano = '2015'
where idcurso = '3';
Para evitar que a alteração limite a mais de uma linha, coloque o comando limit
, mas ele pode ser dispensado caso use correntamente o where. Dessa forma:
update cursos
set nome = 'Java', carga = '40', ano = '2015'
where idcurso = '4' limit 1;
PS: Tome cuidado ao não usar o limit, o update pode bagunçar o banco de dados ao usar o where errado, ao identificar algo que tenha em vários registros.
Para deletar um registro, use o comando delete
, dessa forma:
delete from cursos
where idcurso = '5';
Para apagar vários ao mesmo tempo, use da mesma forma, mas com o limit pra não apagar tudo:
delete from cursos
where ano = '2015' limit 3;
PS: Para apagarmos todos os dados da tabela, mas mantendo a estrutura, usamos o comando truncate
(ele também reseta os valores dos auto incrementos), assim:
truncate table cursos;
É possível excluir todo o conteúdo de uma tabela usando delete from nomedatabela
e atualizar todo o conteúdo usando update nomedatabela set nomedocampo = 'Dados'
, mas é errado usar o comando assim, pois o delete, assim como o update, devem ser usados com uma condição, além de que usando o delete assim, não reseta as chaves auto-incrementadas. Por esse motivo é melhor usar o truncate mesmo.
Update, Delete e Truncate são DML.
Para explicar, vamos primeiramente recolocar os dados na tabela cursos, como descrito anteriormente.
Para exportar banco de dados, é só ir no PHPMyAdmin, em New e exportar os bancos desejados (se faz o mesmo em tabelas, dentro do banco de dado desejado). Lá tem as opções e também o formato desejado. Para importar faz do mesmo modo, em Importar.
PS: É recomendável marcar a opção de exportar personalizada, e marcar as opções drop database ou drop table, para apagar a tabela antiga.
Quando for editar um arquivo SQL, você pode usar --
Ao lado das linhas que são comentários, por exemplo:
use cadastro;
select * from usuarios;
-- Isso é um comentário SQL, o servidor desconsidera essa parte por causa dos dois traços.
Também é possível fazer comentários de várias linhas, colocando tudo entre /*
e */
.
Primeiro vamos aprender a usar o PHPMyAdmin pelo Prompt de Comando. Dependendo do servidor, é necessário informar a o usuário e a senha (geralmente é root e uma senha vazia). Para abrir ele no XAMPP, abra o painel, vá em console em shell, e no CMD digite o comando mysql -u root
.
PS: Caso for logar com outro usuário, use o nome do usuário especificado. Se ele tiver senha, podemos logar digitando mysql -u nomedousuario -p
(ele pedirá a senha logo em seguida).
Para visualizar os bancos de dados, use o comando show databases;
(não esqueça do ponto e vírgula).
Para ver qual banco está aberto, usamos o comando status;
.
Para abrir um banco de dados use use cadastro;
(ou o nome do banco de dados desejado) normalmente. Ver as tabelas, show tables;
. Assim como outros comandos como desc
e select * from
(não esqueça do ponto e vírgula após eles).
Também podemos renomear uma tabela ou banco pelo CMD, usando um comando tipo update cursos set nome = 'PH' where idcurso = '3';
.
PS: Podemos usar as setas pra cima e pra baixo para aparecer os comandos já utilizados no CMD.
É também possível usar diretamente no servidor localhost o PHPMyAdmin.
PS: Caso os acentos apareçam desconfigurados no Windows, edite o arquivo xampp_shell.bat da pasta xampp, colocando chcp 1252
no começo dele, antes do comando goto.
Para fazer um back-up dos dados via linha de comando, fora do shell do MySQL digite mysqldump -u nomedousuario -p nomedobanco>dump.sql.
(pode ser necessário colocar a opção --single-transaction
). Para restaurar um back-up basta colocar mysql -u nomedousuario -p<dump.sql
PS: Para limpar a tela de console, digite \! cls
no Windows e system clear
em sistemas Unix. Pode ser necessário finalizar o comando com um ;
. Outros comandos do sistema também podem ser usados. Para sair do MySQL digite simplesmente exit
.
No PHPMyAdmin, vamos criar um banco de dados novo, nesse caso, vamos criar na aba "Base de Dados", na parte de colocar nome. Crie um nome qualquer como exemplo e escolha o agrupamento utf8_general_ci
. Depois disso, crie uma tabela da mesma forma (como por exemplo, amigos) e a quantidade de colunas (no exemplo, serão três, com nomes id, nome e tel). Veja a configuração de cada campo:
Nome | Tipo | Tamanho | Predefinido | Agrupamento | Atributos | Nulo | Índice | Auto Incremento |
---|---|---|---|---|---|---|---|---|
id | INT | None | PRIMARY | √ | ||||
nome | VARCHAR | 30 | None | UNIQUE | ||||
tel | VARCHAR | 11 | None | √ | --- |
Embaixo, você escolhe a Storage Engine (o padrão é InnoDB, mas pode usar MylSAM). No Collation, você pode escolher o utf8_general_ci também.
Vamos ver as databases pelo CMD, usando show databases;
, use exemplo;
, show tables;
e desc amigos;
.
Se quiser ver a estrutura criada pra criar a tabela, use o comando show create table amigos;
(no CMD). O mesmo vale pra databases (no exemplo, show create database exemplo;
.
Voltando a PHPMyAdmin, se quiser mudar algum dado, é só ir em muda, na coluna desejada (por exemplo, mudaremos tel pra telefone e tamanho de 11 pra 15).
Abaixo da aba onde mostra os comandos utilizados, tem a opção "Edita" para alterar algum deles, se desejado. Tem também a opção de código PHP.
Também tem a opção de adicionar novas colunas, logo abaixo, veja um exemplo para Sexo:
Nome | Tipo | Tamanho | Predefinido | Agrupamento | Atributos | Nulo | Índice | Auto Incremento |
---|---|---|---|---|---|---|---|---|
sexo | ENUM | 'M','F' | √ |
Vamos adicionar um cadastro, indo na aba insere da tabela, faça um teste com o mesmo telefone. Cuidado com as opções, principalmente abaixo.
Da mesma forma, você pode editar os cadastros na tabela.
Vamos exportar a base toda de exemplo, indo em exportar (escolha a opção personalizada pra escolher a base desejada).
O comando mais famoso e um dos mais usados em SQL é o select
.
Vamos importar um arquivo de dump em SQL com o código já formatado com vários registros, para o banco cadastro. Clique aqui para baixar.
Para verificar os registros, use o select * from cursos
. O asterisco significa "todos".
Se quiser escolher a ordenação por nome (ou outra chave), por exemplo, use assim:
select * from cursos
order by nome;
PS: Se não colocar esse parâmetro, ele ordenará pela chave primária, independente de qual seja.
Podemos usar o desc
após o nome da chave desejada, para ordenar de trás pra frente, assim:
select * from cursos
order by nome desc;
PS: Nesse caso, o desc quer dizer "descendente" por ser um parâmetro do ordem, e seu inverso seria o asc
(que é desnecessário usar). Não tem nada a ver com o "describe".
Podemos filtrar as colunas pelo nome das mesmas, por exemplo:
select nome, carga, ano from cursos
order by nome;
Esse filtro podemos usar para mostrar apenas as colunas que queremos, inclusive, não precisam estar na ordem das colunas no banco. E também podemos criar outras ordenações, por exemplo:
select ano, nome, carga from cursos
order by ano, nome;
No caso acima, ele vai ordenar tudo por ano, e dentro dos anos, arrumar os nomes.
Podemos também filtrar as linhas com o parâmetro where
, para mostrar somente algumas linhas, assim:
select * from cursos
where ano = '2016'
order by nome;
Da mesma forma, podemos usar ambos os filtros juntos:
select nome, descricao, carga from cursos
where ano = '2016'
order by nome;
No caso, filtramos por ano, mas não o mostramos ele no banco.
Podemos também usar no lugar do igual, operadores relacionais diversos, como o menor ou igual, maior ou igual, maior, menor e diferente, veja no exemplo onde selecionamos 2015 e anos anterioires à ele:
select nome, descricao, carga from cursos
where ano <= '2015'
order by ano, nome;
PS: Além do !=
, o diferente pode ser representado por <>
.
Podemos também usar o operador between
para selecionar algo entre uma coisa e outra, veja um exemplo no qual escolhemos entre 2014 e 2016:
select nome, ano from cursos
where ano between 2014 and 2016
order by ano desc, nome asc;
E tem também o in
para especificar vários valores específicos, independente do intervalo, por exemplo:
select nome, descricao, ano from cursos
where ano in (2014, 2016, 2020)
order by ano;
Nesse caso acima só mostrará 2014, 2016 e 2020, intervalos entre eles não serão mostrados.
Podemos também usar operadores lógicos (como and, or e not), por exemplo:
select nome, carga, totaulas from cursos
where carga > 35 and totaulas < 30
order by nome;
Pode ver no caso acima que são parâmetros de colunas totalmente diferentes.
Mudando o and para or:
select nome, carga, totaulas from cursos
where carga > 35 or totaulas < 30
order by nome;
Podemos usar o limit
para limitar a quantidade de linhas exibidas, e o offset
para mostrar quantas ocorrências pulará:
select nome, descricao from cursos where ano = '2017' limit 3;
Com offset, que pulará as duas primeiras ocorrências do banco e contará a partir da 3ª:
select nome, descricao from cursos where ano = '2017' limit 3 offset 2;
PS: eles não precisam ser usados juntos, mas é bom ter uma condição ou ao menos uma ordenação para isso.
Inclusive, podemos ver como funciona uma SQL Injection, onde ao passar ' or '1 = 1
(geralmente é usado aspas simples) num formulário retornaria todas as ocorrências do banco, ficando dessa forma:
select * from cursos where nome = 'MySQL' or '1 = 1';
Ou assim:
select * from cursos where nome = '' or '1 = 1';
Select é DML, mas alguns o classificam em DQL.