Domingo 22 de Diciembre de 2024, 17:42
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Bases de Datos
»
MySQL
(Moderador:
F_Tanori
) »
Los Triggers
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Los Triggers (Leído 2310 veces)
Meta
Miembro MUY activo
Mensajes: 140
Los Triggers
«
en:
Jueves 9 de Julio de 2009, 13:10 »
0
Hola:
Estoy aprendiendo los trigger, la verdad me cuesta manejarlo.
He creado una base de datos llamado
prueba01
. Y dos tablas llamada
dispositivos
y
datos
.
Sospecho que tengo mal diseñado la tabla datos para que el trigger se pueda cumplir y necesito ayuda.
dispositivos
datos
Los códigos de creación de la tabla dispisitivos es:
Código: Text
--
-- Base de datos: `prueba01`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `dispositivos`
--
CREATE TABLE IF NOT EXISTS `dispositivos` (
`ID` int(11) NOT NULL,
`nombre` varchar(30) NOT NULL,
`estado` tinyint(3) unsigned NOT NULL DEFAULT '0',
`descripcion` varchar(200) NOT NULL,
PRIMARY KEY (`ID`),
FULLTEXT KEY `nombre` (`nombre`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Volcar la base de datos para la tabla `dispositivos`
--
INSERT INTO `dispositivos` (`ID`, `nombre`, `estado`, `descripcion`) VALUES
(1, 'RELE 1', 0, 'Motor 1'),
(2, 'RELE 2', 0, 'Motor 2'),
(3, 'RELE 3', 0, 'Alarma'),
(4, 'RELE 4', 0, 'WebCam');
Tabla datos es:
Código: Text
--
-- Base de datos: `prueba01`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `datos`
--
CREATE TABLE IF NOT EXISTS `datos` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`RELE_1` tinyint(4) NOT NULL,
`RELE_2` tinyint(4) NOT NULL,
`RELE_3` tinyint(4) NOT NULL,
`RELE_4` tinyint(4) NOT NULL,
`FECHA_HORA` datetime NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=13 ;
--
-- Volcar la base de datos para la tabla `datos`
--
INSERT INTO `datos` (`ID`, `RELE_1`, `RELE_2`, `RELE_3`, `RELE_4`, `FECHA_HORA`) VALUES
(1, 0, 0, 0, 0, '2009-07-09 11:17:34'),
(2, 1, 0, 0, 0, '2009-07-09 11:17:35'),
(3, 0, 0, 0, 0, '2009-07-09 11:17:36'),
(4, 1, 0, 0, 0, '2009-07-09 11:17:36'),
(5, 0, 0, 0, 0, '2009-07-09 11:17:37'),
(6, 1, 0, 0, 0, '2009-07-09 11:17:37'),
(7, 1, 1, 0, 0, '2009-07-09 11:17:37'),
(8, 1, 1, 1, 0, '2009-07-09 11:17:38'),
(9, 1, 1, 1, 1, '2009-07-09 11:17:38'),
(10, 1, 1, 1, 0, '2009-07-09 11:17:39'),
(11, 1, 1, 0, 0, '2009-07-09 11:17:39'),
(12, 1, 0, 0, 0, '2009-07-09 11:17:39');
Sigo sospechando que hay que hacer diseñar mejor la tabla datos para que el trigger funcione. ¿En qué consiste estas tablas?
Consiste en que la tabla
dispositivos
se altera cualquier dato en el campo
estado
, se la tabla
datos
como auditoría o minotore o logs.
Si modifico a uno el ID=1 del campo estado a 1 que antes estaba a 0.
Se cambia a 1 como muestra en la siguiente imagen.
Desde ahí tiene que activarse el supuesto triggers que no se como se hace. El resultado es que el campo RELE_1 se activa a 1 como ocurrió en la tabla
dispositivos
.
Siguiendo con el ejemplo. Vamos a modificar el ID=3 del campo
estado
de la tabla
dispositivos
a 1. Quedaría como muestra abajo.
Ya que el supuesto trigger ha detectado un cambio en cualquier campo de RELE_1 al RELE_4, pues actualiza una nueva ID en la tabla datos que ahora se llama ID=2 y queda como muestra en la imagen siguiente.
Así seguirá la tabla
datos
creciendo mientras el trigger detecte cualquier modificación de la tabla
dispositivos
en el campo
estado
.
Espero haber explicado bien el tema. Que consiste en hacer un triggers ser capaz de lo que pido porque no se hacerlo. Cualquier duda que no entienda me avisa para explicarlo lo mejor posible para que lo entiendan.
Un cordial saludo.
Tweet
lair
Miembro MUY activo
Mensajes: 213
Nacionalidad:
Re: Los Triggers
«
Respuesta #1 en:
Miércoles 15 de Julio de 2009, 20:01 »
0
hola:
en primera los trigger se designan sobre tablas (completas) y no sobre campos.
la segunda, puedes publicar el codigo de tu trigger, asi podriamos ayudarte mejor
Meta
Miembro MUY activo
Mensajes: 140
Re: Los Triggers
«
Respuesta #2 en:
Miércoles 15 de Julio de 2009, 21:52 »
0
Ya me ha salido.
Código: SQL
-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 15-07-2009 a las 20:52:13
-- Versión del servidor: 5.1.36
-- Versión de PHP: 5.2.10
SET
SQL_MODE
=
"NO_AUTO_VALUE_ON_ZERO"
;
--
-- Base de datos: `pic_remoto`
--
CREATE
DATABASE
`pic_remoto`
DEFAULT
CHARACTER
SET
latin1
COLLATE
latin1_spanish_ci;
USE
`pic_remoto`
;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `dispositivos`
--
CREATE
TABLE
IF
NOT
EXISTS
`dispositivos`
(
`ID`
INT
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`nombre`
VARCHAR
(
6
)
COLLATE
latin1_spanish_ci
NOT
NULL
,
`estado`
tinyint
(
2
)
NOT
NULL
,
`descripcion`
VARCHAR
(
20
)
COLLATE
latin1_spanish_ci
NOT
NULL
,
PRIMARY
KEY
(
`ID`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
latin1
COLLATE
=
latin1_spanish_ci
AUTO_INCREMENT
=
5
;
--
-- (Evento) desencadenante `dispositivos`
--
DROP
TRIGGER
IF
EXISTS
`pic_remoto`
.
`logestado`
;
DELIMITER
//
CREATE
TRIGGER
`pic_remoto`
.
`logestado`
AFTER
UPDATE
ON
`pic_remoto`
.
`dispositivos`
FOR
EACH
ROW
BEGIN
DECLARE
Rele1
INT
;
DECLARE
Rele2
INT
;
DECLARE
Rele3
INT
;
DECLARE
Rele4
INT
;
SET
Rele1
=
(
SELECT
estado
FROM
dispositivos
WHERE
nombre
LIKE
'RELE 1'
)
;
SET
Rele2
=
(
SELECT
estado
FROM
dispositivos
WHERE
nombre
LIKE
'RELE 2'
)
;
SET
Rele3
=
(
SELECT
estado
FROM
dispositivos
WHERE
nombre
LIKE
'RELE 3'
)
;
SET
Rele4
=
(
SELECT
estado
FROM
dispositivos
WHERE
nombre
LIKE
'RELE 4'
)
;
INSERT
INTO
log
(
RELE_1
,
RELE_2
,
RELE_3
,
RELE_4
,
USUARIO
,
FECHA_HORA
)
VALUES
(
Rele1
,
Rele2
,
Rele3
,
Rele4
,
USER
(
)
,
NOW
(
)
)
;
END
//
DELIMITER ;
--
-- Volcar la base de datos para la tabla `dispositivos`
--
INSERT
INTO
`dispositivos`
(
`ID`
,
`nombre`
,
`estado`
,
`descripcion`
)
VALUES
(
1
,
'RELÉ 1'
,
0
,
'descripcion1'
)
,
(
2
,
'RELÉ 2'
,
0
,
'descripcion2'
)
,
(
3
,
'RELÉ 3'
,
0
,
'descripcion3'
)
,
(
4
,
'RELÉ 4'
,
0
,
'descripcion4'
)
;
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `log`
--
CREATE
TABLE
IF
NOT
EXISTS
`log`
(
`ID`
INT
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`RELE_1`
tinyint
(
1
)
NOT
NULL
,
`RELE_2`
tinyint
(
1
)
NOT
NULL
,
`RELE_3`
tinyint
(
1
)
NOT
NULL
,
`RELE_4`
tinyint
(
1
)
NOT
NULL
,
`USUARIO`
VARCHAR
(
40
)
COLLATE
latin1_spanish_ci
NOT
NULL
,
`FECHA_HORA`
datetime
NOT
NULL
,
PRIMARY
KEY
(
`ID`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
latin1
COLLATE
=
latin1_spanish_ci
AUTO_INCREMENT
=
9
;
--
-- Volcar la base de datos para la tabla `log`
--
Gracias.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Bases de Datos
»
MySQL
(Moderador:
F_Tanori
) »
Los Triggers