Thanks to visit codestin.com
Credit goes to pt.scribd.com

0% acharam este documento útil (0 voto)
15 visualizações44 páginas

Tutorial MYSQL

O documento fornece um tutorial sobre MySQL, abordando sua história, características e vantagens da linguagem SQL. Destaca a evolução do SQL desde os anos 70, a popularização do MySQL como software livre e suas funcionalidades robustas, como portabilidade e segurança. Além disso, o texto orienta sobre a instalação do MySQL e do Workbench, uma IDE para facilitar o uso do banco de dados.

Enviado por

guimoalonso
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
15 visualizações44 páginas

Tutorial MYSQL

O documento fornece um tutorial sobre MySQL, abordando sua história, características e vantagens da linguagem SQL. Destaca a evolução do SQL desde os anos 70, a popularização do MySQL como software livre e suas funcionalidades robustas, como portabilidade e segurança. Além disso, o texto orienta sobre a instalação do MySQL e do Workbench, uma IDE para facilitar o uso do banco de dados.

Enviado por

guimoalonso
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 44

Tutorial MYSQL

Histórico

A linguagem SQL foi desenvolvida no começo dos anos 70, na cidade de São
José, Califórnia, em um projeto chamado System R da IBM, do inglês International
Business Machines, cujo objetivo era comprovar a viabilidade da implementação de um
modelo relacional, que um estudioso chamado Codd estava propondo.

Esse estudioso elaborou uma forma estruturada de realizar consultas nos bancos
de dados que estavam surgindo, chamados “bancos de dados relacionais”.

Naquela época, os bancos de dados ainda não possuíam relacionamento entre as


tabelas nas quais os dados eram armazenados. Era a categoria de banco de dados mais
antigo, a sequencial, que efetuava a consulta dos registros de maneira sequencial, ou
seja, um após o outro.

