一個簡單的數據庫插入時間插入策略

最近寫一個項目,數據表插入數據的時候有一個特殊要求:

表結構屬性如下:id startime endtime value;

插入數據的要求就是插入的時間段starttime-endtime不能在已有記錄的starttime-endtime之間。

舉個例子:加入已有的記錄如下

1 3:00 5:00 10;2 6:00 8:00 20;3 10:00 14:00 15;4 16:00 10:00 20

那麼插入的數據不能是4:00-5:00,因爲4:00已經在3:00-5:00時間段中,也不能是2:00-9:00,因爲包含了3:00-5:00和6:00-8:00的時間段。

開始覺得有點麻煩,不過仔細想想還是很好操作。

首先排除記錄中所有endtime小於插入的st(新插入的starttime)的數據。用剩下的數據集來比較。

然後起始時間(st)大於starttime小於endtime的不得插入;

結束時間et(新插入的endtime)大於starttime小於endtime的不得插入;

起始時間(st)小於starttime,並且結束時間(et)大於endtime的不得插入;

最後在mybatis下的查詢不可插入的記錄的sql語句如下

<select id="getTimeToCompare" resultType="Time" parameterMap="paraMap">
        <![CDATA[
        select * from Time where id = #{id} and endtime > #{starttime} and 
        ((starttime <= #{starttime} and endtime >= #{starttime}) or
        (starttime <= #{endtime} and endtime >= #{endtime}) or
        (starttime >= #{starttime} and endtime <= #{endtime}))
        ]]>
    </select>

最後記錄一個mysql小異常的處理。最近在linux下面裝載了mysql後,如果用其他可視化工具遠程連接的時候,居然報Errorcode:13的錯誤,看意思是臨時目錄沒有權限。於是我就把linux下的tmp目錄改成777權限,居然可以訪問了。希望對遇到此問題的童鞋有點幫助!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章