Banco de Dados com MySQL



Documentos relacionados
Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Banco de Dados. Maurício Edgar Stivanello

O que são Bancos de Dados?

Administração de Usuários e Privilégios no Banco de Dados

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

EXEMPLOS DE COMANDOS NO SQL SERVER

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

ROTEIRO. A Linguagem SQL (I parte) CEFET.PHB - PI Prof. Jefferson Silva. As partes da linguagem SQL. A Linguagem de Definição de Dados (SQL-DDL)

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Prof. Carlos Majer Aplicações Corporativas UNICID

Comandos de Manipulação

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

Banco de Dados. Prof. Antonio

Structured Query Language (SQL) Aula Prática

SQL Structured Query Language

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Minicurso3 Introdução ao Banco de Dados MySQL

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

Armazenamento organizado facilitando SCRUD; Agiliza processo de desenvolvimento de sistemas;

Linguagem de Consulta Estruturada SQL- DML

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Curso PHP Aula 08. Bruno Falcão

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

A linguagem SQL

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Modelo Cliente/Servidor Por HIARLY ALVES

MYSQL: TIPOS DE DADOS. Gilvan Vieira Moura

CIÊNCIA E TECNOLOGIA DO RIO

Programação SQL. Introdução

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

Structured Query Language (SQL)

1. Domínio dos Atributos

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

DESENVOLVIMENTO DE SOFTWARE

BANCO DE DADOS: SQL. Edson Anibal de Macedo Reis Batista. 27 de janeiro de 2010

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

SQL. Hélder Antero Amaral Nunes

Treinamento em PHP. Aula 7. Ari Stopassola Junior

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Banco de Dados Oracle 10g: Introdução à Linguagem SQL

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Notas sobre o MySQL: Resumo dos comandos no MySQL linha de comandos:

Fábio Borges de Oliveira. MySQL

Introdução ao SQL. O que é SQL?

COMPETÊNCIAS ESPECÍFICAS Compreender e utilizar a linguagem SQL, na construção e manutenção de uma base de dados.

Modelagem de banco de dados com MySQL Workbench

SQL - Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Transações Seguras em Bancos de Dados (MySQL)

Linguagem SQL Sub-linguagem DDL

SQL. Autor: Renata Viegas

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Esta aula tem o objetivo de nos orientar durante este período em nossas aulas de Banco de Dados, não tem a pretensão de ser a única fonte de

Sensor de temperatura Parte 5 Cleiton Bueno Preparando o ambiente do Banco de dados Mysql

Linguagem SQL. Comandos Básicos

MySQL. Prof. César Melo. com a ajuda de vários

Principais Comandos SQL Usados no MySql

Sumário Introdução Breve História da Linguagem SQL l 0.3 Características da Linguagem SQL A Composição deste Livro 3

Descrição Tinyint[(M)] Inteiro pequeno. Varia de 128 até +127


CREATE TABLE AUTOR ( cod_autor int not null primary key, nome_autor varchar (60) )

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

Gerenciamento de um Sistema de

Disciplina: Unidade V: Prof.: Período:

Operação de União JOIN

Escola Secundária de Albufeira. Comandos MySQL. (Páginas Web Dinâmicas: PHP e MySQL) Carlos Nunes

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Projeto de Banco de Dados: Empresa X

SQL (Structured Query Language)

Escrito por Sex, 14 de Outubro de :12 - Última atualização Seg, 26 de Março de :33

Sistemas de Banco de Dados

Linguagem de Consulta - SQL

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

SQL (Structured Query Language)

Linguagem SQL (Parte I)

SQL (Structured Query Language)

Auditoria de sistemas Deixe que seu banco de dados faça o trabalho por você

Apostila Delphi V 1.0

INTRODUÇÃO BANCO DE DADOS(MYSQL) E PHP

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

Gerência de Banco de Dados

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

Fundamentos do Sistema Gerenciador de Banco de Dados

PostgreSQL. André Luiz Fortunato da Silva Analista de Sistemas CIRP / USP alf@cirp.usp.br

trigger insert, delete, update

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

SQL (Structured Query Language)

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Transcrição:

Banco de Dados com MySQL Cleverson S Carneiro April 13, 2016 Contents 1 Desenvolvimento de Software 6 1.1 Engenharia de Software....................................... 6 1.1.1 Análise do Sistema...................................... 6 1.1.2 Projeto do Sistema...................................... 6 1.1.3 Implementação........................................ 6 1.2 Programação de Computadores................................... 6 1.3 Desenvolvimento Web........................................ 6 1.3.1 Interfaces........................................... 6 1.3.2 Serviços............................................ 6 1.3.3 Computação nas Núvens................................... 6 1.4 Banco de Dados........................................... 7 1.4.1 SGBD - Sistemas Gerenciadores de Bancos de Dados................... 7 1.4.2 SQL.............................................. 7 1.4.3 nosql............................................. 7 1.4.4 Modelo entidade relacionamento.............................. 7 2 O MySQL 8 2.1 Os clientes............................................... 8 2.1.1 phpmyadmin......................................... 8 2.1.2 Mysql Workbench...................................... 8 2.1.3 Terminal Client........................................ 8 3 Implementando o Banco de Dados 8 3.1 Mecanismos de Tabelas....................................... 8 3.1.1 MyISAM........................................... 8 3.1.2 InnoDB............................................ 8 1

3.2 Conjuntos de Caracteres....................................... 8 3.3 Criando um Banco de Dados.................................... 9 3.4 Acessando o banco de dados..................................... 9 3.5 Listando os Banco de Dados do Servidor.............................. 9 3.6 Excluindo um Banco de Dados................................... 9 3.7 Alterando um Banco de Dados................................... 10 4 Tabelas 11 4.1 Criando Tabelas........................................... 11 4.1.1 Tipos de Dados........................................ 11 4.2 Excluir................................................. 12 4.3 Listar tabelas do banco de dados.................................. 12 4.4 Exibir a Estrutura da Tabela.................................... 12 4.5 Exibir o SQL de Criação da Tabela................................. 12 4.6 Alterar................................................. 13 4.7 Renomear............................................... 13 4.7.1 Adicionar colunas...................................... 13 4.7.2 Remover coluna........................................ 13 4.7.3 Alterar coluna........................................ 13 4.7.4 Apagando registros...................................... 13 4.8 Constraint............................................... 14 4.8.1 Not NULL.......................................... 14 4.8.2 UNIQUE........................................... 14 4.8.3 Chave Primaria........................................ 14 4.8.4 Chave Estrangeira...................................... 14 5 Manipulando Dados 15 5.1 Inserindo............................................... 15 5.2 Atualizando.............................................. 15 5.3 Removendo.............................................. 15 5.4 Consultas............................................... 15 5.4.1 Operadores de Comparacao ou Relacionais........................ 16 5.4.2 Funções e Operadores.................................... 16 5.4.3 Funções Agregadoras (Group By).............................. 16 5.5 Unindo Tabelas............................................ 17 5.5.1 Inner Join........................................... 17 5.5.2 Left Join........................................... 17 2

5.5.3 Right Join........................................... 17 5.6 Sub Queries.............................................. 18 5.6.1 Consultas........................................... 18 5.6.2 Atualização.......................................... 18 5.6.3 Inserção............................................ 18 5.7 Índices................................................. 19 5.8 FullText Search............................................ 19 5.8.1 IN NATURAL LANGUAGE MODE............................ 20 5.8.2 IN BOOLEAN MODE.................................... 20 5.8.3 WITH QUERY EXPANSION................................ 20 6 Timezone 21 7 Acesso remoto e Permissões 21 7.1 Criar usuário............................................. 21 7.2 Apagar usuário............................................ 21 7.3 Conectar a um banco remoto.................................... 21 7.4 Conceder permissão......................................... 21 7.5 Remover permissão.......................................... 23 7.6 Principais Tipos de Permissão.................................... 23 8 Stored Procedures 24 8.1 Chamando uma Store Procedure.................................. 24 8.2 Parametros.............................................. 24 8.2.1 Modo IN........................................... 25 8.2.2 Modo OUT.......................................... 25 8.2.3 Modo INOUT......................................... 25 8.3 Instruções de Controle........................................ 26 8.3.1 CASE............................................. 26 8.3.2 IF............................................... 26 8.3.3 LOOP............................................. 27 8.3.4 REPEAT........................................... 28 8.3.5 WHILE............................................ 29 8.4 Percorrer resultado de pesquisa................................... 29 9 Funções 31 10 Triggers 32 3

11 Tuning 33 11.1 Monitorando Consultas Lentas................................... 33 11.2 Número máximo de conexões.................................... 33 11.3 Table Cache.............................................. 33 12 Replicação de Dados 34 12.1 Configurar Master.......................................... 34 12.2 Criação do usuário.......................................... 34 12.3 Configurar o Slave.......................................... 34 4

List of exercises Exercício 1 Meu primeiro banco..................................... 13 Exercício 2 Banco de Dados da Empresa................................ 17 Exercício 3 Tabela departamentos.................................... 20 Exercício 4 MeuBank........................................... 30 Exercício 5 Funções............................................ 31 Exercício 6 Extrato de Conta...................................... 32 Exercício 7 Transferências Agendadas................................. 33 Exercício 8 Revisão Geral........................................ 35 5

1 Desenvolvimento de Software 1.1 Engenharia de Software 1.1.1 Análise do Sistema A análise de sistemas é a atividade que tem como finalidade a realização de estudos de processos a fim de encontrar o melhor caminho racional para que a informação possa ser processada. 1.1.2 Projeto do Sistema Ao realizar o projeto ou design do sistema, o desenvolvimento analisa os requisitos de hardwares (equipamentos), softwares (programas) e os requisitos trabalhados na fase de análise. 1.1.3 Implementação É na implementação que construimos o sitema utilizando recursos e tecnologias definidas em tempo de projeto e as definições descritas em tempo de análise. 1.2 Programação de Computadores Programação é o processo de escrita, teste e manutenção de um programa de computador. Diferentes partes de um programa podem ser escritas em diferentes linguagens. Há várias décadas se debate se a programação é mais semelhante a uma arte (Donald Knuth), a uma ciência, à matemática (Edsger Dijkstra), à engenharia (David Parnas), ou se é um campo completamente novo. 1.3 Desenvolvimento Web 1.3.1 Interfaces HTML, CSS, JavaScript? 1.3.2 Serviços PHP, Java, Python, JavaScript (Node.js), Banco de Dados 1.3.3 Computação nas Núvens https://cloud.google.com/ https://cloud.google.com/sql/ 6

