是否可以在日期时间字段的日期部分使用UNIQUE?

时间:2015-10-29 21:16:56

标签: mysql

我有一个网站,其中网址包含年份,月份,日期以及文章标题生成的永久链接。例如

www.example.com/1999/12/31/techno-party

但由于文章的发布时间需要每小时,而不仅仅是每个日期(例如,您可以将发布时间设置为白天的12:00或13:00),这意味着发布时间列在数据库需要是datetime数据类型,而不仅仅是date。这意味着我可以在12月31日中午12点发布一篇永久链接techno-party的文章,并在同一天13:00发布另一篇文章(具有相同的固定链接)(重复)由另一个用户创建,或者是错误的,不相关的),并且他们的URL最终将是相同的。

因此,为了避免在这种情况下重复,我需要一个永久链接字符串,月份,日期和年份的唯一索引。但显然,如果我在permalink列和datetime列上设置UNIQUE索引,我仍然可以有很多重复项,因为它只会限制它们以相同的秒发布。

理论上我需要的是来自datetime列(忽略小时/分钟/秒)+ permalink列的年,月和日期值的唯一索引。但是从数据库级别可以做到这样吗?

2 个答案:

答案 0 :(得分:0)

您正在寻找的是基于函数的索引,MySQL不支持该索引。 (请参阅PostgreSQL docs以获得想法)。

作为一种变通方法,您可以为日期部分添加单独的索引列,并使用插入和更新触发器填充它。

答案 1 :(得分:0)

一种解决方案是分别存储日期和时间。

否则,您可以尝试添加("隐藏")DATE字段和触发器。

create trigger setArticleDate BEFORE INSERT ON article 
     for each row set NEW.__date = DATE(NEW.publish);

然后在永久链接和__date上创建一个UNIQUE。