Попытка вытянуть последний обновленный row_id из исходной таблицы в другую таблицу после каждой вставки в таблицу назначения в MySQL 5.6 с помощью триггера - PullRequest
0 голосов
/ 27 сентября 2019

Привет, у меня есть две таблицы Experiment и Sample.Я хочу создать триггер так, чтобы всякий раз, когда я вставлял строку в таблицу Sample, он извлекал недавний «Experiment_id», сгенерированный MySQL в таблице «Experiment», и извлекал столбец таблицы «Sample» с именем «Experiment_id».

EXPERIMENT TABLE
Experiment_id(auto_incremented)  Exp_name
1                                  abc

SAMPLE TABLE
Sample_id   Experiment_id sample_name
1              1                    
2              1           
3              1                    
4              1           
5              1           
6              1

**New Entry Exp name - xyz**

EXPERIMENT TABLE
Experiment_id(auto_incremented)  Exp_name
1                                  abc
2                                  xyz

SAMPLE TABLE
Sample_id   Experiment_id sample_name
1              1                    
2              1           
3              1                    
4              1           
5              1           
6              1
7              2           
8              2          
9              2                    
10             2 

Таким образом, идентификатор образца '1-6' генерируется, когда в таблице 'Experiment' существует только 'Experiment_id' 1, а идентификатор образца '7-10' генерируется, когда эксперимент_ид 2 является автоматическимгенерируется MySQL.

Я использую MySQL 5.6.Пожалуйста, кто-нибудь, помогите мне, спасибо !!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Я бы не использовал триггер для этого.Просто используйте подзапрос в операторе INSERT:

INSERT INTO SAMPLE (sample_name, Experiment_id) VALUES (
  'sample name',
  (SELECT MAX(Experiment_id) FROM EXPERIMENT)
)

Если вы хотите сделать это с триггером, попробуйте это:

create trigger SAMPLE_before_insert before insert on SAMPLE FOR EACH ROW 
  set new.Experiment_id = (select max(Experiment_id) from EXPERIMENT);
0 голосов
/ 27 сентября 2019

Для отслеживания вставки и обновления необходимо использовать оба триггера:

 DROP TRIGGER IF EXISTS trigger_experiment_after_insert;
  DELIMITER $$

  CREATE  TRIGGER trigger_experiment_after_insert
  AFTER INSERT ON experiment FOR EACH ROW
  BEGIN
    -- sample_id will be auto_increment
    INSERT INTO sample_log SET experiment_id = NEW.experiment_id;
  END; $$

  DELIMITER ;

Использовать триггер обновления для отслеживания обновления:

 DROP TRIGGER IF EXISTS trigger_experiment_after_update;
  DELIMITER $$

  CREATE  TRIGGER trigger_experiment_after_update
  AFTER UPDATE ON experiment FOR EACH ROW
  BEGIN
    -- sample_id will be auto_increment
    INSERT INTO sample_log SET experiment_id = OLD.experiment_id;
  END; $$

  DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...