mysql - 在 MySQL 5.6 中使用触发器每次插入目标表后,将一列从源表拉到另一个表
问题描述
嗨,我有两个表实验和结果。我想创建一个触发器,这样每当我在 Result 表中插入一行时,它应该拉取“Experiment”表中存在的最新“Experiment_Name”并拉入名为“Experiment_Name”的“Result”表的列中。
EXPERIMENT TABLE
Experiment_id(auto_incremented) Exp_name
1 abc
RESULT TABLE
Result_id Exp_Name Exp_id
1 abc 1
2 abc 1
3 abc 1
**New Entry Exp name - xyz**
EXPERIMENT TABLE
Experiment_id(auto_incremented) Exp_name
1 abc
2 xyz
RESULT TABLE
Result_id Experiment_id Experiment_name
1 1 abc
2 1 abc
3 1 abc
4 2 xyz
5 2 xyz
6 2 xyz
我知道如何提取最近的 Experiment_id 但我无法提取最近的“Exp_Name”
查询最近有效的 Experiment_id。
CREATE DEFINER=`new`@`%` TRIGGER `worksheet`.`TestResult_BEFORE_INSERT` BEFORE INSERT ON `TestResult` FOR EACH ROW
set new.Experiment_id = (select max(Experiment_id) from TestExperiment)
我尝试提取最近的 Experiment_Name
CREATE DEFINER=`new`@`%` TRIGGER `worksheet`.`TestResult_BEFORE_INSERT_1` BEFORE INSERT ON `TestResult` FOR EACH ROW
set new.Experiment_Name = (select Experiment_Name from TestExperiment where Experiment_id = max(Experiment_id))
不起作用,引发语法错误。
我正在使用 mysql 5.6。请哪位大神帮帮我,谢谢!!
解决方案
使用ORDER BY ... LIMIT 1
查询:
CREATE TRIGGER `TestResult_BEFORE_INSERT_1`
BEFORE INSERT ON `TestResult` FOR EACH ROW
set new.Experiment_Name = (
select Experiment_Name
from TestExperiment
order by Experiment_id desc
limit 1
);
如果要复制两个值(Experiment_id
和Experiment_Name
),可以使用SELECT ... INTO ...
语法将值存储到局部变量中,然后将它们复制到所需的列中:
DELIMITER //
CREATE TRIGGER `TestResult_BEFORE_INSERT`
BEFORE INSERT ON `TestResult` FOR EACH ROW
BEGIN
DECLARE v_id INT;
DECLARE v_name TEXT;
SELECT Experiment_id, Experiment_Name INTO v_id, v_name
FROM TestExperiment
ORDER BY Experiment_id DESC
LIMIT 1;
SET new.Experiment_id = v_id;
SET new.Experiment_Name = v_name;
END //
DELIMITER ;
请参阅db-fiddle上的演示
推荐阅读
- javascript - 如何将数组变量值返回给javascript上的另一个函数?
- docker - 我们的 GCP docker 实例已启动并正在运行,但是我们无法连接到 GreenPlum
- ios - 如何解决 Flutter 应用上的问题 iOS 部分?
- yarnpkg - 退出代码:1 命令:(node install/libvips && node install/dll-copy && prebuild-install) || (节点 gyp 重建 && 节点安装/dll 复制)
- javascript - 带有 webpack ES6 导入的可编程预取/预加载 javascript
- javascript - Material UI - 如何在主题级别为选中和未选中状态覆盖 Switch 组件的轨道样式?
- mysql - 如何防止 gorm 将自定义整数类型转换为字符串?
- python - 有什么方法可以将零添加到十?
- excel - 运行宏时粘贴今天的日期以及新的数据范围
- java - 将数据添加到 firebase 数据库列表的最佳方法