搜索

首页  >  问答  >  正文

使用触发器在插入时生成Unix时间戳,同时允许克隆现有记录并避免重复

我正在制作一个事件系统。 假设有一个活动是 2022 年 9 月 12 日的“去跳舞”。

当一个事件被添加到数据库中时,我们会在其中一行上创建一个 unix 时间戳。 我们使用默认值 unix_timestamp() 来执行此操作

此时间戳(例如 654213987)用作网址的一部分,以便人们可以注册活动 654213987。 例如,人们可以在这里注册。 http://myevents/signup/654213987

活动组织者于 2022 年 9 月 12 日撰写了活动说明。

明年活动组织者希望举办同样的活动,但不想重写说明。只需复制或克隆原始文件,而不删除原始文件。

这很容易用 PHP 以编程方式完成,但我使用的是 XCRUD,我无法修改它,所以我唯一的选择是使用触发器或 MYSQL 的某些硬连线部分。

当 XCRUD 制作副本时,它使用普通的 INSERT,其中包含原始副本减去主副本。

如果我使列唯一,则它不允许克隆。 如果不是,它会复制时间戳。

是否可以创建一个触发器(或其他机制)来识别存在重复项并用另一个新时间戳替换重复项?

我在 stackoverflow 上看到可以使用触发器添加时间戳,但我只是不知道如何执行此操作以避免重复。

P粉947296325P粉947296325353 天前394

全部回复(1)我来回复

  • P粉057869348

    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

    回复
    0
  • 取消回复