Mysql datetime字段的日期部分是否可以具有唯一性?

Mysql datetime字段的日期部分是否可以具有唯一性?,mysql,Mysql,我有一个网站,URL包含年份、月份、日期,以及文章标题生成的永久链接。比如说 www.example.com/1999/12/31/techno-party 但是,由于文章的发布时间需要是每小时,而不仅仅是每个日期(例如,您可以将发布时间设置为一天中的12:00或13:00),这意味着数据库中的发布时间列需要是datetime数据类型,而不仅仅是date。这意味着我可以在12月31日12:00发表一篇关于permalinktechno party的文章,在同一天13:00发表另一篇文章(使用相

我有一个网站,URL包含年份、月份、日期,以及文章标题生成的永久链接。比如说

www.example.com/1999/12/31/techno-party
但是,由于文章的发布时间需要是每小时,而不仅仅是每个日期(例如,您可以将发布时间设置为一天中的12:00或13:00),这意味着数据库中的发布时间列需要是
datetime
数据类型,而不仅仅是
date
。这意味着我可以在12月31日12:00发表一篇关于permalink
techno party
的文章,在同一天13:00发表另一篇文章(使用相同的permalink)(由另一个用户复制,或者错误地,不相关),他们的URL最终将是相同的

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


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

您需要的是基于函数的索引,MySQL不支持这种索引。(请参见PostgreSQL以了解想法)


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

一种解决方案是单独存储日期和时间

否则,您可以尝试添加(“隐藏”)日期字段和触发器

create trigger setArticleDate BEFORE INSERT ON article 
     for each row set NEW.__date = DATE(NEW.publish);
然后在permalink和_日期上创建一个唯一的