Introdução a MySQL
Programação de Servidores
Marx Gomes Van der Linden
http://marx.vanderlinden.com.br/
Onde armazenar dados?


Praticamente toda aplicação web precisa lidar
com grandes volumes de dados.
Dados podem ser armazenados em arquivos
(texto ou binários)




Redundância
Manutenção e Escalabilidade
Integridade
Eficiência
http://marx.vanderlinden.com.br/
2
Bancos de Dados


Um banco de dados é um conjunto de dados
armazenados de forma automaticamente
organizada e gerenciada.
Um banco de dados é controlado por uma
aplicação:


(SGBD)
Todo o acesso a dados é feito indiretamente,
por meio do SGBD.
http://marx.vanderlinden.com.br/
3
Vantagens

Consistência e Integridade
Um banco de dados bem organizado evitar o
armazenamente desnecessário de
informações redundantes, evitando a
possibilidade de inconsistência.
Eficiência



SGBDs são altamente otimizados para
armazenar e buscar informação da maneira
mais eficiente possível.
http://marx.vanderlinden.com.br/
4
Vantagens

Manutenção


Um Sistema de Gerenciamento de Banco de
Dados cuida automaticamente de todos os
detalhes da implementação física do
armazenamento de dados.
Escalabilidade

Sua aplicação pode crescer sem mudanças
fundamentais no design.
http://marx.vanderlinden.com.br/
5
Banco de Dados Relacional

Composto por Entidades (ou Tabelas).

Cada tabela tem campos.

Os campos de uma tabela podem fazer
referência a outras tabelas.
http://marx.vanderlinden.com.br/
6
Banco de Dados Relacional
http://marx.vanderlinden.com.br/
7
SQL


Structured Query Language
Linguagem-padrão para manipulação de
informações em bancos de dados.

Definições de dados

Consultas

Modificações, Inserções, Exclusões

Controle de Acesso
http://marx.vanderlinden.com.br/
8
Bancos de Dados em PHP

PHP tem suporte a praticamente todos os
sistemas de Bancos de Dados em uso
atualmente:






MS SQL Server
MySQL
Oracle
PostgreSQL
SQLite
etc..
http://marx.vanderlinden.com.br/
9
Design de Banco de Dados



Descrição das entidades que compõem o
sistema.
Definição das propriedades de cada entidade
que se deseja armazenar.
Elaboração dos relacionamentos entre as
entidades.
http://marx.vanderlinden.com.br/
10
MySQL

MySQL é um dos SGBDs mais
amplamente usados no mundo.

Software livre/open source
Desenvolvido pela MySQL AB, de
propriedade da Sun Microsystems.

'M' no LAMP / WAMP

Leve, eficiente e robusto

Excelente integração com PHP

http://marx.vanderlinden.com.br/
11
MySQL Cliente/Servidor
Cliente MySQL
(Linha de
Comando)
PHP
Servidor
MySQL
Módulo
Cliente MySQL
http://marx.vanderlinden.com.br/
Banco de
Dados
SQL
Linhas de Dados
E/S Arquivo 12
Arquitetura Cliente/Servidor

O Servidor cuida do controle de concorrência.
Não há conflito se dois clientes tentarem
modificar o mesmo dado ao mesmo tempo.
O Servidor tem embutido um mecanismo de
controle de acesso.



O Cliente e o Servidor podem estar distribuídos
fisicamente de qualquer maneira.
http://marx.vanderlinden.com.br/
13
SQL

A unidade básica de SQL é a consulta (query):


Executa uma operação no Banco de Dados.
 Pode modificar o BD.
Retorna:
 Se a instrução foi ou não um sucesso.
 O número de linhas afetadas no banco de
dados.
 Se aplicável, retorna um conjunto de
linhas contendo as informações
solicitadas. http://marx.vanderlinden.com.br/
14
SQL

Características de SQL:




