Это очень сложно в MySQL.Вы сохраняете datetime
, но хотите, чтобы часть даты была уникальной.
Начиная с MySQL 5.7.?, Вы можете использовать вычисляемые столбцы для ограничения уникальности.Вот пример:
create table expense_history (
user_id int,
camp_id int,
amount int default 0,
clicks int default 1,
. . .
created_datetime datetime, -- note I changed the name
created_date date generated always as (date(created_datetime)),
unique (user_id, camp_id, created_datetime)
);
Затем вы можете выполнить работу следующим образом:
INSERT INTO expense_history (camp_id, created_datetime, amount, user_id)
VALUES (80, '2018-06-02 12:12:12', 1, 40)
ON DUPLICATE KEY UPDATE
amount = COALESCE(amount + 1, 1),
clicks = COALESCE(clicks + 1, 1);
Более ранние версии MySQL не поддерживают сгенерированные столбцы.Они также не поддерживают функции на unique
.Но вы можете использовать трюк с индексом префикса на varchar, чтобы сделать то, что вы хотите:
create table expense_history (
user_id int,
camp_id int,
amount int default 0,
clicks int default 1,
. . .
created_datetime varchar(19),
unique (created_datetime(10))
);
Это имеет тот же эффект.
Другой альтернативой является сохранение даты и времени.в отдельных столбцах.