MySQL, el sistema de gestión de bases de datos SQL Open Source más popular, lo desarrolla, distribuye y soporta MySQL AB. MySQL AB es una compañía comercial, fundada por los desarrolladores de MySQL. Es una compañía Open Source de segunda generación que une los valores y metodología Open Source con un exitoso modelo de negocio.
El sitio web MySQL (http://www.mysql.com/) proporciona la última información sobre MySQL y MySQL AB.
-
MySQL es un sistema de gestión de bases de datos
Una base de datos es una colección estruturada de datos. Puede ser cualquier cosa, desde una simple lista de compra a una galería de pintura o las más vastas cantidades de información en una red corporativa. Para añadir, acceder, y procesar los datos almacenados en una base de datos, necesita un sistema de gestión de base de datos como MySQL Server. Al ser los computadores muy buenos en tratar grandes cantidades de datos, los sistemas de gestión de bases de datos juegan un papel central en computación, como aplicaciones autónomas o como parte de otras aplicaciones.
-
MySQL es un sistema de gestión de bases de datos relacionales
Una base de datos relacional almacena datos en tablas separadas en lugar de poner todos los datos en un gran almacén. Esto añade velocidad y flexibilidad. La parte SQL de "MySQL"se refiere a "Structured Query Language". SQL es el lenguaje estandarizado más común para acceder a bases de datos y está definido por el estándard ANSI/ISO SQL. El estándard SQL ha evolucionado desde 1986 y existen varias versiones. En este manual, "SQL-92" se refiere al estándard del 1992, "SQL:1999" se refiere a la versión del 1999, y "SQL:2003" se reviere a la versión actual del estándard. Usamos la frase "el estándard SQL" para referirnos a la versión actual de SQL.
-
MySQL software es Open Source.
Open Source significa que es posible para cualquiera usar y modificar el software. Cualquiera puede bajar el software MySQL desde internet y usarlo sin pagar nada. Si lo desea, puede estudiar el código fuente y cambiarlo para adapatarlo a sus necesidades. El software MySQL usa la licencia GPL (GNU General Public License), http://www.fsf.org/licenses/, para definir lo que puede y no puede hacer con el software en diferentes situaciones. Si no se encuentra cómodo con la GPL o necesita añadir código MySQL en una aplicación comercial, puede comprarnos una licencia comercial. Consulte la Introducción a las Licencias MySQL para más información (http://www.mysql.com/company/legal/licensing/).
-
El servidor de base de datos MySQL es muy rápido, fiable y fácil de usar.
Si esto es lo que está buscando, debería probarlo. El servidor MySQL también tiene una serie de caracerísticas prácticas desarrolladas en cooperación con los usuarios. Puede encontrar comparaciones de rendimiento de MySLQL Server con otros sistemas de gestión de bases de datos en nuestra página de comparativas de rendimiento. Consulte Sección 7.1.4, “El paquete de pruebas de rendimiento (benchmarks) de MySQL”.
MySQL Server se desarrolló originalmente para tratar grandes bases de datos mucho más rápido que soluciones existentes y ha sido usado con éxito en entornos de producción de alto rendimiento durante varios años. MySQL Server ofrece hoy en día una gran cantidad de funciones. Su conectividad, velocidad, y seguridad hacen de MySQL Server altamente apropiado para acceder bases de datos en Internet
-
MySQL Server trabaja en entornos cliente/servidor o incrustados
El software de bases de datos MySQL es un sistema cliente/sevidor que consiste en un servidor SQL multi-threaded que trabaja con diferentes bakends, programas y bibliotecas cliente, herramientas administrativas y un amplio abanico de interfícies de programación para aplicaciones (APIs).
También proporcionamos el MySQL Server como biblioteca incrustada multi-threaded que puede lincar en su aplicación para obtener un producto más pequeño, rápido y fácil de administrar.
-
Una gran cantidad de software de contribuciones está disponible para MySQL
Es muy posible que su aplicación o lenguaje favorito soporte el servidor de base de datos MySQL.
La forma oficial de pronunciar "MySQL" es "My Ess Que Ell" (no "my sicuel"), pero no importa si lo pronuncia como "my sicuel" o de alguna otra forma.
Empezamos con la intención de usar mSQL
para
conectar a nuestras tablas utilizando nuestras propias rutinas
rápidas de bajo nivel (ISAM). Sin embargo y tras algunas
pruebas, llegamos a la conclusión que mSQL
no era lo suficientemente rápido o flexible para nuestras
necesidades. Esto provocó la creación de una nueva interfície
SQL para nuestra base de datos pero casi con la misma
interfície API que mSQL
. Esta API fue
diseñada para permitir código de terceras partes que fue
escrito para poder usarse con mSQL
para ser
fácilmente portado para el uso con MySQL.
La derivación del nombre MySQL no está clara. Nuestro directorio base y un gran número de nuestras bibliotecas y herramientas han tenido el prefijo "my" por más de 10 años. Sin embargo, la hija del co-fundador Monty Widenius también se llama My. Cuál de los dos dió su nombre a MySQL todavía es un misterio, incluso para nosotros.
El nombre del delfín de MySQL (nuestro logo) es "Sakila", que fué elegido por los fundadores de MySQL AB de una gran lista de nombres sugerida por los usuarios en el concurso "Name the Dolphin" (ponle nombre al delfín). El nombre ganador fue enviado por Ambrose Twebaze, un desarrollador de software Open Source de Swaziland, África. Según Ambrose, el nombre femenino de Sakila tiene sus raíces en SiSwate, el idioma local de Swaziland. Sakila también es el nombre de una ciudad en Arusha, Tanzania, cerca del país de origen de Ambrose, Uganda.
La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL. Consulte Sección 1.5, “Mapa de desarrollo de MySQL” para más información acerca de las características actuales y próximas.
-
Interioridades y portabilidad
-
Escrito en C y en C++
-
Probado con un amplio rango de compiladores diferentes
-
Funciona en diferentes plataformas. Consulte Sección 2.1.1, “Sistemas operativos que MySQL soporta”.
-
Usa GNU Automake, Autoconf, y Libtool para portabilidad.
-
APIs disponibles para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, y Tcl. Consulte Capítulo 24, APIs de MySQL.
-
Uso completo de multi-threaded mediante threads del kernel. Pueden usarse fácilmente multiple CPUs si están disponibles.
-
Proporciona sistemas de almacenamiento transaccionales y no transaccionales.
-
Usa tablas en disco B-tree (
MyISAM
) muy rápidas con compresión de índice. -
Relativamente sencillo de añadir otro sistema de almacenamiento. Esto es útil si desea añadir una interfície SQL para una base de datos propia.
-
Un sistema de reserva de memoria muy rápido basado en threads.
-
Joins muy rápidos usando un multi-join de un paso optimizado.
-
Tablas hash en memoria, que son usadas como tablas temporales.
-
Las funciones SQL están implementadas usando una librería altamente optimizada y deben ser tan rápidas como sea posible. Normalmente no hay reserva de memoria tras toda la inicialización para consultas.
-
El código MySQL se prueba con Purify (un detector de memoria perdida comercial) así como con Valgrind, una herramienta GPL (http://developer.kde.org/~sewardj/).
-
El servidor está disponible como un programa separado para usar en un entorno de red cliente/servidor. También está disponible como biblioteca y puede ser incrustado (linkado) en aplicaciones autónomas. Dichas aplicaciones pueden usarse por sí mismas o en entornos donde no hay red disponible..
-
-
Tipos de columnas
-
Diversos tipos de columnas: enteros con/sin signo de 1, 2, 3, 4, y 8 bytes de longitud,
FLOAT
,DOUBLE
,CHAR
,VARCHAR
,TEXT
,BLOB
,DATE
,TIME
,DATETIME
,TIMESTAMP
,YEAR
,SET
,ENUM
, y tipos espaciales OpenGIS. Consulte Capítulo 11, Tipos de columna. -
Registros de longitud fija y longitud variable.
-
-
Sentencias y funciones
-
Soporte completo para operadores y funciones en las cláusulas de consultas
SELECT
yWHERE
. Por ejemplo:mysql> SELECT CONCAT(first_name, ' ', last_name) -> FROM citizen -> WHERE income/dependents > 10000 AND age > 30;
-
Soporte completo para las cláusulas SQL
GROUP BY
yORDER BY
. Soporte de funciones de agrupación (COUNT()
,COUNT(DISTINCT ...)
,AVG()
,STD()
,SUM()
,MAX()
,MIN()
, yGROUP_CONCAT()
). -
Soporte para
LEFT OUTER JOIN
yRIGHT OUTER JOIN
cumpliendo estándards de sintaxis SQL y ODBC. -
Soporte para alias en tablas y columnas como lo requiere el estándard SQL.
-
DELETE
,INSERT
,REPLACE
, yUPDATE
devuelven el número de filas que han cambiado (han sido afectadas). Es posible devolver el número de filas que serían afectadas usando un flag al conectar con el servidor. -
El comando específico de MySQL
SHOW
puede usarse para obtener información acerca de la base de datos, el motor de base de datos, tablas e índices. El comandoEXPLAIN
puede usarse para determinar cómo el optimizador resuelve una consulta. -
Los nombres de funciones no colisionan con los nombres de tabla o columna. Por ejemplo,
ABS
es un nombre válido de columna. La única restricción es que para una llamada a una función, no se permiten espacios entre el nombre de función y el '(
' a continuación. Consulte Sección 9.6, “Tratamiento de palabras reservadas en MySQL”. -
Puede mezclar tablas de distintas bases de datos en la misma consulta (como en MySQL 3.22).
-
-
Seguridad
-
Un sistema de privilegios y contraseñas que es muy flexible y seguro, y que permite verficación basada en el host. Las contraseñas son seguras porque todo el tráfico de contraseñas está encriptado cuando se conecta con un servidor.
-
-
Escalabilidad y límites
-
Soporte a grandes bases de datos. Usamos MySQL Server con bases de datos que contienen 50 millones de registros. También conocemos usuarios que usan MySQL Server con 60.000 tablas y acerca de 5.000.000 de registros.
-
Se permiten hasta 64 índices por tabla (32 antes de MySQL 4.1.2). Cada índice puede consistir desde 1 hasta 16 columnas o partes de columnas. El máximo ancho de límite son 1000 bytes (500 antes de MySQL 4.1.2).Un índice puede usar prefijos de una columna para los tipos de columna
CHAR
,VARCHAR
,BLOB
, oTEXT
.
-
-
Conectividad
-
Los clientes pueden conectar con el servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Windows de la familia NT (NT,2000,XP, o 2003), los clientes pueden usar named pipes para la conexión. En sistemas Unix, los clientes pueden conectar usando ficheros socket Unix.
-
En MySQL 5.0, los servidores Windows soportan conexiones con memoria compartida si se inicializan con la opción
--shared-memory
. Los clientes pueden conectar a través de memoria compartida usando la opción--protocol=memory
. -
La interfaz para el conector ODBC (MyODBC) proporciona a MySQL soporte para programas clientes que usen conexiones ODBC (Open Database Connectivity). Por ejemplo, puede usar MS Access para conectar al servidor MySQL. Los clientes pueden ejecutarse en Windows o Unix. El código fuente de MyODBC está disponible. Todas las funciones para ODBC 2.5 están soportadas, así como muchas otras. Consulte Sección 25.1, “El conector ODBC de MySQL”.
-
La interfaz para el conector J MySQL proporciona soporte para clientes Java que usen conexiones JDBC. Estos clientes pueden ejecutarse en Windows o Unix. El código fuente para el conector J está disponible. Consulte Sección 25.3, “MySQL Connector/J”.
-
-
Localización
-
El servidor puede proporcionar mensajes de error a los clientes en muchos idomas. Consulte Sección 5.9.2, “Escoger el idioma de los mensajes de error”.
-
Soporte completo para distintos conjuntos de carácteres, incluyendo
latin1
(ISO-8859-1),german
,big5
,ujis
, y más. Por ejemplo, los carácteres escandinavos 'â
', 'ä
' y 'ö
' están permitidos en nombres de tablas y columnas. El soporte para Unicode está disponible -
Todos los datos se guardan en el conjunto de carácteres elegido. Todas las comparaciones para columnas normales de cadenas de carácteres son case-insensitive.
-
La ordenación se realiza acorde al conjunto de carácteres elegido (usando colación Sueca por defecto). Es posible cambiarla cuando arranca el servidor MySQL. Para ver un ejemplo de ordenación muy avanzada, consulte el código Checo de ordenación. MySQL Server soporta diferentes conjuntos de carácteres que deben ser especificados en tiempo de compilación y de ejecución.
-
-
Clientes y herramientas
-
MySQL server tiene soporte para comandos SQL para chequear, optimizar, y reparar tablas. Estos comandos están disponibles a través de la línea de comandos y el cliente mysqlcheck. MySQL también incluye myisamchk, una utilidad de línea de comandos muy rápida para efectuar estas operaciones en tablas
MyISAM
. Consulte Capítulo 5, Administración de bases de datos. -
Todos los programas MySQL pueden invocarse con las opciones
--help
o-?
para obtener asistencia en línea.
-
Esta sección trata las preguntas "¿Qué estabilidad tiene MySQL Server?" y, "¿Puedo fiarme de MySQL Server para este proyecto?" Intentaremos clarificar estas cuestiones y responder algunas preguntas importantes que preocupan a muchos usuarios potenciales. La información en esta sección se basa en datos recopilados de las listas de correo, que son muy activas para identificar problemas así como para reportar tipos de usos.
El código original se remonta a los principos de los años 80. En TcX, la predecesora de MySQL AB, el código MySQL ha funcionado en proyectos desde mediados de 1996 sin ningún problema. Cuando el software de base de datos MySQL fue distribuído entre un público más amplio, nuestros nuevos usuarios rápidamente encontraron trozos de código no probados. Cada nueva versión desde entonces ha tenido pocos problemas de portabilidad incluso considerando que cada nueva versión ha tenido muchas nuevas funcionalidades.
Cada versión de MySQL Server ha sido usable. Los problemas han ocurrido únicamente cuando los usuarios han probado código de las "zonas grises". Naturalmente, los nuevos usuarios no conocen cuáles son estas zonas; esta sección, por lo tanto, trata de documentar dichas áreas conocidas a día de hoy. Las descripciones mayormente se corresponden con la versión 3.23, 4.0 y 4.1 de MySQL Server. Todos los bugs reportados y conocidos se arreglan en la última versión, con las excepciones listadas en las secciones de bugs y que están relacionados con problemas de diseño. Consulte Sección A.8, “Problemas conocidos en MySQL”.
El diseño de MySQL Server es multi capa, con módulos independientes. Algunos de los últimos módulos se listan a continuación con una indicación de lo bien testeados que están:
-
Replicatión (Estable)
Hay grandes grupos de servidores usando replicación en producción, con buenos resultados. Se trabaja para mejorar características de replicación en MySQL 5.x.
-
InnoDB
tablas (Estable)El motor de almacenamiento transaccional
InnoDB
es estable y usado en grandes sistemas de producción con alta carga de trabajo. -
BDB
tablas (Estable)El código
Berkeley DB
es muy estable, pero todavía lo estamos mejorando con el interfaz del motor de almacenamiento transaccionalBDB
en MySQL Server. -
Búsquedas Full-text (Estable)
Búsquedas Full-text es ámpliamente usada.
-
MyODBC
3.51 (Estable)MyODBC
3.51 usa ODBC SDK 3.51 y es usado en sistemas de producción ámpliamente. Algunas cuestiones surgidas parecen ser cuestión de las aplicaciones que lo usan e independientes del controlador ODBC o la base de datos subyacente.
En MySQL 5.0, usando el motor de almacenamiento
MyISAM
, el máximo tamaño de las tablas es
de 65536 terabytes (256 ^ 7 - 1 bytes). Por lo tanto, el tamaño
efectivo máximo para las bases de datos en MySQL usualmente los
determinan los límites de tamaño de ficheros del sistema
operativo, y no por límites internos de MySQL.
El motor de almacenamiento InnoDB
mantiene
las tablas en un espacio que puede ser creado a partir de varios
ficheros. Esto permite que una tabla supere el tamaño máximo
individual de un fichero. Este espacio puede incluir particiones
de disco, lo que permite tablas extremadamente grandes. El
tamaño máximo del espacio de tablas es 64TB.
La siguiente tabla lista algunos ejemplos de límites de tamaño de ficheros de sistemas operativos. Esto es sólo una burda guía y no pretende ser definitiva. Para la información más actual, asegúrese de consultar la documentación específica de su sistema operativo.
Sistema operativo | Tamaño máximo de fichero |
Linux 2.2-Intel 32-bit | 2GB (LFS: 4GB) |
Linux 2.4 | (usando sistema de ficheros ext3) 4TB |
Solaris 9/10 | 16TB |
Sistema de ficheros NetWare w/NSS | 8TB |
win32 w/ FAT/FAT32 | 2GB/4GB |
win32 w/ NTFS | 2TB (posiblemente mayor) |
MacOS X w/ HFS+ | 2TB |
En Linux 2.2, puede utilizar tablas MyISAM
mayores de 2GB usando el parche para LFS (Large File Support) en
el sistema de ficheros ext2. En Linux 2.4 y posteriores, existen
parches para ReiserFS soportando grandes archivos (hasta 2TB).
La mayoría de distribuciones Linux se basan en el kernel 2.4 o
2.6 e incluyen todos los parches LFS necesarios. Con JFS y XFS,
se permiten ficheros mayores de un petabyte para Linux. Sin
embargo, el tamaño máximo de ficheros todavía depende de
diversos factores, uno de ellos siendo el sistema de ficheros
usado para almacenar tablas MySQL.
Para un resumen más detallado acerca de LFS en Linux, recomendamos la página de Andreas Jaeger Large File Support in Linux en http://www.suse.de/~aj/linux_lfs.html.
Usuarios de Windows, por favor tengan en cuenta que: FAT and VFAT (FAT32) no se consideran apropiados para sistemas de producción con MySQL. Use NTFS para ello.
Por defecto, MySQL crea tablas MyISAM
con una
estructura interna que permite un tamaño máximo de unas 4GB.
Puede chequear el tamaño máximo de tabla para una tabla con el
comando SHOW TABLE STATUS
o con
myisamchk -dv
tbl_name
. Consulte
Sección 13.5.4, “Sintaxis de SHOW
”.
Si necesita una tabla MyISAM
con un tamaño
mayor a 4GB (y su sistema operativo soporta ficheros grandes),
el comando CREATE TABLE
permite las opciones
AVG_ROW_LENGTH
y MAX_ROWS
.
Consulte Sección 13.1.5, “Sintaxis de CREATE TABLE
”. También puede cambiar
esas opciones con ALTER TABLE
una vez que la
tabla se ha creado, para aumentar el tamaño máximo de la
tabla. Consulte Sección 13.1.2, “Sintaxis de ALTER TABLE
”.
Otros métodos para cambiar los límites de tamaño de ficheros
para tablas MyISAM
son:
-
Si una tabla es de sólo lectura, puede usar myisampack para comprimirla. myisampack normalmente comprime una tabla al menos un 50%, lo que permite, a efectos prácticos, tablas mucho mayores. myisampack puede mezclar múltiples tablas en una misma tabla. Consulte Sección 8.2, “myisampack, el generador de tablas comprimidas de sólo lectura de MySQL”.
-
MySQL incluye la biblioteca
MERGE
que permite tratar una colección de tablasMyISAM
con una estructura idéntica en una tablaMERGE
. Consulte Sección 14.2, “El motor de almacenamientoMERGE
”.
MySQL Server por sí mismo no tiene problemas de conformidad con el año 2000 (Y2K):
-
MySQL Server utiliza funciones de tiempo Unix que tratan las fechas hasta el año
2037
para valoresTIMESTAMP
. Para valoresDATE
yDATETIME
, se aceptan fechas hasta el año9999
. -
Todas las funciones de fecha MySQL se implementan en un mismo fichero fuente,
sql/time.cc
, y están programados cuidadosamente para no tener problemas con el año 2000. -
En MySQL 5.0 y posterior, el tipo de columna
YEAR
puede almacenar los años0
y1901
hasta2155
en un byte y mostrarlo usando de dos a cuatro dígitos. Todos los años de dos dígitos se consideran en el rango1970
hasta2069
, lo que significa que si almacena01
en una columna de tipoYEAR
, MySQL Server lo trata como2001
.
La siguiente demostración ilustra que MySQL Server no tiene
problemas con valores DATE
o
DATETIME
hasta el año 9999, ni tampoco tiene
problemas con valores de tipo TIMESTAMP
hasta
el año 2030:
mysql> DROP TABLE IF EXISTS y2k; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE y2k (date DATE, -> date_time DATETIME, -> time_stamp TIMESTAMP); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO y2k VALUES -> ('1998-12-31','1998-12-31 23:59:59',19981231235959), -> ('1999-01-01','1999-01-01 00:00:00',19990101000000), -> ('1999-09-09','1999-09-09 23:59:59',19990909235959), -> ('2000-01-01','2000-01-01 00:00:00',20000101000000), -> ('2000-02-28','2000-02-28 00:00:00',20000228000000), -> ('2000-02-29','2000-02-29 00:00:00',20000229000000), -> ('2000-03-01','2000-03-01 00:00:00',20000301000000), -> ('2000-12-31','2000-12-31 23:59:59',20001231235959), -> ('2001-01-01','2001-01-01 00:00:00',20010101000000), -> ('2004-12-31','2004-12-31 23:59:59',20041231235959), -> ('2005-01-01','2005-01-01 00:00:00',20050101000000), -> ('2030-01-01','2030-01-01 00:00:00',20300101000000), -> ('2040-01-01','2040-01-01 00:00:00',20400101000000), -> ('9999-12-31','9999-12-31 23:59:59',99991231235959); Query OK, 14 rows affected (0.01 sec) Records: 14 Duplicates: 0 Warnings: 2 mysql> SELECT * FROM y2k; +------------+---------------------+----------------+ | date | date_time | time_stamp | +------------+---------------------+----------------+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2040-01-01 | 2040-01-01 00:00:00 | 00000000000000 | | 9999-12-31 | 9999-12-31 23:59:59 | 00000000000000 | +------------+---------------------+----------------+ 14 rows in set (0.00 sec)
Los dos últimos valores de columna TIMESTAMP
son cero porque los valores de año (2040
,
9999
) excede el máximo de
TIMESTAMP
. El tipo de datos
TIMESTAMP
que se usa para almacenar el tiempo
actual, soporta valores del rango
19700101000000
hasta
20300101000000
en máquinas de 32-bit
(valores con signo). En máquinas de 64-bit,
TIMESTAMP
trata valores hasta
2106
(valores sin signo).
Aunque MySQL Server por sí mismo no tiene problemas con el año
2000, puede tenerlos si interactúa con aplicaciones que sí los
tengan. Por ejemplo, muchas aplicaciones antiguas almacenan o
manipulan años usando valores de dos dígitos (que son
ambíguos) en lugar de cuatro dígitos. Este problema puede
darse por aplicaciones que usan valores tales como
00
o 99
como indicadores
de valores "perdidos". Por desgracia, estos problemas pueden
ser complicados de arreglar, ya que aplicaciones diferentes
pueden haber sido programadas por distintos programadores, cada
uno de los cuales puede usar una serie de distintas convenciones
y funciones de fechas.
Así, aunque MySQL Server no tiene problemas con el año 2000, es la responsabilidad de la aplicación de proporcionar entradas inambíguas. Consulte Sección 11.3.4, “Efecto 2000 (Y2K) y tipos de datos” para las reglas de MySQL Server para tratar fechas ambíguas de dos digitos.