SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
STORAGE ENGINES 
Wagner Bianchi 
Certified MySQL 5.0 Developer 
Certified MySQL 5.0 Database Administrator 
Certified MySQL 5.1 Cluster Database Administrator
Artigos recomendados: 
• http://imasters.uol.com.br/artigo/8065/bancodedados/mysql_innodb_-_introducao_e_principais_caracteristicas/ 
• http://imasters.uol.com.br/artigo/7913/mysql/maria_o_novo_storage_engine_do_mysql/
Introdução 
" O MySQL permite a você escolher um entre vários Storage Engines 
quando inicia a criação de tabelas em seu banco de dados; 
" Os Storage Engines, chamados antes de Table Types (deprecated), 
também é conhecido como Motor de Armazenamento ou ainda Engenharia 
de Armazenamento, ao pé da letra; 
" Cada Storage Engine tem suas respectivas características, desde um 
Engine bastante veloz e enxuto, no caso do MyISAM até um Engine mais 
robusto que é o INNODB; 
" Neste módulo, trabalharemos com os Storage Engines abordados pela 
certificação do MySQL, na versão 5.0. Existem vários outros Engines que 
poderão ser encontrados no Apêndice A;
Introdução 
" O MySQL, por via de sua arquitetura, é tipo como um Plugable Database, 
pois, vários ativistas da comunidade do MySQL desenvolvem seus próprios 
Engines com características de outros SGBD’s, plugam no MySQL e 
trabalham com aquelas características; 
" Nem todos os Storage Engines listados acima fazem parte de uma 
instalação default do MySQL. A mairoria daqueles que vem desabilitados 
por padrão tem certa facilidade para sua habilitação; 
" Cada Engine tem suas próprias características que dão muita flexibilidade 
na utilização do MySQL;
Introdução 
" Podemos checar quais são os Storage Engines habilitados em nossa 
instalação de MySQL atual, através do comando: 
SHOW ENGINES;
Introdução 
" Podemos perceber que há muitas opções de Storage Engines para se 
utilizar, cada com a sua característica diferente, sendo que, são eles 
transacionais ou não-transacionais; 
" Atentando-se à figura anterior, percebemos que o Storage Engine padrão 
do MySQL é o MyISAM, mas isso poderá ser modificado facilmente através 
da linha de comando – alterando o Engine padrão somente para sua 
sessão - ou através do arquivo de opções my.ini ou my.cnf, adicionando a 
seguinte linha ao agrupamento [mysqld]: 
[mysqld] 
default-storage-engine=INNODB 
" A sintaxe para se adicionar uma opação não existente ao arquivo de 
configuração mudou da versão 4.x para a versão 5.x, Anteriormente era 
setado com set-variable=variável=valor.
Introdução 
" Atualmente, nosso servidor de bancos de dados MySQL, tem como 
Storage Engine padrão o MyISAM. Após adicionarmos a linha no arquivo 
de opções, o my.ini ou my.cnf e salvá-lo. Reiniciamos o servidor de bancos 
de dados MySQL e veja o que temos:
Introdução 
" Quando criamos uma tabela em um banco de dados do servidor de bancos 
de dados MySQL sem mencionar a declaração Engine em meio ao 
CREATE TABLE, o SGBD elegerá esta tabela como parte como uma tabela 
controlado pelo Storage Engine padrão atualmente no servidor:
MyISAM 
" MyISAM é o Storage Engine padrão do MySQL, baseado no código 
do antigo Engine chamado ISAM - já obsoleto na versão 5.0 - só 
que com muito mais funcionalidades (chamadas de extensões); 
" Quando criamos uma tabela MyISAM, são adicionados três tipos de 
arquivos dentro do diretório do banco de dados contido dentro do 
diretório chamado de DATADIR ou diretório de dados: 
– Um arquivo “.MYD”: é o arquivo de dados da tabela; 
– Um arquivo “.MYI”: é o arquivo de índices da tabela; 
– Um arquivo “.frm”: é o arquivo que contém o “CREATE TABLE”; 
" Normalmente, este três arquivos são armazenados em um mesmo 
local, dentro do diretório do banco de dados, sob o diretório de 
dados do MySQL. Em sistemas que suportam links simbólicos 
(symlinks), podemos armazenar tais arquivos em outros locais;
MyISAM 
" MyISAM tem o controle mais flexível de colunas auto_increment em relação 
a outros Storage Engines; 
" Muito rápidas para leitura e bastante lentas para ambientes com muitas 
escritas; 
" Não tem suporte a transações e nem a integridade referencial; 
" Tem bloqueio em nível de tabela, ou seja, cada comando, seja ele INSERT, 
DELETE ou UPDATE irão adquirir bloqueio de toda a tabela; 
" Deadlocks não ocorrem!
MyISAM 
" Suportam FULL-TEXT searching e Tipos de Dados Espaciais para 
aplicações de Geoprocessamento; 
" Tabelas MyISAM tem seu formatos de linha, podendo ser: 
– Fixed-Row Format: todas as linhas deste tipo de tabela MyISAM tem o mesmo 
tamanho (fácil de recuperar mas necessitam de mais espaço); 
– Dynamic-Row Format: o tamanho das linhas varia e não são eficientemente 
recuperadas. Fragmentações ocorrem com maior facilidade e consomem menos 
espaço; 
– Compressed Format: tais tabelas são comprimidas para liberar espaços, 
otimizadas para leitura e são read-only.
MyISAM 
" Podemos checar qual é o formato de linha da tabela através do comando: 
SHOW TABLE STATUS LIKE ‘%t_test%’;
MyISAM 
" Uma tabela tem formato de linhas fixas quando utiliza tipos de dados para 
armazenar caracteres diferentes do tipo VARCHAR. Se uma tabela contar 
com um campo com o tipo de dados VARCHAR, já passará a ser uma tabela 
com formato de linha dinâmico;
MyISAM 
" Podemos, na criação de uma tabela MyISAM, dizer o total de linhas que 
queremos ter na tabela. Caso falte espaço em disco ao adicionar linhas à 
uma tabela deste tipo, nenhum erro será enviado, as operações serão 
suspensas até que mais espaço seja liberado; 
" Para criar uma tabela MyISAM: 
CREATE TABLE t1 (id int not null) Engine=MyISAM; 
" O MyISAM possui várias opções que podemos adicionar ao arquivo de 
opções do MySQL, o my.ini ou my.cnf para otimizar sua performance; 
" Muitos deles requerem determinado equilíbrio em relação à memória 
disponível no servidor – host – para ser utilizada pelo SGBD;
MyISAM 
" MyISAM apresenta graves problemas de crash em tabelas. Sistemas que 
trabalham em locais com problemas de queda de energia podem ter 
problemas com tabelas MyISAM, que são mais sensíveis que todas as 
outras por ter estrutura mais enxuta; 
" No Linux, podemos facilmente simular o problema através do seguinte 
comando: $ kill -9 `pgrep mysqld` 
" Quando o banco retorna às operações, o mecanismo de crash-recovery 
do MyISAM não consegue se recuperar; 
" Caso você tenha um ambiente com poucas escritas e mais leituras que 
necessite de boa performance na resposta, considere utilizar o mais novo 
Engine chamado MARIA. O teste do MARIA pode ser visto em: 
– http://imasters.uol.com.br/artigo/7913/mysql/maria_o_novo_storage_engine_do_mysql/
Archive 
" O Archive é um Storage Engine que provê eficiente forma para armazenar 
grandes quatidades de dados quando não é necessário se ter índices e se 
precisa liberar espaço em disco; 
" Esse Engine só suporta declarações SELECT e INSERT; 
" Toda tabela Archive é, após ser criada, cria no diretório do banco de dados 
a que pertence, sob o diretório de dados, um arquivo “.frm”, que é o arquivo 
que contém o CREATE TABLE, os seguintes arquivos: 
– Um arquivo “.ARZ”: esse é o arquivo que contém os dados – datafile; 
– Um arquivo “.ARM”: esse arquivo armazena metadados da tabela; 
– Um arquivo “.frm”: que contém o CREATE TABLE; 
" O Archive vem habilitado a partir da versão MySQL 5.0 max beta;
Archive 
" É uma ótima opção para se formar os históricos ou mesmo armazenar 
parte dos dados de uma outra grande tabela para aliviar otimizar consultas; 
" Economizar espaços, mas com algumas limitações e com muita segurança, 
essa é a principal característica de uma tabela que é controlada pelo 
Storage Engine Archive; 
" Para fazer um teste e já demonstrar como criar tabelas controladas pelo 
Storage Engine Archive, vamos criar 3 tabelas com o mesmo números de 
linhas, sendo que uma primeira será uma tabela controlada pelo Storage 
Engine MyISAM, a segunda utilizaremos o tipo INNODB e ao final, 
criaremos uma tabela controlada pelo Engine Archive; 
" Ao final, veja o quanto os dados foram comprimidos;
Archive 
" Tabela 1: 
mysql> create table test_myisam engine=myisam as 
> select * from mysql.user; 
Query OK, 112050 rows affected (0.00 sec) 
Records: 112050 Duplicates: 0 Warnings: 0 
" Tabela 2 
mysql> create table test_innodb engine=innodb as 
> select * from mysql.user; 
Query OK, 112050 rows affected (0.00 sec) 
Records: 112050 Duplicates: 0 Warnings: 0 
" Tabela 3 
mysql> create table test_archive engine=archive as 
> select * from mysql.user; 
Query OK, 112050 rows affected (0.00 sec) 
Records: 112050 Duplicates: 0 Warnings: 0
Archive 
mysql> SELECT table_name table_name, 
-> engine, ROUND(data_length/1024/1024,2) total_size_mb, 
-> table_rows 
-> FROM information_schema.tables 
-> WHERE table_schema = 'gim' and table_name like 'test%' 
-> ORDER BY table_rows ASC;
Federated 
" O Storage Engine Federated está disponível no MySQL desde a versão 
5.0.3; 
" A principal função deste Storage Engine é acessar dados em tabelas de 
outros servidores MySQL remotos, sem a utilização de replicação ou 
mesmo qualquer tecnologia de cluster; 
" Quando utilizamos uma tabela controlada pelo Storage Engine Federated 
em um servidor de bancos de dados MySQL local, as consultas a este 
banco buscam dados do servidor remoto. Tabelas locais não armazenam 
dados; 
" Caso você resolva instalar o MySQL a partir do source (código fonte), 
inclua a opção –with-federated-storage-engine;
Federated 
" Quando criamos uma tabela controlado pelo Storage Engine Federated, é 
criado um único arquivo, de extensão “.frm” no diretório do banco de dados, 
sob o diretório de dados do MySQL (DATADIR); 
" Ao selecionarmos dados de uma tabela do tipo Federated, uma conexão 
com um servidor remoto é feita e então os dados remotos são retornados. 
A conexão é realizada utilizando a MySQL client API; 
" Primeiro, decidimos qual é a tabela do servidor remoto que queremos criar 
uma tabela “atalho” no servidor local. Essa tabela remota pode ser do tipo 
MyISAM, INNODB ou controlada por qualquer outro Storage Engine; 
" Após definir a tabela remota e os dados, a tabela controlada pelo Storage 
Engine Federated e criada no servidor local;
Federated 
" Tabela remota: 
CREATE TABLE test_table ( 
id INT(20) NOT NULL AUTO_INCREMENT, 
name VARCHAR(32) NOT NULL DEFAULT '', 
other INT(20) NOT NULL DEFAULT '0', 
PRIMARY KEY (id), INDEX name (name), 
INDEX other_key (other) ) 
ENGINE=MyISAM 
DEFAULT CHARSET=latin1;
Federated 
" Tabela local: 
CREATE TABLE federated_table ( 
id INT(20) NOT NULL AUTO_INCREMENT, 
name VARCHAR(32) NOT NULL DEFAULT '', 
other INT(20) NOT NULL DEFAULT '0', 
PRIMARY KEY (id), INDEX name (name), 
INDEX other_key (other) ) 
ENGINE=FEDERATED DEFAULT CHARSET=latin1 
CONNECTION='mysql://fed_user@remote_host:9306/ 
federated/test_table';
Federated 
" Antes da versão 5.0.13, a declaração COMMENT era utilizada no lugar de 
CONNECTION ; 
" A formula geral da string de conexão abordada na declaração CONNECTION 
ou COMMENT ao final da tabela é a seguinte: 
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name 
" Esse Storage Engine plenitude no caminho do que é chamado de alta-disponibilidade 
em bancos de dados, pois, com ele, você poderá facilmente 
obter dados remotos em conjunção com os dados locais; 
" Uma tabela do tipo Federated não precisa conter exatamente as mesmas 
colunas da tabela remota;
Federated 
" Tabelas controladas pelo Storage Engine Federated não suportam 
transações; 
" Suportam SELECT, INSERT, DELETE e UPDATE; 
" Não são utilizados nenhum tipo de bloqueio em tabelas controladas por 
este Storage Engine; 
" Não suportam a criação de índices; 
" Fórum sobre o Storage Engine: 
– http://forums.mysql.com/list.php?105
Memory 
" Memory Storage Engine controla tabelas previamente criadas, mantendo 
seus dados em memória. Antes tinham o nome de HEAP; 
" Toda tabela controlada pelo Storage Engine MySQL está associada a um 
arquivo de extensão “.frm”, que é criado no diretório do banco de dados a 
que ela pertence, sob o diretório de dados do MySQL; 
" Para criar uma tabela controlada por este Storage Engine, basta utilizar a 
declaração Engine, como segue: 
CREATE TABLE test_table(id int, name CHAR(60))Engine=MEMORY; 
" Tem ótima performance mas o conteúdo das tabelas Memory não são 
mantidos quando o servidor é reiniciado;
Memory 
" Após reiniciar o servidor, somente a estrutura da tabela permancerá no 
banco de dados; 
" Além de índices BTREE INDEX, tabelas controladas pelo Storage Engine 
Memory também podem ter HASH INDEX, que são índices baseados em 
endereços hash de memória: fx00a26a4d7c2cee8e1af1958caf8365dda4 
" HASH INDEX são muito velozes para comparações com os operadores = e 
<=>, equanto que BTREE INDEX são mais usuáris e trabalham bem com 
qualquer tipo de comparação, por exemplo com o uso de BETWEEN;
Merge 
" Uma tabela controlada pelo Storage Engine Merge, é uma coleção de 
tabelas MyISAM de mesma estrutura; 
" Uma consulta submetida à uma tabela do tipo Merge, *percorrerá todas as 
tabelas MyISAM que formam a tabela controlada pelo Storage Engine 
Merge; 
" Cada tabela controlada pelo Storage Engine Merge apresenta dois arquivos 
no diretório do banco de dados ao qual pertence, sob o diretório de dados 
do MySQL (DATADIR): 
– Um arquivo “.frm”: é o arquivo que contém o CREATE TABLE; 
– Um arquivo “.MRG”: arquivo que contém a lista de tabelas que fazem parte 
da tabela controlada pelo Storage Engine Merge;
Merge 
" O bloqueios em uma tabela do tipo Merge funcionam igualmente com 
acontece com tabelas controladas pelo Storage Engine MyISAM, em nível 
de tabela (table-level locking); 
" O Storage Engine Merge suporta as declaração SELECT, DELETE, UPDATE 
e INSERT. Para a última declaração, a tabela do conjunto que será afetada 
com a inserção uma nova linha, respeitará a configuração abordada na 
sintaxe do CREATE TABLE, que pode ser: 
– INSERT_METHOD = LAST: insere a nova linha da declaração INSERT no 
fim da tabela; 
– INSERT_METHOD = FIRST: insere a nova linha da declaração INSERT 
no início da tabela;
Merge 
" Uma disvantagem é o aumento de tabelas abertas, que aumenta a 
quantidade descriptores, caso precise ler ou escrever dados em uma tabela 
Merge que coleciona muitas outras tabelas MyISAM; 
" Com o comando s, no mysql client, é possível se verificar a quantidade de 
tabelas estão abertas no momento; 
" Pouquíssimo proveito dos índices definidos nas tabelas que fazem parte da 
coleção, pois, por serem muitos índices, o otimizador precisa primeiro 
eleger um único para sua busca; 
" Tabelas Merge são bastante utilizadas para dados históricos, assim como 
tabelas controlados pelo Storage Engine Archive;
Merge 
" Criando as tabelas MyISAM: 
mysql> create table a (id int) engine=myisam; 
Query OK, 0 rows affected (0.02 sec) 
mysql> create table b (id int) engine=myisam; 
Query OK, 0 rows affected (0.02 sec) 
" Criando a coleção com o Storage Engine Merge: 
mysql> create table ab (id int) 
> engine=merge union(a,b) insert_method=last; 
Query OK, 0 rows affected (0.01 sec)
Merge 
" Para alterar o INSERT_METHOD: 
mysql> alter table ab insert_method=first; 
Query OK, 0 rows affected (0.02 sec) 
Records: 0 Duplicates: 0 Warnings: 0
INNODB 
" O INNODB é o Storage Engine, de longe, o mais utilizado no mundo por 
suas características e suporte a vários features importantes; 
" Ao criar uma tabela controlado pelo Storage Engine INNODB, um arquivo 
“.frm” é criado no diretório do banco de dados, sob o diretório de dados do 
MySQL (DATADIR); 
" Índices e dados são armazenados dentro Tablespace, localizado, em uma 
instalação padrão, um diretório acima do DATADIR (MS Windows) ou em / 
var/lib/mysql, com o nome de ibdata1, onde são armazenados também 
os segmentos de undo ou “rollback segments”; 
" INNODB da suporte à transações, suporte ao modelo ACID (atomicidade, 
concorrência, isolamento e durabilidade), provê auto_recovery muito 
eficiente, com 4 níveis de utilização e multiversionamento; 
" Suporte a integridade Rerencial com Primary Keys e Foreign Keys;
INNODB 
" Em 2005, a ORACLE anunciou a compra da empresa finlandesa 
INNOBase OY, que desenvolveu o INNODB; 
" O InnoDB é distribuído sob os termos da GNU GPL (General Public 
License). O software é embudito ao MySQL através de um acordo 
contratual; 
" Por padrão, em algumas instalações, o INNODB vem habilitado por padrão. 
Caso se queira retirar o INNODB de uma instalação feita a partir do source 
(código fonte), instale o MySQL com a opção –-skip-innodb; 
" Podemos habilitar e desabilitar o INNODB através do arquivo de opções, 
my.ini ou my.cnf;
INNODB 
" O INODB possui uma série de logs que são armazenados em arquivos 
chamados ib_logfilex. Tais logs, em uma instalação padrão, ficam 
armazenados no mesmo diretório aonde está localizado o Tbalespace; 
" O Tablespace do INNODB é um Tablespace compartilhado, ou seja, 
armazena dados e índices de todas as tabelas INNODB que existirem no 
servidor MySQL (esse Tablespace é referenciado como sendo uma single 
storage area). Não existe um arquivo específico para índices e outro para 
dados, assim como acontece com o MyISAM, por exemplo; 
" Podemos ter um Tablespace para cada tabela, adicionando a opção abaixo 
no arquivo de opções, my.ini ou my.cnf: 
[mysqld] 
innodb-file-per-table
INNODB 
" Quando adicionada a opção citada ao arquivo de opções, devemos reiniciar 
o MySQL para que, quando o SGBD iniciar o módulo INNODB e ler as 
opções setadas no arquivo de opções, ele crie um Tablespace para cada 
tabela; 
" Notaremos que agora teremos dois arquivos no diretório do banco de 
dados sob o diretório de dados do MySQL (DATADIR): 
– Um arquivo “.frm”: normalmente criado para cada tabela 
controlado pelo Storage Engine INNODB; 
– Um arquivo “.ibd”: arquivo que é o Tablespace individual, criado a 
partir das novas configurações do arquivo de opções;
INNODB 
" Muito cuidado ao configurar o INNODB para atuar com várias Tablespaces. 
O Tablespace principal continua sendo utilizado para armazenar o 
dicionário de dados e o segmento de rollback; 
" Com o INNODB, podemos desenvolver os relacionamentos entre as 
tabelas de nosso banco de dados, utilizando chaves primárias – PRIMARY 
KEY – e chaves estrangeiras – FOREIGN KEY; 
" Para atribuir uma constraint ou restrição de relacionamento para garantir a 
integridade referencial temos que saber o que é a integridade referencial e 
ter ciências dos cuidados que temos que tomar na hora de firmar o 
relacionamento entre as tabelas; 
" As chaves estrangeiras, suportadas pelo Storage Engine INNODB tem 
suas respectivas propriedades de CASCADE, NO ACTION, SET NULL e SET 
DEFAULT;
INNODB 
" Para criar FOREIGN KEYS, temos que nos atentar para as seguintes 
regras: 
– As colunas envolvidas no relacionamento devem ser indexadas. Caso um 
índice não seja criado explicitamente para a FOREIGN KEY, o MySQL criará 
um automaticamente; 
– As colunas envolvidas no relacionamento devem ter o mesmo tipo de 
dados numérico; 
– As colunas devem utilizar ou não a propriedade UNSIGNED; 
" Podemos atribuir os relacionamento na criação das tabelas ou ainda com a 
declaração ALTER TABLE; 
" Veremos a seguir as duas formas;
INNODB 
" Declarado a FOREIGN KEY na criação da tabela filha: 
mysql> create table tbl_pai ( 
-> id int not null primary key 
-> ) engine=innodb; 
Query OK, 0 rows affected (0.02 sec) 
mysql> create table tbl_filha ( 
-> id_pai int not null primary key, 
-> constraint foreign key (id_pai) 
-> references tbl_pai(id) 
-> ) engine=innodb; 
Query OK, 0 rows affected (0.00 sec)
INNODB 
" Declarado a FOREIGN KEY com ALTER TABLE: 
mysql> create table tbl_pai ( 
-> id int not null primary key 
-> ) engine=innodb; 
Query OK, 0 rows affected (0.03 sec) 
mysql> create table tbl_filha ( 
-> id_pai int not null primary key 
-> ) engine=innodb; 
Query OK, 0 rows affected (0.01 sec) 
mysql> alter table tbl_filha add constraint 
-> foreign key (id_pai)references tbl_pai (id); 
Query OK, 0 rows affected (0.13 sec) 
Records: 0 Duplicates: 0 Warnings: 0
INNODB 
" Poderíamos ter utilizado as propriedades ON DELETE e ON 
UPDATE, como fazemos logo abaixo, com CASCADE: 
mysql> create table tbl_pai ( 
-> id int not null primary key 
-> ) engine=innodb; 
Query OK, 0 rows affected (0.00 sec) 
mysql> create table tbl_filha ( 
-> id_pai int not null primary key 
-> ) engine=innodb; 
Query OK, 0 rows affected (0.00 sec) 
mysql> alter table tbl_filha add constraint foreign key (id_pai) 
-> references tbl_pai (id) on delete cascade on update 
cascade; 
Query OK, 0 rows affected (0.05 sec) 
Records: 0 Duplicates: 0 Warnings: 0
INNODB 
" Colocando a propriedade CASCADE na atribuição de uma constraint 
FOREIGN KEY, ao excluir o registro PAI, todos os registros na tabela filha 
que tenham o mesmo identificador da chave primária da tabela PAI, serão 
excluídos; 
" Colocado a propriedade NO ACTION na atribuição de uma constraint 
FOREIGN KEY, ao tentar excluir o registro PAI, este não será exlcuído por 
causa da amarração deste registro na tabela filha; 
" Colocado a propriedade SET NULL na atribuição de uma constraint 
FOREIGN KEY, ao excluir o registro PAI, aonde existir o identificador do 
PAI – PRIMARY KEY – no filho, seu valor será setado para NULL. 
Logicamente, a coluna da FOREIGN KEY não poderá receber um valor 
NULL se ela foi declarada como NOT NULL;
INNODB 
" Colocando a propriedade SET DEFAULT na atribuição de uma constraint 
FOREIGN KEY, ao excluir o registro PAI, todos os registros na tabela filha 
que tenham o mesmo identificador da chave primária da tabela PAI, recebe 
o dado que foi definido na cláusula DEFAULT na criação da tabela; 
" Demontrações.
Exercícios 
" Com base no conteúdo apresentado, resolva a Lista 1 de exercícios. 
" Referência bibliográfica: 
– Manual on-line; 
Sakila on the beach!

