【问题标题】:Create MySQL Trigger on Insert在插入时创建 MySQL 触发器
【发布时间】:2014-02-12 21:22:21
【问题描述】:

目前我有 2 张桌子。

表 1 = myit_table_customer - 此表包含客户名称、客户 ID、客户电子邮件

表 2 = myit_table_work_order - 此表包含客户姓名、客户 ID、客户电子邮件、票号、时间、日期等...

我当前的问题是,每当我创建工作订单时,它都会插入客户姓名、客户电子邮件、时间、票号 - 自动增量和日期,但它会插入 (0) 作为客户 ID。

我想在数据库中创建一个触发器 IF 插入 new.email address = myit_table_customer 中的电子邮件地址,然后从 myit_table_customer 获取该客户的客户 ID 并将其分配给 myit_table_work_order 中的 Customer_ID

这是我目前所拥有的:

CREATE TRIGGER tickets AFTER INSERT ON myit_table_work_order

FOR EACH ROW

  BEGIN

    IF CUSTOMER_ID IS NULL (SELECT CUSTOMER_ID FROM myit_table_customer WHERE CUSTOMER_ID = NEW.CUSTOMER_ID) THEN

      INSERT INTO myit_table_work_order (CUSTOMER_ID) VALUES (NEW.CUSTOMER_ID);

    END IF;

再次感谢。

【问题讨论】:

  • 不能将数据写入同一张表
  • 这是两张不同的桌子。让它与 fthiella 的以下代码一起工作,但如果用户不存在,则会遇到问题。

标签: mysql sql


【解决方案1】:

如果我正确理解您的问题,我认为您需要这样的触发器:

CREATE TRIGGER tickets
BEFORE INSERT ON myit_table_work_order
FOR EACH ROW
  SET NEW.customer_id = (SELECT id
                         FROM myit_table_customer
                         WHERE email=NEW.email);

请看小提琴here

【讨论】:

  • 嗨,非常感谢!我已经对其进行了修改以使用我的表格和列,并且效果很好。在插入到 myit_table_work_order 之前为每行集 NEW.CUSTOMER_ID =(SELECT CUSTOMER_ID FROM myit_table_customer WHERE CUSTOMER_EMAIL=NEW.CUSTOMER_EMAIL_ADDRESS_FROM_EMAIL)创建触发票证;再次感谢。
  • 脚本工作正常,但如果用户不存在我会遇到错误,我希望它存储电子邮件,即使电子邮件或客户 ID 不存在并为该客户 ID 分配 0。下面是错误的屏幕截图。再次感谢![在此处输入图像描述][1] [1]:i.stack.imgur.com/o3Wbt.png
  • @user3303594 在这种情况下您可以使用 COALESCE,请在此处查看小提琴sqlfiddle.com/#!2/ec112d/1 或者您可以在 CUSTOMED_ID 列中允许空数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
相关资源
最近更新 更多