搜索

首页  >  问答  >  正文

MySQL 过程跳过最新记录

我有以下三个表;

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 但没有解决问题。

在程序处理的前两个表上创建记录,但我无法控制它,我正在寻找解决此问题的解决方法。

我在这里缺少什么?

P粉550323338P粉550323338260 天前489

全部回复(1)我来回复

  • P粉294954447

    P粉2949544472024-04-04 16:33:24

    感谢@Akina,我解决了这个问题。

    我的代码没问题,但我犯了一个逻辑错误,我正在创建调用 hm_deliverylog (第一个表)上的过程的触发器,我应该做的是在 hm_deliverylog_recipients (第二个表)上创建触发器,因为应用程序插入 main首先将数据插入第一个表,然后将收件人数据插入第二个表,因此当我将触发器设置为第一个表时,它会运行但检查第二个表,但第二个表中还没有记录,这就是为什么它不会在第三个表上创建记录表。

    当我在第二个表上创建触发器时,它工作得很好。

    再次感谢@Akina的提醒

    回复
    0
  • 取消回复