INTRODUCCION

MySQL es un sistema de gestión de base de datos, multihilo y multiusuario con más de seis millones de instalaciones. MySQL AB desarrolla MySQL como software libre en un esquema de licenciamiento dual. Por un lado lo ofrece bajo la GNU GPL, pero, empresas que quieran incorporarlo en productos privativos pueden comprar a la empresa una licencia que les permita ese uso. Está desarrollado en su mayor parte en ANSI C.

Al contrario de proyectos como el Apache, donde el software es desarrollado por una comunidad pública, y el copyright del código está en poder del autor individual, MySQL está poseído y patrocinado por una empresa privada, que posee el copyright de la mayor parte del código. Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Además de la venta de licencias privativas, la compañía ofrece soporte y servicios. Para sus operaciones contratan trabajadores alrededor del mundo que colaboran vía Internet. MySQL AB fue fundado por David Axmark, Allan Larsson, y Michael Widenius.

HISTORIA DE MySQL

MySQL surgió como un intento de conectar el gestor mSQL a las tablas propias de MySQL AB, usando sus propias rutinas a bajo nivel. Tras unas primeras pruebas, vieron que mSQL no era lo bastante flexible para lo que necesitaban, por lo que tuvieron que desarrollar nuevas funciones. Esto resultó en una interfaz SQL a su base de datos, con una interfaz totalmente compatible a mSQL.

Se comenta que no se sabe con certeza de donde proviene su nombre. Por un lado dicen que sus librerías han llevado el prefijo 'my' durante los diez últimos años. Por otro lado, la hija de uno de los desarrolladores se llama My. No saben cuál de estas dos causas (aunque bien podrían tratarse de la misma), han dado lugar al nombre de este conocido gestor de bases de datos. MySQL fue fundada en 1995 por 2 expertos en código abierto, Michel “Monty” Widenius y David Axmark, con la ayuda de Allan Larsson.

El logo de MySQL (Delfín) fue escojido por los fundadores de MySQL, el nombre del delfín “Sakil” fue seleccionado de una lista de sugerencias de usuarios, basados en un concurso.

CARACTERISTICAS

La siguiente lista describe algunas de las características más importantes del software de base de datos MySQL.


Interioridades y portabilidad:

  • Escrito en C y en C++
  • Probado con un amplio rango de compiladores diferentes
  • Funciona en diferentes plataformas.
  • Usa GNU Automake, Autoconf, y Libtool para portabilidad.
  • APIs disponibles para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, y Tcl.
  • 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 interfaz 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.
  • 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.
  • Registros de longitud fija y longitud variable.


Sentencias y funciones:

  • Soporte completo para operadores y funciones en las cláusulas de consultas SELECT y WHERE. Por ejemplo:
    o mysql> SELECT CONCAT(first_name, ' ', last_name)
    o -> FROM citizen
    o -> WHERE income/dependents > 10000 AND age > 30;
  • Soporte completo para las cláusulas SQL GROUP BY y ORDER BY. Soporte de funciones de agrupación (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), y GROUP_CONCAT()).
  • Soporte para LEFT OUTER JOIN y RIGHT 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, y UPDATE 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 comando EXPLAIN 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. Puede mezclar tablas de distintas bases de datos en la misma consulta.


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, o TEXT.

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.
  • 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.

Localización:

  • El servidor puede proporcionar mensajes de error a los clientes en muchos idomas.
  • 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.
  • Todos los programas MySQL pueden invocarse con las opciones --help o -? para obtener asistencia en línea.

PORQUE SELECCIONAR MYSQL.

El servidor de MySQL fue dirigido originalmente para trabajar con bases de datos de tamaño medio (10-100 millones de filas, o cerca de 100mb por tablas) sobre pequeños sistemas de computadora. Hoy en dia el servidor de MySQL maneja base de datos con tamaño que alcanza los terabyte. El codigo del servidor puede ser compilado en una versión reducida para ser usada en dispositivos portatiles.

Algunos de los beneficios que hacen especial a MySQL son los siguientes:

Aplicaciones Web. Las aplicaciones web se caracterizan por hacer muchas consultas y pocas escrituras en base de datos. MySQL es un manejador que puede resolver rápidamente las peticiones hechas, adaptandose a la velocidad que se exige a las aplicaciones web.

Aplicaciones de negocio. Por su estabilidad, rapidez, bajo costo es usada por muchas organizaciones como su sistema manejador de base de datos.

Soporte a codigo abierto. MySQL es un software libre de codigo abierto, esta basado en licencia GPL, lo que permite que cualquiera pueda modificar el codigo fuente y adaptarlo a sus necesidades.

