Bagaimana untuk Mencegah Pertindihan Julat Tarikh dalam MySQL?

Linda Hamilton
Lepaskan: 2024-10-27 10:09:30
asal
785 orang telah melayarinya

How to Prevent Date Range Overlaps in 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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!