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,ENUMe os diferentes tiposBLOBeTEXT. - Os atributos de campos
AUTO_INCREMENT,BINARY,NULL,UNSIGNEDeZEROFILL. - 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
BINARYou 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,.MYIe.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 OUTFILEeSTRAIGHT_JOINem uma instruçãoSELECT. Leia "SintaxeSELECT". - A opção
SQL_SMALL_RESULTem uma instruçãoSELECT. EXPLAIN SELECTpara 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
INDEXouKEYem uma instruçãoCREATE TABLE. Leia "SintaxeCREATE TABLE". - O uso de
TEMPORARYouIF NOT EXISTScomCREATE TABLE. - O uso de
COUNT(DISTINCT lista)onde 'lista' é maior que um elemento. - O uso de
CHANGE nome_campo,DROP nome_campo, ouDROP INDEX,IGNOREouRENAMEem 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, ouCHANGEem uma instruçãoALTER TABLE. - O uso de
DROP TABLEcom as palavras-chaveIF EXISTS. - Você pode remover múltiplas tabelas com uma instrução única
DROP TABLE. - As cláusulas
ORDER BYeLIMITdas instruçõesUPDATEeDELETE. - Sintaxe
INSERT INTO ... SET col_name = .... - A cláusula
DELAYEDdas instruçõesINSERTeREPLACE. - A cláusula
LOW_PRIORITYdas instruçõesINSERT,REPLACE,DELETEeUPDATE. - 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
ASCeDESCcom 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,||eORsã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 DATABASEorDROP 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,ORouLIKEpodem ser utilizados em comparações de campos a esquerda doFROMnas 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
REGEXPeNOT REGEXPutilizados 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
REPLACEno lugar deDELETE+INSERT. Leia "SintaxeREPLACE". - As instruções
FLUSH,RESETeDO. - 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;