Não faz distinção entre maiúsculas e
minúsculas.
Ignora espaços.
Cada instrução termina com ;
Comentários podem ser feitos com --
http://marx.vanderlinden.com.br/
15
Cliente MySQL

O cliente-padrão MySQL é uma aplicação de
linha de comando.
Interativo
 Script
Uso:
 mysql [opções...] [nome_bd]


http://marx.vanderlinden.com.br/
16
Opções da linha de comando

-u, --user=nome
Nome do usuário
 Padrão: usuário do sistema)
-p, --password[=name]


Senha
 Padrão: ''
-h, --host=nome




Endereço do servidor
Padrão: localhost
http://marx.vanderlinden.com.br/
17
Opções da linha de comando

-E, --vertical
Exibe a saída verticalmente (equivalente a
usar \G)
-H, --html



Exibe a saída como tabelas HTML
http://marx.vanderlinden.com.br/
18
SELECT


O comando SELECT busca e retorna uma
informação do servidor.
Pode ser usado com qualquer combinação de:



Valores literais.
Funções embutidas.
Campos da tabela.
http://marx.vanderlinden.com.br/
19
SELECT

SELECT com valor literal:
mysql> SELECT 'Hello, World!';
+---------------+
| Hello, World! |
+---------------+
| Hello, World! |
+---------------+
1 row in set (0.00 sec)
http://marx.vanderlinden.com.br/
20
NOW()

A função NOW() retorna a data e hora atuais.
mysql> SELECT NOW();
+---------------------+
| NOW()
|
+---------------------+
| 2008-10-05 01:43:59 |
+---------------------+
1 row in set (0.00 sec)
http://marx.vanderlinden.com.br/
21
USER()

A função USER() retorna o usuário atual.
mysql> SELECT USER();
+----------------+
| USER()
|
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
http://marx.vanderlinden.com.br/
22
VERSION()

A função VERSION() retorna a versão atual do
MySQL.
mysql> SELECT VERSION();
+--------------------+
| VERSION()
|
+--------------------+
| 5.0.51a-3ubuntu5.1 |
+--------------------+
1 row in set (0.00 sec)
http://marx.vanderlinden.com.br/
23
SELECT

Mais de uma informação pode ser solicitada no
mesmo comando.
mysql> SELECT USER(), VERSION();
+----------------+--------------------+
| USER()
| VERSION()
|
+----------------+--------------------+
| root@localhost | 5.0.51a-3ubuntu5.1 |
+----------------+--------------------+
http://marx.vanderlinden.com.br/
24
SELECT

A interface de linha de comando permite
quebrar um comando em várias linhas.
mysql> SELECT USER(),
-> VERSION();
+----------------+--------------------+
| USER()
| VERSION()
|
+----------------+--------------------+
| root@localhost | 5.0.51a-3ubuntu5.1 |
+----------------+--------------------+
1 row in set (0.00 sec)
http://marx.vanderlinden.com.br/
25
\G

Concluindo o comando com \G, ao invés de ;,
exibe os resultados de uma maneira
alternativa:
mysql> SELECT USER(), VERSION()\G
*************** 1. row ***************
USER(): root@localhost
VERSION(): 5.0.51a-3ubuntu5.1
1 row in set (0.00 sec)
http://marx.vanderlinden.com.br/
26
\c

É possível cancelar um comando antes de
enviá-lo ao servidor, usando \c
mysql> SELECT USER(),
-> VERSION()\c
mysql>
http://marx.vanderlinden.com.br/
27
Criando um Banco de Dados



A primeira ação a ser tomada em uma nova
instalação do MySQL é criar um novo banco de
dados.
Vários bancos de dados podem estar
instalados ao mesmo tempo.
Cada banco de dados é identificado por um
nome.
http://marx.vanderlinden.com.br/
28
CREATE DATABASE


Para criar um novo banco de dados, utiliza-se o
comando CREATE DATABASE.
Sintaxe:
 CREATE DATABASE nome_bd;