1.4 Banco de Dados Bancos de dados é um conjunto de arquivos organizados e que se relacionam entre si de forma a criar algum sentido e melhorar a eficiência para o acesso aos dados. 1.4.1 SGBD - Sistemas Gerenciadores de Bancos de Dados É o conjunto de softwares responsáveis pelo gerenciamento de um banco de dados. Seu principal objetivo é retirar da aplicação cliente a responsabilidade de gerenciar o acesso, a manipulação e a organização dos dados. O SGBD disponibiliza uma interface para que seus clientes possam incluir, alterar ou consultar dados previamente armazenados. 1.4.2 SQL A Linguagem de Consulta Estruturada (Structured Query Language) é utilizada para manipulação de tabelas de dados. É a linguagem universal para manipular bancos de dados relacionais. Grupos de comandos DML Linguagem de Manipulação de Dados (INSERT, DELETE, UPDATE, SELECT...) DDL Linguagem de Definição de Dados (CREATE, DROP, ALTER...) DCL Linguagem de Controle de Dados (GRANT, REVOKE, DROP USER...) 1.4.3 nosql Bancos de dados nosql utilizam formas especificas para organizar e acessar seus dados. Exemplos: Redis - Chave e Valor; MongoDB - Documentos; Neo4j - Grafos A melhor vantagem é escalabilidade e performance. 1.4.4 Modelo entidade relacionamento É um modelo de diagramas que descreve o modelo de dados de um sistema com alto nível de abstração. http://cin.ufpe.br/~alco/gdi/arquivos/modelo%20e-r%20(chen)_v2.jpg 7

2 O MySQL 2.1 Os clientes Os três principais clientes para acesso ao servidor MySQL são: 2.1.1 phpmyadmin Cliente Web https://www.phpmyadmin.net/ 2.1.2 Mysql Workbench Cliente Desktop - https://www.mysql.com/products/workbench/ 2.1.3 Terminal Client > mysql [OPTIONS] [database] Exemplo: mysql -u root -p 3 Implementando o Banco de Dados 3.1 Mecanismos de Tabelas Os dois principais mecanismos de tabelas do MySQL: 3.1.1 MyISAM Este é o mecanismo padrão pois apresenta a melhor performance de consulta. No geral quando a aplicação possui bastante leitura e pouca escrita, este é o melhor mecanismo. Não dá suporte a transações e no momento das alteração dos registros o MyISAM efetua bloqueio de tabela. 3.1.2 InnoDB InnoDB funciona mais rápido que MyISAM quando há modificações constantes nos dados. Este mecanismo é mais recomendado para estrutura mais complexas por permitir uso de transações e efetuar bloqueios a nível de registros. Referência: http://dev.mysql.com/doc/refman/5.5/en/storage-engines.html 3.2 Conjuntos de Caracteres Conjunto e subconjunto de caracteres mais utilizados: latin1 (iso-8859-1) / latin1 swedish ci 8

utf8 / utf8 general ci http://pt.stackoverflow.com/questions/27519/quando-usar-ansi-e-quando-usar-utf-8 3.3 Criando um Banco de Dados CREATE DATABASE <nome> [CHARACTER SET <conjunto>] [COLLATE <subconjunto>] Exemplos: CREATE DATABASE meudb; CREATE DATABASE meudb CHARACTER SET latin1 COLLATE latin1$\ $swedish$\ $ci; CREATE DATABASE meudb CHARACTER SET utf8 COLLATE utf8$\ $general$\ $ci; Mais detalhes: https://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html 3.4 Acessando o banco de dados Após conectar no servidor MySQL é possível acessar os dados do banco de dados colocando o nome do banco nas consultas. Exemplo: SELECT FROM <nomedobanco>.<nomedatabela> Ou primeiramente ativando o banco de dados para não precisar informar o banco a cada novo SQL. Exemplo: USE <nomedobanco> SELECT FROM <nomedotabela>; 3.5 Listando os Banco de Dados do Servidor Para listar os banco de dados no servidor, utilize o comando: SHOW DATABASES; 3.6 Excluindo um Banco de Dados DROP <banco de dados> 9

3.7 Alterando um Banco de Dados Um banco de dados pode apenas ter a definição de conjunto de caracteres alterado. renomear o banco de dados. Não é possível ALTER DATABASE <nome> [CHARACTER SET <conjunto>] [COLLATE <subconjunto>] Visualizando banco de dados 10

4 Tabelas 4.1 Criando Tabelas CREATE TABLE <nome da tabela> (<nome da coluna> <tipo da coluna>,...) Referência: http://dev.mysql.com/doc/refman/5.5/en/create-table.html 4.1.1 Tipos de Dados Table 1: Tipos Textos Tipo Número de Bytes Limite CHAR(M) M M < 255 VARCHAR(M) M M < 255 TINYTEXT M+1 < 255 TEXT M+2 < 65.535 MEDIUMTEXT M+3 < 16.777.215 LONGTEXT M+4 < 4.294.967.295 ENUM até 2 1 a 65.535 valores SET até 8 1 a 64 valores Table 2: Tipos numéricos Tipo Número de Bytes Limite TINYINT[(M)] 1-128 a 127 0 a 255 (UNSIGNED) SMALLINT[(M)] 2-32.768 a 32.767 0 a 65.535 (UNSIGNED) MEDIUMINT[(M)] 3-8.388.608 a 8.388.607 0 A 16.777.215 (UNSIGNED) INT[(M)] 4-2.147.483.648 a 2.147.483.647 0 A 4.294.967.295 (UNSIGNED) BIGINT[(M)] 8-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 0 a 18.446.744.073.709.551.615 (UNSIGNED) FLOAT[(M, D)] 4 DOUBLE[(M, D)] / REAL[(M, D)] 8 DECIMAL[(M[, D])] / NUMERIC[(M[, D])] Varia -3.402823466e+38 a -1.17544351e-38 1.175494351e-38 a 3.402823466e+38 (UNSIGNED) -1.7976931348623157e+308 a -2.2250738585072014e-308 2.2250738585072014E-308 A 1.7976931348623157E+308 (UNSIGNED) -1.7976931348623157e+308 a -2.2250738585072014e-308 2.2250738585072014E-308 a 1.7976931348623157E+308 (UNSIGNED) 11

