您好,我有两个表格实验和示例。 我想创建一个触发器,以便每当我向Sample表中插入一行时,都应将MySQL在“ Experiment”表中生成的最新“ Experiment_id”拉入名为“ Experiment_id”的“ Sample”表的列中。
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
因此,当“ Experiment”表中仅存在“ Experiment_id” 1时,将生成Sample ID“ 1-6”,而当MySQL自动生成了Experiment_id 2时,将生成Sample_id“ 7-10”。 >
我正在使用mysql 5.6。请有人帮助我,谢谢!
答案 0 :(得分:0)
您将必须同时使用触发器来跟踪插入和更新:
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 ;
答案 1 :(得分:0)
我不会为此使用触发器。只需在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);