mySQL数据库条目的条件

时间:2014-04-30 18:15:43

标签: mysql jsp

我正在开发一个应用程序,在该应用程序中,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

不应该允许。

到目前为止,我只指定了多个主键。如果它们毫无用处,我可以改变它们。

请随时询问有关此问题的任何问题。 谢谢!

1 个答案:

答案 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 ;