Com o surgimento dos bancos de dados relacionais (ou DBMS, do inglês, Data
Base Management System, “Sistema de Gerenciamento de Banco de Dados"), Codd
considerou criar uma linguagem que facilitasse a extração e manipulação de dados,
além da manipulação das estruturas desse banco aproveitando a característica de
relacionamento entre eles.

Porém, não era apenas a IBM que estava trabalhando com os novos bancos de
dados relacionais. Por volta dos anos 80, a Oracle, dentre outras empresas, também
estava buscando maneiras mais fáceis de manipular essas novas estruturas.

Mais para o final dos anos 80 e início dos 90, o órgão americano, o ANSI (da
sigla American National Standard Institute), estabeleceu alguns padrões para as
consultas dos bancos de dados relacionais.

Então, foi criada a linguagem SQL, do inglês Structured English Query


Language, que traduzindo seria algo como “linguagem de consulta estruturada em
inglês”. No inglês, geralmente, é pronunciado SEQUEL e não SQL, soletrando as letras
- diferentemente do português, em que normalmente lemos como “ésse quê éle”.

O principal objetivo da linguagem SQL é padronizar a maneira como os


registros são consultados nos bancos de dados relacionais. Atualmente, os bancos
relacionais aderem ao padrão SQL, que vai além das consultas: é usado também, na
criação, alteração, estruturação e manipulação do banco de dados, além da maneira
como banco de dados interage com a segurança, entre outros usos.

Entre as vantagens do banco de dados relacional, a primeira é que essa


padronização utilizando a linguagem SQL tem um custo reduzido do aprendizado. Por
exemplo, o profissional com conhecimento sobre o SQL da Oracle conseguirá
manipular facilmente o MySQL ou SQL Server da Microsoft. Por mais que existam
diferenças - principalmente na parte de funções -, a adaptação do profissional não é uma
questão complicada.
Outra vantagem, é a portabilidade. Por exemplo, é mais simples migrar sistemas
que usam Oracle para SQL Server ou para MySQL, ou vice-versa. Lembrando que
quanto mais for utilizado o SQL Standard definido pelo ANSI, mais fácil será essa
portabilidade no futuro. Então, é útil evitar as funções específicas do banco de dados e
permitir que o programa realize essa tarefa.

Já a longevidade é a garantia de que os seus relatórios ou processos utilizando o


SQL irão funcionar por um longo período, já que estarão sempre adaptados ao padrão
ANSI. Ou seja, ao efetuar um upgrade de banco de dados o seu sistema não ficará fora
de serviço.

Outro benefício é a comunicação. O fato da maioria utilizar SQL permite a


facilidade de comunicação entre os sistemas. Como, por exemplo, processos de ETL,
(extract, transform and load), ou de integração entre sistemas que ficam mais simples
de serem desenvolvidos, já que ambos utilizam o SQL padrão.

Por último temos a liberdade de escolha. Por existir um padrão de linguagem, se


a empresa for optar pelo uso de um banco de dados relacional não ficará presa à
linguagem de comunicação, por exemplo, já que são bem semelhantes. Ao tomar essa
decisão, a corporação irá utilizar outros critérios de escolha, como performance,
hardware, custo, entre outros.

Contudo, essa padronização não possui apenas vantagens, há algumas


desvantagens - ainda que poucas. A primeira é a privação da criatividade. O SQL
possui limitações que podem não atender às novas demandas no mercado na linguagem
SQL, principalmente com o surgimento das redes sociais e dos enormes volumes de
dados, o chamado big data. Ou seja, há uma carência nas coletas de dados que estão
trafegando na internet.

Para tal, estão surgindo outros bancos que usam padrões diferentes dos bancos
de dados relacionais, o chamado NoSQL. Estes atendem de forma mais eficiente as
demandas de tabelas de big data , como no caso das redes sociais. Lembrando que
estamos nos referindo a estruturas que escapam do padrão ANSI e que, por isso, exigem
um aprendizado mais específico.

Outro ponto é a escassez de estruturação da linguagem SQL, já que ela não


possui if, for e when, isto é, comandos condicionais como as demais linguagens de
programação.

Para conseguir suprir essa carência da estruturação, os bancos de dados


relacionais da Oracle, SQL e MySQL criaram suas linguagens próprias internas que
realizam esse conjunto de estruturação usando a linguagem SQL, mas que acaba se
afastando um pouco do padrão ANSI.

Falando um pouco sobre o padrão ANSI, este possui três grupos de comandos. O
primeiro, é o DDLs, ou Data Definition Language (linguagem de definição de dados).
Os DDLs são a parte da linguagem SQL que permite a manipulação das estruturas do
banco de dados. Como, por exemplo, criar um banco, tabelas, índices, apagar as tabelas
e alterar a política de crescimento de índice. Ou seja, os comandos que envolvem a
estrutura do banco de dados relacionais são os comandos do tipo DDL.
O segundo grupo de comandos são os chamados DML, ou Data Manipulation
Language (linguagem de manipulação de dados). Esse grupo visa gerenciar os dados:
incluindo, alterando e excluindo informações nas estruturas do banco, como as tabelas.
Além disso, realizam as consultas, buscam as informações das estruturas e exibem para
o usuário.

Finalmente, chegamos nos comandos DCL, ou Data Control Language


("linguagem de controle de dados"). Este grupo nos permite administrar o banco de
dados como, por exemplo, o controle de acesso, o gerenciamento do usuário, gerenciar
o que cada usuário(a) pode ou não visualizar, gerenciar o banco ao nível de estrutura
(como a política de crescimento, como e onde será armazenado no disco), administrar
os processos, saber quantos processos estão sendo executados, controle de log e assim
por diante.

MYSQL

Agora, iremos entender sobre a história do MySQL e mencionar algumas de


suas características.

Já conversamos um pouco sobre a história do SQL, quando os bancos relacionais


estavam começando a ser popularizados. À época, três desenvolvedores, o David
Axmark, Allan Larsson e Michael Widenius, buscaram elaborar uma interface SQL que
fosse compatível com o que estava surgindo no mercado de banco de dados.

No início, eles utilizaram APIs de terceiros para efetuar os comandos SQL que
buscavam informações de alguns outros bancos de dados de mercado. Porém, não
obtiveram um retorno satisfatório e, por esse motivo, começaram a desenvolver sua
própria API de consulta - e não apenas isso, também o seu próprio banco de dados,
utilizando a linguagem C++.

Foi a partir disso que se iniciou o projeto MySQL. Ele se tornou bastante
popular, primeiramente por ser apresentado como um software livre (open source), isto
é, a comunidade teria acesso ao código-fonte para realizar alterações e contribuir com
melhorias para o banco de dados. Além disso, se mostrou um banco de dados bastante
ágil para a época, mais rápido que os concorrentes, além de apresentar um excelente
mecanismo de multitarefas e de multiusuário.

Com isso, o MySQL mostrou que o seu servidor poderia ser usado e suportava
bem a escalabilidade robusta em missão crítica, como, por exemplo, em um banco que
nunca pode parar a operação dos serviços prestados.

Missão crítica: todo sistema tecnológico fundamental para que os serviços de


uma empresa continuem operando sem interrupções.

Como consequência, o MySQL se popularizou como software livre, inclusive de


modo corporativo. No ano de 2008, o MySQL AB, empresa que gerenciava o código
desse banco de dados, foi comprada por um bilhão de dólares por uma empresa
chamada Sun Microsystems, uma empresa grande que a princípio atuava na área de
hardware e depois começou a entrar para o ramo de software. Essa companhia também
era responsável pela criação do Java.
Em 2009, após um ano da compra do MySQL, a Sun Microsystems foi comprada
pela Oracle, que passou a ter propriedade sobre todos os produtos. Por esse motivo, a
Oracle é hoje dona do Java e do MySQL. Houve uma grande movimentação no
mercado naquele tempo, já que a Oracle possuía o seu banco de dados relacional
robusto e o MySQL estava se mostrando um concorrente à altura.

Quando o MySQL foi vendido, a comunidade open source criou outro banco de
dados, o MariaDB, que se tornou o sucessor em código aberto do MySQL.

Devido à sua popularidade, sendo uma opção de baixo custo para as empresas do
mercado corporativo e de mercado online (que vinha crescendo bastante a partir dos
2009 e 2010), a Oracle manteve o desenvolvimento do MySQL.

A Oracle permitiu que os usuários pudessem escolher entre usar o programa


como produto open source, sob os termos da licença GNU (GNU's Not Unix!) ou
comprar a licença padrão comercial do MySQL. Para esse último caso, a Oracle
oferecia algumas vantagens para as empresas que comprassem o MySQL de forma
corporativa, como suporte mais rápido e acesso à alguma documentação específica.

Porém, a licença oferecida de forma aberta ainda mantém a eficiência e


características apresentadas antes do MySQL ser comprado por essas empresas gigantes
da área de tecnologia.

Lembrando que o MySQL é um banco de dados relacional e compatível com a


linguagem SQL. Por isso, vamos aprender nesse treinamento o SQL utilizando o
MySQL.

O servidor do MySQL é robusto até certo ponto, já que deriva de características


de multiacesso, integridade de dados, efetua o relacionamento entre tabelas, trabalha a
concorrência quando vários usuários tentam acessar o mesmo dado na mesma tabela,
realiza o controle de transações, entre outros processos. Essa robustez é uma
característica importante no que diz respeito ao servidor do MySQL.

Outro aspecto importante é a portabilidade do banco de dados. O MySQL pode


ser transacionado entre diversos sistemas. Isso significa que consigo desenvolver o
banco de dados MySQL em Windows e posteriormente utilizar no Linux ou Unix,
sendo assim, interplataforma.

Ademais, o banco MySQL provém várias APIs que permitem acessar os dados
do MySQL usando .Net, Java, Python, PHP, JavaScript e JQuery, por exemplo. Isto é,
as linguagens de programação que são mais usadas no mercado possuem APIs nativas
para acesso ao MySQL.

Outro atributo importante é o multithreads. O MySQL usa uma programação de


threads utilizando diretamente o Kernel do sistema operacional, permitindo aumentar a
velocidade de transações, além de facilitar a integração da ferramenta com hardwares,
possibilitando a escalabilidade da performance. Isto quer dizer que, caso tenha um
MySQL usando um servidor com determinado número de CPUs, é possível acrescentar
mais CPUs que o banco de dados se adapta usando o máximo do hardware disponível.
O banco de dados MySQL atua com diversas formas de armazenamento que
se adaptam às características das suas necessidades. Por exemplo, algumas formas
priorizam a velocidade, enquanto outras o alto volume de armazenamento, tudo
dependendo do objetivo pelo qual você utiliza o MySQL. Discutiremos mais sobre isso
em treinamentos futuros, quando abordarmos a parte de administração.

A velocidade é outro aspecto fundamental. O MySQL é considerado um dos


bancos mais rápidos do mercado, sobretudo quando são utilizadas funcionalidades
ligadas à internet. Como exemplo, podemos citar sites de e-commerce e de aplicações
de internet, já que as nuvens da Amazon, do Google e da Microsoft (Azure)
disponibilizam instâncias de MySQL com uma alta escalabilidade.

Já sobre segurança, o banco de dados MySQL possui internamente diversos


mecanismos de segurança, o que o torna bastante seguro para o mercado. Além disso,
permite a segregação dos dados por usuários de acesso, isto é, a pessoa possui acesso
somente ao que lhe for permitido.

O MySQL também permite o armazenamento de uma quantidade enorme de


dados, tornando a sua capacidade alta, a depender das formas de armazenamento. Se for
escolhida uma forma que prioriza o volume de dados, há um limite hoje de até 65 mil
terabytes de dados armazenados. Claro, recuperar e manipular esse volume de
informação pode ser um pouco difícil e depender de muito hardware. A maioria das
aplicações corporativas não precisam desse tamanho todo de armazenamento para
trabalharem.

Já referente à aplicabilidade, o MySQL não se aplica somente a utilidades de


internet - apesar de ser preferido por desenvolvedores web -, mas também aplicações de
desktop ou corporativas, essas chamadas de On Premises, nas quais o banco de dados é
instalado no próprio servidor da empresa. Esses bancos possuem o que chamamos
ODBCs (Open Database Connectivity, comum em bancos baseados em Windows) ou
JDBCs (Java Database Connectivity, comum em bancos baseados em Java), que
permitem realizar acessos rápidos ao banco de dados MySQL em aplicações desktop.

Finalmente, falaremos um pouco sobre o log. No MySQL há um forte


gerenciamento de log, que registra tudo o que fazemos no banco. Isso é um ponto
interessante quando é necessário realizar uma recuperação de dados ou se for preciso
fazer o que é chamado réplica de servidores, técnica bastante usada quando temos um
servidor chamado master e outro slave, existindo uma sincronização de dados entre eles.

Por esse motivo, é um dos bancos de dados mais usados em nuvem, já que esse
tipo de banco possui diversas replicações em diferentes lugares do planeta para que,
caso um CPD (Centro de Processamento de Dados) caia, outro continue operando e a
aplicação siga tendo alta disponibilidade de acesso.

Isso é um pouco da história e características do banco MySQL, que vamos usar


nesse treinamento para mostrar como funciona a linguagem SQL.
INSTALAÇÃO

Vamos então fazer a instalação do MySQL. É possível realizar essa instalação


tanto no sistema operacional Windows quanto no Linux. No caso, irei utilizar a primeira
opção.

Iremos também, instalar a IDE chamada Workbench, um programa que permite a


visualização dos objetos do banco de uma maneira mais gráfica. Quando estamos
trabalhando com o MySQL, utilizamos linhas de comando. Mas, com uma IDE é
possível fazer várias consultas na mesma tela e configurar as tabelas de forma gráfica.

O WorkBench é uma IDE fornecida pelo próprio MySQL, há outras IDEs no


mercado, mas para esse curso usaremos a que o banco de dados proporciona. Inclusive,
o pacote de instalação já vem com a IDE, e não apenas o servidor MySQL.

Vamos iniciar a instalação. Abriremos no navegador a página SQL Downloads e


procuraremos a opção gratuita que é a MySQL Community Edition (GPL) Downloads.
Em seguida, selecionamos o botão de download do MySQL Installer ao lado de mysql-
intaller-web-community-8.0.15.0.msi que é a versão mais recente no momento da
gravação do curso.

Selecionando download, será pedido um login no site da Oracle, sendo uma


etapa fundamental para baixarmos e/ou comprarmos produtos da Oracle. Caso ainda não
possua cadastro, basta selecionar o botão de "Sign Up", se já tiver é só escolher a opção
"Login".

No caso, vamos selecionar o botão de "Login", para quem já possui cadastro,


inserindo o usuário e senha e selecionando "Iniciar Sessão" e, em seguida, "Download
Now".

Esse download é considerado um arquivo pequeno, já que depois tudo que


instalarmos, ele fará o download da internet no momento da instalação.

Selecionamos o arquivo baixado. Irá aparecer uma escolha opcional,


perguntando se queremos verificar se há upgrade a ser realizado, para fazer a instalação
não somente da versão que escolhemos mas também dos upgrades mais atuais. Vamos
selecionar o botão "Sim" e aguardar o download do instalador com os upgrades.
Após aguardar o carregamento, iniciaremos a instalação, primeiramente,
aceitando os termos da licença selecionando "I accept the lisense terms" e, logo após,
"Next". Na tela seguinte, escolheremos a opção "Developer Default", que serve para
instalar o servidor e conectores necessários para o funcionamento do MySQL, e mais
uma vez clicaremos em "Next"

Na próxima tela nos pergunta se queremos realizar um conector com Python. Por
não ser o nosso objetivo, clicaremos em "Next" e, em seguida, no botão "Yes". Na
próxima página nos é apresentado tudo o que será baixado, perceba que um dos itens é o
Workbench, a IDE do MySQL, selecione "Execute" e, a partir disso, se iniciam os
downloads dos módulos que serão utilizados para a instalação.

Após o término do download dos componentes, clicaremos em "Next" para dar


continuidade na instalação. Selecionamos "Next" novamente e, nesta página há duas
categorias de estrutura de bancos de dados que trabalharemos, vamos usar a
"Standalone MySQL Server / Classic MySQL Replication". Mais uma vez clicamos em
"Next", note que nesta tela são as configurações de porta e a forma de comunicação
entre cliente e servidor, vamos manter as configurações já selecionadas e, outra vez,
selecionar "Next".

Já na próxima tela é como vamos usar a autentificação, há dois tipos: a primeira


é a senha criptografada e a outra usa a segurança do MySQL mais antigo. Manteremos a
primeira opção, Use Strong ´Password Encryption for Authentication, selecionada e
mais uma vez pressionamos o botão "Next".

Na próxima página será solicitado a criação de uma senha do usuário root, isto
é, o usuário padrão do banco de dados MySQL. Não iremos criar outros usuários, na
parte "MySQL User Accounts", já que estaremos utilizando o padrão, vamos usar para
acessar o banco MySQL e realizar os exercícios práticos.

Novamente, selecionaremos "Next", nesta página temos o nome do serviço, já


que o MySQL é um serviço do Windows e será sempre inicializado quando a máquina
for efetuar o boot, isto é, quando a máquina voltar a funcionar o banco de dados retorna
junto. Na parte inferior encontramos qual usuário vai gerenciar o serviço, não vamos
alterar nada nessa parte. Na próxima tela é tudo o que o banco vai executar durante a
instalação, selecionaremos "Execute".

Com isso, ira iniciar a instalação, o banco de dados, o servidor, entre outras
instalações. Após o término, selecione "Finish" e em seguida "Next", para o banco
efetuar outras configurações, no momento não iremos alterar nada, selecione "Finish" e
"Next", novamente.

Na tela seguinte temos a conexão com o servidor, Connect To Server, vamos


inserir a senha do usuário root e selecionar "Check", aguarde aparecer a mensagem "All
conections succeeded", que significa que a conexão foi realizada com sucesso, selecione
"Next" e, logo após, "Execute", para executar a segunda parte da instalação.

Selecione "Finish", para o banco fazer novas configurações.Finalmente, ao


selecionarmos o último "Finish", será inicializado o Workbench, sendo a interface da
IDE que nos permite manipular o banco de dados MySQL.
Perceba que já foi criado uma conexão local da máquina de forma automática.
Em cada máquina há um servidor e um cliente, e o Workbench já vem com essa
conexão pré-configurada.

Selecionando a conexão local irá aparecer uma tela solicitando a senha criada
para o nosso usuário root, opte por selecionar "Save password in vaul" para salvar a
senha e pronto, estamos com o MySQL Workbench configurado e instalado.

Agora que finalizamos, podemos começar o nosso treinamento MySQL.


TREINAMENTO

O objetivo nesse treinamento, como já mencionado, é apresentar para o(a)


estudante o primeiro contato com a linguagem SQL.

Então, primeiramente, para compreender como o SQL funciona é preciso


entender como trabalha o banco de dados. Visto que a maneira que o banco de dados é
organizado está diretamente relacionado a forma que vamos criar os comandos SQL.
Sendo assim, considerado um pré-requisito entender como opera um banco de dados.

Lembrando que nesse treinamento estamos usando o MySQL para mostrar como
funciona a linguagem SQL, poderíamos utilizar Oracle ou SQL Server da Microsoft,
por exemplo. Mas como esse curso faz parte de uma carreira mais completa de MySQL,
utilizaremos esse banco de dados.

Vamos entender como é organizado o banco de dados. Os conceitos que vou


apresentar podem até serem aplicados em outros bancos, como o da Oracle e SQL
Server.

Conheceremos agora um pouco mais sobre esses conceitos.

O banco de dados é um repositório que armazena dados que podem ser


consultados, fica armazenado no disco rígido, como o SSD ou HDD, de outro modo,
ocupa espaço no disco como, por exemplo, um arquivo word ou uma planilha de Excel.
Ou seja, conseguimos no ambiente ir para um diretório específico e visualizar um ou
mais arquivos que representam o banco de dados. Percebe-se, com isso, que a entidade
maior é o próprio banco de dados.

No banco de dados há diversas entidades, estruturas que organizam como os


dados são armazenados. Uma das principais entidades é a tabela, podendo conter várias
no mesmo banco de dados.

Uma tabela, fazendo uma analogia, é como uma planilha no Excel — que há
colunas e linhas. Mas, diferente da planilha de Excel, que ao gerar uma nova
conseguimos visualizar uma série de colunas e linhas em branco, no momento de
criação da tabela é preciso já estabelecer as definições do que ela abrangerá.

Algumas dessas definições é a quantidade e categoria de cada campo. O campo


seria a coluna, então podemos ter, por exemplo, campos da categoria texto, número,
que podemos ter com casas decimais ou inteiros, lógico(verdadeiro ou falso), binário,
que há bites armazenados que podem representar uma imagem ou algum outro arquivo
diferente do formato texto e assim por diante. Portando, ao criar uma tabela, é
necessário já definir quantos e as categorias de cada coluna.

Os valores de uma mesma coluna não podem ser de grupos diferentes, isto é, se
o campo foi estabelecido como numérico, podemos apenas a armazenar números nesse
campo. Se incluirmos algo que fuja muito, tipo um texto, o banco de dados retorna erro.
Já as linhas das tabelas, são chamadas registros. Este, diferente dos campos,
possui número infinito - a depender do espaço em disco disponível para o banco de
dados expandir. Inclusive, ao gerar um banco de dados podemos determinar políticas de
crescimento ou o limite máximo que ele pode ampliar.

Outro conceito importante referente a tabela, é a chave primária (primary key).


No momento de criar uma tabela, não obrigatoriamente, podemos estabelecer uma
chave primária, isso significa que os valores de um campo específico não podem se
repetir em uma linha.

Por exemplo, vamos supor que a tabela seja a "tabela_cadastro_clientes" e temos


na primeira coluna o "CPF" dos clientes e na terceira o "Nome". Se escolhermos o CPF
como chave primária, isso quer dizer que não podemos ter dois registros (linhas) na
tabela que tenham os mesmos valores na coluna "CPF". Isso faz sentido, já que ninguém
possui CPF idênticos, já o nome é possível repetir, por não ser considerado chave
primária.

Já se tivermos uma chave primária composta, o que não pode repetir é a


combinação entre as colunas. Portando, chave primária são os valores de campos ou
combinação entre campos — chave primária composta — que não podem se repetir nos
registros da tabela.

No banco de dados podemos ter várias tabelas, cada uma possui fragmento da
informação armazenada, podendo essas tabelas se relacionarem através da chave
estrangeira (foreign key). Como na "tabela_cadastro_clientes" que um campo é o
"CPF" e o outro é "Nome" e na outra tabela que representa as vendas de produto para
cada cliente, "tabela_vendas", e nesta também temos o campo "CPF".

Ao criarmos uma chave estrangeira entre os campos "CPF" da "tabela_vendas" e


da "tabela_cadastro_clientes", isso significa que teremos uma ligação entre elas. Como
mencionado em vídeos anteriores, o SQL surgiu da necessidade de manipular e
armazenar dados em um banco de dados relacional, que possui relações entre as tabelas,
isto é, possuem chaves estrangeiras. Isso faz com o que a informação tenha integridade,
visto que não seria possível ter um cliente comprando um produto sem estar pré-
cadastrado na tabela de clientes.

Anteriormente aos bancos de dados relacionais, eram utilizados os


transacionais. Em outras palavras, não possuíam essa ligação entre as tabelas, podendo
assim, registrar o CPF de um cliente na "tabela_vendas" que não esteja,
necessariamente, pré-cadastrado na "tabela_cadastro_clientes". Isso gera um problema
de integridade do dado, por isso, os bancos de dados relacionais surgiram para melhorar
a qualidade da informação armazenada.

Nas tabelas também podemos encontrar os índices. Estes permitem encontrar


informações da tabela de maneira mais rápida. Como exemplo, vamos imaginar que
queremos obter todos os clientes que começam com o nome Victorino, se não tivermos
um índice, o banco de dados relacional terá de percorrer registro por registro até
encontrar o nome solicitado pela primeira vez e, após encontrar, informar e seguir
buscando até o término das linhas para verificar se há mais de um cliente com esse
nome.
Agora, se tivermos um índice para o campo "Nome" temos um algoritmo interno
- como se já estivesse ordenado alfabeticamente os elementos da coluna "Nome". Isto é,
já sabemos que o nome Victorino consta nos últimos registros com a inclusão do índice,
não precisando percorrer todas as linhas até encontrar o primeiro nome com a letra V.

O índice permite, neste caso, que a busca se inicie nas linhas que os nomes
começam com a letra V e a partir disso, procurar o nome Victorino, tornando a busca
mais rápida. Portanto, o índice serve para facilitar e agilizar a procura.

Quando temos uma chave estrangeira, automaticamente o banco de dados cria


índices nos campos que se interrelacionam, para que seja viável, por exemplo, ao
cadastrar um cliente na "tabela_vendas" o banco de dados, internamente, verifique se o
cliente consta na "tabela_cadastro_clientes" e para encontrar rápido é proveitoso que a
tabela original já possua índice.

Recapitulando, no banco de dados há diversas tabelas, composta por campos


(colunas) e registros (linhas), essas tabelas possuem chaves estrangeiras, primárias e
podem conter índices.

Já quando estamos nos referindo a esquemas (Schemas), é o conjunto de tabelas


que representam o mesmo assunto. As tabelas de esquemas diferentes podem se
relacionar, transformar em Schemas é apenas uma forma de agrupar as tabelas por tema,
sendo mais utilizado no sentido de organização.

O banco de dados possui também a chamada View (visão), um agrupamento de


tabelas. Vamos aprender mais adiante nesse curso sobre query (consulta), e essa
consulta pode me retornar não apenas as informações de uma determinada tabela, mas
de duas os mais através das chaves estrangeiras. Após conseguir unir duas ou mais
tabelas e gerar um resultado para essa consulta, podemos transformar-lá em uma view.

Isso significa que a view possui um comportamento similar a tabela, mas que
por trás dela já há uma consulta estabelecida com as regras de negócio para agrupar as
informações solicitadas.

Em SQL, tratamos as views como tabelas já existentes, contudo, na verdade, é


uma lógica por trás. Algumas views podem ter performances não muito ágeis caso seja
construída por comandos SQL muito custosos ou rebuscado.

Como já mencionado, temos no SQL comandos de consultas (queries) e ao


realizar essa consulta precisamos definir em quais tabelas gostaríamos de buscar essas
informações. Caso esses dados que queremos, esteja apenas em uma tabela, basta incluir
o nome dela. Já se essas informações estiverem em mais de uma tabela, será necessário
utilizar a cláusula Join.

O Join uni as tabelas através de um critério, ao elaborar essa consulta que junta
tabelas podemos definir filtros, tal como clientes apenas no sexo masculino e/ou que
moram apenas na região Sul. Essa consulta que aplicamos o filtro pode ser uma view.

Internamente, o banco de dados possuem as procedures. No começo desse


treinamento havia mencionado que a linguagem SQL não é estruturada, mas a partir
disso os estudiosos de banco de dados MySQL, Oracle e SQL Server criaram
linguagens que não estão mais no padrão ANSI, mas linguagens proprietárias que
permitem utilizar comando SQL para fazer algum tipo de lógica estruturada com if,
while, entre outros comandos de repetições, por exemplo. Como se tivéssemos um
programa em uma linguagem nativa do banco de dados utilizando comando SQL.

Nas procedures, podemos ter as funções. Estas são cálculos montados com
campos que podemos usar dentro de um comando de consulta. Podemos criar uma
função que facilite uma visualização ou contabilização e usa-lá para realizar as
consultas.

O próprio banco MySQL possui um catálogo de funções: como tirar espaços em


branco do registro, transformar letra maiúscula em minúscula, efetuar cálculos
complexos como de datas — quantos dias tem entre determinadas datas, entre outras
funções.

No banco de dados, também, temos o trigger. Este é um aviso programado caso


algo ocorra no banco de dados ou tabela. Como, se quisermos ser avisados caso alguém
realize alguma alteração ou delete informações nas tabelas. Este aviso poder ser uma
função, uma procedure ou um único comando SQL, que será executado quando a
condição da trigger for satisfeita.

Exemplificando, se tivermos duas tabelas "tabela_clientes" e a "tabela_taxas".


Todo cliente cadastrado é preciso ir à tabela taxas e criar uma taxa com o valor zero na
"tabela_taxas". Podemos ter uma trigger que toda vez que criado um cadastro na tabela
de cliente, irá à tabela de taxas inserir o código do cliente e mais uma taxa default
(padrão).

Com isso, estamos garantindo que ao incluir um novo cliente, ele(a) já terá um
valor de taxa, mesmo que seja zero. O trigger pode ser utilizado para diversas outras
situações no banco de dados.

Então, o banco de dados possui todos esses componentes: tabelas, views,


procedures e funções. Espero que esses conceitos sejam úteis para incentivar vocês a
conhecer mais sobre o que é um banco de dados.

Como o foco desse treinamento é conhecer um pouco como funciona o SQL,


instalamos com o MySQL uma interface gráfica chamada MySQL Workbench, que
vamos usar para aprender SQL.

Vamos compreender um pouco sobre o funcionamento do Workbench. Para abrir


clicaremos em "Windows" e no campo de busca escreveremos "Workbench", irá
aparecer MySQL Workbench 8.0 CE, versão mais atual durante a gravação do curso.

Selecionando essa opção, será mostrado a tela principal Welcome to MySQL


Workbench, que na parte inferior temos várias conexões disponíveis. Clicando no + ao
lado de "MySQL Connection" mostrará uma tela "Setup New Connection" em que é
possível configurar uma nova conexão. Isto é, o Workbench faz o papel do cliente e,
posso acessar com o mesmo Workbench diferentes servidores MySQL. Neste caso, já
estamos conectados no servidor MySQL da própria máquina.
Não vamos criar uma conexão, então clicaremos em "Cancel" na tela "Setup
New Connection". Vamos usar apenas a conexão criada durante a instalação para nos
conectar com o MySQL que está no nosso ambiente.

Iremos selecionar a conexão "Local instance MySQL80" e será aberta uma janela
inicial do MySQL Workbench. Clicaremos em "Schemas", nessa aba temos outros
bancos de dados, tais como sakila, world e sys. Os dois primeiros são bancos de dados
exemplos que o MySQL instala, já o sys é um banco de dados utilizado pelo sistema,
como o nome já diz.

Veremos mais para frente, talvez em outros treinamentos, que as configurações


internas do MySQL também são tabelas em bancos de dados internos - diferente dos
que vamos trabalhar.

Do lado esquerdo no banco de dados MySQL em world clique em "Tables"


(tabelas), note ser possível observar o cadastro das colunas, dos índices, das chaves
estrangeiras e triggers. Se selecionarmos os campos, por exemplo, conseguimos
visualizar o nome de cada coluna que compõe a tabela city.

Na área central da tela, que no momento está vazia, é o local que vamos digitar
nossos comandos SQL - consulta, inclusão, alteração de informação ou exclusão de
campos e/ou tabelas. Vamos analisar melhor mais para frente o que isso significa, mas
apenas exemplificando para facilitar a compreensão: insira no espaço em branco o
comando select * from city e em seguida dê um duplo clique no banco de dados
world para rodar, note que ficou em negrito (bold), isso quer dizer que os comandos
inseridos na área de código estão relacionados ao banco de dados selecionado.

select * from city. Neste comando estamos selecionando (select) todos os campos
(*) (asterisco) da tabela city.

É por esse motivo que o SQL surgiu do termo "linguagem estruturada em inglês", visto
que seus comandos são escritos nesse idioma.

 Select (selecionar)
 From (de)
 Em negrito são os componentes do banco de dados
 Em azul-claro são os comandos da linguagem SQL

Neste caso, select e from são comandos SQL, já (*) e city não. Isso está relacionado
com a seleção que estou fazendo.

Para executar a consulta, clique no ícone de raio na parte superior da área que
escrevemos o código, como resultado obtemos todas as informações da tabela, como as
colunas ("ID", "Name" (nome),"CountryCode" (código do país),"District"
(Distrito),"Population" (população)) e as linhas.

Tabela gerada:

Para melhorar visualização, alguns elementos da tabela foram omitidos.


Id Name CountryCode District Population
1 Kabul AFG Kabol 1780000
2 Qandahar AFG Qandahar 2375500
3 Herat AFG Herat 186800
4 Mazar-e-Sharif AFG Balkh 127800
5 Amsterdam NLD Noord-Holland 731200

Acrescentando o comando select * from country na interface, é preciso


inserir um ponto e vírgula (;) ao final dos comandos para que o programa identifique o
encerramento de um e execute o próximo.

SELECT * FROM CITY;


SELECT * FROM COUNTRY;

Clicando para executar os comandos novamente, temos como resultado duas


abas. A primeira aba é a City 2, da tabela gerada anteriormente e a outra Country 3 é
o retorno do segundo comando da tabela country, com todos os seus elementos.

Se tirarmos o ponto e vírgula do final do primeiro comando, a própria IDE nos


retorna um erro, com um X (xis) em vermelho, informando haver um erro na segunda
linha. Passando o mouse por cima desse aviso, será mostrado o motivo, no caso aparece
a mensagem ""SELECT" is not valid at this position, expecting : EOF,
';'", isto é, a seleção é inválida nesta posição e é esperado um ponto e vírgula ou um
EOF (End-of-file), em português, fim de arquivo.

Se tentarmos rodar esse comando com o aviso, será mostrado o erro no lugar do
retorno da tabela esperada, no caso aparecerá a seguinte mensagem select * from
city select * from country. Porém, há uma forma de executar apenas um dos
comandos, selecionando com o mouse somente a linha que quero executar e,
novamente, clicar no ícone de raio para rodar. Isso ocorre pelo fato do Workbench
entender que deve executar apenas o comando selecionado e ignorar os outros. Por isso,
não é necessário colocar o ponto e vírgula ao usar essa forma de execução.

Com a finalidade de explorar um pouco mais com vocês essa área, vamos inserir
o nome errado da coluna com o comando select * from countryxxx;, perceba que
quando erramos nomes que não estão relacionadas com as palavras chaves do SQL,
como o nome da tabela, a IDE não consegue identificar que esse nome não existe.
Retornando o erro Erro code: 1146. Table 'world.countryxxx'doesn't exist
apenas após a execução do código, mas note que o primeiro comando segue
funcionando normalmente.

Tudo isso que foi mostrado para vocês é apenas uma introdução de como trabalhamos o
Workbench.

Agora que estamos com as instalações necessárias e sabemos usar o Workbench,


vamos começar a manipular os bancos de dados. Para isso, primeiro, é preciso criar um
banco de dados, além dos exemplos que já temos que vieram junto no momento da
instalação do MySQL.

A sintaxe para criar o banco de dados é o comando create database, note ser
possível gerar um database ou um schema.

Lembrando que no banco de dados relacional, o agrupamento de tabelas é


chamado de schema, já no MySQL database e schema são sinônimos.

Então, podemos utilizar CREATE {DATABASE | SCHEMA} para criar um banco de


dados. Outra parte que pode ser acrescentada no comando é o [IF NOT EXISTS]
db_name, isto é, se não for encontrado o nome atribuído ao banco de dados, será criado
e, caso exista não será feita nenhuma execução.

Código completo:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name


[create_specification]

create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
DEFAULT ENCRYPTION [=] { 'Y' | 'N'}

Analisando as informações em create_specification, perceba que se não for


indicado o character set, como, do tipo UTF-8 ou UTF-16, o código utiliza o padrão
(default).

 UTF-8 - UCS Transformation Format 8 (formato de transformação UCS 8)


 UTF-16- 16-bit Unicode Transformation Format (formato de Transformação
Unicode)

No nosso computador possuímos uma tabela interna chamada ASCII (da sigla
American Standard Code for Information Interchange, "Código Padrão Americano para
o Intercâmbio de Informação"), em que cada letra digitada no computador é convertida
em um código que a representa.

O código ASCII pode diferir conforme o idioma, como na língua inglesa que não
existe acento e nem cê-cedilha. Por isso, a tabela ASCII original não comporta esses
tipos de caracteres especiais. Porém, há tabelas que integram esses caracteres especiais,
então, ao digitar uma letra com acento será buscado na tabela o código correspondente.

Por esse motivo, em character set vamos informar para o banco de dados o
conjunto de caracteres permitidos, a depender do idioma. Por exemplo, se a construção
do banco de dados são com informações em português, é necessário, portanto, que seja
incluído caracteres da língua portuguesa.

Apenas por questão de conhecimento, o collate também específica o padrão desses


conjuntos de caracteres a serem usados e o encryption informa se o banco de dados será
criptografado ou não.
Como no momento estamos aprendendo SQL, essa informação não é tão relevante e,
em razão disso, vamos somente rodar o comando create.

Voltando para o Workbench, digitando na área do código CREATE DATABASE


SUCOS; estamos criando um database chamado sucos. Quando selecionamos o botão
para rodar, no resultado é exibido a mensagem 1 row(s) affected (uma linha
disponibilizada) informando que foi executado com sucesso.

Perceba que o banco de dados sucos ainda não consta em Schemas do lado esquerdo
do MySQL, para que aparaceça, basta apertar o botão direito do mouse na aba e clicar
na última opção em refresh all (atualize tudo) que aparece no espaço em que é
armazenado os bancos de dados.

Vamos agora visualizar o local que esse banco de dados está criado fisicamente no
disco. Selecione a sua pasta de arquivos do próprio computador e procure o repositório
do MySQL. No caso, o caminho é o C:\ProgramData\MySQL\MySQLServer 8.0 do
MySQL e note haver um arquivo nomeado my.ini, este é lido pelo MySQL toda vez
que ele é iniciado, ou seja, é o arquivo de inicialização.

No arquivo my.ini. há uma série de variáveis de ambiente. Abrindo esse arquivo,


clicando com o botão direito do mouse, em um editor de texto, no caso vou usar o Edit
with Notepad++, conseguimos encontrar a variável datadir =
C:/ProgramData/MySQL/MySQLServer 8.0/Data, que mostra o ambiente onde o
banco de dados está localizado.

Voltando para os diretórios no computador, na pasta "Data" note que temos um


diretório chamado sucos agora, porém dentro não temos nenhum arquivo ainda. Mas,
caso selecionarmos o repositório world é possível visualizar uma série de arquivos
separados, as tabelas com a extensão .ibd, isto é, cada tabela possui um registro
separado.

Criamos o banco de dados e a partir de agora podemos prosseguir com o nosso


treinamento, criando outros componentes no banco de dados sucos.

Outra maneira de criar o banco de dados é usando um assistente, mas apenas se


estiver utilizando o Workbench. Visto que, possui funcionalidades que nos auxiliam a
realizar tarefas sem a necessidade de digitar o comando SQL.

No MySQL Workbench, em qualquer área do lado esquerdo em Schemas, selecione


o botão direito e clique na opção "create schema". Será exibida uma caixa de diálogo
com o campo "name", que vamos alterar para SUCOS2 e o "Charset/Collation", que na
primeira caixa clicável escolheremos a opção utf8 e na seguinte uft8_general_ci.
Essas informações estão relacionadas aos caracteres especiais, caso precise conter eles
no seu banco de dados. Em seguida, selecione o botão "Aply" do lado inferior esquerdo
do Workbench.

Será mostrado uma tela com o título Apply Changes to Object, informando que será
criado o objeto e na próxima página é exibido o comando CREATE
SCHEMAsucos2DEFAULT CHARACTER SET utf8;. Para fins de curiosidade, se pegarmos
esse comando e colar na área do MySQL, será executado normalmente. Então, o que a
caixa de diálogo exibida pelo Workbench faz é agilizar a escrita do comando SQL.

Perceba que o nome do nosso banco de dados sucos está entre crases, essa
nomenclatura é mais usada em situações para limitar o nome que há espaços entre as
palavras, por exemplo, sucos 2, no caso não vamos precisar já que não temos espaços
no nome do nosso database, mas podemos manter.

Selecionando Apply novamente, executaremos o comando. Clique em "Finish" para


fechar a janela de execução e visualizarmos apenas a área MySQL, observe que no
MySQL do lado esquerdo em Schemas, já consta o banco de dados.

CREATE SCHEMA `sucos2` DEFAULT CHARACTER SET utf8;

Note também, que o comando exibido para criar o banco de dados em uma das
telas anteriores não aparece mais, é apenas no momento de execução mesmo. Na parte
superior da área de digitação do código, o programa vai abrindo abas conforme
executamos os comandos, sendo a primeira aba a Query 1 que foi o comando manual e
direto de criação e a segunda sucos2 - Schema é a caixa de diálogo para criar o banco
de dados sucos2.

À medida que formos executando alguns comandos SQL, irei mostrar uns
comandos visuais que auxiliam na memorização da sintaxe. Nessa parte mais visual é
possível enxergar o comando que o Workbench está gerando, copiar, colar e adaptar, se
necessário.

Agora que já criamos, vamos aprender a apagar o banco de dados. Para tal,
vamos usar o comando DROP DATABASE, basta digitar esse comando e o nome específico
do banco a ser apagado. Na parte [IF EXISTS] db_name serve para evitar um erro de
execução caso a database não exista.

Sintaxe completa:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

Voltando para o MySQL Workbench, na área de consulta vamos digitar o


comando DROP DATABASE SUCOS; para apagar o banco de dados sucos e rodamos. No
espaço de "Output", temos a mensagem 0 rows(s) affected e em "Action
Output" nos informa através de uma seta em verde que o comando foi executado com
sucesso. Note que o banco de dados não consta mais na lista no lado esquerdo, onde é
localizado os demais bancos. Agora, se formos nos arquivos do sistema operacional, no
diretório Data do MySQL, perceba que também não há mais nenhum diretório com o
nome sucos.

DROP DATABASE SUCOS;

Por ser um comando que excluí banco de dados e, consequentemente todos os


dados contidos nele, é preciso tomar bastante cuidado para quem damos permissão de
acesso para executar tal comando. Há até desenvolvedores e desenvolvedoras que não
possuem essa permissão, conseguem apenas criar tabelas e inserir dados. O único que
possui o privilégio de criar e apagar bancos de dados é o administrador, conhecido
como DBA (sigla em inglês de Database administrator, Administrador de banco de
dados).

É possível também excluir a database sem digitar o comando, apenas indo no


lado esquerdo no Workbench, selecionar com o botão direito do mouse no nome que
deseja apagar e escolher a opção "Drop Schema". Será exibido uma tela perguntando se
realmente queremos excluir o banco de dados com duas opções "Review SQL", que irá
nos mostrar o comando SQL que será executado e "Drop Now", que é a confirmação
para a exclusão. Clicando em "Review SQL" perceba que será apresentado o comando
DROP DATABASE `sucos2`;, selecionando "Execute" a database sucos2 foi excluído do
Workbench e fisicamente no disco.

Vamos usar o Workbench ao longo do nosso treinamento por ser mais fácil de
inserir comandos, criar e apagar tabelas e até visualizar o resultado na própria interface.
Mas, tem os que não gostam e preferem usar o SQL como linha de comando. Com a
finalidade de exemplificar, vamos acessar o MySQL sem precisar usar a IDE, isto é, por
linha de comando.

A IDE do MySQL Workbench é apenas uma interface gráfica para nos auxiliar
na manipulação do banco de dados.

Quando instalamos as ferramentas do MySQL, o cliente e o servido, não


necessariamente precisamos de uma IDE para trabalhar, basta ir direto em linha de
comando. Para isso, vamos em "Windows" e no campo de busca digitamos "cmd" para
encontrar o prompt de comando, selecionando essa opção será exibido uma tela preta.

Para conseguirmos usar a linha de comando, é preciso ir até o diretório onde está
localizado o MySQL ou, como qualquer programa do Windows, ir ao painel de controle
usando o atalho "Ctrl + P" na variável path e inserir o caminho da localização do
executável do MySQL para poder acessar por linha de comando.

No cmd, vamos digitar o comando cd\, para voltarmos para a pasta C: e, em


seguida, cd "Program Files", para entrar na pasta e depois “cd MySQL”. Para
visualizar os diretórios na pasta MySQL digite dir, será exibido diversos diretórios,
vamos optar pelo cd "MySQL Server 8.0" e, novamente, escrevemos o comando dir
e, logo após, cd bin. Temos nesse diretório bin o programa dir mysql.exe, é com ele
que vamos entrar no MySQL como linha de comando.

Caminho:

C: \program files>cd “mysql server 8.0>cd bin>dir mysql.exe

Prosseguindo, vamos inserir mysql -h localhost, sendo o "-h" servidor


(host) e o "localhost" o meu próprio servidor. Antes de continuarmos, voltando para o
Workbench e selecionando o ícone com a imagem de casa na parte superior esquerda da
tela, vamos para a área de conexão. Na conexão local, perceba que ela é localhost, isto
é, podemos acessar a nossa própria máquina apenas indo na máquina chamada
localhost.
Localhost é o nome da nossa própria máquina.

Voltando para o prompt de comando, acrescentamos -u ao nosso comando,root


que é o nosso usuário e root -p, sendo -p a senha, mas não vamos digitar ainda. Esse
comando informa que vamos nos conectar no servidor localhost, que vou usar o usuário
root e que a senha será digitada a seguir.

mysql -h localhost -u root -p

Selecionando "Enter" aparece uma mensagem escrita "Enter password" para


inserir a senha do usuário root, vamos digitar a senha e clicar em "Enter". Repare que
estamos agora no MySQL, visto que o nosso caminho é substituído por mysql>.

Vamos realizar o comando create database sucos; e apertar o "Enter", será


exibido a mensagem Query OK, 1 row affected (0.00 sec). Sem fechar o cmd,
voltando para o Workbench e clicando na pasta no canto superior esquerdo ao lado do
ícone da casa, "Local instance MySQL80" saímos da conexão local e retornamos para o
ambiente do MySQL. Selecione com o botão direito na aba da árvore que constam os
bancos de dados, escolhendo a opção "Refresh All", o banco de dados sucos aparece,
visto que o criamos pela linha de comando.

No prompt, podemos digitar o comando select * from city;, nossa tabela de


cidades. Mas, ao clicarmos no "Enter", teremos um erro como retorno, ERRO 1046
(3D000) No database selected, informando que nenhuma database foi selecionado.
Isso acontece porque não selecionamos o banco de dados world, e para executar o
comando é preciso escolher o banco de dados que quero usar. Para isso, vamos usar o
comando use world, que corresponde ao duplo clique do Workbench.

Os comando CREATE e DROP são comandos de sistema e, em razão disso, não


preciso estar associado a um banco de dados.

Apertamos novamente "Enter" para rodar o nosso comando, será exibido uma
mensagem dizendo que a database foi alterado (Database Changed) e, agora sim,
podemos digitar o select * from city;. O programa vai listar todos o conteúdo da
tabela city, que são 4.079 linhas em zero segundos, este tempo são os segundos que o
banco de dados levou para efetuar a consulta. Para exibir as informações na tela é
necessário um determinado tempo, mas por já estar em memória o resultado da consulta
é mais rápido.

No Workbench, o nosso banco de dados** world** está selecionado e podemos


digitar o comando select * from city; e executar, o resultado fica, visualmente,
mais agradável que no MySQL por linha de comando.

Novamente no cmd, para sair da database basta digitar "EXIT" para fechar o
programa, que voltamos para o prompt do Windowns. Veja que podemos escrever o
comando com letras maiúsculas ou minúsculas, isto é, o MySQL não é case sensitive,
ao contrário de alguns programas ligados, por exemplo, o Java.
Mas, à medida que formos aprendendo a construir comandos SQL, é uma boa
prática indentar de forma correta os comandos, colocando-os em letras maiúsculas para
dar destaque.

Chegou a hora de você seguir todos os passos realizados por mim durante esta
aula. Caso já tenha feito, excelente. Se ainda não, é importante que você execute o que
foi visto nos vídeos para poder continuar com a próxima aula.

1) Acesse o Workbench.

2) No canto esquerdo temos uma estrutura em forma de árvore onde vemos o banco de
dados, ou esquemas.

3) Abrindo um dos banco de dados podemos ver alguns dos seus componentes.

