MYSQL查询不允许时间戳列具有来自同一日期的两个值

时间:2017-03-13 12:03:27

标签: mysql sql timestamp

例如,如果用户在时间戳列中插入“2017-03-13 12:16:18.0”, 同一用户不应该被允许在此栏中输入另一个值,如果它在同一天,即2017-03-13(在这种情况下)。或者最终,每当用户尝试在同一天插入两次时间戳日期时,使用先前插入的值('2017-03-13 12:16:18.0')更新时间戳列。我希望我已经足够明确了。

下面是我提出的一个无法运行的查询,但它显示了我希望查询最终要执行的操作。感谢您的帮助和反馈。

INSERT INTO hr.entry(id,entry_time)
VALUES (45,
    CASE WHEN '13-03-2017'= CAST(SYSDATE() AS date) THEN
     (UPDATE hr.entry
     SET entry_time =
    (SELECT entry_time
      FROM hr.entry
      WHERE id=45
      AND CAST(entry_time AS date)= CAST(SYSDATE() AS date) ) 
     ELSE 
  SYSDATE());

2 个答案:

答案 0 :(得分:1)

您可以在表中添加DATE列,并为该列添加唯一索引。然后,当您将时间戳插入时间戳列时,您还可以将该时间戳中的日期插入DATE列。尝试插入其日期组件已存在于该表中的时间戳将导致MySQL抛出错误。

答案 1 :(得分:1)

我认为您将需要一个触发器,除非您使用YYYY-MM-DD HH:MI:SS格式将时间戳存储为字符串。我不是真的推荐这个。

因此,创建一个更新名为=Index($C$2:$C$6,Match(4.19, $B$2:$B$6,0)) 的列的触发器。这只是提取时间戳的日期部分。

使用此列,您可以定义唯一索引:

timestamp_date

这将强制执行您的条件。

如果您决定将时间戳存储为字符串,则不需要触发器(尽管需要手动设置"时间戳")。相反,您可以使用前缀:

create unique index entry_userid_timestampdate on entry(userid, timestamp_date);