我们的项目要求一张桌子上只允许有一个将来的带日期记录。每个表都使用开始日期和结束日期维护记录版本。下面的屏幕快照中附有一个示例场景。 (假设今天的日期是2019年3月7日)
因此,如何限制数据库表具有多个将来的带日期记录。是否有任何约束或触发器将有助于从数据库本身进行验证?(我正在使用MySQL数据库)
答案 0 :(得分:0)
一种简单的方法可能是例如在触发器中用null覆盖结束日期
drop trigger if exists t;
delimiter $$
create trigger t before insert on t
for each row
begin
declare cnt int default 0;
select count(*) into cnt from t where end_date > date(now());
if cnt > 0 then
set new.end_date = null;
end if;
end $$
delimiter ;
insert into t (designation,end_date) values
('a','2019-03-07'),('a','2019-03-07'),('a','2019-04-07'),('a','2019-04-07'),
('b','2019-04-07');
select * from t;
+----+-------------+------------+
| id | designation | end_date |
+----+-------------+------------+
| 1 | a | 2019-03-07 |
| 2 | a | 2019-03-07 |
| 3 | a | 2019-04-07 |
| 4 | a | NULL |
| 5 | b | NULL |
+----+-------------+------------+
5 rows in set (0.00 sec)
如果愿意,可以通过if是否存在测试来稍微调整代码。