Weitere ähnliche Inhalte

Was ist angesagt?

GUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10gGUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10gDaniela Macedo
 
Oracle Real Application Clusters
Oracle Real Application ClustersOracle Real Application Clusters
Oracle Real Application Clusters4Partner
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracleEduardo Lopes
 
Sistemas operativo servidor (PT)
Sistemas operativo servidor (PT)Sistemas operativo servidor (PT)
Sistemas operativo servidor (PT)Joao Kanino
 
Oracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosOracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosRodrigo Almeida
 
MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?MySQL Brasil
 
Sistemas servidor.docx
Sistemas servidor.docxSistemas servidor.docx
Sistemas servidor.docxJoao Kanino
 
People soft on rac sig.en.pt
People soft on rac sig.en.ptPeople soft on rac sig.en.pt
People soft on rac sig.en.ptsaulfreitas
 
High Avaiability Architeture with Oracle Data Guard Broker
High Avaiability Architeture with Oracle Data Guard BrokerHigh Avaiability Architeture with Oracle Data Guard Broker
High Avaiability Architeture with Oracle Data Guard BrokerJonatan Ritter
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidorAndré bogas
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidorsimoesflavio
 
Sistema Operativo Servidor
Sistema Operativo ServidorSistema Operativo Servidor
Sistema Operativo ServidorMiguel Marques
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?Rodrigo Almeida
 
