【问题标题】:AFTER INSERT Trigger to insert data into a different table after inserting it into initial tableAFTER INSERT 触发器在将数据插入初始表后将数据插入到不同的表中
【发布时间】:2016-07-30 18:39:41
【问题描述】:

您好,提前感谢您提供的任何帮助!

我为一家电子产品在线商店创建了一个非常简单的数据库。

在其他表中,我有一个用于手动下订单的 tbl_orders(用户手动插入 product_id、单位数量、payment_details_id 等),我想在 tbl_orders 上创建一个 AFTER INSERT 触发器,以发送 order_id(其中是 tbl_order 的 PK) 到名为 purchase_history 的表中。

表 purchase_history 也有一个 purchase_date 列。它的PK是purchase_id,order_id是FK。

我不熟悉触发器,但我在触发器中尝试了各种简单的查询,但没有成功,尽管如果可以这样称呼它,我得到的错误会变得“更好”。

我最后一次尝试是这样的:

  CREATE DEFINER = CURRENT_USER TRIGGER      `onlineshop`.`tbl_orders_AFTER_INSERT` AFTER INSERT ON `tbl_orders` FOR EACH ROW
  BEGIN

  INSERT INTO purchase_history (order_id)
  VALUES (NEW.order_id);

  INSERT INTO purchase_history ( purchase_date )

  VALUES (purchase_date = NOW());


  END

我正在使用 MYSQL Workbench,它非常棒,但有时也有点错误或令人困惑。

【问题讨论】:

  • 上次尝试的错误是什么?

标签: mysql database triggers workbench


【解决方案1】:
CREATE TRIGGER `tbl_orders_AFTER_INSERT` AFTER INSERT ON `tbl_orders` 
FOR EACH ROW BEGIN

INSERT INTO purchase_history (order_id, purchase_date) VALUES (NEW.order_id, NOW());

END;

我猜这样你的插入会更有意义,因为你希望这两个数据在历史记录的同一行中。

如果需要 DEFINER 行:

CREATE DEFINER = CURRENT_USER 
TRIGGER stuff.`tbl_orders_AFTER_INSERT` AFTER INSERT ON `tbl_orders` 
FOR EACH ROW 
INSERT INTO purchase_history (order_id, purchase_date) VALUES (NEW.order_id, NOW());

我尝试了一些东西,mysql在创建触发器时似乎不喜欢beginendDEFINER = ...。尽管触发器不需要BEGINEND,因此从语句中删除它们没有问题。

【讨论】:

    猜你喜欢
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多