mysql> CREATE DATABASE teste;
Query OK, 1 row affected (0.08 sec)
http://marx.vanderlinden.com.br/
29
CREATE DATABASE


A sintaxe completa de CREATE DATABASE
inclui a possibilidade se somente criar o BD caso
ele ainda não exista, além de outras opções.
CREATE DATABASE [IF NOT EXISTS]
nome_db [CHARACTER SET charset]
[COLLATE collation];


charset: Conjunto de caracteres dos campos
de texto (padrão: latin1)
collation: Regras para ordem alfabética de
texto (padrão:http://marx.vanderlinden.com.br/
latin1_swedish_ci)
30
Conjunto de caracteres


O comando SHOW CHARACTER SET mostra
todos os conjuntos de caracteres disponíveis
no MySQL.
Algumas opções:

latin1 (cp1252 West European) (padrão)

ascii
(US ASCII)

utf8
(UTF-8 Unicode)
http://marx.vanderlinden.com.br/
31
Collation



Collation se refere às regras para decidir a
ordem alfabética de strings, usada em
operações de ordenação.
Cada Collation é dependente de um conjunto
de caracteres.
O comando SHOW COLLATION mostra todas
as collations disponíveis no MySQL.
http://marx.vanderlinden.com.br/
32
Collation

Opções de Collation disponíveis para o
conjunto de caracteres latin1:

latin1_swedish_ci (padrão)

latin1_german2_ci

latin1_german1_ci

latin1_danish_ci

latin1_general_ci

latin1_general_cs

latin1_spanish_ci
http://marx.vanderlinden.com.br/
33
SHOW DATABASES

O comando SHOW DATABASES mostra os
bancos de dados existentes no sistema:
mysql> SHOW DATABASES;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| sistema_xy
|
| website
|
| teste
|
http://marx.vanderlinden.com.br/
+--------------------+
34
USE


Depois, é necessário informar ao MySQL que
começaremos a usar o banco de dados criado.
Sintaxe:
 USE nome_bd;
mysql> USE teste;
Database changed
http://marx.vanderlinden.com.br/
35
ALTER DATABASE



Para alterar as configurações de um banco de
dados, usa-se o comando ALTER DATABASE.
Sintaxe:
ALTER DATABASE [nome_db]
[CHARACTER SET charset]
[COLLATE collation];

Se omitido, nome_db se refere ao banco de
dados em uso.
mysql> ALTER DATABASE COLLATE
latin1_spanish_ci;
http://marx.vanderlinden.com.br/
Query OK, 1 row
affected (0.00 sec)
36
DROP DATABASE

Para excluir permanentemente um banco de
dados do sistema, usa-se o comando DROP
DATABASE.
mysql> DROP DATABASE teste;
Query OK, 0 rows affected (0.05 sec)
http://marx.vanderlinden.com.br/
37
Mecanismos de Armazenamento



MySQL suporta diversos mecanismos físicos
(engines) para o armazenamento de tabelas.
É possível ter, no mesmo banco de dados,
várias tabelas, cada uma com um mecanismo
diferente.
Para exibir todos os mecanismos instalados,
pode-se usar o comando SHOW ENGINES.
http://marx.vanderlinden.com.br/
38
Mecanismos de Armazenamento

Mecanimos otimizados em disco:
MyISAM (padrão)
 MERGE (tabelas MyISAM concatenadas)
 InnoDB
Outros:






MEMORY → Armazenamento em RAM.
BLACKHOLE → /dev/null.
ARCHIVE → Não permite modificações.
CSV → Arquivos de texto separados por vírgula.
http://marx.vanderlinden.com.br/
39
Mecanismos de Armazenamento


Cada banco de dados é armazenado em um
subdiretório no diretório de armazenamento de
MySQL (geralmente /var/lib/mysql/).
Cada tabela corresponde a:


