如何在mysql中创建唯一的递增计数器

km0tfn4u  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(312)

如何为某一列指定唯一的自动递增值?有点像auto\ u 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 列是否索引?

bkhjykvo

bkhjykvo1#

你可以用触发器来实现。

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插入需要递增的列。

相关问题