Можно ли вставить значение из одной таблицы в другую на основе значения с помощью триггера? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть таблица с именем работника.У меня есть две другие таблицы с именем hrm, accounting.Я хочу вставить сотрудника в таблицу hrm и бухгалтерию в соответствии с его отделами.

CREATE TABLE employees (
employee_id INT(4) NOT NULL AUTO_INCREMENT,
employee_first_name VARCHAR(30) NOT NULL,
employee_last_name VARCHAR(30) NOT NULL,
employee_department VARCHAR(30) NOT NULL,
PRIMARY KEY (employee_id));

в соответствии с employee_department, я хочу вставить этого сотрудника в эту конкретную таблицу.

CREATE TABLE hrm (
employee_id INT(4),
employee_designation VARCHAR(20),
FOREIGN KEY (employee_id)
    REFERENCES employees (employee_id)
    ON DELETE CASCADE);

CREATE TABLE accounting (
employee_id INT(4),
employee_designation VARCHAR(20),
FOREIGN KEY (employee_id)
    REFERENCES employees (employee_id)
    ON DELETE CASCADE);

если employee_department - это hrm, я хочу, чтобы этот сотрудник был вставлен в таблицу hrm, как я могу это сделать с помощью триггера mysql или хранимой процедуры?

1 Ответ

0 голосов
/ 17 октября 2018

Попробуйте что-то вроде этого:

CREATE DEFINER = CURRENT_USER TRIGGER `employees_AFTER_INSERT` AFTER INSERT ON `employees` 
FOR EACH ROW
BEGIN

  IF NEW.employee_department = 'hrm' THEN
      INSERT INTO hrm 
        (employee_id, employee_designation) 
      VALUES
        (NEW.employee_id, /*whatever you add here*/);
  END IF;

END

Я объясню некоторые ключевые моменты:

  • В триггере AFTER INSERT вы можете получить вставленное значение, используя NEW,Итак, здесь: NEW.employee_department равно вставленному значению employee_department нового сотрудника, то же самое для NEW.employee_id (для триггера AFTER DELETE вы можете использовать OLD, а для AFTER UPDATE у вас есть NEW для обновленногозначение и OLD для значения перед обновлением)
  • В триггере MySQL вы можете добавить условие: здесь я проверяю, равен ли новый employee_department нового сотрудника "hrm": если ДАЗатем сделайте вставку в таблицу hrm, иначе триггер ничего не сделает
  • Если вы хотите сделать то же самое для «учета», логика будет такой же
...