---
# System prepended metadata

title: MYSQL

---

# 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';