Dejó la columna de datos fuera de su ejemplo de inserción, pero la mencionó varias veces, así que asumiré que existe. Además, asumo que es una fecha real (no una marca de tiempo ni una fecha y hora).
Si agrega un índice único en (usuario, acción, fecha), su consulta funcionará.
Aquí está el DDL:
alter table useractions
add unique index unique_idx (user,action,date);
Y su DML (agregando la columna de fecha):
insert into useractions (user, action, times, date) values (2, 3, 1, current_date())
on duplicate key update times = times + 1;