Rumah > Soal Jawab > teks badan
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粉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 |