El blog de Alejandro Meroño

El blog de Alejandro Meroño Hernández

Archive for the ‘Bases de datos’ Category

Triggers o disparadores en MySQL  

mysql.jpg

Un trigger o disparador es un objeto de base de datos que se asocia a una tabla y se activa cuando se produce algún evento sobre dicha tabla.

Supongamos que tenemos una tabla, llamada empleados, formada por varios campos, y queremos registrar en otra tabla, llamada auditoría, las modificaciones que se produzcan sobre la tabla empleados.

Por ejemplo, podríamos registrar en la tabla auditoría la fecha y hora en la que se realiza algún cambio en la tabla empleados, además del valor modificado.

Todo esto es posible gracias a los triggers, que como he dicho antes, se activan cuando se produce algún evento sobre alguna tabla.

¿Cómo crear un trigger en MySQL?

La sintaxis básica para crear un trigger en MySQL es la siguiente:

CREATE TRIGGER nombre_trigger
{BEFORE|AFTER} {INSERT|UPDATE|DELETE}
ON nombre_tabla
FOR EACH ROW BEGIN
sentencias_sql;
END;

  • BEFORE|AFTER espefican cuando se dispara el trigger (antes de ejecutar la sentencia o despúes)

  • INSERT|UPDATE|DELETE especifican el evento que disparará el trigger

  • ON nombre_tabla indica la tabla sobre la que actúa el trigger

  • sentencias_sql son las sentencias que se ejecutarán cuando se active el trigger

Veamos un ejemplo.

Vamos a construir un trigger que se activará cada vez que insertemos un registro en una tabla llamada empleados. Lo que hará el trigger será insertar en una tabla, llamada AUDITORIA, la fecha y hora en la que se ha realizado la inserción del registro en la tabla empleados.

Así pues, nuestro primer paso será crear la tabla AUDITORIA de la siguiente forma:

CREATE TABLE auditoria(
fecha DATE,
hora TIME);

trigger1.png

Esta tabla estará formada por dos campos que llamaremos fecha y hora.

A continuación creamos la tabla empleados, formada por los campos emp_no, apellidos y salario.

CREATE TABLE empleados(
emp_no integer PRIMARY KEY,
apellidos VARCHAR(50),
salario INTEGER);

Y acto seguido crearemos el trigger, que llamaremos trigger1, de la siguiente forma:


DELIMITER |
CREATE TRIGGER trigger1 BEFORE INSERT ON empleados
FOR EACH ROW BEGIN
INSERT INTO auditoria VALUES(CURDATE(),CURTIME());
END;
| DELIMITER ;

La palabra DELIMITER se utiliza para indicar cuál será el carácter utilizado para delimitar la última línea del trigger. En este caso se utiliza el carácter barra (|) justo antes de la sentencia de creación del trigger (CREATE TRIGGER ….) y al final de la última línea de código del trigger. Cuando creamos el trigger, escribimos de nuevo DELIMITER seguido de un punto y coma para indicar que el final de la orden SQL será el punto y coma a partir de ahora.

CURDATE() y CURTIME() son dos funciones internas de MySQL que devuelven la fecha y la hora actual. Así pues, lo que hará el trigger será insertar la fecha y hora actual, en la tabla auditoría, cada vez que se inserte un registro en la tabla empleados.

Para probar el trigger introduciremos un registro en la tabla empleados.

  • INSERT INTO EMPLE VALUES(1,’Serrano Pérez’,1500);

Y a continuación consultaremos la tabla auditoría para observar que efectivamente queda registrada la fecha y hora.

trigger2.png

Veamos otro ejemplo. Vamos a crear una tabla llamada test1 con tan sólo un campo, y vamos a asociar un trigger a esta tabla que registrará en otra tabla, llamada auditoría, la fecha y hora en la que se actualiza la tabla test1 y los valores nuevos y antiguos del campo de la tabla test1.

Así pues, creamos en primer lugar la tabla test1.

CREATE TABLE test1(
campo1 VARCHAR(10));

triggers10.png