Um arquivo .frm
Outros arquivos com o mesmo nome, e extensões
de acordo com o mecanismo.
http://marx.vanderlinden.com.br/
40
Mecanismos de Armazenamento

MyISAM → .MYD (dados), .MYI (índices)

MERGE → .MRG (tabelas MyISAM unidas)

InnoDB → .ibd (dados e índices)


ARCHIVE → .ARZ (dados), .ARM
(metadados)
CSV → .CSV (dados), .CSM (metadados)
http://marx.vanderlinden.com.br/
41
Mecanismos de Armazenamento

Para exibir os Mecanismos de Armazenamento
disponíveis, pode-se usar o comando SHOW
ENGINES.
http://marx.vanderlinden.com.br/
42
******************* 1. row *******************
Engine:
MyISAM
Mecanismos
de Armazenamento
Support: DEFAULT
Comment: Default engine as of MySQL 3.23 with
great performance
******************* 2. row *******************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful
for temporary tables
******************* 3. row *******************
Engine: InnoDB
Support: YES
Comment: Supports transactions, row-level
locking, and foreign keys
******************* 4. row *******************
Engine: BerkeleyDB
http://marx.vanderlinden.com.br/
43
Support: NO
CREATE TABLE

Para criar uma nova tabela no banco de dados,
usa-se o comando CREATE TABLE.
Sintaxe:
CREATE TABLE [IF NOT EXISTS]
nome_tabela ( definição )
[ENGINE = nome_engine]
[CHARACTER SET charset]
[COLLATE collation];

http://marx.vanderlinden.com.br/
44
CREATE TABLE


A definição consiste de pares:
nome TIPO,
nome TIPO, ...
É possível especificar um mecanismo de tabela
(engine)
Se não for especificada, é usado o padrão.
É possível especificar um conjunto de
caracteres e/ou uma collation.


http://marx.vanderlinden.com.br/
45
CREATE TABLE

Exemplo:
mysql> CREATE TABLE tabela
-> (
->
f FLOAT(10,4),
->
c CHAR(15) NOT NULL DEFAULT 'none',
->
i TINYINT UNSIGNED NULL
-> );
Query OK, 0 rows affected (0.04 sec)
http://marx.vanderlinden.com.br/
46
DESCRIBE


O comando DESCRIBE exibe a estrutura de
uma tabela:
DESCRIBE nome_tabela;
mysql> DESCRIBE tabela;
+-------+---------------------+------+-----+---------+-------+
| Field | Type
| Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| f
| float(10,4)
| YES |
| NULL
|
|
| c
| char(15)
| NO
|
| none
|
|
| i
| tinyint(3) unsigned | YES |
| NULL
|
|
+-------+---------------------+------+-----+---------+-------+
http://marx.vanderlinden.com.br/
47
Aspas

MySQL usa 3 tipos de aspas:


Aspas simples ou duplas: Strings
 "Hello World"
 'Hello World'
Acento grave: nomes de bancos de dados,
tabelas e campos
 `meubd`
 `usuarios`
 `cpf`
 Pode ser omitido caso o campo seja
http://marx.vanderlinden.com.br/
uma palavra
simples
48
CREATE TABLE

Exemplo:
mysql> CREATE TABLE `tabela`
-> (
-> `f` FLOAT(10,4),
-> `c` CHAR(15) NOT NULL DEFAULT 'none',
-> `i` TINYINT UNSIGNED NULL
-> );
Query OK, 0 rows affected (0.03 sec)
http://marx.vanderlinden.com.br/
49
Tipos de Dados


No MySQL, a cada coluna de cada tabela deve
ser associado um tipo de dado.
Existem vários tipos de dados, pertencentes a
várias categorias:




Numéricos
 Inteiros
 Reais
Textos
Dados Binários
Data/Hora
http://marx.vanderlinden.com.br/
50
Tipos de Dados Inteiros

TINYINT → Inteiro de 1 byte

SMALLINT → Inteiro de 2 bytes

