Aula 01-Estrategia Concursos - SGBD MYSQl
Aula 01-Estrategia Concursos - SGBD MYSQl
Aula 01-Estrategia Concursos - SGBD MYSQl
Sumário
MySQL................................................................................................................................................... 2
1. Introdução do MySQL ..................................................................................................... 2
1.1. O que é MySQL? ....................................................................................................... 2
1.2. Arquitetura .................................................................................................................. 2
1.3. Versões ....................................................................................................................... 11
1.4. Executando MySQL pela linha de comando ................................................. 15
1.5. Um pouco sobre Storage InnoDB e MyISAM ............................................... 21
Conceitos de desenvolvimento em bancos de dados MySQL ........................................ 24
2. Construindo e acessando um banco de dados .................................................... 24
2.1. Tipo de dados........................................................................................................... 25
2.1.1. Tipos de dados numéricos .............................................................................. 25
2.1.2. Tipos de Dado de Data e hora....................................................................... 29
2.1.3. Tipos de Dados de String ................................................................................ 31
2.1.4. Extensões para dados especiais ................................................................... 36
2.2. Data Definition Language (DDL) ...................................................................... 36
2.2.1. ALTER ...................................................................................................................... 37
2.2.2. CREATE ................................................................................................................... 40
2.2.3. DROP ....................................................................................................................... 45
2.2.4. RENAME TABLE.................................................................................................... 47
2.2.5. TRUNCATE ............................................................................................................. 48
2.3. Data Manipulation Language (DML) ................................................................ 48
2.3.1. CALL......................................................................................................................... 48
2.3.2. DELETE ................................................................................................................... 49
2.3.3. DO ............................................................................................................................ 50
2.3.4. HANDLER ............................................................................................................... 50
2.3.5. INSERT ................................................................................................................... 51
2.3.6. LOAD DATA INFILE ............................................................................................ 53
2.3.7. LOAD XML.............................................................................................................. 54
2.3.8. SELECT ................................................................................................................... 54
2.3.9. UPDATE .................................................................................................................. 57
2.4. Outros Comandos ................................................................................................... 58
16712855225
MySQL
1. Introdução do MySQL
Queremos aqui contextualizar MySQL para que você possa se situar
dentro do assunto.
Tudo começou em 1995 com uma empresa fundada na Suécia cujo nome
era MySQL AB. Essa empresa viria a desenvolver a primeira versão do SGBD.
Essa versão do sistema foi entregue em 23 de maio do mesmo ano. Em 2008, a
Sun Microsystems comprou a MySQL AB por aproximadamente um bilhão de
dólares. A Sun seria comprada pela Oracle alguns anos depois, em 2010.
1.2. Arquitetura
base de dados para um estado válido, que seja mais próximo possível do
momento da falha. Temos ainda necessidades de segurança das informações
e otimização de consulta. A figura a seguir mostra como todos esses e outros
elementos estão estruturados dentro da arquitetura do MySQL Server. Vamos
passar por cada um deles, tentando expor de forma rápida suas principais
características.
16712855225
O MySQL Enterprise Backup faz um hot backup de todas as tabelas que usam o
mecanismo de armazenamento InnoDB. Para tabelas MyISAM ou usando outros
mecanismos de armazenamento diferentes do InnoDB, ele faz um backup
warm (morno), onde o banco de dados continua em execução, mas as tabelas
não podem ser modificadas enquanto está sendo feito o seu backup. Para
operações de backup eficiente, você pode designar InnoDB como o motor de
armazenamento padrão para as novas tabelas, ou converter tabelas existentes
para usar o mecanismo de armazenamento InnoDB.
Veja que, pelo exposto acima, a única alternativa correta seria a B, que diz que
o backup do tipo online ocorre quando o servidor MySQL estiver sendo
executado.
Gabarito: B
Parser: Quando um cliente emite uma consulta, uma nova thread é criada
e a instrução SQL é encaminhado para o parser para validação sintática (ou
rejeição devido a erros). O analisador MySQL é implementado usando um script
Lex-YACC que é compilado com Bison. O parser constrói uma estrutura de
consulta usada para representar a instrução de consulta SQL na memória como
uma estrutura de árvore (também conhecida como árvore sintática abstrata)
que pode ser usado durante a execução da consulta.
• Avaliar as junções.
EXPLAIN select name, created from recipes where created > '2011-11-01
00:00:00' \G
16712855225
um índice for encontrado no cache, ele é lido a partir daí. Caso contrário, um
novo bloco de índice deve ser lido a partir do disco e colocado em cache. No
entanto, o cache tem um tamanho limitado e é ajustável mudando a variável de
configuração key_cache_block_size.
CSV: Suas tabelas são realmente arquivos de texto com valores separados por
vírgulas. Tabelas CSV permitem importar ou descarregar dados em formato CSV
para trocar dados com scripts e aplicativos que leem e escrevem no mesmo
Prof. Thiago Rodrigues Cavalcanti
www.estrategiaconcursos.com.br 10 de 80
MySQL Introdução e administração de banco de dados MySQL
Prof. Thiago Rodrigues Cavalcanti Aula 01
formato. Como as tabelas CSV não são indexadas, você costuma manter os
dados em tabelas InnoDB durante a operação normal, e só usar tabelas CSV
durante a fase de importação ou exportação.
Example: Este motor serve como um exemplo no código fonte do MySQL que
ilustra como começar a escrever novos mecanismos de armazenamento. É
bastante interessante aos desenvolvedores. O mecanismo de armazenamento é
um "stub" que não faz nada. É possível criar tabelas com este motor, mas os
dados não podem ser armazenados ou recuperados neles a partir deles.
Gabarito: D
16712855225
1.3. Versões
um formato binário interno que permite acesso rápido de leitura aos elementos
do documento.
7. Variáveis de sistema e status - Informações de sistema e variáveis de status
estão agora disponíveis em tabelas no PERFORMANCE_SCHEMA, ao invés de
usar as tabelas do INFORMATION_SCHEMA para obter essas variáveis.
Gabarito: A
A lista a seguir resume as opções que podem ser usados para controlar
como os programas cliente se conectam ao servidor:
--ssl * - Opções que começam com --ssl são usados para estabelecer uma
conexão segura ao servidor usando SSL, se o servidor está configurado com
suporte SSL.
16712855225
A 1433.
B 1436.
C 3306.
D 3366.
E 4661.
Comentário: Veja que o texto solicita a porta padrão do MySQL, que, como foi
dito dentro da descrição dos parâmetros é a porta de número 3306.
Gabarito: C
Essa opção é útil para fazer o dump de grandes tabelas. Obriga o mysqldump a
recuperar linhas de uma tabela a partir do servidor, uma linha de cada vez, em
vez de recuperar todas as linhas e colocar em buffer na memória antes de
escrevê-lo para fora do servidor na saída especificada.
Gabarito: C
O cliente mysqlshow pode ser usado para ver rapidamente quais bancos
de dados existem, suas tabelas, colunas ou índices de uma tabela. O mysqlshow
fornece uma interface de linha de comando. Para invocar o mysqlshow podemos
executar o comando:
O mysqlhotcopy é um script Perl que foi originalmente escrito por Tim Bunce.
Ele usa FLUSH TABLES, LOCK TABLES, e cp ou scp para fazer um backup de
banco de dados. É uma maneira rápida para fazer um backup do banco de dados
completo ou de apenas algumas tabelas, mas pode ser executado somente na
mesma máquina onde os diretórios de banco de dados estão localizados. O
mysqlhotcopy funciona apenas para fazer backup de tabelas MyISAM e
ARCHIVE. Ele pode ser executado em Unix e NetWare.
Para utilizar mysqlhotcopy, você deve ter acesso de leitura aos arquivos para as
tabelas que você está fazendo backup, o privilégio SELECT para essas tabelas, o
16712855225
Gabarito: B
Dica do professor
Após executar o comando de mysqld para iniciar o servidor
MySQL você pode usar alguns comandamos para interagir com
a base. Vejam a lista abaixo:
USE DatabaseName: Será usado para selecionar um
determinado banco de dados MySQL na área de trabalho.
SHOW DATABASES: Lista os bancos de dados que podem ser
acessados pelo SGBD MySQL.
SHOW TABLES: Mostra as tabelas no banco de dados uma vez
por banco de dados foi selecionado com o comando USE.
SHOW COLUMNS FROM tablename: Mostra os atributos, tipos
de atributos, informação chave, se null é permitido, padrões, e
outras informações para uma tabela.
SHOW INDEX FROM tablename: Apresenta os detalhes de
todos os índices da tabela, incluindo a chave primária.
SHOW TABLE STATUS LIKE tablename \G: Mostra detalhes do
desempenho e estatísticas do SGBD MySQL.
O InnoDB por sua vez é muito mais robusto que o MyISAM. Admite
ROLLBACK e COMMIT e suportar chaves estrangeiras. Segue, portanto, os
princípios definidos pelo ACID. Atualmente é o padrão de storage do MySQL. Seu
lock é feito em nível de linhas.
De uma forma prática você deve usar MyISAM quando sua aplicação
necessitar de busca em texto completo (full text search) ou tenha a grande
maioria das operações feitas sobre a base do tipo SELECT.
Criada a tabela, vamos inserir algumas tuplas dentro dela para que
possamos fazer testes. No exemplo, seis linhas são inseridas. Em seguida
construímos o comando SELECT que vai fazer uso do índice. A cláusula MATCH
(coluna1, coluna2, ...) seguida pela sintaxe AGAINST (expressão [método de
pesquisa]). No exemplo utilizamos as colunas title e body e faremos a busca
pela expressão ‘database’. Utilizamos o método de pesquisa de linguagem
natural (IN NATURAL LANGUAGE MODE). Observe o exemplo e tente entender a
estrutura básica para a utilização do índice FULLTEXT.
Dica do professor:
Existem algumas convenções utilizadas pelo MySQL
que valem a pena conhecer. Elas estão relacionadas
às descrições dos tipos de dados. Vejam abaixo:
M indica a quantidade máxima de dígitos de um tipo
inteiro que é exibida. Para tipos de ponto flutuante ou de
ponto fixo M significa o número total de dígitos que
podem ser armazenados. Quanto se trata do tipo string M
é o comprimento máximo (length). Ou seja, o valor
máximo permitido para M varia de acordo com o tipo de
dados.
D é aplicado aos tipos de ponto fixo e flutuante e indica o
número de dígitos que compõe as casas decimais
(conhecidas com escala). O valor máximo permitido é 30,
mas não deve ser maior que M – 2.
fsp é aplicado aos tipos TIME, DATETIME e TIMESTAMP e
representa a precisão fracionária dos segundos (fractional
seconds precision). Pode ser visto como o número de
16712855225
espero que você se lembre dele é o ZEROFILL que, quando utilizado adiciona
automaticamente o atributo UNSIGNED para determinada coluna.
BIT [(M)] – Um tipo de dados com campos para bits. M indica o número de
bits, varia entre 1 a 64. O valor default é um se o valor de M for omitido.
Lembre-se do nosso comentário, todos os parâmetros entre colchetes são
opcionais.
BOOL ou BOOLEAN - Este tipo pode ser visto como um sinônimo para
TINYINT[1]. O valor zero (0) é considerado FALSE. E qualquer valor
diferente de zero é considerado TRUE. Observe, entretanto, que o valor
TRUE e FALSE são meramente alias para um e zero, respectivamente.
Por fim, abaixo, segue uma lista dos valores máximo e mínimo para cada
um dos tipos numéricos tratados acima e a quantidade de bytes utilizados para o
armazenamento:
A 1 e 64
B 1 e 128
C 1 e 256
D 1 e 2^64
E 1 e 2^128
Pode ser visto como um pacote "exato" para variáveis de ponto fixo. M é
o número total de dígitos (precisão) e D é o número de dígitos após a vírgula
ou ponto decimal (escala). O ponto decimal e, para números negativos, o sinal
"-" não são contados em M. Se D é zero, os valores não têm nenhuma parte
decimal ou parte fracionária. O número máximo de dígitos (M) para DECIMAL é
65. O número máximo de casas decimais suportadas (D) é 30. Se D for omitido,
o padrão é zero. Se M for omitido, o padrão é 10. Já sabemos também que se o
UNSIGNED for especificado ele não permite valores negativos. Por fim, todos os
cálculos básicos (+, -, *, /) com colunas decimais são feitas com uma precisão
de 65 dígitos.
Estes tipos são sinônimos para DECIMAL. O tipo FIXED está disponível para
compatibilidade com outros sistemas de banco de dados.
estes são os limites teóricos. O intervalo real pode ser ligeiramente menor
dependendo do seu hardware ou sistema operacional.
Falaremos também do tipo de dados YEAR(2) que possui certas questões que
você deve considerar antes de optar por usá-lo. A partir do MySQL 5.6.6, YEAR
(2) é obsoleto. Colunas YEAR(2) em tabelas existentes são tratados como antes,
mas YEAR (2) em tabelas novas ou alteradas são convertidos em YEAR (4).
Agora vamos tratar rapidamente de cada um dos tipos de data.
DATE
DATETIME[(fsp)]
Combinação de uma data com hora. Suporta valores que variam de '1000-
01-01 00:00:00.000000' até '9999-12-31 23:59:59.999999'. O MySQL exibe
valores DATETIME no formato 'YYYY-MM-DD HH:MM:SS[.fraction]', porém
permite atribuir valores ao campo DATETIME usando tanto strings quanto
números.
Desde a versão MySQL 5.6.4, o parâmetro opcional fsp pode ser atribuído.
Seu valor, como já vimos, varia de 0 a 6 e especifica a fração de segundos que
são armazenados. O valor zero especifica que não existe parte fracionária. Se for
omitido o valor default é 0. A versão MySQL 5.6.5 trouxe a inicialização
automática e a atualização do valor para o tempo corrente em uma variável
DATETIME. Ela pode ser especificada usando os comandos DEFAULT e ON
UPDATE durante a definição das colunas.
16712855225
TIMESTAMP[(fsp)]
TIME[(fsp)]
YEAR[(2|4)]
Vamos fazer essa distinção entre CHARACTER SET e COLLATION para ficar
mais claro para vocês a diferença entre os dois. Suponha que nós temos um
alfabeto com 4 letras: “A”, “B”, “a”, “b”. Nós agora associamos a cada letra a um
valor numérico: “A” = 0, “B” = 1, “a” = 2, “b” = 3. A letra “A” é o símbolo, e o
numeral 0 é a codificação para “A”. A combinação de todas as quarto letras e
suas respectivas codificações é o CHARACTER SET.
16712855225
O MySQL permite que você crie uma coluna do tipo CHAR(0). Isso é útil
principalmente quando você tem que ser compatível com aplicativos antigos que
dependem da existência de uma coluna, mas que na verdade não usam o seu
valor. CHAR(0) também é muito bom quando você precisa de uma coluna que
pode ter apenas dois valores. Assim, uma coluna que é definida como CHAR(0)
NULL ocupa apenas um bit e pode assumir somente os valores nulos e “” (string
vazia).
BINARY(M)
VARBINARY(M)
TINYBLOB
Uma coluna BLOB com um comprimento máximo de 255 (28-1) bytes. Cada
valor armazenado em uma variável TINYBLOB usa um byte de prefixo que indica
o número de bytes do valor armazenado.
BLOB[(M)]
Um parâmetro M opcional pode ser dado para este tipo. Se isso for feito, o
MySQL cria a coluna com o tipo BLOB menor, mas suficientemente grande para
conter M bytes de valor.
collation_name]
O comprimento M é opcional e pode ser dado para este tipo. Se isso for feito,
o MySQL cria a coluna como o tipo de texto menor, mas grande o suficiente para
armazenar valores de texto com comprimento de até M.
LONGBLOB
limite prático é inferior a 3000). Uma tabela não pode ter mais de 255 definições
de ENUM e SET entre suas colunas.
Um conjunto. Um objeto string que pode ter zero ou mais valores, cada um
dos quais deve ser escolhido a partir da lista de valores 'valor1', 'valor2', ... Os
valores de um SET são representados internamente como números inteiros.
2.2.1. ALTER
Veja que na figura acima temos duas especificações que podem ser
modificadas por meio do comando. A primeira refere-se ao CHARACTER SET, um
conjunto de símbolos e codificações. A outra, COLLATE, é um conjunto de regras
para comparar caracteres em um CHARACTER SET. Já falamos sobre eles
quando tratamos das definições sobre tipos de dados.
Para evitar a perda acidental de dados, ALTER TABLE não pode ser usado
para mudar o mecanismo de armazenamento de uma tabela para MERGE ou
BLACKHOLE.
Para alterar uma coluna de inteiro para TINYINT NOT NULL (deixando o
nome da mesma), e para alterar coluna b de CHAR (10) para CHAR (20), bem
como mudar o nome de b para c:
2.2.2. CREATE
Dado que nosso curso está voltado especificamente para concursos, nosso
objetivo é descrever apenas os assuntos com maior probabilidade de cair em
provas de concurso. Passaremos agora para analisarmos os comandos DDL de
CREATE INDEX, CREATE PROCEDURE, CREATE FUNCTION e CREATE TABLE. Os
demais comandos não serão abordados em detalhes.
16712855225
CREATE INDEX é mapeado para uma instrução ALTER TABLE para criar
índices. CREATE INDEX não pode ser usado para criar uma chave primária;
utilize ALTER TABLE para está operação. Normalmente, você cria todos os
índices de uma tabela no momento da criação da mesma com CREATE TABLE.
Esta orientação é especialmente importante para tabelas que usam InnoDB,
onde a chave primária determina o layout físico de linhas no arquivo de dados.
Os índices podem ser criados utilizando apenas a parte inicial dos valores de
16712855225
Vejamos agora o que significar algumas das palavras chaves que compõe o
índice. As palavras-chave ONLINE e OFFLINE estão disponíveis apenas para o
MySQL Cluster; a tentativa de usar essas palavras-chave no padrão MySQL 5.6
exibe um erro de sintaxe.
Um índice UNIQUE cria uma restrição de tal forma que todos os valores do
índice devem ser distintos. Um erro ocorre se você tentar adicionar uma nova
linha com um valor de chave que corresponda a uma linha existente. Para todos
Prof. Thiago Rodrigues Cavalcanti
www.estrategiaconcursos.com.br 41 de 80
MySQL Introdução e administração de banco de dados MySQL
Prof. Thiago Rodrigues Cavalcanti Aula 01
os motores, um índice UNIQUE permite vários valores NULL para colunas que
podem conter NULL. Se você especificar um valor de índice UNIQUE como
prefixo de uma coluna, os valores da coluna devem ser exclusivos dentro do
prefixo.
16712855225
16712855225
Cada parâmetro é definido como IN por padrão. Para especificar outro tipo de
parâmetro, use a palavra-chave OUT ou INOUT antes do nome do parâmetro. A
especificação de um parâmetro como IN, OUT ou INOUT só é válida para uma
PROCEDURE. Para função, os parâmetros são sempre categorizados como IN.
16712855225
Vejam que você pode usar a palavra-chave TEMPORARY ao criar uma tabela.
Uma tabela temporária é visível apenas para a sessão atual, e é descartada
automaticamente quando a sessão é encerrada. Isso significa que duas sessões
diferentes podem usar o mesmo nome de tabela temporária sem entrar em
conflito uma com a outra ou com tabelas não temporárias existentes com o
mesmo nome.
O DROP opera sobre a mesma lista de objetos do CREATE, nada mais lógico!
Tudo que é criado dentro do banco de dados pode ser apagado. A lista inclui
todas as opções que vimos: DATABASE, EVENT, FUNCTION, INDEX, LOGFILE
GROUP, PROCEDURE, SERVER, TABLE, TRIGGER, TABLESPACE e VIEW.
DROP TABLE remove uma ou mais tabelas. Você deve ter o privilégio DROP
para cada tabela. Todos os dados da tabela e definição da tabela são removidos,
por isso tenha cuidado com este comando! Se qualquer uma das tabelas da lista
de argumentos não existe, o MySQL retorna um erro indicando que essas
tabelas não foram apagadas, mas dropa todas as tabelas na lista que existem.
16712855225
DROP VIEW remove uma ou mais VIEWs. Você deve ter o privilégio DROP
cada visão. Se qualquer uma das visões na lista de argumentos não existir, o
MySQL retorna um erro indicando pelo nome quais não existem e não conseguiu
apagar, mas também deleta todas as VIEWS que existem na lista.
new_table TO tabela_antiga,
tmp_table TO nova_tabela;
2.2.5. TRUNCATE
Após passarmos pelos comandos DDL agora voltaremos nossas atenções para
a parte da linguagem que manipula os dados. São nove comandos sobre os
quais apontaremos nossas baterias. Sempre focando nos aspectos chave de
cada um deles.
2.3.1. CALL
16712855225
2.3.2. DELETE
ROW_COUNT (). Veja a sintaxe do comando DELETE para uma única tabela.
2.3.3. DO
DO é útil principalmente com funções que têm efeitos colaterais, tais como
RELEASE_LOCK(). Vejam um exemplo, esta instrução SELECT faz uma pausa,
mas também produz um conjunto de resultados:
DO, por outro lado, faz uma pausa sem produzir um conjunto de resultados:
Isto pode ser útil, por exemplo, em uma função armazenada ou gatilho, que
proíbem declarações que produzem conjuntos de resultados. DO somente
executa as expressões. Ele não pode ser usado em todos os casos em que
SELECT pode ser usada. Por exemplo, DO id FROM t1 é inválido porque faz
referência a uma tabela (id).
16712855225
2.3.4. HANDLER
2.3.5. INSERT
16712855225
Você pode usar REPLACE em vez de INSERT para sobrescrever linhas antigas.
REPLACE funciona exatamente como o INSERT, exceto que, se uma linha antiga
na tabela tem o mesmo valor que uma nova linha para uma chave primária ou
um índice exclusivo, a velha linha é excluída antes da nova linha é inserida.
que outros clientes façam requisições à mesma tabela em que o LOAD DATA
está trabalhando. Esta opção afeta a performance da tarefa de importação de
dados, mesmo que nenhuma outra thread esteja fazendo uso da tabela
simultaneamente.
LOAD XML age como o complemento para o cliente executar o mysql com o
modo de saída XML (ou seja, iniciar o cliente com a opção --xml). Para gravar
dados de uma tabela para um arquivo XML, você pode invocar o cliente mysql
com as opções --xml e -e do shell do sistema, como mostrado aqui:
16712855225
2.3.8. SELECT
SELECT também pode ser utilizado para recuperar linhas calculadas sem
referência a qualquer tabela.
Por exemplo:
mysql> SELECT 1 + 1;
-> 2
Você tem permissão para especificar DUAL como um nome tabela fictícia em
situações em que não há tabelas são referenciadas:
-> 2
Vejam que a primeira opção INNER JOIN, CROSS JOIN ou JOIN são
sintaticamente a mesma coisa para o MySQL, isso difere do padrão SQL/ANSI.
Esse comando basicamente faz a junção entre duas tabelas onde os atributos
definidos pela condição de junção são iguais.
A próxima opção, nós já comentamos algo sobre ela. O comando
STRAIGHT_JOIN especifica que ordem da execução da operação de junção pelo
SGBD deve ser a mesma que aparece na definição do SELECT.
Em seguida temos o LEFT JOIN e o RIGHT JOIN. Vejam que a cláusula OUTER é
opcional, como na maioria dos SGBDs. Pro fim temos o NATURAL JOIN que
acabamos de comentar acima nesta questão.
O outro parâmetro que precisa ser definido para a execução do JOIN é a
condição de junção que pode ser feita utilizando a cláusula ON, neste caso você
especifica os atributos de junção de cada tabela da seguinte forma tabelaA.attA
= tabelaB.attB. A outra opção seria usar o USING, nele você especifica uma lista
de atributos que tem o mesmo nome nas duas tabelas e a junção é feita por
meio deles. Vejam abaixo um exemplo de utilização do JOIN. Aproveitamos o
exemplo para mostrar como funciona alias no MySQL, ele usa a cláusula AS para
renomear tabelas utilizadas na junção visando evitar ambiguidade. Essa cláusula
é opcional. Veja que as duas expressões abaixo são equivales.
Gabarito: B
16712855225
2.3.9. UPDATE
O comando UPDATE pode ser executado sobre uma ou mais tabelas. Segue
abaixo a sintaxe do comando quando executado apenas sobre uma tabela.
A DO e HANDLER.
B TRUNCATE e DO.
C REPLACE e INSERT.
D CALL e DO.
16712855225
16712855225
2.4.2. Replicação
2.4.3.1. DESCRIBE
16712855225
2.4.3.2. EXPLAIN
Com a ajuda do EXPLAIN, você pode ver onde você deve adicionar índices a
tabelas de modo que a instrução seja executada mais rapidamente, usando
índices para encontrar linhas. Você também pode usar o EXPLAIN para verificar
se o otimizador une as tabelas na melhor ordem. Para dar uma dica para o
otimizador usar a uma ordem de associação correspondente à ordem na qual as
tabelas são descritas na instrução SELECT, você pode começar a declaração com
SELECT STRAIGHT_JOIN ao invés de apenas SELECT.
Se você tiver um problema com índices que não estão sendo usados quando
você acredita que eles deveriam ser, executado ANALYZE TABLE para atualizar
estatísticas de tabela, tais como a cardinalidade das chaves, que podem afetar
as escolhas que o otimizador faz.
2.4.3.3. HELP
HELP 'search_string'
• No nível mais geral, use contents para recuperar uma lista das categorias
de nível superior da Ajuda:
HELP 'contents'
HELP 'ascii'
2.4.3.4. USE
16712855225
16712855225
Questões comentadas
A SELECT CEILING
B SELECT FOUND_ROWS
C SELECT GET_LOCK
D SELECT SOUNDS
E SELECT VAR_POP
Comentário: Para responder essa questão precisamos ter o conhecimento das
funções de informação (information function) que são descritas no MySQL.
Abaixo coloquei uma tabela que mostrar as principais funções e suas descrições.
Nome Descrição
Executa uma expressão repetidas vezes para verificar o quão rápido o MySQL processa a
BENCHMARK()
exepressão
Retorna o character set de uma string passada como argumento. Ex: SELECT CHARSET('abc');
CHARSET()
'latin1'
Retorna o valor da coercibilidade da collation de uma string. Collation nada mais é que a
COERCIBILITY()
codificação de caracteres existente no Banco de Dados.
COLLATION() Retorna a collation de uma string
CONNECTION_ID() Retorna o ID da conexão (thread ID)
CURRENT_USER(),CURRENT_USER O nome do usuário e o nome do host autenticado
DATABASE() Retorna o nome do banco de dados default (atual)
16712855225
Para um SELECT que usa a clausula LIMIT, o número de linhas que seria retornado se não
FOUND_ROWS()
estivessemos usando a clausula LIMIT.
LAST_INSERT_ID() Valor da coluna AUTOINCREMENT para a última tupla inserida (INSERT)
ROW_COUNT() O número de linhas que sofreram UPDATE
SCHEMA() Sinônimo para DATABASE()
SESSION_USER() Sinônimo de USER()
SYSTEM_USER() Sinônimo de USER()
USER() O nome do usuário e o nome do host que provido pelo cliente
VERSION() Retorna uma string indicando a versão do servidor MySQL
Todos os tipos inteiros do MySQL podem ter o atributo opcional UNSIGNED. Esse
atributo é usado para permitir somente valores não negativos (maior ou igual a
zero) em uma coluna, gerando uma faixa numérica maior para representação de
números positivos nesta coluna.
Gabarito: B
O MySQL Server tem vários logs que podem ajudar a descobrir que atividade
está ocorrendo. O "binary log" registra:
A As consultas que levaram mais de um determinado número de segundos para
executar.
B As conexões estabelecidas e as declarações recebidas dos clientes.
Prof. Thiago Rodrigues Cavalcanti
www.estrategiaconcursos.com.br 66 de 80
MySQL Introdução e administração de banco de dados MySQL
Prof. Thiago Rodrigues Cavalcanti Aula 01
O log binário não é usado para comandos como SELECT ou SHOW pois não
modificam dados. Para registrar todas as operações (por exemplo, para
identificar uma consulta problema), use o log de consulta geral (General Query
Log).
Mais uma vez a resposta pode ser vista na alternativa E. Todas as modificações
feitas tanto nos dados como nos esquemas são registradas no log.
Gabarito: E
MySQL Cluster é projetado para não ter ponto único de falha. Em um sistema
nada compartilhado, cada componente deverá ter sua própria memória e disco,
e a utilização de mecanismos de armazenamento compartilhado, como redes
compartilhadas, sistemas de arquivos em rede, e SANs não são recomendados
ou suportados.
16712855225
Vejamos então, a partir da figura acima, o que seria o nó SQL? Ele deve possuir
um servidor MySQL que tem acesso aos dados armazenados nos nós de dados.
Logo, confirmamos a resposta na alternativa C.
Gabarito: C
B BTREE e B+TREE.
C B*TREE e HASH.
D B+TREE e HASH.
E BTREE e HASH.
16712855225
Pela figura é possível verificar que a storage engine do tipo MEMORY que
anteriormente era chamada de HEAP, como já vimos, possui duas possibilidades
para a estrutura de dados dos arquivos de índices, que são B-TREE e HASH.
Essas opções combinam com a nossa resposta na alternativa E.
Gabarito E
Gabarito: C
O formato físico utilizado pelas versões 5.1 e para as mais recentes do MySQL,
para representar suas tabelas, é o
A .tab.
B .mys.
C .frm.
D .sql.
E .ino.
Gabarito C.
Nome Descrição
Executa uma expressão repetidas vezes para verificar o quão rápido o MySQL processa a
BENCHMARK()
exepressão
Retorna o character set de uma string passada como argumento. Ex: SELECT CHARSET('abc');
CHARSET()
'latin1'
Retorna o valor da coercibilidade da collation de uma string. Collation nada mais é que a
COERCIBILITY()
codificação de caracteres existente no Banco de Dados.
COLLATION() Retorna a collation de uma string
CONNECTION_ID() Retorna o ID da conexão (thread ID)
CURRENT_USER(),CURRENT_USER O nome do usuário e o nome do host autenticado
DATABASE() Retorna o nome do banco de dados default (atual)
Para um SELECT que usa a clausula LIMIT, o número de linhas que seria retornado se não
FOUND_ROWS()
estivessemos usando a clausula LIMIT.
LAST_INSERT_ID() Valor da coluna AUTOINCREMENT para a última tupla inserida (INSERT)
ROW_COUNT() O número de linhas que sofreram UPDATE
SCHEMA() Sinônimo para DATABASE()
SESSION_USER() Sinônimo de USER()
SYSTEM_USER() Sinônimo de USER()
USER() O nome do usuário e o nome do host que provido pelo cliente
VERSION() Retorna uma string indicando a versão do servidor MySQL
Gabarito: D
Gabarito: E
Gabarito: A
16712855225
Comentário: Vamos analisar qual comando está associado a cada uma das
descrições independente da alternativa.
Mudar de base de dados: Criar um banco de dados não seleciona ele
automaticamente para o uso. Você deve fazer isso explicitamente. Para fazer
seu banco de dado ‘concurso’ ser o banco corrente, você deve usar o comando:
USE concurso; e deve receber como resposta Database Change.
Verificar os formatos dos campos da tabela: Os comandos DESCRIBE e
EXPLAIN são sinônimos. Na prática, a palavra-chave DESCRIBE é mais
Gabarito: C
16712855225
Considerações finais
Thiago Cavalcanti
Referências
Fiz uma lista com alguns links de referências caso você queria se
aprofundar um pouco.
i. DBA and Developer Guide to MySQL 5.6 – disponível em
https://dev.mysql.com/tech-resources/articles/mysql-5.6.html
ii. Comando de Create table – disponível em
https://dev.mysql.com/doc/refman/5.5/en/create-table.html
iii. Artigo interessante sobre full-text search (FTS) -
http://elias.praciano.com/2015/05/introducao-a-buscas-via-fulltext-
no-mysql/
16712855225