Rumah  >  Soal Jawab  >  teks badan

Gunakan pencetus untuk menjana cap masa Unix pada sisipan sambil membenarkan pengklonan rekod sedia ada dan mengelakkan pertindihan

Saya sedang membuat sistem acara. Katakan ada acara yang dipanggil "Go Dance" pada 12 September 2022.

Apabila acara ditambahkan pada pangkalan data, kami mencipta cap waktu unix pada salah satu baris. Kami menggunakan unix_timestamp() lalai untuk melakukan ini

Cap masa ini (cth. 654213987) digunakan sebagai sebahagian daripada URL supaya orang ramai boleh mendaftar untuk acara 654213987. Sebagai contoh, orang ramai boleh mendaftar di sini. http://myevents/signup/654213987

Penganjur acara menulis penerangan acara pada 12 September 2022.

Penganjur acara ingin menganjurkan acara yang sama tahun depan tetapi tidak mahu menulis semula penerangan. Hanya salin atau klon fail asal tanpa memadamkannya.

Ini mudah dilakukan secara pengaturcaraan dalam PHP, tetapi saya menggunakan XCRUD dan saya tidak boleh mengubah suainya, jadi satu-satunya pilihan saya ialah menggunakan pencetus atau sebahagian daripada MYSQL berwayar keras.

Apabila XCRUD membuat salinan, ia menggunakan INSERT biasa yang mengandungi salinan asal tolak salinan induk.

Jika saya membuat lajur unik, ia tidak membenarkan pengklonan. Jika tidak, ia menyalin cap masa.

Adakah mungkin untuk mencipta pencetus (atau mekanisme lain) untuk mengenali bahawa pendua wujud dan menggantikan pendua dengan cap masa baharu yang lain?

Saya melihat pada stackoverflow bahawa anda boleh menambah cap masa menggunakan pencetus, tetapi saya tidak tahu cara melakukannya untuk mengelakkan pertindihan.

P粉947296325P粉947296325283 hari yang lalu332

membalas semua(1)saya akan balas

  • P粉057869348

    P粉0578693482024-01-11 13:58:13

    Contoh.

    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

    balas
    0
  • Batalbalas