martes, 10 de diciembre de 2013
miércoles, 29 de mayo de 2013
¿Como implementar un Trigger en MySQL?
mysql> create database dbclientes;
Query OK, 1 row affected (0.00 sec)
mysql> insert into tbclientes(codigo_cli,nombre_cli,trabajo_cli) values (1,'Edith Martinez Hernandez','Informatica'),(2,'Juan Carmona Hernandez','Cont
mysql> create table tbcopiaclientes(codigo_cop int primary key,nombre_cop varchar(50),trabajo_cop varchar(50),usuario_cop varchar(50),modificado_cop d
mysql> use dbclientes;
Database changed
mysql> create table tbclientes(codigo_cli int primary key,nombre_cli varchar(250),trabajo_cli varchar(250));
Query OK, 0 rows affected (0.03 sec)
mysql> describe tbclientes;
3 rows in set (0.00 sec)
mysql> insert into tbclientes(codigo_cli,nombre_cli,trabajo_cli) values (1,'Edith Martinez Hernandez','Informatica'),(2,'Juan Carmona Hernandez','Cont
rol de la Contaminacion'),(3,'Fernanda Lopez Perez','Productividad');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from tbclientes;
3 rows in set (0.00 sec)
mysql> create table tbcopiaclientes(codigo_cop int primary key,nombre_cop varchar(50),trabajo_cop varchar(50),usuario_cop varchar(50),modificado_cop d
atetime);
Query OK, 0 rows affected (0.03 sec)
mysql> describe tbcopiaclientes;
5 rows in set (0.02 sec)
mysql> delimiter //
mysql> create trigger nuevocliente after insert on tbclientes for each row
-> begin
-> insert into tbcopiaclientes(codigo_cop,nombre_cop,trabajo_cop,usuario_cop,modificado_cop) values (new.codigo_cli,new.nombre_cli,new.trabajo_cli
,current_user(),now());
-> end//
Query OK, 0 rows affected (0.02 sec)
mysql> delimiter ;
mysql> show triggers;
1 row in set (0.01 sec)
mysql> insert into tbclientes() values (4,'Carlos Manuel Zavala','Informatica');
Query OK, 1 row affected (0.03 sec)
mysql> select * from tbclientes;
4 rows in set (0.00 sec)
mysql> select * from tbcopiaclientes;
1 row in set (0.00 sec)
mysql> drop trigger nuevocliente;
Query OK, 0 rows affected (0.00 sec)
mysql> drop database dbclientes;
Query OK, 2 rows affected (0.00 sec)
Vistas en una Base de Datos
Obsevaremos una diferentes forma de ver datos en una base datos.
mysql> show tables;
mysql> select * from vista_alumnos;
mysql> insert into alumnos values(912,'Fabian','Mora Sanchez','Cuarto','COBD',10,9,8);
mysql> select * from usuarios;
mysql> create database notas;
Query OK, 1 row affected (0.15 sec)
mysql> use notas;
Database changed
mysql> create table alumnos(matricula int not null primary key,nombre varchar(30),apellidos varchar(50),semestre varchar(20),modulo varchar(50),calif_1 int,calif_2 int,calif_3 int);
Query OK, 0 rows affected (0.16 sec)
mysql> insert into alumnos(matricula,nombre,apellidos,semestre,modulo,calif_1,calif_2,calif_3) values (123,'Edith','Martinez Hernandez','Cuarto','COBD',8,9,10),(456,'Manuel','Zaval
a Contreras','Cuarto','COBD',9,8,7),(678,'Irving','Gonzalez Mena','Cuarto','COBD',7,6,5);
Query OK, 3 rows affected (0.09 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> create view vista_alumnos as select matricula,nombre,apellidos,(calif_1+calif_2+calif_3)/3 as promedio from alumnos;
Query OK, 0 rows affected (0.10 sec)
mysql> show tables;
2 rows in set (0.06 sec)
mysql> select * from vista_alumnos;
3 rows in set (0.04 sec)
mysql> insert into alumnos values(912,'Fabian','Mora Sanchez','Cuarto','COBD',10,9,8);
Query OK, 1 row affected (0.02 sec)
mysql> select * from alumnos;
4 rows in set (0.00 sec)
mysql> select * from vista_alumnos;
4 rows in set (0.00 sec)
mysql> create database biblioteca;
Query OK, 1 row affected (0.00 sec)
mysql> use biblioteca;
Database changed
mysql> create table autor(codigo int not null auto_increment primary key,nombre varchar(30));
Query OK, 0 rows affected (0.09 sec)
mysql> describe autor;
2 rows in set (0.03 sec)
mysql> create table libros(codigo int not null auto_increment primary key,titulo varchar(30),ISBN varchar(30),editorial varchar(30),num_paginas int);
Query OK, 0 rows affected (0.06 sec)
mysql> describe libros;
5 rows in set (0.01 sec)
mysql> create table usuarios(codigo_usuario int not null auto_increment primary key,nombre varchar(30),direccion varchar(50),telefono varchar(30),codigo_ejemplar int);
Query OK, 0 rows affected (0.04 sec)
mysql> describe usuarios;
5 rows in set (0.01 sec)
mysql> create table ejemplares(codigo_ejemplar int not null auto_increment primary key,localizacion varchar(30));
Query OK, 0 rows affected (0.05 sec)
mysql> describe ejemplares;
2 rows in set (0.01 sec)
mysql> insert into usuarios(nombre,direccion,telefono,codigo_ejemplar) values ('Miguel','Ave Signos 23','53221234',3),('Pedro','Calle Tulipanes','54321234',4),('Amanda','Ave. Const
elacion','56432345',5);
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from usuarios;
3 rows in set (0.00 sec)
sábado, 25 de mayo de 2013
Triggers (2 Disparadores)
Podrás ver claramente el procedimiento para agregar dos disparadores (2 trigger´s). Normalmente su uso lo hacemos para Seguridad de la base de Datos.
mysql> create database pruebas_dispara;
Query OK, 1
row affected (0.05 sec)
mysql> use pruebas_dispara;
Database changed
mysql>
create table clientes(id_cliente int not null auto_increment,nombre varch
ar(100),seccion
varchar(20),accion varchar(10) default 'insertado',primary key(i
d_cliente),key(nombre));
Query OK, 0
rows affected (0.48 sec)
mysql>
describe clientes;
4 rows in
set (0.12 sec)
mysql>
insert into clientes (nombre,seccion) values ('miguel','Informatica'), ('
Rosa','comida'),('maria','ropa'),('albert','informatica'),('jordi','comida');
Query OK, 5
rows affected (0.06 sec)
Records:
5 Duplicates: 0 Warnings: 0
mysql>
select * from clientes;
5 rows in
set (0.00 sec)
mysql>
create table auditoria_clientes (id int not null auto_increment,nombre_an
terior varchar(100),seccion_anterior
varchar(20),nombre_nuevo varchar(100),secci
on_nueva varchar(20),usuario varchar(49),modificado
datetime,proceso varchar(10)
,id_cliente
int(4),primary key(id));
9 rows in
set (0.01 sec)
mysql>
delimiter //
mysql>
create trigger inserta_auditoria_clientes
-> after insert on clientes
-> for each row
-> begin
-> insert into
auditoria_clientes(nombre_nuevo, seccion_nueva, usuario, modi
ficado, proceso, id_cliente)
-> values (new.nombre, new.seccion,
current_user(), now(), new.accion, new.i
d_cliente);
-> end;
-> //
Query OK, 0
rows affected (0.06 sec)
mysql>
create trigger modifica_auditoria_clientes
->
before update on clientes
-> for each row
-> begin
-> insert into
auditoria_clientes(nombre_anterior, seccion_anterior, nombre_
nuevo, seccion_nueva, usuario, modificado, id_cliente)
-> values (old.nombre, old.seccion,
new.nombre, new.seccion, current_user(),
now(),new.id_cliente);
-> end;
-> //
Query OK, 0
rows affected (0.17 sec)
mysql>
create trigger elimina_auditoria_clientes
-> after delete on clientes
-> for each row
-> begin
-> insert into auditoria_clientes(nombre_anterior,seccion_anterior,usuario,m
odificado,id_cliente)
->
values(old.nombre,old.seccion,current_user(),now(),old.id_cliente);
-> end;
-> //
Query OK, 0
rows affected (0.01 sec)
mysql>
delimiter ;
mysql>
show triggers;
3 rows in
set (0.06 sec)
mysql>
insert into clientes(nombre,seccion) values ('Edith Martinez','Informatica');
Query OK, 1
row affected (0.20 sec)
mysql>
select * from clientes;
6 rows in
set (0.00 sec)
mysql>
select * from auditoria_clientes;
1 row in
set (0.01 sec)
mysql>
update clientes set nombre='Jordi Apolinar',seccion='Productividad' where
id_cliente=5;
Query OK, 1
row affected (0.07 sec)
Rows
matched: 1 Changed: 1 Warnings: 0
mysql>
select * from clientes;
6 rows in
set (0.00 sec)
mysql>
select * from auditoria_clientes;
2 rows in
set (0.00 sec)
mysql>
delete from clientes where nombre='Edith Martinez';
Query OK, 1
row affected (0.00 sec)
mysql> select * from clientes;
5 rows in
set (0.00 sec)
mysql>
select * from auditoria_clientes;
3 rows in
set (0.00 sec)
Suscribirse a:
Entradas (Atom)