NOMBRE: ISRAEL AVEIGA GUERRA CURSO: SEGUNDO ADMINISTRACIÓN TEMA DE LA CONSULTA: MY SQL
1._ ¿Cómo instalar My SQL? Antes de instalar My SQL, se debería hacer lo siguiente: 1. Determinarse si la plataforma donde se desea hacer la instalación está soportada. 2. Elegirse la distribución que se instalará. 3. Descargar la distribución que se desea instalar y verificar su integridad. Esta sección contiene la información necesaria para llevar adelante estos pasos. Una vez ejecutados, se puede seguir las instrucciones de secciones posteriores del capítulo, para instalar la distribución elegida. Desde la versión 3.21, My SQL AB proporciona una versión Windows nativa de My SQL, que representa un apreciable porcentaje de las descargas diarias de My SQL. Esta sección describe el proceso para instalar My SQL en Windows. El instalador para la versión Windows de My SQL 5.0, en conjunto con un asistente de configuración dotado de interfaz gráfica, instala automáticamente My SQL, crea un fichero de opciones, inicia el servidor, y otorga seguridad a las cuentas de usuario por defecto. Si se está actualizando una instalación existente de My SQL anterior a la versión 4.1.5, deben observarse los siguientes pasos: 1. Obtener e instalar la distribución. 2. Establecer un fichero de opciones, de ser necesario.
3. Seleccionar el servidor que se desea emplear. 4. Iniciar el servidor. 5. Colocar contraseñas a las cuentas My SQL creadas inicialmente. Este proceso también debe realizarse con instalaciones nuevas de My SQL, cuando el paquete de instalación no incluya un instalador. My SQL 5.0 para Windows está disponible en tres formatos de distribución:
La distribución binaria contiene un programa de instalación que instala cada elemento necesario para iniciar el servidor inmediatamente.
La distribución de código fuente contiene todo el código y ficheros de soporte para generar ejecutables utilizando el compilador de VC++ 6.0 Siempre que sea posible debería emplearse la distribución binaria. Es más simple que las otras y no se necesita ninguna herramienta adicional para poner en funcionamiento el servidor My SQL.
2._¿CÓMO CONFIGURAR LA INSTALACIÓN DE MY SQL? Cuando se inicia el asistente de configuración My SQL para una instalación nueva o se escoge la opción Re-configure Instance para una configuración existente, se avanza hacia el cuadro de diálogo Configuration Type. Hay disponibles dos tipos de configuración: Configuración detallada (Detailed Configuration) y Configuración estándar (Standard Configuration) . La Configuración estándar está orientada a usuarios nuevos que deseen comenzar rápidamente con My SQL sin tener que tomar varias decisiones relativas a la configuración del servidor. La Configuración detallada está dirigida a usuarios avanzados que deseen un control más preciso sobre la configuración del servidor. Si se trata de un usuario nuevo de My SQL y necesita un servidor configurado para un ordenador de desarrollo con un único usuario, la Configuración estándar debería cubrir sus necesidades. Al elegir la Configuración estándar el asistente de configuración My SQL establece todas las opciones de configuración automáticamente, a excepción de Opciones de servicio (Service options) y Opciones de seguridad (Security options). La Configuración estándar establece opciones que pueden ser incompatibles con sistemas donde existen instalaciones de My SQL previas. Si se posee una instalación de My SQL anterior además de la que se está configurando, se recomienda optar por la Configuración detallada (Detailed configuration). Para completar la Configuración estándar , hay que remitirse a las secciones sobre Opciones de servicio (Service options) y Opciones de seguridad (Security options).
3._¿CÓMO CREAR UNA BASE DE DATOS EN MY SQL?
Creando una base de datos El nombre de nuestra base de datos será Videoteca. Crearemos nuestra base de datos dando al enlace que pone “Bases de datos”, que esta abajo, en nuestra pagina de http://localhost/phpmyadmin/ como podemos ver en esta imagen:
Ahora se nos abrirá una nueva ventana, donde abajo del todo veremos “Crear una base de datos”, en ella escribiremos el nombre de nuestra nueva base de datos, en este caso: Videoteca.
PD: en lo nombres no podemos escribir caracteres como, comas, acentos, ñ, etc. Si todo ha ido bien, ahora nos pondrá que ya esta creada.
En el apartado anterior hemos aprendido a crear una base de datos My SQL, y he creado una, a la cual la he llamado “Videoteca”. Ahora el siguiente paso seria crear las tablas y los campos que nos hagan falta para posteriormente meter los datos. Existen varias formas y programas diferentes para crear una tabla en una base de datos My SQL, pero lo voy a hacer desde phpMyAdmin, el motivo de hacerlo desde phpMyAdmin y no de otra forma es porque comúnmente, en todos los servidores ya sean caseros o de un hosting privados siempre suele tener un phpMyAdmin a mano. En primer lugar vamos a nuestro phpMyAdmin y seleccionamos la base de datos que hemos creado anteriormente (Videoteca) como vemos en la siguiente imagen:
Ahora se cargara la base de datos y nos saldrá un mensaje que pone “no se han encontrado tablas en la base de datos” y más abajo veremos un pequeño formulario para crear nuestra primera tabla. En nombre pondremos película y en número de campos pondremos 3.
Ahora damos a continuar y se nos cargara la pagina para crear los campos, en este caso serán los 3 que hemos puesto antes. Veremos que tendremos que rellenar varios datos, pero no tenemos que preocuparnos, ya que explicaremos uno a uno lo que significa.
En Campo, pondremos el nombre del campo.
En Tipo, debemos poner el tipo de datos que se van a incluir en el campo, por ejemplo pondríamos:
o
VARCHAR si vamos a incluir un texto inferior a 255 caracteres ejemplo (nombres, DNI, direcciones).
o
TEXT si vamos a incluir un texto más largo de 255 caracteres ejemplo (noticias).
o o
INT si deseamos escribir exclusivamente números. DATE para poner fechas, o DATETIME, si queremos poner hora y fecha. En Longitud, deberemos de poner el número de caracteres máximo que puede contener dicho campo, esto no hace falta para todos los tipos de datos, ya que por ejemplo para los de
tipo DATE, o TEXT no hace falta, pero para los INT y VARCHAR es imprescindible. En Nulo, podemos elegir Null o Not Null dependiendo si queremos que el campo pueda estar
vacío (sin datos) o no. En predeterminado, podemos poner lo que queramos que se ponga en el campo en el caso
de que no se rellenen los datos o que se rellene de forma incorrecta. En extra, vemos que podemos seleccionar Auto_Increment, esto nos sirve para llevar un orden de los datos que tenemos, por ejemplo, creamos un campo llamado id, de tipo INT y le ponemos auto_increment, de esta forma cada vez que se cree un nuevo dato en este campo se le sumara 1 a la id anterior, de forma que podremos llevar un pequeño orden. Ahora que ya mas o menos he explicado para que es cada cosa voy a deciros que debemos de poner en cada uno de los 3 campos: Campo 1 Nombre: id_pelicula Tipo: INT Nulo: Not Null Extra: Auto_increment Y marcamos la llave de Primaria Campo 2 Nombre: pelicula Tipo: VARCHAR Longitud: 30 Nulo: Not Null Campo 3 Nombre: Director Tipo: VARCHAR Longitud: 30 Nulo: Not Null
Ahora damos a Grabar y ya tendemos nuestra base de datos "Videoteca" con la tabla "películas" con la que podremos empezar a trabajar.
4._¿Cómo crear una tabla en MY SQL? El comando 'CREATE TABLE table' sirve para crear una tabla específica, posteriormente debemos especificar nuestros campos, normalmente el primer campo de una tabla siempre será el identificador, en este caso ID_Contact que es de tipo mediumint(8), no tendrá valores negativos (unsigned), por default será nulo (default null) y será auto incrementable (autoincrement), los demás campos (Name, Email, y Phone) serán de tipo varchar (cadena) de 50 caracteres y no serán nulos (not null), y por último específicamos que nuestro campo primario será ID_Contact (PRIMARY KEY).
5._CÓMO EXPORTAR UNA BASE DE DATOS EN MY SQL? Para exportar bases de datos en My SQL se ejecuta la siguiente sintaxis; mysql -u nombre_usuario_bd -p nombre_base_datos > ruta_hacia_donde_desea_guardar_la_bd/nombre_bd.sql Ejemplo; mysql -u lsilva -p inventario > /home/lsilva/bdinventario.sql
6._CÓMO IMPORTAR UNA BASE DE DATOS EN MY SQL? Para importar bases de datos en My SQL se ejecuta la siguiente sintaxis; mysql -u nombre_usuario_bd -p nombre_base_datos < ruta_hacia_donde_desea_guardar_la_bd/nombre_bd.sql Ejemplo; mysql -u lsilva -p inventario < /home/lsilva/bdinventario.sql
El software My SQL® proporciona un servidor de base de datos SQL (Structured Query Language) muy rápido, multi-threaded, multiusuario y robusto. El servidor My SQL está diseñado para entornos de producción críticos, con alta carga de trabajo así como para integrarse en software para ser distribuido. My SQL es una marca registrada de My SQL AB. El software My SQL tiene una doble licencia. Los usuarios pueden elegir entre usar el software My SQL como un producto Open Source bajo los términos de la licencia GNU General Public License (http://www.fsf.org/licenses/) o pueden adquirir una licencia comercial estándar de My SQL AB. Consulte http://www.mysql.com/company/legal/licensing/ para más información acerca de nuestras políticas de licencia.
CUESTIONES GENERALES SOBRE LA INSTALACIÓN Antes de instalar My SQL, se debería hacer lo siguiente: 1. Determinarse si la plataforma donde se desea hacer la instalación está soportada. 2. Elegirse la distribución que se instalará. 3. Descargar la distribución que se desea instalar y verificar su integridad. Esta sección contiene la información necesaria para llevar adelante estos pasos. Una vez ejecutados, se puede seguir las instrucciones de secciones posteriores del capítulo, para instalar la distribución elegida. Sistemas operativos que My SQL soporta: En esta sección aparecen listados los sistemas operativos en los que es posible instalar My SQL. Se ha utilizado GNU Autoconfig, de modo que es posible portar My SQL a todos los sistemas modernos que tengan un compilador de C++ y una implementación funcional de subprocesos (threads) POSIX. (El soporte de subprocesos es necesario para el servidor. Para compilar únicamente el código del cliente, no se requiere más que el compilador de C++). Nosotros mismos desarrollamos y utilizamos el software ante todo en Linux (SuSE y Red Hat), FreeBSD, y Sun Solaris (Versiones 8 y 9), My SQL ha sido compilado correctamente en las siguientes combinaciones de sistemas operativos y paquetes de subprocesos. Nótese que, para varios sistemas operativos, el soporte nativo de subprocesos funciona solamente en las versiones más recientes.
ESCOGER LA DISTRIBUCIÓN MYSQL A INSTALAR Como parte de los preparativos para instalar My SQL, debe decidirse qué versión se utilizará. El desarrollo de My SQL se divide en entregas (releases) sucesivas, y el usuario puede decidir cuál es
la que mejor satisface sus necesidades. Después de haber elegido la versión a instalar, se debe optar por un formato de distribución. Las entregas están disponibles en formato binario o código fuente. ESCOGER LA VERSIÓN DE MY SQL A INSTALAR La primera decisión a tomar es si se desea emplear una entrega "en producción" (estable) o una entrega de desarrollo. En el proceso de desarrollo de My SQL coexisten múltiples entregas, cada una con un diferente estado de madurez: • My SQL 5.1 es la próxima serie de entregas de desarrollo, y en ella se implementarán las nuevas características. En breve se pondrán a disposición de los usuarios interesados en hacer pruebas integrales las entregas Alfa. • My SQL 5.0 es la serie de entregas estables (para producción). Solamente se liberan nuevas entregas para corrección de errores, no se añaden nuevas características que pudieran afectar a la estabilidad. • My SQL 4.1 es la anterior serie de entregas estables (para producción). Se liberarán nuevas entregas para solucionar problemas de seguridad o errores críticos. En esta serie no se agregarán nuevas características de importancia. • My SQL 4.0 y 3.23 son las antiguas series de entregas estables (para producción). Estas versiones están discontinuadas, de modo que solamente se liberarán nuevas entregas para solucionar errores de seguridad extremadamente críticos.
ESCOGER UN FORMATO DE DISTRIBUCIÓN Después de haber decidido qué versión de My SQL instalar, se debe elegir entre una distribución binaria o una de código fuente. Probablemente la elección más frecuente sea la distribución binaria, si existe una para la plataforma en cuestión. Hay distribuciones binarias disponibles en formato nativo para muchas plataformas, como los ficheros RPM para Linux, paquetes de instalación DMG para Mac OS X, y ficheros comprimidos Zip y rar. Algunas razones a favor de la elección de una distribución binaria: • Es más fácil de instalar que una distribución de código fuente. • Para satisfacer distintos requerimientos de usuarios, se facilita dos versiones binarias diferentes: una que contiene motores de almacenamiento no transaccionales (más pequeña y rápida) y una configurada con las más importantes opciones, como por ejemplo tablas transaccionales. Ambas versiones se compilan a partir de la misma distribución de código fuente. Todos los clientes My SQL nativos pueden conectarse a ambas versiones indistintamente. La versión binaria extendida de My SQL está señalada con el sufijo -max y está configurada con las mismas opciones que mysqld-max, Si se desea utilizar My SQL-Max en formato RPM, primero debe instalarse el RPM de My SQL-server estándar.
INSTALAR MYSQL EN WINDOWS Desde la versión 3.21, My SQL AB proporciona una versión Windows nativa de My SQL, que representa un apreciable porcentaje de las descargas diarias de My SQL. Esta sección describe el proceso para instalar My SQL en Windows. El instalador para la versión Windows de My SQL 5.0, en conjunto con un asistente de configuración dotado de interfaz gráfica, instala automáticamente My SQL, crea un fichero de opciones, inicia el servidor, y otorga seguridad a las cuentas de usuario por defecto. Si se está actualizando una instalación existente de My SQL anterior a la versión 4.1.5, deben observarse los siguientes pasos: 1. Obtener e instalar la distribución. 2. Establecer un fichero de opciones, de ser necesario. 3. Seleccionar el servidor que se desea emplear. 4. Iniciar el servidor. 5. Colocar contraseñas a las cuentas My SQL creadas inicialmente. Este proceso también debe realizarse con instalaciones nuevas de My SQL, cuando el paquete de instalación no incluya un instalador. My SQL 5.0 para Windows está disponible en tres formatos de distribución: • La distribución binaria contiene un programa de instalación que instala cada elemento necesario para iniciar el servidor inmediatamente. • La distribución de código fuente contiene todo el código y ficheros de soporte para generar ejecutables utilizando el compilador de VC++ 6.0 Siempre que sea posible debería emplearse la distribución binaria. Es más simple que las otras y no se necesita ninguna herramienta adicional para poner en funcionamiento el servidor My SQL. Esta sección explica cómo instalar My SQL para Windows utilizando una distribución binaria.
REQUISITOS DE WINDOWS Para ejecutar My SQL para Windows, se necesita lo siguiente:
• Un sistema operativo Windows de 32 bits, tal como 9x, Me, NT, 2000, XP, o Windows Server 2003. Se recomienda fuertemente el uso de un sistema operativo Windows basado en NT (NT, 2000, XP, 2003) puesto que éstos permiten ejecutar el servidor My SQL como un servicio. • Soporte para protocolo TCP/IP. • Una copia de la distribución binara de My SQL para Windows, que se puede descargar de http://dev.mysql.com/downloads/. Nota: Si se descarga la distribución a través de FTP, se recomienda el uso de un cliente FTP adecuado que posea la característica de reanudación (resume) para evitar la corrupción de ficheros durante el proceso de descarga. • Una herramienta capaz de leer ficheros .zip, para descomprimir el fichero de distribución. • Suficiente espacio en disco rígido para descomprimir, instalar, y crear las bases de datos de acuerdo a sus requisitos. Generalmente se recomienda un mínimo de 200 megabytes. También podrían necesitarse los siguientes ítems opcionales: • Si se planea conectarse al servidor My SQL a través de ODBC, se deberá contar con un driver Connector/ODBC. • Si se necesitan tablas con un tamaño superior a 4GB, debe instalarse My SQL en un sistema de ficheros NTFS o posterior. Al crear las tablas no debe olvidarse el uso de MAX_ROWS y AVG_ROW_LENGTH.
USAR EL ASISTENTE DE INSTALACIÓN DE MYSQL El asistente de instalación es un instalador para el servidor My SQL que emplea las últimas tecnologías de instalador para Microsoft Windows. El Asistente de Instalación de My SQL, en combinación con el asistente de configuración, le permite a un usuario instalar y configurar un servidor My SQL que esté listo para el uso inmediatamente a continuación de la instalación. El asistente de instalación My SQL es el instalador estándar para todas las distribuciones del Servidor My SQL 5.0. Los usuarios de versiones anteriores de My SQL deberán detener y desinstalar sus servidores existentes antes de realizar una instalación con el asistente de instalación de My SQL. Microsoft incluyó una versión mejorada de su Microsoft Windows Installer (Instalador de Microsoft Windows, MSI) en las versiones recientes de Windows. MSI se ha convertido en el estándar de facto para la instalación de aplicaciones bajo Windows 2000, Windows XP, y Windows Server 2003. El asistente de instalación My SQL emplea esta tecnología para proporcionar un proceso de instalación más flexible y amigable.
SOBRE ESTE MANUAL._ Este es el manual de referencia para el servidor de base de datos My SQL, versión 5.0, hasta la versión 5.0.9-beta. No está destinado para usarse con versiones más antiguas del software My SQL debido a las numerosas diferencias funcionales y de otro tipo entre My SQL 5.0 y versiones previas. Si usa una versión anterior del software My SQL, por favor consulte Manual de referencia de My SQL 4.1, que cubre las series 3.22, 3.23, 4.0, y 4.1 del software My SQL. Las diferencias entre versiones menores de My SQL 5.0 están destacadas en este texto con referencias a los números de versiones (5.0.x). Este manual es una referencia, por lo que no proporciona instrucciones sobre conceptos generales de SQL o de bases de datos relacionales. Tampoco enseña sobre cómo usar su sistema operativo o su intérprete de línea de comandos. El software de base de datos My SQL está bajo desarrollo constante, y el Manual de Referencia se actualiza constantemente. La versión más reciente de este manual está disponible en línea permitiendo búsquedas en http://dev.mysql.com/doc/. Hay otros formatos disponibles, incluyendo HTML, PDF, y Windows CHM. El formato básico para toda la documentación My SQL consiste en un conjunto de ficheros DocBook XML. HTML y otros formatos se producen automáticamente a partir de los mismos, usando entre otras herramientas DocBook XSL stylesheets.
PANORÁMICA DEL SISTEMA DE GESTIÓN DE BASE DE DATOS MY SQL My SQL, el sistema de gestión de bases de datos SQL Open Source más popular, lo desarrolla, distribuye y soporta My SQL AB. My SQL AB es una compañía comercial, fundada por los desarrolladores de My SQL. 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 My SQL (http://www.mysql.com/) proporciona la última información sobre My SQL y My SQL AB. • My SQL es un sistema de gestión de bases de datos Una base de datos es una colección estructurada 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 My SQL 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. • My SQL 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 "My SQL" 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ándar ANSI/ISO SQL. El estándar SQL ha evolucionado desde 1986 y existen varias versiones. En este manual,
"SQL-92" se refiere al estándar del 1992, "SQL:1999" se refiere a la versión del 1999, y "SQL:2003" se refiere a la versión actual del estándar. Usamos la frase "el estándar SQL" para referirnos a la versión actual de SQL. • My SQL software es Open Source. Open Source significa que es posible para cualquiera usar y modificar el software. Cualquiera puede bajar el software My SQL desde internet y usarlo sin pagar nada. Si lo desea, puede estudiar el código fuente y cambiarlo para adaptarlo a sus necesidades. El software My SQL 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 My SQL en una aplicación comercial, puede comprarnos una licencia comercial. Consulte la Introducción a las Licencias My SQL para más información (http://www.mysql.com/company/legal/licensing/). • El servidor de base de datos My SQL es muy rápido, fiable y fácil de usar. Si esto es lo que está buscando, debería probarlo. El servidor My SQL también tiene una serie de características prácticas desarrolladas en cooperación con los usuarios. Puede encontrar comparaciones de rendimiento de My SLQL 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 My SQL”. My SQL 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. My SQL Server ofrece hoy en día una gran cantidad de funciones. Su conectividad, velocidad, y seguridad hacen de My SQL Server altamente apropiado para acceder bases de datos en Internet. • My SQL Server trabaja en entornos cliente/servidor o incrustados El software de bases de datos My SQL es un sistema cliente/servidor que consiste en un servidor SQL multi-threaded que trabaja con diferentes bakends, programas y bibliotecas cliente, herramientas administrativas y un amplio abanico de interfaces de programación para aplicaciones (APIs). También proporcionamos el My SQL 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 My SQL Es muy posible que su aplicación o lenguaje favorito soporte el servidor de base de datos My SQL. La forma oficial de pronunciar "My SQL" es "My Ess Que Ell" (no "my sicuel"), pero no importa si lo pronuncia como "my sicuel" o de alguna otra forma.
LAS PRINCIPALES CARACTERÍSTICAS DE MY SQL
La siguiente lista describe algunas de las características más importantes del software de base de datos My SQL. 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 My SQL 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 My SQL. • Uso completo de multi-threaded mediante threads del kernel. Pueden usarse fácilmente múltiple 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 My SQL 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 Open GIS. 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 y WHERE. 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 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ándares de sintaxis SQL y ODBC. • Soporte para alias en tablas y columnas como lo requiere el estándar 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 My SQL 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. 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 My SQL 3.22). • Seguridad • Un sistema de privilegios y contraseñas que es muy flexible y seguro, y que permite verificación basada en el host. Las contraseñas son seguras porque todo el tráfico de contraseñas está cifrado cuando se conecta con un servidor. • Escalabilidad y límites
• Soporte a grandes bases de datos. Usamos My SQL Server con bases de datos que contienen 50 millones de registros. También conocemos a usuarios que usan My SQL Server con 60.000 tablas y cerca de 5.000.000.000.000 de registros. • Se permiten hasta 64 índices por tabla (32 antes de My SQL 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 My SQL 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 My SQL 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 My SQL 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 (My ODBC) proporciona a My SQL soporte para programas clientes que usen conexiones ODBC (Open Data base Connectivity). Por ejemplo, puede usar MS Access para conectar al servidor My SQL. Los clientes pueden ejecutarse en Windows o Unix. El código fuente de My ODBC está disponible. Todas las funciones para ODBC 2.5 están soportadas, así como muchas otras. Consulte Sección 25.1, “My SQL Connector/ODBC”. • La interfaz para el conector J My SQL 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.4, “My SQL Connector/J”. • Localización • El servidor puede proporcionar mensajes de error a los clientes en muchos idiomas. Consulte Sección 5.9.2, “Escoger el idioma de los mensajes de error”. • Soporte completo para distintos conjuntos de caracteres, incluyendo latin1 (ISO-8859-1), german, big5, ujis, y más. Por ejemplo, los caracteres 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 caracteres elegido. Todas las comparaciones para columnas normales de cadenas de caracteres son case-insensitive. • La ordenación se realiza acorde al conjunto de caracteres elegido (usando colación Sueca por defecto). Es posible cambiarla cuando arranca el servidor My SQL. Para ver un ejemplo de ordenación muy avanzada, consulte el código Checo de ordenación. My SQL
Server soporta diferentes conjuntos de caracteres que deben ser especificados en tiempo de compilación y de ejecución. • My SQL 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. My SQL 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 My SQL pueden invocarse con las opciones --help o -? para obtener asistencia en línea.
ESTABILIDAD DE MY SQL Esta sección trata las preguntas "¿Qué estabilidad tiene My SQL Server?" y, "¿Puedo fiarme de My SQL 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 principios de los años 80. En TcX, la predecesora de My SQL AB, el código My SQL ha funcionado en proyectos desde mediados de 1996 sin ningún problema. Cuando el software de base de datos My SQL fue distribuido 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 My SQL 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 My SQL 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 My SQL”. El diseño de My SQL Server es multicapa, 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 My SQL 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 transaccional BDB en My SQL Server. • Búsquedas Full-text (Estable) Búsquedas Full-text es ámpliamente usada. • My ODBC 3.51 (Estable) My ODBC 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.
DIMENSIONES MÁXIMAS DE LAS TABLAS MY SQL En My SQL 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 My SQL usualmente los determinan los límites de tamaño de ficheros del sistema operativo, y no por límites internos de My SQL. 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 My SQL. Usuarios de Windows, por favor tengan en cuenta que: FAT and VFAT (FAT32) no se consideran apropiados para sistemas de producción con My SQL. Use NTFS para ello. Por defecto, My SQL 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 My SQL”. • My SQL incluye la biblioteca MERGE que permite tratar una colección de tablas MyISAM con una estructura idéntica en una tabla MERGE. Consulte Sección 14.2, “El motor de almacenamiento MERGE”.
QUÉ HAY DE NUEVO EN MY SQL 5.0 Las siguientes características se implementan en My SQL 5.0. • Tipo de datos BIT: Consulte Sección 11.2, “Tipos numéricos”. • Cursores: Soporte elemental. Consulte Sección 19.2.11, “Cursores”. • Diccionario de datos (Information Schema): Consulte Capítulo 22, La base de datos de información INFORMATION_SCHEMA. • Administrador de instancias: Puede usarse para iniciar y parar el My SQL Server, incluso desde una máquina remota. Consulte Sección 5.2, “El gestor de instancias de My SQL”.
• Matemáticas de precisión: Consulte Capítulo 23, Matemáticas de precisión. • Procedimientos almacenados: Consulte Capítulo 19, Procedimientos almacenados y funciones. • Modo estricto y tratamiento de errores estándar: Consulte Sección 5.3.2, “El modo SQL del servidor” y Capítulo 26, Manejo de errores en My SQL. • Disparadores: Consulte Capítulo 20, Disparadores (triggers). • Tipo de datos VARCHAR: Soporte nativo VARCHAR. La longitud máxima de VARCHAR es 65,532 bytes ahora, y no se cortan espacios en blanco consecutivos. Consulte Sección 11.4.1, “Los tipos CHAR y VARCHAR”.
EJECUTAR MY SQL EN MODO ANSI Puede decirle a mysqld que use el modo ANSI con la opción --ansi al arrancar. Ejecutar el servidor en modo ANSI es lo mismo que inicializarlo con las siguientes opciones (especifique el valor de --sql_mode en una única línea): --transaction-isolation=SERIALIZABLE --sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES, IGNORE_SPACE En My SQL 4.1, puede conseguir el mismo efecto con los siguientes 2 comandos (especifique el valor de sql_mode en una única línea): SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET GLOBAL sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES, IGNORE_SPACE'; En My SQL 4.1.1, la opción sql_mode puede inicializarse con el siguiente comando: SET GLOBAL sql_mode='ansi'; En ese caso, el valor de la variable sql_mode se especifica para todas las opciones que son relevantes en el modo ANSI. Puede comprobar el resultado de la siguiente manera: mysql> SET GLOBAL sql_mode='ansi'; mysql> SELECT @@global.sql_mode; -> 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES, IGNORE_SPACE, ANSI';
Extensiones My SQL al estándar SQL
My SQL 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 My SQL, pero siendo portable, mediante comentarios de la forma /*! ... */. En ese caso, My SQL parsea y ejecuta el código dentro de los comentarios como si fuera cualquier otro comando de My SQL, 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 My SQL 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, My SQL Server usa la palabra clave TEMPORARY. La siguiente lista describe las extensiones My SQL, organizadas por categorías. • Organización de los datos en disco My SQL Server mapea cada base de datos a un directorio bajo el directorio de datos de My SQL, y las tablas dentro de cada directorio como ficheros. Esto tiene algunas implicaciones: • 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 funcionalidad, pero lo llaman User space. My SQL 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. • My SQL Server entiende los operadores || y && para OR lógica y AND, como en el lenguaje de programación C. En My SQL Server, || y OR son sinónimos, como lo son && y AND. Debido a esta sintaxis, My SQL 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 My SQL 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 Postgre SQL.
• 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. • 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 My SQL 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().
DIFERENCIAS EN MY SQL DEL ESTÁNDAR SQL Intentamos que My SQL Server siga los estándares ANSI SQL y el estándar ODBC SQL, pero My SQL Server ejecuta operaciones de forma distinta en algunos casos: • Para columnas VARCHAR, los espacios finales se eliminan cuando el valor se guarda. (Arreglado en My SQL 5.0.3). • En algunos casos, las columnas de tipo CHAR se convierten en columnas VARCHAR cuando define una tabla o altera su estructura. (Arreglado en My SQL 5.0.3). • Los privilegios para una tabla no se eliminan automáticamente cuando se borra una tabla. Debe usar explícitamente un comando REVOKE para quitar los privilegios de una tabla. • La función CAST() no soporta conversión a REAL o BIGINT. • SQL estándar necesita que las cláusulas HAVING en un comando SELECT puedan referirse a columnas en la cláusula GROUP BY. Esto no se permite antes de la versión My SQL 5.0.2. SUBCONSULTAS
My SQL 4.1 soporta sub-consultas y tablas derivadas. Una "sub-consulta" es un comando SELECT anidado en otro comando. Una tabla "derivada" (una vista sin nombre) es una subconsulta en la cláusula FROM de otra consulta. Consulte Sección 13.2.8, “Sintaxis de subconsultas”. Para versiones My SQL anteriores a la 4.1, la mayoría de subconsultas pueden reescribirse usando joins u otros métodos. Consulte Sección 13.2.8.11, “Reescribir subconsultas como joins en versiones de My SQL anteriores” para ejemplos que muestren cómo hacerlo. SELECT INTO TABLE My SQL Server no soporta la sintaxis de extensiones Sybase SQL: SELECT ... INTO TABLE. En su lugar, My SQL Server soporta la sintaxis estándar SQL INSERT INTO ... SELECT ..., que básicamente es lo mismo. Consulte Sección 13.2.4.1, “Sintaxis de INSERT ... SELECT”. INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100; Alternativamente, puede usar SELECT INTO OUTFILE ... o CREATE TABLE ... SELECT. Para al versión 5.0, My SQL soporta SELECT ... INTO con variables de usuario. La misma sintaxis puede usarse dentro de procedimientos almacenados usando cursores y variables locales. TRANSACCIONES Y OPERACIONES ATÓMICAS My SQL Server (versiones 3.23-max y todas las versiones 4.0 y posteriores) soportan transacciones con los motores transaccionales InnoDB y BDB . InnoDB proporciona completa compatibilidad ACID. Los otros motores no transaccionales en My SQL Server (como MyISAM) siguen un paradigma diferente para integridad de datos llamado "operaciones atómicas". En términos transaccionales, tablas MyISAM operan en modo AUTOCOMMIT=1. Operaciones atómicas a menudo ofrecen integridad comparable con mejor rendimiento. My SQL Server soporta ambos paradigmas, puede decidir si su aplicación necesita la velocidad de operaciones atómicas o el uso de características transaccionales. Esta elección puede hacerse para cada tabla. Como se ha dicho, el compromiso entre tipos de tablas transaccionales y no transaccionales reside principalmente en el rendimiento. Tablas transaccionales tienen requerimientos significativamente mayores para memoria y espacio de disco, y mayor carga de CPU. Por otra parte, tipos de tablas transaccionales como InnoDB también ofrece muchas características significativas. El diseño modular de My SQL Server permite el uso concurrente de distintos motores de almacenamiento para cumplir distintos requerimientos y mostrarse óptimo en todas las situaciones. En las situaciones en las que la integridad es de máxima importancia, My SQL Server ofrece integridad a nivel de transacción incluso para tablas no transaccionales. Si bloquea
tablas con LOCK TABLES, todas las actualizaciones se bloquean hasta que se hacen las comprobaciones necesarias. Si obtiene un bloqueo READ LOCAL (el contrario a un bloqueo de escritura) para una tabla que permita inserciones concurrentes al final de la tabla, las lecturas están permitidas, así como las inserciones de otros clientes. Los registros insertados no puede verlos el cliente que tenga el bloqueo hasta que lo libere. Con INSERT DELAYED, puede encolar inserciones en una cola local, hasta que los bloqueos se liberan, sin tener que esperar el cliente a que acabe la inserción. "Atómico", en el sentido en que nos referimos, no es nada mágico. Se trata que puede asegurar que mientras cada actualización específica está ejecutándose, ningún otro usuario puede interferir con ellas, y que nunca puede haber un rollback automático (lo que puede ocurrir con tablas transaccionales si no se es muy cuidadoso). MySQL Server garantiza que no hay dirty reads (lecturas sucias). A continuación se presentan algunas técnicas para trabajar con tablas no transaccionales: • Los bucles que necesiten transacciones normalmente pueden codificarse con la ayuda de LOCK TABLES, y no necesita cursores para actualizar registros en tiempo real. • Para evitar usar ROLLBACK, puede usar la siguiente estrategia: 1. Use LOCK TABLES para bloquear todas las tablas a las que quiere acceder. 2. Compruebe las condiciones que deben darse antes de ejecutar la actualización. 3. Actualice si todo es correcto. 4. Use UNLOCK TABLES para liberar los bloqueos. Este es un método mucho más rápido que usar transacciones con posibles rollbacks, aunque no siempre. La única situación en que esta situación no funciona es cuando alguien mata el thread durante una actualización. En ese caso, todos los bloqueos se liberan pero algunas actualizaciones pueden no ejecutarse. • Puede usar funciones para actualizar registros en una única operación. Puede obtener una aplicación muy eficiente usando las siguientes técnicas: • Modifique columnas con su valor actual. • Actualice sólo aquéllas que hayan cambiado. Por ejemplo, cuando estamos actualizando la información de un cliente, sólo actualizamos los datos del cliente que han cambiado y comprobamos que los datos cambiados o datos que dependen de los datos cambiados, han cambiado respecto a los datos originales. El test para datos cambiados se hace con la cláusula WHERE en el comando UPDATE . Si el registro no se ha actualizado, mostramos un mensaje al cliente: "Algunos de los datos actualizados han sido cambiados por otro usuario". A continuación mostramos los
registros viejos junto a los nuevos en una ventana para que el usuario pueda decidir qué versión del registro de usuario usar. Esto nos da algo que es similar a bloqueo de columnas pero es incluso mejor ya que sólo actualizamos algunas de las columnas, usando valores que son relativos a sus valores actuales. Eso significa que el típico comando UPDATE será algo así: UPDATE tablename SET pay_back=pay_back+125; UPDATE customer SET customer_date='current_date', address='new address', phone='new phone', money_owed_to_us=money_owed_to_us-125 WHERE customer_id=id AND address='old address' AND phone='old phone'; Esto es muy eficiente y funciona incluso si otro cliente ha cambiado los valores en las columnas pay_back o money_owed_to_us.
PROCEDIMIENTOS ALMACENADOS (STORED PROCEDURES) Y DISPARADORES (TRIGGERS) Los procedimientos almacenados se implementan desde la versión 5.0. Procedimientos almacenados y funciones. Funcionalidad básica para disparadores se implementa en My SQL desde la versión 5.0.2, con desarrollo adicional planeado para My SQL 5.1.
CLAVES FORÁNEAS (FOREIGN KEYS) En My SQL Server 3.23.44 y posteriores, el motor InnoDB soporta chequeo para restricciones de claves foráneas, incluyendo CASCADE, ON DELETE, y ON UPDATE. Para otros motores diferentes a InnoDB, MySQL Server parsea la sintaxis de FOREIGN KEY en comandos CREATE TABLE, pero no lo usa ni almacena. En el futuro, la implementación se extenderá para almacenar esta información en el fichero de especificaciones de las tablas de forma que puedan obtenerla mysqldump y ODBC. En una etapa posterior, restricciones de claves foráneas se implementarán para tablas yISAM. RESTRICCIONES (CONSTRAINTS) EN LOS ÍNDICES PRIMARY KEY Y UNIQUE
Normalmente, un error ocurre cuando trata de ejecutar un INSERT o UPDATE en un registro que viole la clave primaria, clave única o clave foránea. Si usa un motor transaccional como InnoDB, My SQL automáticamente deshace el comando. Si usa un motor no transaccional, My SQL para de procesar el comando en el registro en el que ocurre el error y deja sin procesar el resto de registros. Si desea ignorar este tipo de violaciones de claves, My SQL permite la palabra clave IGNORE para INSERT y UPDATE. En este caso, My SQL ignora cualquier violación de clave y continúa procesando el siguiente registro. Puede obtener información acerca del número de registro insertados o actualizados realmente con la función de la API de C mysql_info().
RESTRICCIONES (CONSTRAINTS) SOBRE DATOS INVÁLIDOS Lo siguiente es cierto si no usa modo estricto. Si inserta un valor "incorrecto" en una columna, como NULL en una columna NOT NULL o una valor numérico demasiado grande en una columna numérica, My SQL cambia el valor al "mejor valor posible" para la columna en lugar de producir un error: • Si trata de almacenar un valor fuera de rango en una columna numérica, MySQL Server en su lugar almacena cero, el menor valor posible, o el mayor valor posible en la columna. • Para cadenas de caracteres, My SQL almacena una cadena vacía o tanto de la cadena de caracteres como quepa en la columna. • Si trata de almacenar una cadena de caracteres que no empiece con un número en una columna numérica, My SQL Server almacena 0. • My SQL le permite almacenar ciertos valores incorrectos en columnas DATE y DATETIME (tales como '2000-02-31' o '2000-02-00'). La idea es que no es el trabajo del servidor SQL validar fechas. Si My SQL puede almacenar una fecha y recuperarla fielmente, se almacena tal y como se da. Si la fecha es totalmente incorrecta (más allá de la capacidad del servidor para almacenarla), se almacena en su lugar el valor especial '0000-00-00'. • Si intenta almacenar NULL en una columna que no admita valores NULL ocurre un error para los comandos INSERT de un solo registro. Para comandos INSERT de varios registros o para comandos INSERT INTO... SELECT , My SQL Server almacena el valor implícito para el tipo de datos de la columna. En general, es 0 para tipos numéricos, cadena vacía ("") para tipos de cadenas de caracteres, y el valor "cero" para tipos de fecha y tiempo. Los valores implícitos por defecto se discuten en Sección 13.1.5, “Sintaxis de CREATE TABLE”. • Si un comando INSERT no especifica un valor para una columna, My SQL inserta su valor por defecto si la columna especifica un valor mediante la cláusula DEFAULT. Si la definición no tiene tal cláusula DEFAULT clause, My SQL inserta el valor por defecto implícito para el tipo de datos de la columna.