處理MySQL 中的重疊日期範圍
將新日期範圍插入到現有表中可能會很棘手,尤其是在嘗試防止與現有條目。在這種情況下,我們希望避免插入與特定帳戶識別碼 (acc_id) 的資料庫中的範圍重疊的範圍。
雖然 MySQL 提供了使用 SQL CHECK 約束來驗證日期的選項,但遺憾的是,該功能並未提供由 MySQL 支援。另一方面,PostgreSQL 支援 CHECK 約束,但切換資料庫引擎可能並不適用於所有情況。
作為替代方案,我們可以在應用程式邏輯中實現驗證。一種方法是在嘗試 INSERT 之前使用 SELECT COUNT(id) ... 語句檢查重疊:
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);
如果傳回的計數大於 0,則因重疊而中止插入。
另一種方法涉及使用MySQL 中的觸發器。可以對觸發器進行編程,以在發生 INSERT/UPDATE 之前檢查重疊,並在發現任何重疊時拋出錯誤。然而,觸發器需要最新的 MySQL 版本。
最終,方法的選擇取決於應用程式的特定要求以及以受支援的方式之一實現它的可行性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3