Você está aqui: MySQL ::: Dicas & Truques ::: Atributos (Attributes)

Aprenda a usar o atributo NOT NULL na definição dos campos de suas tabelas MySQL

Quantidade de visualizações: 14938 vezes
O atributo NOT NULL do MySQL é usado quando queremos reforçar a necessidade de se informar o valor para um determinado campo da tabela. Quando usamos este atributo na definição de um campo, o valor para este campo não poderá ser deixado em branco, ou seja, não poderá conter o valor NULL (ausência de valor).

Veja um comando DDL CREATE TABLE usado para criar uma tabela chamada usuarios:

1
2
3
4
5
6
7
8
9
10
11
12
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
CREATE TABLE  usuarios(
  id INT NOT NULL AUTO_INCREMENT,
  usuario VARCHAR(30) NOT NULL,
  senha VARCHAR(10) DEFAULT NULL,
  email VARCHAR(150) DEFAULT NULL,
  PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;

Veja que aqui o campo id é do tipo INT, não aceita NULL e é auto-incremento. O campo usuario também não aceita NULL, enquanto os campos senha e email o permitem. Observe agora a seguinte instrução SQL INSERT INTO:

1
2
3
4
5
6
7
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
INSERT INTO usuarios VALUES(NULL, 'osmar', '1234',
'osmar@arquivodecodigos.net');

Esta instrução é executada sem qualquer problema. Embora o campo id seja NOT NULL, ele é auto-incremento. Desta forma, ao fornecermos o valor NULL, o MySQL se encarrega de inserir o próximo valor de auto-incremento. Veja agora o que acontece se fornecermos o valor NULL para o campo usuario:

1
2
3
4
5
6
7
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
INSERT INTO usuarios VALUES(NULL, NULL, '1234',
'osmar@arquivodecodigos.net');

Ao tentarmos executar esta query o MySQL lançará o seguinte erro:

Column 'usuario' cannot be null (1048)

Note que uma string vazia (ou um zero) é diferente de NULL. Assim, a instrução abaixo será executada sem quaisquer problemas:

1
2
3
4
5
6
7
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
INSERT INTO usuarios VALUES(NULL, '', '1234',
'osmar@arquivodecodigos.net');


Link para compartilhar na Internet ou com seus amigos:

MySQL ::: Dicas & Truques ::: Chaves, Índices e Restrições de Integridade Referencial

Como adicionar uma chave primária a uma tabela MySQL usando o comando ALTER TABLE ADD PRIMARY KEY

Quantidade de visualizações: 7966 vezes
Em algumas situações poderá ocorrer a necessidade, talvez por motivos de manutenção na base de dados, de criar uma chave primária para uma tabela MySQL já existente. Isso pode ser feito com o auxílio do comando DDL ALTER TABLE ADD PRIMARY KEY.

Comece criando uma tabela livros sem chave primária. Veja o comando CREATE TABLE:

1
2
3
4
5
6
7
8
9
10
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
CREATE TABLE livros(
  id int(11) unsigned NOT NULL,
  titulo varchar(45) NOT NULL,
  paginas int(10) unsigned NOT NULL
)ENGINE=InnoDB;

Se dispararmos um comando DESCRIBE livros veremos a seguinte estrutura:

1
2
3
4
Field     Type               Null     Key    Default   Extra   
id        int(11) unsigned   NO       -      -         -     
titulo    varchar(45)        NO       -      -         -     
paginas   int(10) unsigned   NO       -      -         -
Como podemos ver, a tabela livros realmente não possui uma chave primária. Sendo assim, vamos usar o comando ALTER TABLE ADD PRIMARY KEY para adicionar uma chave primária ao campo id. Veja:

1
2
3
4
5
6
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
ALTER TABLE livros ADD PRIMARY KEY(id);

Dispare o comando DESCRIBE livros novamente e veja o resultado. Agora o campo id está marcado como chave primária:

1
2
3
4
Field     Type               Null     Key    Default   Extra   
id        int(11) unsigned   NO       PRI    -         -     
titulo    varchar(45)        NO       -      -         -     
paginas   int(10) unsigned   NO       -      -         -



MySQL ::: Dicas & Truques ::: Chaves, Índices e Restrições de Integridade Referencial

Como criar chaves estrangeiras no MySQL - Como criar Foreign Keys em tabelas do MySQL

Quantidade de visualizações: 89295 vezes
O que é chave estrangeira (foreign key)?

O papel da chave estrangeira é manter uma referência a um registro presente em outra tabela. Imagine o seguinte cenário. Temos uma tabela livros e uma tabela autores. Neste cenário, um autor pode escrever vários livros e um livro pode ser escrito somente por um determinado autor. Aqui temos uma relação 1:N, ou seja, um para muitos: um autor pode escrever zero, um ou vários livros.

Comece analisando a tabela autores:

1
2
3
4
Field    Type               Null   Key    Default   Extra   
id       int(10) unsigned   NO     PRI    -         auto_increment   
nome     varchar(45)        NO            -               
email    varchar(45)        NO            -               
Como podemos ver, esta tabela possui três campos: id, nome e email. O campo id é do tipo int, auto-incremento e é a chave primária da tabela (não poderá haver ids repetidos nem o valor NULL). Esta tabela foi criada com o seguinte comando DDL CREATE TABLE:

1
2
3
4
5
6
7
8
9
10
11
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
CREATE TABLE autores(
  id int(10) unsigned NOT NULL auto_increment,
  nome varchar(45) NOT NULL,
  email varchar(45) NOT NULL,
  PRIMARY KEY(id)
)ENGINE=InnoDB;

Analise agora a tabela livros:

1
2
3
4
5
Field      Type                Null    Key    Default    Extra   
id         int(10) unsigned    NO      PRI    -          auto_increment   
titulo     varchar(45)         NO             -              
paginas    int(10) unsigned    NO             -              
id_autor   int(10) unsigned    NO             -              
Note que esta tabela possui os campos id, titulo, paginas e id_autor. Veja o comando DDL CREATE TABLE usado para sua criação:

1
2
3
4
5
6
7
8
9
10
11
12
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
CREATE TABLE livros(
  id INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT,
  titulo VARCHAR(45) NOT NULL,
  paginas INTEGER UNSIGNED NOT NULL,
  id_autor INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id)
)ENGINE = InnoDB;

