我正在制作一个事件系统。 假设有一个活动是 2022 年 9 月 12 日的“去跳舞”。
当一个事件被添加到数据库中时,我们会在其中一行上创建一个 unix 时间戳。 我们使用默认值 unix_timestamp() 来执行此操作
此时间戳(例如 654213987)用作网址的一部分,以便人们可以注册活动 654213987。 例如,人们可以在这里注册。 http://myevents/signup/654213987
活动组织者于 2022 年 9 月 12 日撰写了活动说明。
明年活动组织者希望举办同样的活动,但不想重写说明。只需复制或克隆原始文件,而不删除原始文件。
这很容易用 PHP 以编程方式完成,但我使用的是 XCRUD,我无法修改它,所以我唯一的选择是使用触发器或 MYSQL 的某些硬连线部分。
当 XCRUD 制作副本时,它使用普通的 INSERT,其中包含原始副本减去主副本。
如果我使列唯一,则它不允许克隆。 如果不是,它会复制时间戳。
是否可以创建一个触发器(或其他机制)来识别存在重复项并用另一个新时间戳替换重复项?
我在 stackoverflow 上看到可以使用触发器添加时间戳,但我只是不知道如何执行此操作以避免重复。
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 |