Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP...
Transcript of Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP...
Projeto e Administração de Banco de Dados
Linguagens de Definição de Manipulação de Dados
Projeto e Manutenção de Banco de Dados 2
2
Objetivo
Nesta unidade você vai estudar sobre a linguagem SQL e os principais comandos para
definição e manipulação de dados.
Introdução
O SQL (Structured Query Language) é uma linguagem de consulta a banco de dados
criada na década de 70 na IBM, com base em conceitos da Álgebra relacional. Foi desenvolvida
para padronização dos sistemas gerenciadores de banco de dados relacionais existentes.
Não demorou muito e várias outras empresas estavam customizando o SQL e isso
começou a gerar grandes problemas. Foi quando a American National Standards Institute (ANSI)
em 1986 adaptou e criou um padrão para a linguagem SQL. Por esse motivo é comum vermos
falar que um comando é do padrão ANSI, ou seja, ele é “homologado” por este instituto. Ao longo
do tempo o SQL foi revisto (1992, 1999, 2003) para incrementar novas funcionalidades e, assim,
aumentar a capacidade e poder da mesma.
A importância da padronização do SQL para os SGBD’s, e mais especificamente para quem
trabalha com eles é enorme, tendo em vista que por ser um padrão para os bancos de dados
relacionais (o tipo de banco de dados mais usado atualmente) é possível, por exemplo, criar uma
consulta a um banco de dados Oracle e essa mesma consulta funcione no SQL Server ou no
PostgreSQL, entre outros.
Tal possibilidade permite, por exemplo, que desenvolvedores possam construir consultas
para a maioria dos casos sem precisar conhecer um determinado banco, ou seja, apenas
conhecendo a linguagem SQL é possível fazer uma consulta que funcione em vários bancos
diferentes. Isso é muito importante, pois evita sobrecarregar o DBA ou o AD com coisas simples,
sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.
Tal poder, capacidade e o mais importante: facilidade, fazem da linguagem SQL hoje um
dos maiores sucessos da TI, sendo mais notório quando olhamos para outras áreas que não tem
algum meio de padronização, forçando que uma pessoa precise de horas de estudo para fazer
coisas simples somente pelo fato de ter de fazê-lo em outra ferramenta.
Cada SGBD implementa acréscimos na linguagem SQL com o intuito de dar ainda mais
poder e consequentemente ter diferenciais com relação aos seus concorrentes. Desta forma,
iremos padronizar nossos estudos a partir de agora usando o MySQL.
Ah! Caso precise de ajuda, acesse os vídeos da disciplina! Preparamos alguns tutoriais e
explicações sobre esta aula!
Projeto e Manutenção de Banco de Dados 3
3
;
Comandos SQL
Os vários comandos do SQL foram organizados em categorias, para que nosso
aprendizado seja facilitado. Desta forma, podemos encontrar na literatura os seguintes conteúdos:
DDL - Data Definition Language (Linguagem de Definição de Dados) Permite ao desenvolvedor definir tabelas e elementos associados. Utiliza como comandos
principais o CREATE e o DROP, alguns sistemas de banco de dados utilizam o ALTER.
DML - Data Manipulation Language (Linguagem de Manipulação de Dados) É utilizado para realizar inclusões, consultas, exclusões e alterações de dados. Utiliza os
comandos INSERT, SELECT, UPDATE e DELETE.
DCL - Data Control Language (Linguagem de Controle de Dados) Controla os aspectos de autorização de dados e a utilização de licenças por usuários. Os
principais comandos são GRANT e REVOKE
DTL - Data Transaction Language (Linguagem de Transação de Dados) Utilizado pelos desenvolvedores em transações. Os principais comandos são COMMIT e
ROLLBACK
DQL - Data Query Language (Linguagem de Consulta de Dados) O mais importante dentre estes, pois consultas são realizadas a todo instante. O comando
que é utilizado pelo DQL é o SELECT. Coloquei o SELECT também em DML pois algumas
literaturas constam que SELECT também é DML (concordo em partes).
Em nossa disciplina, daremos um foco especial nos comandos DML, DDL e DQL. Nesta
aula, em específico, estudaremos os comandos DDL e DML usados no MySQL. Preparado? Então
vamos ao estudo!
Projeto e Manutenção de Banco de Dados 4
4
Criação de Banco de Dados
Agora que você está pronto para começar com os códigos SQL! O primeiro comando que
vamos estudar é o comando CREATE DATABASE (Criar banco de dados). Para exemplificar seu
uso, vamos mostrar a criação de um banco de dados chamado biblioteca. Veja como:
CREATE DATABASE biblioteca;
Isto é o suficiente para criar um banco de dados no MySQL. Experimente criar um outro por
conta própria. Se quiser ver a relação dos bancos de dados criados use SHOW:
SHOW DATABASES;
Só pra lembrar, os comandos MySQL devem terminar sempre com “;” no final. Caso deseje
remover um banco de dados, usamos o comando DROP. Mas cuidado, este comando não tem
volta, é irreversível. Tenha cuidado com o que vai fazer. Veja seu uso:
DROP DATABASE biblioteca;
Criação de Tabelas
O próximo passo, após criar o seu banco de dados, é criar tabelas. Antes de efetuar
qualquer comando de criação de tabelas vamos informar ao SGBD que desejamos usar um banco
específico. Trata-se do comando USE <nome do banco>. Veja o exemplo:
USE biblioteca;
O SGDB só mantém ativo um banco de cada vez, então, sempre que quiser executar um
comando em outro banco, será necessário “usar” este antes de rodar o código!
Ok, agora que já estamos no banco correto (no Workbench, observe que o nome dele ficará
negrito na lista ao lado – caso não esteja, clique no botão de atualizar), vamos aos comandos de
criação de tabelas. A sintaxe padrão é esta abaixo. Observe que os [colchetes] representam
valores opcionais:
CREATE TABLE nome_tabela
(
coluna1 tipo [not null] [auto_increment] PRIMARY KEY,
coluna2 tipo [not null],
...
colunaN tipo [not null] [REFERENCES tabela_referenciada (campo_referenciado)]
);
Projeto e Manutenção de Banco de Dados 5
5
Veja descrição dos principais comandos:
NOT NULL – esta coluna não pode ser nula, seu preenchimento é obrigatório
AUTO_INCREMENT – esta coluna ganhará numeração automática, para cada novo
registro. Não será necessário preencher este campo (o SGBD vai administrá-lo)
PRIMARY KEY – chave primária da tabela (antigo “atributo determinante”)
REFERENCES – esta coluna faz referência a outra, de outra tabela. Ocorre sempre
que esta coluna surgiu fruto de uma decomposição de 1:N (chave estrangeira)
Outra coisa importante é, desde já, conhecer os tipos de dados possíveis. Isto já está
definido no modelo físico, mas vamos relembrar aqui os principais tipos de dados no MySQL:
Tipo Descrição
VARCHAR(50) Texto de tamanho variável (50 caracteres)
TEXT Texto muito longo (tamanho máximo de 2 gigabytes!)
INT Número inteiro de 4 bits (limite: 2.147.483.647)
DECIMAL(8,2) Número real de tamanho configurável (8 dígitos totais, sendo 2 deles
para casas decimais). Ou seja, neste caso serão 6 dígitos antes e 2
depois da casa decimal.
DATE Datas em qualquer época
TIMESTAMP Data, hora e milésimos de segundo de datas que ocorreram depois de
01/01/1970. Não pode ser usado para data de nascimento, mas é útil
para registrar ocorrências do dia a dia da empresa.
Vamos ver um exemplo real? Vamos criar uma tabela para clientes. Esta tabela possui 3
colunas, sendo que uma delas (CLI_BAI_CODIGO) é uma chave estrangeira que armazena o
código do bairro de cada cliente (qual bairro o cliente mora). Veja abaixo:
CREATE TABLE TB_CLIENTES
(
CLI_CODIGO INT NOT NULL auto_increment PRIMARY KEY,
CLI_NOME VARCHAR(30) NOT NULL,
CLI_BAI_CODIGO INT REFERENCES TB_BAIRROS(BAI_CODIGO)
);
Caso você necessite criar uma chave primária dupla em alguma tabela, basta declarar o
comando PRIMARY KEY apenas na última linha, como no exemplo a seguir:
CREATE TABLE nome_tabela
(
coluna1 tipo [not null],
coluna2 tipo [not null],
...
Projeto e Manutenção de Banco de Dados 6
6
colunaN tipo [not null],
PRIMARY KEY (coluna1, coluna2)
);
Que tal um exemplo prático? Vamos ver o exemplo de um cadastro de carros (em uma loja
de carros). O projetista deste banco criou três tabelas, uma para os carros, uma para as marcas
e uma para os estados e de conservação. As tabelas de marcas e estados de conservação são
independentes, porém perceba que a de carros não. Ao cadastrar um carro eu sempre vou ter que
informar a marca e qual o estado de conservação!
O exemplo a única regrar neste caso é lembrar que devemos criar primeiramente as tabelas
independentes, e só então as tabelas que dependem das anteriores! Neste caso, criamos primeiro
Marcas e Estados de conservação para só então criar a tabela de carros! Veja o exemplo de
código abaixo, com a resposta para o modelo acima:
create database DB_AUTO;
use DB_AUTO;
create table TB_MARCAS (
MAR_CODIGO INT auto_increment PRIMARY KEY,
MAR_MARCA VARCHAR(50) NOT NULL
);
create table TB_ESTADOS_CONSERV (
EST_CODIGO INT auto_increment PRIMARY KEY,
EST_ESTADO VARCHAR(50) NOT NULL
);
create table TB_CARROS (
CAR_CODIGO INT auto_increment PRIMARY KEY,
CAR_PLACA VARCHAR(8) NOT NULL,
CAR_ANO INT NOT NULL,
CAR_EST_CODIGO INT NOT NULL REFERENCES TB_ESTADOS_CONSERV(EST_CODIGO),
CAR_MAR_CODIGO INT NOT NULL REFERENCES TB_MARCAS(MAR_CODIGO),
);
Projeto e Manutenção de Banco de Dados 7
7
Inserção de dados em uma tabela
Uma vez criada a estrutura, através dos comandos DDL (CREATE, DROP e USE),
podemos inserir os dados do nosso banco. Para inserir dados, usaremos o comando INSERT mas
lembro de antes de usar o comando INSERT, não esqueça de estar usando (USE) o banco correto.
A sintaxe padrão do comando é:
INSERT INTO TABELA
( CAMPO 1, CAMPO 2, CAMPO 3, CAMPO N)
VALUES
( VALOR 1, VALOR 2, VALOR 3, VALOR N)
Observe atentamente que para cada campo (no primeiro parêntesis), temos um valor
específico. Olhe o exemplo abaixo:
INSERT INTO TB_CLIENTES
( CLI_NOME, CLI_DATANASC, CLI_IDADE, CLI_BAI_CODIGO)
VALUES
( ‘Ari’, ’2013-12-31’, 33, 2 );
Observe algumas regras de funcionamento:
Não se deve informar no INSERT os campos AUTO_INCREMENT, pois a
numeração é gerada automaticamente. Nós não podemos informa-los, para não
causar conflito de numeração!
Campos de texto (VARCHAR(), TEXT) e de data (DATE, TIMESTAMP) devem ser
informados entre ‘aspas simples’.
Campos numéricos (INT, DECIMAL()) devem ser informados sem aspas
Casas decimais devem ser registradas com ponto (ex.: 7.5 ou 8.8 ou 10000.01)
Inserção de Mais de uma linha:
INSERT INTO TB_ANIMAIS
(ANI_NOME, ANI_IDADE, ANI_CLI_CODIGO)
VALUES
(‘Fifi’, 3, 15),
(‘Rex’, 5, 3),
(‘Pulguento’, 2, 15);
Testando itens inseridos
Para visualizar os dados inseridos em uma tabela, usamos o comando SELECT, que
estudaremos nas próximas aulas. Por agora, usaremos a seguinte sintaxe básica:
SELECT * FROM TABELA
Projeto e Manutenção de Banco de Dados 8
8
Exemplo:
SELECT * FROM TB_CLIENTES;
Apagando dados de uma tabela
As vezes precisamos de um código para apagar registros antigos ou errados, como por
exemplo, apagar um cliente que foi cadastrado em duplicidade. Mas atenção: Nem todos os
registros poderão ser apagados, pois eles já podem estar sendo referenciados. Por exemplo: não
é possível apagar um bairro caso já existam clientes cadastrados nele!
Não podemos esquecer de delimitar quais dados serão excluídos, pois poderemos causar
problemas no banco. Veja a sintaxe seguir:
DELETE FROM tabela WHERE condição
Veja os exemplos abaixo para melhor compreender os conteúdos:
Apagar o cliente número 3241:
DELETE FROM TB_CLIENTES WHERE CLI_CODIGO = 3241
Apagar todos os clientes do bairro Nova Parnamirim que tenham menos de 18 anos:
DELETE FROM TB_CLIENTES WHERE CLI_BAI_CODIGO = 3 and CLI_IDADE < 18
Atualizando registros do banco de dados
O UPDATE serve para atualizar um ou mais registros do banco de dados. Ou seja, caso
você verifique algum nome errado, endereço desatualizado, ou qualquer informação que precise
ser alterada!
Não podemos esquecer de delimitar bem quais dados serão alterados, pois poderemos
causar problemas no banco. Veja abaixo a sintaxe do comando:
UPDATE tabela
SET campo1 = 'valor1',
[campo2 = 'valor2',
campo3 = 'valor3‘]
WHERE condição
Projeto e Manutenção de Banco de Dados 9
9
Veja agora alguns exemplos de comando UPDATE para esclarecer melhor suas dúvidas:
Atualize o nome do cliente de código 234:
UPDATE TB_CLIENTES SET CLI_NOME = ‘João’ WHERE CLI_CODIGO = 234
Atualize a função e a idade do funcionário Ari:
UPDATE TB_FUNCIONARIOS SET CLI_FUNCAO = ‘Atendente’, CLI_IDADE=33 WHERE
CLI_NOME = ‘Ari’
Atualize o limite de todos os usuários que moram no bairro 33
UPDATE TB_USUARIOS SET USU_LIMITE = 2000, USU_TOTAL = 0 WHERE
USU_BAI_CODIGO = 33
Atualize a categoria dos filmes anteriores a 2005 para catálogo (código 3)
UPDATE TB_FILMES SET FIL_CAT_CODIGO = 3 WHERE FIL_ANO <= 2005
Projeto e Manutenção de Banco de Dados 10
10
Conteúdo complementar
Caso deseje mais conteúdo complementar sobre estes assuntos, recomendamos alguns tutoriais e blogs feitos
por usuários, com mas exemplos sobre estes códigos! Veja alguns deles:
http://www.rlsystem.com.br/outros/noticia/select-insert-delete-update-mysql/
http://www.1keydata.com/pt/sql/sql-update.php
http://www.telecentros.sp.gov.br/saber/apostilas/antigas/apostila_sql.pdf
Projeto e Manutenção de Banco de Dados 11
11
Bibliografia
[1] O que é SQL. <https://trocandoideiasti.wordpress.com/2012/01/27/o-que-e-sql-e-qual-sua-importancia/>. Acessado em julho de 2015.
[2] SQL e o que é DML. <http://hashtageek.blogspot.com.br/2011/07/sql-e-o-que-e-dml-ddl-dcl-dtl-e-dql.html>. Acessado em julho de 2015.