我一直在寻找这一天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)
=============================================== === 任何想法为什么会发生这种情况?
谢谢。
答案 0 :(得分:1)
回答自己:
如果它能帮助其他人,那就是答案:
进一步调查显示问题是:
添加新行的Web表单暂时插入一个空行,然后在第二步中使用实际值更新它。这解释了为什么在NEW中只有主键ID字段是非空白的。插入触发器的一行。我通过创建一个After update触发器找到了这个,当我用web表单添加一个新行时,我可以看到它触发。很奇怪,也不确定表单开发人员为什么会这样做。