Resumo : neste tutorial, você aprenderá sobre MERGE
o mecanismo de armazenamento MySQL e como usá-lo de forma eficaz.
Introdução ao mecanismo de armazenamento MySQL MERGE
O MERGE
mecanismo de armazenamento permite criar uma tabela especial chamada MERGE
tabela 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 MERGE
mecanismo de armazenamento é uma coleção de tabelas MyISAM idênticas que podem ser usadas como uma só.
O MERGE
mecanismo 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 MERGE
tabela, você usa a seguinte CREATE TABLE
instruçã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=MERGE
cláusula especifica que a tabela é umaMERGE
tabela.UNION=(t1, t2, ...)
permite listar a tabela MyISAM para inclusão naMERGE
tabela.INSERT_METHOD
controla como ocorrem as inserções naMERGE
tabela. Possui três opções:FIRST
,LAST
, eNO
. Você usaFIRST
eLAST
para instruir o mecanismo de armazenamento a inserir na primeira ou na última tabela subjacente, respectivamente. Se você usarNO
, o mecanismo de armazenamento não permitirá inserir dados naMERGE
tabela.
Quando você cria uma MERGE
tabela no MySQL, ele gera um .MRG
arquivo contendo os nomes das tabelas MyISAM subjacentes e também armazena o MERGE
formato da tabela no dicionário de dados.
O MySQL também permite criar uma MERGE
tabela que combina tabelas subjacentes de diferentes bancos de dados.
Removendo uma tabela MERGE
Para eliminar uma MERGE
tabela, você usa a DROP
TABLE
instrução:
DROP TABLE merge_table_name;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Quando você elimina uma MERGE
tabela, o MySQL elimina apenas a MERGE
especificação e não exclui as tabelas MyISAM subjacentes.
Alterando as tabelas subjacentes de uma tabela MERGE
Para remapear uma MERGE
tabela para uma coleção diferente de tabelas MyISAM, você pode usar um dos seguintes métodos:
1) Elimine a MERGE
tabela 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
, DELETE
e SELECT
em MERGE
tabelas. No entanto, você precisa ter privilégios correspondentes nas tabelas MyISAM subjacentes que são mapeadas para as MERGE
tabelas.
Se um usuário tiver acesso à tabela MyISAM t
, o usuário poderá criar MERGE
uma tabela m
que acesse a tabela MyISAM t
. Mas se o privilégio do usuário na tabela t
for revogado , o usuário continuará a ter acesso à tabela t
por meio da tabela de mesclagem m
. Este é o problema de segurança que você precisa estar ciente ao trabalhar com MERGE
tabelas.
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 MERGE
tabela 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 MERGE
tabela:
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 MERGE
tabela:
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_METHOD
na LAST
instruçã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 MERGE
tabela 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 DELETE
instruçã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
MERGE
mecanismo de armazenamento para criar umaMERGE
tabela que é uma coleção de tabelas MyISAM idênticas que podem ser usadas como uma só.