Mecanismo de armazenamento MySQL MERGE

Resumo : neste tutorial, você aprenderá sobre MERGEo mecanismo de armazenamento MySQL e como usá-lo de forma eficaz.

Introdução ao mecanismo de armazenamento MySQL MERGE

O MERGEmecanismo de armazenamento permite criar uma tabela especial chamada MERGEtabela que consiste em várias tabelas MyISAM com tipos de dados de coluna idênticos.

Depois de mesclar a tabela, você pode gerenciar várias tabelas MyISAM subjacentes como se fossem uma tabela.

Em outras palavras, o MERGEmecanismo de armazenamento é uma coleção de tabelas MyISAM idênticas que podem ser usadas como uma só.

O MERGEmecanismo de armazenamento também é conhecido como MRG_MyISAM.

As tabelas MyISAM subjacentes precisam atender às seguintes condições para participar de uma tabela MERGE:

  • Todas as tabelas possuem o mesmo número de colunas com o mesmo tipo de dados na mesma ordem.
  • Todas as tabelas possuem os mesmos índices na mesma ordem.

Criando uma tabela MERGE

Para criar uma MERGEtabela, você usa a seguinte CREATE TABLEinstrução:

CREATE TABLE merge_table_name(
    column_list
) ENGINE=MERGE UNION = (t1, t2, ...) [INSERT_METHOD=FIRST|LAST|NO];Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • ENGINE=MERGEcláusula especifica que a tabela é uma MERGEtabela.
  • UNION=(t1, t2, ...)permite listar a tabela MyISAM para inclusão na MERGEtabela.
  • INSERT_METHODcontrola como ocorrem as inserções na MERGEtabela. Possui três opções: FIRST, LAST, e NO. Você usa FIRSTe LASTpara instruir o mecanismo de armazenamento a inserir na primeira ou na última tabela subjacente, respectivamente. Se você usar NO, o mecanismo de armazenamento não permitirá inserir dados na MERGEtabela.

Quando você cria uma MERGEtabela no MySQL, ele gera um .MRGarquivo contendo os nomes das tabelas MyISAM subjacentes e também armazena o MERGEformato da tabela no dicionário de dados.

O MySQL também permite criar uma MERGEtabela que combina tabelas subjacentes de diferentes bancos de dados.

Removendo uma tabela MERGE

Para eliminar uma MERGEtabela, você usa a DROP TABLEinstrução:

DROP TABLE merge_table_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quando você elimina uma MERGEtabela, o MySQL elimina apenas a MERGEespecificação e não exclui as tabelas MyISAM subjacentes.

Alterando as tabelas subjacentes de uma tabela MERGE

Para remapear uma MERGEtabela para uma coleção diferente de tabelas MyISAM, você pode usar um dos seguintes métodos:

1) Elimine a MERGEtabela e recrie-a:

DROP TABLE merge_table_name;

CREATE TABLE merge_table_name(
   ...
) ENGINE=MERGE UNION=(t1, t2, ...);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Use  ALTER TABLE para alterar a lista de tabelas subjacentes:

ALTER TABLE merge_table_name
UNION=(t1,t2,...);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Manipulando dados de uma tabela MERGE

MySQL permite que você execute INSERT, UPDATE, DELETEe SELECTem MERGEtabelas. No entanto, você precisa ter privilégios correspondentes nas tabelas MyISAM subjacentes que são mapeadas para as MERGEtabelas.

Se um usuário tiver acesso à tabela MyISAM t, o usuário poderá criar MERGEuma tabela mque acesse a tabela MyISAM t. Mas se o privilégio do usuário na tabela tfor revogado , o usuário continuará a ter acesso à tabela tpor meio da tabela de mesclagem m. Este é o problema de segurança que você precisa estar ciente ao trabalhar com MERGEtabelas.

Exemplo de mecanismo de armazenamento MySQL MERGE

Primeiro, crie uma nova tabela MyISAM chamada t1:

CREATE TABLE t1(
   id INT AUTO_INCREMENT PRIMARY KEY,
   name VARCHAR(50) NOT NULL
) ENGINE=MyISAM;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, crie outra tabela MyISAM chamada t2 com colunas e tipos de dados idênticos aos da tabela t1:

CREATE TABLE t2(
   id INT AUTO_INCREMENT PRIMARY KEY,
   name VARCHAR(50) NOT NULL
) ENGINE=MyISAM;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, insira linhas nas tabelas t1 e t2:

INSERT INTO t1(name) VALUES('John');
INSERT INTO t1(name) VALUES('Jane');
INSERT INTO t2(name) VALUES('Bob');
INSERT INTO t2(name) VALUES('Alice');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quarto, crie uma MERGEtabela que inclua as tabelas MyISAM t1 e t2:

CREATE TABLE t(
   id INT AUTO_INCREMENT PRIMARY KEY,
   name VARCHAR(50) NOT NULL
) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quinto, consulte os dados da MERGEtabela:

SELECT 
  id, 
  name 
FROM 
  t;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+-------+
| id | name  |
+----+-------+
|  1 | John  |
|  2 | Jane  |
|  1 | Bob   |
|  2 | Alice |
+----+-------+
4 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Sexto, insira uma nova linha na MERGEtabela:

INSERT INTO t(name) VALUES("Peter");Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O mecanismo de armazenamento insere a linha na tabela t2 porque definimos to INSERT_METHODna LASTinstrução CREATE TABLE.

Sétimo, consulte os dados da tabela t2:

SELECT * FROM t2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+-------+
| id | name  |
+----+-------+
|  1 | Bob   |
|  2 | Alice |
|  3 | Peter |
+----+-------+
3 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Oitavo, exclua uma linha da MERGEtabela com id 2:

DELETE FROM t WHERE id = 2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O mecanismo de armazenamento exclui as linhas da tabela t1 primeiro. Se você consultar dados da tabela t1, verá que a linha com id 2 foi excluída:

SELECT * FROM t1;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+------+
| id | name |
+----+------+
|  1 | John |
+----+------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se você executar a DELETEinstrução que exclui a linha com id 2, o mecanismo de armazenamento excluirá a linha na tabela t2:

DELETE FROM t WHERE id = 2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nono, consulte os dados da tabela t2:

SELECT * FROM t2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+-------+
| id | name  |
+----+-------+
|  1 | Bob   |
|  3 | Peter |
+----+-------+
2 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use o MERGEmecanismo de armazenamento para criar uma MERGEtabela que é uma coleção de tabelas MyISAM idênticas que podem ser usadas como uma só.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *