Я пытаюсь заставить таблицу на основе счетчика работать с предложением о конфликте и, похоже, столкнулся с проблемой.
Моя текущая SQL схема
create table "read_ratio" (
"time_bucket" integer,
"property_id" text,
"view_counter" integer default 0,
"read_counter" integer default 0,
primary key ("time_bucket","property_id"),
unique ("time_bucket","property_id")
);
У меня есть попытался сделать это без первичного ключа с теми же результатами.
Запросы, которые я пытался выполнить и получить Result: near "ON": syntax error
:
INSERT INTO read_ratio (time_bucket, property_id, view_counter)
VALUES ((strftime('%s','now')/60/60/24), 'qwe', 1)
ON CONFLICT(time_bucket) DO UPDATE SET view_counter = view_counter + 1;
INSERT INTO read_ratio (time_bucket, property_id, view_counter)
VALUES ((strftime('%s','now')/60/60/24), 'qwe', 1)
ON CONFLICT(time_bucket, property_id) DO UPDATE SET view_counter = view_counter + 1;
Запросы без условия конфликта вставляются и ограничиваются уникальные работы при повторной попытке. Но я не могу заставить его работать с конфликтом.
Я попробовал почти то же самое в MySQL (его эквивалент), и это сработало:
insert into read_ratio (time_bucket, property_id, view_counter)
values (round(unix_timestamp()/60), 'a3dcb4d229de6fde0db5686dee47145d', 1)
on duplicate key update view_counter = view_counter + 1;
Моя версия SQLite
➜ sqlite3 -version
3.29.0 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88alt1