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;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.