Maison > Questions et réponses > le corps du texte
Je crée un système d'événements. Disons qu'il y a un événement appelé « Go Dance » le 12 septembre 2022.
Lorsqu'un événement est ajouté à la base de données, nous créons un horodatage unix sur l'une des lignes. Nous utilisons le unix_timestamp() par défaut pour ce faire
Cet horodatage (par exemple 654213987) est utilisé dans le cadre de l'URL afin que les gens puissent s'inscrire à l'événement 654213987. Par exemple, les gens peuvent s'inscrire ici. http://myevents/signup/654213987
L'organisateur de l'événement a rédigé la description de l'événement le 12 septembre 2022.
L'organisateur de l'événement souhaite organiser le même événement l'année prochaine mais ne veut pas réécrire la description. Copiez ou clonez simplement le fichier original sans le supprimer.
Cela se fait facilement par programme en PHP, mais j'utilise XCRUD et je ne peux pas le modifier, donc mes seules options sont d'utiliser des déclencheurs ou une partie câblée de MYSQL.
Lorsque XCRUD effectue une copie, il utilise un INSERT normal contenant la copie originale moins la copie principale.
Si je rends la colonne unique, cela ne permet pas le clonage. Sinon, il copie l'horodatage.
Est-il possible de créer un déclencheur (ou un autre mécanisme) pour reconnaître qu'un doublon existe et remplacer le doublon par un autre nouvel horodatage ?
J'ai vu sur stackoverflow que vous pouvez ajouter des horodatages à l'aide de déclencheurs, mais je ne sais tout simplement pas comment le faire pour éviter la duplication.
P粉0578693482024-01-11 13:58:13
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 |