Você está na página 1de 92

Introduo a MySQL

Programao de Servidores Marx Gomes Van der Linden http://marx.vanderlinden.com.br/

Onde armazenar dados?

Praticamente toda aplicao web precisa lidar com grandes volumes de dados. Dados podem ser armazenados em arquivos (texto ou binrios)

Redundncia Manuteno e Escalabilidade Integridade Eficincia


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 aplicao:

(SGBD) Todo o acesso a dados feito indiretamente, por meio do SGBD.


http://marx.vanderlinden.com.br/ 3

Vantagens

Consistncia e Integridade Um banco de dados bem organizado evitar o armazenamente desnecessrio de informaes redundantes, evitando a possibilidade de inconsistncia. Eficincia

SGBDs so altamente otimizados para armazenar e buscar informao da maneira mais eficiente possvel.
http://marx.vanderlinden.com.br/ 4

Vantagens

Manuteno

Um Sistema de Gerenciamento de Banco de

Dados cuida automaticamente de todos os detalhes da implementao fsica do armazenamento de dados. Escalabilidade

Sua aplicao pode crescer sem mudanas 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 referncia a outras tabelas.

http://marx.vanderlinden.com.br/

Banco de Dados Relacional

http://marx.vanderlinden.com.br/

SQL

Structured Query Language Linguagem-padro para manipulao de informaes em bancos de dados.


Definies de dados Consultas Modificaes, Inseres, Excluses Controle de Acesso

http://marx.vanderlinden.com.br/

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

Descrio das entidades que compem o sistema. Definio das propriedades de cada entidade que se deseja armazenar. Elaborao 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 integrao com PHP
http://marx.vanderlinden.com.br/ 11

MySQL Cliente/Servidor
Cliente MySQL (Linha de Comando) Servidor MySQL

PHP Mdulo Cliente MySQL

Banco de Dados

http://marx.vanderlinden.com.br/

SQL Linhas de Dados E/S Arquivo 12

Arquitetura Cliente/Servidor

O Servidor cuida do controle de concorrncia. No 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 distribudos fisicamente de qualquer maneira.

http://marx.vanderlinden.com.br/

13

SQL

A unidade bsica de SQL a consulta (query):

Executa uma operao no Banco de Dados. Pode modificar o BD. Retorna: Se a instruo foi ou no um sucesso. O nmero de linhas afetadas no banco de dados. Se aplicvel, retorna um conjunto de linhas contendo as informaes solicitadas. http://marx.vanderlinden.com.br/ 14

SQL

Caractersticas de SQL:

No faz distino entre maisculas e minsculas. Ignora espaos. Cada instruo termina com ; Comentrios podem ser feitos com --

http://marx.vanderlinden.com.br/

15

Cliente MySQL

O cliente-padro MySQL uma aplicao de linha de comando. Interativo Script Uso: mysql [opes...] [nome_bd]

http://marx.vanderlinden.com.br/

16

Opes da linha de comando

-u, --user=nome Nome do usurio Padro: usurio do sistema) -p, --password[=name]

Senha Padro: '' -h, --host=nome


Endereo do servidor Padro: localhost http://marx.vanderlinden.com.br/

17

Opes da linha de comando

-E, --vertical Exibe a sada verticalmente (equivalente a usar \G) -H, --html

Exibe a sada como tabelas HTML

http://marx.vanderlinden.com.br/

18

SELECT

O comando SELECT busca e retorna uma informao do servidor. Pode ser usado com qualquer combinao de:

Valores literais. Funes 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 funo 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 funo USER() retorna o usurio atual.

mysql> SELECT USER(); +----------------+ | USER() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec)

http://marx.vanderlinden.com.br/

22

VERSION()

A funo VERSION() retorna a verso 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 informao 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 vrias 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 invs 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

possvel 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 ao a ser tomada em uma nova instalao do MySQL criar um novo banco de dados. Vrios 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 no exista, alm de outras opes. CREATE DATABASE [IF NOT EXISTS] nome_db [CHARACTER SET charset] [COLLATE collation];

charset: Conjunto de caracteres dos campos de texto (padro: latin1) collation: Regras para ordem alfabtica de texto (padro:http://marx.vanderlinden.com.br/ latin1_swedish_ci) 30

Conjunto de caracteres

O comando SHOW CHARACTER SET mostra todos os conjuntos de caracteres disponveis no MySQL. Algumas opes:

latin1 (cp1252 West European) (padro) ascii utf8 (US ASCII) (UTF-8 Unicode)

http://marx.vanderlinden.com.br/

31

Collation

Collation se refere s regras para decidir a ordem alfabtica de strings, usada em operaes de ordenao. Cada Collation dependente de um conjunto de caracteres. O comando SHOW COLLATION mostra todas as collations disponveis no MySQL.

http://marx.vanderlinden.com.br/

32

Collation

Opes de Collation disponveis para o conjunto de caracteres latin1:


latin1_swedish_ci (padro) 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, necessrio informar ao MySQL que comearemos 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 configuraes 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 fsicos (engines) para o armazenamento de tabelas. possvel ter, no mesmo banco de dados, vrias 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 (padro) MERGE (tabelas MyISAM concatenadas) InnoDB Outros:

MEMORY Armazenamento em RAM. BLACKHOLE /dev/null. ARCHIVE No permite modificaes. CSV Arquivos de texto separados por vrgula.
http://marx.vanderlinden.com.br/ 39

Mecanismos de Armazenamento

Cada banco de dados armazenado em um subdiretrio no diretrio de armazenamento de MySQL (geralmente /var/lib/mysql/). Cada tabela corresponde a:

Um arquivo .frm Outros arquivos com o mesmo nome, e extenses 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 disponveis, 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 ( definio ) [ENGINE = nome_engine] [CHARACTER SET charset] [COLLATE collation];

http://marx.vanderlinden.com.br/

44

CREATE TABLE

A definio consiste de pares: nome TIPO, nome TIPO, ... possvel especificar um mecanismo de tabela (engine) Se no for especificada, usado o padro. possvel 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 vrios tipos de dados, pertencentes a vrias categorias:

Numricos Inteiros Reais Textos Dados Binrios 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 Numricos

Todos os tipos de dados inteiros tm 3 campos opcionais:

(M) Largura mxima de exibio (nmero de caracteres) UNSIGNED No permite valores negativos (dobra a capacidade para positivos) ZEROFILL Preenche com zeros o espao restante, na exibio
http://marx.vanderlinden.com.br/ 52

BIT

BIT[(M)]

Armazena uma seqncia de M bits. Padro: M = 1

Valores para BIT so especificados de acordo com a seguinte sintaxe: b'01001'

http://marx.vanderlinden.com.br/

53

Tipos de Dados Reais

Em todos os casos: M dgitos totais, com D casas decimais. FLOAT[(M[,D])] Nmero de ponto flutuante de preciso simples (32 bits) DOUBLE[(M[,D])] Nmero de ponto flutuante de preciso dupla (64 bits) DECIMAL[(M[,D])] Nmero de ponto fixo.

Padro: M = 10, D = 0

http://marx.vanderlinden.com.br/

54

Tipos de Dados para Texto

CHAR[(M)] M caracteres

Padro: M = 1

VARCHAR(M) Uma string de, no mximo, 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, possvel 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 Binrios

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 binrio? Diferenciar maisculas e minsculas? Tamanho fixo (CHAR) ou varivel? Espao vs. Eficincia 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 enumerao. SET('valor1','valor2',...)

Uma string que pode ter zero ou mais valores, desde que todos faam parte do conjunto.

http://marx.vanderlinden.com.br/

60

ENUM e SET

A lista de dados especificada na criao define os nicos valores legais do campo. Pode haver ou no distino entre maisculas e minsculas, dependendo do collation. No ENUM, a ordem especificada a ordem usada em operaes de ordenamento. Os campos de SET e ENUM so armazenados como nmeros inteiros:

ENUM: 1 ou 2 bytes
http://marx.vanderlinden.com.br/ SET: 1,2,3,4 ou 8 bytes 61

SET

Mltiplos valores em SET so determinados por vrgulas. 'carro,trem,avio' Valores invlidos acrescentados a um SET so ignorados. Valores repetidos tambm so 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 convenes: '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, possvel especificar se se quer que sejam permitidos valores nulos (vazios):

NULL (padro) NOT NULL

Para a maioria dos campos, possvel especificar um valor padro: DEFAULT valor
http://marx.vanderlinden.com.br/ 66

Regras para valores Default

Caso o valor default no seja especificado:


Valores numricos: 0 Datas e Horas: 0000-00-00 00:00:00 Strings: ''

http://marx.vanderlinden.com.br/

67

PRIMARY KEY

Para especificar uma chave primria, basta acrescentar aps o nome do campo a frase PRIMARY KEY. Chaves primrias:

No podem ter valores repetidos. No podem ter valores nulos. Identificam inequivocadamente uma linha na tabela.
http://marx.vanderlinden.com.br/ 68

AUTO_INCREMENT

A opo AUTO_INCREMENT pode ser adicionada a qualquer valor numrico. Novos valores para este campo so automaticamente incrementados em 1. S pode haver um campo AUTO_INCREMENT em uma tabela.

til para ndices e chaves primrias. Automaticamente torna a coluna NOT NULL. Se no especificada, a contagem comea 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: No 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: Criaco 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: Possveis 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: Criao 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: Possveis 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

Informaes 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 Temporrias

possvel criar tabelas temporrias. Existem apenas enquanto dura a conexo com o servidor. A tabela temporria vista apenas pelo cliente que a criou. Sintaxe: CREATE TEMPORARY TABLE [IF NOT EXISTS] nome_tabela ( definio ) [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 vrias 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 caracterstica 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 caracterstica de uma coluna (tipo, tamanho, chave primria): ALTER TABLE tabela MODIFY campo definio

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 primria: 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 opes

ENGINE, CHARACTER SET e COLLATE tambm podem ser especificados aps 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