mysql中int的区间,mysql constarint区间交集

I have mysql table

CREATE TABLE `range` (

`id` int(11) NOT NULL,

`object_id` int NOT NULL,

`datetime_from` datetime NOT NULL,

`datetime_to` datetime NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Please help to provide on mysql level constraint implementation: no time interval intersection for same object_id.

解决方案

A trigger is fine, but by way of demonstrating that no trigger is required, consider the following...

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table (

id SERIAL,

dt_from DATE NOT NULL,

dt_to DATE NOT NULL,

PRIMARY KEY (id)

);

INSERT INTO my_table (dt_from,dt_to)

VALUES

('2018-05-31','2018-06-03');

-- Attempt 1: conflicting dates

SET @dt_from = '2018-05-28';

SET @dt_to = '2018-06-01';

INSERT INTO my_table (dt_from,dt_to)

SELECT @dt_from

, @dt_to

FROM (SELECT 1) x

LEFT

JOIN my_table y

ON y.dt_from < @dt_to

AND y.dt_to > @dt_from

WHERE y.id IS NULL;

-- Attempt 2: Non-conflicting dates

SET @dt_from = '2018-06-04';

SET @dt_to = '2018-06-06';

INSERT INTO my_table (dt_from,dt_to)

SELECT @dt_from

, @dt_to

FROM (SELECT 1) x

LEFT

JOIN my_table y

ON y.dt_from < @dt_to

AND y.dt_to > @dt_from

WHERE y.id IS NULL;

SELECT * FROM my_table;

+----+------------+------------+

| id | dt_from | dt_to |

+----+------------+------------+

| 1 | 2018-05-31 | 2018-06-03 |

| 2 | 2018-06-04 | 2018-06-06 |

+----+------------+------------+

See. Conflicting dates are ignored.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值