Por la Redacción de FoxPress
MySQL
es un gestor de Bases de Datos multi-thread, multiusuario que gestiona bases de
datos relacionales poniendo las tablas en ficheros diferenciados (en vez de en
un solo fichero) sometida a las licencias del Open Source Software.
MySQL funciona sobre plataformas
Windows/Linux/SCO/SUN/IBM AIX/HP-UX. En la sede de www.MySql.com están disponibles esas versiones
y los fuentes correspondientes. La última versión estable es la 3.23
MySQL es muy conocido en el mundo Linux y es una de
las Bases de Datos más usadas. Las críticas que recibe suelen venir de las
carencias que el producto tiene entre las que se citan:
1.-
Inexistencia de Transacciones
2.-
Imposibilidad de hacer subconsultas (Subquerys)
3.-
Inexistencia de Procedimientos almacenados
4.- Carencia
de Tiggers en las Claves externas
5.- Sin
soporte para integridad referencial.
Esto hace que sea uno de los Gestores de Bases de
Datos más rápidos y así con Bases de Datos de menos de 500.000 registros es
practicamente imbatible. La web tiene una comparativa que es impactante: http://www.mysql.com/information/benchmarks.htm
en la que se compara su rendimiento con las más conocidas Bases de Datos.
Sus autores defienden el producto diciendo que para
realizar transacciones ya tienen los bloqueos (exclusivamente a nivel de tabla)
y que las transacciones son difíciles de implementar y que poca gente las usa.
Las anteriores limitaciones hacen que el producto no
sea apto para entornos críticos o lugares con masivas entradas de datos. Sí por
el contrario para entornos no críticos y de mera lectura como por ejemplo un
catalogo Web.
En las
pruebas que hemos hecho se ha observado que las Bases de Datos se pueden borrar
desde Windows (algo parecido a lo que sucede con los DBF) y es algo diferente
de otras bases de datos como SQL Server u Oracle que no se pueden borrar desde
el sistema operativo y así tienen una mayor seguridad.
En contra de lo que se piensa, MySQL sólo es gratis
si se usa privadamente y como servidor Web (aunque sea comercial). Su uso
comercial por otras aplicaciones no servidoras Web (que necesiten MySQL para funcionar)
está sometido a las condiciones de la licencia.
En el entorno
Open Source hay otras Bases de Datos como PostGresSQL que sí soporta
transacciones y tecnicamente está mejor que MySQL aunque por el contrario tiene
un código menos depurado. PostGreSQL tiene fallos de gestión de memoria
mientras que a MySQL es muy difícil hacerla fallar. Por el contrario,
PostGreSQL es Gratis y MySQL no siempre.
Además,
mientras PostGres está disponible para todas las plataformas compatibles con
UNIX. Para correr sobre Windows se deben usar las librerias de transporte de
Cygnus Unix/NT. Lá ultima versión disponible es la PostgreSQL es la 7.0.3. A diferencia de MySQL que se puede
bajar directamente la versión binaria para windows. PostGreSQL no tiene
disponible una versión binaria para windows y deben realizarse todas las
operaciones que en la documentación se indican para que funcione en esos
sistemas operativos: cosa harto engorrosa.
A la hora de instalarlo hay que diferenciar si
estamos en Win 9x o en entornos NT/W2k pues las instalaciones son diferentes.
En nuestro caso lo probamos en un Win95 (primera
versión). En este entorno hubo que hacer lo siguiente para ponerla en marcha:
1.- Instalar el soporte de Microsoft Socket 2 (como
se sabe Win 95 (primera versión) y la versión OEM de la Release 2 de Win 95 no
venían con el socket 2 y es necesario intalarlo). En los ficheros de este mes
está el instalador. Si lo instalas sobre Win98 o NT/w2k no es necesario que
instales esto.
2.- Instalar MySQL 3.23. El instalador es el mismo
para todas las versiones Win./NT/2000. Es mejor instalarlo en C:\ pues si se
escoje otra unidad hay que hacer algunos cambios. En los ficheros del mes está
la versión binaria de MySQL
3.- Instalar el Driver ODBC para MySQL. También está
entre los ficheros del mes. El instalador tiene un aire de 16 bits pero ya da
totalmente soporte a 32 bits. Al instalarlo en una máquina Win 95 limpia no
quedó bien la instalación y hubo que repetirla una vez instalado VFP 6.0 que ya
incorporó el administrador ODBC32. Una vez instalado El Administrador se volvió
a instalar y en este caso ya quedó correctamente instalado.
Un comentario añadido a la instalación es que todos
los ficheros necesarios se instalan en el directorio que se le indique y
ninguno en Windows/System. Esto hace que:
1.-
Reinstalar Windows sin formateo no afecta a la Base de Datos
2.- Los
ficheros copiados son, tal cual, trasladables a otras máquinas sin complejas
inscripciones en el Registry o cosas similares.
Una vez instalado debemos ponerlo en marcha. Para
ponerlo en marcha basta con ejecutar desde una ventana de órdenes DOS la instrucción:
C:\mySQL\bin\MySQLd
Si estás
trabajando con Win NT la instrucción sería:
C:\mySQL\bin\MySQLd-nt
Para
desconectarlo habría que poner:
C:\bin\mysqladmin -u root shutdown
Esto
sorprende un poco pues una vez puesto en marcha no se observa ningún icono o
advertencia de que está en marcha: quizás es una deformación del mundo Windows...
Para
comprobar que está en marcha podemos escribir:
C:\ bin\mysqlshow
Que nos diría qué bases de datos tenemos en este
momento en el Servidor
MySQL como
una herencia de sus raices Linux se puede interactuar con ella desde la ventana
de DOS cargando su shell. Las cosas que
se pueden llegar a hacer son las siguientes:
Crear
un Base de Datos:
C:\mysql\bin>mysqladmin create database01
Esto nos creará dentro de c:\mySQL\Datos\ un directorio con ese nombre pero vacío. Según vayamos creando tablas se irán incorporando a ese directorio.
Activar el Shell:
C:\mySQL\bin\mySQL
Con esto queda activo el shell y ahora podemos empezar a escribir instrucciones SQL
Listar todas las tablas de una Base de Datos:
mysql> show tables;
+----------------------+
| Tables in database01 |
+----------------------+
| table01 |
| table02 |
+----------------------+
Listar los campos de la tabla
mysql> show columns from table01;
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| field01 | int(11) | YES | | | |
| field02 | char(10) | YES | | | |
+---------+----------+------+-----+---------+-------+
mysql> insert into table01 (field01,field02) values (1,'first');
Query OK, 1 row affected (0.00 sec)
mysql> select * from table01;
+---------+---------+
| field01 | field02 |
+---------+---------+
| 1 | first |
+---------+---------+
mysql> alter table table01 add column field03 char(20);
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
El Shell de MySQL te permite poner las
instrucciones en una sola línea o en múltiples líneas . Ten en cuenta que como
un residuo de las épocas del teleproceso el final deberá tener un punto y coma
Se muestra a continuación las dos formas de
hacerlo:
Una sola línea:
mysql> create table table33 (field01 integer,field02
char(30));
Varias
líneas:
mysql> create table table33
-> (field01
-> integer,
-> field02
-> char(30));
El resto es mirar la documentación y ver
todas las opciones disponibles.
Ejecución desde Visual
FoxPro
Para acceder a la Base de Datos MySQL desde
Fox lo primero que deberemos hacer es configurar el Origen de Datos, para eso
hay que ir al Administrador ODBC y configurar, en nuestro caso un DSN (la
instalación del Driver ODBC MySQL por defecto te instala un Origen de Datos
llamado mySQL-Test que apunta a la Base de Datos de prueba Test que se instala
con MySQL.
Para nuestro caso vamos a cambiar el usuario
por root que es el que tiene todos los permisos de creación de Bases de Datos,
etc... y poner como Host la dirección IP de nuestra máquina. En nuestro caso
192.168.1.3 Al final nuestro origen de datos queda de la siguiente forma:
Una
vez hecho lo anterior intentamos conectarnos desde Fox con las instrucciones:
SQLCONNECT()
Un código sencillo de inicio para probar
que todo va bien podría ser:
clear
close all
*- Nos conectamos
Nhandle = SQLCONNECT('sample-mysql','root','')
*- el valor debe ser superior a 0
? nHandle
*- Si ya existe la Base de datos la borramos
? sqlexec(nHandle,'DROP DATABASE IF EXISTS miBDatos')
*- Creamos la Base de datos y nos posicionamos en ella para
crear una tabla
? sqlexec(nHandle,'CREATE DATABASE miBDatos')
? sqlexec(nHandle,'USE miBDatos')
? sqlexec(nHandle,'CREATE TABLE agenda (nombre CHAR(50),
direccion CHAR(50),;
telefono CHAR(15),
email CHAR(30))' )
*- Insertamos un registro
? sqlexec(nHandle,"INSERT INTO agenda VALUES ('Juan Pérez',
'C/ Laguna 15. Sevilla',;
'95.455.55.55',
'juan@agenda.com')" )
*- Nos traemos todo
? sqlexec(nHandle,"Select * from agenda")
? sqldisconn(nHandle)
brow
Siempre que exista un dato incorrecto o
se desconozca un dato se nos mostrará esta ventana. Una vez correctamente configurada,
es mejor marcar el Don’t prompt on conect.
A partir de aquí el resto es usar las
opciones que Visual FoxPro tiene para el tratamiento Cliente/Servidor que no
las comentamos pues no son tema de este artículo
Al no tener
transacciones, los bloqueos toman bastante importancia, sobre todo al ver que los bloqueos son
exclusivamente de tabla (no hay de registro)
y pueden ser de lectura o de escritura. El siguiente código nos ilustra
su fucionamiento:
mysql> LOCK TABLES trans READ, customer WRITE;
mysql> select sum(value) from trans where customer_id= some_id;
mysql> update customer set total_value=sum_from_previous_statement
where customer_id=some_id;
mysql> UNLOCK TABLES;
Como ves este código es muy parecido al
de Fox 2.x usando el FLOCK y UNLOCK.
Interfaces
Gráficos
Esta versión viene con un muy pero que muy rudimentario
interfaz gráfico que sería el equivalente del Query Analizer de SQL Server y
que permite visualmente saber que Bases de Datos tenemos y qué tablas y también
hacer consultas a las tablas.
Para cargarlo deberemos ejecutar el winmysqladmin.exe
y ver el interfaz que nos muestra que es de lo más espartano que se ha
conocido.
Al margen de
este interfaz gráfico tenemos otros como el de Mascon en http://www.scibit.com/Products/Software/Utils/Mascon.htm.
De todos modos, en la documentación del producto se indican unos cuantos
gratuitos y de pago.
FoxPress – Abril de 2001
© 2001 FoxPress. All rights reserved