Функциональные индексы реализованы в MySQL начиная с версии 8.0.15. Например, вы можете сделать:
ALTER TABLE tbl_ps ADD UNIQUE unique_index(
UserId, VillageId, SubcategoryId, (date(updatedatetime))
);
Не забудьте писать выражения в круглых скобках.
Затем вы можете запустить:
insert into tbl_ps (UserId, VillageId, SubcategoryId, updatedatetime)
values (1, 2, 3, '2020-03-04 12:34:56'); -- succeeds
insert into tbl_ps (UserId, VillageId, SubcategoryId, updatedatetime)
values (1, 2, 3, '2020-03-04 15:16:17'); -- fails!
См. Пример выполнения в db <> скрипка .