首頁  >  問答  >  主體

使用觸發器在插入時產生Unix時間戳,同時允許複製現有記錄並避免重複

我正在製作一個事件系統。 假設有一個活動是 2022 年 9 月 12 日的「去跳舞」。

當一個事件被加入到資料庫中時,我們會在其中一行上建立一個 unix 時間戳記。 我們使用預設值 unix_timestamp() 來執行此操作

此時間戳記(例如 654213987)用作網址的一部分,以便人們可以註冊活動 654213987。 例如,人們可以在這裡註冊。 http://myevents/signup/654213987

活動組織者於 2022 年 9 月 12 日撰寫了活動說明。

明年活動主辦單位希望舉辦同樣的活動,但不想重寫指示。只需複製或克隆原始文件,而不刪除原始文件。

這很容易用 PHP 以程式設計方式完成,但我使用的是 XCRUD,我無法修改它,所以我唯一的選擇是使用觸發器或 MYSQL 的某些硬連線部分。

當 XCRUD 製作副本時,它使用普通的 INSERT,其中包含原始副本減去主副本。

如果我使列唯一,則它不允許克隆。 如果不是,它會複製時間戳。

是否可以建立一個觸發器(或其他機制)來識別存在重複項並用另一個新時間戳替換重複項?

我在 stackoverflow 上看到可以使用觸發器添加時間戳,但我只是不知道如何執行此操作以避免重複。

P粉947296325P粉947296325283 天前331

全部回覆(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
  • 取消回覆