Heim  >  Fragen und Antworten  >  Hauptteil

Geplantes Ereignis zum Kopieren von Daten von einer Tabelle in eine andere in MySQL gibt leere Ergebnisse zurück

Läuft auf dem lokalen phpMyAdmin-Server: Ich habe zwei Tabellen: user(有数据)和user_t(leer). Sie haben die gleichen Spaltennamen, die gleiche Reihenfolge und den gleichen Typ (user_t Tabelle hat eine zusätzliche Spalte zum Zeitstempeln der Eingabe).

Ich möchte ein 计划事件来检查每个用户日志的时间戳是否具有特定值,如果存在,我想将其复制到user_t 同时从 user erstellen, um es zu löschen. sehr einfach.

Das Löschen funktioniert einwandfrei. Es ist das INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;, das mich in Schwierigkeiten bringt.

Dies ist der Code, den ich zum Erstellen der Veranstaltung verwendet habe:

CREATE EVENT users_u
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO 
INSERT INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
DELETE FROM user WHERE reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;

Allerdings kommt es immer wieder 空结果. Also dachte ich, ich mache etwas falsch. Können Sie mir ernsthaft helfen, diesen Code zum Laufen zu bringen? Schließlich stammt es aus einem Tutorial und sollte in Ordnung sein.

Ich habe versucht, Code zu verwenden und habe sogar darüber nachgedacht, etwas zu recherchieren 事务, aber es scheint zu umfangreich für diese Art von Operation zu sein.

Bearbeiten

Nachdem ich mit dem Code von nbk herumgespielt habe, habe ich es endlich herausgefunden und hier ist der Code, der bei mir funktioniert hat (ich habe die Tabellen- und Spaltennamen verallgemeinert, damit sie niemanden irreführen):

DELIMITER $$
CREATE EVENT event_name 
ON SCHEDULE EVERY 1 MINUTE 
STARTS CURRENT_TIMESTAMP 
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR 
DO 
    BEGIN 
    INSERT INTO empty_table (col_name1, col_name2, col_name3, col_name4, col_name5) 
    SELECT col_name1, col_name2, col_name3, col_name4, col_name5 FROM data_table WHERE col_name < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; 
    DELETE FROM data_table WHERE col_name < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE; 
    END $$
DELIMITER ;

Ich hoffe, es hilft Menschen wie mir in Zukunft. Nochmals vielen Dank nbk für die schnelle Hilfe. Vielen Dank, natürlich ist Ihre Antwort richtig.

P粉615886660P粉615886660407 Tage vor588

Antworte allen(1)Ich werde antworten

  • P粉092778585

    P粉0927785852023-09-10 00:57:50

    你每分钟运行一次事件并想要输入最后三分钟,我不知道你有那么多新插入,或者你需要一个Python脚本或者这样插入一小时 ==>出于测试目的,我将频率设置为 1 分钟...

    您仍然应该重写您的事件。

    首先,您是否真的想要重复项,也许是INSERT IGNORE,如果违反约束,它将输入新行

    第二,如果你有不止一个语句,你需要一个BEGIN END

    DELIMITER $$
    CREATE EVENT users_u
    ON SCHEDULE EVERY 1 MINUTE
    STARTS CURRENT_TIMESTAMP
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO 
        BEGIN
            INSERT IGNORE INTO user_t SELECT * FROM user WHERE user.reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
            DELETE FROM user WHERE reg < CURRENT_TIMESTAMP - INTERVAL 3 MINUTE;
        END $$
    DELIMITER ;

    Antwort
    0
  • StornierenAntwort