A continuación creamos la tabla AUDITORIA2.

CREATE TABLE auditoria2(
antiguovalor varchar(10),
nuevovalor varchar(10),
fecha date,
hora time);

Y este es el trigger que asociamos a la tabla test1.

DELIMITER |
CREATE TRIGGER trigger2 AFTER UPDATE ON test1
FOR EACH ROW BEGIN
INSERT INTO test1 VALUES(OLD.campo1,NEW.campo2,CURDATE(),CURTIME());
END;
| DELIMITER ;

Observa que en este caso hacemos uso de AFTER UPDATE, para indicar al trigger que se debe activar cuando se produzca alguna modificación en la tabla test1.

En la sentencia INSERT aparecen los valores OLD y NEW. NEW.campo1 es el nuevo valor que se da a la columna campo1, OLD.campo1 es el antiguo valor que tenía el campo antes de la actualización.

Por último vamos a crear un trigger que se activará cuando se elimine algún registro de la tabla test1.

DELIMITER |
CREATE TRIGGER trigger3 AFTER DELETE ON test1
FOR EACH ROW BEGIN
INSERT INTO auditoria3 VALUES(OLD.campo1,CURDATE(),CURTIME());
| DELIMITER ;

En este caso el trigger insertaría un registro en la tabla auditoria3 cada vez que se eliminara algún registro de la tabla test1. Observa como en este caso no tiene sentido utilizar NEW.campo1, ya que al borrar el registro lo único que tiene sentido es el antiguo valor que tenía el campo, OLD.campo1.

Popularity: 5% [?]

The article has

10 responses

Written by Alejandro Meroño Hernández

Abril 8th, 2008 at 5:19 pm

Posted in Bases de datos

Abrir bases de datos Access en Ubuntu  

MDB Viewer es una aplicación realmente interesante, que he encontrado gracias al blog de Marcelo Ramos, que permite abrir bases de datos Access en Ubuntu y ver las tablas, datos, formularios…. que hay en la base de datos.

Para instalar MDB Viewer en Ubuntu, abrimos el terminal (Aplicaciones/Accesorios/Terminal) y escribimos:

  • sudo apt-get install mdbtools-gmb

Una vez realizada la instalación, encontraremos MDB Viewer en el menú Aplicaciones/Oficina.

Para abrir una base de datos Access, tan sólo debemos hacer clic sobre Archivo y después sobre Abrir. En la siguiente imagen se muestran las tablas de una base de datos llamada hospitales.mdb, que contiene tres tablas llamadas “Plantilla”,”Salas” y “Hospitales”.

mdbviewer1.png

Si seleccionamos una tabla y hacemos clic sobre el botón “Definition”, podremos ver la estructura de la tabla (campos que forman la tabla, tipo de datos de cada campo, claves primarias y tamaño de cada campo).

mdbviewer2.png

Si pulsamos sobre el botón “Data”, veremos los datos que hay en la tabla que tengamos seleccionada en ese momento.

mdbviewer3.png

Otra de las posibilidades que tenemos es la de exportar los datos de una tabla en un fichero de texto. Para ello haremos clic sobre el botón “Exportar”.

mdbviwer4.png

Con MDB Viewer también podremos ver las consultas, formularios, informes, macros y módulos que tengamos en una base de datos Access.

Si lo que queremos es exportar una base de datos Access a MySQL, Oracle, Sybase o Postgre, tendremos que pulsar el último botón, comenzando por la izquierda, que aparece en la barra de herramientas.

mdbviewer7.png

mdbviwer6.png