4) No menu do Workbench, temos o botão "+ SQL" onde uma área de edição será
criada para que possamos incluir os comandos de SQL para gerenciar nossos bancos de
dados.

5) Efetue um duplo clique no banco de dados World. Depois, execute o seguinte


comando na área de edição:

SELECT * FROM CITY;

6) Clique em:
E a consulta é executada.

7) Digite, abaixo, um novo comando:

SELECT * FROM COUNTRY;

8) Clique em:

E as duas consultas serão executadas.

9) Se você selecionar uma área com alguns comandos e clicar em:

Somente aquele comando selecionado é que será executado.

10) Caso o comando esteja errado, abaixo você verá o resultado de cada execução.

11) Vamos criar um banco de dados. Para isso, crie um novo script no Workbench e
digite:

CREATE DATABASE SUCOS;

12) Execute o comando. Note que o banco de dados é criado.


13) Podemos criar o banco de dados através de um assistente. Para isso, clique com o
botão da direita do mouse sobre uma área qualquer onde fica a lista dos bancos de
dados.

E selecione Create Schema.

14) Inclua o nome do banco de dados (ex: Sucos2).

15) Clique em Apply.

16) O comando SQL é exibido. Clique novamente em Apply e o novo banco é criado.

17) Podemos apagar o banco de dados. Execute o comando:

