MYSQL 5, incorporo grandes cambios para volverse la base de datos mas popular y competir con las bases de datos empresariales de alto rendimiento.
Trataremos algunos conceptos como vistas (VIEW), como consultas almacenadas sobre las cuales luego podremos realizar consultas como si fuesen tablas de registros y también TRIGGER, que son como procedimientos que se asocian a un evento en las tablas, funciones almacenadas y procedimientos almacenados.
Vistas
Se definen para facilitar y restringir el acceso a los datos de las tablas a usuarios limitados.
La estructura es estática y se hace en tiempo de creación: los futuros campos / cambios sobre las tablas no se reflejan en la vista.
Entonces si una vista tiene un SELECT * FROM tabla y después de definirla añadimos un campo a la tabla original, no lo veremos en la vista.
Si después cambiamos la definición de algún campo de la tabla original entonces se generará un error/warning al utilizarla pues seguramente tendrá que truncar valores: los campos eliminados los pasará a NULL.
Un ejemplo de una vista para ver las ventas por vendedor:
CREATE VIEW Ventasporvendedor AS SELECT idvendedor SUM (cantidad * precio) total FROM pedidos GROUP by idvendedor ***** BY total DESC
Trigger
Son procedimientos almacenados asociados a una tabla concreta que se ejecutan en un momento anterior o posterior a una transacción explícita, y que ejecutan su código por cada registro afectado por la transación. No se pueden invocar explícitamente, porque su ejecución está asociada a una tabla/transacción/tiempo.
También se conocen como desencadenadores, disparadores o procedimientos almacenados especiales.
Ejemplo antes de insertar una venta verifico si el producto esta disponible en stock, el evento insert dispara el trigger verstock automáticamente.
CREATE TRIGGER verstock BEFORE INSERT ON Ventas FOR EACH ROW BEGIN DECLARE idproducto INT; IF (idproducto) THEN SELECT stock FROM productos where id=idproducto; END IF; END;
Procedimientos almacenados
Los procedimientos almacenados y funciones son nuevas funcionalidades de la versión de MySQL 5.0.
Un procedimiento almacenado es un conjunto de comandos SQL que pueden almacenarse en el servidor. Una vez que se hace, los clientes no necesitan relanzar los comandos individuales pero pueden en su lugar referirse al procedimiento almacenado.
CREATE PROCEDURE Graba_Venta (IN tipoventa INTEGER) BEGIN DECLARE tipo CHAR(10); IF tipoventa = 1 THEN SET tipo = Minorista'; ELSE SET tipo = 'Mayorista'; END IF; INSERT INTO ventas (tipo) VALUES (tipo); END
Luego se invoca de la siguiente manera
CALL Graba_venta(1)
Otro ejemplo de procedimiento almacenados
CREATE PROCEDURE ProcedimientoInsertar ( in Nombre varchar(50), in Telefono varchar(50) ) BEGIN insert into contactos(nombre,telefono) values(Nombre,Telefono); END
Funciones
las funciones almacenadas de mysql son similares a los procedimientos almacenados: son conjunto de comandos que pueden almacenarse en un servidor.
Las funciones están pensadas para devolver parámetros, las funciones pueden ser llamadas dentro de sentencias sql como select, insert, etc. Las funciones no pueden devolver consultas sql, solo sirven para realizar tareas donde necesitemos realizar algún tratamiento de datos, calculo o conversiones.
Por ejemplo:
CREATE FUNCTION descuento(precio, procentaje FLOAT) RETURNS FLOAT DETERMINISTIC BEGIN DECLARE importedescuento FLOAT; SET importedescuento = precio*porcentaje/100; RETURN importedescuento; END $$