Bajo requerimientos. No requieres recursos excesivos para correr.

Disponibilidad para tablas de gran tamaño. Las tablas en MySQL pueden ser de gran tamaño, muchas veces el tamaño el limitado por el sistema operativo.

Estabilidad. MySQL esta escrito en múltiples capaz, en diferentes módulos, cada uno de los modulos estan en versiones estables de funcionamiento, aunque MySQL esta en continuo desarrollo, nuevas características y funcionalidades son agregadas.

ARQUITECTURA DE HILOS EN MYSQL

MySQL corre sobre un motor de base de datos multi-hilos. Esto significa que el MySQL puede manejar muchas tareas y requerimientos al mismo tiempo, los clientes que se conectan al servidor de base de datos de MySQL no necesitan esperar que otro cliente finalice la consulta o proceso que este ejecutando para que sean atendidos sus peticiones. La rápida repuesta se logra con el uso de programas multi-hilos, los cuales actúan como si muchas instancias del mismo programa estuvieran ejecutándole concurrentemente.

Cuando un usuario se conecta al servidor de base de datos de MySQL, un nuevo proceso llamado hilo maneja las tareas requeridas por esa conexión. MySQL mantiene activo un hilo administrador que es el encargado de recibir y atender las peticiones de otros hilos en un momento determinado. Si un proceso esta requiriendo acceder a una tabla y la esta reservada para uso de otro proceso, el hilo administrador obliga a que el proceso que requiere la conexión espere hasta que el otro proceso se haya completado.

CLIENTES MySQL

El sistema administrador de base de datos de MySQLesta basado sobre una arquitectura cliente-servidor. El servidor es el programa encargado de manipular la base de datos, los programas clientes se comunican con el servidor a traves de sentencias SQL para que se lleve a cabo una actividad sobre una base de datos especifica. El programa cliente es instalado desde donde se desea acceder al servidor de base de datos, en una red pueden haber múltiples instalaciones de cliente pero generalmente hay solo una instalación de un servidor de base de datos.



Existen muchos programas clientes para MySQL, algunos de ellos ofrecen interfaz grafica otros se basan en líneas de comandos, en este caso cubriremos 2 programas clientes que ofrecen interfaz grafica MySQL Administrador, MySQL Query Browser:




  • Programa cliente MySQL Administrador.


MySQL Administrador es el nuevo software de administración de servidores de Bases de Datos de MySQL que ha creado MySQL AB. Se trata de un software multiplataforma, que por el momento se encuentra disponible para Linux y Microsoft Windows y que cuenta con un entorno gráfico de usuario muy intuitivo. Este nuevo producto suple las carencias que tiene MySQL Control Center en el área de Administración de servidores. MySQL Control Center en estos momentos está deprecado, ha quedado obsoleto y no sigue desarrollándose. Se ha sustituido por el conjunto de programas MySQL Administrator y MySQL Query Browser. MySQL Administrador es una herramienta que permite realizar tareas administrativas sobre servidores de MySQL incluyendo:



  • la configuración de las opciones de inicio de los servidores

  • inicio y detención de servidores
  • monitorización de conexiones al servidor
  • administración de usuarios
  • monitorización del estado del servidor, incluyendo estadísticas de uso
  • visualización de los logs de servidor
  • gestión de copias de seguridad y recuperaciones
  • visualización de catálogos de datos.






  • Programa cliente MySQL Query Browser.


MySQL Query Browser es una utilidad para trabajar con la base de datos MySQL. Es un editor de sentencias SQL visual, que además incorpora herramientas para optimizar las consultas. Dispone también de un editor de tablas y registros, que permite crear nuevas tablas o cambiar las existentes y la posibilidad de cambiar los registros, es decir, los datos almacenados en las tablas.

Dispone de los siguientes componentes:


-Editor de sentencias SQL, que permite crear sentencias, visual o manualmente, y moverse por el historial de sentencias que se han ido generando.


- Visor de resultados, para que se puedan examinar los resultados devueltos por las consultas y comparar los resultados obtenidos entre varias sentencias SQL. Se pueden tener activas varias consultas a la vez, seleccionando la que queremos visualizar con una pestaña. Desde el visor de resultados podemos editar también los campos, pero debe estar activa la opción "Edit".


- Navegador de objetos, en la parte lateral derecha, para manejar las bases de datos, favoritos o historial. Se puede visualizar aquí un esquema de las distintas bases de datos, con sus distintas tablas y registros, que se utilizarán luego para generar las sentencias visualmente.