DROP DATABASE SUCOS;

18) Note que o banco não mais aparece na lista de bancos de dados.

19) Se escolhermos a base sucos2, com o botão da direita do mouse, podemos também
apagar o banco clicando em Drop Schema.
20) É possível acessar o MySQL por linha de comando. Vá para o subdiretório c:\
Program Files\MySQL\MySQL Server 8.0\bin

21) Digite o comando:

mysql -h localhost -u root -p

Tecle enter e depois inclua a senha.

22) Digite o comando:

CREATE DATABASE sucos;

Se você for conferir no Workbench veja que o banco de dados sucos foi acrescido à lista
de bancos disponíveis.

23) Para executar uma consulta no banco exemplo world digite:

USE world; <ENTER>


SELECT * FROM city; <ENTER>

Onde <ENTER> significa teclar a tecla Enter.

24) Verá que a lista de cidades são listadas.


25) Para sair digite:

exit

TIPOS DE DADOS

Sabemos que a entidade principal do banco de dados é a tabela, que possui


colunas (campos) de diferentes categorias (tipos) e que, ao longo do mesmo campo,
todos os valores devem ser do tipo estabelecido na criação da tabela.

Vamos entender agora quais são os principais tipos no caso do MySQL.

Valor Menor Menor Valor Maior Valor Maior Valor