Trabalho de sistema operativo servidor
Trabalho de sistema operativo servidorTrabalho de sistema operativo servidor
Trabalho de sistema operativo servidordtml2k
 
Sistemas operativos servidores
Sistemas operativos  servidoresSistemas operativos  servidores
Sistemas operativos servidoresJoel Saramago
 
WBConsulting, MySQL Performance Tuning Basics
WBConsulting, MySQL Performance Tuning BasicsWBConsulting, MySQL Performance Tuning Basics
WBConsulting, MySQL Performance Tuning BasicsWBConsulting
 

Was ist angesagt? (20)

Otimização MySQL
Otimização MySQLOtimização MySQL
Otimização MySQL
 
GUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10gGUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10g
 
Oracle Real Application Clusters
Oracle Real Application ClustersOracle Real Application Clusters
Oracle Real Application Clusters
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
 
Sistemas operativo servidor (PT)
Sistemas operativo servidor (PT)Sistemas operativo servidor (PT)
Sistemas operativo servidor (PT)
 
Oracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosOracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dados
 
MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?MySQL 5.6, o que há de novidade?
MySQL 5.6, o que há de novidade?
 
Componentes Web J2EE
Componentes Web J2EEComponentes Web J2EE
Componentes Web J2EE
 
Sistemas servidor.docx
Sistemas servidor.docxSistemas servidor.docx
Sistemas servidor.docx
 
People soft on rac sig.en.pt
People soft on rac sig.en.ptPeople soft on rac sig.en.pt
People soft on rac sig.en.pt
 
Apostila Oracle 10g
Apostila Oracle 10gApostila Oracle 10g
Apostila Oracle 10g
 
High Avaiability Architeture with Oracle Data Guard Broker
High Avaiability Architeture with Oracle Data Guard BrokerHigh Avaiability Architeture with Oracle Data Guard Broker
High Avaiability Architeture with Oracle Data Guard Broker
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidor
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidor
 
Sistema Operativo Servidor
Sistema Operativo ServidorSistema Operativo Servidor
Sistema Operativo Servidor
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?
 
Trabalho de sistema operativo servidor
Trabalho de sistema operativo servidorTrabalho de sistema operativo servidor
Trabalho de sistema operativo servidor
 
Sistemas operativos servidores
Sistemas operativos  servidoresSistemas operativos  servidores
Sistemas operativos servidores
 
WBConsulting, MySQL Performance Tuning Basics
WBConsulting, MySQL Performance Tuning BasicsWBConsulting, MySQL Performance Tuning Basics
WBConsulting, MySQL Performance Tuning Basics
 

Andere mochten auch

SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...
SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...
SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...EBAI
 
Six stroke-engine-presenation
Six stroke-engine-presenationSix stroke-engine-presenation
Six stroke-engine-presenationgunjan panchal
 
Cloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarbor
Cloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarborCloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarbor
Cloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarborSvetlin Nakov
 
Combustion in diesel engine
Combustion in diesel engineCombustion in diesel engine
Combustion in diesel engineAmanpreet Singh
 
Apache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep DiveApache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep DiveXu Jiang
 
SEO e Social - Unindo o sentimento das pessoas ao search engine
SEO e Social - Unindo o sentimento das pessoas ao search engineSEO e Social - Unindo o sentimento das pessoas ao search engine
SEO e Social - Unindo o sentimento das pessoas ao search engineFabio Ricotta
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Search Engine Optimization (SEO)
Search Engine Optimization (SEO)Search Engine Optimization (SEO)
Search Engine Optimization (SEO)Dennis Deacon
 
Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...
Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...
Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...Michel Montenegro
 
Introdução ao Google App Engine
Introdução ao Google App EngineIntrodução ao Google App Engine
Introdução ao Google App EngineRodrigo Amaral
 
Periodic Table of SEO Success Factors & Guide to SEO by SearchEngineLand
Periodic Table of SEO Success Factors & Guide to SEO by SearchEngineLandPeriodic Table of SEO Success Factors & Guide to SEO by SearchEngineLand
Periodic Table of SEO Success Factors & Guide to SEO by SearchEngineLandSearch Engine Land
 
