Вы находитесь на странице: 1из 11

MySQL

Objetivos o objetivo desta semana aprendermos sobre as principais estruturas de dados utilizadas pelo MySQL (databases, tabelas, etc.), e os comandos principais para a definio dessas estruturas (criao, alterao e remoo de objetos de dados utilizando DDL Linguagem de Definio de Dados) e manipulao dos dados dentro destas estruturas (insero, atualizao, remoo e consulta utilizando DML Linguagem de Manipulao de Dados). Databases Dentro de um servidor MySQL, podemos ter um ou mais databases (bancos de dados em ingls). Um database contm todos os objetos de dados (iremos v-los com detalhes mais adiante) criados para uma determinada finalidade. Por exemplo, suponha que em um mesmo servidor, tenhamos um sistema de pagamento, um sistema de controle de automveis de uma empresa, e um sistema de protocolo, cada um com seus conjuntos de informaes.

Em cada um destes databases, teremos as informaes relativas a cada uma das aplicaes, dentro dos objetos de dados daquela database. No MySQL, um sinnimo para database schema. Todos os comandos com DATABASE tambm podem ser escritos com SCHEMA. Por exemplo: mysql> CREATE DATABASE teste; a mesma coisa que mysql> CREATE SCHEMA teste;

Criando databases Para criar um novo database no MySQL, utilize o comando CREATE DATABASE. A sintaxe dele a seguinte: mysql> CREATE DATABASE nome_do_banco; Se voc tentar criar um database com o mesmo nome de outro que j exista no servidor, ocorrer um erro. Neste comando, h duas clusulas opcionais: CHARACTER SET e COLLATE, que permitem a voc definir para este database, respectivamente, qual conjunto de caracteres ser utilizado e as regras para comparao de caracteres. Um exemplo de uso destas clusulas: mysql> CREATE DATABASE teste CHARACTER SET utf8 COLLATE utf8_danish_ci; Alterando databases Para alterar uma opo do database, utilizamos o comando ALTER DATABASE, seguido da opo que dever ser alterada. As nicas opes que podem ser alteradas so as mesmas usadas no CREATE DATABASE, ou seja, CHARACTER SET ou COLLATE. Por exemplo, o comando abaixo altera a opo COLLATE de um database de nome teste: mysql> ALTER DATABASE teste COLLATE utf8_polish_ci; O prximo comando antera as duas opes: mysql> ALTER DATABASE teste CHARACTER SET latin1 COLLATE utf8_polish_ci; Se voc no selecionar um nome de um database, o comando ir alterar o database que est em uso no momento. Se no tiver nenhum database selecionado para uso, ocorrer um erro. Para mudar o nome de um database, no se pode usar o comando ALTER DATABASE. Uma maneira de fazer isto realizar um backup (cpia de segurana) dos dados do database, criar um database com o novo nome e restaurar os dados do backup para este novo database. Finalmente, remove-se o database antigo. Removendo databases Para remover um database e todos os seus objetos de dados, utiliza-se o comando: mysql> DROP DATABASE nome_do_banco; Mostrando informaes de databases O comando SHOW DATABASES mostra uma relao dos databases existentes no servidor MySQL. O comando: mysql> show databases; Trar como retorno algo como a figura abaixo:

Selecionando um database para trabalho Como j vimos, em um servidor MySQL temos mais de um database. Ento, para selecionar um database para trabalharmos, utilizamos o seguinte comando: mysql> USE nome_do_banco (no precisa usar ponto-e-vrgula aqui) A partir deste comando, os prximos comandos sero executados (a no ser que especifique explicitamente o database) no banco que foi definido. Por exemplo, se quisermos trabalhar com o database test, usamos o comando: mysql> USE test
Database changed