Tipo em Valor(Com (Sem Sinal) - (Com Sinal) - (Sem Sinal) -
Bytes Sinal) - Signed Unsigned Signed Unsigned
TINYINT 1 -128 0 127 255
SMALLINT 2 -32768 0 32767 65535
MEDIUMINT 3 -8388608 0 8388607 16777215
INT 4 -2147483648 0 2147483647 4294967295
BIGINT 8 -2xE63 0 2xE63 2xE64-1

 Propriedade UNSIGNED: Não permite sinal no número. Por isso, o conjunto de


valores válidos aumentam.

Iniciando pelo tipo NUMÉRICOS, temos duas categorias: INTEIROS e DECIMAIS. Nos
números inteiros há diversos tipos que podem ser criados no MySQL e estão
diretamente relacionados com o espaço que vou precisar para armazenar determinado
número no banco de dados. Quanto maior o espaço, maior o conjunto de números
possíveis a serem armazenados.

Observando a tabela, na coluna "TIPO" temos cinco categorias de números inteiros


que podem ser armazenados no MySQL, o TINYINT, SMALLINT, MEDIUMINT,
INT E BIGINT. No segundo campo, Valor em Bytes temos o número de bytes gastos
para armazenar um número de determinado tipo, como o TINYINT que para armazenar
é necessário 1 byte, o SMALLINT que gasta 2 bytes e assim sucessivamente.

Quanto maior a quantidade de bytes que posso armazenar, maior o espaço de


números com os quais posso trabalhar. Então, por exemplo, o TINYINT fica entre -128
e 127, se for criado um número dessa categoria e enviado para armazenar o número 300,
será retornado um erro, visto que esse tipo não suporta.

Temos também uma propriedade chamada UNSIGNED. É um atributo para números


inteiros no MySQL utilizado para a definição de números positivos (sem sinal), visto
que o sinal de menos (-) ocupa espaço de armazenamento. Então, se informar para o
MySQL que uma coluna específica é do tipo inteiro e sem sinal, o conjunto de números
para armazenar nesse tipo de campo é maior, visto que não é preciso armazenar no
computador os sinais e até mesmo de números positivos, já que não é reservado um
espaço para arquivar o sinal.

Exemplificando, se o TINYINT for do tipo UNSIGNED, consigo guardar de 0 a 255


e se for com sinal do -128 a 127, perceba haver uma diferença de espaços com o ganho
do sinal.

Falando um pouco sobre os números DECIMAIS, temos dois tipos: de PRECISÃO


FIXA e PONTO FLUTUANTE. Este significa que será realizado um arredondamento
quando o número de casas decimais for superior ao número permitido pelo banco de
dados. No ponto flutuante também temos dois tipos de valores decimais, o FLOAT, que
trabalha com uma precisão simples de 4 bytes e o DOUBLE, com precisão dupla de 8
bytes. A diferença entre ambos é o tamanho de espaço de armazenamento.

O DOUBLE é mais usado para quando queremos ter números mais exatos nos
cálculos, uma vez que ele faz arredondamentos mais precisos com números com mais
casas decimais. Quando declaramos um número FLOAT ou DOUBLE, é possível
especificar o número de dÍgitos e casas decimais.

Como exemplo, quando declaramos esse tipo, podemos especificar da seguinte


forma FLOAT (7,4) isso significa que esse número do tipo FLOAT vai ter sete dígitos,
sendo quatro casas decimais. Podemos inserir um número de casas decimais para além
de quatro, como no caso do número 999,00009 com cinco casas decimais. O MySQL,
atendendo a especificação, vai arredondar esse número para quatro casas decimais,
armazenando o 999,0001.

Nos DECIMAIS FIXOS, temos o DECIMAL ou NUMERIC, são análogos e sua


definição é a quantidade máxima de dígitos que o número pode ter, no caso é 65 dígitos.
Isso para números INTEIROS e DECIMAIS, ou seja, posso ter um número com um
número inteiro e 64 casas decimais, ou posso ter um número com 64 números inteiros e
apenas uma casa decimal.
Quando especificamos o número de casas decimais e a quantidade de dígitos, já
estamos indicando o conjunto máximo e mínimo de dados. Vamos supor que temos
DECIMAL(5,2), isto é, o número é decimal com 5 dígitos e 2 casas decimais, só poderá
armazenar entre -999,99 e 999,99, tal como especificamos no tamanho. Não será feita
nenhuma aproximação, apenas vai ser gravado o número exato digitado para ser
guardado no banco de dados.

Outro tipo numérico é o BIT, que armazena valores de até 64 bytes. Explicando um
pouco sobre o BIT, se o campo for do tipo BIT(1), é possível armazenar 1 ou 0. Se for
BIT(2) é viável armazenar 01,10,00 e 11. Agora, se tiver um número de até 64 BITS,
tenho o tamanho de 64 caracteres que podem ser gravado de 1 ou 0 que representa um
número binário. Em campos do tipo LÓGICO, também é usado o BIT, sendo 1 (um)
verdadeiro e 0 (zero) falso.

Os campos numéricos possuem alguns atributos. Já foi mencionado o SIGNED e


UNSIGNED, que representam se haverá número negativo ou não, mas, agora vamos
entender um pouco sobre o ZEROFILL, que preenche com zeros o que estiver faltando do
número. Por exemplo, se tiver um campo do tipo INT(4) e pedir para solicitar o valor 5,
será gravado 0005.

Outro atributo é o AUTO_INCREMENT. Esta propriedade é o próprio banco de dados


que gera uma sequência numérica automaticamente. Se tiver uma tabela vazia com um
campo desse tipo e for inserido um valor nessa coluna será atribuído o valor 1, se
incluirmos mais um valor será gerado o valor 2 e assim por diante. Essa sequência se
inicia no 1 ou no 0, definido no próprio AUTO_INCREMENT, bem como, o valor do
incremento que quero aplicar, podendo ser 0, 5, 10, 15, 20 ao invés de 1, 2, 3, 4.

O OUT OF RANGE é um erro que acontece quando tentamos gravar na base de dados
um valor que está fora do espaço permitido.

Vamos compreender um pouco agora sobre os campos de DATA e HORA, temos cinco
principais:

O campo DATE armazena um dia, no formato ano, mês e dia com traços entre
eles, vai dia 1000-01-01 até 9999-12-31. Já o DATETIME, guarda data e hora. A hora é
importante principalmente quando tempos campos do tipo LOG, que possui o horário em
que alguém fez alguma ação específica no sistema.

Seguindo, o TIMESTAMP é bem semelhante ao o DATETIME, contudo possui


duas características principais: tem um range menor, que vai de 1970-01-01 a 2038-01-
19 e possui fuso horário. Por isso o range fica menor, para armazenar mais informações.

Por mais que esse range de datas pareça pequeno, vale lembrar que utilizamos
fuso horário para sistemas, por exemplo, de agendas para marcar reuniões em empresas
que tiver funcionários(as) em diversos países. Por isso, o range até 2038 não é tão
pequeno quanto parece, visto que ninguém irá marcar uma reunião de hoje até o ano de
2038.

O TIME armazena somente o horário e tem um range, de -838:59:59 a 839:59:59.


Normalmente, usamos só para gravar uma hora no relógio que vai de meia-noite às onze
e cinquenta e nove da noite do dia seguinte. Por isso, não é preciso ter 838 horas
gravadas.

No campo YEAR é guardado somente o ano de 1901 a 2155. Podendo ser de duas
ou quatro casas decimais, mas, normalmente utilizamos o DATE com uma data de
primeiro de janeiro do ano que quero armazenar. Nesse treinamento ainda aprenderemos
que existem funções do tipo data que conseguem extrair de um campo DATE,
DATETIME ou TIMESTAMP o ano específico.

Falando um pouco do tipo STRING, são as cadeias de caracteres, os textos.


Temos algumas categorias, começando pelo CHAR e o VARCHAR, ambos possuem o
tamanho limite de 255 caracteres, a principal diferença são os espaços.

Caso tivermos um campo CHAR(4) e o utilizamos para armazenar as letras


"aa", no banco de dados será guardado dois espaços vazios, já que no campo foi
estabelecido o caractere de tamanho quatro, ficaria " aa". Isto é, esse campo ocupa
maior espaço em disco, visto que grava os espaços vazios que, em algumas situações,
pode ser desnecessário. Já quando nos referimos ao VARCHAR(4), se quisermos
armazenar "aa", será guardado somente dois caracteres sem gastar espaço a mais no
disco.

Temos também as STRINGS do tipo binário, o BINARY e o VARBINARY. Ambos


