Tengo los siguientes tres tablas en mysql base de datos denominada «My_Company»

mysql> desc employee;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| Id       | int(11)     | NO   | PRI | 0       |       |
| Emp_Name | varchar(20) | YES  |     | NULL    |       |
| Division | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> desc tools;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| Division  | varchar(20) | NO   | PRI |         |       |
| Tool_No   | int(11)     | NO   | PRI | 0       |       |
| Tool_Name | varchar(20) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> desc employee_tools;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| Id      | int(11)     | YES  |     | NULL    |       |
| Tool    | varchar(20) | YES  |     | NULL    |       |
| Status  | varchar(20) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
-------------------------------------------------------------------------------------

Necesito insertar las filas de herramientas de tabla para la tabla employee_tools cuando se inserta una nueva fila en la tabla empleado.

Ejemplo, si inserta una nueva fila a los empleados los valores como (‘1′,’Michel’,’Red’)
a continuación, el trigger debe encontrar la tool_names de la división de herramientas de tabla
y agregar las filas para employee_tools

mysql> insert into employee values('1','Michel','Network');
Query OK, 1 row affected (0.05 sec)
mysql> select * from employee;
+----+----------+----------+
| Id | Emp_Name | Division |
+----+----------+----------+
|  1 | Michel   | Network  |
+----+----------+----------+
1 row in set (0.00 sec)
mysql> select * from tools;
+----------+---------+--------------+
| Division | Tool_No | Tool_Name    |
+----------+---------+--------------+
| Network  |       1 | Crimper      |
| Network  |       2 | LAN Tester   |
| Network  |       3 | Sleaver      |
| Hardware |       1 | Screw drv    |
| Hardware |       2 | Power Tester |
| Hardware |       3 | Plyer        |
+----------+---------+--------------+
3 rows in set (0.00 sec)
mysql> select * from employee_tools;
+------+------------+------------+
| Id   | Tool       |Status      |
+------+------------+------------+
|    1 | Crimper    |Working     |
|    1 | LAN Tester |working     |
|    1 | Sleaver    |working     |
+------+------------+------------+
3 rows in set (0.00 sec)

el estado se actualizará de forma manual, como el de abajo…

+------+------------+------------+
| Id   | Tool       |Status      |
+------+------------+------------+
|    1 | Crimper    |Working     |
|    1 | LAN Tester |Not working |
|    1 | Sleaver    |Broken      |
+------+------------+------------+
  • ¿Por qué tienes el employee_tools mesa en todo? Usted puede solicitar que la información sea fácilmente sin necesidad de que mesa. No veo ningún sentido en su pregunta.
InformationsquelleAutor dinesh.mic | 2013-04-08

2 Comentarios

  1. 5

    Simple como eso:

    DROP TRIGGER IF EXISTS trg_emp_tools;
    CREATE TRIGGER trg_emp_tools AFTER INSERT ON employee
    FOR EACH ROW 
    BEGIN
    INSERT INTO employee_tools (Id, Tool, Status)
    SELECT NEW.Id, tools.Tool_Name, 'Working'
    FROM
    tools
    WHERE Division = NEW.Division;
    END;
    • cómo escribir un disparador como este para el fuego cuando la actualización de los empleados.división
    • Por lo general, funciona como esta en stackoverflow. Tienes un problema, intenta algo, usted está atascado, usted publique lo que he probado y donde está el problema, y lo que el resultado deseado es -> estaremos encantados de ayudarle. Es difícil decir lo que usted ni siquiera quiere hacer, cuando usted acaba de escribir «de fuego cuando la actualización de los empleados.la división».
  2. 0

    Los que la gente usa phpmyadmin, usted necesita agregar delimitador en el gatillo:

    delimiter $$
    DROP TRIGGER IF EXISTS copy_trig;
    CREATE TRIGGER copy_trig AFTER INSERT ON test
    FOR EACH ROW 
    BEGIN
    insert into test_archive
    select * from test where id = New.id;
    END$$
    delimiter ;

Dejar respuesta

Please enter your comment!
Please enter your name here