如何在MySQL中制作唯一的递增计数器



如何为某一列分配唯一的自动递增值?有点像AUTO_INCREMENT,但它在插入时应该为NULL,并在以后的某个时间点进行赋值。

我有一个获取定期数据插入的表,还有一些处理这些数据并在完成后设置processed_at日期时间字段的工作人员。现在,我希望自上次调用以来,以增量方式选择新处理的行。如果我天真地使用where processed_at > @last_update_time,我担心可能会出现这样的情况:一些记录在同一秒被处理,而我错过了一些行。

更新:我可以只做吗

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

如果foo列被索引?

您可以使用触发器来实现它。

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;

但请记住,此触发器将在每次执行Update查询时起作用。

你也可以手动操作:

创建表以存储增量值:

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

然后,当您想要更新该表时,从该表中获取最后一个值,并将值+1插入到需要递增的列中。

最新更新