Table 3: Data e Hora Tipo Número de Bytes Formato DATE 3 YYYY-MM-DD TIME 3 hh:mm:ss DATETIME 8 YYYY-MM-DD hh:mm:ss TIMESTAMP 4 YYYYMMDDHHMMSS YEAR[(2 ou 4)] 1 YY ou YYYY Table 4: Tipos Binários Tipo Número de Bytes Limite BIT[(M)] (M + 7)/8 0 ou 1 TINYBLOB M+1 0 a 255 BLOB M+1 0 a 65.535 MEDIUMBLOB M+3 0 a 1.677.215 LONGBLOB M+4 0 a 4.294.967.295 4.2 Excluir DROP TABLE contato; 4.3 Listar tabelas do banco de dados SHOW TABLES; 4.4 Exibir a Estrutura da Tabela Para visualizar a definição/descrição da sua tabela, utilize o comando: DESC <nome da tabela>; 4.5 Exibir o SQL de Criação da Tabela SHOW CREATE TABLE <nome da tabela>; 12

4.6 Alterar ALTER TABLE <nome da tabela> <opcoes> 4.7 Renomear ALTER TABLE <nome da tabela> RENAME TO <novo nome> 4.7.1 Adicionar colunas ALTER TABLE <nome da tabela> ADD <nome da coluna> <tipo de dado> [NULL NOT NULL] [DEFAULT <valor>] 4.7.2 Remover coluna ALTER TABLE <nome da tabela> DROP <nome da coluna> 4.7.3 Alterar coluna ALTER TABLE <nome da tabela> CHANGE <nome da coluna> <novo nome da coluna> <tipo de dado> [NULL NOT NULL] [DEFAULT <valor>] 4.7.4 Apagando registros TRUCANTE <nome da tabela> Exercício 1 Meu primeiro banco Criar um banco de dados com o nome Agenda 1. Crie tabelas de forma a armazenar os seguintes dados: Nome, Data de Nascimento, Telefone Residencial, Telefone Comercial, E-mail, Endereço Residencial e Comerical (Rua, Número, Bairro, CEP, Cidade, Estado) 13

4.8 Constraint Regras que restringem os valores que os campos das tabelas podem assumir. 4.8.1 Not NULL ALTER TABLE <nome da tabela> MODIFY nome VARCHAR(50) NOT NULL; 4.8.2 UNIQUE ALTER TABLE <nome da tabela> ADD UNIQUE (nome); 4.8.3 Chave Primaria ALTER TABLE <nome da tabela> ADD PRIMARY KEY (id); 4.8.4 Chave Estrangeira ALTER TABLE <nome da tabela> ADD CONSTRAINT funcionarios cargos FOREIGN KEY ( cargo ) REFERENCES <nome da tabela de referencia> ( cargo ); 14

5 Manipulando Dados 5.1 Inserindo INSERT INTO contatos (nome, email, telefone, data criacao) VALUES ( Cleverson, cleverson. carneiro@gmail.com, 4191919191, now()); 5.2 Atualizando UPDATE contatos SET nome = Cleverson Carneiro WHERE id = 1; 5.3 Removendo DELETE FROM contatos WHERE id = 1; 5.4 Consultas SELECT FROM contatos; SELECT FROM contatos WHERE id = 1; SELECT FROM contatos WHERE id in (1,2); SELECT FROM contatos ORDER BY nome; SELECT FROM contatos ORDER BY data criacao desc; SELECT FROM contatos LIMIT 2; A instrução LIKE é utilizada para realizar buscas em partes do conteúdo. SELECT FROM contatos WHERE nome LIKE C% SELECT FROM contatos WHERE nome LIKE %de% SELECT FROM contatos WHERE nome LIKE %s 15

5.4.1 Operadores de Comparacao ou Relacionais Operador Descrição > Maior do que < Menor do que = Igual a <> ou!= Diferente de >= Maior ou igual a <= Menor ou igual a <=> Igual para Null 5.4.2 Funções e Operadores http://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html 5.4.3 Funções Agregadoras (Group By) Nome AVG() BIT AND() BIT OR() BIT XOR() COUNT(DISTINCT) COUNT() GROUP CONCAT() MAX() MIN() STD() STDDEV POP() STDDEV SAMP() STDDEV() SUM() VAR POP() VAR SAMP() VARIANCE() Descrição Valor médio do argumento Operação AND bit a bit Operação OR bit a bit Operação XOR bit a bit Contagem de número de diferentes valores Contagem do número de linhas retornadas Retorna uma string concatenada Valor máximo Valor mínimo Desvio padrão da população Desvio padrão da população Desvio padrão da amostra Desvio padrão da população Soma Variância padrão da população Variação da amostra Variância padrão da população 16