possuem o mesmo conceito do CHAR e VARCHAR, um armazena os espaços e o outro
não. O que os difere é que o armazenamento não é em caractere e sim em bytes, ou seja,
o tamanho máximo é expresso em binário.

Outros campos do tipo STRING são o BLOB e o TEXT. No primeiro temos as


variações de tamanho máximos TINYBLOB, BLOB, MEDIUMBLOB e
LONGBLOB e no TEXT também, temos o TINYTEXT, TEXT, MEDIUMTEXT e
LONGTEXT.

O BLOB é binário, então, em um LONGBLOB é possível guardar um grande


binário no banco. Exemplo, posso gravar bytes de um arquivo no Word, ou os bytes de
uma foto no banco de dados. Já o TEXT vai ser usado para armazenar textos.

Outro campo é o ENUM, é como se definíssemos opções. Por exemplo, se


tivermos um campo chamado "SIZE" do tipo ENUM, na declaração é necessário inserir
as opções que serão armazenadas nesse campo, no caso Size ENUM ('x-small',
'small', 'médium', 'large', 'x-large'), só conseguimos guardar no campo
"SIZE" os textos nos parênteses.

Dois atributos importantes dos campos do tipo STRING são os SET e o COLLATE,
estão relacionados com as cadeias de caracteres que serão usados para armazenar o
texto. Caso queira guardar texto em alguma língua diferente é preciso selecionar na
definição de campo o SET e o COLLATE especificando a língua utilizada, assim, será
inserido no campo uma tabela ask maior ou menor dependendo do tipo que você está
usando.

Finalmente, há alguns campos que aparecem mais nas versões atuais do MySQL,
como o SPACIAL, para visualizar mapas. O tipo POINT grava o ponto usando a latitude e
longitude no banco MYSQL que fornece algum determinado local que, como,
restaurante, supermercado ou ponto turístico. Outro tipo é o LINESTRING, que
representa uma linha. O GEOMETRY e POLYGON, que representam áreas no mapa.

PRIMEIRA TABELA

Agora que já sabemos os tipos, vamos criar a primeira tabela no banco de dados.
Lembrando que estamos fazendo um projeto de banco de dados para uma empresa de
suco de frutas.

Conversando com a empresa, nos foi passado que gostariam de armazenar no


MySQL os cadastros dos clientes com as seguintes informações: o CPF do cliente, o
nome completo, o endereço completo (rua, bairro, cidade, estado e CEP), a data de
nascimento, a idade, o sexo, o limite de crédito para efetuar a compra dos produtos, o
volume mínimo de sucos que o cliente pode comprar e se já foi realizado a primeira
compra.

Analisando essas informações, percebemos que cada uma é uma coluna e será
necessário definir o tipo de cada campo. Vamos, então, para o Workbench que já temos
o banco de dados sucos, mas sem nenhuma tabela ainda.

Vamos criar a primeira tabela, então. Na parte superior esquerda da tela, clique
no ícone de um papel escrito SQL com um sinal de (+) embaixo. Significa que estamos
criando um script SQL e irá abrir uma nova área que digitaremos os comandos.

Para criarmos uma tabela, basta escrever CREATE TABLE, note que o Workbench
nos dá algumas opções do que pode ser o comando que estamos inserindo. Seguindo o
comando, é preciso inserir um nome para a tabela, que vai ser "tbcliente". Neste
treinamento não vamos nos preocupar tanto com nomenclatura, mas há boas práticas de
como criar nomenclatura para tabelas, campos, índices, chave primária e estrangeira, e
assim por diante.

Obs: Antes de criar a tabela garante que você selecionou o banco sucos usando o
comando:

use sucos;

O comando básico para criar uma tabela no banco é:

CREATE TABLE tbcliente;

Seguindo com a nossa tabela, além do nome é preciso estabelecer as colunas e


seus respectivos tipos. Clicando em "Enter" e abrindo um parêntese para especificar os
campos, vamos iniciar pelo CPF, o número que identifica o cliente, pode ser que tenha
pontos, traços e às vezes inicia com zero. Por essa razão, por mais que o CPF sejam
números, é melhor armazenar como texto. Visto que se gravar como número no
momento de gravar, os zeros no início serão truncados. Exemplificando, se tivermos
um CPF com o número 00388323102, o banco de dados guarda 3888323102. Por isso,
vamos considerar o CPF com o tipo VARCHAR.
CREATE TABLE tbcliente
(CPF VARCHAR(11),
....

Após a vírgula vamos inserir os próximos campos. O "NOME" também será


VARCHAR e, por ter nomes compridos, vamos estabelecer 100 caracteres para reservar
o nome. Continuando, temos "ENDERECO" que também devemos considerar haver
nomes de ruas grandes, inclusive, às vezes é viável criar dois campos para gravar o
endereço. Vamos inserir da seguinte maneira ENDERECO1 VARCHAR(150),, ENDERECO2
VARCHAR(150),, e depois o bairro BAIRRO VARCHAR(50),, a cidade CIDADE
VARCHAR(50),, lembrando sempre de inserir uma vírgula em cada linha.

O próximo campo pedido pela empresa é o "ESTADO", que também será do


tipo VARCHAR ESTADO VARCHAR(50), em seguida o CEP VARCHAR(8),. Na idade,
como dificilmente as pessoas vão ter mais de 150 anos, não é preciso colocar um INT,
um SMALLINT já atende o que precisamos IDADE SMALLINT,, o sexo, que vai ser uma
letra M (masculino) e F (feminino), ficando SEXO VARCHAR(1),.

No nosso campo de limite de crédito estamos nos referindo a valores em


dinheiro, valores decimais, como, limite de crédito de R$ 1.627.438,32. Então, vamos
colocar LIMITE_CREDITO FLOAT,, caso queira deixar com espaço entre a palavra limite
e crédito, basta inserir crase no início e fim, assim limite credito.

Perceba que não especificamos o número de caracteres no FLOAT, mas


poderíamos colocar FLOAT(10, 2),. Contudo, mesmo sabendo que dinheiro tem duas
casas decimais, vamos representar o número sem fixar o número de casas decimais.

Opinião do instrutor: quando estamos falando de banco de dados, estamos


falando sobre armazenar informação. Quando exibo a informação é que posso mostrá-la
do jeito como ela deve ser representada. Ou seja, na minha opinião, você não precisa se
preocupar com o formato do valor, do número, ou do texto no momento de armazená-lo
no banco de dados, mas sim no momento de exibir em um relatório, em um programa. E
aí você tem, não somente no SQL, mas também nas linguagens de programação com as
quais vai trabalhar em conjunto com o anco de dados, de exibir a informação do jeito
como ela tem que aparecer. Isto é, posso gravar um número com dez casas decimais,
mas no momento em que eu for exibir, forço a exibir só com duas casas.

Já o volume de compras é expresso em litros, então, também não vamos nos


preocupar se tem ou não casas decimais: VOLUME_COMPRA FLOAT,. Finalmente, o último
campo, se o cliente já realizou uma primeira compra ou não. Neste caso vamos usar o
campo BIT de um espaço apenas, para eu poder ter o 1 (realizou a primeira compra) ou
o 0 (ainda não realizou a primeira compra): PRIMEIRA_COMPRA BIT(1)), esse último
parêntese fecha o que inseri no início da inclusão de todas as colunas.

Código completo:

CREATE TABLE tbcliente


( CPF VARCHAR (11) ,
NOME VARCHAR (100) ,
ENDERECO1 VARCHAR (150) ,
ENDERECO2 VARCHAR (150) ,
BAIRRO VARCHAR (50) ,
CIDADE VARCHAR (50) ,
ESTADO VARCHAR (2) ,
CEP VARCHAR (8) ,
IDADE SMALLINT,
SEXO VARCHAR (1) ,
LIMITE_CREDITO FLOAT ,
VOLUME_COMPRA FLOAT ,
PRIMEIRA_COMPRA BIT (1));

Ficou assim, CREATE TABLE, logo depois o nome da tabela, abro parênteses,
coloco todos os campos separados por vírgula, o nome do campo e o tipo, e fecho o
parêntese. Vamos rodar agora, selecionando na parte superior à área que digitamos o
comando, o ícone de raio. Na parte de "Action Output" é exibida uma mensagem
informando que o comando foi executado com sucesso.

Na região de "Schemas", clicando em sucos com o botão direito do mouse e


escolhendo a opção "Refresh All", note que a tabela "tbcliente" foi criada.

Nosso sistema de vendas tem mais uma tabela a ser criada: vendedores.

Algumas informações:

Nome da tabela deve ser TABELA_DE_VENDEDORES Vendedor tem o número


interno da matrícula, onde será armazenado no campo MATRICULA, que deve ser um
string de 5 posições. O nome do vendedor deverá ser armazenado no campo NOME, e
deve ser um string de 100 posições. Criar o campo PERCENTUAL_COMISSAO que
representa quantos % de comissão o vendedor ganha sobre cada venda.

Crie esta tabela no banco de dados SUCOS.

CREATE TABLE TABELA_DE_VENDEDORES (


MATRICULA varchar(5),
NOME varchar(100),
PERCENTUAL_COMISSAO float
);

Se a empresa suco de frutas possui uma tabela de clientes, consequentemente,


precisa de uma tabela de produtos, afinal, os clientes devem comprar itens da empresa.

Nessa tabela teremos as informações dos sucos de frutas, tais como: "código do
produto", é um código interno para identificar o produto; "nome do produto", descritor
do produto; "embalagem", pode ser lata, litro ou em caixa; "tamanho" é o volume do
suco, "sabor", visto que há várias marcas com o mesmo sabor e "preço de lista", é o
preço tabelado do produto. Todos esses cinco campos serão VARCHAR, visto que o
código pode ter letras e o preço de lista, será do tipo FLOAT.

Vamos criar essa tabela de produtos usando uma maneira mais visual, uma caixa
de diálogo que o MySQL Workbench possui. Então, voltando para o Workbench, do
lado esquerdo em sucos, clique em "Tables" com o botão direito do mouse e escolha a
opção "create table". Será exibida uma nova aba "new_table - Table" com uma série
de propriedades que é possível usar na criação da tabela.

Preenchendo essas propriedades, vamos em "Table name" e inserir o nome


"tbProduto", não vamos incluir os parâmetros mais detalhados, como charset/collation
ou onde tem as letras "PK", "NN", entre outras, isso vamos ver mais adiante, talvez em
um curso mais avançado.

Para criar as colunas da tabela, selecione sob "Column name" e digite o nome e
ao lado o "Datatype" (tipo do dado) do campo. Começando por código do produto, que
vamos chamar somente de "PRODUTO" e o tipo VARCHAR(20), observe que "PK" e
"NN" foram selecionados automaticamente, vamos desmarcar no momento por ser
propriedades que não são necessarias ainda para configurar na tabela.

Passando para o próximo campo, selecione a seta para baixo do lado direito na
caixa de diálogo e digite "NOME" que também será VARCHAR(150), para o campo
seguinte, "EMBALAGEM" do tipo VARCHAR(150), "TAMANHO" que será
VARCHAR(50), "SABOR" que é VARCHAR (50) e, por último, "PRECO_LISTA"
que será FLOAT.

Inserido todos os campos, clicamos agora em "Apply" do lado inferior direito e


será exibida uma mensagem informando sobre uma configuração padrão que o
programa vai usar, selecione o botão "OK" para continuar.

