我有以下三个表;
hm_deliverylog +------------+----------------------------------+------------------------------------------------------------------------------------+---------------------+-----------------+--------------------------+-------------------+----------+---------+ | deliveryid | deliveryfrom | deliveryfilename | deliverytime | deliverysubject | deliverybody | deliveryipaddress | subjnotr | islendi | +------------+----------------------------------+------------------------------------------------------------------------------------+---------------------+-----------------+--------------------------+-------------------+----------+---------+ | 1 | [email protected] | C:\Program Files (x86)\hMailServer\Data\{BACBEB1F-3852-4CD0-A963-337CA956879E}.eml | 2022-04-11 12:47:13 | Hmail Test | TEST MESAJI PLAIN-TEXT | NULL | NULL | 0 | +------------+----------------------------------+------------------------------------------------------------------------------------+---------------------+-----------------+--------------------------+-------------------+----------+---------+ 1 row in set (0.002 sec) m_deliverylog_recipients +---------------------+------------+--------------------------+ | deliveryrecipientid | deliveryid | deliveryrecipientaddress | +---------------------+------------+--------------------------+ | 1 | 1 | [email protected] | +---------------------+------------+--------------------------+ mlog +-------+-------+---------------------+-----------+------------------+------------+---------+---------------------+-----------+------------+ | pr_id | delid | gonderen | gonip | alici | konu | mesaj | gontar | olusturma | guncelleme | +-------+-------+---------------------+-----------+------------------+------------+---------+---------------------+-----------+------------+ | 1 | 1 | [email protected] | 10.0.0.83 | [email protected] | Hmail Test | Testing | 2022-05-13 09:37:16 | NULL | NULL | +-------+-------+---------------------+-----------+------------------+------------+---------+---------------------+-----------+------------+ 1 row in set (0.000 sec)
我正在尝试使用以下过程将两个表的数据合并到另一个表;
CREATE DEFINER=`root`@`localhost` PROCEDURE `mlog_birlestir`() LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN INSERT INTO mlog (delid,gonderen,gonip,alici,konu,mesaj,gontar) SELECT hm_deliverylog.deliveryid, hm_deliverylog.deliveryfrom, hm_deliverylog.deliveryipaddress, hm_deliverylog_recipients.deliveryrecipientaddress, hm_deliverylog.deliverysubject, hm_deliverylog.deliverybody, hm_deliverylog.deliverytime from hm_deliverylog,hm_deliverylog_recipients WHERE hm_deliverylog.deliveryid=hm_deliverylog_recipients.deliveryid; END
在 hm_deliverylog 的插入事件之前创建触发器并调用过程如下;
call mlog_birlestir()
通过上述步骤,当在 hm_deliverylog 和 hmdeliverylog_recipients 上创建记录时,它应该合并数据并在 mlog 上创建新记录。但它总是跳过第一条记录并跟随延迟1条记录(抱歉我的英语不足以解释这种情况),让我解释如下;
1-删除了3个表上的所有记录
2- 将第一条记录插入到 hm_deliverylog 和 hm_deliverylog_recipients
3- mlog 上期望的记录:未创建
4- 在 hm_deliverylog 和 hm_deliverylog_recipients 上创建第二条记录
5- mlog 上预期有两条记录:mlog 上已创建第一条记录,但没有第二条记录
6- 在 hm_deliverylog 和 hm_deliverylog_recipients 上创建了第三条记录
7-mlog 上预期有 3 条记录:mlog 上已创建第二条记录,但没有第三条记录
事情是这样的,它总是在 mlog 上的最新记录之前创建一条并跳过最新记录。
我尝试将触发器的事件更改为 AFTER INSERT 但没有解决问题。
在程序处理的前两个表上创建记录,但我无法控制它,我正在寻找解决此问题的解决方法。
我在这里缺少什么?
感谢@Akina,我解决了这个问题。
我的代码没问题,但我犯了一个逻辑错误,我正在创建调用 hm_deliverylog (第一个表)上的过程的触发器,我应该做的是在 hm_deliverylog_recipients (第二个表)上创建触发器,因为应用程序插入 main首先将数据插入第一个表,然后将收件人数据插入第二个表,因此当我将触发器设置为第一个表时,它会运行但检查第二个表,但第二个表中还没有记录,这就是为什么它不会在第三个表上创建记录表。
当我在第二个表上创建触发器时,它工作得很好。
再次感谢@Akina的提醒