5.5 Unindo Tabelas 5.5.1 Inner Join Retorna dados apenas quando as duas tabelas tem chaves 5.5.2 Left Join Retorna todos os dados da tabela a esquera e apenas os registros que possuem chaves da tabela a direita. 5.5.3 Right Join Retorna todos os dados da tabela a direita e apenas os registros que possuem chaves da tabela a esquerda. Exercício 2 Banco de Dados da Empresa 1. Criar um banco de dados chamado MinhaEmpresa 2. Criar as tabelas e seus relacionamentos conforme diagrama ER da Figura 1 da Página 18. 3. Inserir os registros contidos no arquivo http://cleverson.com.br/mysql/minhaempresainserts. sql 4. Altere a tabela funcionarios e não permita que exita CPF iguais 5. Altere a tabela funcionarios e defina que o salário default será 501.32 6. Inserir um novo funcionario sem salário 7. Inserir despesas para 2 funcionarios. É possível lançar despesas para um setor diferente ao qual o funcionario foi cadastrado? 8. Faça uma consulta que mostre apenas os campos nome e sexo de todos funcionarios. 9. Faça uma consulta que mostre todos os campos dos funcionários e que o resultado seja exibido na ordem decrescente de salário. 10. Atualize o cargo Vendedor para Agente de Vendas. 11. Faça uma consulta que mostre quantos funcionarios existem por sexo. 12. Faça uma consulta que mostre a soma dos salários dos funcionarios do setor 2. 13. Em uma só consulta mostre o nome e cargo de todos os funcionarios. 14. Em uma só consulta mostre o nome, setor e cargo de todos os funcionarios cujo orçamento do setor seja maior que 5000. 17

Figure 1: Esquema do Banco de Dados MinhaEmpresa 5.6 Sub Queries 5.6.1 Consultas SELECT FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2); SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2); SELECT FROM t1 WHERE id IN (SELECT id FROM t2); SELECT FROM t1 WHERE id NOT IN (SELECT id FROM t2); SELECT FROM t1 WHERE (col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10); 5.6.2 Atualização UPDATE <nome da tabela> SET <nome da coluna> = ( SELECT <nome da coluna> FROM < nome da outra tabela> b WHERE <nome da tabela>.name = <nome da outra tabela>.name ) 5.6.3 Inserção INSERT INTO qa costpriceslog (item code, invoice code, item costprice) SELECT 1 AS item code, 18

2 AS invoice code, item costprice FROM qa items WHERE item code = 1; Ver mais: http://dev.mysql.com/doc/refman/5.5/en/subqueries.html 5.7 Índices Criando junto com a tabela: CREATE TABLE CLIENTES ( Codigo INT, Nome VARCHAR(50), INDEX (Codigo) ); Criando indice após criação da tabela: CREATE INDEX idx CLIENTES CODIGO ON CLIENTES(Codigo); 5.8 FullText Search FULLTEXT SEARCH é um mecanismo de busca que permite procurar termos em meio a grande volume de textos. Ao criar um indice Fulltext para uma coluna, faz com que seja criado uma entrada no indice para cada palavra colocada na coluna. Até a versão 5.5 do Mysql, os indices Fulltext são permitidos apenas para tabelas MyISAM. A partir da 5.6, também são permitidas na InnoDB. Realizar busca com a instrução LIKE Exemplo: SELECT FROM contas WHERE nome LIKE Cl% ; SELECT FROM contas WHERE nome LIKE %on ; SELECT FROM contas WHERE nome LIKE %de% ; Para criar um index fulltext index utilize: CREATE FULLTEXT index ON contas(nome); Realizar buscas Fulltext envolve os operadores MATCH e AGAINST: SELECT FROM contas WHERE MATCH(nome) AGAINST ( Cleverson ); 19

Os valore são retornados por relevância. A relevância é calculada com base no número de palavras na linha, com o número de palavras únicas nessa linha, o número total de palavras nos registros, o número de documentos (linhas) que contenham uma determinada palavra. Existem três tipos de buscas fulltext: 5.8.1 IN NATURAL LANGUAGE MODE Utilizado por default, realiza uma busca em linguagem natural (ignorando por exemplo acentos e maiúscula/minúscula) 5.8.2 IN BOOLEAN MODE Utiliza as palavras da busca com operadores lógicos. Operadores: Sinal Sinal Sinal + Sinal < Sinal > Sinal Sinal Entre aspas Entre parenteses ( ) Descrição Indica que a palavra não deve estar no resultado Indica que a palavra deve estar no resultado Palavra tem menos relevância Palavra tem mais relevância Indica que a palavra deve tem relevância negativa na busca Utilizado com curinga mas apenas no final da palavra Retorna busca que possuem exatamente este texto Agrupa palavras e subexpressões 5.8.3 WITH QUERY EXPANSION Expande a busca para palavras não digitadas. Por exemplo, ao buscar por MySQL, Oracle, Postgres ele poderá expandir a busca para banco de dados Exercício 3 Tabela departamentos 1. Crie uma tabela departamentos com os campos id e nome do departamento. Faça os seguintes inserts: INSERT INTO departamentos (id, nome) VALUES (1, TI ); INSERT INTO departamentos (id, nome) VALUES (2, Marketing ); INSERT INTO departamentos (id, nome) VALUES (3, Financeiro ); Realize o JOIN entre as tabelas cargos e departamentos Criando Visualizações CREATE VIEW nome da view AS sql 20

