Verwenden Sie Trigger, um beim Einfügen Unix-Zeitstempel zu generieren und gleichzeitig das Klonen vorhandener Datensätze zu ermöglichen und Duplikate zu vermeiden
P粉947296325
P粉947296325 2024-01-10 17:51:06
0
1
338

Ich mache ein Event-System. Nehmen wir an, am 12. September 2022 findet eine Veranstaltung namens „Go Dance“ statt.

Wenn ein Ereignis zur Datenbank hinzugefügt wird, erstellen wir einen Unix-Zeitstempel in einer der Zeilen. Wir verwenden dazu die Standardeinstellung unix_timestamp()

Dieser Zeitstempel (z. B. 654213987) wird als Teil der URL verwendet, damit sich Personen für die Veranstaltung 654213987 registrieren können. Hier kann man sich zum Beispiel registrieren. http://myevents/signup/654213987

Der Veranstalter hat die Veranstaltungsbeschreibung am 12. September 2022 verfasst.

Der Veranstalter möchte nächstes Jahr die gleiche Veranstaltung veranstalten, möchte aber die Beschreibung nicht umschreiben. Kopieren oder klonen Sie einfach die Originaldatei, ohne sie zu löschen.

Dies lässt sich leicht programmgesteuert in PHP durchführen, aber ich verwende XCRUD und kann es nicht ändern, sodass meine einzigen Optionen darin bestehen, Trigger oder einen fest verdrahteten Teil von MYSQL zu verwenden.

Wenn XCRUD eine Kopie erstellt, verwendet es ein normales INSERT, das die Originalkopie abzüglich der Masterkopie enthält.

Wenn ich die Spalte eindeutig mache, ist das Klonen nicht möglich. Wenn nicht, wird der Zeitstempel kopiert.

Ist es möglich, einen Auslöser (oder einen anderen Mechanismus) zu erstellen, um zu erkennen, dass ein Duplikat vorhanden ist, und das Duplikat durch einen anderen neuen Zeitstempel zu ersetzen?

Ich habe bei Stackoverflow gesehen, dass man mithilfe von Triggern Zeitstempel hinzufügen kann, aber ich weiß einfach nicht, wie ich das machen soll, um Duplikate zu vermeiden.

P粉947296325
P粉947296325

Antworte allen(1)
P粉057869348

示例。

CREATE TABLE test (id INT, ts DATE);
CREATE TRIGGER tr_bi_test_add_1_week
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
    WHILE EXISTS ( SELECT NULL
                   FROM test
                   WHERE ts = NEW.ts ) DO
        SET NEW.ts = NEW.ts + INTERVAL 1 WEEK;
    END WHILE;
END
INSERT INTO test VALUES (1, '2022-01-01'); 
-- inserted as-is
SELECT * FROM test;
id ts
1 2022-01-01
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!