我正在开发一个应用程序,在该应用程序中,JSP页面将填写在表单上的信息填充到MySQL中的表中。
My table :
+-------- +-------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------- +-------------+------+-----+------------+-------+
|UserID | varchar(10) | NO | PRI | | |
|ino | int(5) | NO | PRI | 0 | |
|epno | int(5) | NO | PRI | 0 | |
|startDate| date | NO | PRI | 0000-00-00 | |
|enddate | date | NO | | | |
|dist | int(4) | YES | | NULL | |
|cost | int(6) | YES | | NULL | |
+---------+-------------+------+-----+------------+-------+
我需要每个用户的StartDate和EndDate时段都是唯一的。 此外,所有条目都不应重叠。
EG。如果userOne输入以下条目
StartDate- April 30,2014 , EndDate:May 5, 2014
并且表中有一个条目:
StartDate- May 2,2014 , EndDate:May 6, 2014
不应该允许。
到目前为止,我只指定了多个主键。如果它们毫无用处,我可以改变它们。
请随时询问有关此问题的任何问题。 谢谢!
答案 0 :(得分:1)
您可以使用BEFORE INSERT
trigger:
DELIMITER ;;
CREATE TRIGGER my_trigger BEFORE INSERT ON my_table FOR EACH ROW
IF EXISTS (
SELECT *
FROM my_table
WHERE StartDate <= NEW.EndDate
AND EndDate >= NEW.StartDate
LIMIT 1
) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Period overlaps with existing record';
END IF;;
DELIMITER ;