6 Timezone 7 Acesso remoto e Permissões É possível gerenciar as permissões em quatro níveis: Servidor: Garante o acesso a este usuário a todos os BDs de forma irrestrita em um determinado servidor. As informações ficam armazenados na tabela mysql.user. Banco de dados: Garante o acesso a este usuário a todas as tabelas de um determinado BD. As informações ficam armazenados na tabela mysql.db e mysql.host. Tabelas: Garante o acesso apenas a uma determinada tabela. As informações dos privilégios deste nível ficam armazenados na tabela mysql.tables p riv. Colunas: Garante o acesso a este usuário apenas a uma determinada coluna de uma tabela de um BD. As informações ficam na tabela mysql.columns p riv. 7.1 Criar usuário CREATE USER novousuario @ localhost IDENTIFIED BY password ; 7.2 Apagar usuário DROP USER demo@localhost; 7.3 Conectar a um banco remoto mysql -u [nome do usuário]-p [-h ip] 7.4 Conceder permissão GRANT [tipo de permisso] [colunas] ON [nome da base de dados].[nome da tabela] TO [nome do usurio] @ localhost; Exemplos: GRANT ALL PRIVILEGES ON. TO usuariol@localhost IDENTIFIED BY abc123 ; Cria o usuário1 no servidor localhost, com senha de acesso definida como abc123, com todos os privilégios (ALL PRIVILEGES) a todos os BDs e tabelas. 21

GRANT ALL PRIVILEGES ON. TO usuariol@localhost IDENTIFIED BY abcl23 WITH GRANT OPTION; Idem, com a possibilidade de conceder seus privilégios a outros usuários. GRANT ALL PRIVILEGES ON. TO usuario2@ \% IDENTIFIED BY abc123 WITH GRANT OPTION; Cria o usuario2 no servidor localhost com senha de acesso = abc123 com todos os privilégios. Neste exemplo é omitido o nome do host e em seu lugar é usado o símbolo % (percentagem), um curinga que indica a criação do usuário específico em qualquer máquina do domínio host. GRANT SELECT (NOME, SALRIO) ON virtual.cadfun TO usuario3@localhost IDENTIFIED BY abcl23 ; Cria o usuario3 no servidor localhost com senha de acesso = abc123 e informa que esse usuário pode apenas acessar as colunas NOME e SALÁRIO da tabela cadfun do BD virtual. GRANT UPDATE, INSERT ON virtual. TO usuario4@localhost IDENTIFIED BY abcl23 ; Cria o usuario4 no servidor localhost com senha de acesso = abc123 e informa que esse usuário pode executar os comandos UPDATE e INSERT em qualquer tabela do BD virtual. Para verificar as tabelas do MySql que controlam estes direitos (user, db, host, tables priv e columns priv), vamos olhar o conteúdo do bd de controle do MySql. Digite: SHOW DATABASES; USE mysql; SHOW TABLES; DESCRIBE user; SELECT FROM user; DESCRIBE host; SELECT FROM host; DESCRIBE db; SELECT FROM db; DESCRIBE tables priv; SELECT FROM tables priv; DESCRIBE columns priv; SELECT FROM columns priv; 22

FLUSH PRIVILEGES; 7.5 Remover permissão REVOKE [tipo de permisso] [colunas] ON [nome da base de dados].[nome da tabela] FROM [nome do usurio]@localhost; 7.6 Principais Tipos de Permissão Tipo ALL [PRIVILEGES] ALTER ALTER ROUTINE CREATE CREATE ROUTINE CREATE USER CREATE VIEW DELETE DROP EVENT EXECUTE GRANT OPTION INDEX INSERT LOCK TABLES REFERENCES SELECT SHOW DATABASES SHOW VIEW TRIGGER UPDATE Descrição Todos os privilégios menos GRANT OPTION Permite ALTER TABLE para database, table. Permite alterar ou apagar stored routines Permite criar database ou tables Permite criar stored routine Permite criar, remover, renomear usuários Permite criar views Permite apagar registros Permite remover databases, tables, e views Permite use de Event Scheduler Permite executar stored routines Permite alterar regras de permissão Permite criar ou apagar indexs Permite insert Permite Lock em tabelas Permite criação de foreign key Permite visualizar dados (database, table e coluna) Permite exibir databases Permite exibir Views Permite utilizar trigger Permite efetuar update (database, table e column) 23

8 Stored Procedures É o nome dado ao recurso que permite armazenar no banco de dados um conjunto/bloco de instruções que podem receber parametros, executar operações em diversas tabelas e retornar valores. Vantagens: Centralização Segurança Velocidade Transacional Estrutura: DELIMITER $$ CREATE PROCEDURE <nome> ( <parametros> ) BEGIN <corpo> END $$ DELIMITER ; Exemplo: CREATE PROCEDURE mostrarnumeroaleatorio () BEGIN SELECT RAND(); END $$ DELIMITER ; 8.1 Chamando uma Store Procedure Como chamar a Store Procedure: Exemplo: CALL mostrarnumeroaleatorio(); 8.2 Parametros (MODO nome TIPO, MODO nome TIPO,... ) 24