Internal Combustion Engines - Construction and Working (All you need to know,...
Internal Combustion Engines - Construction and Working (All you need to know,...Internal Combustion Engines - Construction and Working (All you need to know,...
Internal Combustion Engines - Construction and Working (All you need to know,...Mihir Pai
 
É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?José Farias
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Tk03 Google App Engine Fr
Tk03 Google App Engine FrTk03 Google App Engine Fr
Tk03 Google App Engine FrValtech
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App EngineRodrigo Amaral
 

Andere mochten auch (20)

SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...
SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...
SEARCH ENGINE OPTIMIZATION - SEO: a contribuição do bibliotecário na otimizaç...
 
Six stroke-engine-presenation
Six stroke-engine-presenationSix stroke-engine-presenation
Six stroke-engine-presenation
 
6 stroke engine
6 stroke engine6 stroke engine
6 stroke engine
 
Cloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarbor
Cloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarborCloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarbor
Cloud for Developers: Azure vs. Google App Engine vs. Amazon vs. AppHarbor
 
Combustion in diesel engine
Combustion in diesel engineCombustion in diesel engine
Combustion in diesel engine
 
Apache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep DiveApache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
Apache Kylin: OLAP Engine on Hadoop - Tech Deep Dive
 
RoomCloud Booking Engine
RoomCloud Booking EngineRoomCloud Booking Engine
RoomCloud Booking Engine
 
SEO e Social - Unindo o sentimento das pessoas ao search engine
SEO e Social - Unindo o sentimento das pessoas ao search engineSEO e Social - Unindo o sentimento das pessoas ao search engine
SEO e Social - Unindo o sentimento das pessoas ao search engine
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Search Engine Optimization (SEO)
Search Engine Optimization (SEO)Search Engine Optimization (SEO)
Search Engine Optimization (SEO)
 
Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...
Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...
Engine 2D para criação de Jogos em Java - Veja como é fácil criar um RPG 2D e...
 
Introdução ao Google App Engine
Introdução ao Google App EngineIntrodução ao Google App Engine
Introdução ao Google App Engine
 
Periodic Table of SEO Success Factors & Guide to SEO by SearchEngineLand
Periodic Table of SEO Success Factors & Guide to SEO by SearchEngineLandPeriodic Table of SEO Success Factors & Guide to SEO by SearchEngineLand
Periodic Table of SEO Success Factors & Guide to SEO by SearchEngineLand
 
Ic engine
Ic engineIc engine
Ic engine
 
Internal Combustion Engines - Construction and Working (All you need to know,...
Internal Combustion Engines - Construction and Working (All you need to know,...Internal Combustion Engines - Construction and Working (All you need to know,...
Internal Combustion Engines - Construction and Working (All you need to know,...
 
Zk Framework
Zk FrameworkZk Framework
Zk Framework
 
É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Tk03 Google App Engine Fr
Tk03 Google App Engine FrTk03 Google App Engine Fr
Tk03 Google App Engine Fr
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App Engine
 

Ähnlich wie MySQL Storage Engines Guide

Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHPLeonardo Soares
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - BackupCaio Lima
 
MySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggMySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggFelipe Guimarães
 
Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosDaniela Macedo
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftAmazon Web Services LATAM
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistenciaRoberson Alves
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29Juliana Nascimento
 
Oracle 11g resumo
Oracle 11g resumoOracle 11g resumo
Oracle 11g resumomarcosgama
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6Wagner Bianchi
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Erisvaldo Junior
 
7- Mysql Prof.ª Cristiane Fidelix
7- Mysql Prof.ª Cristiane Fidelix7- Mysql Prof.ª Cristiane Fidelix
7- Mysql Prof.ª Cristiane FidelixCris Fidelix
 
UNIFAL - MySQL Transações - 5.0/5.6
UNIFAL - MySQL Transações - 5.0/5.6UNIFAL - MySQL Transações - 5.0/5.6
UNIFAL - MySQL Transações - 5.0/5.6Wagner Bianchi
 

Ähnlich wie MySQL Storage Engines Guide (20)

Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - Backup
 
MySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggMySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - Navegg
 
Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de Dados
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
MySQL - Workshop Buscapé
MySQL - Workshop BuscapéMySQL - Workshop Buscapé
MySQL - Workshop Buscapé
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
 
Tutorial mysql
Tutorial mysqlTutorial mysql
Tutorial mysql
 
4081 my sql
4081 my sql4081 my sql
4081 my sql
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistencia
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 
Oracle 11g resumo
Oracle 11g resumoOracle 11g resumo
Oracle 11g resumo
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6
 
C # banco de dados
C # banco de dadosC # banco de dados
C # banco de dados
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6
 
7- Mysql Prof.ª Cristiane Fidelix
7- Mysql Prof.ª Cristiane Fidelix7- Mysql Prof.ª Cristiane Fidelix
7- Mysql Prof.ª Cristiane Fidelix
 
UNIFAL - MySQL Transações - 5.0/5.6
UNIFAL - MySQL Transações - 5.0/5.6UNIFAL - MySQL Transações - 5.0/5.6
UNIFAL - MySQL Transações - 5.0/5.6
 

Mehr von Wagner Bianchi

Migrations from PLSQL and Transact-SQL - m18
Migrations from PLSQL and Transact-SQL - m18Migrations from PLSQL and Transact-SQL - m18
Migrations from PLSQL and Transact-SQL - m18Wagner Bianchi
 
Maxscale switchover, failover, and auto rejoin
Maxscale switchover, failover, and auto rejoinMaxscale switchover, failover, and auto rejoin
Maxscale switchover, failover, and auto rejoinWagner Bianchi
 
Meetup São Paulo, Maxscale Implementação e Casos de Uso
Meetup São Paulo, Maxscale Implementação e Casos de UsoMeetup São Paulo, Maxscale Implementação e Casos de Uso
Meetup São Paulo, Maxscale Implementação e Casos de UsoWagner Bianchi
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Wagner Bianchi
 
NY Meetup: Scaling MariaDB with Maxscale
NY Meetup: Scaling MariaDB with MaxscaleNY Meetup: Scaling MariaDB with Maxscale
NY Meetup: Scaling MariaDB with MaxscaleWagner Bianchi
 
Webinar: MariaDB Provides the Solution to Ease Multi-Source Replication
Webinar: MariaDB Provides the Solution to Ease Multi-Source ReplicationWebinar: MariaDB Provides the Solution to Ease Multi-Source Replication
Webinar: MariaDB Provides the Solution to Ease Multi-Source ReplicationWagner Bianchi
 
MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016Wagner Bianchi
 
MySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source ReplicationMySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source ReplicationWagner Bianchi
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoWagner Bianchi
 
UNIFAL - MySQL Views - 5.0/5.6
UNIFAL - MySQL Views - 5.0/5.6UNIFAL - MySQL Views - 5.0/5.6
UNIFAL - MySQL Views - 5.0/5.6Wagner Bianchi
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6Wagner Bianchi
 
UNIFAL - MySQL Stored Routines - 5.0/5.6
UNIFAL - MySQL Stored Routines - 5.0/5.6UNIFAL - MySQL Stored Routines - 5.0/5.6
UNIFAL - MySQL Stored Routines - 5.0/5.6Wagner Bianchi
 
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6Wagner Bianchi
 
UNIFAL - MySQL & Vagrant (iniciando os trabalhos)
UNIFAL - MySQL & Vagrant (iniciando os trabalhos)UNIFAL - MySQL & Vagrant (iniciando os trabalhos)
UNIFAL - MySQL & Vagrant (iniciando os trabalhos)Wagner Bianchi
 
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi
 
Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Wagner Bianchi
 
InnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQLInnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQLWagner Bianchi
 
MySQL Cluster Product Overview
MySQL Cluster Product OverviewMySQL Cluster Product Overview
MySQL Cluster Product OverviewWagner Bianchi
 

Mehr von Wagner Bianchi (19)

Migrations from PLSQL and Transact-SQL - m18
Migrations from PLSQL and Transact-SQL - m18Migrations from PLSQL and Transact-SQL - m18
Migrations from PLSQL and Transact-SQL - m18
 
Maxscale switchover, failover, and auto rejoin
Maxscale switchover, failover, and auto rejoinMaxscale switchover, failover, and auto rejoin
Maxscale switchover, failover, and auto rejoin
 
Meetup São Paulo, Maxscale Implementação e Casos de Uso
Meetup São Paulo, Maxscale Implementação e Casos de UsoMeetup São Paulo, Maxscale Implementação e Casos de Uso
Meetup São Paulo, Maxscale Implementação e Casos de Uso
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
 
NY Meetup: Scaling MariaDB with Maxscale
NY Meetup: Scaling MariaDB with MaxscaleNY Meetup: Scaling MariaDB with Maxscale
NY Meetup: Scaling MariaDB with Maxscale
 
Webinar: MariaDB Provides the Solution to Ease Multi-Source Replication
Webinar: MariaDB Provides the Solution to Ease Multi-Source ReplicationWebinar: MariaDB Provides the Solution to Ease Multi-Source Replication
Webinar: MariaDB Provides the Solution to Ease Multi-Source Replication
 
MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016
 
MySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source ReplicationMySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source Replication
 
UNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - ReplicaçãoUNIFAL - MySQL 5.6 - Replicação
UNIFAL - MySQL 5.6 - Replicação
 
UNIFAL - MySQL Views - 5.0/5.6
UNIFAL - MySQL Views - 5.0/5.6UNIFAL - MySQL Views - 5.0/5.6
UNIFAL - MySQL Views - 5.0/5.6
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6
 
UNIFAL - MySQL Stored Routines - 5.0/5.6
UNIFAL - MySQL Stored Routines - 5.0/5.6UNIFAL - MySQL Stored Routines - 5.0/5.6
UNIFAL - MySQL Stored Routines - 5.0/5.6
 
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
 
UNIFAL - MySQL & Vagrant (iniciando os trabalhos)
UNIFAL - MySQL & Vagrant (iniciando os trabalhos)UNIFAL - MySQL & Vagrant (iniciando os trabalhos)
UNIFAL - MySQL & Vagrant (iniciando os trabalhos)
 
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
 
Introdução ao MySQL 5.6
Introdução ao MySQL 5.6Introdução ao MySQL 5.6
Introdução ao MySQL 5.6
 
InnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQLInnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQL
 
MySQL Cluster Product Overview
MySQL Cluster Product OverviewMySQL Cluster Product Overview
MySQL Cluster Product Overview
 
MySQL Cluster Basics
MySQL Cluster BasicsMySQL Cluster Basics
MySQL Cluster Basics
 

MySQL Storage Engines Guide

  • 1. STORAGE ENGINES Wagner Bianchi Certified MySQL 5.0 Developer Certified MySQL 5.0 Database Administrator Certified MySQL 5.1 Cluster Database Administrator
  • 2. Artigos recomendados: • http://imasters.uol.com.br/artigo/8065/bancodedados/mysql_innodb_-_introducao_e_principais_caracteristicas/ • http://imasters.uol.com.br/artigo/7913/mysql/maria_o_novo_storage_engine_do_mysql/
  • 3. Introdução " O MySQL permite a você escolher um entre vários Storage Engines quando inicia a criação de tabelas em seu banco de dados; " Os Storage Engines, chamados antes de Table Types (deprecated), também é conhecido como Motor de Armazenamento ou ainda Engenharia de Armazenamento, ao pé da letra; " Cada Storage Engine tem suas respectivas características, desde um Engine bastante veloz e enxuto, no caso do MyISAM até um Engine mais robusto que é o INNODB; " Neste módulo, trabalharemos com os Storage Engines abordados pela certificação do MySQL, na versão 5.0. Existem vários outros Engines que poderão ser encontrados no Apêndice A;
  • 4. Introdução " O MySQL, por via de sua arquitetura, é tipo como um Plugable Database, pois, vários ativistas da comunidade do MySQL desenvolvem seus próprios Engines com características de outros SGBD’s, plugam no MySQL e trabalham com aquelas características; " Nem todos os Storage Engines listados acima fazem parte de uma instalação default do MySQL. A mairoria daqueles que vem desabilitados por padrão tem certa facilidade para sua habilitação; " Cada Engine tem suas próprias características que dão muita flexibilidade na utilização do MySQL;
  • 5. Introdução " Podemos checar quais são os Storage Engines habilitados em nossa instalação de MySQL atual, através do comando: SHOW ENGINES;
  • 6. Introdução " Podemos perceber que há muitas opções de Storage Engines para se utilizar, cada com a sua característica diferente, sendo que, são eles transacionais ou não-transacionais; " Atentando-se à figura anterior, percebemos que o Storage Engine padrão do MySQL é o MyISAM, mas isso poderá ser modificado facilmente através da linha de comando – alterando o Engine padrão somente para sua sessão - ou através do arquivo de opções my.ini ou my.cnf, adicionando a seguinte linha ao agrupamento [mysqld]: [mysqld] default-storage-engine=INNODB " A sintaxe para se adicionar uma opação não existente ao arquivo de configuração mudou da versão 4.x para a versão 5.x, Anteriormente era setado com set-variable=variável=valor.
  • 7. Introdução " Atualmente, nosso servidor de bancos de dados MySQL, tem como Storage Engine padrão o MyISAM. Após adicionarmos a linha no arquivo de opções, o my.ini ou my.cnf e salvá-lo. Reiniciamos o servidor de bancos de dados MySQL e veja o que temos:
  • 8. Introdução " Quando criamos uma tabela em um banco de dados do servidor de bancos de dados MySQL sem mencionar a declaração Engine em meio ao CREATE TABLE, o SGBD elegerá esta tabela como parte como uma tabela controlado pelo Storage Engine padrão atualmente no servidor:
  • 9. MyISAM " MyISAM é o Storage Engine padrão do MySQL, baseado no código do antigo Engine chamado ISAM - já obsoleto na versão 5.0 - só que com muito mais funcionalidades (chamadas de extensões); " Quando criamos uma tabela MyISAM, são adicionados três tipos de arquivos dentro do diretório do banco de dados contido dentro do diretório chamado de DATADIR ou diretório de dados: – Um arquivo “.MYD”: é o arquivo de dados da tabela; – Um arquivo “.MYI”: é o arquivo de índices da tabela; – Um arquivo “.frm”: é o arquivo que contém o “CREATE TABLE”; " Normalmente, este três arquivos são armazenados em um mesmo local, dentro do diretório do banco de dados, sob o diretório de dados do MySQL. Em sistemas que suportam links simbólicos (symlinks), podemos armazenar tais arquivos em outros locais;
  • 10. MyISAM " MyISAM tem o controle mais flexível de colunas auto_increment em relação a outros Storage Engines; " Muito rápidas para leitura e bastante lentas para ambientes com muitas escritas; " Não tem suporte a transações e nem a integridade referencial; " Tem bloqueio em nível de tabela, ou seja, cada comando, seja ele INSERT, DELETE ou UPDATE irão adquirir bloqueio de toda a tabela; " Deadlocks não ocorrem!
  • 11. MyISAM " Suportam FULL-TEXT searching e Tipos de Dados Espaciais para aplicações de Geoprocessamento; " Tabelas MyISAM tem seu formatos de linha, podendo ser: – Fixed-Row Format: todas as linhas deste tipo de tabela MyISAM tem o mesmo tamanho (fácil de recuperar mas necessitam de mais espaço); – Dynamic-Row Format: o tamanho das linhas varia e não são eficientemente recuperadas. Fragmentações ocorrem com maior facilidade e consomem menos espaço; – Compressed Format: tais tabelas são comprimidas para liberar espaços, otimizadas para leitura e são read-only.
  • 12. MyISAM " Podemos checar qual é o formato de linha da tabela através do comando: SHOW TABLE STATUS LIKE ‘%t_test%’;
  • 13. MyISAM " Uma tabela tem formato de linhas fixas quando utiliza tipos de dados para armazenar caracteres diferentes do tipo VARCHAR. Se uma tabela contar com um campo com o tipo de dados VARCHAR, já passará a ser uma tabela com formato de linha dinâmico;
  • 14. MyISAM " Podemos, na criação de uma tabela MyISAM, dizer o total de linhas que queremos ter na tabela. Caso falte espaço em disco ao adicionar linhas à uma tabela deste tipo, nenhum erro será enviado, as operações serão suspensas até que mais espaço seja liberado; " Para criar uma tabela MyISAM: CREATE TABLE t1 (id int not null) Engine=MyISAM; " O MyISAM possui várias opções que podemos adicionar ao arquivo de opções do MySQL, o my.ini ou my.cnf para otimizar sua performance; " Muitos deles requerem determinado equilíbrio em relação à memória disponível no servidor – host – para ser utilizada pelo SGBD;
  • 15. MyISAM " MyISAM apresenta graves problemas de crash em tabelas. Sistemas que trabalham em locais com problemas de queda de energia podem ter problemas com tabelas MyISAM, que são mais sensíveis que todas as outras por ter estrutura mais enxuta; " No Linux, podemos facilmente simular o problema através do seguinte comando: $ kill -9 `pgrep mysqld` " Quando o banco retorna às operações, o mecanismo de crash-recovery do MyISAM não consegue se recuperar; " Caso você tenha um ambiente com poucas escritas e mais leituras que necessite de boa performance na resposta, considere utilizar o mais novo Engine chamado MARIA. O teste do MARIA pode ser visto em: – http://imasters.uol.com.br/artigo/7913/mysql/maria_o_novo_storage_engine_do_mysql/
  • 16. Archive " O Archive é um Storage Engine que provê eficiente forma para armazenar grandes quatidades de dados quando não é necessário se ter índices e se precisa liberar espaço em disco; " Esse Engine só suporta declarações SELECT e INSERT; " Toda tabela Archive é, após ser criada, cria no diretório do banco de dados a que pertence, sob o diretório de dados, um arquivo “.frm”, que é o arquivo que contém o CREATE TABLE, os seguintes arquivos: – Um arquivo “.ARZ”: esse é o arquivo que contém os dados – datafile; – Um arquivo “.ARM”: esse arquivo armazena metadados da tabela; – Um arquivo “.frm”: que contém o CREATE TABLE; " O Archive vem habilitado a partir da versão MySQL 5.0 max beta;
  • 17. Archive " É uma ótima opção para se formar os históricos ou mesmo armazenar parte dos dados de uma outra grande tabela para aliviar otimizar consultas; " Economizar espaços, mas com algumas limitações e com muita segurança, essa é a principal característica de uma tabela que é controlada pelo Storage Engine Archive; " Para fazer um teste e já demonstrar como criar tabelas controladas pelo Storage Engine Archive, vamos criar 3 tabelas com o mesmo números de linhas, sendo que uma primeira será uma tabela controlada pelo Storage Engine MyISAM, a segunda utilizaremos o tipo INNODB e ao final, criaremos uma tabela controlada pelo Engine Archive; " Ao final, veja o quanto os dados foram comprimidos;
  • 18. Archive " Tabela 1: mysql> create table test_myisam engine=myisam as > select * from mysql.user; Query OK, 112050 rows affected (0.00 sec) Records: 112050 Duplicates: 0 Warnings: 0 " Tabela 2 mysql> create table test_innodb engine=innodb as > select * from mysql.user; Query OK, 112050 rows affected (0.00 sec) Records: 112050 Duplicates: 0 Warnings: 0 " Tabela 3 mysql> create table test_archive engine=archive as > select * from mysql.user; Query OK, 112050 rows affected (0.00 sec) Records: 112050 Duplicates: 0 Warnings: 0
  • 19. Archive mysql> SELECT table_name table_name, -> engine, ROUND(data_length/1024/1024,2) total_size_mb, -> table_rows -> FROM information_schema.tables -> WHERE table_schema = 'gim' and table_name like 'test%' -> ORDER BY table_rows ASC;
  • 20. Federated " O Storage Engine Federated está disponível no MySQL desde a versão 5.0.3; " A principal função deste Storage Engine é acessar dados em tabelas de outros servidores MySQL remotos, sem a utilização de replicação ou mesmo qualquer tecnologia de cluster; " Quando utilizamos uma tabela controlada pelo Storage Engine Federated em um servidor de bancos de dados MySQL local, as consultas a este banco buscam dados do servidor remoto. Tabelas locais não armazenam dados; " Caso você resolva instalar o MySQL a partir do source (código fonte), inclua a opção –with-federated-storage-engine;
  • 21. Federated " Quando criamos uma tabela controlado pelo Storage Engine Federated, é criado um único arquivo, de extensão “.frm” no diretório do banco de dados, sob o diretório de dados do MySQL (DATADIR); " Ao selecionarmos dados de uma tabela do tipo Federated, uma conexão com um servidor remoto é feita e então os dados remotos são retornados. A conexão é realizada utilizando a MySQL client API; " Primeiro, decidimos qual é a tabela do servidor remoto que queremos criar uma tabela “atalho” no servidor local. Essa tabela remota pode ser do tipo MyISAM, INNODB ou controlada por qualquer outro Storage Engine; " Após definir a tabela remota e os dados, a tabela controlada pelo Storage Engine Federated e criada no servidor local;
  • 22. Federated " Tabela remota: CREATE TABLE test_table ( id INT(20) NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL DEFAULT '', other INT(20) NOT NULL DEFAULT '0', PRIMARY KEY (id), INDEX name (name), INDEX other_key (other) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  • 23. Federated " Tabela local: CREATE TABLE federated_table ( id INT(20) NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL DEFAULT '', other INT(20) NOT NULL DEFAULT '0', PRIMARY KEY (id), INDEX name (name), INDEX other_key (other) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://fed_user@remote_host:9306/ federated/test_table';
  • 24. Federated " Antes da versão 5.0.13, a declaração COMMENT era utilizada no lugar de CONNECTION ; " A formula geral da string de conexão abordada na declaração CONNECTION ou COMMENT ao final da tabela é a seguinte: scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name " Esse Storage Engine plenitude no caminho do que é chamado de alta-disponibilidade em bancos de dados, pois, com ele, você poderá facilmente obter dados remotos em conjunção com os dados locais; " Uma tabela do tipo Federated não precisa conter exatamente as mesmas colunas da tabela remota;
  • 25. Federated " Tabelas controladas pelo Storage Engine Federated não suportam transações; " Suportam SELECT, INSERT, DELETE e UPDATE; " Não são utilizados nenhum tipo de bloqueio em tabelas controladas por este Storage Engine; " Não suportam a criação de índices; " Fórum sobre o Storage Engine: – http://forums.mysql.com/list.php?105
  • 26. Memory " Memory Storage Engine controla tabelas previamente criadas, mantendo seus dados em memória. Antes tinham o nome de HEAP; " Toda tabela controlada pelo Storage Engine MySQL está associada a um arquivo de extensão “.frm”, que é criado no diretório do banco de dados a que ela pertence, sob o diretório de dados do MySQL; " Para criar uma tabela controlada por este Storage Engine, basta utilizar a declaração Engine, como segue: CREATE TABLE test_table(id int, name CHAR(60))Engine=MEMORY; " Tem ótima performance mas o conteúdo das tabelas Memory não são mantidos quando o servidor é reiniciado;
  • 27. Memory " Após reiniciar o servidor, somente a estrutura da tabela permancerá no banco de dados; " Além de índices BTREE INDEX, tabelas controladas pelo Storage Engine Memory também podem ter HASH INDEX, que são índices baseados em endereços hash de memória: fx00a26a4d7c2cee8e1af1958caf8365dda4 " HASH INDEX são muito velozes para comparações com os operadores = e <=>, equanto que BTREE INDEX são mais usuáris e trabalham bem com qualquer tipo de comparação, por exemplo com o uso de BETWEEN;
  • 28. Merge " Uma tabela controlada pelo Storage Engine Merge, é uma coleção de tabelas MyISAM de mesma estrutura; " Uma consulta submetida à uma tabela do tipo Merge, *percorrerá todas as tabelas MyISAM que formam a tabela controlada pelo Storage Engine Merge; " Cada tabela controlada pelo Storage Engine Merge apresenta dois arquivos no diretório do banco de dados ao qual pertence, sob o diretório de dados do MySQL (DATADIR): – Um arquivo “.frm”: é o arquivo que contém o CREATE TABLE; – Um arquivo “.MRG”: arquivo que contém a lista de tabelas que fazem parte da tabela controlada pelo Storage Engine Merge;
  • 29. Merge " O bloqueios em uma tabela do tipo Merge funcionam igualmente com acontece com tabelas controladas pelo Storage Engine MyISAM, em nível de tabela (table-level locking); " O Storage Engine Merge suporta as declaração SELECT, DELETE, UPDATE e INSERT. Para a última declaração, a tabela do conjunto que será afetada com a inserção uma nova linha, respeitará a configuração abordada na sintaxe do CREATE TABLE, que pode ser: – INSERT_METHOD = LAST: insere a nova linha da declaração INSERT no fim da tabela; – INSERT_METHOD = FIRST: insere a nova linha da declaração INSERT no início da tabela;
  • 30. Merge " Uma disvantagem é o aumento de tabelas abertas, que aumenta a quantidade descriptores, caso precise ler ou escrever dados em uma tabela Merge que coleciona muitas outras tabelas MyISAM; " Com o comando s, no mysql client, é possível se verificar a quantidade de tabelas estão abertas no momento; " Pouquíssimo proveito dos índices definidos nas tabelas que fazem parte da coleção, pois, por serem muitos índices, o otimizador precisa primeiro eleger um único para sua busca; " Tabelas Merge são bastante utilizadas para dados históricos, assim como tabelas controlados pelo Storage Engine Archive;
  • 31. Merge " Criando as tabelas MyISAM: mysql> create table a (id int) engine=myisam; Query OK, 0 rows affected (0.02 sec) mysql> create table b (id int) engine=myisam; Query OK, 0 rows affected (0.02 sec) " Criando a coleção com o Storage Engine Merge: mysql> create table ab (id int) > engine=merge union(a,b) insert_method=last; Query OK, 0 rows affected (0.01 sec)
  • 32. Merge " Para alterar o INSERT_METHOD: mysql> alter table ab insert_method=first; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
  • 33. INNODB " O INNODB é o Storage Engine, de longe, o mais utilizado no mundo por suas características e suporte a vários features importantes; " Ao criar uma tabela controlado pelo Storage Engine INNODB, um arquivo “.frm” é criado no diretório do banco de dados, sob o diretório de dados do MySQL (DATADIR); " Índices e dados são armazenados dentro Tablespace, localizado, em uma instalação padrão, um diretório acima do DATADIR (MS Windows) ou em / var/lib/mysql, com o nome de ibdata1, onde são armazenados também os segmentos de undo ou “rollback segments”; " INNODB da suporte à transações, suporte ao modelo ACID (atomicidade, concorrência, isolamento e durabilidade), provê auto_recovery muito eficiente, com 4 níveis de utilização e multiversionamento; " Suporte a integridade Rerencial com Primary Keys e Foreign Keys;
  • 34. INNODB " Em 2005, a ORACLE anunciou a compra da empresa finlandesa INNOBase OY, que desenvolveu o INNODB; " O InnoDB é distribuído sob os termos da GNU GPL (General Public License). O software é embudito ao MySQL através de um acordo contratual; " Por padrão, em algumas instalações, o INNODB vem habilitado por padrão. Caso se queira retirar o INNODB de uma instalação feita a partir do source (código fonte), instale o MySQL com a opção –-skip-innodb; " Podemos habilitar e desabilitar o INNODB através do arquivo de opções, my.ini ou my.cnf;
  • 35. INNODB " O INODB possui uma série de logs que são armazenados em arquivos chamados ib_logfilex. Tais logs, em uma instalação padrão, ficam armazenados no mesmo diretório aonde está localizado o Tbalespace; " O Tablespace do INNODB é um Tablespace compartilhado, ou seja, armazena dados e índices de todas as tabelas INNODB que existirem no servidor MySQL (esse Tablespace é referenciado como sendo uma single storage area). Não existe um arquivo específico para índices e outro para dados, assim como acontece com o MyISAM, por exemplo; " Podemos ter um Tablespace para cada tabela, adicionando a opção abaixo no arquivo de opções, my.ini ou my.cnf: [mysqld] innodb-file-per-table
  • 36. INNODB " Quando adicionada a opção citada ao arquivo de opções, devemos reiniciar o MySQL para que, quando o SGBD iniciar o módulo INNODB e ler as opções setadas no arquivo de opções, ele crie um Tablespace para cada tabela; " Notaremos que agora teremos dois arquivos no diretório do banco de dados sob o diretório de dados do MySQL (DATADIR): – Um arquivo “.frm”: normalmente criado para cada tabela controlado pelo Storage Engine INNODB; – Um arquivo “.ibd”: arquivo que é o Tablespace individual, criado a partir das novas configurações do arquivo de opções;
  • 37. INNODB " Muito cuidado ao configurar o INNODB para atuar com várias Tablespaces. O Tablespace principal continua sendo utilizado para armazenar o dicionário de dados e o segmento de rollback; " Com o INNODB, podemos desenvolver os relacionamentos entre as tabelas de nosso banco de dados, utilizando chaves primárias – PRIMARY KEY – e chaves estrangeiras – FOREIGN KEY; " Para atribuir uma constraint ou restrição de relacionamento para garantir a integridade referencial temos que saber o que é a integridade referencial e ter ciências dos cuidados que temos que tomar na hora de firmar o relacionamento entre as tabelas; " As chaves estrangeiras, suportadas pelo Storage Engine INNODB tem suas respectivas propriedades de CASCADE, NO ACTION, SET NULL e SET DEFAULT;
  • 38. INNODB " Para criar FOREIGN KEYS, temos que nos atentar para as seguintes regras: – As colunas envolvidas no relacionamento devem ser indexadas. Caso um índice não seja criado explicitamente para a FOREIGN KEY, o MySQL criará um automaticamente; – As colunas envolvidas no relacionamento devem ter o mesmo tipo de dados numérico; – As colunas devem utilizar ou não a propriedade UNSIGNED; " Podemos atribuir os relacionamento na criação das tabelas ou ainda com a declaração ALTER TABLE; " Veremos a seguir as duas formas;
  • 39. INNODB " Declarado a FOREIGN KEY na criação da tabela filha: mysql> create table tbl_pai ( -> id int not null primary key -> ) engine=innodb; Query OK, 0 rows affected (0.02 sec) mysql> create table tbl_filha ( -> id_pai int not null primary key, -> constraint foreign key (id_pai) -> references tbl_pai(id) -> ) engine=innodb; Query OK, 0 rows affected (0.00 sec)
  • 40. INNODB " Declarado a FOREIGN KEY com ALTER TABLE: mysql> create table tbl_pai ( -> id int not null primary key -> ) engine=innodb; Query OK, 0 rows affected (0.03 sec) mysql> create table tbl_filha ( -> id_pai int not null primary key -> ) engine=innodb; Query OK, 0 rows affected (0.01 sec) mysql> alter table tbl_filha add constraint -> foreign key (id_pai)references tbl_pai (id); Query OK, 0 rows affected (0.13 sec) Records: 0 Duplicates: 0 Warnings: 0
  • 41. INNODB " Poderíamos ter utilizado as propriedades ON DELETE e ON UPDATE, como fazemos logo abaixo, com CASCADE: mysql> create table tbl_pai ( -> id int not null primary key -> ) engine=innodb; Query OK, 0 rows affected (0.00 sec) mysql> create table tbl_filha ( -> id_pai int not null primary key -> ) engine=innodb; Query OK, 0 rows affected (0.00 sec) mysql> alter table tbl_filha add constraint foreign key (id_pai) -> references tbl_pai (id) on delete cascade on update cascade; Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
  • 42. INNODB " Colocando a propriedade CASCADE na atribuição de uma constraint FOREIGN KEY, ao excluir o registro PAI, todos os registros na tabela filha que tenham o mesmo identificador da chave primária da tabela PAI, serão excluídos; " Colocado a propriedade NO ACTION na atribuição de uma constraint FOREIGN KEY, ao tentar excluir o registro PAI, este não será exlcuído por causa da amarração deste registro na tabela filha; " Colocado a propriedade SET NULL na atribuição de uma constraint FOREIGN KEY, ao excluir o registro PAI, aonde existir o identificador do PAI – PRIMARY KEY – no filho, seu valor será setado para NULL. Logicamente, a coluna da FOREIGN KEY não poderá receber um valor NULL se ela foi declarada como NOT NULL;
  • 43. INNODB " Colocando a propriedade SET DEFAULT na atribuição de uma constraint FOREIGN KEY, ao excluir o registro PAI, todos os registros na tabela filha que tenham o mesmo identificador da chave primária da tabela PAI, recebe o dado que foi definido na cláusula DEFAULT na criação da tabela; " Demontrações.
  • 44. Exercícios " Com base no conteúdo apresentado, resolva a Lista 1 de exercícios. " Referência bibliográfica: – Manual on-line; Sakila on the beach!