Как сделать уникальный инкрементный счетчик в MySQL - PullRequest
0 голосов
/ 17 декабря 2018

Как назначить уникальные значения автоинкремента для определенного столбца?Вроде как AUTO_INCREMENT, но во время вставки оно должно быть NULL и назначено на более позднем этапе.

У меня есть таблица, которая получает регулярные вставки данных, и несколько рабочих, которые обрабатывают эти данные и устанавливают processed_atполе даты и времени, когда они сделаны.Теперь я хочу постепенно выбирать новые обработанные строки с момента последнего вызова.Если я наивно использую where processed_at > @last_update_time, боюсь, может возникнуть ситуация, когда некоторые записи обрабатываются в одну и ту же секунду, и я пропускаю несколько строк.

update : Могу ли я просто сделать

begin;
select @max := max(foo) from table1;
update table1 set foo = @max + 1 where id = 'bar' limit 1;
commit;

если столбец foo проиндексирован?

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете использовать триггер для реализации этого.

CREATE TABLE my_increment (value INT, table_name TEXT);
INSERT INTO my_increment VALUES (0, 'your_table_name');


CREATE TRIGGER pk AFTER UPDATE ON your_table_name
BEGIN

UPDATE  my_increment 
SET     value = value + 1 
WHERE   table_name = 'your_table_name';

UPDATE  your_table_name 
SET     ID2 = (
            SELECT value 
            FROM my_increment 
            WHERE table_name = 'your_table_name')
WHERE   ROWID = new.ROWID;
END;

Но имейте в виду, что этот триггер будет работать при каждом выполнении запроса на обновление.

Вы также можете сделать это вручную:

Создайте таблицу для хранения значения приращения:

CREATE TABLE my_increment (value INT, table_name TEXT);
INSERT INTO my_increment VALUES (0, 'your_table_name');

Затем, когда вы захотите обновить таблицу, получите последнее значение из этой таблицы и вставьте значение + 1 в столбец, необходимый дляувеличиваться.

...