- Visor de información, en la parte de abajo a la derecha, que tiene una interesante referencia acerca de la base de datos MySQL, con acceso a la sintaxis, librería de funciones, etc.



INTRODUCCION A SQL

Las aplicaciones en red son cada día más numerosas y versátiles. En muchos casos, el esquema básico de operación es una serie de scripts que rigen el comportamiento de una base de datos.
Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de comunicar entre unos y otras sería realmente complicada a gestionar de no ser por la existencia de estándares que nos permiten el realizar las operaciones básicas de una forma universal.
Es de eso de lo que trata el Structured Query Language que no es mas que un lenguaje estándar de comunicación con bases de datos. Hablamos por tanto de un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje (ASP o PHP) en combinación con cualquier tipo de base de datos (MS Access, SQL Server, MySQL...).
El hecho de que sea estándar no quiere decir que sea idéntico para cada base de datos. En efecto, determinadas bases de datos implementan funciones específicas que no tienen necesariamente que funcionar en otras.
Aparte de esta universalidad, el SQL posee otras dos características muy apreciadas. Por una parte, presenta una potencia y versatilidad notables que contrasta, por otra, con su accesibilidad de aprendizaje.

EJECUCION DE SENTENCIA SQL CON EL PROGRAMA MySQL.

Para realizar una consulta a una base de datos MySQL desde PHP, deberemos usar dos lenguajes de programacion distintos, el lenguaje PHP, para ejecutar la página en el servidor y el lenguaje de SQL para entendernos con la base de datos.Una vez conectados a la base de datos, crearemos la variable $sql, para almacenar la sentencia que será enviada al servidor MySQL usando la función mysql_query().La sintaxis para realizar una consulta en MySQl es la siguiente:

SELECT campos FROM tabla WHERE condicion

Donde campos son los campos que nos devolverá separados por comas o * para devolverlos todos, tabla la tabla en la que trabajaremos y condicion es una condición que deberan cumplir las entradas devueltas.Esta condición sera de la forma:

nombre = "Jose"

Donde tenemos que nombre es un campo que deberá ser igual (=) a "Jose", además del igual (=), tenemos el distinto (!=), el mayor (>), el menor (<), el mayor o igual (>=), el menor o igual (<=) y el parece (like).



Además, podemos añadir las palaras 'order by' y un campo para ordenar por ese campo y 'asc' o 'desc' para que sea ascendente o descendente.Tambien la palabra 'limit' seguida del resultado a empezar, una coma (,) y en número de resultados a mostrar para paginarlos.Una vez hecha la instrucción formatearemos y escribiremos los resultados:

De esta manera sacaremos las 20 primeras entradas con el nombre empezando por J ordenadas por nombre.

TIPO DE DATO EN MySQL

Después de la fase de diseño de una base de datos, y una vez se ha realizado el paso a tablas del mismo, en necesario crear las tablas correspondientes dentro de la base de datos. Para cada campo de cada una de las tablas, es necesario determinar el tipo de datos que contiene, para de esa forma ajustar el diseño de la base de datos, y conseguir un almacenamiento óptimo con la menor utilización de espacio. El presente artículo describe cada uno de los tipos de datos que puede tener un campo en Mysql, para la versión 4.xx.xx. Los tipos de datos que puede haber en un campo, se pueden agrupar en tres grandes grupos:

  • Tipos numéricos
  • Tipos de Fecha
  • Tipos de Cadena
  • Tipos numéricos:

Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos, los que están en coma flotante (con decimales) y los que no.

TinyInt: es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255.

Bit ó Bool: un número entero que puede ser 0 ó 1 SmallInt: número entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.

MediumInt: número entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215.

Integer, Int: número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295

BigInt: número entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615.

Float: número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.

xReal, Double: número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

Decimal, Dec, Numeric: Número en coma flotante desempaquetado. El número se almacena como una cadena

  • Tipos fecha:

A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31.

Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia

DateTime: Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos

TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:

Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'

Year: almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.

  • Tipos de cadena:

Char(n):almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres.

VarChar(n): almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres. Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los tipo BLOB (Binary large Object) La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las Mayúsculas y las minúsculas, el tipo BLOB se ordena teniéndolas en cuenta. Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.

TinyText y TinyBlob: Columna con una longitud máxima de 255 caracteres. Blob y Text: un texto con un máximo de 65535 caracteres. MediumBlob y MediumText: un texto con un máximo de 16.777.215 caracteres.

LongBlob y LongText: un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb. Enum: campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos Set: un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.