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

时间:2018-12-17 09:44:40

标签: mysql innodb

如何为特定列分配唯一的自动递增值?有点像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列已建立索引?

1 个答案:

答案 0 :(得分:0)

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

use QAST; # It does not exist
my $this-qast = QAST::Load("some-external-file.p6") # Would want something like this

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

您也可以手动进行操作:

创建表以存储增量值:

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;

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