Principais tipos de dados suportados pelo MySQL O MySQL permite o armazenamento de vrios tipos de dados, e importante saber os tipos de dados disponveis para que possamos definir as nossas tabelas de maneira apropriada para a informao que elas iro conter. Os tipos de dados so agrupados em trs categorias: - Valores numricos Para armazenar valores numricos, o MySQL fornece diversos tipos de dados para nmeros inteiros, nmeros de ponto flutuante, etc. A escolha do tipo mais adequado vai depender dos seguintes fatores: 1- A faixa de valores dos dados 2- A quantidade de espao de armazenamento necessrio para os valores da coluna 3- A preciso e a escala para nmeros de ponto flutuante e com ponto decimal. Os tipos de dados para nmeros inteiros so:

SMALLINT sem sinal s vai at 65535. Como foi informado que o menor valor da faixa 000000, ento pode-se usar o tipo sem sinal. Para os nmeros de ponto flutuante, temos os tipos de dados FLOAT e DOUBLE. O tipo FLOAT ocupa quatro bytes de armazenamento e serve para valores de ponto flutuante com preciso simples. O tipo DOUBLE representa valores de ponto flutuante com preciso dupla e requerem oito bytes para armazenamento. Voc pode especificar a preciso e a escala do tipo, ou seja, o nmero de dgitos significativos e o nmero de casas decimais direita do ponto decimal, da seguinte forma: FLOAT(n,m) ou DOUBLE(n,m), onde n a preciso de n dgitos, e m a escala de m dgitos. Por exemplo: FLOAT(10,3) especifica um tipo de ponto flutuante com uma preciso de 10 dgitos e uma escala de 3 decimais. Se no especificar a preciso ou escala, o MySQL ir utilizar a mxima preciso permitida pelo hardware do computador onde o servidor est instalado. Para valores de ponto fixo, utilizamos o tipo DECIMAL. Ele usado para representar de maneira exata nmeros que tm uma parte inteira e/ou uma parte fracionria. Todos os valores do tipo DECIMAL tm o mesmo nmero de casas decimais. Eles no so processados de maneira to eficiente como os tipos FLOAT ou DOUBLE, mas valores do tipo DECIMAL no esto sujeitos a erros de arredondamento. So mais precisos. Ao se escolher entre DECIMAL e FLOAT/DOUBLE, deve-se verificar a questo preciso x velocidade. Por exemplo, o tipo DECIMAL uma escolha popular para aplicaes financeiras envolvendo clculos monetrios, porque a preciso mais importante. O tipo decimal pode ser declarado com uma preciso e escala para indicar o nmero de dgitos significativos e o nmero de casas decimais direita do ponto decimal, com o formato DECIMAL(n,m), onde n a preciso de n dgitos, e m a escala de m dgitos. Por exemplo, para representar valores monetrios, pode-se utilizar o tipo DECIMAL(10,2). Se voc omitir a preciso e a escala, sero utilizados os valores padro 10 e 0, respectivamente. Ento, so equivalentes: DECIMAL DECIMAL(10) DECIMAL(10,0) A quantidade requerida para armazenar um valor do tipo DECIMAL depende da preciso e da escala utilizados. Aproximadamente quatro bytes so necessrios para armazenar nove dgitos em cada lado do ponto decimal.

Valores de caracteres (string) Para escolher o tipo mais adequado para armazenar informaes de string (formados por um mais caracteres ou bytes em seqncia), devemos considerar o seguinte: 1- Voc precisa armazenar strings em formato binrio ou no-binrio? As informaes do conjunto de caracteres e collation so importantes? 2- O comprimento mximo dos valores que voc precia armazenar. 3- Voc precisa usar um tamanho definido (fixo) de armazenamento para cada valor, ou pode ser varivel? 4- Como os espaos em branco sero manipulados para comparao, armazenamento e recuperao? Os tipos de dados CHAR, VARCHAR e TEXT armazenam strings no-binrios (ou seja, possuem informao sobre o conjunto de caracteres e collation), sendo que CHAR tem um tamanho fixo (sempre vai ocupar o tamanho definido, independente do valor armazenado) e os outros dois (VARCHAR e TEXT) tm tamanho varivel, ou seja, o MySQL s aloca o espao necessrio para cada valor armazenado. Segue abaixo uma tabela comparando esses tipos e algumas variaes deles. Na tabela, L representa o tamanho atual (j que o tamanho varivel) e M o comprimento mximo que pode ter.