MEDIUMINT → Inteiro de 3 bytes

INT → Inteiro de 4 bytes (32 bits)

BIGINT → Inteiro de 8 bytes (64 bits)
http://marx.vanderlinden.com.br/
51
Tipos de Dados Numéricos

Todos os tipos de dados inteiros têm 3 campos
opcionais:



(M) → Largura máxima de exibição (número
de caracteres)
UNSIGNED → Não permite valores negativos
(dobra a capacidade para positivos)
ZEROFILL → Preenche com zeros o espaço
restante, na exibição
http://marx.vanderlinden.com.br/
52
BIT

BIT[(M)]



Armazena uma seqüência de M bits.
Padrão: M = 1
Valores para BIT são especificados de acordo
com a seguinte sintaxe:
 b'01001'
http://marx.vanderlinden.com.br/
53
Tipos de Dados Reais




Em todos os casos: M dígitos totais, com D
casas decimais.
FLOAT[(M[,D])] → Número de ponto
flutuante de precisão simples (32 bits)
DOUBLE[(M[,D])] → Número de ponto
flutuante de precisão dupla (64 bits)
DECIMAL[(M[,D])] → Número de ponto fixo.

Padrão: M = 10, D = 0
http://marx.vanderlinden.com.br/
54
Tipos de Dados para Texto

CHAR[(M)] → M caracteres


Padrão: M = 1
VARCHAR(M) → Uma string de, no máximo, M
caracteres

TINYTEXT → Texto de até 255 caracteres.

TEXT[(M)] → Texto de até 64kb.

MEDIUMTEXT → Texto de até 14mb.

LONGTEXT → Texto de até 4gb.
http://marx.vanderlinden.com.br/
55
Conjunto de Caracteres e Collate



Para os campos TINYTEXT, TEXT,
MEDIUMTEXT e LONGTEXT, é possível
especificar separadamente o cojunto de
caracteres e o collate.
Ex:
LONGTEXT [CHARACTER SET charset]
[COLLATE collation]
http://marx.vanderlinden.com.br/
56
Tamanho dos Tipos de Texto

Um campo de texto é armazenado como N+L
bytes:
N bytes, indicando o tamanho do texto
 L bytes, onde L é o tamanho do texto,
indicado em N
TINYTEXT → N = 1



TEXT → N = 2

MEDIUMTEXT → N = 3

LONGTEXT → N = 4
http://marx.vanderlinden.com.br/
57
Tipos de Dados Binários

BLOB: Binary Large Object

TINYBLOB → Até 255 bytes

BLOB → Até 64k

MEDIUMBLOB → Até 14mb

LONGBLOB → Até 4GB
http://marx.vanderlinden.com.br/
58
Escolhendo um Tipo de Texto

Texto ou binário?

Diferenciar maiúsculas e minúsculas?

Tamanho fixo (CHAR) ou variável?
Espaço vs. Eficiência
O campo tem valores fixos?



ENUM ou SET
http://marx.vanderlinden.com.br/
59
Tipos de Dados para Texto

ENUM('valor1','valor2',...)
Uma string que pode ter apenas um dos
valores descritos na enumeração.
SET('valor1','valor2',...)



Uma string que pode ter zero ou mais
valores, desde que todos façam parte do
conjunto.
http://marx.vanderlinden.com.br/
60
ENUM e SET




A lista de dados especificada na criação define
os únicos valores legais do campo.
Pode haver ou não distinção entre maiúsculas
e minúsculas, dependendo do collation.
No ENUM, a ordem especificada é a ordem
usada em operações de ordenamento.
Os campos de SET e ENUM são armazenados
como números inteiros:

ENUM: 1 ou 2 bytes

http://marx.vanderlinden.com.br/
SET: 1,2,3,4 ou
8 bytes
61
SET



Múltiplos valores em SET são determinados
por vírgulas.
 'carro,trem,avião'
