MySQL新。 AFTER INSERT触发器

时间:2016-11-26 17:53:06

标签: mysql

我一直在寻找这一天2天。我有一个简单的MySQL AFTER INSERT触发器将新数据插入第二个表。但是,当我运行触发器时,第二个表具有所有空白字段,除了第一个表中的外键ID ....所有其他字段都是空的。这似乎是新的。插入触发器中的值在不应该是空白时为空白。

插入触发后的第一张表:

CREATE TABLE IF NOT EXISTS `joom_cck_store_form_smart_mail_forward` (
  `id` int(10) unsigned NOT NULL,
  `mailbox_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `domain_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `forward_email_address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `mailbox_comment` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `forward_to_persons_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `MailboxName` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

插入触发后:

DELIMITER //

Create TRIGGER joom_cck_store_form_smart_mail_forward_after_insert
AFTER INSERT
   ON joom_cck_store_form_smart_mail_forward FOR EACH ROW

BEGIN

   DECLARE zDBname varchar(100);

   -- Insert record into main smart mail forward system table
   INSERT INTO zEmailForward(source_id, mailbox_name, domain_name, comment_text, recipient_email_address, recipient_name) 
       VALUES (NEW.id, NEW.mailbox_name, NEW.domain_name, NEW.mailbox_comment, NEW.forward_email_address, NEW.forward_to_persons_name);

END; //

DELIMITER ;

在主要表格中插入新行后的结果

主表中的行在填写完所有值时保存正常.AFTER INSERT触发器运行并在第二个表(zEmailForward)中插入一行。但是,只有prmary表中的source_id字段在zEmailForward表中具有值; zEmailForward中的所有其他列都是空白的。新的。触发器中的值都是空白的,即使它们不应该是。

===================================================================
PRIMARY TABLE (joom_cck_store_form_smart_mail_forward) ROW:
===================================================================
id   MailboxName   domain_name   forward_email_address   mailbox_comment   forward_to_persons_name   
10   Test          domain.com    test@testemail.com      this is a test       Test Person

===================================================================
2nd TABLE (zEmailForward) ROW CREATED BY THE AFTER INSERT TRIGGER:
===================================================================
ID source_id   MailboxName   domain_name   recipient_email_address   comment_text   recipient_name   
1  10   

因此,您可以看到将joom_cck_store_form_smart_mail_forward中的ID复制到zEmailForward字段的source_id就好了....但是zEmailForward中的所有其他字段都是空白的。

===================================

数据库服务器信息

服务器:通过UNIX套接字的Localhost 服务器类型:Percona Server 服务器版本:5.6.31-77.0-log - Percona Server(GPL),版本77.0,修订版5c1061c 协议版本:10 服务器字符集:UTF-8 Unicode(utf8)

=============================================== === 任何想法为什么会发生这种情况?

谢谢。

1 个答案:

答案 0 :(得分:1)

回答自己:

如果它能帮助其他人,那就是答案:

进一步调查显示问题是:

添加新行的Web表单暂时插入一个空行,然后在第二步中使用实际值更新它。这解释了为什么在NEW中只有主键ID字段是非空白的。插入触发器的一行。我通过创建一个After update触发器找到了这个,当我用web表单添加一个新行时,我可以看到它触发。很奇怪,也不确定表单开发人员为什么会这样做。