Create a trigger that updates a column on one table when a column in another table is updated(创建一个触发器,当另一个表中的列更新时更新一个表上的列)
问题描述
我有两张桌子
订单(ID、日期、备注)
Order(id, date, note)
和
交货(ID、备注、日期)
Delivery(Id, Note, Date)
我想创建一个触发器,当 Order 中的日期更新时,它会更新 Delivery 中的日期.
I want to create a trigger that updates the date in Delivery when the date is updated in Order.
我正在考虑做类似的事情
I was thinking to do something like
CREATE OR REPLACE TRIGGER your_trigger_name
BEFORE UPDATE
ON Order
DECLARE
BEGIN
UPDATE Delivery set date = ??? where id = ???
END;
如何获取日期和行 ID?
How do I get the date and row id?
谢谢
推荐答案
如何获取日期和行 ID?
How do i get the date and row id?
假设这些是您的 ORDER 表中名为 DELIVERY_DATE 和 ID 的列,您的触发器应如下所示:
Assuming these are columns on your ORDER table called DELIVERY_DATE and ID your trigger should look something like this:
CREATE OR REPLACE TRIGGER your_trigger_name
BEFORE UPDATE ON Order
FOR EACH ROW
BEGIN
if :new.delivery_date != :old.delivery_date
then
UPDATE Delivery d
set d.delivery_date = :new.delivery_date
where d.order_id = :new.id;
end if;
END;
注意 FOR EACH ROW 子句:它是从单个行引用值所必需的.我使用了一个 IF 构造来测试是否在交付时执行更新.如果触发器中没有其他逻辑,则可以这样编写...
Note the FOR EACH ROW clause: that is necessary to reference values from individual rows. I have used an IF construct to test whether to execute the UPDATE on Delivery. If you have no other logic in your trigger you could write it like this...
CREATE OR REPLACE TRIGGER your_trigger_name
BEFORE UPDATE OF delivery_date ON Order
FOR EACH ROW
BEGIN
UPDATE Delivery d
set d.delivery_date = :new.delivery_date
where d.order_id = :new.id;
END;
<小时>
我已经回答了您提出的问题,但顺便说一句,我要指出您的数据模型不是最佳的.正确规范化的设计只会将 DELIVERY_DATE 保存在一张表上:DELIVERY 似乎是它的合乎逻辑的位置.
I have answered the question you asked but, as an aside, I will point out that your data model is sub-optimal. A properly normalized design would hold DELIVERY_DATE on only one table: DELIVERY seems teh logical place for it.
这篇关于创建一个触发器,当另一个表中的列更新时更新一个表上的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:创建一个触发器,当另一个表中的列更新时更新一个表上的列


- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- SQL 临时表问题 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01