Prazer, podem me chamar de Nan! Atualmente estou cursando T.I. e decidi compartilhar e "documentar" meus aprendizados sobre MySQL por meio desse repositório! Esse projeto foi fortemente inspirado pela Jornada JavaScript, do meu extremamente talentoso amigo e colega de curso: João Gomes!
A Jornada MySQL está ativamente recebendo novas atualizações, modificações e correções ao longo do tempo para garantir que todos os conteúdos apresentados sejam fáceis e simples de se entender, mas eficientes e práticos para serem consultados.
Important
- Ao longo da jornada, estarei utilizando o realce de sintaxe do SQL nos blocos de código para facilitar a visualização de certos comandos, declarações, tabelas, etc.
- A "Jornada MySQL" foi criada para auxiliar e documentar apenas o meu aprendizado pessoal sobre o sistema, e não deve ser vista como uma substituição e/ou alternativa das documentações oficiais. Consulte a documentação oficial do MySQL por aqui.
Tabela de conteúdos (Clique para mostrar)
- Introdução
- Sintaxe Básica e Boas Práticas
- Ferramentas Recomendadas
- Visualizando, criando e utilizando um banco de dados
- Tipos de dados
- Visualizando, criando e descrevendo uma tabela
- Inserindo e selecionando valores de uma tabela
- Incremento Automático (AUTO_INCREMENT)
- Alterar Tabela (ALTER TABLE)
- Atualizando as informações de uma tabela (UPDATE)
Esse repositório foi inicialmente criado e planejado com a utilização da compilação de softwares livres XAMPP como base, então resultados e algumas instruções podem possivelmente variar.
- Abra o XAMPP Control Panel, procure pelo módulo "MySQL" e clique em "Start". Após isso, clique no botão "Shell" para abrir o CMD;
- Na recém aberta janela do CMD, insira o seguinte código:
mysql -h localhost -u root -pNote
- Ao inserir esse comando, o CMD solicitará uma senha (Enter password: );
- Por padrão, basta apenas apertar a tecla "ENTER" para ter acesso ao MySQL (MariaDB).
- Todos os comandos precisam ser finalizados com ponto e vírgula (;);
- Ao inserir uma linha de comando incompleta, o CMD exibirá uma setinha (->):
Ela serve para inserir o restante do código, sem a necessidade de reescrevê-lo; - Ao finalizar uma linha de código com erro(s), uma mensagem de erro será exibida no CMD:
Caso um ou vários erros sejam exibidos, será necessário reescrever todo o código novamente, de forma correta; - Caracteres especiais não são reconhecidos por padrão e serão exibidos como "?", mas podem ser habilitados!
- Comandos do MySQL sempre em letras maiúsculas (UPPERCASE);
- Nomes atribuídos ao banco de dados, tabelas, tipos de dados, etc. sempre em letras minúsculas (lowercase).
Para criar diagramas entidade-relacionamento (DER) do banco de dados MySQL, estarei inicialmente utilizando o site DB Designer por sua intuitividade, mas o dbdiagram.io é a opção mais recomendada.
Facilitando o gerenciamento do banco de dados por meio de uma extensão para o Visual Studio Code distribuída pela Database Client, o MySQL é uma ferramenta prática e conveniente, mas necessita de alguns passos e configurações para o seu funcionamento adequado:
- Após instalar a extensão, certifique-se de que o banco de dados MySQL está inicializado por meio do XAMPP Control Panel;
- Dois novos ícones devem aparecer na barra lateral do VS Code, clique no ícone de cilindro "Database";
- Na seção Database, clique em "Create Connection" e copie as seguintes configurações:
- Server Type: MySQL
- Host: localhost
- Port: 3306
- Username: root
- Agora, clique em "Connect" e a extensão deve estar pronta para gerenciar o banco de dados!
Warning
A documentação da Jornada MySQL não foi pensada e/ou adaptada para a extensão "MySQL", do Visual Studio Code. Todos os comandos ainda podem ser realizados por meio da extensão, mas por sua conta e risco.
PS: Estarei utilizando o nome "db_github" como exemplo, mas pode ser qualquer nome!
SHOW DATABASES;CREATE DATABASE db_github;USE db_github;- INTEGER() ou INT() Utilizado para valores exatos e inteiros, declarado em conjunto de um limite máximo de casas numéricas dentro do parênteses;
- DECIMAL() Utilizado para valores quebrados (números com vírgula), declarado em conjunto de um limite máximo de casas numéricas dentro dos parênteses. O primeiro valor declarado dentro do parênteses será o limite de casas númericas antes e após a vírgula, e o segundo será o limite de casas depois da vírgula;
Exemplo: INT(2) - Limita a quantidade de casas numéricas para 2, então 99 seria aceito, mas 100 não.
Exemplo: DECIMAL(4,2) - Limita a quantidade de casas numéricas antes e após a vírgula para 4, enquanto as casas após a vírgula serão limitadas para 2.
Note
Ao inserir valores do tipo númerico, não os colocar dentro de aspas.
- VARCHAR() Utilizado para armazenar uma sequência de caracteres com tamanhos variados, declarado em conjunto de um limite de caracteres dentro do parênteses;
Exemplo: VARCHAR(50) - Limita a quantidade máxima de caracteres para 50;
Note
Ao inserir valores do tipo string, sempre os coloque dentro de aspas ("").
- DATE Um tipo de dado para valores de datas no formato internacional (YYYY-MM-DD);
Ao inserir valores do tipo DATE, sempre os coloque dentro de aspas (""), ou serão exibidos como 0000-00-00.
PS: Estarei simplificando a descrição de cada comando para não precisar repetir a palavra "comando" toda hora!
PPS: Estarei utilizando o nome "tb_pessoas" como exemplo, mas pode ser qualquer nome!
SHOW TABLES;Important
- Ao criar uma nova tabela, ao menos uma coluna também precisa ser criada;
- Os nomes e tipos de dados das colunas devem ser todos declarados dentro de parênteses ();
- Para criar várias colunas no mesmo comando, separe-as com vírgulas (,).
CREATE TABLE tb_pessoas(exemplo_nome VARCHAR(50), exemplo_idade INT(3));DESC tb_pessoas;+---------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| exemplo_nome | varchar(50) | YES | | NULL | |
| exemplo_idade | int(3) | YES | | NULL | |
+---------------+-------------+------+-----+---------+-------+Warning
A tabela acima não deve ser copiada, e serve apenas para visualizar como seria o resultado do comando "DESC"!
Important
- Para inserir um novo valor (linha) em uma tabela, é necessário atribuí-lo a pelo menos uma coluna;
- Exemplo: Valores que representam uma pessoa seriam atribuídos às colunas "nome" e "idade";
- Os valores devem ser separados por vírgula e colocados em ordem, como no exemplo abaixo:
INSERT INTO tb_pessoas (exemplo_nome, exemplo_idade) VALUE ("Nan", 19);- Para inserirmos mais de um valor em uma tabela no mesmo comando, utilizamos a declaração "VALUES", como no exemplo abaixo:
INSERT INTO tb_pessoas (exemplo_nome, exemplo_idade) VALUES ("Nan", 19), ("Nana", 20);Tip
- O comando "SELECT" serve para visualizar os valores de uma tabela;
- Pode ser usado para visualizar todos os valores inseridos, ou valores específicos;
SELECT * FROM tb_pessoas;- Selecionar todos os valores da tabela "tb_pessoas" que foram atribuídos na coluna "exemplo_nome":
SELECT exemplo_nome FROM tb_pessoas;- Selecionar todos os valores da tabela que possuem a coluna "exemplo_nome" atribuída como "Nan":
SELECT * FROM tb_pessoas WHERE exemplo_nome = “Nan”;- Selecionar todos os valores da tabela e organizá-los por ordem alfabética crescente das atribuições na coluna "exemplo_nome":
SELECT * FROM tb_pessoas ORDER BY exemplo_nome ASC;- Selecionar todos os valores da tabela e organizá-los por ordem numérica decrescente das atribuições na coluna "exemplo_idade":
SELECT * FROM tb_pessoas ORDER BY exemplo_idade DESC;- Por padrão, todos os tipos de dados declarados podem armazenar valores nulos, ou seja, sem um valor especificado;
- Ao declarar um tipo de dado (coluna) como "NOT NULL", todos os valores inseridos na tabela precisam de um valor definido na coluna especificada.
- A chave primária é declarada em uma coluna de importância vital para a tabela;
- Sua função é otimizar e melhorar a performance da coluna, geralmente a de IDs únicos.
Todos os comandos apresentados nessa seção serão utilizados em conjunto do "AUTO_INCREMENT" para declararmos uma coluna, ou seja:
- Uma coluna que não poderá armazenar valores nulos (NOT NULL);
- Estabelecida como chave primária (PRIMARY KEY).
Note
- Não é necessário criar uma nova tabela para definir uma coluna com essas características;
- Esse é apenas um exemplo, e a forma que eu inicialmente aprendi!
CREATE TABLE tb_exemplo(id_unico INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT);Important
Todos os comandos são separados apenas por espaço, sem o uso de vírgula (,).
- Alterar a tabela "tb_exemplo" para adicionar a coluna "exemplo_sobrenome":
ALTER TABLE tb_exemplo ADD exemplo_sobrenome VARCHAR(50);- Alterar a tabela "tb_exemplo" para remover a coluna "exemplo_sobrenome":
ALTER TABLE tb_exemplo DROP COLUMN exemplo_sobrenome;- Alterar a tabela "tb_exemplo" para modificar a coluna "coluna_antiga", mudando seu nome para "coluna_nova" e adicionando o tipo de dado "VARCHAR":
ALTER TABLE tb_exemplo CHANGE coluna_antiga coluna_nova VARCHAR(50);Tip
- A condição "CHANGE" é extremamente útil para alterar o limite de caracteres ou casas numéricas de uma coluna;
- Exemplo: Modificar o tipo de dado e limite de caracteres "VARCHAR(20)" de uma coluna para "VARCHAR(50)".
- A condição "SET" define a coluna que será alterada, e qual será a nova informação adicionada;
- Até onde eu sei, é uma condição obrigatória.
- A condição "WHERE" indica as condições que as linhas precisam cumprir para serem selecionadas;
- Ela indica os requerimentos que as linhas precisam possuir para serem atualizadas;
- O requerimento geralmente será o valor do ID único da linha desejada;
Important
O "WHERE" não é uma condição obrigatória, mas de extrema importância para a utilização segura do "UPDATE".
- Atualizar a tabela "tb_exemplo", definindo a informação presente na coluna "exemplo_nomes" como "Nan" onde o "id_unico" da linha que será afetada possui o valor "123":
UPDATE tb_exemplo SET exemplo_nome = "Nan" WHERE id_unico = 123;