Ich habe die folgenden drei Tabellen;
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)
Ich versuche, Daten aus zwei Tabellen mit dem folgenden Verfahren in einer anderen Tabelle zusammenzuführen;
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
Erstellen Sie einen Trigger vor dem Einfügungsereignis von hm_deliverylog und rufen Sie den Prozess wie folgt auf:
call mlog_birlestir()
Wenn mit den oben genannten Schritten Datensätze auf hm_deliverylog und hmdeliverylog_recipients erstellt werden, sollten die Daten zusammengeführt und neue Datensätze auf mlog erstellt werden. Aber es überspringt immer den ersten Datensatz und folgt mit einer Verzögerung von einem Datensatz (leider ist mein Englisch nicht gut genug, um diese Situation zu erklären), lassen Sie es mich wie folgt erklären
1-Alle Datensätze in 3 Tabellen gelöscht
2- Fügen Sie den ersten Datensatz in hm_deliverylog und hm_deliverylog_recipients ein
3- Erwarteter Eintrag im mlog: nicht erstellt
4- Erstellen Sie einen zweiten Datensatz auf hm_deliverylog und hm_deliverylog_recipients
5- Zwei Datensätze auf mlog erwartet: Der erste Datensatz wird auf mlog erstellt, aber es gibt keinen zweiten Datensatz
6- Dritter Datensatz auf hm_deliverylog und hm_deliverylog_recipients erstellt
7-Erwartete 3 Datensätze im Mlog: Der zweite Datensatz wurde im Mlog erstellt, aber es gab keinen dritten Datensatz
Hier ist die Sache: Es erstellt immer einen vor dem neuesten Datensatz im Mlog und überspringt den neuesten Datensatz.
Ich habe versucht, das Ereignis des Triggers in AFTER INSERT zu ändern, aber das hat das Problem nicht gelöst.
Auf den ersten beiden vom Programm verarbeiteten Tabellen werden Datensätze erstellt, aber ich habe keine Kontrolle darüber und suche nach einer Problemumgehung, um dieses Problem zu beheben.
Was fehlt mir hier?
感谢@Akina,我解决了这个问题。
我的代码没问题,但我犯了一个逻辑错误,我正在创建调用 hm_deliverylog (第一个表)上的过程的触发器,我应该做的是在 hm_deliverylog_recipients (第二个表)上创建触发器,因为应用程序插入 main首先将数据插入第一个表,然后将收件人数据插入第二个表,因此当我将触发器设置为第一个表时,它会运行但检查第二个表,但第二个表中还没有记录,这就是为什么它不会在第三个表上创建记录表。
当我在第二个表上创建触发器时,它工作得很好。
再次感谢@Akina的提醒