我已经创建了这个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,但我很担心 并发问题.i.e对此函数的并行调用可以返回相同的序列
之前有没有人这样做过?
答案 0 :(得分:0)
last_insert_id()函数的行为与表引擎无关。如果它可以为2个独立调用返回相同的值,那么这意味着自动增量功能被破坏,2个带有自动增量字段的记录可能具有相同的值。
此外,它返回的值是按连接维护的,因此函数将为不同的连接返回不同的值。