O campo id é do tipo int, auto-incremento e foi marcado como chave primária. Dessa forma, o campo id identifica unicamente cada livro. O campo id_autor é do tipo int e sua função é guardar o id do autor que escreveu um determinado livro. Ao trazer o valor do campo id da tabela autores para o campo id_autor da tabela livros nós estamos relacionando as duas tabelas. O campo id_autor, neste cenário, é a chave estrangeira, pois seu valor sempre refletirá o valor do campo id da tabela autores (a única exceção é quando queremos deixar, temporariamente, um livro sem autor). Lembre-se, em uma relação 1:N, a chave estrangeira, em geral, ficará no lado N da relação.

Integridade Referencial (Restrições de Chave Estrangeira) - Referential Integrity (Foreign Key Constraints)

Imagine agora que você inseriu alguns registros na tabela autores e na tabela livros. Todas as vezes que o valor do campo id_autor na tabela livros for igual ao valor do campo id na tabela autores nós estaremos criando um relação autor-livro. É possível, a qualquer momento, listar um livro e saber de imediato o id do seu autor (isso permite fazer um join com a tabela autores para obter os dados do respectivo autor).

Mas, o que acontecerá se excluirmos um registro na tabela autores e, mais tarde, descobrirmos que o campo id_autor da tabela livros guardava uma referência para o autor excluído? Teremos a quebra da integridade referencial. Para evitar tais situações, é responsabilidade do programador escrever códigos de verificações para prevenir estas ocorrências.

Os bancos de dados, e principalmente o MySQL, possuem mecanismos para reforçar esta proteção: restrições de chave estrangeira. As restrições de chave estrangeira asseguram duas situações possíveis:

1) Não permitir que um autor seja excluído quando qualquer livro possuir uma referência a ele;

2) Se o autor for excluído, todos os livros que o referenciam também o serão.

Definindo a chave estrangeira na tabela livros usando o atributo CONSTRAINT FOREIGN KEY REFERENCES

Vamos agora reescrever o comando DDL CREATE TABLE para a tabela livros de forma a aplicar as restrições de chaves estrangeiras. Veja a nova versão:

1
2
3
4
5
6
7
8
9
10
11
12
13
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
CREATE TABLE livros(
  id INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT,
  titulo VARCHAR(45) NOT NULL,
  paginas INTEGER UNSIGNED NOT NULL,
  id_autor INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id),
  CONSTRAINT livros_autores FOREIGN KEY(id_autor) REFERENCES autores(id)
)ENGINE = InnoDB;

A estrutura da tabela livros será alterada para aquela mostrada abaixo:

1
2
3
4
5
Field      Type                Null   Key    Default    Extra   
id         int(10) unsigned    NO     PRI    -          auto_increment   
titulo     varchar(45)         NO            -             
paginas    int(10) unsigned    NO            -               
id_autor   int(10) unsigned    NO     MUL    -
Veja que agora o campo id_autor foi sinalizado como MUL, ou seja, parte de um índice não único. Experimente agora inserir dados em ambas as tabelas e faça relacionamentos entre autores e livros. Tente excluir um autor que tenha um livro relacionado a ele. Imediatamente o MySQL abortará a operação com a seguinte mensagem de erro:

ErrorNr. 1451: Cannot delete or update a parent row: a foreign key constraint fails (`estudos/livros`, CONSTRAINT `livros_autores` FOREIGN KEY (`id_autor`) REFERENCES `autores` (`id`))

Em mais dicas desta seção você aprenderá a usar as cláusulas ON DELETE e ON UPDATE e as ações RESTRICT, SET NULL, CASCADE e NO ACTION. Todas estas cláusulas e ações são usadas para reforçar a integridade referencial de suas bases de dados.


MySQL ::: Dicas & Truques ::: Joins (Junções)

Como usar joins no MySQL

Quantidade de visualizações: 11073 vezes
As junções (joins) são ferramentas presentes na maioria dos bancos de dados que suportam SQL e são usadas quando precisamos recuperar dados de uma ou mais tabelas com base em suas relações lógicas. Desta forma, é possível combinar os registros de tais tabelas de forma a construir um "super-registro", que nos permitirá exibir relatórios mais elaborados.

Para o bom entendimento de junções, vamos considerar duas tabelas: filmes e generos. Aqui nós temos uma cardinalidade de 1 x N. Um filme possui um gênero, enquanto um gênero pode abranger vários filmes. Vamos começar criando estas duas tabelas (comece com a tabela generos, já que esta não depende da tabela de filmes):

Comando DLL CREATE TABLE para a tabela generos:

1
2
3
4
5
6
7
8
9
10
11
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
CREATE TABLE generos(
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nome VARCHAR(45) NOT NULL,
  PRIMARY KEY(id)
)
ENGINE = InnoDB;

Veja agora o comando SQL para a criação da tabela de filmes:

Comando DLL CREATE TABLE para a tabela filmes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
CREATE TABLE filmes(
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  titulo VARCHAR(45) NOT NULL,
  genero INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY(id),
  CONSTRAINT fk_filmes_generos FOREIGN KEY fk_filmes_generos(id)
    REFERENCES generos(id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = InnoDB;

Veja que a tabela filmes contém uma chave estrangeira referenciando a chave primária da tabela generos. Isso nos permite "atrelar" um filme ao seu gênero. Vá em frente e insira alguns dados em ambas as tabelas. Primeiro cadastre alguns gêneros e em seguida alguns filmes.

Vejamos agora a importância dos joins. Observe o resultado de um comando DML SELECT na tabela filmes:

1
2
3
4
5
6
7
8
9
10
11
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
SELECT * FROM filmes;
 
id  titulo          genero
1   EFEITO BORBOLETA    6
2   O PENTELHO          1
3   VIAGEM MALDITA  3

Nesta query o gênero é retornado como um valor inteiro, ou seja, o valor do campo id da tabela generos. Em muitos casos este não é o comportamento que queremos. Em vez do id do gênero nós gostaríamos de exibir seu nome. Isso pode ser conseguido da seguinte forma:

1
2
3
4
5
6
7
8
9
10
11
12
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
SELECT filmes.id, filmes.titulo, generos.nome FROM filmes,
generos WHERE filmes.genero = generos.id;
 
id  titulo          genero
1   EFEITO BORBOLETA    FICÇÃO
2   O PENTELHO          COMÉDIA
3   VIAGEM MALDITA  TERROR

Nesta query eu usei o nome completo da tabela antes do nome dos campos a serem retornados. Na prática, é comum darmos apelidos às tabelas. Veja:

1
2
3
4
5
6
7
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
SELECT f.id, f.titulo, g.nome FROM filmes f,
generos g WHERE f.genero = g.id;

Neste exemplo, não usamos as palavras-chaves INNER JOIN, LEFT JOIN, RIGHT JOIN, etc. A junção está "escondida" na cláusula SELECT. Esta técnica é conhecida como "junção implícita" ou "implicit join". Veja como o mesmo resultado pode ser obtido usando a junção INNER JOIN:

1
2
3
4
5
6
7
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
SELECT f.id, f.titulo, g.nome FROM filmes f INNER JOIN
generos g ON f.genero = g.id;

Veja minhas outras dicas sobre junções para aprender mais sobre INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN, FULL JOIN, etc.


Veja mais Dicas e truques de MySQL

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 31 usuários muito felizes estudando em nosso site.