8.2.1 Modo IN Indica que o parâmetro é apenas para entrada. CREATE PROCEDURE mostrarnumeroaleatorionointervalo (IN de INT, IN ate INT) BEGIN SELECT FLOOR( ( RAND() (de ate + 1) ) + ate); END $$ DELIMITER ; CALL mostrarnumeroaleatorioentre(3, 8); 8.2.2 Modo OUT Indica que o parâmetro é apenas de saída. DELIMITER $$ CREATE PROCEDURE quantidadefuncionarios (OUT quantidade INT) BEGIN SELECT COUNT( ) INTO quantidade FROM funcionarios; END $$ DELIMITER ; CALL quantidadefuncionarios(@total); SELECT @total; DELIMITER $$ CREATE PROCEDURE elevaraoquadrado (OUT numero INT) BEGIN SET numero = numero numero; END $$ DELIMITER ; SET @valor = 5; CALL elevaraoquadrado(@valor); SELECT @valor; 8.2.3 Modo INOUT Indica que o parâmetro é de entrada e saída. 25

8.3 Instruções de Controle 8.3.1 CASE CASE case value WHEN when value THEN statement list [WHEN when value THEN statement list]... [ELSE statement list] END CASE Exemplo: DELIMITER $$ CREATE PROCEDURE p() BEGIN DECLARE v INT DEFAULT 1; CASE v WHEN 2 THEN SELECT v; WHEN 3 THEN SELECT 0; ELSE BEGIN END; END CASE; END $$ DELIMITER ; 8.3.2 IF IF search condition THEN statement list [ELSEIF search condition THEN statement list]... [ELSE statement list] END IF Exemplo: DELIMITER $$ CREATE PROCEDURE inserecargo(p nome VARCHAR(50), p id departamento int) BEGIN IF (p nome!= ) THEN INSERT INTO cargos (cargo, id departamento) VALUES (p nome, p id departamento); 26

ELSE SELECT Nome deve ser fornecido! AS Msg; END IF; END $$ DELIMITER ; Exemplo: DELIMITER $$ CREATE PROCEDURE inserefuncionario(in p id INT, IN p nome VARCHAR(50), IN p cargo varchar(50)) BEGIN DECLARE excessao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excessao = 1; START TRANSACTION; IF (p id > 0 AND p nome <> AND p cargo <> ) THEN INSERT INTO funcionarios (id, nome, cargo) VALUES (p id, p nome, p cargo); IF excessao = 1 THEN SELECT Erro ao inserir funcionario AS Msg; ROLLBACK; ELSE SELECT Cadastro efetuado com sucesso AS Msg; COMMIT; END IF; ELSE SELECT \ $Parametros invlidos\ AS Msg; END IF; END $$ DELIMITER ; 8.3.3 LOOP 27

[begin label:] LOOP statement list END LOOP [end label] Exemplo: DELIMITER $$ CREATE PROCEDURE doiterate(p1 INT) BEGIN label1: LOOP SET p1 = p1 + 1; IF p1 < 10 THEN ITERATE label1; END IF; LEAVE label1; END LOOP label1; SET @x = p1; END $$ DELIMITER ; 8.3.4 REPEAT [begin label:] REPEAT statement list UNTIL search condition END REPEAT [end label] Exemplo: DELIMITER $$ CREATE PROCEDURE dorepeat(p1 INT) BEGIN SET @x = 0; REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT; END $$ DELIMITER ; 28

8.3.5 WHILE [begin label:] WHILE search condition DO statement list END WHILE [end label] Exemplo: DELIMITER $$ CREATE PROCEDURE dowhile() BEGIN DECLARE v1 INT DEFAULT 5; WHILE v1 > 0 DO... SET v1 = v1 1; END WHILE; END $$ DELIMITER ; 8.4 Percorrer resultado de pesquisa 29

Exercício 4 MeuBank Criar um mini sistema bancário 1. Crie um banco de dados chamado MeuBanco com o CHARACTER utf8 e COLLATE utf8 general ci 2. No novo banco de dados, crie a tabela abaixo: CREATE TABLE contas ( id INT NOT NULL, agencia INT, saldo NUMERIC(10,2), PRIMARY KEY (id) ) ENGINE = InnoDB; 3. Criar uma procedure que gere valores aleatórios para a tabela contas. (Dica: Execute a query SELECT floor( ( rand() * (8-3 + 1) ) + 3); e analise o resultado ) 4. Crie duas VIEWs: View que exiba a soma de saldos de todos os clientes (Dica: Utilizar a função SUM) View que exiba a soma de saldos por agência (Dica: Utilizar a instrução GROUP BY) 5. Crie uma tabela chamada transferencia (Do tipo InnoDB) com as colunas: id (com auto increment) id conta origem id conta destino valor 6. Na tabela transferencia, defina as colunas id c onta o rigemeid c onta d estinocomof OREINGKEY databelacontascolun 7. A assinatura da store procedure deverá ser executartransferencia (valor, contaorigem, contadestino) Os passos para transferir a conta são: 1. Diminuir saldo conta origem 2. Aumentar saldo conta destino 3. Registrar transferencia na tabela transferencia Caso ocorra algum erro em qualquer uma das 3 queries, a procedure deverá realizar Rollback; 30

9 Funções Embora a declaração de funções seja muito parecida com as de Store Procedures, sua utilização é apenas para pequenas operações como calculo e manipulação de strings. DELIMITER $$ CREATE FUNCTION ola(nome VARCHAR(20)) RETURNS VARCHAR(50) BEGIN RETURN CONCAT( Ola, nome,!!! ); END $$ DELIMITER ; Exercício 5 Funções Criar funções 1. Criar uma função gerarnumero(de, ate) que gere um numero aleatorio entre os parametros de e até Dica: SELECT floor( ( rand() * (de - ate + 1) ) + ate); 2. Criar uma função gerarnome que gere um nome aleatorio Dica: SELECT substring( abcdefghijklmnopqrstuvwxyz, rand()*26+1, 1); 3. Alterar a procudere que gera contas aleatorias e inserir o nome do cliente alter table contas add column nome varchar(128); Dica: gerarnome(gerarnumero(5,12)); 31