Os tipos BINARY, VARBINARY e BLOB so os equivalentes binrios aos tipos no binrios CHAR, VARCHAR e TEXT. Quando falamos em binrios, queremos dizer que eles armazenam strings que consistem em bytes, e no caracteres, e no possuem informao de conjunto de caracteres ou collation. Por exemplo, para armazenar uma foto (que no fundo, composto por uma sequncia de bytes), um desses tipos seria ideal. De maneira semelhante aos tipos no-binrias, o tipo BINARY tem tamanho fixo, e os tipos VARBINARY e BLOB tm tamanho varivel. A tabela abaixo compara as caractersticas dos tipos, incluindo algumas variaes do tipo BLOB:

Valores temporais (hora e data) O MySQL tambm oferece alguns tipos de dados para amazenar informaes relacionadas a tempo. Vejamos alguns na tabela a seguir:

Criando tabelas Para criar uma tabela num database, utilizamos o comando CREATE TABLE, que tem a seguinte sintaxe: mysql> CREATE TABLE nome_da_tabela (definies_das_colunas); Antes de criar seus objetos, defina o database com o qual voc quer trabalhar utilizando o comando USE, ou seno, voc pode definir explicitamente o database em que voc vai criar a tabela, colocando o nome dele na frente da mesma: CREATE TABLE nome_do_database.nome_da_tabela mysql> (definies_das_colunas); Na rea definies_das_colunas, iremos relacionar a estrutura da tabela, ou seja, quais so as colunas que formaro a tabela. Um exemplo simples, com apenas uma coluna: mysql> CREATE TABLE minha_primeira_tabela (coluna1 INT); Ento, com este comando, criamos uma tabela de nome minha_primeira_tabela, que contm uma coluna de nome coluna1, que armazena valores do tipo INT. Segue abaixo mais um exemplo, agora criando uma tabela com 3 colunas:

mysql> CREATE TABLE minha_segunda_tabela >( > coluna1 INT, > coluna2 CHAR(20), > coluna3 DATE > ); Podemos tornar o preenchimento de uma coluna obrigatria com a incluso da diretiva NOT NULL aps a definio da mesma. Vamos ver o exemplo anterior modificado, agora tornando o preenchimento da coluna1 obrigatria: mysql> CREATE TABLE minha_terceira_tabela >( > coluna1 INT NOT NULL, > coluna2 CHAR(20), > coluna3 DATE > ); Mostrando informaes sobre tabelas Para exibir quais so as tabelas existentes em um database em uso, usamos o comando SHOW TABLES: mysql> SHOW TABLES;

Para saber mais informaes sobre a estrutura de uma tabela, utilizamos o comando DESCRIBE, que tem a seguinte sintaxe: mysql> DESCRIBE nome_da_tabela; Por exemplo, para visualizar a estrutura da tabela de nome minha_segunda_tabela, usamos o comando: mysql> DESCRIBE minha_segunda_tabela; Alterando a estrutura de tabelas Depois da tabela ter sido criada, pode haver a necessidade de realizar algum tipo de alterao na sua estrutura (como por exemplo: adicionar uma coluna). Com o comando ALTER TABLE, podemos realizar as seguintes alteraes na estrutura de uma tabela: - Adicionar ou remover colunas

- Mudar o nome ou definio de uma coluna - Adicionar ou remover ndices (ser visto posteriormente) - Renomear a tabela Adicionando e removendo colunas Vamos tomar como exemplo a estrutura da tabela minha_segunda_tabela, mostrada na seo anterior:

Para adicionar uma nova coluna, o comando ALTER TABLE tem a seguinte sintaxe: mysql> ALTER TABLE nome_da_tabela ADD definio_da_coluna; Ento, no exemplo, para adicionar uma coluna de nome coluna4, do tipo CHAR(3), uso o seguinte comando: mysql> ALTER TABLE minha_segunda_tabela ADD coluna4 char(3); E se dermos um comando DESCRIBE minha_segunda_tabela, teremos:

Mais um exemplo, adicionando uma coluna do tipo smallint tabela minha_quarta_tabela mysql> ALTER TABLE minha_quarta_tabela ADD coluna2 smallint; E se dermos um comando DESCRIBE minha_quarta_tabela, teremos:

Para remover uma coluna, o comando ALTER TABLE tem a seguinte sintaxe: mysql> ALTER TABLE nome_da_tabela DROP definio_da_coluna; Ento, como exemplo, para remover uma coluna de nome coluna2 da tabela minha_quarta_tabela (vista logo acima), uso o seguinte comando: mysql> ALTER TABLE minha_quarta_tabela DROP coluna2; E verificando novamente a estrutura desta tabela, teremos:

Modificando uma coluna j existente Continuando no nosso exemplo, vamos supor que queremos mudar o nome da coluna coluna4 para nova_coluna e o tipo dela para CHAR(30), para acomodar valores maiores. A sintaxe para o comando neste caso : mysql> ALTER TABLE nome_da_tabela MODIFY nome_da_coluna nova_definio_da_coluna; ou mysql> ALTER TABLE nome_da_tabela CHANGE nome_da_coluna novo_nome_da_coluna nova_definio_da_coluna; Removendo tabelas Para remover uma tabela, utilizamos o comando DROP TABLE: mysql> DROP TABLE nome_da_tabela; Ento, por exemplo, para remover a tabela minha_nova_tabela, utilizada na seo anterior, usaramos o comando: mysql> DROP TABLE minha_nova_tabela; Inserindo dados em uma tabela Para inserir valores em uma tabela, utilizamos o comando INSERT, que tem a seguinte sintaxe: mysql> INSERT INTO nome_tabela(lista_de_colunas) VALUES(lista_de_valores); Vamos tomar como exemplo a tabela criada anteriormente, de nome minha_primeira_tabela, que tem a seguinte estrutura:

Recuperando informaes de uma tabela Para recuperar informaes de uma ou mais tabelas, utilizamos o comando SELECT. A sintaxe bsica do comando a seguinte: mysql> SELECT lista_de_colunas FROM nome_da_tabela; Tambm podemos definir explicitamente o database da tabela que vai ser consultada, colocando o nome dele na frente da mesma: mysql> SELECT lista_de_colunas FROM nome_do_database.nome_da_tabela; Especificando critrios para a recuperao de registros Neste caso, se ns quisermos recuperar somente as linhas dos funcionrios que tenham o valor para a coluna departamento_id igual a 10, usaramos um SELECT com a seguinte clusula: mysql> SELECT * FROM funcionario > WHERE departamento_id=10; Ento, para especificar um critrio de seleo no comando SELECT, utilizamos a clusula WHERE no comando, seguida por uma expresso. Agora, a sintaxe do comando SELECT fica da seguinte forma. mysql> SELECT lista_de_colunas FROM nome_da_tabela > WHERE expresso; Lembrando que, se no for utilizada a clusula WHERE, sero selecionadas todas as linhas da tabela. Para construir uma expresso, podemos nos valer de operadores de comparao, operadores lgicos e funes (sero vistas mais adiante).

Alguns Operadores de Comparao

mysql> SELECT * FROM funcionario > WHERE nome LIKE 'Euzbio %'; Com o LIKE, podemos utilizar, no padro fornecido, dois caracteres-coringa: % - Substitui qualquer nmero de caracteres, inclusive zero caracteres. _ (sublinha) Substitui exatamente um caracter. E se voc quiser fazer comparaes buscando pelos dois caracteres acima, utilize o caracter de escape (\) na frente. Por exemplo, na tabela funcionario acima, se quiser buscar todas as ocorrncias na coluna email que comeam um caracter %, posso utilizar: mysql> SELECT * FROM funcionario > WHERE email LIKE '\%%';

Вам также может понравиться