O banco de dados é como um navio com containers, que guardam coisas com características semelhantes (como nomes, senhas, e-mails, etc.). Banco de dados são conjuntos de tabelas, tabelas são conjuntos de registros e registros contém campos.
PS: Os registros também podem ser chamados de linhas ou tuplas.
Saiba também que:
create
, alter
e drop
.insert
, select
, update
e delete
.grant
e revoke
.Quando o assunto é banco de dados, um termo muito comum é o CRUD, um acrônimo para as quatro operações de DML que podemos fazer em uma tabela no banco de dados – podemos inserir informações (create), ler (read), atualizar (update) e apagar (delete).
Os passos necessários para efetuar uma das operações do CRUD são sempre os mesmos:
Para criar o banco de dados usamos o comando create database
, dessa forma:
create database cadastro;
PS: Ao invés de database, podemos usar também schema
, como por exemplo create schema cadastro
, não há diferença entre ambos.
Para criar tabelas, usamos o comando create table
, com os campos, assim:
use cadastro;
create table pessoas (
nome varchar(30),
idade tinyint,
sexo char(1),
peso float,
altura float,
nacionalidade varchar(20)
);
describe pessoas;
O comando use cadastro
é para escolher um banco existente para usar.
Esses são os tipos de dados primitivos em MySQL:
Aprendemos a criar bancos e tabelas básicas, mas podemos e devemos fazer muitas melhorias.
Para isso precisamos excluir as bases antigas, podemos fazer dessa forma, com o comando drop database
:
drop database cadastro;
Agora, criaremos um novo banco com parâmetros (constraints) e com collation, veja aí uma criação com eles, para definir os caracteres pro nosso idioma:
create database cadastro
default character set utf8
default collate utf8_general_ci;
Para atualizar as tabelas, devemos usar campos mais inteligentes, tipos primitivos melhor dimensionados e muito mais. Para economizar espaços em bytes no seu servidor. Veja alguns tipos primitivos que podemos usar:
Para guardar cadeias de caracteres, prefira o varchar
, que ocupa menos espaço caso ele receba um valor menor que o predefinido.
Para números reais é preferível o decimal
.
A idade é melhor cadastrar a data de nascimento e calcular usando o date
para não ter que atualizar todo ano.
Para sexo usaremos uma coleção com valores pré-definidos, com o enum
, sempre colocando not null
.
Para o peso e altura, usareamos o decimal
, e os números entre parênteres. O primeiro é a quantidade de caracteres, e o segundo são as casas decimais (o primeiro sempre é maior).
Veja um exemplo:
create table pessoas (
nome varchar(30) not null,
nascimento date,
sexo enum('M', 'F') not null,
peso decimal(5, 2),
altura decimal(3, 2),
nacionalidade varchar(20) default 'Brasil'
)
default charset = utf8;
A constraint not null
é pra obrigar a preencher os dados exigidos (geralmente é necessária pro enum funcionar, por exemplo). A constraint default
é usada pra pré-definir um valor padrão, caso nada seja enviado.
Agora delete a tabela com esse comando:
drop table pessoas;
Para evitar que duas pessoas exatamente iguais se cadastrem, criaremos um campo para gerar um código automático, como uma matrícula. Para isso usamos o constraint auto_increment
. Para definir uma chave primária, usamos primary key()
com o campo entre parênteses. Veja um exemplo:
create table pessoas (
id int not null auto_increment,
nome varchar(30) not null,
nascimento date,
sexo enum('M', 'F') not null,
peso decimal(5, 2),
altura decimal(3, 2),
nacionalidade varchar(20) default 'Brasil',
primary key(id)
)
default charset = utf8;
Os comandos create são chamados de DDL (Data Definition Language).
Para inserir dados em tabelas, primeiros a gente pega os nomes dos campos do MySQL, separados por vírgula, assim:
insert into pessoas
(nome, nascimento, sexo, peso, altura, nacionalidade)
values
('Carlos', '1977-06-25', 'M', '74.2', '1.75', 'Brasil');
PS: As datas em MySQL são colocadas ao contrário do que estamos acostumandos, no formato ano-mês-dia. E qualquer tipo de dados se coloca entre aspas. Alguns campos não precisam ser específicados, no caso anterior, foi o ID.
Também pode colocar default em alguns campos (nesse caso, sem aspas), assim:
insert into pessoas
(id, nome, nascimento, sexo, peso, altura, nacionalidade)
values
(default, 'Fátima', '1964-01-18', 'F', '62.3', '1.69', 'Portugal');
Se a ordem dos campos for exatamente a mesma nos comandos, você pode simplificar o código assim:
insert into pessoas
values
(default, 'Fátima', '1964-01-18', 'F', '62.3', '1.69', 'Portugal');
Podemos inserir vários dados de uma só vez, separando por vírgulas cada cadastro, dessa forma:
insert into pessoas
(id, nome, nascimento, sexo, peso, altura, nacionalidade)
values
(default, 'Silvio', '1942-09-14', 'M', '84.1', '1.86', 'Israel'),
(default, 'Luciana', '1982-07-23', 'F', '66.9', '1.72', default),
(default, 'Ramon', '1977-05-21', 'M', '67.0', '1.76', 'Espanha');
O comando insert into
é do tipo DML (Data Manupulation Language).
Veja alguns significados de constraints:
default ''
= Para definir os dados padrões caso nada seja enviado pra tabela.if not exists
= Para manipular a tabela apenas se não existir outra com o mesmo nome.if exists
= Para manipular a tabela apenas se existir outra com o mesmo nome.unique
= Para que não seja enviados dados repetidos para determinados campos.unsigned
= Para receber apenas números positivos.Para alterar a estrutura da tabela, você usa o comando alter table
. Para descrever os cadastros da base de dados, usamos o comando describe
ou desc
. Para adicionar colunas (campos) usamos o comando column
.
Veja um exemplo de tudo isso:
desc pessoas;
alter table pessoas
add column profissao varchar(10);
Para ver os campos adicionados, use esse comando:
select * from pessoas;
Para eliminar colunas, usa-se o drop também, dessa forma:
alter table pessoas
drop column profissao;
Agora vamos adicionar o campo profissão novamente, mas em outra posição, no exemplo, depois do nome, usando o comando after
(depois). Dessa forma:
desc pessoas;
alter table pessoas
add column profissao varchar(10) after nome;
PS: O after significa depois, mas no MySQL não existe o "before" (antes). Para colocar uma coluna como a primeira, usamos o comando first
. Veja um exemplo:
desc pessoas;
alter table pessoas
add column codigo int first;
Para alterar a estrutura de definições de colunas, usamos o código modify
, dessa forma:
alter table pessoas
modify column profissao varchar(20) not null default '';
PS: O modo acima não modifica nomes de campos, apenas as constraints e os tipos primitivos.
Para modificar o nome das colunas, usamos o código change
(também pode ser usado pra mudar constraints e tipos primitivos). Veja um exemplo:
alter table pessoas
change column profissao prof varchar(25) not null default '';
PS: Como visto, você deve colocar o nome antigo (a ser alterado) seguido do novo nome. E para manter as constrains e tipos primitivos, deve se colocar novamente elas com os mesmos valores, como também podem ser alteradas.
Para renomear a tabela inteira, você usa o comando rename to
, dessa forma:
alter table pessoas
rename to usuarios;
Vamos criar uma nova tabela para o próximo exemplo, assim:
create table if not exists cursos (
nome varchar(30) not null unique,
descricao text,
carga int unsigned,
totaulas int,
ano year default '2017'
)
default charset = utf8;
Para adicionar chaves primárias no campo acima, fazemos assim, como por exemplo, pra adicionar um código:
alter table cursos
add column idcurso int first;
Logo após, você apenas fará isso para adicionar a chave primária:
alter table cursos
add primary key(idcurso);
Para apagar uma chave primária de uma tabela, faça assim:
alter table gafanhotos
drop primary key;
Para apagar um índice único, faça assim:
alter table cursos
drop index nome;
PS: Não é possível deletar uma chave primária definida com auto-incremento, então use o modify column
antes de deletar uma chave primária. O modify também pode ser usado para devolver a constraint unique à uma chave.
Para excluir uma tabela, podemos usar o drop assim:
drop table if exists teste;
PS: O alter table e drop table são DDL.