Será mostrada uma nova tela com o comando com algumas alterações como o
nome do banco, ponto e nome da tabela CREATE TABLE `sucos`.`tbproduto, o que
não tem problema visto que quando rodamos o script para criar a tabela de clientes já
haviamos selecionado a base sucos, por isso, ao inserir um campo ele estará se referindo
a base sucos. Mas, podemos criar esse script sem a necessidade de entrar no banco de
dados que é inserindo o nome do banco, ponto final e nome da tabela. Já as crases no
nome da tabela e banco de dados é que, por ser um nome genérico o programa acaba
inserindo para garantir caso haja espaço entre os nomes.

Percebe que ao final de cada campo está escrito "NULL", isso significa que esse
campo aceita valores nulos ou vazios, como não especificamos na caixa de diálogo o
programa acaba inserindo automaticamente.

Mas no momento vamos nos atentar somente aos comandos já vistos nesse
curso. Então, criamos uma tabela (CREATE TABLE), inserimos o nome da tabela
(sucos.tbproduto), os campos e suas respectivas categorias separados por vírgula.
Clique no botão "Apply" do lado inferior direito e, logo após, "Finish".

Observando, no Workbench, do lado esquerdo a tabela "tbproduto" já foi


incluída em sucos. Agora, temos no banco de dados duas tabelas, a de clientes e
produtos.

Podemos apagar as tabelas, mas antes, é necessário verificar alguns requisitos


antes de excluir. No caso, temos duas tabelas que não se relacionam no banco de dados,
mas se tivessem alguma relação entre elas, pode ter situações em que não é possível
apagar.
Vamos apagar a tabela de duas formas, através do comando e de um assistente.
Como iremos utilizar a tabela de clientes e produtos nas próximas aulas, não vamos
excluir ela, iremos no script que criamos a tabela de clientes e inserir um sufixo "2" no
final do nome da tabela e rodar o comando, realize o mesmo procedimento para o sufixo
"3".

Código:

CREATE TABLE tbcliente2


( CPF VARCHAR (11) ,
NOME VARCHAR (100) ,
ENDERECO1 VARCHAR (150) ,
ENDERECO2 VARCHAR (150) ,
BAIRRO VARCHAR (50) ,
CIDADE VARCHAR (50) ,
ESTADO VARCHAR (2) ,
CEP VARCHAR (8) ,
IDADE SMALLINT,
SEXO VARCHAR (1) ,
LIMITE_CREDITO FLOAT ,
VOLUME_COMPRA FLOAT ,
PRIMEIRA_COMPRA BIT (1));

Clique com o botão direito do mouse em "TABLES" e escolha a opção "Refresh


All" para aparecer as tabelas 2 e 3 de clientes.

Na primeira forma que temos para excluir uma tabela, no Workbench, selecione
a "tbcliente2" com o botão direito do mouse e escolha a opção "Drop Table", será
exibida uma mensagem perguntando se queremos revisar o comando "Review SQL" ou
executar "Drop Now", selecione essa última opção e pronto, a tabela foi apagada.

A outra forma é por comando, selecione do lado superior esquerdo o ícone SQL
com o + abaixo para criarmos uma pasta de comando e certifique-se que está no banco
de dados sucos observando se está em negrito o nome ou usando o comando use
Sucos;. Agora podemos apagar a tabela "tbcliente3" usando DROP TABLE
tbCliente3; e rode o comando.

DROP TABLE tbcliente3;

Note que a tabela "tbcliente3" não consta mais em "TABLES" no banco de


dados sucos. Recapitulando, é possível apagar uma tabela pelo Workbench usando o
botão direito do mouse ou por comando "Drop Table" e o nome da tabela.

Apague a tabela TABELA_DE_VENDEDORES2 usando script SQL.

Para criar a tabela antes de apagá-la execute:

CREATE TABLE TABELA_DE_VENDEDORES2 (


MATRICULA varchar(5),
NOME varchar(100),
PERCENTUAL_COMISSAO float
);
DROP TABLE TABELA_DE_VENDEDORES2;

ATIVIDADE COMPLEMENTAR

Chegou a hora de você seguir todos os passos realizados por mim durante esta
aula. Caso já tenha feito, excelente. Se ainda não, é importante que você execute o que
foi visto nos vídeos para poder continuar com a próxima aula.

1) Acesse MySQL Workbench.

2) Crie a tabela de cliente digitando o comando abaixo:

CREATE TABLE tbcliente


( CPF VARCHAR (11) ,
NOME VARCHAR (100) ,
ENDERECO1 VARCHAR (150) ,
ENDERECO2 VARCHAR (150) ,
BAIRRO VARCHAR (50) ,
CIDADE VARCHAR (50) ,
ESTADO VARCHAR (2) ,
CEP VARCHAR (8) ,
IDADE SMALLINT,
SEXO VARCHAR (1) ,
LIMITE_CREDITO FLOAT ,
VOLUME_COMPRA FLOAT ,
PRIMEIRA_COMPRA BIT )

3) Execute o comando e depois atualize a árvore do Workbench para observar a nova


tabela criada.

4) Podemos criar tabela pelo assistente. Botão da direita do mouse sobre Tables, abaixo
do banco de dados Sucos, e escolha Create Table.

5) Digite o nome da tabela como tbProduto.

6) Inclua os campos conforme mostrado abaixo:

PRODUTO VARCHAR(20)
NOME VARCHAR(150)
EMBALAGEM VARCHAR(50)
TAMANHO VARCHAR(50)
SABOR VARCHAR(50)
PRECO_LISTA FLOAT

7) Clique no botão Apply.

8) Verifique o comando a ser executado. Clique em Apply novamente e a tabela é


criada.

9) A tabela pode ser apagada. Para isso digite o comando para criar novas tabelas:

CREATE TABLE tbcliente2


( CPF VARCHAR (11) ,
NOME VARCHAR (100) ,
ENDERECO1 VARCHAR (150) ,
ENDERECO2 VARCHAR (150) ,
BAIRRO VARCHAR (50) ,
CIDADE VARCHAR (50) ,
ESTADO VARCHAR (2) ,
CEP VARCHAR (8) ,
IDADE SMALLINT,
SEXO VARCHAR (1) ,
LIMITE_CREDITO FLOAT ,
VOLUME_COMPRA FLOAT ,
PRIMEIRA_COMPRA BIT );
CREATE TABLE tbcliente3
( CPF VARCHAR (11) ,
NOME VARCHAR (100) ,
ENDERECO1 VARCHAR (150) ,
ENDERECO2 VARCHAR (150) ,
BAIRRO VARCHAR (50) ,
CIDADE VARCHAR (50) ,
ESTADO VARCHAR (2) ,
CEP VARCHAR (8) ,
IDADE SMALLINT,
SEXO VARCHAR (1) ,
LIMITE_CREDITO FLOAT ,
VOLUME_COMPRA FLOAT ,
PRIMEIRA_COMPRA BIT );

10) Foram criadas duas tabelas. Agora vamos apaga-las. A primeira por comando:

DROP TABLE TB_CLIENTES3;

11) Pelo assistente basta com o botão da direita do mouse sobre o nome da tabela
TB_CLIENTES2:
Já temos a tabela de cliente e produto criadas, agora precisamos inserir
informações nelas. Neste momento, faremos da seguinte forma: baixe o link
disponibilizado para este vídeo, terá uma planilha de Excel chamada
"PRODUTOS.xlsx", selecione ela e observe que temos os campos "SKU" que é o
código do produto, "DESCRITOR" é o nome do produto que dentro também temos as
informações de tamanho e sabor, "EMBALAGEM" e "PREÇO", são as informações
específicas do produto.

Vamos usar essa planilha PRODUTOS como base para inserir dados dentro da
tabela. Voltando para o Workbench, selecione o ícone para criar um script, vamos pegar
a primeira linha que é o "SKU 1040107".

Certifique-se que está no banco de dados sucos, utilizando o comando USE sucos;

O comando utilizado para inserir as informações em uma tabela é o INSERT


INTO tbproduto(, abrindo parêntese para incluir os campos da tabela. Observe que em
"tbproduto" em "columns" há o nome das colunas ("PRODUTO", "NOME",
"EMBALAGEM", "TAMANHO", "SABOR" e "PRECO_LISTA") sendo a que vamos
incluir no comando INSERT.

Código completo até o momento:

USE sucos;
INSERT INTO tbproduto (
PRODUTO,
NOME,
EMBALAGEM,
TAMANHO,
SABOR,
PRECO_LISTA)

Após a inclusão dos campos, digite a cláusula VALUES que significa que vamos
especificar os valores da instrução INSERT INTO. No caso, a primeira coluna é
"PRODUTO", que olhando na planilha do Excel é o "SKU", sabemos que o código do
produto foi criado como VARCHAR. Então, voltando para o comando abra um
parêntese após VALUES e insira '1040107' e uma vígula, que indica que vamos
acrescentar a informação sobre o próximo campo "Nome". Repita o procedimento para
os demais campos, com exceção do "PRECO_LISTA" que por ser FLOAT não é
necessário utilizar aspas simples.

Para inserir uma informação que é considerada STRING, é preciso utilizar aspas
simples ('') para que o programa identifique.

Código:

INSERT INTO tbproduto (


PRODUTO,
NOME,
EMBALAGEM,
TAMANHO,
SABOR,
PRECO_LISTA) VALUES (
'1040107', 'Light - 350 ml - Melancia', 'Lata', '350 ml', 'Melancia',
4.56);

Executando o comando, será exibido uma mensagem informando que o


programa rodou com sucesso. Mas, para visualizar as informações nessa tabela, para
verificar se foram incluídas, usaremos o comando SELECT * FROM tbproduto;,
selecione somente essa linha para rodar. Será exibida a tabela produto com as
informações inseridas.

Vamos criar um vendedor na tabela de vendedores. A informação é a seguinte:

Matrícula: 00233
Nome: João Geraldo da Fonseca
Comissão: 10%

Digite o comando de inclusão.

INSERT INTO TABELA_DE_VENDEDORES


(MATRICULA, NOME, PERCENTUAL_COMISSAO)
VALUES
('00233', 'João Geraldo da Fonseca', 0.10);

Continuando com as inclusões das informações na tabela, é possível inserir mais


dados em um mesmo script. Olhando agora para a segunda linha da planilha do
Excel, vamos inserir esses elementos.

INSERT INTO tbproduto (


PRODUTO,
NOME,
EMBALAGEM,
TAMANHO,
SABOR,
PRECO_LISTA) VALUES (
'1037797', 'Clean - 2 Litros - Laranja', 'PET', '2 Litros',
'Laranja', 16.01);

Repita o código para os outros registros da tabela produto.

INSERT INTO tbproduto (


PRODUTO,
NOME,
EMBALAGEM,
TAMANHO,
SABOR,
PRECO_LISTA) VALUES (
'1000889', 'Sabor da Montanha - 700 ml - Uva', 'Garrafa', '700 ml',
'Uva', 6.31);

INSERT INTO tbproduto (


PRODUTO,
NOME,
EMBALAGEM,
TAMANHO,
SABOR,
PRECO_LISTA) VALUES (
'1004327', 'Videira do Campo - 1,5 Litros - Melancia', 'PET', '1,5
Litros', 'Melancia', 19.51);

SELECT * FROM tbproduto;

Vamos inserir apenas esses registros no momento, temos três comandos INSERT
INTO e um SELECT, este para visualizar os elementos incluídos na tabela. Rodando
o script, uma mensagem comunicando que os comandos foram executados com
sucesso será exibida em "Action Output" e a tabela com as informações será
mostrada em "Result grid".

PRODUTO NOME EMBALAGEM TAMANHO SABOR PRECO_LISTA


Light -
1040107 350 ml - Lata 350 ml Melancia 4.56
Melancia
Clean - 2
1037797 Litros - PET 2 Litros Laranja 16.01
Laranja
Sabor da
Montanha
1000889 Garrafa 700 ml Uva 6.31
- 700 ml -
Uva
1004327 Videira do PET 1,5 Litros Melancia 19.51
PRODUTO NOME EMBALAGEM TAMANHO SABOR PRECO_LISTA
Campo -
1,5 Litros
- Melancia
Essa é a tabela de produtos com os elementos incluídos nos comandos INSERT
INTO. Nessa aula, então, aprendemos como inserir mais de um registro no mesmo
script.

Vamos criar mais dois vendedores, no mesmo comando SQL.

Matrícula: 00235
Nome: Márcio Almeida Silva
Comissão: 8%

Matrícula: 00236
Nome: Cláudia Morais
Comissão: 8%

Digite o comando de inclusão.

INSERT INTO TABELA_DE_VENDEDORES


(MATRICULA, NOME, PERCENTUAL_COMISSAO)
VALUES
('00235','Márcio Almeida Silva',0.08);

INSERT INTO TABELA_DE_VENDEDORES


(MATRICULA, NOME, PERCENTUAL_COMISSAO)
VALUES
('00236','Cláudia Morais',0.08);

Nessa aula vamos aprender a como alterar uma informação que já está incluída
na tabela. No link associado a este vídeo, baixe o arquivo SQL_05.sql e clique com o
botão direito do mouse para abrir como editor de texto.

Será exibido os seguintes comandos:

USE sucos;

INSERT INTO tbproduto (


PRODUTO, NOME, EMBALAGEM, TAMANHO, SABOR,
PRECO_LISTA) VALUES
('544931', 'Frescor do Verão - 350 ml - Limão', 'PET', '350
ml','Limão',3.20);

INSERT INTO tbproduto (


PRODUTO, NOME, EMBALAGEM, TAMANHO, SABOR,
PRECO_LISTA) VALUES
('1078680', 'Frescor do Verão - 470 ml - Manga', 'Lata', '470
ml','Manga',5.18);
Copiando o script do arquivo, crie no ambiente do Workbench um novo espaço
para os comandos, cole e rode o programa para ser incluído mais dois produtos na
tabela.

Vamos verificar na planilha o produto com o seguinte código 544931, se


encontra na linha 7 da planilha, perceba que o campo "EMBALAGEM" consta como
lata e no comando está PET, o preço também está diferente sendo na planilha 2,46 e
no script 3.20. Analisando o próximo código 1078680, a embalagem também está
divergente, era para ser garrafa e incluímos lata, os outros campos estão com as
informações corretas.

Gerando novamente um ambiente para um novo script, digite o comando USE


sucos;, para entrar na base de sucos e, em seguida, o comando para realizar a alteração
das informações que estão diferentes com UPDATE tbproduto SET, em set
especificamos um conjunto de alterações que queremos realizar, utilizando a sintaxe
SET column1 = value1, column2 = value2,....

Mas, precisamos especificar em qual produto queremos fazer essa mudança.


Para isso, incluímos uma condição WHERE com o código do produto e realizamos o
mesmo comando para alterar as informações o produto seguinte.

Código:

USE sucos;

UPDATE tbproduto SET EMBALAGEM = 'Lata', PRECO_LISTA = 2.46


WHERE PRODUTO = '544931';

UPDATE tbproduto SET EMBALAGEM = 'Garrafa'


WHERE PRODUTO = '1078680';

Rodando o programa é retornado um erro na parte de "Output" informando que


está sendo usado um UPDATE sem uma condição que utilize o campo com chave
primária. Esse erro aparece porque o MySQL está me obrigando a usar na condição um
campo que seja chave primária, isto é, que não se repete nos registros.

Mas não incluímos uma chave primária nessa tabela, não aprendemos isso ainda.
Colocando o mouse por cima do erro, ele me dá uma dica de ir em preferences -< SQL
editor. Vamos, então, na parte superior em "Edit > Preferences > SQL Editor" para
desmarcar o campo Safe Updates (rejects UPDATES and DELETEs with no
restrictions) e selecione "OK".

Para funcionar, será necessário reconectar o Workbench, para sair vá em "File >
Exit" e para abrir novamente clique no Windows, digite "MySQL" e selecione essa
opção. Perceba que os comandos estão salvos no ambiente para escrevermos o código,
vamos rodar novamente o script, será exibida uma mensagem comunicando que foi
efetuado com sucesso.

Para verificar se a alteração foi executada, vamos incluir SELECT * FROM


tbproduto; e selecionar apenas essa linha para rodar.
PRODUTO NOME EMBALAGEM TAMANHO SABOR PRECO_LISTA
Light - 350 ml
1040107 Lata 350 ml Melancia 4.56
- Melancia
Clean - 2
1037797 Litros - PET 2 Litros Laranja 16.01
Laranja
Sabor da
1000889 Montanha - Garrafa 700 ml Uva 6.31
700 ml - Uva
Videira do
Campo - 1,5
1004327 PET 1,5 Litros Melancia 19.51
Litros -
Melancia
Frescor do
544931 Verão - 350 ml Lata 350 ml Limão 2.46
- Limão
Frescor do
1078680 Verão - 470 ml Garrafa 470 ml Manga 5.18
- Manga

Note que os campos solicitados foram alterados para os produtos com os códigos
544931 e 1078680. Nessa aula alteramos os registros na tabela utilizando o comando
UPDATE, filtrando com WHERE quais linhas gostaríamos de modificar e, nesse caso,
tiramos a condição de chave primária para executar esse filtro.

Recebemos a seguinte informação:

Cláudia Morais (00236) recebeu aumento e sua comissão passou a ser de 11%. José
Geraldo da Fonseca (00233) reclamou que seu nome real é José Geraldo da Fonseca
Junior.

Efetue estas correções na base de dados.

UPDATE TABELA_DE_VENDEDORES SET PERCENTUAL_COMISSAO = 0.11


WHERE MATRICULA = '00236';
UPDATE TABELA_DE_VENDEDORES SET NOME = 'José Geraldo da Fonseca
Junior'
WHERE MATRICULA = '00233';

CREATE TABLE `sucos`.`tbproduto` (


`PRODUTO` VARCHAR(20) NULL,
`NOME` VARCHAR(150) NULL,
`EMBALAGEM` VARCHAR(50) NULL,
`TAMANHO` VARCHAR(50) NULL,
`SABOR` VARCHAR(50) NULL,
`PRECO_LISTA` FLOAT NULL);
Já sabemos incluir e alterar registros na tabela, agora vamos aprender como
apagar. Para analisar os elementos da tabela, vamos selecionar somente o comando
SELECT * FROM tbproduto;, será exibida a seguinte tabela:

PRODUTO NOME EMBALAGEM TAMANHO SABOR PRECO_LISTA


Light - 350 ml
1040107 Lata 350 ml Melancia 4.56
- Melancia
Clean - 2
1037797 Litros - PET 2 Litros Laranja 16.01
Laranja
Sabor da
1000889 Montanha - Garrafa 700 ml Uva 6.31
700 ml - Uva
Videira do
Campo - 1,5
1004327 PET 1,5 Litros Melancia 19.51
Litros -
Melancia
Frescor do
544931 Verão - 350 ml Lata 350 ml Limão 2.46
- Limão
Frescor do
1078680 Verão - 470 ml Garrafa 470 ml Manga 5.18
- Manga

Vamos escolher o produto 1078680 para excluir. Abrindo um novo arquivo de


edição para escrever o comando, insira USE sucos; e na próxima linha DELETE FROM
tbproduto, mas, note que não há uma condição do que apagar, se rodarmos assim o
comando vai excluir todos os registros da tabela. Por isso, é necessário incluir uma
condição, igual fizemos no UPDATE utilizando a cláusula WHERE.

Cuidado para não confundir DROP e DELETE. O DROP é utilizado para


apagar objetos do MySQL, como, banco de dados, tabelas, índices e chave primária. Já
o DELETE é para excluir registros armazenados em uma tabela do banco de dados.

DELETE FROM tbproduto WHERE PRODUTO = '1078680';

Rodando esse comando, será exibida uma mensagem avisando que foi efetuado
com sucesso em "Action Out". Para visualizarmos a exclusão do registro, vamos utilizar
o SELECT * FROM tbprodutos;, selecionando somente esse comando e rodando.

Resultado da tabela após o comando DELETE:

PRODUTO NOME EMBALAGEM TAMANHO SABOR PRECO_LISTA


Light - 350 ml
1040107 Lata 350 ml Melancia 4.56
- Melancia
Clean - 2
1037797 Litros - PET 2 Litros Laranja 16.01
Laranja
1000889 Sabor da Garrafa 700 ml Uva 6.31
PRODUTO NOME EMBALAGEM TAMANHO SABOR PRECO_LISTA
Montanha -
700 ml - Uva
Videira do
Campo - 1,5
1004327 PET 1,5 Litros Melancia 19.51
Litros -
Melancia
Frescor do
544931 Verão - 350 ml Lata 350 ml Limão 2.46
- Limão

Código completo:

USE sucos;

DELETE FROM tbproduto WHERE PRODUTO = '1078680';

SELECT * FROM tbproduto;

O comando DELETE é considerado perigoso sem uma cláusula WHERE, visto


que sem essa condição apaga todos os registros da tabela. Por esse motivo, é importante
sempre inserir uma condição para apagar os elementos desejados da tabela.

No que se refere a garantia de apagar algum elemento que não quisesse fazer
existem mecanismos dentro do banco de dados. Mas veremos esse tipo de situação em
outros treinamentos.

Vamos analisar o que ocorre se rodarmos novamente o comando DELETE com


o código 1078680, selecionando somente esse comando. Em "Action Output" note que
não será retornado um erro, mas a mensagem exibida informa que zero linhas foram
afetadas, isso significa que oQuando tentamos executar o comando UPDATE, o MySQL
retornou um erro informando ser preciso incluir na condição de filtro um campo que
fosse chave primária. Tivemos que ir em "Preferences > SQL Editor" e desmarcar a
opção "Safe Updates".

Porém, é importante que tenha chave primária na tabela, se não, arriscamos


inserir registros iguais na mesma tabela. No caso da "tbproduto" é o código interno do
produto, visto que esse não se repete. É possível que os produtos possuam as mesmas
descrições, mas o código interno não.

Vamos, então, alterar a tabela e incluir a chave primária associada a tabela de


produtos ("tbproduto"). Criando mais uma área de código, insira USE sucos; e, na
próxima linha, o comando que indica que podemos alterar uma propriedade de uma
tabela existente, o ALTER TABLE tbproduto ADD PRIMARY KEY (PRODUTO);.

Quando criamos a tabela de produtos já poderíamos ter especificado a chave


primária, porém, vamos aprender como incluir em tabelas já existentes no banco de
dados.

Código:
USE sucos;

ALTER TABLE tbproduto ADD PRIMARY KEY (PRODUTO);

Será exibida a mensagem que o comando foi executado com sucesso. Para
compreender a consequencia dessa ação, vamos inserir um novo produto. Lembrando
que em aulas anteriores, excluímos o produto 1078680, então, vamos copiar o INSERT
INTO dele e incluir novamente o produto no nosso script atual e também, o comando
UPDATE, visto que a embalagem estava incorreta.

Comandos para inserir no código para incluir novamente o produto 1078680 com as
alterações:

INSERT INTO tbproduto (


PRODUTO, NOME, EMBALAGEM, TAMANHO, SABOR,
PRECO_LISTA) VALUES
('1078680', 'Frescor do Verão - 470 ml - Manga', 'Lata', '470
ml','Manga',5.18);

UPDATE tbproduto SET EMBALAGEM = 'Garrafa'


WHERE PRODUTO = '1078680';

Rodando ambos os comandos e, em seguida, o SELECT FROM tbproduto; note


que na tabela em "Result Grid" estará inserido o produto '1078680'.

Tabela:

PRODUTO NOME EMBALAGEM TAMANHO SABOR PRECO_LISTA


Light - 350 ml
1040107 Lata 350 ml Melancia 4.56
- Melancia
Clean - 2
1037797 Litros - PET 2 Litros Laranja 16.01
Laranja
Sabor da
1000889 Montanha - Garrafa 700 ml Uva 6.31
700 ml - Uva
Videira do
Campo - 1,5
1004327 PET 1,5 Litros Melancia 19.51
Litros -
Melancia
Frescor do
544931 Verão - 350 ml Lata 350 ml Limão 2.46
- Limão
Frescor do
1078680 Verão - 470 ml Garrafa 470 ml Manga 5.18
- Manga

Código completo:

USE sucos;

ALTER TABLE tbproduto ADD PRIMARY KEY (PRODUTO);


SELECT * FROM tbproduto;

INSERT INTO tbproduto (


PRODUTO, NOME, EMBALAGEM, TAMANHO, SABOR,
PRECO_LISTA) VALUES
('1078680', 'Frescor do Verão - 470 ml - Manga', 'Lata', '470
ml','Manga',5.18);

UPDATE tbproduto SET EMBALAGEM = 'Garrafa'


WHERE PRODUTO = '1078680';

Agora que temos o produto incluído e o campo produto sendo a chave primária,
vamos rodar o INSERT INTO novamente para verificar o que acontece se tentarmos
incluir um produto com o mesmo código na tabela. O MySQL retorna a mensagem de
erro "Error Code: 1062. Duplicate entry '1078680' for key 'PRIMARY'", isto é, já existe
um código com esse número na tabela e não é possível inserir esse registro duplicado.

A chave primária nos permite um maior controle sobre a tabela, não


permitindo que seja incluído dois produtos com o mesmo código. Nas boas práticas de
MySQL, o ideal é sempre especificar a chave primária de uma tabela, podendo usar o
comando CREATE TABLE e, depois, o ALTER TABLE para criar a chave primária.

programa procurou o registro para realizar a exclusão, mas não o encontrou.

Você também pode gostar