一个简单的数据库插入时间插入策略

最近写一个项目,数据表插入数据的时候有一个特殊要求:

表结构属性如下: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权限,居然可以访问了。希望对遇到此问题的童鞋有点帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值