10 Triggers CREATE TRIGGER <nome> { BEFORE AFTER } { INSERT UPDATE DELETE } ON < nome da table> FOR EACH ROW <comandos> Exemplo: delimiter $$ CREATE TRIGGER saldo positivo BEFORE UPDATE ON contas FOR EACH ROW BEGIN IF NEW.saldo < 0 THEN SET NEW.saldo = 0; END; $$ delimiter ; Exercício 6 Extrato de Conta Criar funções 1. Crie uma tabela Extrato com as colunas (id auto increment, id conta, data, valor). 2. Crie uma trigger que para cada INSERT na tabela transferencia gere um insert na tabela extrato. Sendo que se a conta for a origem da transferencia o campo valor deve entrar como negativo e se a conta for destino na transferência o valor deve entrar como positivo. Eventos Habilitar eventos: SET GLOBAL event s cheduler = ON; CREATE EVENT <nome> ON SCHEDULE schedule AT { timestamp EVERY interval [YEAR QUARTER MONTH DAY HOUR MINUTE WEEK SECOND YEAR MONTH DAY HOUR DAY MINUTE DAY SECOND HOUR MINUTE HOUR SECOND MINUTE SECOND] } DO <comandos>; Exemplo: CREATE TABLE mensagens (data TIMESTAMP DEFAULT CURRENT TIMESTAMP, msg varchar(200)); CREATE EVENT ola ON SCHEDULE EVERY 30 SECOND DO INSERT INTO mensagens (msg) VALUES ( ola ); 32

Exercício 7 Transferências Agendadas 1. Crie uma tabela transferencia agendada com as colunas: (id auto increment, id conta origem, id conta destino, data hora agendamento, valor). 2. Crie um evento que a cada 1 minuto consulta a tabela transferencia agendada e verifica se possui uma transferência vencida que deve ser realizada. 11 Tuning 11.1 Monitorando Consultas Lentas Para analisar possíveis gargalos no seu banco de dados, é possível monitorar as consultas lentas. arquivo my.cnf [mysqld]... long q uery time = 1log slow queries = /var/log/mysql slow.log No 11.2 Número máximo de conexões Determina o número máximo de conexões simultâneas. Deve ser aumentado de acordo com a necessidade. No arquivo my.cnf [mysqld]... max connections = 200 Para verificar as conexões atuais: mysql show processlist 11.3 Table Cache Toda vez que o MySQL abre uma tabela, ele coloca os dados em cache. A variável table cache define quantas tabelas poderão estar em cache simultaneamente. [mysqld]... table cache = max c onnections n 33

12 Replicação de Dados Vantagens: Equilíbrio de carga Distribuição de dados Backup Alta disponibilidade Primeiramente deve-se criar uma conta de usuário com permissão de replicação para os servidores tanto no master quanto no slave. 12.1 Configurar Master SHOW GLOBAL VARIABLES WHERE Variable name = log bin ; Ativar o log binário e especificar um ID do servidor log-bin = mysql-bin server-id = 1 SHOW MASTER STATUS 12.2 Criação do usuário CREATE USER replicador IDENTIFIED BY replica; GRANT replication slave, replication client on. to replicador$\@$ 192.168.56.$\%$ identified by replica ; 12.3 Configurar o Slave CHANGE MASTER TO MASTER HOST= 192.168.56.101, MASTER USER= replicador, MASTER PASSWORD= replica, MASTER LOG FILE= mysql bin.000001, MASTER LOG POS =0; log-bin = mysql-bin server-id = 2 START SLAVE; SHOW SLAVE STATUS; 34

Exercício 8 Revisão Geral 1. Criar um banco de dados dbempresa, com a estrutura de tabelas conforme o diagrama de Entidade e Relacionamento (Diagrama) 2. Criar as chaves estrangeiras entre as tabelas: a) Na tabela despesas, criar as FKs despesa setor e despesa funcionario. b) Na tabela funcionarios, criar as FKs funcionario setor e funcionario cargo. 3. Realizar pelo menos 3 inserts em cada tabela. 4. Consultas a) Criar uma consulta na tabela setores ordenando pelos setores com menor orçamento b) Criar uma consulta na tabela despesas filtrando despesas com data Maior e Menor que uma determinada data. c) Criar uma consulta na tabela funcionarios agrupando por código do cargo. d) Criar uma consulta na tabela funcionarios exibindo o nome do setor e do cargo. e) Criar uma consulta na tabela cargos exibindo o cargo e a soma das despesas dos funcionarios daquele cargo. 5. Segurança a) Criar um usuário chamado auxfinanceiro que podera apenas realizar select na tabela despesas. b) Criar um usuário chamado rh que poderá fazer SELECT, UPDATE e INSERT nas tabelas funcionarios e cargos, porém não poderá apagar nenhum registro destas tabelas 6. Criar uma procedure chamada registrardespesa que recebe uma valor decimal e o código do funcionario: a) A procedure deve inserir um novo registro na tabela despesa. b) A procedure deve diminuir 10% do valor da despesa no salário do funcionario 35