MySQL Server incluye algunas extensiones que probablemente no
encontrará en otras bases de datos SQL. Tenga en cuenta que si
lo usa, su código no será portable a otros servidores SQL. En
algunos casos, puede escribir código que incluya extensiones
MySQL, pero siendo portable, mediante comentarios de la forma
/*! ... */
. En ese caso, MySQL parsea y
ejecuta el código dentro de los comentarios como si fuera
cualquier otro comando de MySQL, pero otros servidores SQL
ignorarán la extensión. Por ejemplo:
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
Si añade un número de versión tras el carácter
'!
', la sintaxis dentro del comentario se
ejecuta sólo si el número de versión de MySQL es igual o
mayor que el especificado:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
Eso significa que si tiene la Versión 3.23.02 o posterior,
MySQL Server usa la palabra clave TEMPORARY
.
La siguiente lista describe las extensiones MySQL, organizadas por categorías.
Organización de los datos en disco
MySQL Server mapea cada base de datos a un directorio bajo el directorio de datos de MySQL, y las tablas dentro de cada directorio como ficheros. Esto tiene algunas implicaciones:
Nombres de bases de datos y nombres de tablas son case sensitive en MySQL Server en sistemas operativos que tienen nombres de ficheros case-sensitive (como la mayoría de sistemas Unix). Consulte Sección 9.2.2, “Sensibilidad a mayúsuclas y minúsculas de identificadores”.
Puede usar comandos de sistema estándar para hacer
copia de seguridad, renombrar, mover, borrar y copiar
tablas de tipo MyISAM
o
ISAM
. Por ejemplo, para renombrar el
nombre de una tabla MyISAM
renombre
los archivos .MYD
,
.MYI
, y .frm
que correspondan a la tabla.
Nombres de bases de datos, tablas, índices, columnas o alias pueden empezar con un dígito (pero no pueden consistir únicamente de dígitos).
Sintaxis general del lenguaje
Cadenas de caracteres deben limitarse por
'"
' o ''
', no
sólo por ''
'.
Use '\
' como un carácter de escape
en cadenas de caracteres.
En comandos SQL, puede acceder a tablas de distintas
bases de datos con la sintaxis
db_name.tbl_name
. Algunos
servidores SQL proporcionan la misma fucnionalidad, pero
lo llaman User space
. MySQL Server no
soporta espacios de tablas como los usados en comandos
como: CREATE TABLE ralph.my_table...IN
my_tablespace
.
Sintaxis de comandos SQL
Los comandos ANALYZE TABLE
,
CHECK TABLE
, OPTIMIZE
TABLE
, y REPAIR TABLE
.
Los comandos CREATE DATABASE
y
DROP DATABASE
. Consulte
Sección 13.1.3, “Sintaxis de CREATE DATABASE
”.
El comando DO
.
EXPLAIN SELECT
para obtener una
descripción de cómo las tablas se usan.
Los comandos FLUSH
y
RESET
.
El comando SET
. Consulte
Sección 13.5.3, “Sintaxis de SET
”.
El comando SHOW
. Consulte
Sección 13.5.4, “Sintaxis de SHOW
”.
Uso de LOAD DATA INFILE
. En muchos
casos, esta sintaxis es compatible con el comando de
Oracle LOAD DATA INFILE
. Consulte
Sección 13.2.5, “Sintaxis de LOAD DATA INFILE
”.
Uso de RENAME TABLE
. Consulte
Sección 13.1.9, “Sintaxis de RENAME TABLE
”.
Uso de REPLACE
en lugar de
DELETE
+ INSERT
.
Consulte Sección 13.2.6, “Sintaxis de REPLACE
”.
Uso de CHANGE col_name
, DROP
col_name
, o DROP INDEX
,
IGNORE
o RENAME
en
un comando ALTER TABLE
. Uso de
múltiples ADD
,
ALTER
, DROP
, o
CHANGE
cláusulas en un comando
ALTER TABLE
. Consulte
Sección 13.1.2, “Sintaxis de ALTER TABLE
”.
Uso de nombres de índices, índices sobre el prefijo de
un cambio, y uso de INDEX
o
KEY
en un comando CREATE
TABLE
. Consulte
Sección 13.1.5, “Sintaxis de CREATE TABLE
”.
Uso de TEMPORARY
o IF NOT
EXISTS
con CREATE TABLE
.
Uso de IF EXISTS
con DROP
TABLE
.
Puede borrar varias tablas con un único comando
DROP TABLE
.
Las cláusulas ORDER BY
y
LIMIT
de los comandos
UPDATE
y DELETE
.
Sintaxis de INSERT INTO ... SET col_name =
...
.
La cláusula DELAYED
de los comandos
INSERT
y REPLACE
.
La cláusula LOW_PRIORITY
de los
comandos INSERT
,
REPLACE
, DELETE
, y
UPDATE
.
Uso de INTO OUTFILE
y
STRAIGHT_JOIN
en un comando
SELECT
. Consulte
Sección 13.2.7, “Sintaxis de SELECT
”.
La opción SQL_SMALL_RESULT
en un
comando SELECT
.
No necesita nombrar todas las columnas seleccionadas en
la parte GROUP BY
. Esto proporciona
mejor rendimiento en algunas consultas muy específicas
pero bastante normales. Consulte
Sección 12.10, “Funciones y modificadores para cláusulas GROUP BY
”.
Puede especificar ASC
y
DESC
con GROUP BY
.
La habilidad para inicializar variables en un comando
con el operador :=
:
mysql> SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg -> FROM test_table; mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
Tipos de columnas
Los tipos de columnas MEDIUMINT
,
SET
, ENUM
, y los
distintos tipos BLOB
y
TEXT
.
Los atributos de columnas
AUTO_INCREMENT
,
BINARY
, NULL
,
UNSIGNED
, y
ZEROFILL
.
Funciones y operadores
Para facilitar a los usuarios que vienen de otros entornos SQL, MySQL Server soporta alias para varias funciones. Por ejemplo, todas las funciones de cadenas de caracteres soportan sintaxis estándar SQL y ODBC.
MySQL Server entiende los operadores
||
y &&
para OR lógica y AND, como en el lenguaje de
programación C. En MySQL Server, ||
y OR
son sinónimos, como lo son
&&
y AND
.
Debido a esta sintaxis, MySQL Server no soporta el
operador estándar SQL ||
para
concatenar cadenas de caracteres; use en su lugar
CONCAT()
. Como
CONCAT()
toma cualquier número de
argumentos, es fácil adaptarse al uso del operador
||
a MySQL Server.
Uso de COUNT(DISTINCT list)
donde
list
tiene más de un elemento.
Todas las comparaciones de cadenas de caracteres son
case-insensitive por defecto, con la ordenación
determinada por el conjunto de caracteres actual
(ISO-8859-1 Latin1 por defecto). Si no quiere que sea
así, puede declarar las columnas con el atributo
BINARY
o usar la conversión
BINARY
, que hace que las
comparaciones se hagan usando el código de caracteres
subyacente en lugar del orden léxico.
El operador %
es sinónimo de
MOD()
. Esto es que N %
M
es equivalente a
MOD(N,M)
. %
se
soporta para programadores C y por compatibilidad con
PostgreSQL.
Los operadores =
,
<>
, <=
,<
,
>=
,>
,
<<
,
>>
,
<=>
, AND
,
OR
, o LIKE
se
pueden usar en comparaciones de columnas a la izquierda
del FROM
en comandos
SELECT
. Por ejemplo:
mysql> SELECT col1=1 AND col2=2 FROM tbl_name
;
La función LAST_INSERT_ID()
retorna
el valor AUTO_INCREMENT
más
reciente. Consulte
Sección 12.9.3, “Funciones de información”.
LIKE
se permite en columnas
numéricas.
Los operadores de expresiones regulares extendidos
REGEXP
y NOT
REGEXP
.
CONCAT()
o CHAR()
con un argumento o más de dos argumentos. (En MySQL
Server, estas funciones pueden tomar cualquier número
de argumentos.)
Las funciones BIT_COUNT()
,
CASE
, ELT()
,
FROM_DAYS()
,
FORMAT()
, IF()
,
PASSWORD()
,
ENCRYPT()
, MD5()
,
ENCODE()
,
DECODE()
,
PERIOD_ADD()
,
PERIOD_DIFF()
,
TO_DAYS()
, y
WEEKDAY()
.
Uso de TRIM()
para eliminar espacios
en substrings. Funciones estándar sólo SQL soportan
eliminar caracteres simples.
Las funciones GROUP BY
STD()
, BIT_OR()
,
BIT_AND()
,
BIT_XOR()
, y
GROUP_CONCAT()
. Consulte
Sección 12.10, “Funciones y modificadores para cláusulas GROUP BY
”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.