Por otro lado disponemos del paquete mdbtools, un conjunto de programas de línea de comandos que brindan más funcionalidad para gestionar bases de datos Access (copio y pego del blog de Marcelo Ramos)

  • mdb-tables: muestra las tablas de la base de datos. La salida puede configurarse para mostrar los nombres de las tablas en una fila o una columna , separar las tablas con un separador y mostrar además las tablas de sistema de la base de datos.
  • mdb-schema: permite exportar el esquema de la base de datos entera o un tabla en particular en formatos adecuados para algunos motores de base de datos: Access, Sybase, Oracle, y Postgresql. Tiene una opción para sanear los nombres (por ejemplo reemplaza espacios por guiones bajos).
  • mdb-sql: un cliente interactivo con un lenguaje SQL minimal y dos comandos útiles, listar y describir tablas.
  • mdb-export: exporta los datos en formato CSV o como sentencias INSERT de SQL (la exportación de gmdb no tiene ésa opción).

Las mdbtools pueden instalarse escribiendo lo siguiente en el terminal:

  • sudo apt-get install mdbtools

Popularity: 3% [?]

The article has

2 responses

Written by Alejandro Meroño Hernández

Febrero 11th, 2008 at 6:54 pm

Posted in Bases de datos, Ubuntu

Transacciones en MySQL. ROLLBACK y COMMIT  

Una transacción en MySQL es una secuencia de una o más sentencias SQL que juntas forman una unidad de trabajo.

Imagina que quieres borrar uno o varios registros de una tabla, pero te equivocas y eliminas todos los registros de la tabla. ¿Existe alguna forma de subsanar el error y dar marcha atrás para recuperar los registros eliminados? La respuesta es sí, utilizando transacciones.

Por defecto MySQL funciona en modo autocommit. Esto quiere decir que se confirma (COMMIT) cada sentencia ejecutada.

Los pasos para iniciar una transacción son los siguientes:

  • Se comienza una transacción con la sentencia START TRANSACTION.
  • Si se realizan modificaciones en la base de datos y queremos volver atrás y cancelar los cambios realizados hasta el momento, utilizaremos la sentencia ROLLBACK.
  • Si queremos confirmar los cambios realizados en la base de datos, utilizaremos la sentencia COMMIT, lo cual implica también que termina la transacción.
  • Si queremos comenzar una nueva transacción, usaremos START TRANSACTION.

Nota: para que las transacciones funcionen correctamente, debemos utilizar tablas InnoDB.

Veamos un ejemplo.

Disponemos de la tabla EMPLE, que está formada por los campos que se muestran en la imagen.

commit1.png

A continuación comenzamos una transacción con START TRANSACTION.

commit21.png

Modificamos el salario de todos los empleados de la tabla EMPLE, con la siguiente sentencia SQL.

  • update emple set salario=1000;

commit3.png

Observamos a continuación que se ha modificado el salario de todos los empleados.

commit5.png

Deshacemos el trabajo ya que nos hemos equivocado. Para ello utilizamos la sentencia ROLLBACK.

commit61.png

Y comprobamos a continuación que la tabla vuelve a su estado original.

commit9.png

Si queremos validar los cambios en la base de datos, completaremos la transacción con el uso de la sentencia COMMIT. Si ejecutamos ROLLBACK justo después de hacer el COMMIT, los cambios realizados sobre la base de datos permanecerán, debido a que anteriormente se validó la transacción.

Popularity: 4% [?]

The article has

4 responses

Written by Alejandro Meroño Hernández

Febrero 3rd, 2008 at 1:57 pm

Posted in Bases de datos

Ejercicios de desarrollo de páginas web con PHP y MySQL  

Ejercicios de desarrollo de páginas web con PHP y MySQL para alumnos de segundo curso del ciclo de “Explotación de Sistemas Informáticos”, del módulo “Operaciones con bases de datos ofimáticas y corporativas“.

ejercicios_paginas_web.png

Recuerda que para realizar los ejercicios debes tener instalado el servidor de páginas web Apache, el servidor de bases de datos MySQL y el intérprete de PHP. Puedes instalar cada uno de ellos por separado, o instalar el paquete XAMPP en Ubuntu que ya contiene todo lo que necesitas.

Si deseas realizar los ejercicios en Windows, dispones del paquete Wamp Server. También tendrás que bajar y cargar en el servidor MySQL el siguiente script, que crea las tablas y carga los datos necesarios para realizar los ejercicios: practica19.txt.

