Apuntes de MySQL #1

En el manual de MySQL se encuentra información valiosa que todos los usuarios de este gestor de base de datos deben saber. He decidido realizar unos apuntes que tomaré mediante siga la lectura del manual. En esta primero entrega les dejo información importante referente a la instalación e información general de MySQL. Espero les pueda ayudar en algo.

Dimensiones máximas de las Tablas

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/ 8TB
NSS
win32 w/ FAT/FAT32 2GB/4GB
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.

Extensiones MySQL del estándar SQL

Tenga en cuenta que si lo usa, su código no será portable a otros servidores SQL. En algunos casos, puede escribir código que incluya extensiones MySQL, pero siendo portable, mediante comentarios de la forma /*! ... */. En ese caso, MySQL parsea y ejecuta el código dentro de los comentarios como si fuera cualquier otro comando de MySQL, pero otros servidores SQL igno- rarán la extensión. Por ejemplo:
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
Si añade un número de versión tras el carácter '!', la sintaxis dentro del comentario se ejecuta sólo si el número de versión de MySQL es igual o mayor que el especificado:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

Diferencias en MySQL del estándar SQL

Para columnas VARCHAR, los espacios finales se eliminan cuando el valor se guarda. (Arreglado en MySQL 5.0.3). Consulte Sección A.8, “Problemas conocidos en MySQL”.
  • En algunos casos, las columnas de tipo CHAR se convierten en columnas VARCHAR cuando define una tabla o altera su estructura. (Arreglado en MySQL 5.0.3). Consulte Sección 13.1.5.1, “Cambios tácitos en la especificación de columnas”.
  • 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. Consulte Sección 13.5.1.3, “Sintaxis de GRANT y REVOKE”.
  • La función CAST() no soporta conversión a REAL o BIGINT. Consulte Sección 12.8, “Funciones y operadores de cast”.
  • SQL estándard 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 MySQL 5.0.2.

Transacciones y operaciones atómicas

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. 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.
Nota: Esto puede ser más rápido que utilizar transacciones, pero en ocasiones no. 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.

Restricciones (constrainsts) sobre datos inválidos

  • 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 carácteres, MySQL almacena una cadena vacía o tanto de la cadena de carácteras como quepa en la columna.
  • Si trata de almacenar una cadena de carácteres que no empiece con un número en una columna numérica, MySQL Server almacena 0.
  • MySQL 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 MySQL 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 , MySQL 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 carácteres, y el valor "cero" para tipos de fecha y tiempo.
  • Si un comando INSERT no especifica un valor para una columna, MySQL inserta su valor por defecto si la columna especifica un valor mediante la cláusula DEFAULT. Si la definición no tie- ne tal cláusula DEFAULT clause, MySQL inserta el valor por defecto implícito para el tipo de datos de la columna.
A partir de MySQL 5.0.2, puede seleccionar un tratamiento de validación de datos de entrada más estricto usando los modos SQL STRICT_TRANS_TABLES o STRICT_ALL_TABLES. Para chequeo estricto, active STRICT_ALL_TABLES. Es equivalente a STRICT_TRANS_TABLES excepto que en motores de almacenamiento no transaccionales, los errores abortan el comando incluso cuando hay datos incorrectos a partir del primer registro. Esto significa que si ocurre un error a medias de una inserción o actualización de varios registros en una tabla no transaccional, se produce una actualización parcial. Los primeros registros se insertan o actualizan, pero aquéllos a partir del punto en que ocurre el error no. Para evitar esto en tablas no transaccionales, use inserciones de un solo registro o use STRICT_TRANS_TABLES para obtener advertencias en lugar de errores. Para evitar problemas, no utilice MySQL para validar contenido de columnas. Es preferible (y a menudo más rápido) dejar que la aplicación se asegure de pasar sólo valores legales a la base de datos.

Instalación - Mejores plataformas

En base a estos criterios, las mejores plataformas para ejecutar MySQL en este momento son x86 con SuSE Linux (kernel versión 2.4 o 2.6), y ReiserFS (o cualquier distribución de Linux similar) y SPARC con Solaris (2.7-9). FreeBSD aparece en tercer lugar, pero es de esperar que se integre al lote principal cuando se mejore la biblioteca de subprocesos. Es importante resaltar que si se está trabajando con alguna distribución o sistema operativo que se encuentra en la lista de RPM's que ofrece MySQL, se recomienda instalar mediante RPM's ya que se adapta mejora esta distribución o sistema operativo.

Pasos a seguir después de una instalación en Windows

En Windows, el directorio de datos y la tabla de permisos no necesitan ser creados. MySQL para Windows incluye la tabla de permisos con un conjunto de cuentas ya inicializadas en la base de datos mysql, dentro del directorio de datos. Al contrario que en Unix, no se debe ejecutar el script mysql_install_db. Sin embargo, si no se instala MySQL utilizando el ASistente de Instalación, se deberían establecer contraseñas para proteger las cuentas. Antes de establecer passwords, se podría desear ejecutar algunos programas cliente para asegurarse de que hay conexión con el servidor y que éste se encuentra funcionando correctamente. Tras cerciorarse de que el servidor está ejecutándose (consultar Sección 2.3.10, “Arrancar el servidor la pri|mera vez”), se utilizarían los siguientes comandos para verificar que se puede traer información desde el mismo. La salida por pantalla debe ser similar a esto:
C:\> C:\mysql\bin\mysqlshow
+-----------+
| Databases |
+-----------+
| mysql        |
| test         |
+-----------+
C:\> C:\mysql\bin\mysqlshow mysql
Database: mysql
+--------------+
|    Tables    |
+--------------+
| columns_priv |
| db           |
| func         |
| host         |
| tables_priv  |
| user         |
+--------------+
C:\> C:\mysql\bin\mysql -e "SELECT Host,Db,User FROM db" mysql
+------+-------+------+
| host | db    | user |
+------+-------+------+
| %    | test% |      |
+------+-------+------+

Pasos a seguir después de la instalación en Unix

Luego de instalar MySQL en Unix, se necesita inicializar las tablas de permisos, ejecutar el servidor, y asegurarse de que éste funciona correctamente. También se podría desear que el servidor se inicie y detenga automáticamente cuando lo haga el sistema. Se deben asignar contraseñas a las cuentas en las tablas de permisos. En Unix, las tablas de permisos se configuran mediante el programa mysql_install_db. En algunos métodos de instalación, este programa se ejecuta automáticamente.
  • Si se instala MySQL en Linux a partir de una distribución RPM, el servidor RPM ejecuta mysql_install_db.
  • Si se instala MySQL en Mac OS X a partir de una distribución PKG, el instalador ejecuta mysql_install_db. En otro caso, será necesario ejecutar manualmente mysql_install_db.

Volver a establecer los permisos y claves

Se puede iniciar mysqld manualmente utilizando la opción --skip-grant-tables e ingresar los permisos manualmente utilizando mysql:
shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
shell> bin/mysql mysql
Nota: con esto podemos recuperar la clave o volver a colocar la clave del usuario root. Con esto finalizo la primera entrega de los apuntes de MySQL. En el próximo post veremos más de procedimientos almacenados, funciones y triggers. Saludos ...
Sin votos aún

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para probar si tu eres un humano y para prevenir spam en el sitio.
8 + 12 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.