Você está na página 1de 91

Introduo a MySQL

Programao Dinamica

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
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.
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.
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.
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.

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

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..
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.

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

11

MySQL Cliente/Servidor
Cliente MySQL
(Linha de
Comando)

PHP
Mdulo
Cliente MySQL

Servidor
MySQL

Banco de
Dados

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.

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

15

Cliente MySQL

O cliente-padro MySQL uma aplicao de


linha de comando.
Interativo
Script
Uso:
mysql [opes...] [nome_bd]

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

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.

19

SELECT

SELECT com valor literal:

mysql> SELECT 'Hello, World!';


+---------------+
| Hello, World! |
+---------------+
| Hello, World! |
+---------------+
1 row in set (0.00 sec)

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)

21

USER()

A funo USER() retorna o usurio atual.

mysql> SELECT USER();


+----------------+
| USER()
|
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

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)
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 |
+----------------+--------------------+

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)
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)

26

\c

possvel cancelar um comando antes de


envi-lo ao servidor, usando \c

mysql> SELECT USER(),


-> VERSION()\c
mysql>

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.

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)

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

(US ASCII)

utf8

(UTF-8 Unicode)

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.

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

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)

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.

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.

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)

41

Mecanismos de Armazenamento

Para exibir os Mecanismos de Armazenamento


disponveis, pode-se usar o comando SHOW
ENGINES.

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
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];

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.

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)

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
|
|
+-------+---------------------+------+-----+---------+-------+

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)

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

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)

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
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'

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.


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]

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

57

Tipos de Dados Binrios

BLOB: Binary Large Object

TINYBLOB At 255 bytes

BLOB At 64k

MEDIUMBLOB At 14mb

LONGBLOB At 4GB

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

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.

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.

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'
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

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

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.
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.

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)

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)

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)

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)
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;
75

SHOW TABLES
mysql> SHOW TABLES;
+-----------------+
| Tables_in_teste |
+-----------------+
| sgbd
|
| usuario
|
+-----------------+
2 rows in set (0.00 sec)

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)
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)
79

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);

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
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)

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

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

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

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)

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

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

92