Valores inválidos acrescentados a um SET são
ignorados.
Valores repetidos também são ignorados.
http://marx.vanderlinden.com.br/
62
Tipos de Dados para Data e Hora

DATE → Data, no formato 'CCYY-MM-DD'
De '1000-01-01' a '9999-12-31'
TIME → Hora, no formato 'hh:mm:ss'


De '-838:59:59' a '838:59:59'
DATETIME → Data e hora, no formato, 'CCYYMM-DD hh:mm:ss'



De '1000-01-01 00:00:00' a '9999-12-31
23:59:59'
http://marx.vanderlinden.com.br/
63
Tipos de Dados para Data e Hora

TIMESTAMP → Timestamp 32bits, no formato
'CCYY-MM-DD hh:mm:ss'
De '1970-01-01 00:00:01' a '2038-01-09
03:14:07'
YEAR → Ano, no formato CCYY ou YY



De 1901 to 2155, ou 0000
http://marx.vanderlinden.com.br/
64
Valores de Data e Hora

MySQL tenta interpretar valores para os
campos de data e hora, de acordo com as
convenções:
 'YY-MM-DD hh:mm:ss'
 'CCYY-MM-DD hh:mm:ss'
 'CCYYMMDDhhmmss'
 'YYMMDDhhmmss'
 CCYYMMDDhhmmss
 YYMMDDhhmmss
 'CCYY-MM-DD'
http://marx.vanderlinden.com.br/
65
NULL vs. NOT NULL

Para qualquer campo, é possível especificar se
se quer que sejam permitidos valores nulos
(vazios):



NULL (padrão)
NOT NULL
Para a maioria dos campos, é possível
especificar um valor padrão:
 DEFAULT valor
http://marx.vanderlinden.com.br/
66
Regras para valores Default

Caso o valor default não seja especificado:



Valores numéricos: 0
Datas e Horas: 0000-00-00 00:00:00
Strings: ''
http://marx.vanderlinden.com.br/
67
PRIMARY KEY


Para especificar uma chave primária, basta
acrescentar após o nome do campo a frase
PRIMARY KEY.
Chaves primárias:



Não podem ter valores repetidos.
Não podem ter valores nulos.
Identificam inequivocadamente uma linha na
tabela.
http://marx.vanderlinden.com.br/
68
AUTO_INCREMENT

A opção AUTO_INCREMENT pode ser
adicionada a qualquer valor numérico.
Novos valores para este campo são
automaticamente incrementados em 1.
Só pode haver um campo AUTO_INCREMENT
em uma tabela.



Útil para índices e chaves primárias.

Automaticamente torna a coluna NOT NULL.

Se não especificada, a contagem começa em
http://marx.vanderlinden.com.br/
1.
69
AUTO_INCREMENT

O valor de uma coluna AUTO_INCREMENT é
igual ao da anterior mais 1 se na nova coluna:
Não for especificado um valor para este
campo.
 O novo valor for NULL ou 0.
Novos valores reiniciam a contagem.


http://marx.vanderlinden.com.br/
70
Exemplo: Criacão da Tabela
mysql> CREATE TABLE usuario (
-> login CHAR(30) PRIMARY KEY,
-> datanasc DATE,
-> nome VARCHAR(255) NOT NULL,
-> sexo ENUM('masc','fem') NOT NULL
-> );
Query OK, 0 rows affected (0.00 sec)
http://marx.vanderlinden.com.br/
71
Exemplo: Possíveis Valores
mysql> SELECT * FROM usuario;
+-------+------------+-----------------------+------+
| login | datanasc
| nome
| sexo |
+-------+------------+-----------------------+------+
| kate | 1980-05-18 | Katherine Anne Austen | fem |
| sayid | 1970-04-24 | Sayid Hassan Jarrah
| masc |
| hgale | 1975-02-25 | Benjamin Linus
| masc |
+-------+------------+-----------------------+------+
3 rows in set (0.00 sec)
http://marx.vanderlinden.com.br/
72
Exemplo: Criação da Tabela
mysql> CREATE TABLE sgbd (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> nome VARCHAR(255) NOT NULL,
-> maxcols MEDIUMINT UNSIGNED
-> );
Query OK, 0 rows affected (0.14 sec)
http://marx.vanderlinden.com.br/
73
Exemplo: Possíveis valores
mysql> SELECT * FROM sgbd;
+----+----------------+---------+
| id | nome
| maxcols |
+----+----------------+---------+
| 1 | MySQL
|
3398 |
| 2 | PostgreSQL
|
1600 |
| 3 | Oracle
|
1000 |
| 4 | MS SQL Server |
1024 |
+----+----------------+---------+
4 rows in set (0.00 sec)
http://marx.vanderlinden.com.br/
74
Informações sobre as tabelas

