HowTo: MySQL - Exemplos
Início
1. Como se cria, apaga e chama uma base de dados
Uma base de dados é criada com o comando 'CREATE DATABASE':
- CREATE DATABASE xpto DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci;
neste caso usa-se o modo de representação de caracteres de tamanho variável 'utf8'.
Nota: Se se desejar fazer o teste de existência da base de dados antes de a apagar, fazer 'CREATE DATABASE IF NOT EXISTS'.
Para a apagar usa-se 'DROP DATABASE':
- DROP DATABASE IF EXISTS xpto;
Nota: De um modo análogo, se que quiser fazer o teste de existência antes de apagar fazer 'DROP DATABASE IF EXISTS'.
Para chamar uma base de dados usa-se 'USE':
Início
2. Como se cria, limpa e apaga uma tabela (table)
Uma tabela é criada com o comando 'CREATE TABLE' a que se segue a informação
referente a cada um dos campos nela contidos que deverá ter o nome seguido pelo
seu tipo (ver tipos).
Neste caso usa-se 'id' como
um contador númerico se funcionará como índice da tabela e o campo 'nascimento'
tem obrigatoriamente de ser preenchido.
- CREATE TABLE tabela_nome (id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(80), nascimento DATE NOT NULL, altura INT,
curso VARCHAR(120), PRIMARY KEY (id));
Para ver as tabelas definidas numa dada base de dados:
Para ver a decrição duma tabela:
- SHOW INDEX FROM tabela_nome;
Para ver os índices duma tabela:
- DESCRIBE FROM tabela_nome;
Para apagar uma tabela:
Para acrescentar uma coluna (campo) a uma tabela:
- ALTER TABLE tabela_nome ADD nova_coluna tipo;
- ALTER TABLE tabela_nome ADD nova_coluna tipo AFTER coluna_existente;
Para apagar toda a informação de uma tabela:
Início
3. Como se introduz, altera e apaga a informação numa tabela
Para inserir dados numa tabela usa-se o comando 'INSERT INTO'. Os dados são
introduzidos entre parêntesis e separados por vírgulas. Para a introdução de textos pode
usar-se plicas ou aspas. Quando se tem um campo com auto-incremento, é
conveniente pô-lo a '0'. Os campos não preenchidos são marcado com 'NULL:
- INSERT INTO tabela_nome VALUES (0, 'Nome1', '2000-01-01', 170, NULL);
É igualmente possível fazer a introdução a partir de um ficheiro que contém a informação:
- LOAD DATA LOCAL INFILE "file_name" INTO TABLE tabela_nome;
neste caso, o ficheiro deve ser construído do seguinte modo: entrada na tabela corresponde
a uma linha e os campos devem estar separados por TABS.
Para alterar a informação de um registo de uma tabela usa-se 'UPDATE',
em que campo_nome1 é o campo a alterar e campo_nome2 é o campo de
referência:
- UPDATE tabela_nome SET campo_nome1 = novo_valor1
WHERE campo_nome2 = novo_valor2;
- UPDATE tabela_nome SET nascimento = "1990-01-01" WHERE nome = "Nome1";
Para apagar um registo de uma tabela usa-se 'DELETE FROM',
em que 'tabela_nome1' é a tabela a alterar e 'condição' é a condição que os campos
do registo a apagar devem satisfazer:
- DELETE FROM tabela_nome1 WHERE condição;
Início
4. Como pesquisar a informação numa tabela
A leitura da informação contida numa tabela é feita com a instrução "SELECT".
O exemplo mais simples corresponde a pedir toda a informação contida uma tabela (em que 'table_name' é o nome da tabela desejada):
SELECT * FROM table_name;
Para obter resultados mais específicos pede restringir-se a informação pedida. Exemplos:
Comando | Explicação |
SELECT f1,f2 FROM table_name; | Mostra os campos 'f1' e 'f2' de 'table_name' |
SELECT * FROM table_name WHERE f1="valor"; | Mostra as entradas em que o campo 'f1' toma o valor "valor" |
SELECT * FROM table_name WHERE f1>v1 AND f1<v2; | Mostra as entradas entre v2 < f1 %lt; v1 |
SELECT * FROM table_name WHERE f1>v1 AND f2>v2; | Mostra as entradas os campos f1 > v1 e f2 > v2 |
SELECT * FROM table_name ORDER BY f1; | Mostra as entradas ordenadas de acordo com o campo 'f1' |
SELECT * FROM table_name ORDER BY f1 DESC; | Mostra as entradas ordenadas de acordo com o campo 'f1' por ordem descrescente |
SELECT DISTINCT f1 FROM table_name; | Mostra apenas as entradas diferentes do campo 'f1' |
SELECT * FROM table_name LIMIT N; | Mostra as 'N' primeiras entradas de 'table_name' |
SELECT * FROM table_name LIMIT N OFFSET M; | Mostra as 'N' primeiras entradas de 'table_name' tirando as 'M' primeiras |
Nota: No caso do nome do campo ter caracteres não literais (hifens, espaços, etc.) o nome do campo deve ficar entre acentos graves (exemplo: se o campo se
chamar campo-f1, então deve escrever-se: `campo-f1`).
Início
5. Curingas (wildcards) em SQL. Instrução 'LIKE'
A instrução 'LIKE' permite a especifição de apenas partes do campo a pesquisar. O conteúdo da pesquisa fica entre plicas ('...').
Existem dois tipos de curingas (wildcards):
Curinga | Explicação |
% (percentagem) | Representa nenhum, um ou mais caracteres |
_ (sublinhado) | Representa um caracter |
Exemplos:
Comando | Explicação |
WHERE f1 LIKE 'a%'; | Todas as entradas do campo 'f1' que começam por 'a' |
WHERE f1 LIKE '%a'; | Todas as entradas do campo 'f1' que terminam por 'a' |
WHERE f1 LIKE '%a%'; | Todas as entradas do campo 'f1' em que existe pelo menos um 'a' |
WHERE f1 LIKE '_a%'; | Todas as entradas do campo 'f1' que têm 'a' como segundo caracter |
WHERE f1 LIKE '_a_'; | Todas as entradas do campo 'f1' que têm 3 caracteres e um 'a' na segunda posição |
Início
6. Como pesquisar diversos valores para um campo. Instrução 'IN'. Equivalente a uma sucessão de 'OR'
A instrução 'IN' permite especificar um conjunto de valores. É equivalente a um conjunto de 'OR' a ligar os valores indicados. Exemplo:
SELECT * FROM table1 WHERE f1 IN (v1, v2, ..., vN);
Selecciona todos os valores que satisfazem 'f1 = v1 OR f1 = v2 OR ... OR f1 = vN'.
Início
7. Como pesquisar valores dum campo num certo intervalo. Instrução 'BETWEEN'
A instrução 'BETWEEN' permite especificar um intervalo de pesquisa. Os limites estão incluídos. Exemplo:
SELECT * FROM table1 WHERE f1 BETWEEN v1 AND v2;
Obtêm-se assim todos as entradas de 'f1' contidos no intervalo [v1, v2].
Início
8. Funções predefinidas -- alguns exemplos
Existem diversas funções definidas em MySQL. Seguem-se alguns exemplos
Comando | Explicação | Exemplo |
COUNT(f1) | Conta o número de entradas. 'f1' pode pode ser '*' ou um campo | select *, COUNT(*) from table_name; |
CURDATE() | Dá a data actual | select *, CURDATE() from table_name; |
DAY() | Recebe como argumento uma data e retorna o respectivo dia | select *, DAY(f1) from table_name; |
MAX(f1) | Retorna o valor máximo do campo 'f1' | select MAX(f1) from table_name; |
MIN(f1) | Retorna o valor mínimo do campo 'f1' | select MIN(f1) from table_name; |
MONTH() | Recebe como argumento uma data e retorna o respectivo mês | select *, MONTH(f1) from table_name; |
YEAR() | Recebe como argumento uma data e retorna o respectivo ano | select *, YEAR(f1) from table_name; |
Início
9. Como executar sequências de comando a partir de um ficheiro
Para executar um ficheiro com instruções de SQL usando a linha de comandos:
$ mysql -h host -u user -p < 'batch-file'
Enter password: ******
Se se deseja que, em caso de erro, o MySQL continue a execução, acrescentar "--force":
$ mysql --force -h host -u user -p < 'batch-file'
Enter password: ******
Início
10. Como pesquisar em mais do que uma tabela
aaa
Início
11. Como juntar duas pesquisas. Instrução 'UNION'
A instrução 'UNION' serve para juntar duas ou mais pesquisas.
O número de colunas de cada pesquisa deve ser o mesmo e elas devem ter o mesmo tipo.
A 'UNION' selecciona apenas valores diferentes, assim, se se quer que apareçam todos deve fazer-se 'UNION ALL'.
Exemplos:
SELECT f1, f2 FROM table1 UNION SELECT f3, f4 FROM table2;
Início
12. Mostrar informação do sistema (SHOW)
O comando 'SHOW' permite mostrar informação do sistema.
- SHOW VARIABLES
A seguir mostram-se alguns exemplos com
a informação contida nas variáveis:
- Tipo de caracteres actual
SHOW VARIABLES LIKE 'character_set_system';
- Pasta em que são guardadas as bases de dados
SHOW VARIABLES LIKE 'datadir';
- Nome do computador
SHOW VARIABLES LIKE 'hostname';
- Mostra a versão
SHOW VARIABLES LIKE 'version';
- Mostra informações da versão
SHOW VARIABLES LIKE 'version%';
Nota: Para ver todas as variáveis fazer:
SHOW VARIABLES LIKE '%';
- SHOW WARNINGS
- Mostra os avisos (warnings):
SHOW WARNINGS;
Início
13. Mostrar informação dos utilizadores (SHOW)
- Criar um utilizador
CREATE USER 'userName'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
- Atribuir privilégios ('grants') a um utilizador (neste exemplo, todos)
GRANT ALL ON databaseName.* TO 'userName'@'%';
- Apagar utilizador. Para apagar um utilizador deve-se primeiro remover os 'grants'
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'userName'@'localhost';
DROP USER 'userName'@'localhost';
- Mostrar utilizadores
SELECT user,host FROM mysql.user;
- Mostrar 'grants' de um utilizador
SHOW GRANTS FOR 'userName'@'localhost';
- Mostrar o utilizador actual
SELECT current_user();
- Atribuir 'grants' a um utilizador
SELECT current_user();
Início
14. Como ver e apagar dados de uma tabela com certo tempo
- Como mostrar os dados de uma tabela
Início
15. Tipos dos campos de uma tabela
Tipo |
Descrição |
TINYINT |
Inteiro de 1 byte |
SMALLINT |
Inteiro de 2 byte |
MEDIUMINT |
Inteiro de 3 byte |
INT ou INTEGER |
Inteiro de 4 bytes |
BIGINT |
Inteiro de 8 bytes |
FLOAT |
Real de 4 bytes |
DOUBLE ou REAL |
Real de 8 bytes |
DATE |
Formato: 'YYYY-MM-DD' |
TIME |
Formato: 'HH:MM:SS' |
DATETIME |
Formato: 'YYYY-MM-DD HH:MM:SS' |
CHAR(len) |
String de caracteres de tamanho fixo |
VARCHAR(len) |
String de caracteres de tamanho variável |
TINYBLOB, TINYTEXT |
Texto até 255 (2^8 - 1) caracteres |
BLOB, TEXT |
Texto até 65535 (2^16 - 1) caracteres |
MEDIUMBLOB, MEDIUMTEXT |
Texto até 16777215 (2^24 - 1) caracteres |
LONGBLOB, LONGTEXT |
Texto até 4294967295 (2^32 - 1) caracteres |
ENUM |
Tipo enumerado |
Início