Extensões do MariaDB para o Padrão SQL-92
O MariaDB 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 MariaDB 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 MariaDB é 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 MariaDB ou mais nova, então o MariaDB irá usar a palavra-chave TEMPORARY
Extensões MariaDB são listadas abaixo:
- Os tipos de campo
MEDIUMINT
,SET
,ENUM
e os diferentes tiposBLOB
eTEXT
. - Os atributos de campos
AUTO_INCREMENT
,BINARY
,NULL
,UNSIGNED
eZEROFILL
. - 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 operadorBINARY
, que fazendo com que as comparações sejam feitas de acordo com a ordem ASCII usada na máquina servidora do MariaDB. - O MariaDB mapeia cada banco de dados em um diretório sob o diretório de dados do MariaDB, 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 MariaDB em sistemas operacionais que possuem o sistema de arquivos caso sensitivoo (como na maioria dos sistemas Unix). Leia "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 deUser space
. O MariaDB 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
eSTRAIGHT_JOIN
em uma instruçãoSELECT
. Leia "SintaxeSELECT
". - A opção
SQL_SMALL_RESULT
em uma instruçãoSELECT
. 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
ouKEY
em uma instruçãoCREATE TABLE
. Leia "SintaxeCREATE TABLE
". - O uso de
TEMPORARY
ouIF NOT EXISTS
comCREATE TABLE
. - O uso de
COUNT(DISTINCT lista)
onde 'lista' é maior que um elemento. - O uso de
CHANGE nome_campo
,DROP nome_campo
, ouDROP INDEX
,IGNORE
ouRENAME
em uma instruçãoALTER TABLE
. Leia "SintaxeALTER TABLE
". - O uso de
RENAME TABLE
. Leia "SintaxeRENAME TABLE
". - Utilização de múltiplas cláusulas
ADD
,ALTER
,DROP
, ouCHANGE
em uma instruçãoALTER TABLE
. - O uso de
DROP TABLE
com as palavras-chaveIF EXISTS
. - Você pode remover múltiplas tabelas com uma instrução única
DROP TABLE
. - As cláusulas
ORDER BY
eLIMIT
das instruçõesUPDATE
eDELETE
. - Sintaxe
INSERT INTO ... SET col_name = ...
. - A cláusula
DELAYED
das instruçõesINSERT
eREPLACE
. - A cláusula
LOW_PRIORITY
das instruçõesINSERT
,REPLACE
,DELETE
eUPDATE
. - O uso de
LOAD DATA INFILE
. Em alguns casos essa sintaxe é compatível com o OracleLOAD DATA INFILE
. Leia "SintaxeLOAD DATA INFILE
". - As intruções
ANALYZE TABLE
,CHECK TABLE
,OPTIMIZE TABLE
, eREPAIR TABLE
. - A instrução
SHOW
. Leia "Sintaxe deSHOW
". - Strings podem ser fechadas pelo '
'
' ou ''
', não apenas pelo ''
'. - O uso do meta-caractere de escape '
\
'. - A instrução
SET OPTION
. Leia "Sintaxe deSET
". - 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. Leia "Funções e Modificadores para Usar com CláusulasGROUP BY
". - Pode ser especificado
ASC
eDESC
com oGROUP BY
. - Para tornar mais fácil para usuários que venham de outros ambientes SQL, o MariaDB suporta apelidos (aliases) para várias funções. Por exemplo, todas funções de string suportam as sintaxes ANSI SQL e ODBC.
- O MariaDB entende os operadores
||
e&&
como ou(OR) e e(AND) logicos, como na linguagem de programação C. No MySQL,||
eOR
são sinônimos, assim como&&
eAND
. Devido a esta ótima sintaxe, o MariaDB não suporta o operador ANSI SQL para concatenação de strings||
; em vez disso, use oCONCAT()
. ComoCONCAT()
aceita vários argumentos, é fácil converter o uso do operador||
para MySQL. CREATE DATABASE
orDROP DATABASE
. Leia "SintaxeCREATE DATABASE
".- O operador
%
é um sinônimo paraMOD()
. Isto é,N % M
é equivalente aMOD(N,M)
.%
é suportado para programadores C e para compatibilidade com o PostgreSQL. - Os operadores
=
,<>
,<=
,<
,>=
,>
,<<
,>>
,<=>
,AND
,OR
ouLIKE
podem ser utilizados em comparações de campos a esquerda doFROM
nas instruçõesSELECT
. Por exemplo:mysql>
SELECT col1=1 AND col2=2 FROM nome_tabela;
- A função
LAST_INSERT_ID()
. Leia "mysql_insert_id()
". - Os operadores extendidos
REGEXP
eNOT REGEXP
utilizados em expressões regulares. CONCAT()
ouCHAR()
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()
ouWEEKDAY()
. - 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()
eBIT_XOR()
eGROUP_CONCAT()
. Leia "Funções e Modificadores para Usar com CláusulasGROUP BY
". - Uso de
REPLACE
no lugar deDELETE
+INSERT
. Leia "SintaxeREPLACE
". - As instruções
FLUSH
,RESET
eDO
. - 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;