Mysqli的唯一范围为2列
在过去的几天里,我一直在研究如何使mysqli中的2列的范围独一无二。例如,column1的值为2,column2的值为6。如果用户试图将第3、4、5列中的任何一列作为其他行输入,则必须返回错误。我可以在php中检查所有行,但如果记录太多,则会降低性能 对于我的场景,我有一个From数据(存储在unix时间戳中)和Till数据(同样存储在unix时间戳中) 例如Mysqli的唯一范围为2列,mysql,Mysql,在过去的几天里,我一直在研究如何使mysqli中的2列的范围独一无二。例如,column1的值为2,column2的值为6。如果用户试图将第3、4、5列中的任何一列作为其他行输入,则必须返回错误。我可以在php中检查所有行,但如果记录太多,则会降低性能 对于我的场景,我有一个From数据(存储在unix时间戳中)和Till数据(同样存储在unix时间戳中) 例如 1497913200(20/06/2017)和1498518000(27/06/2017) 这两个日期之间的任何内容都必须无效 例如2
1497913200(20/06/2017)
和1498518000(27/06/2017)
这两个日期之间的任何内容都必须无效
例如2017年6月22日-2017年6月29日
或2017年6月18日-2017年6月26日
而2017年6月28日-2017年7月3日
或2017年6月12日-2017年6月19日
均有效
我想你明白了,但如果需要,我可以详细说明
我显然知道如何制作唯一的多列,但不知道这些列的范围。这就是我正在努力解决的问题
非常感谢您的帮助。我相信您需要编写一个
触发器来执行此检查,例如:
CREATE TRIGGER date_check_trigger BEFORE INSERT ON `table` FOR EACH ROW
BEGIN
SET @EXISTING_RECORD_COUNT = (SELECT COUNT(*) FROM `table` WHERE NEW.date BETWEEN start_date AND end_date)
IF (@EXISTING_RECORD_COUNT > 0) THEN
SIGNAL SQLSTATE '45000' set message_text='Invalid date, a range already exists';
END IF;
END
看:我甚至还没有这张表,因为我想先把这背后的逻辑搞定。因为我不想走错路。表与否我拥有的唯一“真实”或样本数据就是上面提供的数据。好吧,你可能比从这里开始做得更糟(即使我自己这么说;-)。。。这会阻止用户在插入时输入吗?还是之后?是的,是的。它将显示一条错误消息,并且不允许用户插入记录。好的,我知道您正在尝试执行的操作,尽管它需要根据我的场景进行调整,所以我不会将其标记为已接受的答案只是Yet标记答案很琐碎,我想说的是,您不能有唯一的约束来执行我们想要执行的扫描类型。因此,最好写一个触发器。换句话说,你是说它是一个触发器或更高级别的方法,这意味着我应该用php来做这件事,然后用它来做