El fichero en pdf con los ejercicios lo puedes descargar haciendo clic en el siguiente enlace: práctica19_bbdd_creación_páginas_web.pdf

Las soluciones a los ejercicios las puedes descargar desde el siguiente enlace:soluciones ejercicios de desarrollo de páginas web

EJERCICIO 1

Realiza un script PHP que muestre los datos: APELLIDO, OFICIO, SALARIO y DEPT_NO de todos los empleados de la tabla EMPLE, ordenados por número de departamento, mostrando al final el número total de empleados.

php_mysql1.png

EJERCICIO 2

Realiza un script PHP que muestre los datos: CÓDIGO DE HOSPITAL, NOMBRE, DIRECCIÓN y NÚMERO DE PLAZAS de todos los hospitales de la tabla HOSPITALES, ordenados por número de plazas, mostrando al final el número total de hospitales.

php_mysql2.png

EJERCICIO 3

Se define un documento HTML (ejercicio3.html) que incluye un formulario con un campo de entrada, el código de hospital y un botón. Al escribir el código de hospital y pulsar el botón, se visualizarán a través de un documento PHP (ejercicio3.php) los empleados de la tabla PERSONAS (campos DNI, APELLIDOS y FUNCIÓN) que existan en ese hospital.

php_mysql3.png

EJERCICIO 4

Realiza una modificación al ejercicio anterior para que el formulario de entrada (ejercicio4.html) pida, además del código de hospital, la función. Al escribir el código de hospital, la función, y pulsar el botón se visualizarán a través de un documento PHP (ejercicio4.php) los empleados de la tabla PERSONAS (campos DNI y APELLIDOS) que existan en ese hospital con esa función.

php_mysql4.png

EJERCICIO 5

Diseña un documento HTML, llamado marcoEjercicio5.html, con dos marcos. Desde el marco de arriba se realiza la entrada de datos de los hospitales con botones para insertar datos en la tabla HOSPITALES y para cancelar la entrada. Al pulsar el botón “Insertar hospital” se introducirán los datos en la tabla y se mostrarán los mensajes generados (como posibles errores) en el marco inferior. Al pulsar el botón “Listar hospitales” se mostrarán, en el marco inferior, los hospitales que hay en la tabla HOSPITALES.

php_mysql5.png

EJERCICIO 6

En este ejercicio se debe crear una página web con dos marcos, similar al ejercicio anterior. El nombre de la página es marcoEjercicio6.html. En el marco superior se debe cargar la página ejercicio6.html, que contiene un formulario con dos botones y un cuadro de texto. Si se pulsa el botón “Baja de hospital” se eliminará de la base de datos el hospital cuyo código sea el que hemos introducido en el cuadro de texto. Al dar de baja un hospital se visualizará, en el marco inferior, el número de filas eliminadas. Si se pulsa el botón “Visualizar datos” se mostrará, en el marco inferior, el nombre y dirección del hospital cuyo código coincida con el que hemos introducido en el cuadro de texto. Estos datos deben visualizarse en el marco inferior.

php_mysql6.png

EJERCICIO 7

En este ejercicio se debe crear una página web con dos marcos, similar al ejercicio anterior. El nombre de la página será marcoEjercicio7.html. En el marco superior se debe cargar la página ejercicio7.html, que contiene un formulario con dos botones y un cuadro de texto. Si se pulsa el botón “Visualizar los datos” se mostrará, en el marco inferior, un formulario que mostrará los datos del hospital cuyo código se ha escrito en el cuadro de texto. Al pulsar el botón “Actualizar” del marco inferior, se procederá a actualizar los datos del hospital seleccionado.

EJERCICIO 8

Crea el siguiente documento HTML con tres marcos. El marco de la izquierda contiene tres enlaces para gestionar artículos, gestionar clientes y gestionar compras. Estos tres enlaces mostrarán, en principio, una página en blanco en el marco superior de la página HTML.

php_mysql8.png

EJERCICIO 9

El botón “Gestión artículos” mostrará el formulario que aparece a la derecha de la imagen. Los cuatro botones servirán para dar de alta, baja, modificar o ver los artículos que hay en la tabla ARTÍCULOS.

php_mysql9.png

Al pulsar el botón “Altas” se mostrará, en el marco superior, un formulario que servirá para dar de alta artículos. Cuando se inserte un artículo en la tabla ARTÍCULOS, se debe mostrar en el marco inferior el resultado de dicha acción (posible error o éxito en la inserción).

php_mysql10.png

EJERCICIO 10

El botón bajas debe mostrar el siguiente formulario que servirá para eliminar el artículo cuyo código introduzcamos en el cuadro de texto. En el marco inferior se deben visualizar los posibles mensajes de error.

mysql_php_10_1.png

El botón “Modificaciones” debe mostrar el siguiente formulario. Cuando se introduzca el código de un artículo en el cuadro de texto y se pulse “Aceptar”, aparecerá un formulario en el marco inferior con los datos del artículo seleccionado y un botón para proceder a actualizar el registro en la base de datos.

mysql_php_10_2.png

EJERCICIO 11

El botón “Ver artículos” debe mostrar, en el marco inferior, un listado de los artículos que hay en la base de datos, ordenados por código. Al final del listado se debe mostrar el número total de artículos que hay en la base de datos.

EJERCICIO 12

El botón “Gestión de compras” del marco izquierdo debe mostrar el siguiente formulario con cuatro botones para realizar la gestión de compras.Al pulsar sobre el primer botón, “Listado de compras por clientes”, debe aparecer un formulario como el que aparece a continuación. En dicho formulario aparecerá una lista desplegable en la que se mostrarán todos los DNIs que hay en la tabla CLIENTES.Al seleccionar un DNI y pulsar el botón “Listar compras”, aparecerá, en el marco inferior, un listado de las compras realizadas por el cliente seleccionado. Al final del listado debe aparecer el número de artículos que en total ha comprado.

mysql_php_12.png

Popularity: 9% [?]

The article has

17 responses

Written by Alejandro Meroño Hernández

Febrero 1st, 2008 at 8:00 pm

Ejercicios de administración y seguridad en Access  

Relación de ejercicios de administración y seguridad en Access para los alumnos de segundo curso del ciclo de Formación Profesional “Explotación de Sistemas Informáticos”. Puedes encontrar más ejercicios de bases de datos en el siguiente enlace: Operaciones con bases de datos ofimáticas y corporativas.

ejercicios_administracion_access.png

El fichero PDF con los ejercicios los puedes encontrar en el siguiente enlace: ejercicios de administración en Access 

La base de datos necesaria para realizar los ejercicios puedes encontrarla en el siguiente fichero: clínica.mdb

EJERCICIOS

1. En Access crea dos nuevos usuarios llamados user1 y user2.

2. Cambia la contraseña del usuario administrador. La nueva contraseña será “admin”.

3. Entra a la base de datos con el usuario user1 y crea una contraseña para éste. La contraseña será user1.

4. Entra a la base de datos con el usuario user2 y crea una contraseña para éste. La contraseña será user2.

5. Abre la base de datos clinica.mdb. Observa como user1 y user2 no tienen privilegios para consultar la tabla INGRESOS. Sin embargo pueden hacerlo porque son miembros del grupo Usuarios y este grupo tiene permisos para leer y modificar estas tablas. Quita del grupo Usuarios los permisos de Insertar datos y eliminar datos de la tabla INGRESOS

6. Entra a la base de datos como user1 y comprueba que este usuario puede leer la tabla INGRESOS pero no puede insertar ni eliminar datos de esta tabla.

7. Entra a la base de datos Access como user2 y comprueba que este usuario puede leer la tabla INGRESOS pero no puede insertar ni eliminar datos de esta tabla.

8. Conéctate como administrador a la base de datos y crea un formulario sobre la tabla INGRESOS con el asistente. A continuación da a user1 la posibilidad de poder leer datos en el formulario que has creado.

9. Otorga los permisos adecuados al usuario user2 para que éste pueda abrir el formulario creado en el ejercicio anterior.

10. Con el usuario administrador crea una nueva tabla llamada “MADRID” con los datos de los pacientes que son de Madrid. Da a continuación a user1 todos los permisos sobre esa tabla. A user2 solo le darás los permisos para leer datos sobre esa tabla.

11. Como administrador crea una consulta que devuelva los pacientes que son de Alcorcón. A continuación tienes que dar a user1 permisos para poder ver el diseño de la consulta pero no para ver el resultado de la consulta. Debes comprobar esto entrando a la base de datos como user1.

12. Da al usuario user2 permisos para poder eliminar y actualizar datos de la tabla PACIENTES.

13. Como administrador tienes que dar tanto a user1 como a user2 permisos para poder ver la consulta creada en el ejercicio 11.

14. Crea un nuevo grupo llamado 2ESI.

15. Asigna al grupo 2ESI todos los permisos sobre la base de datos Access

16. Haz miembro de 2ESI al usuario user1.

17. Borra el usuario user2

18. Crea un nuevo grupo de trabajo con nombre BOSCO, organización BOSCO e Id BOSCO. Únete al grupo de trabajo creado.

19. Abre la base de datos clinica.mdb y compáctala. Observa como disminuye el tamaño del fichero mdb.

20. Crea una contraseña para la base de datos clinica.mdb. La contraseña será bosco.

Popularity: 4% [?]

The article has

2 responses

Written by Alejandro Meroño Hernández

Febrero 1st, 2008 at 5:49 pm

Convertir bases de datos Access a MySQL  

Ms Access to MySQL es un programa para Windows que permite convertir bases de datos Access a MySQL y que puede descargarse gratuitamente desde la siguiente página: descarga de Ms Access to MySQL

Si lo hemos descargado, instalado y lo intentamos ejecutar y aparece la siguiente ventana, es que tenemos que descargar e instalar el driver ODBC de MySQL desde la siguiente página: driver ODBC de MySQL

msaccess_mysql.png

El programa nos guía a través de un sencillo asistente que nos permitirá pasar bases de datos Access a MySQL. Esta es la primera ventana del asistente, en la que simplemente tendremos que hacer clic sobre el botón “Next”.

msaccess_mysql2.png

En el siguiente paso del asistente tendremos que seleccionar la base de datos que queramos convertir. También tendremos que especificar el nombre de usuario y contraseña en caso de que la base de datos se encuentre protegida por contraseña.

msaccess_mysql3.png

A continuación especificaremos la ubicación de la base de datos MySQL (localhost si la base de datos la tenemos en el mismo ordenador), puerto (por defecto 3306), nombre de usuario, contraseña, el nombre de la base de datos en la que se guardarán los datos y el motor de almacenamiento.

msaccess_mysql4.png

Después seleccionaremos las tablas de la base de datos Access que queramos exportar a MySQL. En el ejemplo son 3 tablas, Ingresos, Médicos y Pacientes.

msaccess_mysql5.png

En el siguiente paso del asistente especificaremos si se van a conservar los índices de las tablas de Access (Transfer indexes), si se van a exportar los registros (muy importante si queremos conservar los datos que hay en las tablas de la base de datos Access), si se van a conservar los valores por defecto de los campos (Default Values Properties), y si se van a conservar las propiedades de los campos autonuméricos. Si marcamos la primera opción, Drop and recreate destination database, se eliminará y volverá a crear la base de datos si ésta ya existe.

msaccess_mysql6.png

Tras pulsar el botón “Run Now”, comenzará el proceso de conversión. En la siguiente ventana veremos la información de todo el proceso: tablas creadas y registros creados en cada una de las tablas.

msaccess_mysql7.png

En la siguiente imagen podemos comprobar que la tabla “Ingresos” se ha exportado correctamente a MySQL.

msaccess_mysql8.png

Popularity: 4% [?]

The article has

6 responses

Written by Alejandro Meroño Hernández

Enero 30th, 2008 at 9:07 pm

Posted in Bases de datos