我已经创建了这个mysql函数
delimiter //
create function seq(tag int(10)) returns int
begin
update seq set val=last_insert_id(val+1) where tag_code=tag ;
return last_insert_id();
end
//
delimiter ;
CREATE TABLE `seq` (
`tag_code` int(1) NOT NULL,
`val` int(10) unsigned NOT NULL,
PRIMARY KEY (`tag_code`)
) ENGINE=InnoDb DEFAULT CHARSET=latin1
insert into seq values(1,100);
insert into seq values(2,100);
它与 InnoDb 一起工作正常,但有时我的函数调用会超时。 我打算将表引擎切换到MyISAM,但我担心 并发问题。即并行调用此函数可以返回相同的序列
以前有人这样做过吗?
最佳答案
last_insert_id() 函数的行为与表引擎无关。如果它可以为 2 个独立调用返回相同的值,则意味着自动增量功能已损坏,并且具有自动增量字段的 2 条记录可能具有相同的值。
此外,它返回的值是根据每个连接维护的,因此该函数将为不同的连接返回不同的值。
关于MYSQL 序列函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33140408/