MySQL - Error #1235

 
Vista:
sin imagen de perfil

Error #1235

Publicado por Ronaldo (8 intervenciones) el 09/06/2017 22:23:26
Hola busco una solución para este error

MySQL ha dicho: #1235 - Esta versión de MariaDB no soporta todavia 'multiple triggers with the same action time and event for one table'

El problema no es de phpMyAdmin. PhpMyAdmin es sólo una interfase web para trabajoo con bases de datos.
El tema es que en MySQL no puedes definir más de un trigger en una tabla para el mismo evento. MySQL no sabría cuál trigger ejecutar y en qué circunstancias y busco como ejecutarlo en un mismo trigger estos codigos en uno , ayuda por favor.

CREATE TRIGGER ACTUALIZA_STATUS AFTER INSERT ON almacen FOR EACH ROW

BEGIN
UPDATE salida SET status='R' WHERE status='N';

END

CREATE TRIGGER actualiza_entrada AFTER INSERT ON almacen FOR EACH ROW

BEGIN
UPDATE entrada SET status='R' WHERE status='N';

END
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Error #1235

Publicado por leonardo_josue (414 intervenciones) el 09/06/2017 23:01:01
Hola Ronaldo/Rafa o como sea que te llames :P:

Otra vez, el error es bastante claro y te dice que NO PUEDES TENER MULTIPLES TRIGGER'S SOBRE EL MISMO EVENTO DE UNA TABLA...

Mucho ojo, esto no quiere decir que no puedas actualizar dos o más tablas dentro de un trigger, siempre y cuando estas actalizaciones NO SEAN SOBRE LA MISMA TABLA QUE ESTÁ ACTIVANDO EL TRIGGER...

En tu caso veo que tienes tres tablas, ALMACEN, ENTRADA, Y SALIDA, y lo que quieres hacer es CAMBIAR EL ESTATUS DE LAS TABLAS ENTRADA Y SALIDA CUANDO SE INSERTE UN REGISTRO EN ALMACEN... entonces, en lugar de hacer dos triggers, pones ambos UPDATES en el mismo:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> DELIMITER $$
mysql> DROP TRIGGER `Actualiza_status`$$
Query OK, 0 rows affected (0.00 sec)
 
mysql> CREATE TRIGGER `Actualiza_status` AFTER INSERT ON `almacen`
    ->     FOR EACH ROW BEGIN
    ->       UPDATE salida SET STATUS='R' WHERE STATUS='N';
    ->       UPDATE entrada SET STATUS='R' WHERE STATUS='N';
    ->     END;
    -> $$
Query OK, 0 rows affected (0.10 sec)
 
mysql> DELIMITER ;

Veamos entonces un ejemplo, supongamos que tienes estas tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> SELECT * FROM almacen;
Empty set (0.00 sec)
 
mysql> SELECT * FROM entrada;
+------+--------+
| id   | status |
+------+--------+
|    1 | N      |
|    2 | R      |
+------+--------+
2 rows in set (0.00 sec)
 
mysql> SELECT * FROM salida;
+------+--------+
| id   | status |
+------+--------+
|    1 | N      |
|    2 | R      |
+------+--------+
2 rows in set (0.00 sec)

es decir,

-> NO HAY REGISTROS EN ALMACEN,
-> Hay un registro en ENTRADA con el estatus N que debería cambiar a R
-> y un registro en SALIDA también con un registro con estatus N que debería cambiar a R

entonces hacemos un INSERT y verificamos cómo quedan las tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql> INSERT INTO almacen VALUES (1, 'uno');
Query OK, 1 row affected (0.08 sec)
 
mysql> SELECT * FROM almacen;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
+------+-------------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM entrada;
+------+--------+
| id   | status |
+------+--------+
|    1 | R      |
|    2 | R      |
+------+--------+
2 rows in set (0.00 sec)
 
mysql> SELECT * FROM salida;
+------+--------+
| id   | status |
+------+--------+
|    1 | R      |
|    2 | R      |
+------+--------+
2 rows in set (0.00 sec)

Es decir, el TRIGGER no tienen ningún problema en actualizar tantas tablas como quieras.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar