Delimitadores en MySQL

Siempre me habia llamado la atención el utilizar MySQL, pero por una o por otra nunca siquiera leí algún pequeño tutorial o manual de referencia. Ahora en la clase de Lenguajes de Programacion II -¿cuando llevamos Lenguajes de Programacion I?-, nos encargaron hacer el clásico sistema de administración de “algo”. Clientes, productos, materias, alumnos, etc. En este caso, Grupos y Alumnos. Para ello, utilizariamos java como lenguaje de programación y MySQL como sistema gestor de base de datos, y aun cuando en java no soy ningún experto, anteriormente habia tomado algunas clases básicas, esto aunado al hecho de que trabajo con C#, lo que facilita la tarea.

Como teníamos la opción de esoger si hacerlo con forms (javax, awt), o en modo consola, me decante por ésta última. Pero en fin, con esto no tuve demasiados problemas, me dispuse a crear las tablas, y sus correspondientes stores procedures (alta, baja, modificación); cabe mencionar que esto lo hice mediante linea de comandos -no esta de más practicar de vez en cuando-. Hasta este momento, no había tenido que recurrir a los delimitadores, tema de éste post, pero los inconvenientes surgieron cuando traté de crear un trigger, di un vistazo rápido de como hacerlo, cuando mi trigger incluía una sola instrucción, todo bien. Pero cuando quería que se ejecutaran dos instrucciones… aqui es en donde entran los demilitadores. ¿Dos párrafos para decir esto?

Para los que hayan trabajado previamente con MySQL, saben que el caracter “;” (punto y coma), se utliza para terminar con una instrucción, y para los que no, pues ya lo saben. Ejemplo:

SELECT * FROM Materia;

Bien, esto tiene solución, solamente tenemos que emplear la palabra reservada DELIMITER, y definir un nuevo delimitador (poner fin a una instrucción). Puede parecer confuso, pero no lo es:

DELIMITER $$

Después, siguiendo el ejemplo de mi ejercicio, definimos el cuerpo del trigger normalmente:

CREATE DEFINER = `root`@`localhost` TRIGGER `Alumno_AU` AFTER UPDATE ON `alumno`
FOR EACH ROW
begin
update Grupo set numAlumnos=numAlumnos-1 where cveGrupo=old.cveGrupo;
update Grupo set numAlumnos=numAlumnos+1 where cveGrupo=new.cveGrupo;
end $$

Como se puede ver, dentro hay dos updates que se terminan con “;”, dado que son instrucciones independientes. Por último volvemos a redefinir el delimitador por defecto:

DELIMITER ;

He aqui el código completo del trigger:

DELIMITER $$

CREATE DEFINER = `root`@`localhost` TRIGGER `Alumno_AU` AFTER UPDATE ON `alumno`
FOR EACH ROW

begin
update Grupo set numAlumnos=numAlumnos-1 where cveGrupo=old.cveGrupo;
update Grupo set numAlumnos=numAlumnos+1 where cveGrupo=new.cveGrupo;
end $$

DELIMITER ;

Espero el texto haya sido de utilidad.

Comments
One Response to “Delimitadores en MySQL”
Trackbacks
Check out what others are saying...


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: