:: DEVELOPER ZONE
O MySQL fornece algumas extensões que você provavelmente não irá encontrar em
alguns bancos de dados SQL. Fique avisado que se você usá-las, seu código pode
não ser mais portável para outros servidores SQL. Em alguns casos, você pode
escrever código que inclui extensões MySQL, mas continua portável, usando
comentários da forma /*! ...*/. Neste caso, o MySQL irá analisar e
executar o código com o comentário como irá fazer com qualquer outra instrução
MySQL, mas outros servidores SQL irão ignorar as extensões. Por exemplo:
SELECT /*! STRAIGHT_JOIN */ nome_campo FROM table1,table2 WHERE ...
Se você adicionar um número de versão depois do '!', a sintaxe só será
executada se a versão do MySQL é igual ou maior que o número de versão usado:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
O exemplo acima significa que se você tiver uma versão do MySQL 3.23.02 ou mais
nova, então o MySQL irá usar a palavra-chave TEMPORARY
Extensões MySQL são listadas abaixo:
Os tipos de campo MEDIUMINT, SET, ENUM e os diferentes
tipos BLOB e TEXT.
Os atributos de campos AUTO_INCREMENT, BINARY, NULL,
UNSIGNED e ZEROFILL.
Todas comparações de strings por padrão são caso insensitivo,
com classificação ordenada determinada pelo conjunto de caracteres corrente
(ISO-8859-1 Latin1 por padrão). Se você não gosta disso você deverá declarar
suas colunas com o atributo BINARY ou usar o operador BINARY,
que fazendo com que as comparações sejam feitas de acordo com a ordem ASCII
usada na máquina servidora do MySQL.
O MySQL mapeia cada banco de dados em um diretório sob o diretório de dados do MySQL, e tabelas internamente num banco de dados para arquivos no diretório do banco de dados.
Isto tem algumas implicações:
Nomes de bancos de dados e tabelas são caso sensitivoo no MySQL em sistemas operacionais que possuem o sistema de arquivos caso sensitivoo (como na maioria dos sistemas Unix). See Secção 6.1.3, “Caso Sensitivo nos Nomes”.
Nomes de Bancos de dados, tabelas, índices, campos ou apelidos pode começar com um dígito (porém não podem consistir somente de digitos).
Você pode usar comandos padrão do sistemas para fazer backups, renomear, apagar
e copiar tabelas. Por exemplo, para renomear uma tabela, renomeie os arquivos
.MYD, .MYI e .frm. para o nome da tabela correspondente.
Em algumas instruções SQL, você pode acessar tabelas de diferentes bancos de
dados com a sintaxe nome_bd.nome_tbl. Alguns servidores SQL fornecem
a mesma funcionalidade mas chamam isto de User space. O MySQL não
suporta tablespaces como em:
create table ralph.my_table...IN minha_tablespace.
LIKE é permitido em campos numéricos.
O uso de INTO OUTFILE e STRAIGHT_JOIN em uma instrução
SELECT. See Secção 6.4.1, “Sintaxe SELECT”.
A opção SQL_SMALL_RESULT em uma instrução SELECT.
EXPLAIN SELECT para obter uma descrição de como as tabelas são ligadas.
A utilização de nomes de índices, índices em um prefixo de um campo, e
uso de INDEX ou KEY em uma instrução CREATE TABLE.
See Secção 6.5.3, “Sintaxe CREATE TABLE”.
O uso de TEMPORARY ou IF NOT EXISTS com CREATE TABLE.
O uso de COUNT(DISTINCT lista) onde 'lista' é maior que um elemento.
O uso de CHANGE nome_campo, DROP nome_campo, ou DROP INDEX,
IGNORE ou RENAME em uma instrução ALTER TABLE.
See Secção 6.5.4, “Sintaxe ALTER TABLE”.
O uso de RENAME TABLE. See Secção 6.5.5, “Sintaxe RENAME TABLE”.
Utilização de múltiplas cláusulas ADD, ALTER, DROP, ou
CHANGE em uma instrução ALTER TABLE.
O uso de DROP TABLE com as palavras-chave IF EXISTS.
Você pode remover múltiplas tabelas com uma instrução única
DROP TABLE.
As cláusulas ORDER BY e LIMIT das instruções UPDATE
e DELETE.
Sintaxe INSERT INTO ... SET col_name = ....
A cláusula DELAYED das instruções INSERT e REPLACE.
A cláusula LOW_PRIORITY das instruções INSERT, REPLACE,
DELETE e UPDATE.
O uso de LOAD DATA INFILE. Em alguns casos essa sintaxe é compatível
com o Oracle LOAD DATA INFILE. See Secção 6.4.8, “Sintaxe LOAD DATA INFILE”.
As intruções ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE, e
REPAIR TABLE.
A instrução SHOW.
See Secção 4.6.8, “Sintaxe de SHOW”.
Strings podem ser fechadas pelo '"' ou ''', não apenas pelo '''.
O uso do meta-caractere de escape '\'.
A instrução SET OPTION. See Secção 5.5.6, “Sintaxe de SET”.
Você não precisa nomear todos os campos selecionados na parte GROUP BY.
Isto fornece melhor performance para algumas consultas específicas, mas muito
comuns.
See Secção 6.3.7, “Funções e Modificadores para Usar com Cláusulas GROUP BY”.
Pode ser especificado ASC e DESC com o GROUP BY.
Para tornar mais fácil para usuários que venham de outros ambientes SQL, o MySQL suporta apelidos (aliases) para várias funções. Por exemplo, todas funções de string suportam as sintaxes ANSI SQL e ODBC.
O MySQL entende os operadores || e && como ou(OR) e e(AND) logicos,
como na linguagem de programação C. No MySQL, || e OR são sinônimos,
assim como && e AND. Devido a esta ótima sintaxe, o MySQL
não suporta o operador ANSI SQL para concatenação de strings ||;
em vez disso, use o CONCAT(). Como CONCAT() aceita vários
argumentos, é fácil converter o uso do operador || para MySQL.
CREATE DATABASE or DROP DATABASE.
See Secção 6.5.1, “Sintaxe CREATE DATABASE”.
O operador % é um sinônimo para MOD(). Isto é, N % M
é equivalente a MOD(N,M). % é suportado para programadores C
e para compatibilidade com o PostgreSQL.
Os operadores =, <>, <= ,<, >=,>,
<<, >>, <=>, AND, OR ou LIKE podem
ser utilizados em comparações de campos a esquerda do FROM nas
instruções SELECT. Por exemplo:
mysql> SELECT col1=1 AND col2=2 FROM nome_tabela;
A função LAST_INSERT_ID().
See Secção 12.1.3.32, “mysql_insert_id()”.
Os operadores extendidos REGEXP e NOT REGEXP utilizados em
expressões regulares.
CONCAT() ou CHAR() com um ou mais de dois argumentos. (No
MySQL, estas funções receber qualquer número de argumentos.)
As funções BIT_COUNT(), CASE, ELT(), FROM_DAYS(),
FORMAT(), IF(), PASSWORD(), ENCRYPT(),
MD5(), ENCODE(), DECODE(), PERIOD_ADD(),
PERIOD_DIFF(), TO_DAYS() ou WEEKDAY().
Uso de TRIM() para cortar substrings. o SQL-99 só suporta remoção de
caracteres únicos.
As funções do GROUP BY: STD(), BIT_OR(), BIT_AND() e
BIT_XOR() e GROUP_CONCAT().
See Secção 6.3.7, “Funções e Modificadores para Usar com Cláusulas GROUP BY”.
Uso de REPLACE no lugar de DELETE + INSERT.
See Secção 6.4.7, “Sintaxe REPLACE”.
As instruções FLUSH, RESET e DO.
A possibilidade de configurar variáveis em uma instrução com :=:
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS media FROM tabela_teste; SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
© 1995-2005 MySQL AB. All rights reserved.