O comando SHOW TABLES exibe a lista de
tabelas existentes no banco de dados.
Sintaxe:
 SHOW TABLES;
O comando SHOW CREATE TABLE exibe o
comando usado para criar a tabela, incluindo
os valores default.



Sintaxe:
 SHOW CREATE TABLE nometabela;
http://marx.vanderlinden.com.br/
75
SHOW TABLES
mysql> SHOW TABLES;
+-----------------+
| Tables_in_teste |
+-----------------+
| sgbd
|
| usuario
|
+-----------------+
2 rows in set (0.00 sec)
http://marx.vanderlinden.com.br/
76
SHOW CREATE TABLE
mysql> SHOW CREATE TABLE sgbd\G
******************** 1. row ******************
Table: sgbd
Create Table: CREATE TABLE `sgbd` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(255) collate
latin1_spanish_ci NOT NULL,
`maxcols` mediumint(8) unsigned default
NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT
CHARSET=latin1 COLLATE=latin1_spanish_ci
1 row in set (0.00 sec)
http://marx.vanderlinden.com.br/
77
Tabelas Temporárias

É possível criar tabelas temporárias.
Existem apenas enquanto dura a conexão
com o servidor.
 A tabela temporária é vista apenas pelo
cliente que a criou.
Sintaxe:
CREATE TEMPORARY TABLE [IF NOT
EXISTS] nome_tabela ( definição )
[ENGINE = nome_engine]
[CHARACTER SET charset]
http://marx.vanderlinden.com.br/
[COLLATE collation];



78
CREATE TABLE ... LIKE


Para criar uma tabela com a mesma estrutura
de uma tabela existente, usa-se a sintaxe:
CREATE [TEMPORARY] TABLE
[IF NOT EXISTS] nova_tabela
LIKE tabela_antiga
mysql> CREATE TEMPORARY TABLE usuariotmp
LIKE usuario;
Query OK, 0 rows affected (0.12 sec)
http://marx.vanderlinden.com.br/
79
MERGE

O mecanismo MERGE permite tratar várias
tabelas MyISAM como uma só.
Todas as tabelas devem ter exatamente a
mesma estrutura (mesmos nomes e tipos, na
mesma ordem).
Sintaxe:
CREATE [TEMPORARY] TABLE [(...)]
ENGINE = MERGE
UNION = (tabela1, tabela2,
tabela3...)



http://marx.vanderlinden.com.br/
80
Exemplo
CREATE TABLE log_2007 (
dt
DATETIME NOT NULL,
info VARCHAR(100) NOT NULL
) ENGINE = MyISAM;
CREATE TABLE log_2008 (
dt
DATETIME NOT NULL,
info VARCHAR(100) NOT NULL
) ENGINE = MyISAM;
CREATE TABLE log_2009 (
dt
DATETIME NOT NULL,
info VARCHAR(100) NOT NULL
) ENGINE = MyISAM;http://marx.vanderlinden.com.br/
81
Exemplo
CREATE TABLE log_merge (
dt
DATETIME NOT NULL,
info VARCHAR(100) NOT NULL
) ENGINE = MERGE
UNION = (log_2007, log_2008, log_2009);
http://marx.vanderlinden.com.br/
82
DROP TABLE



Para excluir uma tabela, basta usar o comando
DROP TABLE.
Sintaxe:
DROP [TEMPORARY] TABLE [IF EXISTS]
tabela [, tabela2, tabela3...]
http://marx.vanderlinden.com.br/
83
ALTER TABLE

Qualquer característica de uma tabela pode ser
modificada a qualquer momento, usando o
comando ALTER TABLE.



Nomes e tipos de campos
 Adicionar
 Remover
 Modificar
Mecanismo de Armazenamento
Conjunto de caracteres e Collage
http://marx.vanderlinden.com.br/
84
Exemplo: Antes
mysql> SELECT * FROM usuario;
+-------+------------+-----------------------+------+
| login | datanasc
| nome
| sexo |
+-------+------------+-----------------------+------+
| kate | 1980-05-18 | Katherine Anne Austen | fem |
| sayid | 1970-04-24 | Sayid Hassan Jarrah
| masc |
| hgale | 1975-02-25 | Benjamin Linus
| masc |
+-------+------------+-----------------------+------+
3 rows in set (0.00 sec)
http://marx.vanderlinden.com.br/
85
ALTER TABLE ... MODIFY


Para alterar qualquer característica de uma
coluna (tipo, tamanho, chave primária):
ALTER TABLE tabela MODIFY campo
definição
mysql> ALTER TABLE usuario MODIFY login
CHAR(60);
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0
http://marx.vanderlinden.com.br/
86
ALTER TABLE ... CHANGE


Para alterar o nome e tipo de uma coluna:
ALTER TABLE tabela CHANGE campo
novonome tipo;
mysql> ALTER TABLE usuario CHANGE nome
primeiro_nome VARCHAR(60);
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
http://marx.vanderlinden.com.br/
87
ALTER TABLE ... ADD


Para adicionar uma nova coluna:
ALTER TABLE tabela ADD campo tipo
[FIRST | AFTER campo];
mysql> ALTER TABLE usuario ADD ultimo_nome
varchar(60) AFTER primeiro_nome;
Query OK, 3 rows affected (0.15 sec)
Records: 3 Duplicates: 0 Warnings: 0
http://marx.vanderlinden.com.br/
88
ALTER TABLE ... DROP


Para remover uma coluna da tabela:
ALTER TABLE tabela DROP campo;
mysql> ALTER TABLE usuario DROP datanasc;
Query OK, 3 rows affected (0.06 sec)
Records: 3 Duplicates: 0 Warnings: 0
http://marx.vanderlinden.com.br/
89
Exemplo: Depois
mysql> SELECT * FROM usuario;
+-------+-----------------------+-------------+------+
| login | primeiro_nome
| ultimo_nome | sexo |
+-------+-----------------------+-------------+------+
| kate | Katherine Anne Austen | NULL
| fem |
| sayid | Sayid Hassan Jarrah
| NULL
| masc |
| hgale | Benjamin Linus
| NULL
| masc |
+-------+-----------------------+-------------+------+
3 rows in set (0.07 sec)
http://marx.vanderlinden.com.br/
90
ALTER TABLE ... ADD PRIMARY KEY


Para transformar um campo em chave
primária:
ALTER TABLE tabela ADD PRIMARY KEY
(campo);
mysql> ALTER TABLE tabela ADD PRIMARY KEY (f);
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
http://marx.vanderlinden.com.br/
91
Outras opções

ENGINE, CHARACTER SET e COLLATE também
podem ser especificados após ALTER TABLE.
mysql> ALTER TABLE tabela ENGINE = InnoDB
CHARACTER SET = utf8 COLLATE
utf8_slovenian_ci;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
http://marx.vanderlinden.com.br/
92
Download

Introdução a MySQL - Marx Gomes Van der Linden