Geplantes Ereignis zum Kopieren von Daten von einer Tabelle in eine andere in MySQL gibt leere Ergebnisse zurück
P粉615886660
P粉615886660 2023-09-09 09:47:01
0
1
621

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粉615886660
P粉615886660

Antworte allen(1)
P粉092778585

你每分钟运行一次事件并想要输入最后三分钟,我不知道你有那么多新插入,或者你需要一个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 ;
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!