Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencegah Pertindihan Julat Tarikh dalam MySQL?
Menguruskan Julat Tarikh Bertindih dalam MySQL
Memasukkan julat tarikh baharu ke dalam jadual sedia ada boleh menjadi rumit, terutamanya apabila cuba mengelakkan pertindihan dengan entri sedia ada. Dalam konteks ini, kami ingin mengelak daripada memasukkan julat yang bertindih dengan julat dalam pangkalan data untuk pengecam akaun tertentu (acc_id).
Walaupun MySQL menawarkan pilihan untuk mengesahkan tarikh menggunakan kekangan SQL CHECK, malangnya ciri ini tidak disokong oleh MySQL. PostgreSQL, sebaliknya, menyokong kekangan CHECK, tetapi menukar enjin pangkalan data mungkin tidak boleh dilaksanakan untuk semua situasi.
Sebagai alternatif, kami boleh melaksanakan pengesahan dalam logik aplikasi. Satu pendekatan melibatkan penggunaan SELECT COUNT(id) ... pernyataan untuk menyemak pertindihan sebelum mencuba INSERT:
SELECT COUNT(id) FROM avail WHERE acc_id = '175' AND (start_date BETWEEN '2015-05-30' AND '2015-06-04') OR (end_date BETWEEN '2015-05-30' AND '2015-06-04') OR ('2015-05-30' BETWEEN start_date AND end_date) OR ('2015-06-04' BETWEEN start_date AND end_date);
Jika kiraan yang dikembalikan lebih daripada 0, sisipan dibatalkan kerana pertindihan.
Kaedah lain melibatkan penggunaan pencetus dalam MySQL. Pencetus boleh diprogramkan untuk menyemak pertindihan sebelum INSERT/UPDATE berlaku dan membuang ralat jika ada yang ditemui. Pencetus, bagaimanapun, memerlukan versi MySQL yang terkini.
Akhirnya, pilihan pendekatan bergantung pada keperluan khusus aplikasi anda dan kemungkinan melaksanakannya dalam salah satu cara yang disokong.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Pertindihan Julat Tarikh dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!