# MYSQL
## Lidando com usuários
### Logar como root
sudo mysql -u root
### Listar todos os usuários
SELECT * FROM mysql.user;
### Deletar um usuário
DELETE FROM mysql.user WHERE User = 'nome_do_usuário';
### Criar um usuário
CREATE USER 'nome_do_usuario'@'host' IDENTIFIED BY 'senha';
### Conceder permissões a um usuário
GRANT tipo_da_permissão ON nome_da_database.nome_tabela TO 'nome_do_usuario'@'host';
### Caso queira dar todas as permissões a um usuário, em todas as tabelas
GRANT ALL PRIVILEGES ON *.* TO 'nome_do_usuario'@'host';
## Recarregar as permissões
FLUSH PRIVILEGES;
---
## Lidando com as databases
### Criar database
CREATE DATABASE nome_da_database;
### Mostrar todas as databases
SHOW databases;
### Usar database
USE nome_da_database;
### Deletar uma database
DROP DATABASE nome_da_database;
---
## Lidando com as tabelas
### Criar tabela
Para criar uma tabela, é necessário informar pelo menos uma coluna
CREATE TABLE nome_tabela (primeira_coluna tipo caracteristicas_opcionais, segunda_coluna tipo caracteristicas_opcionais, etc...);
>Neste link é possível pegar todos os tipos de colunas do mySQL
>https://dev.mysql.com/doc/refman/8.0/en/data-types.html
Exemplo:
```sql=0
create table tutorials_tbl(
tutorial_id INT NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( tutorial_id )
);
```
Exemplo 2:
```sql=0
create table users(
id integer auto_increment not null,
name varchar(100) not null,
email varchar(100) not null unique,
primary key(id)
);
```
Note que toda tabela precisa ter uma coluna que sirva de chave primária. Geralmente essa é a primeira coluna a ser criada, e tem o nome de ID. Para colocar uma coluna como chave primária, use:
CREATE TABLE nome_tabela (nome_da_primeira_coluna tipo_de_dado primary key outras_caracteristicas_opcionais);
Caso o dado em questão possa ser incrementado automaticamente, como um INTEGER, use:
CREATE TABLE nome_tabela (nome_da_primeira_coluna tipo_de_dado auto_increment);`
Caso o dado em questão seja um vetor de itens, deverá ser especificado seu tamanho:
CREATE TABLE nome_tabela (nome_da_primeira_coluna tipo_de_dado(numero_de_posições))
### Mostrar as colunas de uma tabela
SHOW COLUMNS FROM nome_tabela;
### Insere coluna
ALTER TABLE nome_tabela ADD nome_coluna descrição_coluna
> A descrição pode conter apenas o tipo da coluna, como `ADD ordem int`
### Altera coluna
ALTER TABLE nome_tabela CHANGE nome_atual nome_novo tipo especificacoes_opcionais;
### Deleta coluna
ALTER TABLE nome_tabela
### Todas as tabelas
SHOW TABLES;
### Renomear tabelas
RENAME TABLE nome_atual TO nome_novo;
### Deletar tabelas
DROP TABLE nome_tabela;
---
## Lidando com dados
Estando dentro de uma database, com pelo menos uma tabela criada, podemos então começar a armazenar dados
Vamos considerar a seguinte tabela para os exemplos:
Tabela **clientes**
| ID | NOME | RG |
| --- | ---- | --- |
### Inserindo uma linha de informações
INSERT INTO clientes(id, nome, rg) VALUES ('1','Fulano de Tal','123456789');
### Pegando informações
SELECT nome_do_campo FROM clientes WHERE campo = 'característica_desejada;'
Se desejarmos ver toda a tabela, depois do `select` usamos *
Se desejarmos escolher os campos cuja informação obedece à uma expressão regular, usamos `like` ao invés de `=`
### Alterando um campo específico
UPDATE clientes SET nome='Fulano' WHERE nome='Barroso';
### Deletando uma linha específica
DELETE FROM cliente WHERE campo='valor';